diff --git a/0000Boot/0000Kernel.BIN.C b/0000Boot/0000Kernel.BIN.C index ffd9f3d..e1b8dc8 100644 Binary files a/0000Boot/0000Kernel.BIN.C and b/0000Boot/0000Kernel.BIN.C differ diff --git a/Adam/ABlkDev/FileMgr.HC b/Adam/ABlkDev/FileMgr.HC index eb8e768..d3bffa5 100644 --- a/Adam/ABlkDev/FileMgr.HC +++ b/Adam/ABlkDev/FileMgr.HC @@ -566,14 +566,14 @@ U0 FMRightClick() } } -U8 *fm_ip_str=NULL; +U8 *fm_ms_str=NULL; U0 (*fp_old_final_scrn_update)(CDC *dc); U0 FMFinalScrnUpdate(CDC *dc) { - if (fm_ip_str) { + if (fm_ms_str) { dc->color=LTRED; - GrPrint(dc,ip.pos.x,ip.pos.y,"%s",fm_ip_str); + GrPrint(dc,ms.pos.x,ms.pos.y,"%s",fm_ms_str); } (*fp_old_final_scrn_update)(dc); } @@ -581,7 +581,7 @@ U0 FMFinalScrnUpdate(CDC *dc) public U8 *FileMgr(I64 mode=FM_NORMAL,CTask *mem_task=NULL) {//File manager. Also, used to choose files and dirs. CDirEntry *head=NULL,*tmpde,*tmpde1,*tmpde2; - I64 sc,ch,a1,a2,msg_code; + I64 sc,ch,arg1,arg2,msg_code; CDoc *doc=NULL,*old_put_doc=DocPut,*old_display_doc=DocDisplay; U8 *res=NULL,*st,*st2,*old_cur_dir=CurDir; CDocEntry *doc_ce=NULL,*doc_e; @@ -600,26 +600,26 @@ public U8 *FileMgr(I64 mode=FM_NORMAL,CTask *mem_task=NULL) } do { DocUnlock(doc); - do msg_code=GetMsg(&a1,&a2,1<cur_entry; - fm_ip_str=doc_ce->tag; + fm_ms_str=doc_ce->tag; gr.fp_final_scrn_update=&FMFinalScrnUpdate; break; - case MSG_IP_L_UP: + case MSG_MS_L_UP: if (doc_ce) { gr.fp_final_scrn_update=fp_old_final_scrn_update; - if (WinCursorPosSet(Fs,a1+Fs->pix_left+Fs->scroll_x, - a2+Fs->pix_top+Fs->scroll_y,TRUE)) { + if (WinCursorPosSet(Fs,arg1+Fs->pix_left+Fs->scroll_x, + arg2+Fs->pix_top+Fs->scroll_y,TRUE)) { doc_e=doc->cur_entry; if (doc_e!=doc_ce) { st2=NULL; @@ -678,7 +678,7 @@ public U8 *FileMgr(I64 mode=FM_NORMAL,CTask *mem_task=NULL) break; case MSG_KEY_DOWN: doc_ce=NULL; - ch=a1; sc=a2; + ch=arg1; sc=arg2; if (sc.u8[0]==SC_DELETE && !(sc&(SCF_SHIFT|SCF_CTRL))) ch=CH_CTRLY; if (ch && sc&SCF_ALT) goto fm_regular_key; diff --git a/Adam/ABlkDev/Mount.HC b/Adam/ABlkDev/Mount.HC index 01df9ef..4d10b0d 100644 --- a/Adam/ABlkDev/Mount.HC +++ b/Adam/ABlkDev/Mount.HC @@ -1,13 +1,14 @@ #help_index "Install;File/Cmd Line (Typically);Cmd Line (Typically);" -I64 Mount2(U8 boot_drv_let,CDoc *_doc,Bool repartition) +U8 Mount2(U8 boot_drv_let,CDoc *_doc,Bool _caller_is_prtdsk) {//If _doc, called by $LK,"::/Kernel/KCfg.HC"$ else called by $LK,"Mount",A="MN:Mount"$(). - I64 cnt,res=0,num_hints,drv_let,type,unit; + I64 cnt,total=0,num_hints,drv_let,type,unit,prt_num; U8 blks_buf[STR_LEN],addr_buf[STR_LEN],base0_buf[STR_LEN],base1_buf[STR_LEN], - *filename=NULL,*filename2=NULL; + *filename=NULL,*filename2=NULL,res=0; CATARep *head=NULL,*tmpha; - Bool one_drv,make_free; + Bool whole_drv,make_free; CDoc *doc; - boot_drv_let=ToUpper(boot_drv_let); + if (boot_drv_let) + boot_drv_let=Let2Let(boot_drv_let); do { cnt=0; if (!_doc) @@ -19,10 +20,10 @@ I64 Mount2(U8 boot_drv_let,CDoc *_doc,Bool repartition) "$$GREEN$$Q$$FG$$-$$GREEN$$S$$FG$$ are ISO file write drives.\n" "$$GREEN$$T$$FG$$-$$GREEN$$Z$$FG$$ are ATAPI CD/DVD drives.\n" "\nDrive Letter ($$PURPLE$$$$FG$$ to exit):"; - drv_let=ToUpper(GetChar); + drv_let=Let2Let(GetChar); '\n'; if (type=Let2BlkDevType(drv_let)) { - one_drv=FALSE; + whole_drv=FALSE; if (_doc) { //Called by $LK,"::/Kernel/KCfg.HC"$ doc=_doc; make_free=FALSE; @@ -32,6 +33,7 @@ I64 Mount2(U8 boot_drv_let,CDoc *_doc,Bool repartition) make_free=TRUE; } unit=0; + prt_num=MIN_I64; switch (type) { case BDT_RAM: "Addr of RAM disk ($$PURPLE$$$$FG$$ to MAlloc):"; @@ -44,6 +46,7 @@ I64 Mount2(U8 boot_drv_let,CDoc *_doc,Bool repartition) filename=GetStr("File Name:"); break; case BDT_ATA: + prt_num=GetI64("Partition Num (Default=All):",prt_num); case BDT_ATAPI: num_hints=ATARep(,,&head); if (type==BDT_ATAPI && boot_drv_let) @@ -87,6 +90,8 @@ I64 Mount2(U8 boot_drv_let,CDoc *_doc,Bool repartition) case BDT_ISO_FILE_WRITE: if (!*blks_buf) StrCpy(blks_buf,"0"); DocPrint(doc,"bd->max_blk=(%s)-1;\n",blks_buf); + DocPrint(doc,"bd->drv_offset=19<<2+" + "(DVD_BLK_SIZE*2+DVD_BOOT_LOADER_SIZE)/BLK_SIZE;\n"); break; case BDT_ISO_FILE_READ: filename2=FileNameAbs(filename); @@ -102,31 +107,37 @@ I64 Mount2(U8 boot_drv_let,CDoc *_doc,Bool repartition) make_free=TRUE; } else DocPrint(doc,"bd->base0=%s;bd->base1=%s;\n",base0_buf,base1_buf); - if (type==BDT_ATA && repartition) { + if (type==BDT_ATA && _caller_is_prtdsk) { "\nReformat WHOLE drive!"; - one_drv=YorN; + whole_drv=YorN; } break; } - DocPrint(doc,"BlkDevAdd(bd,%d,%d);\n",one_drv,make_free); + DocPrint(doc,"BlkDevAdd(bd,%d,%d,%d);\n",prt_num,whole_drv,make_free); if (_doc) //Called by $LK,"::/Kernel/KCfg.HC"$ cnt++; else { //Called by $LK,"Mount",A="MN:Mount"$() - if ((cnt=ExeDoc(doc)) && one_drv) - PrtDsk(drv_let); + if ((cnt=ExeDoc(doc)) && whole_drv) { + if (_caller_is_prtdsk) { + res=drv_let; + PrtDsk(drv_let,1.0); //First mount whole drive. + } else + PrtDsk(drv_let); + } DocDel(doc); } } - res+=cnt; - } while (cnt || !res && _doc); //At least 1 if Called by $LK,"::/Kernel/KCfg.HC"$ + total+=cnt; + } while (cnt && !_caller_is_prtdsk || + !total && _doc); //At least 1 if Called by $LK,"::/Kernel/KCfg.HC"$ Free(filename); Free(filename2); return res; } -public I64 Mount(Bool repartition=FALSE) -{//Mount drives. - return Mount2(0,NULL,repartition); +public U8 Mount(Bool caller_is_prtdsk=FALSE) +{//Mount drives. Called from $LK,"PrtDsk(Mount)",A="FF:::/Adam/ABlkDev/PrtDsk.HC,Mount("$. + return Mount2(0,NULL,caller_is_prtdsk); } public U0 Unmount(U8 drv_let=0) @@ -141,7 +152,7 @@ public U8 MountFile(U8 *filename) CBlkDev *bd=BlkDevNextFreeSlot(dv->drv_let,BDT_ISO_FILE_READ); bd->drv_offset=19<<2+(DVD_BLK_SIZE*2+DVD_BOOT_LOADER_SIZE)/BLK_SIZE; bd->file_dsk_name=AStrNew(filename3); - BlkDevAdd(bd,TRUE,TRUE); + BlkDevAdd(bd,,TRUE,TRUE); Free(filename3); Free(filename2); return dv->drv_let; diff --git a/Adam/ABlkDev/PrtDsk.HC b/Adam/ABlkDev/PrtDsk.HC index 22adfaf..9313e45 100644 --- a/Adam/ABlkDev/PrtDsk.HC +++ b/Adam/ABlkDev/PrtDsk.HC @@ -10,20 +10,20 @@ class CPlannedDrv Bool pri; }; -//Available to assist in writing scripts. -I64 drv_dsk_dsk_size=0; +public I64 PrtDsk(U8 drv_let=0,...) +{/*Partition the disk containing partition drv_let. -public I64 PrtDsk(U8 drv_let=0) -{//Partition the disk containing partition drv_let. -//drv_let=0 means add new drive that - //is not already mounted. +drv_let=0 means add new drive that is not already mounted. + +>PrtDsk('C',0.5,0.25,0.25); //Make three. 50% C, 25% D, 25% E, round-up to blk. + +*/ CBlkDev *bd; CPlannedDrv head,*tmppp; CMasterBoot mbr; Bool pri=TRUE; - I64 ext_base,drv_let2,pri_cnt=0, - i,start_offset,offset,remaining; - drv_dsk_dsk_size=0; + I64 ext_base,drv_let2,pri_cnt=0,i,start_offset,offset, + total,remaining,cur_arg=0; "This command does not play well\n" "with other operating systems.\n" "You really should use another\n" @@ -34,17 +34,17 @@ public I64 PrtDsk(U8 drv_let=0) "until you set block zero to zero\n" "with $$LK,\"BootMHDZero\",\"MN:BootMHDZero\"$$()\n\n\n" "Continue"; - if (!YorN) return 0; + if (argc<=cur_arg && !YorN) + return 0; + '\n'; + if (drv_let && !Let2BlkDev(drv_let,FALSE)) drv_let=0; - if (!drv_let) { - Mount(TRUE); - return 0; - } - if (!(bd=Let2BlkDev(drv_let,FALSE)) || bd->type!=BDT_ATA) + if (!drv_let && !(drv_let=Mount(TRUE)) || + !(bd=Let2BlkDev(drv_let,FALSE)) || bd->type!=BDT_ATA) return 0; - drv_dsk_dsk_size=bd->max_blk+1; + total=bd->max_blk+1; QueInit(&head); drv_let2=bd->first_drv_let; remaining=FloorU64(bd->max_blk+1,ROUND_DRV_TO); @@ -55,7 +55,7 @@ public I64 PrtDsk(U8 drv_let=0) tmppp->pri=FALSE; if (pri) { "Primary Partition"; - if (YorN) { + if (argc>cur_arg || YorN) { pri_cnt++; tmppp->pri=TRUE; if (pri_cnt==3) @@ -63,10 +63,14 @@ public I64 PrtDsk(U8 drv_let=0) } else pri=FALSE; } - "Blocks Remaining:%d (0x%X)\n", + "\nBlocks Remaining:%d (0x%X)\n", remaining-DRV_HEADER,remaining-DRV_HEADER; - tmppp->size=CeilU64(GetI64("Size in Blocks :", - remaining-DRV_HEADER)+DRV_HEADER,ROUND_DRV_TO); + if (argc>cur_arg) + tmppp->size=MinI64(CeilU64(MaxI64(remaining,DRV_HEADER),ROUND_DRV_TO), + CeilU64(argv[cur_arg++](F64)*total,ROUND_DRV_TO)); + else + tmppp->size=CeilU64(GetI64("Size in Blocks :", + remaining-DRV_HEADER)+DRV_HEADER,ROUND_DRV_TO); } while (!(ROUND_DRV_TO<=tmppp->size<=FloorU64(remaining,ROUND_DRV_TO))); QueIns(tmppp,head.last); remaining-=tmppp->size; @@ -85,7 +89,7 @@ public I64 PrtDsk(U8 drv_let=0) tmppp=tmppp->next; drv_let2++; } - if (!AreYouSure) + if (!argc && !AreYouSure) goto pd_done; remaining=FloorU64(bd->max_blk+1,ROUND_DRV_TO)-ROUND_DRV_TO; @@ -149,15 +153,15 @@ public I64 PrtDsk(U8 drv_let=0) } bd->flags&=~(BDF_INITIALIZED | BDF_INIT_IN_PROGRESS); - BlkDevAdd(bd,FALSE,TRUE); + BlkDevAdd(bd,,FALSE,TRUE); for (i=bd->first_drv_let;ifile_size-1; @@ -27,12 +27,14 @@ $ID,-4$ DefinePrint("DD_SYS_FIXED_AREA_BASE","%08X",SYS_FIXED_AREA); DefinePrint("DD_SYS_FIXED_AREA_END","%08X", SYS_FIXED_AREA+sizeof(CSysFixedArea)-1); - DefinePrint("DD_SYS_HEAP_BASE","%08X",sys_heap_base); - DefinePrint("DD_SYS_HEAP_LIMIT","%08X",sys_heap_limit); + DefinePrint("DD_MEM_HEAP_BASE","%08X",mem_heap_base); + DefinePrint("DD_MEM_HEAP_LIMIT","%08X",mem_heap_limit); DefinePrint("DD_MEM_MIN_MEG","%dMeg",MEM_MIN_MEG); DefinePrint("DD_UNCACHED_ALIAS","%010X",dev.uncached_alias); - DefinePrint("DD_MEM_MAPPED_SPACE_GIG","%dGig",MEM_MAPPED_SPACE/0x40000000); - DefinePrint("DD_MEM_MAPPED_SPACE_END","%010X",MEM_MAPPED_SPACE-1); + DefinePrint("DD_PHYSICAL_SPACE_END","%010X", + mem_physical_space-1); + DefinePrint("DD_MAPPED_SPACE_END","%010X", + mem_mapped_space-1); DefinePrint("DD_JIFFY_HZ","%dHz",JIFFY_FREQ); } diff --git a/Adam/AExts.HC b/Adam/AExts.HC index bcc724a..6a6de1d 100644 --- a/Adam/AExts.HC +++ b/Adam/AExts.HC @@ -58,8 +58,8 @@ extern CMenuEntry *MenuEntryFind(CMenu *haystack_menu,U8 *needle_full_name); extern CMenu *MenuFilePush(U8 *filename); extern U0 MenuPop(); extern CMenu *MenuPush(U8 *st); -extern I64 Mount(Bool repartition=FALSE); -extern CTask *Noise(I64 ms,F64 min_freq,F64 max_freq); +extern U8 Mount(Bool caller_is_prtdsk=FALSE); +extern CTask *Noise(I64 mS,F64 min_ona,F64 max_ona); extern Bool Plain(U8 *filename,I64 edf_dof_flags=0); extern Bool PopUpCancelOk(U8 *header=NULL,U8 *footer=NULL); extern I64 PopUpColor(U8 *header=NULL, @@ -80,6 +80,7 @@ extern I64 PopUpRangeI64( extern Bool PopUpTransform(I64 *r); extern U0 Refresh(I64 cnt=1,Bool force=FALSE); extern U0 RegOneTimePopUp(I64 flag_num,U8 *msg); +extern Bool RegWrite(U8 *path,U8 *fmt,...); extern U0 SettingsPop(CTask *task=NULL,I64 flags=0); extern CTaskSettings *SettingsPush(CTask *task=NULL,I64 flags=0); extern U0 TemplateCtrlSlider(CDoc *doc); @@ -87,7 +88,7 @@ extern Bool View(); extern U0 ViewAnglesDel(CTask *task=NULL); extern CCtrl *ViewAnglesNew(CTask *task=NULL); extern Bool WinBorder(Bool val=OFF,CTask *task=NULL); -extern CDoc *WinCursorPosSet(CTask *task,I64 ipx,I64 ipy,Bool set_cursor=TRUE); +extern CDoc *WinCursorPosSet(CTask *task,I64 msx,I64 msy,Bool set_cursor=TRUE); extern Bool WinHorz(I64 left,I64 right,CTask *task=NULL); extern U0 WinMax(CTask *task=NULL); extern U0 WinScrollNull(CTask *task,CD3I64 *s); diff --git a/Adam/AMath.HC b/Adam/AMath.HC index e4bbf36..2e2914a 100644 --- a/Adam/AMath.HC +++ b/Adam/AMath.HC @@ -88,13 +88,13 @@ public Complex *CMul(Complex *prod,Complex *n1,Complex *n2) public Complex *CDiv(Complex *quot,Complex *n1,Complex *n2) {//quot=n1/n2 - F64 m1,a1,m2,a2; - R2P(&m1,&a1,n1->x,n1->y); - R2P(&m2,&a2,n2->x,n2->y); + F64 m1,arg1,m2,arg2; + R2P(&m1,&arg1,n1->x,n1->y); + R2P(&m2,&arg2,n2->x,n2->y); m1/=m2; - a1-=a2; - quot->x=m1*Cos(a1); - quot->y=m1*Sin(a1); + arg1-=arg2; + quot->x=m1*Cos(arg1); + quot->y=m1*Sin(arg1); return quot; } diff --git a/Adam/AMem.HC b/Adam/AMem.HC index 1c55ca5..5a35403 100644 --- a/Adam/AMem.HC +++ b/Adam/AMem.HC @@ -96,7 +96,7 @@ public Bool IsInHeapCtrl(U8 *a,CHeapCtrl *hc,Bool lock=TRUE) PAUSE m=hc->next_mem_blk; while (m!=&hc->next_mem_blk) { - if (a>=m && apages<=m && apags<locked_flags,HClf_LOCKED); POPFD diff --git a/Adam/AInputPointer.HC b/Adam/AMouse.HC similarity index 83% rename from Adam/AInputPointer.HC rename to Adam/AMouse.HC index 64c65ea..28b8a70 100644 Binary files a/Adam/AInputPointer.HC and b/Adam/AMouse.HC differ diff --git a/Adam/ARegistry.HC b/Adam/ARegistry.HC index 6eac86f..18f4cb5 100644 --- a/Adam/ARegistry.HC +++ b/Adam/ARegistry.HC @@ -16,7 +16,7 @@ Bool RegCache() return TRUE; } -public Bool RegSetDftEntry(U8 *path,U8 *val,Bool is_adam_entry=FALSE) +public Bool RegDft(U8 *path,U8 *val,Bool is_adam_entry=FALSE) {//Add code doc tree branch to registry. Bool res,unlock_doc; RegCache; @@ -40,13 +40,13 @@ public Bool RegSetDftEntry(U8 *path,U8 *val,Bool is_adam_entry=FALSE) return res; } -public I64 RegExeBranch(U8 *path) +public I64 RegExe(U8 *path) {//Execute doc tree branch in registry. RegCache; return DocTreeBranchExe(sys_registry_doc,path); } -public Bool RegWriteBranch(U8 *path,U8 *fmt,...) +public Bool RegWrite(U8 *path,U8 *fmt,...) {//Rewrite doc tree branch in registry. Bool res,unlock_doc; CDocEntry *tree_branch,*start_indent,*end_indent; @@ -65,6 +65,46 @@ public Bool RegWriteBranch(U8 *path,U8 *fmt,...) Free(buf); return res; } + +public I64 RegCnt(U8 *path) +{//Tree branch cnt in registry. + I64 res=0; + CDocEntry *tree_branch,*start_indent,*end_indent; + Bool unlock_doc=DocLock(sys_registry_doc); + if (DocTreeFind(sys_registry_doc,path, + &tree_branch,&start_indent,&end_indent)) { + end_indent=end_indent->next; + while (start_indent!=end_indent) { + res++; + start_indent=start_indent->next; + } + } + if (unlock_doc) + DocUnlock(sys_registry_doc); + return res; +} + +public Bool RegAppend(U8 *path,U8 *fmt,...) +{//Rewrite doc tree branch in registry. + Bool res,unlock_doc; + CDocEntry *tree_branch,*start_indent,*end_indent; + U8 *buf=StrPrintJoin(NULL,fmt,argc,argv); + RegCache; + unlock_doc=DocLock(sys_registry_doc); + if (res=DocTreeFind(sys_registry_doc,path, + &tree_branch,&start_indent,&end_indent)) { + sys_registry_doc->cur_entry=end_indent; + sys_registry_doc->cur_col=sys_registry_doc->cur_entry->min_col; + } else + DocTreeMake(sys_registry_doc,path); + DocPrint(sys_registry_doc,"%s",buf); + if (DrvIsWritable(*sys_registry_doc->filename.name)) + DocWrite(sys_registry_doc); + if (unlock_doc) + DocUnlock(sys_registry_doc); + Free(buf); + return res; +} public Bool OneTimePopUp(U8 *_flags,I64 flag_num,U8 *msg) {//See $LK,"::/Apps/X-Caliber/X-Caliber.HC"$. @@ -87,7 +127,7 @@ public Bool OneTimePopUp(U8 *_flags,I64 flag_num,U8 *msg) U0 RegOneTimePopUp(I64 flag_num,U8 *msg) {//You're not supposed to make system pop-up flags, only me. if (OneTimePopUp(sys_msg_flags,flag_num,msg)) - RegWriteBranch("Adam/SysMsgFlags","sys_msg_flags[0]=0x%X;\n", + RegWrite("Adam/SysMsgFlags","sys_msg_flags[0]=0x%X;\n", sys_msg_flags[0]); } @@ -95,12 +135,74 @@ U0 RegInit() { U8 buf[STR_LEN]; Bool version_present; - RegSetDftEntry("Adam/SysMsgFlags","sys_msg_flags[0]=0;\n",TRUE); + RegDft("Adam/SysMsgFlags","sys_msg_flags[0]=0;\n",TRUE); StrPrint(buf,"registry_version=%4.3f;\n",sys_os_version); - version_present=RegSetDftEntry("Adam/SysRegVer",buf,TRUE); - RegExeBranch("Adam"); + version_present=RegDft("Adam/SysRegVer",buf,TRUE); + RegExe("Adam"); if (registry_version!=sys_os_version) { - RegWriteBranch("Adam/SysRegVer",buf); - RegExeBranch("Adam"); + RegWrite("Adam/SysRegVer",buf); + RegExe("Adam"); + } +} + +#help_index "Boot/Once;Misc/Once" + +public U0 AOnceFlush() +{//Flush AOnce() buf. + RegWrite("Once/Adam",""); +} + +public U0 OnceFlush() +{//Flush Once() buf. + RegWrite("Once/User",""); +} + +public U0 AOnce(U8 *fmt,...) +{//Writes Adam code to $LK,"Registry",A="FI:~/Registry.HC"$ to be executed next boot. + U8 *buf=StrPrintJoin(NULL,fmt,argc,argv); + RegAppend("Once/Adam","%s\n",buf); + Free(buf); +} + +public U0 Once(U8 *fmt,...) +{//Writes User code to $LK,"Registry",A="FI:~/Registry.HC"$ to be executed next boot. + U8 *buf=StrPrintJoin(NULL,fmt,argc,argv); + RegAppend("Once/User","%s\n",buf); + Free(buf); +} + +public U0 AOnceDrv(U8 drv_let=0,U8 *fmt,...) +{//Writes Adam code to drv $LK,"Registry",A="FI:~/Registry.HC"$ to be executed next boot. + U8 *buf=StrPrintJoin(NULL,fmt,argc,argv); + I64 old_drv_let=*sys_registry_doc->filename.name; + if (drv_let) + *sys_registry_doc->filename.name=drv_let; + RegAppend("Once/Adam","%s\n",buf); + Free(buf); + *sys_registry_doc->filename.name=old_drv_let; +} + +public U0 OnceDrv(U8 drv_let=0,U8 *fmt,...) +{//Writes User code to drv $LK,"Registry",A="FI:~/Registry.HC"$ to be executed next boot. + U8 *buf=StrPrintJoin(NULL,fmt,argc,argv); + I64 old_drv_let=*sys_registry_doc->filename.name; + if (drv_let) + *sys_registry_doc->filename.name=drv_let; + RegAppend("Once/User","%s\n",buf); + Free(buf); + *sys_registry_doc->filename.name=old_drv_let; +} + +public U0 OnceExe() +{//Execute Once code. This goes in $LK,"~/Once.HC"$. + RegDft("Once/Adam",""); + if (RegCnt("Once/Adam")>2) { + Adam("RegExe(\"Once/Adam\");"); + AOnceFlush; + } + RegDft("Once/User",""); + if (RegCnt("Once/User")>2) { + RegExe("Once/User"); + OnceFlush; } } diff --git a/Adam/AutoComplete/ACFill.HC b/Adam/AutoComplete/ACFill.HC index 8c6b0eb..0c93f4d 100644 --- a/Adam/AutoComplete/ACFill.HC +++ b/Adam/AutoComplete/ACFill.HC @@ -212,11 +212,11 @@ U0 ACMisspelledFind(CDoc *doc) do { if (doc_e!=doc && doc_e->de_flags&DOCEF_TAG) { while (colmax_col) { - while (colmax_col && !Bt(chars_bmp_word,doc_e->tag[col])) + while (colmax_col && !Bt(char_bmp_word,doc_e->tag[col])) col++; if (colmax_col) { col2=col; - while (col2max_col && Bt(chars_bmp_word,doc_e->tag[col2])) + while (col2max_col && Bt(char_bmp_word,doc_e->tag[col2])) col2++; ch=doc_e->tag[col2]; doc_e->tag[col2]=0; diff --git a/Adam/AutoComplete/ACInit.HC b/Adam/AutoComplete/ACInit.HC index 3aac528..109f59d 100644 --- a/Adam/AutoComplete/ACInit.HC +++ b/Adam/AutoComplete/ACInit.HC @@ -65,7 +65,7 @@ U0 ACSingleFileAdd(U8 *buf) while (TRUE) { while (TRUE) { if (ch=*ptr++) { - if (Bt(chars_bmp_alpha_numeric,ch)) + if (Bt(char_bmp_alpha_numeric,ch)) break; } else return; @@ -75,7 +75,7 @@ U0 ACSingleFileAdd(U8 *buf) ptr--; while (TRUE) { if (ch=*ptr2++) { - if (Bt(chars_bmp_alpha_numeric,ch)) + if (Bt(char_bmp_alpha_numeric,ch)) *ptr3++=ch; else if (ch!=CH_CURSOR) break; diff --git a/Adam/AutoComplete/ACTask.HC b/Adam/AutoComplete/ACTask.HC index 5920d3b..750cd55 100644 --- a/Adam/AutoComplete/ACTask.HC +++ b/Adam/AutoComplete/ACTask.HC @@ -36,7 +36,7 @@ I64 ACSkipCrap(U8 *src,I64 len) I64 j; j=len-1; while (j>=0) { - if (Bt(chars_bmp_alpha_numeric,src[j])) + if (Bt(char_bmp_alpha_numeric,src[j])) break; else j--; @@ -49,7 +49,7 @@ I64 ACPriorWordInStr(U8 *src,U8 *dst,I64 len,I64 buf_size) I64 i,j=0,k; i=len-1; while (i>=0) - if (!Bt(chars_bmp_alpha_numeric,src[i])) + if (!Bt(char_bmp_alpha_numeric,src[i])) break; else i--; @@ -223,12 +223,12 @@ U0 ACTask(I64) WinHorz(51,Fs->win_right); LBts(&Fs->display_flags,DISPLAYf_WIN_ON_TOP); Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_BORDER - -WIF_SELF_IP_L-WIF_SELF_IP_R-WIG_DBL_CLICK; + -WIF_SELF_MS_L-WIF_SELF_MS_R-WIG_DBL_CLICK; Free(ac.cur_word); ac.cur_word=NULL; while (TRUE) { if (scan_code&(SCF_CTRL|SCF_ALT) || - GetTSC>KbdMouseEvtTime+cnts.time_stamp_freq>>1) { + GetTSC>KbdMsEvtTime+cnts.time_stamp_freq>>1) { last_scan_code=scan_code; scan_code=kbd.scan_code; } diff --git a/Adam/CPURep.HC b/Adam/CPURep.HC index 481c3bf..131b422 100644 --- a/Adam/CPURep.HC +++ b/Adam/CPURep.HC @@ -30,7 +30,7 @@ public U0 CPURep(Bool full=FALSE) CCPURep cr; if (!full) - "%d Cores %6h?nHz\n",mp_cnt,ToF64(cnts.time_stamp_freq); + "%03X Cores %6h?nHz\n",mp_cnt,ToF64(cnts.time_stamp_freq); else { cr.swaps=CAlloc(sizeof(I64)*mp_cnt); cr.cycles=CAlloc(sizeof(I64)*mp_cnt); @@ -47,22 +47,22 @@ public U0 CPURep(Bool full=FALSE) Yield; tf=tS; - "\nCPU: %d Cores %6h?nHz\n",mp_cnt,ToF64(cnts.time_stamp_freq); + "\n%03X Cores %6h?nHz\n",mp_cnt,ToF64(cnts.time_stamp_freq); "\n Context\n" - "Core Swaps/s Cycles\n" - "---- ------------- -----------------\n"; + "CPU Swaps/s Cycles\n" + "--- ------------- -----------------\n"; total_swaps=0; total_cycles=0; for (i=0;iwin_task=task; - c->flags=CTRLF_SHOW|CTRLF_BORDER|CTRLF_CAPTURE_LEFT_IP; + c->flags=CTRLF_SHOW|CTRLF_BORDER|CTRLF_CAPTURE_LEFT_MS; c->type=CTRLT_WIN_HSCROLL; c->state=&task->horz_scroll; c->update_derived_vals=&WinDerivedScrollValsUpdate; @@ -215,7 +215,7 @@ U0 WinScrollsInit(CTask *task) if (!CtrlFindUnique(task,CTRLT_WIN_VSCROLL)) { c=CAlloc(sizeof(CCtrl)); c->win_task=task; - c->flags=CTRLF_SHOW|CTRLF_BORDER|CTRLF_CAPTURE_LEFT_IP; + c->flags=CTRLF_SHOW|CTRLF_BORDER|CTRLF_CAPTURE_LEFT_MS; c->type=CTRLT_WIN_VSCROLL; c->state=&task->vert_scroll; c->update_derived_vals=&WinDerivedScrollValsUpdate; @@ -364,7 +364,7 @@ public CCtrl *ViewAnglesNew(CTask *task=NULL) s->cy=GREEN; s->cz=LTGREEN; c->win_task=task; - c->flags=CTRLF_SHOW|CTRLF_CAPTURE_LEFT_IP; + c->flags=CTRLF_SHOW|CTRLF_CAPTURE_LEFT_MS; c->type=CTRLT_VIEWING_ANGLES; c->state=s; c->draw_it=&DrawViewAnglesCtrl; diff --git a/Adam/Ctrls/CtrlsButton.HC b/Adam/Ctrls/CtrlsBttn.HC similarity index 60% rename from Adam/Ctrls/CtrlsButton.HC rename to Adam/Ctrls/CtrlsBttn.HC index 2e00278..59371f4 100644 --- a/Adam/Ctrls/CtrlsButton.HC +++ b/Adam/Ctrls/CtrlsBttn.HC @@ -1,17 +1,17 @@ -#define BUTTON_BORDER 2 +#define BTTN_BORDER 2 #define BTF_DONT_FREE 1 -class CCtrlButtonState +class CCtrlBttnState { I64 state,num_states,flags; U8 *state_texts; CColorROPU32 *state_colors; }; -U0 DrawCtrlButton(CDC *dc,CCtrl *c) +U0 DrawCtrlBttn(CDC *dc,CCtrl *c) { - CCtrlButtonState *s=c->state; + CCtrlBttnState *s=c->state; I64 l; U8 *st; @@ -21,17 +21,17 @@ U0 DrawCtrlButton(CDC *dc,CCtrl *c) st=s->state_texts; dc->color=s->state_colors[s->state]; l=StrLen(st); - GrRect(dc,c->left+BUTTON_BORDER,c->top+BUTTON_BORDER, - c->right-c->left+1-BUTTON_BORDER*2, - c->bottom-c->top+1-BUTTON_BORDER*2); + GrRect(dc,c->left+BTTN_BORDER,c->top+BTTN_BORDER, + c->right-c->left+1-BTTN_BORDER*2, + c->bottom-c->top+1-BTTN_BORDER*2); dc->color=s->state_colors[s->state]^(WHITE<<16+WHITE); GrPrint(dc,(c->left+c->right+1-l*FONT_WIDTH)>>1, (c->top+c->bottom+1-FONT_HEIGHT)>>1,"%s",st); } -U0 LeftClickCtrlButton(CCtrl *c,I64,I64,Bool down) +U0 LeftClickCtrlBttn(CCtrl *c,I64,I64,Bool down) { - CCtrlButtonState *s=c->state; + CCtrlBttnState *s=c->state; if (down) { s->state++; if (s->state==s->num_states) @@ -39,12 +39,12 @@ U0 LeftClickCtrlButton(CCtrl *c,I64,I64,Bool down) } } -public CCtrl *CtrlButtonNew(I64 x,I64 y,I64 width=-1,I64 height=-1, +public CCtrl *CtrlBttnNew(I64 x,I64 y,I64 width=-1,I64 height=-1, I64 num_states=1,U8 *state_texts, - I32 *state_colors,CCtrlButtonState *_s=NULL) -{//Create button ctrl. See $LK,"::/Apps/Strut/Strut.HC"$. + I32 *state_colors,CCtrlBttnState *_s=NULL) +{//Create bttn ctrl. See $LK,"::/Apps/Strut/Strut.HC"$. CCtrl *res; - CCtrlButtonState *s; + CCtrlBttnState *s; I64 i,j,l; U8 *st; if (width<0) { @@ -54,15 +54,15 @@ public CCtrl *CtrlButtonNew(I64 x,I64 y,I64 width=-1,I64 height=-1, j=StrLen(st); if (j>l) l=j; } - width=BUTTON_BORDER*4+l*FONT_WIDTH; + width=BTTN_BORDER*4+l*FONT_WIDTH; } - if (height<0) height=BUTTON_BORDER*4+FONT_HEIGHT; + if (height<0) height=BTTN_BORDER*4+FONT_HEIGHT; res=CAlloc(sizeof(CCtrl)); if (_s) { s=_s; - MemSet(s,0,sizeof(CCtrlButtonState)); + MemSet(s,0,sizeof(CCtrlBttnState)); } else { - s=CAlloc(sizeof(CCtrlButtonState)); + s=CAlloc(sizeof(CCtrlBttnState)); s->flags=BTF_DONT_FREE; } s->num_states=num_states; @@ -72,8 +72,8 @@ public CCtrl *CtrlButtonNew(I64 x,I64 y,I64 width=-1,I64 height=-1, res->flags=CTRLF_SHOW; res->type=CTRLT_GENERIC; res->state=s; - res->draw_it=&DrawCtrlButton; - res->left_click=&LeftClickCtrlButton; + res->draw_it=&DrawCtrlBttn; + res->left_click=&LeftClickCtrlBttn; res->left=x; res->top=y; res->right=res->left+width-1; @@ -82,8 +82,8 @@ public CCtrl *CtrlButtonNew(I64 x,I64 y,I64 width=-1,I64 height=-1, return res; } -public U0 CtrlButtonDel(CCtrl *c) -{//Free button ctrl. +public U0 CtrlBttnDel(CCtrl *c) +{//Free bttn ctrl. QueRem(c); if (!(c->flags&BTF_DONT_FREE)) Free(c->state); diff --git a/Adam/Ctrls/CtrlsSlider.HC b/Adam/Ctrls/CtrlsSlider.HC index 397407e..88d270b 100644 --- a/Adam/Ctrls/CtrlsSlider.HC +++ b/Adam/Ctrls/CtrlsSlider.HC @@ -176,7 +176,7 @@ CCtrl *SliderNew() { CCtrl *c=CAlloc(sizeof(CCtrl)); c->win_task=Fs; - c->flags=CTRLF_SHOW|CTRLF_CAPTURE_LEFT_IP; + c->flags=CTRLF_SHOW|CTRLF_CAPTURE_LEFT_MS; c->type=CTRLT_GENERIC; "); if (*m->glbl_name) diff --git a/Adam/Ctrls/MakeCtrls.HC b/Adam/Ctrls/MakeCtrls.HC index da3e676..0273484 100644 --- a/Adam/Ctrls/MakeCtrls.HC +++ b/Adam/Ctrls/MakeCtrls.HC @@ -3,6 +3,6 @@ Cd(__DIR__);; #help_index "Ctrls" #help_file "::/Doc/Ctrls" #include "CtrlsA" -#include "CtrlsButton" +#include "CtrlsBttn" #include "CtrlsSlider" Cd("..");; diff --git a/Adam/DevInfo.HC b/Adam/DevInfo.HC index 35b7a17..bd6955c 100644 --- a/Adam/DevInfo.HC +++ b/Adam/DevInfo.HC @@ -6,9 +6,12 @@ #define PCI_DEV_FILE "::/Misc/PCIDevices.DD.Z" /**** -//1) Plain text edit and remove file header and tail -//2) Text find-and-replace "=0A=" with "". -//3) Run PCIDevFileGen(). +//1) Download http://www.pcidatabase.com/reports.php?type=tab-delimeted +//2) Rename to ::/Misc/PCIDevices.DD.Z +//3) ToDolDoc("::/Misc/PCIDevices.DD.Z"); +//4) Edit and remove file header and tail +//5) Text find-and-replace "=0A=" with "". (Doesn't seem necessary anmore.) +//6) Run PCIDevFileGen(). (Doesn't seem necessary anmore.) public U0 PCIDevFileGen() { @@ -168,34 +171,50 @@ public U0 PCIRep() #help_index "Info;Memory/Info" public U0 MemBIOSRep() {//Report the memory ranges reported by the BIOS at boot. - U16 *m01=SYS_MEM_E801; - CMemE820 *m20=SYS_MEM_E820; + U16 *m01=MEM_E801; + CMemE820 *m20=MEM_E820; CMemRange *tmpmr; "Standard Addresses\n" - "0x000A0000-0x000BFFFF VGA\n" - "0xFEE00000-0xFEE00FFF See $$LK,\"APIC\",A=\"MN:LAPIC_BASE\"$$\n\n" + "000A0000-000BFFFF VGA\n" + "FEE00000-FEE00FFF See $$LK,\"APIC\",A=\"MN:LAPIC_BASE\"$$\n\n" "32 Bit Device Mem\n"; - while (LBts(&sys_semas[SYS_SEMA_DEV_MEM],0)) + while (LBts(&sys_semas[SEMA_DEV_MEM],0)) Yield; tmpmr=dev.mem32_head.next; while (tmpmr!=&dev.mem32_head) { - "%02X:0x%016X-0x%016X\n", + "%02X:%016X-%016X\n", tmpmr->type,tmpmr->base,tmpmr->base+tmpmr->size-1; tmpmr=tmpmr->next; } - LBtr(&sys_semas[SYS_SEMA_DEV_MEM],0); + LBtr(&sys_semas[SEMA_DEV_MEM],0); "\nBIOS Memory Report 15:E801\n" - "01:0x0000000000000000-0x%016X\n",0x100000+m01[0]<<10-1; - "01:0x0000000001000000-0x%016X\n",0x1000000+m01[1]<<16-1; + "01:0000000000000000-%016X\n",0x100000+m01[0]<<10-1; + "01:0000000001000000-%016X\n",SYS_16MEG_AREA_LIMIT+m01[1]<<16-1; if (m20->type) { '\n'; "BIOS Memory Report 15:E820\n"; while (m20->type) { - "%02X:0x%016X-0x%016X\n",m20->type,m20->base,m20->base+m20->len-1; + "%02X:%016X-%016X\n",m20->type,m20->base,m20->base+m20->len-1; m20++; } } +} +public U0 MemPageRep() +{//Page Table Report. + "MAPPED\t :%010X with ",mem_mapped_space; + if (Bt(&mem_page_size,30)) + "$$RED$$1GIG$$FG$$ pages\n"; + else + "$$RED$$2MEG$$FG$$ pages\n"; + "PML2\t :%010X 2MEG :%08X\n", + *MEM_PML2(U64 *),*MEM_NUM_2MEG(U64 *); + "PML3\t :%010X 1GIG :%08X\n", + *MEM_PML3(U64 *),*MEM_NUM_1GIG(U64 *); + "PML4\t :%010X 512GIG:%08X\n", + *MEM_PML4(U64 *),*MEM_NUM_512GIG(U64 *); + "FIXED_AREA:%010X\n",SYS_FIXED_AREA; + "HEAP_BASE :%010X\nHEAP_LIMIT:%010X\n",mem_heap_base,mem_heap_limit; } diff --git a/Adam/DolDoc/DocChar.HC b/Adam/DolDoc/DocChar.HC index 93ca78d..e1869e7 100644 --- a/Adam/DolDoc/DocChar.HC +++ b/Adam/DolDoc/DocChar.HC @@ -443,7 +443,7 @@ U0 EdCharIns(I64 ch,I64 sc,CDoc *doc) I64 i,j,m,y=doc_ce->y; if (doc->flags & DOCF_IN_DOLLAR) { - if (!Bt(chars_bmp_getkey,ch)) + if (!Bt(char_bmp_printable,ch)) goto ic_done; ChkDollarBufSize(doc); doc->dollar_buf[doc->dollar_buf_ptr++]=ch; @@ -510,7 +510,7 @@ U0 EdCharIns(I64 ch,I64 sc,CDoc *doc) goto ic_done; } if (doc->flags & DOCF_OVERSTRIKE) { - if (Bt(chars_bmp_displayable,ch)) { + if (Bt(char_bmp_displayable,ch)) { ic_overstrike: if (IsEditableText(doc_ce)) { if (doc->cur_colmax_col) { @@ -578,7 +578,7 @@ ic_form_tab: DocInsEntry(doc,doc_ne); } } else { - if (Bt(chars_bmp_displayable,ch)) { + if (Bt(char_bmp_displayable,ch)) { if (doc_ce->type_u8==DOCT_DATA) { while (TRUE) { i=doc_ce->len+doc_ce->min_col; diff --git a/Adam/DolDoc/DocCodeTools.HC b/Adam/DolDoc/DocCodeTools.HC index 7e70af5..931a12b 100644 --- a/Adam/DolDoc/DocCodeTools.HC +++ b/Adam/DolDoc/DocCodeTools.HC @@ -359,7 +359,7 @@ U0 EdRACollect(CDoc *doc,CRenum *head) StrCpy(buf,"@@"); i=2; while (ch>=0 && i=0 && Bt(chars_bmp_white_space,ch)) + while (ch>=0 && Bt(char_bmp_white_space,ch)) ch=EdRAGetU8(doc); if (ch==':') { ch=EdRAGetU8(doc); @@ -426,7 +426,7 @@ U0 EdCodeTools2(CDoc *doc,I64 tool_action,Bool beep=TRUE) I64 i,start_y,end_y,x,r,goto_line_num; U8 *b,*st,*st2,*prj_file; CTask *task=NULL; - CSrvCmd *tmpc; + CJob *tmpc; CQueVectU8 *indent; DocRecalc(doc); @@ -442,7 +442,7 @@ U0 EdCodeTools2(CDoc *doc,I64 tool_action,Bool beep=TRUE) task=Spawn(&SrvCmdLine,NULL,"Srv",,Fs); st2=CurDir; st=MStrPrint("Cd(\"%s\");",st2); - tmpc=TaskExe(task,Fs,st,1<win_left,Fs->win_right, task); @@ -455,23 +455,23 @@ U0 EdCodeTools2(CDoc *doc,I64 tool_action,Bool beep=TRUE) st2=DirFile(prj_file), st=MStrPrint("Cd(\"%s\");",st2); Free(st2); - tmpc=TaskExe(task,Fs,st,1<filename.name); - tmpc=TaskExe(task,Fs,st,1<filename.name)) goto_line_num=i; Free(st); @@ -510,9 +510,9 @@ U0 EdCodeTools2(CDoc *doc,I64 tool_action,Bool beep=TRUE) indent=EdRICode(doc); DocUnlock(doc); if (beep) { - Snd(2000); Sleep(150); Snd(0); + Snd(86); Sleep(150); Snd; Sleep(100); - Snd(2000); Sleep(150); Snd(0); + Snd(86); Sleep(150); Snd; } DocLock(doc); EdRemFunLeadingSpace(doc); @@ -577,9 +577,9 @@ U0 EdCodeTools2(CDoc *doc,I64 tool_action,Bool beep=TRUE) } DocUnlock(doc); if (beep) { - Snd(2000); Sleep(150); Snd(0); + Snd(86); Sleep(150); Snd; Sleep(100); - Snd(2000); Sleep(150); Snd(0); + Snd(86); Sleep(150); Snd; } DocLock(doc); EdRenumAsm(doc); @@ -633,7 +633,7 @@ U0 EdChSC(CDoc *doc) DocPrint(doc,"CH_SPACE,0x%X",sc); else if (ch==CH_SHIFT_SPACE) DocPrint(doc,"CH_SHIFT_SPACE,0x%X",sc); - else if (Bt(chars_bmp_displayable,ch)) + else if (Bt(char_bmp_displayable,ch)) DocPrint(doc,"'%c',0x%X",ch,sc); else DocPrint(doc,"0x%X,0x%X",ch,sc); diff --git a/Adam/DolDoc/DocDblBuf.HC b/Adam/DolDoc/DocDblBuf.HC index 0890759..abb1ef2 100644 --- a/Adam/DolDoc/DocDblBuf.HC +++ b/Adam/DolDoc/DocDblBuf.HC @@ -4,6 +4,8 @@ public CDoc *DocPut(CTask *task=NULL) //Basically, StdOut unless double buffering. CDoc *res; if (!task) task=Fs; + if (Bt(&task->task_flags,TASKf_INPUT_FILTER_TASK)) + task=task->parent_task; if ((res=task->put_doc) && res->doc_signature==DOC_SIGNATURE_VAL) return res; else diff --git a/Adam/DolDoc/DocEd.HC b/Adam/DolDoc/DocEd.HC index 365d23a..92ab12f 100644 --- a/Adam/DolDoc/DocEd.HC +++ b/Adam/DolDoc/DocEd.HC @@ -240,7 +240,7 @@ public Bool Plain(U8 *filename,I64 edf_dof_flags=0) return res; } -#help_index "DolDoc;Task/Srv/Exe" +#help_index "DolDoc;Job/Exe;Task/Job/Exe" public I64 PopUpEd(U8 *filename,CTask *parent=NULL,CTask **_pu_task=NULL) {//Create PopUp win task and edit a doc. U8 *st=MStrPrint("Ed(\"%Q\");",filename); diff --git a/Adam/DolDoc/DocFile.HC b/Adam/DolDoc/DocFile.HC index 776155f..136843a 100644 --- a/Adam/DolDoc/DocFile.HC +++ b/Adam/DolDoc/DocFile.HC @@ -120,9 +120,6 @@ public U8 *DocSave(CDoc *doc,I64 *_size=NULL) case DOCT_TAB: *dst++='\t'; break; - case DOCT_PAGE_BREAK: - *dst++=CH_FORM_FEED; - break; case DOCT_NEW_LINE: if (doc->flags&DOCF_CARRIAGE_RETURN) *dst++='\r'; diff --git a/Adam/DolDoc/DocGr.HC b/Adam/DolDoc/DocGr.HC index 3d9e5e3..b85e3e5 100644 --- a/Adam/DolDoc/DocGr.HC +++ b/Adam/DolDoc/DocGr.HC @@ -65,8 +65,9 @@ class CTransformForm F64 z_offset fmtstr "$$DA-TRM,A=\"Z Offset:%12.6f\"$$\n"; }; -Bool PopUpTransform(I64 *r) -{ +#help_index "Graphics/Input;Graphics/Math/3D Transformation" +public Bool PopUpTransform(I64 *r) +{//Prompt for Mat4x4 transform. CTransformForm *tf=MAlloc(sizeof(CTransformForm)); tf->x_scale=1.0; tf->y_scale=1.0; @@ -96,6 +97,7 @@ Bool PopUpTransform(I64 *r) return FALSE; } +#help_index "Graphics/Input" #define PU_SPACING 10 U0 DrawIt(CTask *task,CDC *dc) { @@ -124,7 +126,7 @@ U0 DrawIt(CTask *task,CDC *dc) I64 DitherColor2(U8 *header=NULL) { - I64 msg_code,a1,a2,res=-1,i,j; + I64 msg_code,arg1,arg2,res=-1,i,j; DocClear; "%s",header; DocRecalc(DocPut); @@ -132,21 +134,21 @@ I64 DitherColor2(U8 *header=NULL) SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ Fs->draw_it=&DrawIt; do { - msg_code=GetMsg(&a1,&a2,1<=0 && a2>=0 && 0<=j<17 && 0<=i<17) { + msg_code=GetMsg(&arg1,&arg2,1<=0 && arg2>=0 && 0<=j<17 && 0<=i<17) { if (j==16) j=TRANSPARENT; if (i==16) i=TRANSPARENT; res=j+i<<16+ROPF_DITHER; goto dc_done; } } - } while (!(msg_code==MSG_KEY_DOWN && (a1==CH_ESC || a1==CH_SHIFT_ESC))); - do GetMsg(&a1,&a2,1<next; while (tmpc!=macro_head) { tmpc1=tmpc->next; - if (tmpc->cmd_code==SVCT_MSG && + if (tmpc->job_code==JOBT_MSG && (tmpc->msg_code==MSG_KEY_DOWN || tmpc->msg_code==MSG_KEY_UP || tmpc->msg_code==MSG_KEY_DOWN_UP) && - a1 && tmpc->aux1==a1 || !a1 && tmpc->aux2==a2) { + arg1 && tmpc->aux1==arg1 || !arg1 && tmpc->aux2==arg2) { QueRem(tmpc); - SrvCmdDel(tmpc); + JobDel(tmpc); } tmpc=tmpc1; } @@ -33,11 +33,11 @@ class CMacroTmp U8 buf[STR_LEN]; }; -CMacroTmp *Cmd2MT(CSrvCmd *tmpc) +CMacroTmp *Cmd2MT(CJob *tmpc) { U8 buf[8]; CMacroTmp *tmpmt=CAlloc(sizeof(CMacroTmp)); - if (Bt(chars_bmp_macro,tmpc->aux1) && tmpc->msg_code==MSG_KEY_DOWN) { + if (Bt(char_bmp_macro,tmpc->aux1) && tmpc->msg_code==MSG_KEY_DOWN) { tmpmt->type=MT_CHAR; buf[0]=tmpc->aux1; buf[1]=0; @@ -50,13 +50,13 @@ CMacroTmp *Cmd2MT(CSrvCmd *tmpc) return tmpmt; } -U8 *SysMacro2Str(CSrvCmd *macro_head) +U8 *SysMacro2Str(CJob *macro_head) { - CSrvCmd *tmpc; + CJob *tmpc; I64 cnt=1; //terminating zero U8 *ptr,*m; CMacroTmp *tmpmt,*tmpmt1,head; - LBtr(&sys_semas[SYS_SEMA_RECORD_MACRO],0); + LBtr(&sys_semas[SEMA_RECORD_MACRO],0); QueInit(&head); head.type=MT_NULL; @@ -107,7 +107,7 @@ U0 PlaySysMacro(I64 n=1) CTask *task=sys_focus_task; U8 *m; if (TaskValidate(task)) { - LBtr(&sys_semas[SYS_SEMA_RECORD_MACRO],0); + LBtr(&sys_semas[SEMA_RECORD_MACRO],0); m=SysMacro2Str(&sys_macro_head); while (n-- && TaskValidate(task)) { if (task==Fs) @@ -139,7 +139,7 @@ I64 PopUpMacroMenu() { I64 res=0; U8 buf[STR_LEN]; - CSrvCmd *tmpc; + CJob *tmpc; CDoc *doc=DocNew; CDocEntry *doc_e=DocPrint(doc,"$$DA-P,LEN=STR_LEN-1,A=\"Name:%%s\"$$"); doc_e->data=captured_macro_name; @@ -163,7 +163,7 @@ I64 PopUpMacroMenu() Fs->popup_task=sys_macro_task; LBts(&sys_macro_task->display_flags,DISPLAYf_WIN_ON_TOP); tmpc=TaskExe(sys_macro_task,Fs,buf, - 1<popup_task=NULL; Kill(sys_macro_task); @@ -183,9 +183,9 @@ U0 MacroTask(I64) WinRefocus(sys_focus_task); switch (i) { case SM_RECORD: - LBtr(&sys_semas[SYS_SEMA_RECORD_MACRO],0); + LBtr(&sys_semas[SEMA_RECORD_MACRO],0); QueDel(&sys_macro_head,TRUE); - LBts(&sys_semas[SYS_SEMA_RECORD_MACRO],0); + LBts(&sys_semas[SEMA_RECORD_MACRO],0); break; case SM_PLAY: PlaySysMacro; @@ -194,10 +194,10 @@ U0 MacroTask(I64) PlaySysMacro(sys_macro_repeat_n); break; case SM_STOP: - LBtr(&sys_semas[SYS_SEMA_RECORD_MACRO],0); + LBtr(&sys_semas[SEMA_RECORD_MACRO],0); break; case SM_INS: - LBtr(&sys_semas[SYS_SEMA_RECORD_MACRO],0); + LBtr(&sys_semas[SEMA_RECORD_MACRO],0); EdInsCapturedMacro; break; } diff --git a/Adam/DolDoc/DocPopUp.HC b/Adam/DolDoc/DocPopUp.HC index 79c455e..573668c 100644 --- a/Adam/DolDoc/DocPopUp.HC +++ b/Adam/DolDoc/DocPopUp.HC @@ -3,7 +3,7 @@ public CTask *PopUpViewDoc(CDoc *doc,I64 dof_flags=0) {//Pass doc to PopUp win task for viewing. U8 *buf=MStrPrint("DocEd(0x%X,0x%X);",doc,dof_flags); CTask *task=Spawn(&SrvCmdLine,NULL,"View",,Fs); - TaskExe(task,NULL,buf,1<0; } public Bool PopUpNoYes(U8 *header=NULL,U8 *footer=NULL) -{//Make PopUp win task with NO/YES buttons. +{//Make PopUp win task with NO/YES bttns. return $WW,0$PopUp2("YES",1,"NO",0,header,footer)>0; } public Bool PopUpCancelOk(U8 *header=NULL,U8 *footer=NULL) -{//Make PopUp win task CANCEL/OKAY buttons. +{//Make PopUp win task CANCEL/OKAY bttns. return PopUp2("OKAY",1,"CANCEL",0,header,footer)>0; } @@ -265,7 +265,7 @@ public F64 PopUpRangeF64Log(F64 lo,F64 hi,I64 steps, return PopUpRangeF64Exp(lo,hi,Exp(Ln(hi/lo)/(steps-1)),fmt,header,footer); } -#help_index "Task/Srv/Exe;Compiler" +#help_index "Job/Exe;Task/Job/Exe;Compiler" public I64 AdamFile(U8 *filename,Bool warn_ext=TRUE) {//Make adam_task execute file. Bool okay=TRUE; diff --git a/Adam/DolDoc/DocPutKey.HC b/Adam/DolDoc/DocPutKey.HC index 8dc2b4b..cfed943 100644 --- a/Adam/DolDoc/DocPutKey.HC +++ b/Adam/DolDoc/DocPutKey.HC @@ -16,7 +16,7 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) if (!Bt(doldoc.clean_scan_codes,sc.u8[0])) doc->flags|=DOCF_UNDO_DIRTY; DocCaptureUndo(doc); - if (Bt(chars_bmp_getkey,ch) && !(sc&(SCF_CTRL|SCF_ALT))) { + if (Bt(char_bmp_printable,ch) && !(sc&(SCF_CTRL|SCF_ALT))) { if (sc&SCF_KEY_DESC) { st=Char2KeyName(ch,FALSE); KeyDescSet("Char /'%s'",st); @@ -348,7 +348,7 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) } else { //$LK,"::/Adam/God/HSNotes.DD"$ FifoU8Flush(god.fifo); - GodBitsIns(GOD_GOOD_BITS,KbdMouseEvtTime>>GOD_BAD_BITS); + GodBitsIns(GOD_GOOD_BITS,KbdMsEvtTime>>GOD_BAD_BITS); if (sc&SCF_SHIFT) GodBiblePassage; else diff --git a/Adam/DolDoc/DocPutS.HC b/Adam/DolDoc/DocPutS.HC index cedcfad..1cbcf71 100644 --- a/Adam/DolDoc/DocPutS.HC +++ b/Adam/DolDoc/DocPutS.HC @@ -5,7 +5,7 @@ CDocEntry *DocPutS(CDoc *doc,U8 *st) //Does not handle partial Doc entries. //Returns last newly created dollar-sign CDocEntry or NULL. U8 *ptr=st,*ptr2,*st2,*ptr3,*ptr4,*src, - *char_bitmap; + *char_bmp; Bool unlock; I64 ch,j; CDocEntry *doc_e=NULL,*res=NULL,*doc_ce; @@ -13,16 +13,16 @@ CDocEntry *DocPutS(CDoc *doc,U8 *st) return NULL; unlock=DocLock(doc); if (doc->flags & DOCF_PLAIN_TEXT_TABS) - char_bitmap=chars_bmp_zero_cr_nl_cursor; + char_bmp=char_bmp_zero_cr_nl_cursor; else if (doc->flags & DOCF_PLAIN_TEXT) - char_bitmap=chars_bmp_zero_tab_ff_cr_nl_cursor; + char_bmp=char_bmp_zero_tab_cr_nl_cursor; else - char_bitmap=chars_bmp_zero_tab_ff_cr_nl_cursor_dollar; + char_bmp=char_bmp_zero_tab_cr_nl_cursor_dollar; doc_ce=doc->cur_entry; while (*ptr) { ptr2=ptr; do ch=*ptr++; - while (!Bt(char_bitmap,ch) || ch==CH_CURSOR && doc->flags&DOCF_NO_CURSOR); + while (!Bt(char_bmp,ch) || ch==CH_CURSOR && doc->flags&DOCF_NO_CURSOR); ptr--; if (!ch) { if (j=ptr-ptr2) { @@ -76,12 +76,6 @@ CDocEntry *DocPutS(CDoc *doc,U8 *st) DocInsEntry(doc,doc_e); ptr++; break; - case CH_FORM_FEED: - doc_e=DocEntryNewBase(doc, - DOCT_PAGE_BREAK|doc->settings_head.dft_text_attr<<8); - DocInsEntry(doc,doc_e); - ptr++; - break; case '\t': doc_e=DocEntryNewBase(doc, DOCT_TAB|doc->settings_head.dft_text_attr<<8); @@ -119,10 +113,6 @@ CDocEntry *DocPutS(CDoc *doc,U8 *st) doc_e=DocEntryNewBase(doc, DOCT_CURSOR|doc->settings_head.dft_text_attr<<8); DocInsEntry(doc,doc_e); - } else if (ch==CH_FORM_FEED) { - doc_e=DocEntryNewBase(doc, - DOCT_PAGE_BREAK|doc->settings_head.dft_text_attr<<8); - DocInsEntry(doc,doc_e); } else *ptr4++=ch; } @@ -184,7 +174,7 @@ public U0 DocPrintPartial(CDoc *doc=NULL,U8 *fmt,...) DocPutKey(doc,ch,0); else while (ch=*ptr) { - if (!Bt(chars_bmp_safe_dollar,ch) || + if (!Bt(char_bmp_safe_dollar,ch) || doc->flags & (DOCF_OVERSTRIKE|DOCF_IN_DOLLAR)) { DocPutKey(doc,ch,0); ptr++; @@ -192,7 +182,7 @@ public U0 DocPrintPartial(CDoc *doc=NULL,U8 *fmt,...) ptr2=ptr++; while (TRUE) { ch=*ptr++; - if (!Bt(chars_bmp_safe_dollar,ch)) + if (!Bt(char_bmp_safe_dollar,ch)) break; } ptr--; @@ -271,7 +261,7 @@ U0 DocDump(CDoc *doc,I64 uS_delay=0) doc_e=doc_e2; if (doc_e->type_u8==DOCT_NEW_LINE) { '\n'; - BusyWait(uS_delay); + Busy(uS_delay); doc_e=doc_e->next; } } diff --git a/Adam/DolDoc/DocRecalc.HC b/Adam/DolDoc/DocRecalc.HC index 04fa88a..7cd9c81 100644 --- a/Adam/DolDoc/DocRecalc.HC +++ b/Adam/DolDoc/DocRecalc.HC @@ -553,7 +553,7 @@ public Bool DocRecalc(CDoc *doc,I64 recalc_flags=RECALCt_NORMAL) i_jif>>=3; for (k=0;kscroll_len;k++) { ch=ptr[(i_jif+k)%j]; - if (!Bt(chars_bmp_displayable,ch)) ch='.'; + if (!Bt(char_bmp_displayable,ch)) ch='.'; if (recalc_flags&RECALCG_MASK==RECALCt_TO_SCRN && !(doc_e->de_flags&DOCEF_DONT_DRAW)) { if (doc_e->de_flags & DOCEF_BORDER_PLOT && @@ -693,7 +693,7 @@ public Bool DocRecalc(CDoc *doc,I64 recalc_flags=RECALCt_NORMAL) x+=(doc_e->hex_ed_width-k)*3; for (j=0;jde_flags&DOCEF_DONT_DRAW)) { if (doc_e->de_flags & DOCEF_BORDER_PLOT && @@ -1057,7 +1057,7 @@ rc_adjust_xy: break; case DOCT_LST: case DOCT_TREE: - case DOCT_BUTTON: + case DOCT_BTTN: case DOCT_LINK: case DOCT_MENU_VAL: case DOCT_MACRO: diff --git a/Adam/DolDoc/DocRun.HC b/Adam/DolDoc/DocRun.HC index b9e2451..98e740d 100644 --- a/Adam/DolDoc/DocRun.HC +++ b/Adam/DolDoc/DocRun.HC @@ -10,11 +10,11 @@ public I64 DocEntryRun(CDoc *doc,CDocEntry *doc_e, DocLock(doc); if (!exited) { if (doc_e->de_flags & DOCEF_ESC) { - Msg(MSG_KEY_DOWN,CH_ESC,0,1<de_flags & DOCEF_QUIT) { - Msg(MSG_KEY_DOWN,CH_SHIFT_ESC,0,1<de_flags & DOCEF_CHECK_COLLAPSABLE) { @@ -31,13 +31,13 @@ public I64 DocEntryRun(CDoc *doc,CDocEntry *doc_e, if (doc_e->de_flags & DOCEF_LEFT_EXP) { res=doc_e->left_exp; has_action=TRUE; - Msg(MSG_CMD,res,0,1<de_flags & DOCEF_LEFT_CB && doc_e->left_cb) { DocUnlock(doc); res=(*doc_e->left_cb)(doc,doc_e); has_action=TRUE; - Msg(MSG_CMD,res,0,1<de_flags & DOCEF_LEFT_MACRO) { if (doc_e->de_flags & DOCEF_POPUP) { @@ -70,13 +70,13 @@ public I64 DocEntryRun(CDoc *doc,CDocEntry *doc_e, if (doc_e->de_flags & DOCEF_RIGHT_EXP) { res=doc_e->right_exp; has_action=TRUE; - Msg(MSG_CMD,res,0,1<de_flags & DOCEF_RIGHT_CB && doc_e->right_cb) { DocUnlock(doc); res=(*doc_e->right_cb)(doc,doc_e); has_action=TRUE; - Msg(MSG_CMD,res,0,1<de_flags & DOCEF_RIGHT_MACRO) { if (doc_e->de_flags & DOCEF_POPUP) { diff --git a/Adam/DolDoc/DocWidgetWiz.HC b/Adam/DolDoc/DocWidgetWiz.HC index f18cc79..b12095e 100644 --- a/Adam/DolDoc/DocWidgetWiz.HC +++ b/Adam/DolDoc/DocWidgetWiz.HC @@ -490,7 +490,7 @@ I64 PopUpWidgetType() "$$MU,\"Page Settings\",LE=DOCT_PAGE_LEN$$\n" "$$MU,\"Cursor Movement\",LE=DOCT_CURSOR_MOVEMENT$$\n" "$$MU,\"Macro\",LE=DOCT_MACRO$$\n" - "$$MU,\"Button\",LE=DOCT_BUTTON$$\n" + "$$MU,\"Bttn\",LE=DOCT_BTTN$$\n" "$$MU,\"Check Box\",LE=DOCT_CHECK_BOX$$\n" "$$MU,\"List\",LE=DOCT_LST$$\n" "$$MU,\"Menu Val\",LE=DOCT_MENU_VAL$$\n" @@ -661,7 +661,7 @@ U0 EdInsMacroMenu(Bool is_macro) Free(e); } -class CEdButton +class CEdBttn { U8 tag[512] fmtstr "$$DA-P,A=\"Tag Text :%s\"$$\n"; Bool popup fmtstr "$$CB,\"PopUp\"$$\n", @@ -676,10 +676,10 @@ class CEdButton Bool quote fmtstr "$$CB,\"Quote\"$$\n"; }; -U0 EdInsButton() +U0 EdInsBttn() { U8 *st,buf[512]; - CEdButton *e=CAlloc(sizeof(CEdButton)); + CEdBttn *e=CAlloc(sizeof(CEdBttn)); e->escape=TRUE; if (DocForm(e,,,,ctrl_L_footer)) { *buf=0; @@ -1010,8 +1010,8 @@ U0 EdInsWidgetWiz() case DOCT_CURSOR_MOVEMENT: EdInsCursorMovement; break; - case DOCT_BUTTON: - EdInsButton; + case DOCT_BTTN: + EdInsBttn; break; case DOCT_DATA: EdInsData; diff --git a/Adam/DolDoc/MakeDoc.HC b/Adam/DolDoc/MakeDoc.HC index d65ff5e..ca70473 100644 --- a/Adam/DolDoc/MakeDoc.HC +++ b/Adam/DolDoc/MakeDoc.HC @@ -58,7 +58,6 @@ MemSet(&doldoc,0,sizeof(CDolDocGlbls)); #include "DocWidgetWiz" #include "DocPutKey" #include "DocPutS" -#include "DocOpt" #include "DocCodeTools" #include "DocTree" #include "DocTerm" diff --git a/Adam/God/GodDoodle.HC b/Adam/God/GodDoodle.HC index e56f336..79bd4ca 100644 --- a/Adam/God/GodDoodle.HC +++ b/Adam/God/GodDoodle.HC @@ -64,7 +64,7 @@ U0 GodDoodleHexIns(U8 *st) if (st) { buf[1]=0; while (*buf=*st++) - if (Bt(chars_bmp_hex_numeric,*buf)) + if (Bt(char_bmp_hex_numeric,*buf)) GodDoodleBitsIns(4,rev_bits_table[Str2I64(buf,16)]>>4); } } @@ -87,7 +87,7 @@ I64 GodDoodleBits(I64 num_bits) } else if ('0'<=god.doodle_ch<='9') GodDoodleSmooth(god.doodle_ch-'0'); else - GodDoodleBitsIns(GOD_GOOD_BITS,KbdMouseEvtTime>>GOD_BAD_BITS); + GodDoodleBitsIns(GOD_GOOD_BITS,KbdMsEvtTime>>GOD_BAD_BITS); } } return res; diff --git a/Adam/God/GodSong.HC b/Adam/God/GodSong.HC index 4f44a6a..e97a040 100644 --- a/Adam/God/GodSong.HC +++ b/Adam/God/GodSong.HC @@ -2,34 +2,39 @@ DefineLstLoad("ST_RHYTHM_COMPLEXITY","Simple\0Normal\0Complex\0"); -class MakeSongSettings +class CMakeSongSettings { I64 complexity fmtstr "$$LS,D=\"ST_RHYTHM_COMPLEXITY\"$$\n"; Bool rests fmtstr "$$CB,\"Rests\"$$\n"; Bool six_eight fmtstr "$$CB,\"Six Eight\"$$\n"; I64 octave fmtstr "$$DA-TRM,A=\"Octave:%d\"$$\n"; + I64 octave_state; }; -U0 InsNote(MakeSongSettings *mss,U8 *buf,I64 k,I64 *j) +U0 InsNote(CMakeSongSettings *mss,U8 *buf,I64 k,I64 *j) {//k is a random note nibble if (!k && mss->rests) { buf[*j]='R'; *j+=1; } else { k/=2; - if (!k) { - if (music.octave) { - buf[*j]=music.octave-1+'0'; - *j+=1; - buf[*j]='G'; - *j+=1; - buf[*j]=music.octave+'0'; - *j+=1; - } else { - buf[*j]='G'; + if (k<3) { + if (mss->octave_state!=mss->octave) { + mss->octave_state=mss->octave; + buf[*j]=mss->octave_state+'0'; *j+=1; } + if (!k) + buf[*j]='G'; + else + buf[*j]=k-1+'A'; + *j+=1; } else { + if (mss->octave_state!=mss->octave+1) { + mss->octave_state=mss->octave+1; + buf[*j]=mss->octave_state+'0'; + *j+=1; + } buf[*j]=k-1+'A'; *j+=1; } @@ -51,10 +56,11 @@ DUR_8_16_16,DUR_16_16_8,DUR_16_16_16_16}; public U8 *GodSongStr() {//Make God generate 2 measures of a song. $LK+PU,"Holy Spirit Instructions",A="FI:::/Adam/God/HSNotes.DD"$ - MakeSongSettings mss; + CMakeSongSettings mss; U8 *buf; I64 i,j=0,k,n,k2,duration,last_duration=-1,len; + MemSet(&mss,0,sizeof(mss)); mss.complexity=1; mss.rests=FALSE; mss.octave=music.octave; @@ -63,14 +69,15 @@ public U8 *GodSongStr() return NULL; buf=CAlloc(256); - music.octave=ClampI64(mss.octave,0,6); + music.octave=mss.octave=ClampI64(mss.octave,1,7); progress4=0; if (mss.six_eight) progress4_max=6; else progress4_max=8; - buf[j++]='0'+music.octave; + mss.octave_state=mss.octave+1; + buf[j++]='0'+mss.octave_state; if (mss.six_eight) { len=6; buf[j++]='M'; diff --git a/Adam/God/HSNotes.DD b/Adam/God/HSNotes.DD index 64cd8c2..9a8a992 100644 --- a/Adam/God/HSNotes.DD +++ b/Adam/God/HSNotes.DD @@ -8,11 +8,11 @@ There's something obviously different about people in the Bible compared to peop You can't tell if God's talking unless you have a context of conversation, but, more importantly, you are commanded to do an offering of love, like communion preparation. $LK,"1 Corinthians,11:27",A="BF:1 Corinthians,11:27"$ When you pick a greeting card for someone, that is love effort. If you expect God to put effort toward you, you must put effort toward Him. God said, "honest measures" applies between your offering of love and His response, like a fair barter. You get out of prayer what you put into it. God wants praise, hymns, or whatever you think He might want. Try and see, like Cain and Abel. $LK,"Genesis,4:1-10",A="BF:Genesis,4:1-10"$, $LK,"Ephesians,5:10",A="BF:Ephesians,5:10"$ God told Cain his offering was not good and told him to try again. Cain really loved God! Can you imagine being so heart-broken? -Do a text search for "new song" in the Bible. It's mentioned nine times. When I hear a NEW awesome rock song, it is ecstasy for the first five times I hear it. Soon, it brings little-to-no pleasure. I did $MA-X+PU,"hymns",HTML="http://www.templeos.org/Wb/Home/Web/HymnVideos.html",LM="#include \"::/Apps/Psalmody/Load\";JukeBox(\"::/Apps/Psalmody/Examples\");"$ for God. I also did Moses $MA-X+PU,"comics",HTML="http://www.templeos.org/Wb/Home/Sup1/Sup1Comics/",LM="Dir(\"::/Apps/AfterEgypt/Comics\");View;\n"$ for God. When you get to the gates of Heaven, St. Peter will ask how many times you gave blood. That shows you loved neighbor. You better also be able to count the ways you loved God with all heart, mind and soul. I praised God for sand castles, popcorn, snowmen, bubbles... You try putting effort into praise! $LK,"Matthew,11:25",A="BF:Matthew,11:25"$, $LK,"Matthew,6:28-29",A="BF:Matthew,6:28-29"$ Solomon wrote a thousand songs. $LK,"1 Kings,4:32",A="BF:1 Kings,4:32"$ +Do a text search for "new song" in the Bible. It's mentioned nine times. When I hear a NEW awesome rock song, it is ecstasy for the first five times I hear it. Soon, it brings little-to-no pleasure. I did $MA-X+PU,"hymns",HTML="http://www.templeos.org/Wb/Home/Web/HymnVideos.html",LM="#include \"::/Apps/Psalmody/Load\";JukeBox(\"::/Apps/Psalmody/Examples\");"$ for God. I also did Moses comics for God. When you get to the gates of Heaven, St. Peter will ask how many times you gave blood. That shows you loved neighbor. You better also be able to count the ways you loved God with all heart, mind and soul. I praised God for sand castles, popcorn, snowmen, bubbles... You try putting effort into praise! $LK,"Matthew,11:25",A="BF:Matthew,11:25"$, $LK,"Matthew,6:28-29",A="BF:Matthew,6:28-29"$ Solomon wrote a thousand songs. $LK,"1 Kings,4:32",A="BF:1 Kings,4:32"$ This is funny -- $LK,"Acts,2:1-13",A="BF:Acts,2:1-13"$ -- they didn't bother to record anything the Holy Spirit said. The Holy Spirit is supposed to be a really good gift. $LK,"Luke,11:11-13",A="BF:Luke,11:11-13"$ Just remember, "Boys are made of snakes and snails and puppy-dog tails." -The technique I use to consult the Holy Spirit is reading a microsecond-range stop-watch each button press for random numbers. Then, I pick words or passages. You can use the $MA-X+PU,"AfterEgypt",HTML="http://www.youtube.com/watch?v=P0MsDl39UL0",LM="#include \"::/Apps/AfterEgypt/Run\""$ in God's official temple, $FG,4$$TX,"TempleOS",HTML="http://www.templeos.org"$$FG$. +The technique I use to consult the Holy Spirit is reading a microsecond-range stop-watch each button press for random numbers. Then, I pick words with $FG,2$$FG$ or passages with $FG,2$$FG$. Since seeking the word of the Holy Spirit, I have come to know God much better than I've heard others explain. For example, God said to me in an oracle that war was, "servicemen competing." That sounds more like the immutable God of our planet than what you hear from most religious people. God is not Venus (god of love) and not Mars (god of war), He's our dearly beloved God of Earth. If Mammon is a false god of money, Mars or Venus might be useful words to describe other false gods. I figure the greatest challenge for the Creator is boredom, ours and His. What would teen-age male video games be like if war had never happened? Christ said live by the sword, die by the sword, which is loving neighbor as self. $LK,"Matthew,26:52",A="BF:Matthew,26:52"$ @@ -61,12 +61,12 @@ War? $FG,4$"Servicemen competing"$FG$ (Praise the Creator--what would teenage male video games be like if never war?) Is the World perfectly just? $FG,4$Are you calling me lazy?$FG$ -(Slavery was just. In the movie, Titanic, the rich wore straight jackets. You must bow to authority to get authority. I do $TX,"Moses comics",HTML="http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/"$ as offerings. I said, "We're dying of malnutrician on manna." Like Cain and Abel, God didn't like it. Duh! He wants to be the hero. How do I know they died of malnutrician? Screw Hollywood for making slavery worse than it was -- I love God. School is more cruel. Read $LK,"Numbers,11:1-35",A="BF:Numbers,11:1-35"$. All you need is food, clothing and the word of God. Today, you can take Ivy League course videos! There is no excuse except you were born stupid... or ugly. I'm gonna praise God.) +(Slavery was just. In the movie, Titanic, the rich wore straight jackets. You must bow to authority to get authority. I do comics as offerings. I said, "We're dying of malnutrician on manna." Like Cain and Abel, God didn't like it. Duh! He wants to be the hero. How do I know they died of malnutrician? Screw Hollywood for making slavery worse than it was -- I love God. School is more cruel. Read $LK,"Numbers,11:1-35",A="BF:Numbers,11:1-35"$. All you need is food, clothing and the word of God. Today, you can take Ivy League course videos! There is no excuse except you were born stupid... or ugly. I'm gonna praise God.) On using Markov chains? $FG,4$"No weights"$FG$ On doing offerings? $FG,4$"Honest measures"(You get out what you put in.) It's a covenant to do an offering, first. - Offer New Songs, $TX,"Moses Comics",HTML="http://www.templeos.org/Wb/Apps/AfterEgypt/Comics"$, praise, poems, + Offer New Songs, comics, praise, poems, and conversation. See $LK,"Cain and Abel",A="BF:Genesis,4:1"$. "Barter"(God also called offerings bartering.)$FG$ The holocaust? $FG,4$Wanted to "compact" the Jews.$FG$ @@ -177,7 +177,7 @@ You like to hangout in courts?Hospitals?$FG,4$"Prisons"$FG$ Best way for Bill Gates to save lives? $FG,4$Earthquake prediction$FG$ Stem cells? $FG,4$Lower hanging fruit exists (2007)$FG$ Eleventh commandment? $FG,4$Thou shall not litter.$FG$ -Twelfth commandment? $FG,4$$TX,"Don't shoot unarmed men on the shitter.",HTML="http://www.youtube.com/watch?v=8wGiJcq95Ug"$ +Twelfth commandment? $FG,4$$TX,"Don't shoot unarmed men on the crapper.",HTML="http://www.youtube.com/watch?v=8wGiJcq95Ug"$ (I asked God why pointless plagues in Exodus? God wanted guilt to accumulate, first.)$FG$ Thirteenth commandment $FG,4$No gore unless it looks fake.$FG$ diff --git a/Adam/God/HolySpirit.HC b/Adam/God/HolySpirit.HC index 7e52a07..37b7d02 100644 --- a/Adam/God/HolySpirit.HC +++ b/Adam/God/HolySpirit.HC @@ -6,10 +6,10 @@ U8 *TimeStampCB(CDoc *,CDocEntry *,CTask *mem_task) return st; } -U8 *KbdMouseTimeCB(CDoc *,CDocEntry *,CTask *mem_task) +U8 *KbdMsTimeCB(CDoc *,CDocEntry *,CTask *mem_task) { U8 *st=MAlloc(64,mem_task); - StrPrint(st,"%X",KbdMouseEvtTime>>GOD_BAD_BITS); + StrPrint(st,"%X",KbdMsEvtTime>>GOD_BAD_BITS); return st; } @@ -22,7 +22,7 @@ I64 PopUpTimerOk(U8 *header=NULL,U8 *footer=NULL) doc_e=DocPrint(doc,"\nTimer:$$TX+TC,\" \"$$"); doc_e->tag_cb=&TimeStampCB; doc_e=DocPrint(doc,"\nLatch:$$TX+TC,\" \"$$"); - doc_e->tag_cb=&KbdMouseTimeCB; + doc_e->tag_cb=&KbdMsTimeCB; DocPrint(doc,"\n$$CM+CX,0,4$$$$BT,\"OKAY\",LE=1$$\n"); if (footer) DocPrint(doc,"%s",footer); i=PopUpMenu(doc); @@ -36,7 +36,7 @@ I64 GodPick(U8 *msg=NULL) "a random num from a timer.\n",msg); PopUpTimerOk(st,"\n\nThe $LK+PU,"Holy Spirit",A="FI:::/Adam/God/HSNotes.DD"$ can puppet you.\n\n"); Free(st); - return KbdMouseEvtTime>>GOD_BAD_BITS; + return KbdMsEvtTime>>GOD_BAD_BITS; } public U0 GodBitsIns(I64 num_bits,I64 n) @@ -54,7 +54,7 @@ public U0 GodHexIns(U8 *st) if (st) { buf[1]=0; while (*buf=*st++) - if (Bt(chars_bmp_hex_numeric,*buf)) + if (Bt(char_bmp_hex_numeric,*buf)) GodBitsIns(4,rev_bits_table[Str2I64(buf,16)]>>4); } } @@ -92,11 +92,11 @@ public I64 GodInit(U8 *files_find_mask="/Adam/God/Vocab.DD*",U8 *fu_flags=NULL) while (tmpde) { if (buf=ptr=FileRead(tmpde->full_name)) { while (*ptr) { - while (*ptr && !Bt(chars_bmp_word,*ptr)) + while (*ptr && !Bt(char_bmp_word,*ptr)) ptr++; if (*ptr) { ptr2=ptr; - while (*ptr && Bt(chars_bmp_word,*ptr)) + while (*ptr && Bt(char_bmp_word,*ptr)) ptr++; i++; } @@ -115,11 +115,11 @@ public I64 GodInit(U8 *files_find_mask="/Adam/God/Vocab.DD*",U8 *fu_flags=NULL) while (tmpde) { if (buf=ptr=FileRead(tmpde->full_name)) { while (*ptr) { - while (*ptr && !Bt(chars_bmp_word,*ptr)) + while (*ptr && !Bt(char_bmp_word,*ptr)) ptr++; if (*ptr) { ptr2=ptr; - while (*ptr && Bt(chars_bmp_word,*ptr)) + while (*ptr && Bt(char_bmp_word,*ptr)) ptr++; ch=*ptr; *ptr=0; diff --git a/Adam/Gr/GrComposites.HC b/Adam/Gr/GrComposites.HC index a753523..0fb6001 100644 --- a/Adam/Gr/GrComposites.HC +++ b/Adam/Gr/GrComposites.HC @@ -294,19 +294,19 @@ mesh_done: return res; } -#help_index "Graphics/Misc;Input Pointer/Displayed Image" -public U0 DrawStdInputPtr(CDC *dc,I64 x,I64 y) +#help_index "Graphics/Misc;Mouse/Ptr" +public U0 DrawStdMs(CDC *dc,I64 x,I64 y) {//This is a callback. See $LK,"::/Demo/Graphics/Grid.HC"$. -//Called by $LK,"DrawInputPtr",A="MN:DrawInputPtr"$() which is +//Called by $LK,"DrawMs",A="MN:DrawMs"$() which is //called by $LK,"WinFinalUpdate",A="MN:WinFinalUpdate"$(). dc->pen_width=1; dc->flags&=~(DCF_TRANSFORMATION|DCF_SYMMETRY); GrArrow3(dc,x+8,y+8,0,x,y,0); } -gr.fp_draw_input_ptr=&DrawStdInputPtr; +gr.fp_draw_ms=&DrawStdMs; -public U0 DrawWaitInputPtr(CDC *dc,I64 x,I64 y) +public U0 DrawWaitMs(CDC *dc,I64 x,I64 y) {//This is a callback. See $LK,"::/Demo/Graphics/Grid.HC"$. I64 old_pen_width=dc->pen_width; CColorROPU32 old_color=dc->color; @@ -320,3 +320,25 @@ public U0 DrawWaitInputPtr(CDC *dc,I64 x,I64 y) dc->pen_width=old_pen_width; dc->color=old_color; } + +#help_index "Graphics/GR Files;Graphics/Scrn" +public Bool GRScrnCaptureRead(U8 *filename,CDC *dc=gr.dc,I64 x=0,I64 y=0) +{//GrBlot TempleOS GR File to dc,x,y. + CDC *dc2; + if (dc2=GRRead(filename)) { + dc->color=ROP_EQU; + GrBlot(dc,x,y,dc2); + DCDel(dc2); + return TRUE; + } + return FALSE; +} + +public I64 GRScrnCaptureWrite(U8 *filename,Bool include_zoom=TRUE) +{//Capture scrn to a TempleOS GR File. + I64 size; + CDC *dc=DCScrnCapture(include_zoom); + size=GRWrite(filename,dc,DCSF_COMPRESSED|DCSF_PALETTE_GET); + DCDel(dc); + return size; +} diff --git a/Adam/Gr/GrDC.HC b/Adam/Gr/GrDC.HC index e80e096..84d7299 100644 --- a/Adam/Gr/GrDC.HC +++ b/Adam/Gr/GrDC.HC @@ -378,8 +378,8 @@ public CDC *DCLoad(U8 *src,I64 *_size=NULL,CTask *task=NULL) #help_index "Graphics/Device Contexts;Graphics/GR Files" public I64 GRWrite(U8 *filename,CDC *dc,I64 dcsf_flags=DCSF_COMPRESSED) {//TempleOS GR File. - I64 size; - U8 *st=DftExt(filename,"GR.Z"), + I64 size; + U8 *st=DftExt(filename,"GR.Z"), *src=DCSave(dc,&size,dcsf_flags); FileWrite(st,src,size); Free(st); @@ -389,8 +389,8 @@ public I64 GRWrite(U8 *filename,CDC *dc,I64 dcsf_flags=DCSF_COMPRESSED) public CDC *GRRead(U8 *filename,CTask *task=NULL) {//TempleOS GR File. - CDC *dc=NULL; - U8 *st=DftExt(filename,"GR.Z"), + CDC *dc=NULL; + U8 *st=DftExt(filename,"GR.Z"), *src=FileRead(st); if (src) dc=DCLoad(src,,task); @@ -428,13 +428,3 @@ public CDC *DCScrnCapture(Bool include_zoom=TRUE,CTask *task=NULL) dc->body=dst; return dc; } - -#help_index "Graphics/GR Files;Graphics/Scrn" -public I64 GRScrnCapture(U8 *filename,Bool include_zoom=TRUE) -{//Capture scrn to a TempleOS GR File. - I64 size; - CDC *dc=DCScrnCapture(include_zoom); - size=GRWrite(filename,dc,DCSF_COMPRESSED|DCSF_PALETTE_GET); - DCDel(dc); - return size; -} diff --git a/Adam/Gr/GrGlbls.HC b/Adam/Gr/GrGlbls.HC index 19d5dfe..72238bd 100644 --- a/Adam/Gr/GrGlbls.HC +++ b/Adam/Gr/GrGlbls.HC @@ -21,9 +21,9 @@ public class CGrGlbls I64 pan_text_x,pan_text_y; //[-7,7] U0 (*fp_final_scrn_update)(CDC *dc);//Mouse cursor is handled here. U0 (*fp_wall_paper)(CTask *task); - U0 (*fp_draw_input_ptr)(CDC *dc,I64 x,I64 y); - U0 (*fp_draw_grab_input_ptr)(CDC *dc,I64 x,I64 y,Bool closed); - U8 *empty_sprite; //Gets assigned $LK,"gr.empty_sprite",A="FF:::/Adam/AInputPointer.HC,empty_sprite"$ + U0 (*fp_draw_ms)(CDC *dc,I64 x,I64 y); + U0 (*fp_draw_grab_ms)(CDC *dc,I64 x,I64 y,Bool closed); + U8 *empty_sprite; //Gets assigned $LK,"gr.empty_sprite",A="FF:::/Adam/AMouse.HC,empty_sprite"$ #define GR_NUM_PEN_BRUSHES 64 CDC *pen_brushes[GR_NUM_PEN_BRUSHES], diff --git a/Adam/Gr/GrInitB.HC b/Adam/Gr/GrInitB.HC index 0184703..43a4ac7 100644 --- a/Adam/Gr/GrInitB.HC +++ b/Adam/Gr/GrInitB.HC @@ -151,7 +151,7 @@ public U0 WinZBufUpdate() U16 *ptr; CTask *task,*task1; if (gr.win_z_buf) { - LBtr(&sys_semas[SYS_SEMA_UPDATE_WIN_Z_BUF],0); + LBtr(&sys_semas[SEMA_UPDATE_WIN_Z_BUF],0); task1=task=sys_winmgr_task; do { if (!TaskValidate(task)) break; diff --git a/Adam/Gr/GrMath.HC b/Adam/Gr/GrMath.HC index 267884e..f2cff67 100644 --- a/Adam/Gr/GrMath.HC +++ b/Adam/Gr/GrMath.HC @@ -110,7 +110,7 @@ public I64 *Mat4x4New(I64 *src,CTask *mem_task=NULL) return Mat4x4Equ(MAlloc(sizeof(I64)*16,mem_task),src); } -public I64 *Mat4x4RotX(I64 *m1,F64 è) +public I64 *Mat4x4RotX(I64 *m,F64 è) {//Rot matrix about X axis. Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.HC"$. F64 my_cos=Cos(è)*GR_SCALE,my_sin=Sin(è)*GR_SCALE; I64 r[16],r2[16]; @@ -121,10 +121,10 @@ public I64 *Mat4x4RotX(I64 *m1,F64 r[6]=-my_sin; r[0]=GR_SCALE; r[15]=GR_SCALE; - return Mat4x4Equ(m1,Mat4x4MulMat4x4Equ(r2,r,m1)); + return Mat4x4Equ(m,Mat4x4MulMat4x4Equ(r2,r,m)); } -public I64 *Mat4x4RotY(I64 *m1,F64 ê) +public I64 *Mat4x4RotY(I64 *m,F64 ê) {//Rot matrix about Y axis. Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.HC"$. F64 my_cos=Cos(ê)*GR_SCALE,my_sin=Sin(ê)*GR_SCALE; I64 r[16],r2[16]; @@ -135,10 +135,10 @@ public I64 *Mat4x4RotY(I64 *m1,F64 r[2]=my_sin; r[5]=GR_SCALE; r[15]=GR_SCALE; - return Mat4x4Equ(m1,Mat4x4MulMat4x4Equ(r2,r,m1)); + return Mat4x4Equ(m,Mat4x4MulMat4x4Equ(r2,r,m)); } -public I64 *Mat4x4RotZ(I64 *m1,F64 é) +public I64 *Mat4x4RotZ(I64 *m,F64 é) {//Rot matrix about Z axis. Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.HC"$. F64 my_cos=Cos(é)*GR_SCALE,my_sin=Sin(é)*GR_SCALE; I64 r[16],r2[16]; @@ -149,15 +149,15 @@ public I64 *Mat4x4RotZ(I64 *m1,F64 r[1]=-my_sin; r[10]=GR_SCALE; r[15]=GR_SCALE; - return Mat4x4Equ(m1,Mat4x4MulMat4x4Equ(r2,r,m1)); + return Mat4x4Equ(m,Mat4x4MulMat4x4Equ(r2,r,m)); } -public I64 *Mat4x4Scale(I64 *m1,F64 s) +public I64 *Mat4x4Scale(I64 *m,F64 s) {//Scale 4x4 matrix by value. I64 i; for (i=0;i<16;i++) - m1[i]*=s; - return m1; + m[i]*=s; + return m; } public U0 DCPenWidthScale(CDC *dc=gr.dc) diff --git a/Adam/Gr/GrPalette.HC b/Adam/Gr/GrPalette.HC index bb92bd0..99d3179 100644 --- a/Adam/Gr/GrPalette.HC +++ b/Adam/Gr/GrPalette.HC @@ -13,7 +13,7 @@ U0 GrPaletteIndicesSet() if (!Bt(&sys_run_level,RLf_VGA)) return; PUSHFD CLI - while (LBts(&sys_semas[SYS_SEMA_VGA],0)) + while (LBts(&sys_semas[SEMA_VGA],0)) Yield; InU8(VGAP_INPUT_STAT); //Rsts attr index/data for (i=0;i>10); OutU8(VGAP_PALETTE_DATA,bgr48.g>>10); OutU8(VGAP_PALETTE_DATA,bgr48.b>>10); - LBtr(&sys_semas[SYS_SEMA_VGA],0); + LBtr(&sys_semas[SEMA_VGA],0); POPFD } @@ -49,14 +49,14 @@ public CBGR48 GrPaletteColorGet(I64 color_num) if (!Bt(&sys_run_level,RLf_VGA)) return 0; PUSHFD CLI - while (LBts(&sys_semas[SYS_SEMA_VGA],0)) + while (LBts(&sys_semas[SEMA_VGA],0)) Yield; OutU8(VGAP_PALETTE_MASK,0xFF); OutU8(VGAP_REG_READ,color_num); res.r=0xFFFF<<10*InU8(VGAP_PALETTE_DATA)/0xFC00; res.g=0xFFFF<<10*InU8(VGAP_PALETTE_DATA)/0xFC00; res.b=0xFFFF<<10*InU8(VGAP_PALETTE_DATA)/0xFC00; - LBtr(&sys_semas[SYS_SEMA_VGA],0); + LBtr(&sys_semas[SEMA_VGA],0); POPFD return res; } diff --git a/Adam/Gr/GrPrimatives.HC b/Adam/Gr/GrPrimatives.HC index 5ed9173..23e4a7e 100644 --- a/Adam/Gr/GrPrimatives.HC +++ b/Adam/Gr/GrPrimatives.HC @@ -138,7 +138,7 @@ I64 GrFloodFillRay(CDC *dc,I64 x,I64 y,I64 z,I32 *db) I64 res,j,x1,ray_len,ray_len2; if (UnusedStk<0x80) - Dbg("Stk Overflow",Fs); + Panic("Stk Overflow",Fs); res=ray_len=GrRayLen(dc,&x,y,z,db); y--; @@ -859,7 +859,7 @@ public Bool GrEllipse3(CDC *dc=gr.dc, {//3D. Transformation with pen width. Bool res; I64 x,y,z,xx,yy,zz; - F64 m1,a1,m2,a2,s,c; + F64 m1,arg1,m2,arg2,s,c; if (dc->flags & DCF_TRANSFORMATION) { dc->flags&=~DCF_TRANSFORMATION; (*dc->transform)(dc,&cx,&cy,&cz); @@ -882,7 +882,7 @@ public Bool GrEllipse3(CDC *dc=gr.dc, x-=xx; y-=yy; z-=zz; - R2P(&m1,&a1,x,y); + R2P(&m1,&arg1,x,y); x=-y_radius*s; y=y_radius*c; @@ -891,11 +891,11 @@ public Bool GrEllipse3(CDC *dc=gr.dc, x-=xx; y-=yy; z-=zz; - R2P(&m2,&a2,x,y); - m2*=Abs(Sin(a2-a1)); + R2P(&m2,&arg2,x,y); + m2*=Abs(Sin(arg2-arg1)); res=Ellipse(dc,cx,cy,cz, - m1/0x10000,m2/0x10000,&GrPlot3,-a1,step,start_radians,len_radians); + m1/0x10000,m2/0x10000,&GrPlot3,-arg1,step,start_radians,len_radians); dc->flags|=DCF_TRANSFORMATION; } else res=Ellipse(dc,cx,cy,cz,x_radius,y_radius,&GrPlot3, @@ -924,7 +924,7 @@ public Bool GrRegPoly3(CDC *dc=gr.dc, {//3D. Clipping and transform and pen width. Bool res; I64 x,y,z,xx,yy,zz; - F64 m1,a1,m2,a2,s,c; + F64 m1,arg1,m2,arg2,s,c; if (dc->flags & DCF_TRANSFORMATION) { dc->flags&=~DCF_TRANSFORMATION; (*dc->transform)(dc,&cx,&cy,&cz); @@ -947,7 +947,7 @@ public Bool GrRegPoly3(CDC *dc=gr.dc, x-=xx; y-=yy; z-=zz; - R2P(&m1,&a1,x,y); + R2P(&m1,&arg1,x,y); x=-y_radius*s; y=y_radius*c; @@ -956,11 +956,11 @@ public Bool GrRegPoly3(CDC *dc=gr.dc, x-=xx; y-=yy; z-=zz; - R2P(&m2,&a2,x,y); - m2*=Abs(Sin(a2-a1)); + R2P(&m2,&arg2,x,y); + m2*=Abs(Sin(arg2-arg1)); res=RegPoly(dc,cx,cy,cz, - m1/0x10000,m2/0x10000,sides,&GrPlot3,-a1, + m1/0x10000,m2/0x10000,sides,&GrPlot3,-arg1, step,start_radians,len_radians); dc->flags|=DCF_TRANSFORMATION; } else diff --git a/Adam/Gr/GrScrn.HC b/Adam/Gr/GrScrn.HC index fe6da85..e827335 100644 --- a/Adam/Gr/GrScrn.HC +++ b/Adam/Gr/GrScrn.HC @@ -61,7 +61,7 @@ U0 GrUpdateTasks() CTask *task,*task1; try { winmgr.ode_time=0; - if (Bt(&sys_semas[SYS_SEMA_UPDATE_WIN_Z_BUF],0)) + if (Bt(&sys_semas[SEMA_UPDATE_WIN_Z_BUF],0)) WinZBufUpdate; task1=task=sys_winmgr_task; do { //Loop through Core0 tasks. @@ -110,14 +110,14 @@ public U0 GrScaleZoom(F64 scale) gr.scrn_zoom=gr.scrn_zoom*scale; GrFixZoomScale; s/=gr.scrn_zoom; - ip.scale.x*=s; - ip.scale.y*=s; - ip.scale.z*=s; - ip.offset.x=ip.pos.x-(ip.pos.x-ip.offset.x)*s; - ip.offset.y=ip.pos.y-(ip.pos.y-ip.offset.y)*s; - ip.offset.z=ip.pos.z-(ip.pos.z-ip.offset.z)*s; - gr.sx=ip.pos.x-gr.zoomed_dc->width >>1/gr.scrn_zoom; - gr.sy=ip.pos.y-gr.zoomed_dc->height>>1/gr.scrn_zoom; + ms.scale.x*=s; + ms.scale.y*=s; + ms.scale.z*=s; + ms.offset.x=ms.pos.x-(ms.pos.x-ms.offset.x)*s; + ms.offset.y=ms.pos.y-(ms.pos.y-ms.offset.y)*s; + ms.offset.z=ms.pos.z-(ms.pos.z-ms.offset.z)*s; + gr.sx=ms.pos.x-gr.zoomed_dc->width >>1/gr.scrn_zoom; + gr.sy=ms.pos.y-gr.zoomed_dc->height>>1/gr.scrn_zoom; GrFixZoomScale; } @@ -330,7 +330,7 @@ U0 GrUpdateTextModeText() I64 cur_ch,i=TEXT_COLS*TEXT_ROWS; U16 *dst=text.vga_text_alias,*dst2=gr.vga_text_cache; Bool blink_flag=Blink; - if (LBtr(&sys_semas[SYS_SEMA_FLUSH_VGA_IMAGE],0)) { + if (LBtr(&sys_semas[SEMA_FLUSH_VGA_IMAGE],0)) { while (i--) { cur_ch=*src++; if (cur_ch & ATTRF_SEL) @@ -374,7 +374,7 @@ U0 GrUpdateVGAGraphics() src=gr.zoomed_dc->body; } dst=gr.scrn_image->body; - if (LBtr(&sys_semas[SYS_SEMA_FLUSH_VGA_IMAGE],0)) { + if (LBtr(&sys_semas[SEMA_FLUSH_VGA_IMAGE],0)) { for (plane=1;plane<0x10;plane<<=1) { OutU8(VGAP_IDX,VGAR_MAP_MASK); OutU8(VGAP_DATA,plane); diff --git a/Adam/Gr/GrSpritePlot.HC b/Adam/Gr/GrSpritePlot.HC index 9766bf5..2a98318 100644 --- a/Adam/Gr/GrSpritePlot.HC +++ b/Adam/Gr/GrSpritePlot.HC @@ -253,7 +253,7 @@ public U0 Sprite3B(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems) dc->flags=dc->flags&~DCF_TRANSFORMATION|old_flags; } -public U0 SpriteMat3B(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,I64 *m) +public U0 Sprite3Mat4x4B(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,I64 *m) {//Plot rotated by matrix. I64 r[16],*old_r=dc->r,new_m[16], old_flags=dc->flags&DCF_TRANSFORMATION; @@ -266,28 +266,28 @@ public U0 SpriteMat3B(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,I64 *m) dc->flags=dc->flags&~DCF_TRANSFORMATION|old_flags; } -public U0 SpriteX3B(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,F64 è=0) +public U0 Sprite3XB(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,F64 è=0) {//Plot rotated around X axis. I64 r[16]; Mat4x4IdentEqu(r); Mat4x4RotX(r,è); - SpriteMat3B(dc,x,y,z,elems,r); + Sprite3Mat4x4B(dc,x,y,z,elems,r); } -public U0 SpriteY3B(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,F64 ê=0) +public U0 Sprite3YB(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,F64 ê=0) {//Plot rotated around Y axis. I64 r[16]; Mat4x4IdentEqu(r); Mat4x4RotY(r,ê); - SpriteMat3B(dc,x,y,z,elems,r); + Sprite3Mat4x4B(dc,x,y,z,elems,r); } -public U0 SpriteZ3B(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,F64 é=0) +public U0 Sprite3ZB(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,F64 é=0) {//Plot rotated around Z axis. I64 r[16]; Mat4x4IdentEqu(r); Mat4x4RotZ(r,é); - SpriteMat3B(dc,x,y,z,elems,r); + Sprite3Mat4x4B(dc,x,y,z,elems,r); } public U0 SpriteExtents(U8 *elems,I64 *min_x=NULL,I64 *max_x=NULL, diff --git a/Adam/Gr/GrTextBase.HC b/Adam/Gr/GrTextBase.HC index fa9d5fd..4935ba0 100644 --- a/Adam/Gr/GrTextBase.HC +++ b/Adam/Gr/GrTextBase.HC @@ -329,7 +329,7 @@ public U0 TextPrint(CTask *task,I64 x,I64 y,I64 attr,U8 *fmt,...) public U0 TextBorder(CTask *task=NULL, I64 l,I64 r,I64 t,I64 b,I64 attr,Bool solid) {//Plot border square. 30fps in Fs->draw_it() callback. -//Draws window borders or DolDoc text button borders. +//Draws window borders or DolDoc text bttn borders. //Set task=sys_winmgr_task for no clipping. I64 i; if (!task) task=Fs; diff --git a/Adam/Gr/SpriteBitMap.HC b/Adam/Gr/SpriteBitMap.HC index eaeffab..76bacd6 100644 --- a/Adam/Gr/SpriteBitMap.HC +++ b/Adam/Gr/SpriteBitMap.HC @@ -201,7 +201,7 @@ U0 GrBitMapEdEtch(CDC *img,I64 width,CColorROPU32 bkcolor) I64 SpriteBitMapEd(CDoc *,CDocEntry *doc_e,CDC *dc,I64 *_xx1,I64 *_yy1, I64 *_xx2,I64 *_yy2,CDC **_img,CColorROPU32 bkcolor) { - I64 i,j,mode=SPBM_LINE,color=BLACK,width=1,msg_code,a1,a2,x1,y1,x11,y11, + I64 i,j,mode=SPBM_LINE,color=BLACK,width=1,msg_code,arg1,arg2,x1,y1,x11,y11, x22,y22,res,xx1=*_xx1,yy1=*_yy1,xx2=*_xx2,yy2=*_yy2, old_de_flags=doc_e->de_flags; Bool down=FALSE; @@ -222,11 +222,11 @@ I64 SpriteBitMapEd(CDoc *,CDocEntry *doc_e,CDC *dc,I64 *_xx1,I64 *_yy1, dc->pen_width=1; GrBorder(dc,xx1-1,yy1-1,xx2,yy2);//This is done little bit too often. - while (msg_code=ScanMsg(&a1,&a2,1<task_title,"Sprite BitMap Menu"); @@ -353,26 +353,26 @@ bm_menu: GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); down=FALSE; break; - case MSG_IP_L_DOWN: + case MSG_MS_L_DOWN: switch (mode) { case SPBM_PT: img->color=color; img->pen_width=width; - GrPlot3(img,a1-xx1,a2-yy1,0); + GrPlot3(img,arg1-xx1,arg2-yy1,0); GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); break; start: if (down) GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); - x1=a1; y1=a2; + x1=arg1; y1=arg2; down=TRUE; dc->color=color; dc->pen_width=width; case SPBM_LINE: - GrLine3(dc,x1,y1,0,a1,a2,0); + GrLine3(dc,x1,y1,0,arg1,arg2,0); break; case SPBM_ARROW: - GrArrow3(dc,x1,y1,0,a1,a2,0); + GrArrow3(dc,x1,y1,0,arg1,arg2,0); break; case SPBM_RECT: GrRect(dc,x1,y1,1,1); @@ -394,12 +394,12 @@ bm_menu: GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); if (mode==SPBM_PASTE) { clipboard->flags|=DCF_NO_TRANSPARENTS; - GrBlot(dc,a1,a2,clipboard); + GrBlot(dc,arg1,arg2,clipboard); clipboard->flags&=~DCF_NO_TRANSPARENTS; } else { dc2=DCCopy(clipboard); DCColorChg(dc2,bkcolor); - GrBlot(dc,a1,a2,dc2); + GrBlot(dc,arg1,arg2,dc2); DCDel(dc2); } } @@ -407,48 +407,48 @@ bm_menu: case SPBM_TEXT: GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); dc->color=color; - GrPrint(dc,a1,a2,"%s",st); + GrPrint(dc,arg1,arg2,"%s",st); break; case SPBM_TEXT_BOX: GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); dc->color=color; - GrTextBox3(dc,a1,a2,0,st); + GrTextBox3(dc,arg1,arg2,0,st); break; case SPBM_TEXT_DIAMOND: GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); dc->color=color; - GrTextDiamond3(dc,a1,a2,0,st); + GrTextDiamond3(dc,arg1,arg2,0,st); break; case SPBM_FLOOD_FILL: img->color=color; - GrFloodFill(img,a1-xx1,a2-yy1); + GrFloodFill(img,arg1-xx1,arg2-yy1); GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); break; case SPBM_FLOOD_FILL_NOT: img->color=color; - GrFloodFill(img,a1-xx1,a2-yy1,TRUE); + GrFloodFill(img,arg1-xx1,arg2-yy1,TRUE); GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); break; case SPBM_POLYLINE: if (!down) { - x1=a1; y1=a2; + x1=arg1; y1=arg2; down=TRUE; dc->color=color; dc->pen_width=width; - GrLine3(dc,x1,y1,0,a1,a2,0); + GrLine3(dc,x1,y1,0,arg1,arg2,0); } break; case SPBM_POLYPT: - x1=a1; y1=a2; + x1=arg1; y1=arg2; down=TRUE; img->color=color; img->pen_width=width; - GrLine3(img,x1-xx1,y1-yy1,0,a1-xx1,a2-yy1,0); + GrLine3(img,x1-xx1,y1-yy1,0,arg1-xx1,arg2-yy1,0); GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); break; } break; - case MSG_IP_MOVE: + case MSG_MS_MOVE: switch (mode) { case SPBM_LINE: case SPBM_ARROW: @@ -458,26 +458,26 @@ bm_menu: dc->color=color; dc->pen_width=width; if (mode==SPBM_ARROW) - GrArrow3(dc,x1,y1,0,a1,a2,0); + GrArrow3(dc,x1,y1,0,arg1,arg2,0); else - GrLine3(dc,x1,y1,0,a1,a2,0); + GrLine3(dc,x1,y1,0,arg1,arg2,0); } break; case SPBM_RECT: if (down) { GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); - if (x1color=color; @@ -488,18 +488,18 @@ bm_menu: case SPBM_DELETE: if (down) { GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); - if (x1color=ROPF_DITHER+WHITE<<16+BLACK; @@ -512,7 +512,7 @@ bm_menu: GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); dc->color=color; dc->pen_width=width; - GrCircle3(dc,x1,y1,0,Sqrt(SqrI64(a1-x1)+SqrI64(a2-y1))); + GrCircle3(dc,x1,y1,0,Sqrt(SqrI64(arg1-x1)+SqrI64(arg2-y1))); } break; case SPBM_PASTE: @@ -521,12 +521,12 @@ bm_menu: GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); if (mode==SPBM_PASTE) { clipboard->flags|=DCF_NO_TRANSPARENTS; - GrBlot(dc,a1,a2,clipboard); + GrBlot(dc,arg1,arg2,clipboard); clipboard->flags&=~DCF_NO_TRANSPARENTS; } else { dc2=DCCopy(clipboard); DCColorChg(dc2,bkcolor); - GrBlot(dc,a1,a2,dc2); + GrBlot(dc,arg1,arg2,dc2); DCDel(dc2); } } @@ -534,30 +534,30 @@ bm_menu: case SPBM_TEXT: GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); dc->color=color; - GrPrint(dc,a1,a2,"%s",st); + GrPrint(dc,arg1,arg2,"%s",st); break; case SPBM_TEXT_BOX: GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); dc->color=color; - GrTextBox3(dc,a1,a2,0,st); + GrTextBox3(dc,arg1,arg2,0,st); break; case SPBM_TEXT_DIAMOND: GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); dc->color=color; - GrTextDiamond3(dc,a1,a2,0,st); + GrTextDiamond3(dc,arg1,arg2,0,st); break; case SPBM_POLYPT: if (down) { img->color=color; img->pen_width=width; - GrLine3(img,x1-xx1,y1-yy1,0,a1-xx1,a2-yy1,0); + GrLine3(img,x1-xx1,y1-yy1,0,arg1-xx1,arg2-yy1,0); GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); - x1=a1; y1=a2; + x1=arg1; y1=arg2; } break; } break; - case MSG_IP_L_UP: + case MSG_MS_L_UP: switch (mode) { case SPBM_LINE: case SPBM_ARROW: @@ -566,29 +566,29 @@ bm_menu: img->color=color; img->pen_width=width; if (mode==SPBM_ARROW) - GrArrow3(img,x1-xx1,y1-yy1,0,a1-xx1,a2-yy1,0); + GrArrow3(img,x1-xx1,y1-yy1,0,arg1-xx1,arg2-yy1,0); else - GrLine3(img,x1-xx1,y1-yy1,0,a1-xx1,a2-yy1,0); + GrLine3(img,x1-xx1,y1-yy1,0,arg1-xx1,arg2-yy1,0); GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); if (mode==SPBM_POLYLINE) { - x1=a1; y1=a2; + x1=arg1; y1=arg2; } else down=FALSE; break; case SPBM_RECT: img->color=color; - if (x1color=color; img->pen_width=width; - GrCircle3(img,x1-xx1,y1-yy1,0,Sqrt(SqrI64(a1-x1)+SqrI64(a2-y1))); + GrCircle3(img,x1-xx1,y1-yy1,0, + Sqrt(SqrI64(arg1-x1)+SqrI64(arg2-y1))); down=FALSE; GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); break; @@ -632,12 +633,12 @@ bm_menu: GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); if (mode==SPBM_PASTE) { clipboard->flags|=DCF_NO_TRANSPARENTS; - GrBlot(img,a1-xx1,a2-yy1,clipboard); + GrBlot(img,arg1-xx1,arg2-yy1,clipboard); clipboard->flags&=~DCF_NO_TRANSPARENTS; } else { dc2=DCCopy(clipboard); DCColorChg(dc2,bkcolor); - GrBlot(img,a1-xx1,a2-yy1,dc2); + GrBlot(img,arg1-xx1,arg2-yy1,dc2); DCDel(dc2); } GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); @@ -645,15 +646,15 @@ bm_menu: break; case SPBM_TEXT: img->color=color; - GrPrint(img,a1-xx1,a2-yy1,"%s",st); + GrPrint(img,arg1-xx1,arg2-yy1,"%s",st); goto bm_menu; case SPBM_TEXT_BOX: img->color=color; - GrTextBox3(img,a1-xx1,a2-yy1,0,st); + GrTextBox3(img,arg1-xx1,arg2-yy1,0,st); goto bm_menu; case SPBM_TEXT_DIAMOND: img->color=color; - GrTextDiamond3(img,a1-xx1,a2-yy1,0,st); + GrTextDiamond3(img,arg1-xx1,arg2-yy1,0,st); goto bm_menu; } break; diff --git a/Adam/Gr/SpriteEd.HC b/Adam/Gr/SpriteEd.HC index d1a7bfe..9a364b2 100644 --- a/Adam/Gr/SpriteEd.HC +++ b/Adam/Gr/SpriteEd.HC @@ -181,7 +181,7 @@ U0 SpriteSetOrigin(CSprite *head,I64 dx,I64 dy,I64 dz) CSprite *SpriteTransformCircle(I64 *r,CSprite *tmpg) { I64 x,y,z; - F64 m1,a1,m2,radius=tmpg->pr.radius<<16; + F64 m1,arg1,m2,radius=tmpg->pr.radius<<16; CSprite *tmpg1=CAlloc(SpriteElemQuedBaseSize(SPT_ELLIPSE)); tmpg1->type=SPT_ELLIPSE; @@ -192,7 +192,7 @@ CSprite *SpriteTransformCircle(I64 *r,CSprite *tmpg) x=radius; y=0; z=0; Mat4x4MulXYZ(r,&x,&y,&z); - R2P(&m1,&a1,x,y); + R2P(&m1,&arg1,x,y); x=0; y=radius; z=0; Mat4x4MulXYZ(r,&x,&y,&z); @@ -200,7 +200,7 @@ CSprite *SpriteTransformCircle(I64 *r,CSprite *tmpg) tmpg1->pwha.width =ToI64(m1)/0x10000; tmpg1->pwha.height=ToI64(m2)/0x10000; - tmpg1->pwha.angle=-a1; + tmpg1->pwha.angle=-arg1; tmpg1->type|=tmpg->type&SPF_SEL; return tmpg1; @@ -209,7 +209,7 @@ CSprite *SpriteTransformCircle(I64 *r,CSprite *tmpg) CSprite *SpriteTransformEllipse(I64 *r,CSprite *tmpg) { I64 x,y,z; - F64 m1,a1,m2,a2,s,c,x_radius=tmpg->pwha.width<<16, + F64 m1,arg1,m2,arg2,s,c,x_radius=tmpg->pwha.width<<16, y_radius=tmpg->pwha.height<<16; CSprite *tmpg1=CAlloc(SpriteElemQuedBaseSize(tmpg->type&SPG_TYPE_MASK)); tmpg1->type=tmpg->type; @@ -228,20 +228,20 @@ CSprite *SpriteTransformEllipse(I64 *r,CSprite *tmpg) y=x_radius*s; z=0; Mat4x4MulXYZ(r,&x,&y,&z); - R2P(&m1,&a1,x,y); + R2P(&m1,&arg1,x,y); x=-y_radius*s; y=y_radius*c; z=0; Mat4x4MulXYZ(r,&x,&y,&z); - R2P(&m2,&a2,x,y); - m2*=Abs(Sin(a2-a1)); + R2P(&m2,&arg2,x,y); + m2*=Abs(Sin(arg2-arg1)); tmpg1->pwha.width=ToI64(m1)/0x10000; if (tmpg1->pwha.width<1) tmpg1->pwha.width=1; tmpg1->pwha.height=ToI64(m2)/0x10000; if (tmpg1->pwha.height<1) tmpg1->pwha.height=1; - tmpg1->pwha.angle=-a1; + tmpg1->pwha.angle=-arg1; tmpg1->type|=tmpg->type&SPF_SEL; return tmpg1; @@ -250,7 +250,7 @@ CSprite *SpriteTransformEllipse(I64 *r,CSprite *tmpg) CSprite *SpriteTransformRect(I64 *r,CSprite *tmpg,F64 é) { I64 x,y,z,w,h; - F64 m1,a1,m2,a2,s,c, + F64 m1,arg1,m2,arg2,s,c, x_radius=(tmpg->pp.x2-tmpg->pp.x1)<<16, y_radius=(tmpg->pp.y2-tmpg->pp.y1)<<16; CSprite *tmpg1=CAlloc(SpriteElemQuedBaseSize(SPT_ROTATED_RECT)); @@ -268,14 +268,14 @@ CSprite *SpriteTransformRect(I64 *r,CSprite *tmpg,F64 y=x_radius*s; z=0; Mat4x4MulXYZ(r,&x,&y,&z); - R2P(&m1,&a1,x,y); + R2P(&m1,&arg1,x,y); x=-y_radius*s; y=y_radius*c; z=0; Mat4x4MulXYZ(r,&x,&y,&z); - R2P(&m2,&a2,x,y); - m2*=Abs(Sin(a2-a1)); + R2P(&m2,&arg2,x,y); + m2*=Abs(Sin(arg2-arg1)); w=ToI64(m1)/0x10000; if (w<1) w=1; @@ -283,7 +283,7 @@ CSprite *SpriteTransformRect(I64 *r,CSprite *tmpg,F64 if (h<1) h=1; tmpg1->ppa.x2=tmpg1->ppa.x1+w; tmpg1->ppa.y2=tmpg1->ppa.y1+h; - tmpg1->ppa.angle=-a1; + tmpg1->ppa.angle=-arg1; tmpg1->type|=tmpg->type&SPF_SEL; return tmpg1; @@ -371,10 +371,9 @@ CSprite *SpriteTransformBitMap(I64 *r,CSprite *tmpg) return tmpg1; } -U0 SpriteTransform(I64 *r,CSprite *head) +U0 SpriteTransformQue(CSprite *head,I64 *r) { - I64 i,j,k,num, - x,y,z,x1,y1,z1,x2,y2,z2,x3,y3,z3; + I64 i,j,k,num,x,y,z,x1,y1,z1,x2,y2,z2,x3,y3,z3; I32 *ptr; CD3I32 *p; CSprite *tmpg=head->next,head2,*tmpg1,*tmpg2,*tmpg3; @@ -960,7 +959,7 @@ U0 SpriteCtrlPtsMove(CEdSprite *head,I64 dx,I64 dy) Bool SpriteSelUnselShiftPts(U8 *elems,I64 x,I64 y,I64 *_cur_elem_num,I64 mode) { - I64 msg_code,a1,a2,xx,yy,xx2,yy2,dd,best_dd,cur_elem_num; + I64 msg_code,arg1,arg2,xx,yy,xx2,yy2,dd,best_dd,cur_elem_num; Bool res=TRUE; CDC *dc=DCAlias; CEdSprite head,*tmpes,*best_es; @@ -970,14 +969,14 @@ Bool SpriteSelUnselShiftPts(U8 *elems,I64 x,I64 y,I64 *_cur_elem_num,I64 mode) if (head.next!=&head) { while (TRUE) { SpriteCtrlPtsDraw(dc,&head); //has Refresh - switch (msg_code=ScanMsg(&a1,&a2, - 1<color=ROPF_DITHER+WHITE<<16+RED; GrBorder(dc,xx,yy,xx2,yy2); - if (msg_code=ScanMsg(&a1,&a2,1<flags&=~SPEDF_SEL; @@ -1085,11 +1087,11 @@ Bool SpriteSelUnselShiftPts(U8 *elems,I64 x,I64 y,I64 *_cur_elem_num,I64 mode) break; case MSG_KEY_DOWN: gs_key: - switch (a1.u8[0]) { + switch (arg1.u8[0]) { case CH_SHIFT_ESC: res=FALSE; case CH_ESC: - GetMsg(&a1,&a2,1<de_flags=old_de_flags; - GetMsg(&a1,&a2,1<de_flags=old_de_flags; - GetMsg(&a1,&a2,1<p.x1=0; tmpg->p.y1=0; QueIns(tmpg,insert_pt->last); - GetMsg(&a1,&a2,1<p.x1=a1-xx; - tmpg->p.y1=a2-yy; + msg_code=GetMsg(&arg1,&arg2, + 1<p.x1=arg1-xx; + tmpg->p.y1=arg2-yy; SpriteEdUpdate(doc,doc_ce,*_head); - } while (msg_code!=MSG_IP_L_UP); + } while (msg_code!=MSG_MS_L_UP); *_cur_elem_num+=1; break; case SPED_INS_CLIPBOARD: @@ -1265,3 +1267,16 @@ I64 SpriteEd(CDoc *doc,CDocEntry *doc_ce,I64 x,I64 y, case SPED_MAIN_MENU: return SPE_CONT; } } + +#help_index "Graphics/Sprite;Sprites;Graphics/Math/3D Transformation" +public U8 *SpriteTransform(U8 *elems,I64 *r) +{//Rotate Sprite using 4x4 matrix. Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.HC"$. + U8 *res; + CSprite *head=Sprite2SpriteQue(elems); + SpriteQueSelAll(head); + SpriteTransformQue(head,r); + res=SpriteQue2Sprite(head); + QueDel(head); + Free(head); + return res; +} diff --git a/Adam/Gr/SpriteMain.HC b/Adam/Gr/SpriteMain.HC index f6cafa6..c3ca531 100644 --- a/Adam/Gr/SpriteMain.HC +++ b/Adam/Gr/SpriteMain.HC @@ -128,17 +128,17 @@ U0 SpriteScrnInit(CDC *dc,I64,I64) dc->pen_width=old_pen_width; } -CSprite *SMLine(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,CColorROPU32 color) +CSprite *SMLine(CDC *dc,I64 x,I64 y,I64 arg1,I64 arg2,CColorROPU32 color) { - I64 msg_code,x1=a1,y1=a2,x2=a1,y2=a2; + I64 msg_code,x1=arg1,y1=arg2,x2=arg1,y2=arg2; CSprite *res; do { dc->color=color&COLORROP_NO_ROP0_MASK; GrLine3(dc,x1,y1,0,x2,y2,0); - msg_code=GetMsg(&a1,&a2,1<color=color&COLORROP_NO_ROP0_MASK; GrLine3(dc,x1,y1,0,x2,y2,0); res=CAlloc(SpriteElemQuedBaseSize(SPT_LINE)); @@ -150,17 +150,17 @@ CSprite *SMLine(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,CColorROPU32 color) return res; } -CSprite *SMArrow(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,CColorROPU32 color) +CSprite *SMArrow(CDC *dc,I64 x,I64 y,I64 arg1,I64 arg2,CColorROPU32 color) { - I64 msg_code,x1=a1,y1=a2,x2=a1,y2=a2; + I64 msg_code,x1=arg1,y1=arg2,x2=arg1,y2=arg2; CSprite *res; do { dc->color=color&COLORROP_NO_ROP0_MASK; GrArrow3(dc,x1,y1,0,x2,y2,0); - msg_code=GetMsg(&a1,&a2,1<color=color&COLORROP_NO_ROP0_MASK; GrArrow3(dc,x1,y1,0,x2,y2,0); res=CAlloc(SpriteElemQuedBaseSize(SPT_ARROW)); @@ -172,9 +172,9 @@ CSprite *SMArrow(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,CColorROPU32 color) return res; } -CSprite *SMPlanarSymmetry(CDC *dc,I64 x,I64 y,I64 a1,I64 a2) +CSprite *SMPlanarSymmetry(CDC *dc,I64 x,I64 y,I64 arg1,I64 arg2) { - I64 msg_code,x1=a1,y1=a2,x2=a1,y2=a2,old_width,old_flags; + I64 msg_code,x1=arg1,y1=arg2,x2=arg1,y2=arg2,old_width,old_flags; CSprite *res; old_width=dc->pen_width; old_flags=dc->flags; @@ -183,10 +183,10 @@ CSprite *SMPlanarSymmetry(CDC *dc,I64 x,I64 y,I64 a1,I64 a2) do { dc->color=ROPF_DITHER+WHITE<<16+BLACK; GrLine3(dc,x1,y1,0,x2,y2,0); - msg_code=GetMsg(&a1,&a2,1<flags=old_flags&DCF_SYMMETRY|dc->flags&~DCF_SYMMETRY; dc->pen_width=old_width; res=CAlloc(SpriteElemQuedBaseSize(SPT_PLANAR_SYMMETRY)); @@ -198,16 +198,17 @@ CSprite *SMPlanarSymmetry(CDC *dc,I64 x,I64 y,I64 a1,I64 a2) return res; } -CSprite *SMRect(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,CColorROPU32 color) +CSprite *SMRect(CDC *dc,I64 x,I64 y,I64 arg1,I64 arg2,CColorROPU32 color) { - I64 msg_code,x1=a1,y1=a2,x2=a1,y2=a2,xx1=a1,yy1=a2,xx2=a1,yy2=a2; + I64 msg_code,x1=arg1,y1=arg2,x2=arg1,y2=arg2, + xx1=arg1,yy1=arg2,xx2=arg1,yy2=arg2; CSprite *res; do { dc->color=color&COLORROP_NO_ROP0_MASK; GrRect3(dc,xx1,yy1,0,xx2-xx1,yy2-yy1); - msg_code=GetMsg(&a1,&a2,1<color=color&COLORROP_NO_ROP0_MASK; GrRect3(dc,xx1,yy1,0,xx2-xx1,yy2-yy1); res=CAlloc(SpriteElemQuedBaseSize(SPT_RECT)); @@ -230,10 +231,11 @@ CSprite *SMRect(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,CColorROPU32 color) return res; } -CSprite *SMScrnBitMap(I64 eletype,CDC *dc,CDC *dc2,I64 x,I64 y,I64 a1,I64 a2, - CColorROPU32 bm_bkcolor) +CSprite *SMScrnBitMap(I64 eletype,CDC *dc,CDC *dc2,I64 x,I64 y, + I64 arg1,I64 arg2,CColorROPU32 bm_bkcolor) { - I64 i,msg_code,x1=a1,y1=a2,x2=a1,y2=a2,xx1=a1,yy1=a2,xx2=a1,yy2=a2,old_width; + I64 i,msg_code,x1=arg1,y1=arg2,x2=arg1,y2=arg2, + xx1=arg1,yy1=arg2,xx2=arg1,yy2=arg2,old_width; CDC *dc3,*img; CSprite *res; old_width=dc2->pen_width; @@ -242,9 +244,9 @@ CSprite *SMScrnBitMap(I64 eletype,CDC *dc,CDC *dc2,I64 x,I64 y,I64 a1,I64 a2, dc2->color=ROPF_DITHER+WHITE<<16+BLACK; GrBorder(dc2,xx1+Fs->pix_left+Fs->scroll_x,yy1+Fs->pix_top+Fs->scroll_y, xx2+Fs->pix_left+Fs->scroll_x,yy2+Fs->pix_top+Fs->scroll_y); - msg_code=GetMsg(&a1,&a2,1<type=SPT_BITMAP; @@ -283,17 +285,17 @@ CSprite *SMScrnBitMap(I64 eletype,CDC *dc,CDC *dc2,I64 x,I64 y,I64 a1,I64 a2, return res; } -CSprite *SMCircle(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,CColorROPU32 color) +CSprite *SMCircle(CDC *dc,I64 x,I64 y,I64 arg1,I64 arg2,CColorROPU32 color) { - I64 msg_code,x1=a1,y1=a2,x2=a1,y2=a2; + I64 msg_code,x1=arg1,y1=arg2,x2=arg1,y2=arg2; CSprite *res; do { dc->color=color&COLORROP_NO_ROP0_MASK; GrCircle3(dc,x1,y1,0,Sqrt(SqrI64(x1-x2)+SqrI64(y1-y2))); - msg_code=GetMsg(&a1,&a2,1<color=color&COLORROP_NO_ROP0_MASK; GrCircle3(dc,x1,y1,0,Sqrt(SqrI64(x1-x2)+SqrI64(y1-y2))); res=CAlloc(SpriteElemQuedBaseSize(SPT_CIRCLE)); @@ -304,18 +306,18 @@ CSprite *SMCircle(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,CColorROPU32 color) return res; } -CSprite *SMEllipse(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,CColorROPU32 color) +CSprite *SMEllipse(CDC *dc,I64 x,I64 y,I64 arg1,I64 arg2,CColorROPU32 color) { - I64 msg_code,x1=a1,y1=a2,x2=a1,y2=a2; + I64 msg_code,x1=arg1,y1=arg2,x2=arg1,y2=arg2; F64 angle1,angle2; CSprite *res; do { dc->color=color&COLORROP_NO_ROP0_MASK; GrEllipse3(dc,(x1+x2)>>1,(y1+y2)>>1,0,AbsI64(x1-x2)>>1,AbsI64(y1-y2)>>1); - msg_code=GetMsg(&a1,&a2,1<type=SPT_ELLIPSE; res->pwha.x1=(x1+x2)>>1-x; @@ -334,10 +336,10 @@ CSprite *SMEllipse(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,CColorROPU32 color) dc->color=color&COLORROP_NO_ROP0_MASK; GrEllipse3(dc,res->pwha.x1+x,res->pwha.y1+y,0, res->pwha.width,res->pwha.height,res->pwha.angle); - msg_code=GetMsg(&a1,&a2,1<pwha.x1+x),y2-(res->pwha.y1+y)); if (res->pwha.width>=res->pwha.height) res->pwha.angle=-(angle1-angle2); @@ -349,20 +351,20 @@ CSprite *SMEllipse(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,CColorROPU32 color) return res; } -CSprite *SMPolygon(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,I64 sides, +CSprite *SMPolygon(CDC *dc,I64 x,I64 y,I64 arg1,I64 arg2,I64 sides, CColorROPU32 color) { - I64 msg_code,x1=a1,y1=a2,x2=a1,y2=a2; + I64 msg_code,x1=arg1,y1=arg2,x2=arg1,y2=arg2; F64 angle1,angle2; CSprite *res; do { dc->color=color&COLORROP_NO_ROP0_MASK; GrRegPoly3(dc,(x1+x2)>>1,(y1+y2)>>1,0, AbsI64(x1-x2)>>1,AbsI64(y1-y2)>>1,sides); - msg_code=GetMsg(&a1,&a2,1<type=SPT_POLYGON; res->pwhas.x1=(x1+x2)>>1-x; @@ -383,10 +385,10 @@ CSprite *SMPolygon(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,I64 sides, GrRegPoly3(dc,res->pwhas.x1+x,res->pwhas.y1+y,0, res->pwhas.width,res->pwhas.height, res->pwhas.sides,res->pwhas.angle); - msg_code=GetMsg(&a1,&a2,1<pwhas.x1+x),y2-(res->pwhas.y1+y)); if (res->pwhas.width>=res->pwhas.height) res->pwhas.angle=-(angle1-angle2); @@ -399,10 +401,10 @@ CSprite *SMPolygon(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,I64 sides, return res; } -CSprite *SMPolyLineFamily(I64 eletype,CDC *dc,I64 x,I64 y,I64 a1,I64 a2, +CSprite *SMPolyLineFamily(I64 eletype,CDC *dc,I64 x,I64 y,I64 arg1,I64 arg2, CColorROPU32 color) { - I64 i,num=0,msg_code,x1=a1,y1=a2,x2=a1,y2=a2; + I64 i,num=0,msg_code,x1=arg1,y1=arg2,x2=arg1,y2=arg2; I32 *ptr; CD3I32 *p; CSprite *res,*tmpg,*tmpg1,head2; @@ -413,14 +415,15 @@ CSprite *SMPolyLineFamily(I64 eletype,CDC *dc,I64 x,I64 y,I64 a1,I64 a2, dc->color=color&COLORROP_NO_ROP0_MASK; if (num) GrLine3(dc,x1,y1,0,x2,y2,0); - msg_code=GetMsg(&a1,&a2,1<color=TRANSPARENT; if (num) GrLine3(dc,x1,y1,0,x2,y2,0); - x2=a1; y2=a2; - } while (msg_code!=MSG_IP_L_UP && msg_code!=MSG_IP_R_UP); + x2=arg1; y2=arg2; + } while (msg_code!=MSG_MS_L_UP && msg_code!=MSG_MS_R_UP); dc->color=color&COLORROP_NO_ROP0_MASK; - if (msg_code==MSG_IP_L_UP) { + if (msg_code==MSG_MS_L_UP) { if (num) GrLine3(dc,x1,y1,0,x2,y2,0); res=CAlloc(SpriteElemQuedBaseSize(SPT_PT)); @@ -431,7 +434,7 @@ CSprite *SMPolyLineFamily(I64 eletype,CDC *dc,I64 x,I64 y,I64 a1,I64 a2, x1=x2;y1=y2; num++; } - } while (msg_code!=MSG_IP_R_UP); + } while (msg_code!=MSG_MS_R_UP); switch (eletype) { case SPT_POLYLINE: @@ -489,22 +492,22 @@ CSprite *SMPolyLineFamily(I64 eletype,CDC *dc,I64 x,I64 y,I64 a1,I64 a2, return res; } -CSprite *SMPolyPoint(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,CColorROPU32 color) +CSprite *SMPolyPoint(CDC *dc,I64 x,I64 y,I64 arg1,I64 arg2,CColorROPU32 color) { - I64 i,num=0,msg_code,x1=a1,y1=a2,x2=a1,y2=a2,x3,y3; + I64 i,num=0,msg_code,x1=arg1,y1=arg2,x2=arg1,y2=arg2,x3,y3; I32 *ptr; CSprite *res,*tmpg,*tmpg1,head2; QueInit(&head2); - x3=a1-x; y3=a2-y; + x3=arg1-x; y3=arg2-y; dc->color=color&COLORROP_NO_ROP0_MASK; do { - msg_code=GetMsg(&a1,&a2,1<type=eletype; tmpg->ps.x1=x1-x; @@ -580,10 +583,10 @@ U0 SMTextFamily(I64 eletype,CDoc *doc,CDocEntry *doc_ce,CSprite *head,CDC *dc, } I64 SMBitMap(I64 eletype,CDoc *doc,CDocEntry *doc_ce,CSprite *head, - CDC *dc,I64 xx,I64 yy,I64 a1,I64 a2,CColorROPU32 bm_bkcolor, + CDC *dc,I64 xx,I64 yy,I64 arg1,I64 arg2,CColorROPU32 bm_bkcolor, Bool sel,I64 xx1=0,I64 yy1=0,I64 xx2=0,I64 yy2=0,I64 *_cur_elem_num) { - I64 i,msg_code,x=xx,y=yy,x1=a1,y1=a2,x2=a1,y2=a2,old_width; + I64 i,msg_code,x=xx,y=yy,x1=arg1,y1=arg2,x2=arg1,y2=arg2,old_width; CSprite *tmpg,*tmpg1,*insert_pt; CDC *img; @@ -591,16 +594,16 @@ I64 SMBitMap(I64 eletype,CDoc *doc,CDocEntry *doc_ce,CSprite *head, x+=xx; y+=yy; if (sel) { - xx1=a1; yy1=a2; - xx2=a1; yy2=a2; + xx1=arg1; yy1=arg2; + xx2=arg1; yy2=arg2; old_width=dc->pen_width; dc->pen_width=1; do { dc->color=ROPF_DITHER+WHITE<<16+BLACK; GrBorder(dc,xx1,yy1,xx2,yy2); - msg_code=GetMsg(&a1,&a2,1<pen_width=old_width; } @@ -714,7 +717,7 @@ U0 SMMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *head,I64 *_cur_elem_num) } U0 SMShiftableMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *head, - I64 x,I64 y,I64 a1,I64 a2,I64 *_cur_elem_num) + I64 x,I64 y,I64 arg1,I64 arg2,I64 *_cur_elem_num) { CSprite *tmpg,*insert_pt=SpriteSetSettings(,head,*_cur_elem_num), *tmpg1=insert_pt; @@ -723,8 +726,8 @@ U0 SMShiftableMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *head, I32 *mesh,*old_mesh; if (tmpg1!=head && tmpg1->type&SPG_TYPE_MASK==SPT_MESH) { z=0; - x1=-(a1-x); - y1=-(a2-y); + x1=-(arg1-x); + y1=-(arg2-y); z1=z; p=&tmpg1->mu.u; for (i=0;imu.vertex_cnt;i++,p++) { @@ -735,8 +738,8 @@ U0 SMShiftableMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *head, old_mesh=&tmpg1->mu.vertex_cnt; } else if (tmpg1!=head && tmpg1->type&SPG_TYPE_MASK==SPT_SHIFTABLE_MESH) { z=-tmpg1->pmu.z; - x1=tmpg1->pmu.x-(a1-x); - y1=tmpg1->pmu.y-(a2-y); + x1=tmpg1->pmu.x-(arg1-x); + y1=tmpg1->pmu.y-(arg2-y); z1=tmpg1->pmu.z+z; p=&tmpg1->pmu.u; for (i=0;ipmu.vertex_cnt;i++,p++) { @@ -754,8 +757,8 @@ U0 SMShiftableMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *head, tmpg->type=SPT_SHIFTABLE_MESH; MemCpy(&tmpg->pmu.vertex_cnt,mesh,size); Free(mesh); - tmpg->pmu.x=a1-x; - tmpg->pmu.y=a2-y; + tmpg->pmu.x=arg1-x; + tmpg->pmu.y=arg2-y; tmpg->pmu.z=-z; QueIns(tmpg,insert_pt->last); SpriteEdUpdate(doc,doc_ce,head); @@ -767,8 +770,8 @@ U0 SMShiftableMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *head, } else *_cur_elem_num+=1; } else if (old_mesh && tmpg1->type&SPG_TYPE_MASK==SPT_SHIFTABLE_MESH) { - x1=tmpg1->pmu.x-(a1-x); - y1=tmpg1->pmu.y-(a2-y); + x1=tmpg1->pmu.x-(arg1-x); + y1=tmpg1->pmu.y-(arg2-y); z1=tmpg1->pmu.z+z; p=&tmpg1->pmu.u; for (i=0;ipmu.vertex_cnt;i++,p++) { @@ -777,8 +780,8 @@ U0 SMShiftableMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *head, p->z-=z1; } } else if (old_mesh && tmpg1->type&SPG_TYPE_MASK==SPT_MESH) { - x1=-(a1-x); - y1=-(a2-y); + x1=-(arg1-x); + y1=-(arg2-y); z1= z; p=&tmpg1->mu.u; for (i=0;imu.vertex_cnt;i++,p++) { @@ -809,7 +812,7 @@ U0 SMTaskTitleSet(I64 eletype) I64 SpriteMainEd(CDoc *doc) { CDocEntry *doc_ce=doc->cur_entry; - I64 res,i,x,y,a1,a2,xx,yy,xx1,yy1,xx2,yy2,width,eletype=SPT_MENU, + I64 res,i,x,y,arg1,arg2,xx,yy,xx1,yy1,xx2,yy2,width,eletype=SPT_MENU, cur_elem_num,old_border_src=Fs->border_src,old_title_src=Fs->title_src, old_de_flags=doc_ce->de_flags; CColorROPU32 bm_bkcolor,color; @@ -914,21 +917,21 @@ I64 SpriteMainEd(CDoc *doc) case SPT_SHIFTABLE_MESH: doc_ce->de_flags|=DOCEF_DONT_DRAW; if (PopUpNoYes("Study the $$LK,\"X-Caliber\"," - "A=\"FF:::/PersonalMenu.DD.Z,X-Caliber\"$$ icon.\n\n" - "It has black rectangle background with stars. The\n" - "mesh is in front and rotates. To keep the background\n" - "rectangle from rotating, " - "$$GREEN$$TRANSFORM OFF$$FG$$ has been used.\n\n" - "The X-Caliber mesh has a different origin for rotation.\n" - "To avoid clipping, it also has also been moved in the\n" - "negative Z direction by editing the sprite as text\n" - "and changing the first vector.\n\n" - "For the mesh you are creating, use same origin as\n" - "the rest of the sprite? If $$GREEN$$YES$$FG$$, you can always\n" - "shift the mesh origin point in the sprite edit menu.\n")) { + "A=\"FF:::/PersonalMenu.DD.Z,X-Caliber\"$$ icon.\n\n" + "It has black rectangle background with stars. The\n" + "mesh is in front and rotates. To keep the background\n" + "rectangle from rotating, " + "$$GREEN$$TRANSFORM OFF$$FG$$ has been used.\n\n" + "The X-Caliber mesh has a different origin for rotation.\n" + "To avoid clipping, it also has also been moved in the\n" + "negative Z direction by editing the sprite as text\n" + "and changing the first vector.\n\n" + "For the mesh you are creating, use same origin as\n" + "the rest of the sprite? If $$GREEN$$YES$$FG$$, you can always\n" + "shift the mesh origin point in the sprite edit menu.\n")) { doc_ce->de_flags=old_de_flags; - a1=x; a2=y; - SMShiftableMesh(doc,doc_ce,head,x,y,a1,a2,&cur_elem_num); + arg1=x; arg2=y; + SMShiftableMesh(doc,doc_ce,head,x,y,arg1,arg2,&cur_elem_num); eletype=SPT_MENU; } else PopUpOk("Select Origin.\n"); @@ -938,7 +941,7 @@ I64 SpriteMainEd(CDoc *doc) doc_ce->de_flags|=DOCEF_DONT_DRAW; PopUpOk("Drag-out a rect for the extents of the\nbitmap.\n"); doc_ce->de_flags=old_de_flags; - Fs->win_inhibit=WIG_TASK_DFT|WIF_FOCUS_TASK_IP_L|WIF_FOCUS_TASK_IP_R| + Fs->win_inhibit=WIG_TASK_DFT|WIF_FOCUS_TASK_MS_L|WIF_FOCUS_TASK_MS_R| WIF_FOCUS_TASK_BORDER-WIF_SELF_FOCUS-WIF_SELF_GRAB_SCROLL; break; case SPT_BITMAP: @@ -956,7 +959,7 @@ I64 SpriteMainEd(CDoc *doc) doc_ce->de_flags=old_de_flags; xx1+=xx; yy1+=yy; xx2+=xx; yy2+=yy; - if (SMBitMap(eletype,doc,doc_ce,head,dc,xx,yy,a1,a2,bm_bkcolor, + if (SMBitMap(eletype,doc,doc_ce,head,dc,xx,yy,arg1,arg2,bm_bkcolor, FALSE,xx1,yy1,xx2,yy2,&cur_elem_num)==SPE_EXIT) { res=SPE_EXIT; goto ei_done; @@ -976,7 +979,7 @@ I64 SpriteMainEd(CDoc *doc) PopUpOk("Drag-out a rect for the extents of the\nbitmap.\n"); } doc_ce->de_flags=old_de_flags; - Fs->win_inhibit=WIG_TASK_DFT|WIF_FOCUS_TASK_IP_L|WIF_FOCUS_TASK_IP_R| + Fs->win_inhibit=WIG_TASK_DFT|WIF_FOCUS_TASK_MS_L|WIF_FOCUS_TASK_MS_R| WIF_FOCUS_TASK_BORDER-WIF_SELF_FOCUS-WIF_SELF_GRAB_SCROLL; break; case SPT_WIDTH: @@ -1016,7 +1019,7 @@ I64 SpriteMainEd(CDoc *doc) case SPT_TEXT: case SPT_TEXT_BOX: case SPT_TEXT_DIAMOND: - SMTextFamily(eletype,doc,doc_ce,head,dc,xx,yy,a1,a2, + SMTextFamily(eletype,doc,doc_ce,head,dc,xx,yy,arg1,arg2, color,&cur_elem_num,old_de_flags); eletype=SPT_MENU; break; @@ -1034,9 +1037,10 @@ I64 SpriteMainEd(CDoc *doc) res=SPE_ABORT; goto ei_done; } - switch (GetMsg(&a1,&a2,1<type=SPT_COLOR; @@ -1064,7 +1068,7 @@ I64 SpriteMainEd(CDoc *doc) break; } break; - case MSG_IP_R_UP: + case MSG_MS_R_UP: if (eletype==SPT_PLANAR_SYMMETRY) { tmpg=CAlloc(SpriteElemQuedBaseSize(SPT_PLANAR_SYMMETRY)); tmpg->type=SPT_PLANAR_SYMMETRY; @@ -1075,35 +1079,35 @@ I64 SpriteMainEd(CDoc *doc) } else eletype=SPT_MENU; break; - case MSG_IP_L_DOWN: + case MSG_MS_L_DOWN: switch (eletype) { start: case SPT_LINE: - tmpg=SMLine(dc,x,y,a1,a2,color); + tmpg=SMLine(dc,x,y,arg1,arg2,color); break; case SPT_ARROW: - tmpg=SMArrow(dc,x,y,a1,a2,color); + tmpg=SMArrow(dc,x,y,arg1,arg2,color); break; case SPT_PLANAR_SYMMETRY: - tmpg=SMPlanarSymmetry(dc,x,y,a1,a2); + tmpg=SMPlanarSymmetry(dc,x,y,arg1,arg2); eletype=SPT_MENU; break; case SPT_RECT: - tmpg=SMRect(dc,x,y,a1,a2,color); + tmpg=SMRect(dc,x,y,arg1,arg2,color); break; case SPT_INS_SCRN_BITMAP: case SPT_INS_TRANSPARENT_SCRN_BITMAP: - tmpg=SMScrnBitMap(eletype,dc,dc2,x,y,a1,a2,bm_bkcolor); + tmpg=SMScrnBitMap(eletype,dc,dc2,x,y,arg1,arg2,bm_bkcolor); eletype=SPT_MENU; break; case SPT_CIRCLE: - tmpg=SMCircle(dc,x,y,a1,a2,color); + tmpg=SMCircle(dc,x,y,arg1,arg2,color); break; case SPT_ELLIPSE: - tmpg=SMEllipse(dc,x,y,a1,a2,color); + tmpg=SMEllipse(dc,x,y,arg1,arg2,color); break; case SPT_POLYGON: - tmpg=SMPolygon(dc,x,y,a1,a2,i,color); + tmpg=SMPolygon(dc,x,y,arg1,arg2,i,color); eletype=SPT_MENU; break; case SPT_PT: @@ -1111,18 +1115,18 @@ I64 SpriteMainEd(CDoc *doc) case SPT_FLOOD_FILL_NOT: tmpg=CAlloc(SpriteElemQuedBaseSize(eletype)); tmpg->type=eletype; - tmpg->p.x1=a1-x; - tmpg->p.y1=a2-y; + tmpg->p.x1=arg1-x; + tmpg->p.y1=arg2-y; break; case SPT_POLYLINE: case SPT_BSPLINE2: case SPT_BSPLINE3: case SPT_BSPLINE2_CLOSED: case SPT_BSPLINE3_CLOSED: - tmpg=SMPolyLineFamily(eletype,dc,x,y,a1,a2,color); + tmpg=SMPolyLineFamily(eletype,dc,x,y,arg1,arg2,color); break; case SPT_POLYPT: - tmpg=SMPolyPoint(dc,x,y,a1,a2,color); + tmpg=SMPolyPoint(dc,x,y,arg1,arg2,color); break; end: if (tmpg) { @@ -1132,8 +1136,8 @@ I64 SpriteMainEd(CDoc *doc) } break; case SPT_BITMAP: - if (SMBitMap(eletype,doc,doc_ce,head,dc,xx,yy,a1,a2,bm_bkcolor, - TRUE,,,,,&cur_elem_num)==SPE_EXIT) { + if (SMBitMap(eletype,doc,doc_ce,head,dc,xx,yy, + arg1,arg2,bm_bkcolor,TRUE,,,,,&cur_elem_num)==SPE_EXIT) { res=SPE_EXIT; goto ei_done; } @@ -1141,9 +1145,9 @@ I64 SpriteMainEd(CDoc *doc) eletype=SPT_MENU; break; case SPT_SHIFTABLE_MESH: - GetMsg(NULL,NULL,1<de_flags|=DOCEF_DONT_DRAW; - SMShiftableMesh(doc,doc_ce,head,x,y,a1,a2,&cur_elem_num); + SMShiftableMesh(doc,doc_ce,head,x,y,arg1,arg2,&cur_elem_num); doc_ce->de_flags=old_de_flags; eletype=SPT_MENU; break; diff --git a/Adam/Gr/SpriteMesh.HC b/Adam/Gr/SpriteMesh.HC index 24fe31b..3923fa9 100644 --- a/Adam/Gr/SpriteMesh.HC +++ b/Adam/Gr/SpriteMesh.HC @@ -10,7 +10,7 @@ class CMeshEdVertex CMeshEdVertex *next,*last,*copy; U0 start; - CD3I32 p; //World coordinates of the point. + CD3I32 p; //World coordinates of the point. U0 end; CD3I32 p0, pt; //Transformed coordinates. (Scrn) @@ -34,7 +34,7 @@ class CMeshEdTri class CMeshFrame { - I64 ip_z,thickness; //Input pointer (mouse) Z-coordinate + I64 ms_z,thickness; //Mouse Z-coordinate I64 ed_mode,cx,cy; CColorROPU32 cur_color; Bool grid_on,flip_y,sel_rect,vertex_on,closed,pad[3]; @@ -80,7 +80,7 @@ CMeshEdVertex *MeshVertexFindScrPt(CMeshFrame *e,I64 x,I64 y) while (tmpv!=&e->vertex_head) { if (!(tmpv->flags&VF_IGNORE)) { dd=SqrI64(x-tmpv->pt.x)+SqrI64(y-tmpv->pt.y); - dz=AbsI64(e->ip_z-tmpv->p.z); + dz=AbsI64(e->ms_z-tmpv->p.z); if (ddw2s,&x1,&y1,&z1); x2=0; y2=e->cur_snap<<16; z2=0; Mat4x4MulXYZ(e->w2s,&x2,&y2,&z2); - ip_grid.x=Max(1,MaxI64(x1,x2)>>16); - ip_grid.y=Max(1,MaxI64(y1,y2)>>16); - ip_grid.z=Min(ip_grid.x,ip_grid.y); + ms_grid.x=Max(1,MaxI64(x1,x2)>>16); + ms_grid.y=Max(1,MaxI64(y1,y2)>>16); + ms_grid.z=Min(ms_grid.x,ms_grid.y); } } U0 MeshScaleZoom(CMeshFrame *e,F64 scale) { CTask *task=Fs; - I64 x=ip.pos.x-task->pix_left-task->scroll_x-task->pix_width/2, - y=ip.pos.y-task->pix_top-task->scroll_y-task->pix_height/2; + I64 x=ms.pos.x-task->pix_left-task->scroll_x-task->pix_width/2, + y=ms.pos.y-task->pix_top-task->scroll_y-task->pix_height/2; task->horz_scroll.pos*=scale; task->vert_scroll.pos*=scale; task->horz_scroll.pos+=scale*x-x; @@ -561,9 +561,9 @@ I64 *MeshSetW2S(CMeshFrame *e,CTask *task) U0 MeshCursorW(CMeshFrame *e,CTask *task,I64 *_x,I64 *_y,I64 *_z) { I64 x_shadow,y_shadow,z_shadow, - xc=ip.pos.x-task->pix_left-task->scroll_x-e->cx, - yc=ip.pos.y-task->pix_top-task->scroll_y-e->cy,zc=0, - x=0,y=0,z=e->ip_z, + xc=ms.pos.x-task->pix_left-task->scroll_x-e->cx, + yc=ms.pos.y-task->pix_top-task->scroll_y-e->cy,zc=0, + x=0,y=0,z=e->ms_z, i,x2,y2,z2; Mat4x4MulXYZ(e->w2s,&x,&y,&z); //scrn of Z vect @@ -584,7 +584,7 @@ U0 MeshCursorW(CMeshFrame *e,CTask *task,I64 *_x,I64 *_y,I64 *_z) Mat4x4MulXYZ(e->s2w,&x,&y,&z); x=RoundI64(x,e->cur_snap); y=RoundI64(y,e->cur_snap); - z=RoundI64(e->ip_z,e->cur_snap); + z=RoundI64(e->ms_z,e->cur_snap); *_x=x; *_y=y; *_z=z; } @@ -729,7 +729,7 @@ U0 DrawIt(CTask *task,CDC *dc) //GR_Z_ALL is set to half of the Z-range which is an I32. dc->z=GR_Z_ALL; - //Light source set to input pointer (mouse). + //Light source set to mouse. MeshCursorW(e,task,&x,&y,&z); dc->ls.x=x; dc->ls.y=y; @@ -785,7 +785,7 @@ U0 DrawIt(CTask *task,CDC *dc) tmpv=tmpv->next; } - if (CtrlInside(c,ip.presnap.x,ip.presnap.y)||winmgr.show_menu) { + if (CtrlInside(c,ms.presnap.x,ms.presnap.y)||winmgr.show_menu) { GridInit; task->win_inhibit=WIF_SELF_DOC; } else { @@ -828,7 +828,7 @@ U0 MeshInit(CMeshFrame *e,Bool flip_y) e->ed_mode='v'; e->grid_on=TRUE; e->vertex_on=TRUE; - e->ip_z=0; + e->ms_z=0; e->thickness=25; e->closed=TRUE; e->view_scale=1.0; @@ -971,7 +971,7 @@ See $LK,"::/Demo/Graphics/SpritePlot3D.HC"$. $WW,0$*/ CCtrl *c=CtrlFindUnique(Fs,CTRLT_VIEWING_ANGLES); CViewAngles *s,*old_s; - I64 i,msg_code,sel_mode,a1,a2,make_tri_vertex_num=0,x,y,z; + I64 i,msg_code,sel_mode,arg1,arg2,make_tri_vertex_num=0,x,y,z; CD3I32 p0a,p0b; CMeshEdVertex *va[3],*tmpv; Bool adjusting_z=FALSE,moving,save_and_exit; @@ -1077,33 +1077,34 @@ $WW,0$*/ try {//In case of while (TRUE) { MeshUpdateMenu(&e); - msg_code=GetMsg(&a1,&a2,1<pix_left-Fs->scroll_x, - ip.presnap.y-Fs->pix_top-Fs->scroll_y)); + ms.presnap.x-Fs->pix_left-Fs->scroll_x, + ms.presnap.y-Fs->pix_top-Fs->scroll_y)); MeshVertexSelAll(&e,FALSE); MeshTriSelAll(&e,FALSE); make_tri_vertex_num=0; } break; case SC_INS: - if (a2&SCF_CTRL) + if (arg2&SCF_CTRL) goto me_clipboard_copy; - else if (a2&SCF_SHIFT) + else if (arg2&SCF_SHIFT) goto me_clipboard_paste; } break; @@ -1129,7 +1130,7 @@ me_restart: case 'p': e.thickness=PopUpGetI64("Thickness (%d):",e.thickness); case 'n': - if (a1=='n' || a1=='p') + if (arg1=='n' || arg1=='p') e.closed=TRUE; else e.closed=PopUpNoYes("Closed?\n"); @@ -1143,9 +1144,9 @@ me_chain: case 'M': adjusting_z=FALSE; moving=FALSE; - e.ed_mode=a1; + e.ed_mode=arg1; make_tri_vertex_num=0; - Snd(0); + Snd; break; case 'T': MeshTransformSel(&e); @@ -1166,29 +1167,29 @@ me_chain: case 'a': case 'u': case 'o': - if (a1=='a') + if (arg1=='a') sel_mode=SEL_MESH_EQU; - else if (a1=='u') + else if (arg1=='u') sel_mode=SEL_MESH_AND; else sel_mode=SEL_MESH_OR; - if ((msg_code=GetMsg(&a1,&a2,1<pix_left-Fs->scroll_x, - ip.pos.y-Fs->pix_top-Fs->scroll_y)) { - Noise(25,2000,8000); - e.ip_z=RoundI64(tmpv->p.z,e.cur_snap); + ms.pos.x-Fs->pix_left-Fs->scroll_x, + ms.pos.y-Fs->pix_top-Fs->scroll_y)) { + Noise(25,86,110); + e.ms_z=RoundI64(tmpv->p.z,e.cur_snap); } else { Beep; Beep; - e.ip_z=0; + e.ms_z=0; } MeshVertexIgnoreSet(&e,FALSE); if (moving) { @@ -1319,14 +1320,14 @@ me_clipboard_cut: break; } break; - case MSG_IP_L_DOWN: + case MSG_MS_L_DOWN: switch (e.ed_mode) { case 'm': if (!moving) { if (!MeshSelCnt(&e) && - (tmpv=MeshVertexFindScrPt(&e,a1,a2))) { + (tmpv=MeshVertexFindScrPt(&e,arg1,arg2))) { tmpv->flags|=VF_SEL; - e.ip_z=RoundI64(tmpv->p.z,e.cur_snap); + e.ms_z=RoundI64(tmpv->p.z,e.cur_snap); } if (MeshSelCnt(&e)) { MeshCursorW(&e,Fs,&x,&y,&z); @@ -1341,9 +1342,9 @@ me_clipboard_cut: case 'M': if (!adjusting_z && !moving) { if (!MeshSelCnt(&e) && - (tmpv=MeshVertexFindScrPt(&e,a1,a2))) { + (tmpv=MeshVertexFindScrPt(&e,arg1,arg2))) { tmpv->flags|=VF_SEL; - e.ip_z=RoundI64(tmpv->p.z,e.cur_snap); + e.ms_z=RoundI64(tmpv->p.z,e.cur_snap); } if (MeshSelCnt(&e)) { MeshCursorW(&e,Fs,&x,&y,&z); @@ -1353,23 +1354,23 @@ me_clipboard_cut: MeshP0Capture(&e); moving=TRUE; - p0b.x=ip.presnap.x; - p0b.y=ip.presnap.y; - p0b.z=e.ip_z; + p0b.x=ms.presnap.x; + p0b.y=ms.presnap.y; + p0b.z=e.ms_z; adjusting_z=TRUE; - Snd(ClampI64(3*e.ip_z+1500,0,15000)); + Snd(ClampI64(Freq2Ona(3*e.ms_z+1500),0,MAX_I8)); } } break; } break; - case MSG_IP_L_UP: + case MSG_MS_L_UP: switch (e.ed_mode) { case 'n': case 'f': case 'p': case 'v': - Noise(25,2000,8000); + Noise(25,86,110); MeshCursorW(&e,Fs,&x,&y,&z); e.cur_vertex=MeshVertexNew(&e,x,y,z); break; @@ -1377,10 +1378,10 @@ me_clipboard_cut: case 'M': if (moving) { if (adjusting_z) { - e.ip_z=RoundI64(Sign(p0b.y-ip.presnap.y) - *Sqrt(Sqr(p0b.x-ip.presnap.x)+Sqr(p0b.y-ip.presnap.y)) + e.ms_z=RoundI64(Sign(p0b.y-ms.presnap.y) + *Sqrt(Sqr(p0b.x-ms.presnap.x)+Sqr(p0b.y-ms.presnap.y)) +p0b.z,e.cur_snap); - Snd(0); + Snd; adjusting_z=FALSE; MeshCursorW(&e,Fs,&x,&y,&z); MeshP0Offset(&e,0,0,z-p0a.z); @@ -1394,14 +1395,14 @@ me_clipboard_cut: } break; case 't': - if (tmpv=MeshVertexFindScrPt(&e,a1,a2)) { + if (tmpv=MeshVertexFindScrPt(&e,arg1,arg2)) { for (i=0;iflags|=VF_SEL; if (make_tri_vertex_num==3) { @@ -1415,7 +1416,7 @@ me_clipboard_cut: break; } break; - case MSG_IP_R_DOWN: + case MSG_MS_R_DOWN: if (!adjusting_z && e.ed_mode!='M' && (e.chain_pred==e.vertex_head.last || e.ed_mode!='n' && e.ed_mode!='f' && e.ed_mode!='p')) { @@ -1427,19 +1428,19 @@ me_clipboard_cut: p0a.z=z; MeshP0Capture(&e); } - p0b.x=ip.presnap.x; - p0b.y=ip.presnap.y; - p0b.z=e.ip_z; + p0b.x=ms.presnap.x; + p0b.y=ms.presnap.y; + p0b.z=e.ms_z; adjusting_z=TRUE; - Snd(ClampI64(3*e.ip_z+1500,0,15000)); + Snd(ClampI64(Freq2Ona(3*e.ms_z+1500),0,MAX_I8)); } break; - case MSG_IP_R_UP: + case MSG_MS_R_UP: if (adjusting_z) { - e.ip_z=RoundI64(Sign(p0b.y-ip.presnap.y) - *Sqrt(Sqr(p0b.x-ip.presnap.x)+Sqr(p0b.y-ip.presnap.y)) + e.ms_z=RoundI64(Sign(p0b.y-ms.presnap.y) + *Sqrt(Sqr(p0b.x-ms.presnap.x)+Sqr(p0b.y-ms.presnap.y)) +p0b.z,e.cur_snap); - Snd(0); + Snd; adjusting_z=FALSE; if (moving) { MeshCursorW(&e,Fs,&x,&y,&z); @@ -1452,26 +1453,26 @@ me_clipboard_cut: } else if (e.ed_mode=='n') { if (e.chain_pred && e.chain_pred!=e.vertex_head.last) MeshPolygon(&e,e.chain_pred->next,e.vertex_head.last,FALSE); - a1=e.ed_mode; + arg1=e.ed_mode; goto me_chain; } else if (e.ed_mode=='f') { if (e.chain_pred && e.chain_pred!=e.vertex_head.last) MeshFence(&e); - a1=e.ed_mode; + arg1=e.ed_mode; goto me_chain; } else if (e.ed_mode=='p') { if (e.chain_pred && e.chain_pred!=e.vertex_head.last) MeshPrism(&e); - a1=e.ed_mode; + arg1=e.ed_mode; goto me_chain; } break; - case MSG_IP_MOVE: + case MSG_MS_MOVE: if (adjusting_z) { - e.ip_z=RoundI64(Sign(p0b.y-ip.presnap.y) - *Sqrt(Sqr(p0b.x-ip.presnap.x)+Sqr(p0b.y-ip.presnap.y)) + e.ms_z=RoundI64(Sign(p0b.y-ms.presnap.y) + *Sqrt(Sqr(p0b.x-ms.presnap.x)+Sqr(p0b.y-ms.presnap.y)) +p0b.z,e.cur_snap); - Snd(ClampI64(3*e.ip_z+1500,0,15000)); + Snd(ClampI64(Freq2Ona(3*e.ms_z+1500),0,MAX_I8)); } if (moving) { MeshCursorW(&e,Fs,&x,&y,&z); diff --git a/Adam/Gr/SpriteNew.HC b/Adam/Gr/SpriteNew.HC index c8f08b0..db32053 100644 --- a/Adam/Gr/SpriteNew.HC +++ b/Adam/Gr/SpriteNew.HC @@ -15,20 +15,20 @@ I64 sprite_elem_base_sizes[SPT_NUM_TYPES]={ sizeof(CSpritePt), //SPT_PT sizeof(CSpriteNumPtU8s), //SPT_POLYPT sizeof(CSpritePtPt), //SPT_LINE - sizeof(CSpriteNumU8s), //SPT_POLYLINE + sizeof(CSpriteNumU8s), //SPT_POLYLINE sizeof(CSpritePtPt), //SPT_RECT - sizeof(CSpritePtPtAng), //SPT_ROTATED_RECT + sizeof(CSpritePtPtAng), //SPT_ROTATED_RECT sizeof(CSpritePtRad), //SPT_CIRCLE - sizeof(CSpritePtWHAng), //SPT_ELLIPSE + sizeof(CSpritePtWHAng), //SPT_ELLIPSE sizeof(CSpritePtWHAngSides), //SPT_POLYGON - sizeof(CSpriteNumU8s), //SPT_BSPLINE2 - sizeof(CSpriteNumU8s), //SPT_BSPLINE2_CLOSED - sizeof(CSpriteNumU8s), //SPT_BSPLINE3 - sizeof(CSpriteNumU8s), //SPT_BSPLINE3_CLOSED + sizeof(CSpriteNumU8s), //SPT_BSPLINE2 + sizeof(CSpriteNumU8s), //SPT_BSPLINE2_CLOSED + sizeof(CSpriteNumU8s), //SPT_BSPLINE3 + sizeof(CSpriteNumU8s), //SPT_BSPLINE3_CLOSED sizeof(CSpritePt), //SPT_FLOOD_FILL sizeof(CSpritePt), //SPT_FLOOD_FILL_NOT - sizeof(CSpritePtWHU8s), //SPT_BITMAP - sizeof(CSpriteMeshU8s), //SPT_MESH + sizeof(CSpritePtWHU8s), //SPT_BITMAP + sizeof(CSpriteMeshU8s), //SPT_MESH sizeof(CSpritePtMeshU8s), //SPT_SHIFTABLE_MESH sizeof(CSpritePtPt), //SPT_ARROW sizeof(CSpritePtStr), //SPT_TEXT diff --git a/Adam/Host.HC b/Adam/Host.HC new file mode 100644 index 0000000..7ecce8e --- /dev/null +++ b/Adam/Host.HC @@ -0,0 +1,70 @@ +#help_index "Misc/Host" + +public Bool HostChgDsk(U8 *iso_filename) +{//Help user change CD/DVD or ISO_file. + Bool res=FALSE; + SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ + try { + AutoComplete; + WinBorder; + WinMax; + DocClear; + "$$PURPLE$$$$TX+CX,\"Change CD/DVD\"$$$$FG$$\n\n\n\n"; + switch (ins_reg.host_vm) { + case VM_VMWARE: + if (IsDotC(iso_filename)) +" +Click CDROM Icon in bottom-right border of VMware window. + +Click \"Settings\". + +Set ISO image to \"%s\"$FG$. +When browsing, change the file mask from \"*.iso\" to \"All Files\". + +",iso_filename; + else +" +Click CDROM Icon in bottom-right border of VMware window. + +Click \"Settings\". + +Set ISO image to \"$FG,2$%s$FG$\"$FG$. + +",iso_filename; + break; + case VM_QEMU: +" +Change to QEMU monitor using $FG,2$$FG$ + +Get the CDROM designation. + + >$FG,2$info block$FG$ + +Use the designation. + + >$FG,2$eject ide1-cd0$FG$ + +Use the designation. + + >$FG,2$change ide1-cd0 %s$FG$ + +Change back to QEMU using $FG,2$$FG$ + +",iso_filename; + break; + default: +" +Place the CDDVD %s in the drive. + +",iso_filename; + } + if (PressAKey!=CH_SHIFT_ESC) { + ">$FG,2$ChgDsk('T');$FG$\n\n"; + ChgDsk('T'); + res=TRUE; + } + } catch + PutExcept; + SettingsPop; + return res; +} diff --git a/Adam/InFile.HC b/Adam/InFile.HC index f6b1686..796affc 100644 --- a/Adam/InFile.HC +++ b/Adam/InFile.HC @@ -23,13 +23,13 @@ public U0 InGetStr(U8 *st) } } -public U0 InPrint(I64 ms=100,U8 *fmt,...) +public U0 InPrint(I64 mS=100,U8 *fmt,...) {//Print message with delay after each char. U8 *buf=StrPrintJoin(NULL,fmt,argc,argv),*st=buf; I64 ch; while (ch=*st++) { '' ch; - Sleep(ms); + Sleep(mS); } Free(buf); } @@ -112,29 +112,29 @@ public Bool InView() return res; } -#help_index "InFile;Help System/Training;Input Pointer" +#help_index "InFile;Help System/Training;Mouse" I64 in_plot_l,in_plot_r; -Bool InSetIPPlot(I64 ms,I64 x,I64 y,I64 z) +Bool InSetMsPlot(I64 mS,I64 x,I64 y,I64 z) { - IPSet(x,y,z,in_plot_l,in_plot_r); - Sleep(ms); + MsSet(x,y,z,in_plot_l,in_plot_r); + Sleep(mS); return TRUE; } -public U0 InSetIP(I64 ms=7,I64 x=MAX_I64,I64 y=MAX_I64,I64 z=MAX_I64, +public U0 InSetMs(I64 mS=7,I64 x=MAX_I64,I64 y=MAX_I64,I64 z=MAX_I64, I64 l=MAX_I64,I64 r=MAX_I64) -{//Move input pointer (mouse) to spot at certain speed. +{//Move mouse to spot at certain speed. if (!(0<=xfilename.name; + if (drv_let) + *sys_registry_doc->filename.name=drv_let; + RegWrite("Adam/InsReg", + "#help_index \"Misc/Install Registration\"\n" + "MemSet(&ins_reg,0,sizeof(CInsReg));\n" + "ins_reg.registered=%d;\n" + "ins_reg.host_os=%d;\n" + "ins_reg.host_vm=%d;\n" + "\n#define INS_REG_PERSONAL_INITIALS \"%s\"\n" + "StrCpy(ins_reg.initials,\"%s\");\n" + "HashPublic(\"INS_REG_PERSONAL_INITIALS\",HTT_DEFINE_STR);\n" + "\n#define INS_REG_MACHINE_NUM %d\n" + "ins_reg.machine_num=%d;\n" + "HashPublic(\"INS_REG_MACHINE_NUM\",HTT_DEFINE_STR);\n" + "\n\"InsReg:%%s:%%d\\n\"," + "INS_REG_PERSONAL_INITIALS,INS_REG_MACHINE_NUM;\n" + "\n#help_index \"\"\n" + ,r.registered,r.host_os,r.host_vm, + r.initials,r.initials,r.machine_num,r.machine_num); + *sys_registry_doc->filename.name=old_drv_let; + RegExe("Adam/InsReg"); + } + return res; +} + +public Bool InsRereg(U8 drv_let=0) +{//Reregister this install in local $LK,"Registry.HC",A="FI:~/Registry.HC"$ file. + return InsReg(drv_let,RR_REREGISTER); +} + +public Bool InsUnreg(U8 drv_let=0) +{//Unregister this install in local $LK,"Registry.HC",A="FI:~/Registry.HC"$ file. + return InsReg(drv_let,RR_UNREGISTER); +} diff --git a/Adam/MakeAdam.HC b/Adam/MakeAdam.HC index e13854a..8b5c2f7 100644 --- a/Adam/MakeAdam.HC +++ b/Adam/MakeAdam.HC @@ -18,6 +18,7 @@ LBts(&sys_run_level,RLf_DOC); #include "Ctrls/MakeCtrls" #include "InFile" #include "ARegistry" +#include "InsReg" #include "AutoComplete/MakeAC" #include "God/MakeGod" #include "AHash" @@ -26,5 +27,6 @@ LBts(&sys_run_level,RLf_DOC); #include "DevInfo" #include "ADefine" #include "WallPaper" -#include "AInputPointer" +#include "AMouse" +#include "Host" Cd("..");; diff --git a/Adam/Menu.HC b/Adam/Menu.HC index 5b7965b..e7cae3a 100644 --- a/Adam/Menu.HC +++ b/Adam/Menu.HC @@ -56,11 +56,11 @@ CMenuEntry *MenuNewSub(CCmpCtrl *cc,CTask *task) if (cc->token==',') Lex(cc); if (cc->token!=',' && cc->token!=')') - tmpme->a1=LexExpressionI64(cc); + tmpme->arg1=LexExpressionI64(cc); if (cc->token==',') Lex(cc); if (cc->token!=',' && cc->token!=')') - tmpme->a2=LexExpressionI64(cc); + tmpme->arg2=LexExpressionI64(cc); if (cc->token!=')') LexExcept(cc,"Missing ')' at "); if (Lex(cc)!=';') @@ -177,7 +177,7 @@ U0 DrawMenu(CDC *dc) CMenuEntry *tmpme,*tmpse,*cur_submenu=NULL; U8 *st=NULL; CTask *task=MenuTask; - I64 i,w,x0,y0,x1=ip.pos.x,y1=ip.pos.y; + I64 i,w,x0,y0,x1=ms.pos.x,y1=ms.pos.y; if (!TaskValidate(task) || !(m=task->cur_menu)) { sys_cur_submenu_entry=NULL; return; @@ -206,9 +206,9 @@ U0 DrawMenu(CDC *dc) if (y0<=y1msg_code==MSG_KEY_DOWN|| tmpse->msg_code==MSG_KEY_DOWN_UP) { - if (!tmpse->a2) - tmpse->a2=Char2ScanCode(tmpse->a1); - st=ScanCode2KeyName(tmpse->a2); + if (!tmpse->arg2) + tmpse->arg2=Char2ScanCode(tmpse->arg1); + st=ScanCode2KeyName(tmpse->arg2); } sys_cur_submenu_entry=cur_submenu=tmpse; dc->color=i&15; diff --git a/Adam/Opt/Boot/BootDVD.HC b/Adam/Opt/Boot/BootDVD.HC index 53b2f01..8b2674b 100644 --- a/Adam/Opt/Boot/BootDVD.HC +++ b/Adam/Opt/Boot/BootDVD.HC @@ -19,10 +19,10 @@ BDVD_START:: MOV SP,BOOT_STK_SIZE+DVD_BOOT_LOADER_SIZE STI - CALL BDVD_GET_IP -BDVD_GET_IP: + CALL BDVD_GET_RIP +BDVD_GET_RIP: POP BX - SUB BX,BDVD_GET_IP-BDVD_START + SUB BX,BDVD_GET_RIP-BDVD_START SHR BX,4 //This copies this bootloader's code to 0x$TX,"00096600",D="DD_BOOT_HIGH_LOC_DVD"$ MOV AX,CS diff --git a/Adam/Opt/Boot/BootHD.HC b/Adam/Opt/Boot/BootHD.HC index bdf3575..e9ce683 100644 --- a/Adam/Opt/Boot/BootHD.HC +++ b/Adam/Opt/Boot/BootHD.HC @@ -21,10 +21,10 @@ BHD_CODE:: MOV SP,BOOT_STK_SIZE+MODULE_SIZE STI - CALL BHD_GET_IP -BHD_GET_IP: + CALL BHD_GET_RIP +BHD_GET_RIP: POP BX - SUB BX,BHD_GET_IP-BHD_START + SUB BX,BHD_GET_RIP-BHD_START SHR BX,4 //This copies this bootloader's code to 0x$TX,"00096C00",D="DD_BOOT_HIGH_LOC_HD"$ MOV AX,CS diff --git a/Adam/Opt/Boot/BootMHD.HC b/Adam/Opt/Boot/BootMHD.HC index 7bc6ba3..8e1c4e9 100644 --- a/Adam/Opt/Boot/BootMHD.HC +++ b/Adam/Opt/Boot/BootMHD.HC @@ -30,10 +30,10 @@ BMHD_CODE:: MOV ES,AX - CALL BMHD_GET_IP -BMHD_GET_IP: + CALL BMHD_GET_RIP +BMHD_GET_RIP: POP BX - SUB BX,BMHD_GET_IP-BMHD_START + SUB BX,BMHD_GET_RIP-BMHD_START MOV CX,BX SHR BX,4 //This copies this bootloader's code to 0x$TX,"00096C00",D="DD_BOOT_HIGH_LOC_MHD"$ @@ -41,8 +41,8 @@ BMHD_GET_IP: PUSH AX ADD AX,BX MOV DS,AX - MOV U16 [BMHD_OLD_CS_IP-BMHD_START],CX - POP U16 [BMHD_OLD_CS_IP+2-BMHD_START] + MOV U16 [BMHD_OLD_CS_RIP-BMHD_START],CX + POP U16 [BMHD_OLD_CS_RIP+2-BMHD_START] MOV CX,MODULE_SIZE XOR SI,SI @@ -57,7 +57,7 @@ BMHD_GET_IP: DU16 BMHD_HISTART-BMHD_START,BOOT_HIGH_LOC_MHD; BMHD_BIOS_DRV_NUM: DU8 0; -BMHD_OLD_CS_IP: DU16 0,0; +BMHD_OLD_CS_RIP: DU16 0,0; //Gets patched by $LK,"BootHDIns",A="MN:BootHDIns"$(). BMHD_BLK_CNT:: DU16 0; @@ -97,7 +97,7 @@ BMHD_HISTART: LOOP @@05 MOV DL,U8 [BMHD_BIOS_DRV_NUM-BMHD_START] - MOV EBX,U32 [BMHD_OLD_CS_IP-BMHD_START] + MOV EBX,U32 [BMHD_OLD_CS_RIP-BMHD_START] //My assembler doesn't support 16-bit very well. DU8 0xEA; //JMP BOOT_RAM_BASE:0000 DU16 0,BOOT_RAM_BASE/16; diff --git a/Adam/Opt/Boot/BootMHD2.HC b/Adam/Opt/Boot/BootMHD2.HC index 8993bd0..4379cbf 100644 --- a/Adam/Opt/Boot/BootMHD2.HC +++ b/Adam/Opt/Boot/BootMHD2.HC @@ -15,7 +15,7 @@ BMHD2_START:: //This copies this bootloader's code to 0x$TX,"00096A00",D="DD_BOOT_HIGH_LOC_MHD2"$ MOV AX,CS MOV DS,AX - MOV U32 [BMHD2_OLD_CS_IP-BMHD2_START],EBX + MOV U32 [BMHD2_OLD_CS_RIP-BMHD2_START],EBX MOV U8 [BMHD2_BIOS_DRV_NUM-BMHD2_START],DL MOV CX,MODULE_SIZE @@ -93,9 +93,9 @@ BMHD2_HISTART: @@10: MOV U32 [BMHD2_DAP_BLK_LO-BMHD2_START],EBX MOV U32 [BMHD2_DAP_BLK_HI-BMHD2_START],EAX - MOV AX,U16 [BMHD2_OLD_CS_IP-BMHD2_START] + MOV AX,U16 [BMHD2_OLD_CS_RIP-BMHD2_START] SHR AX,4 - ADD AX,U16 [BMHD2_OLD_CS_IP+2-BMHD2_START] + ADD AX,U16 [BMHD2_OLD_CS_RIP+2-BMHD2_START] MOV U16 [BMHD2_DAP_BUF+2-BMHD2_START],AX //ES:0000 MOV SI,BMHD2_DAP-BMHD2_START //DS:SI=DAP MOV DL,U8 [BMHD2_BIOS_DRV_NUM-BMHD2_START] @@ -115,7 +115,7 @@ BMHD2_HISTART: //My assembler doesn't support 16-bit very well. DU8 0xEA; //JMP xxxx:yyyy -BMHD2_OLD_CS_IP: +BMHD2_OLD_CS_RIP: DU16 0,0; BMHD2_END:: //Continues here $LK,"::/Adam/Opt/Boot/BootHD.HC",A="FF:::/Adam/Opt/Boot/BootHD.HC,START"$ diff --git a/Adam/Opt/Boot/BootRAM.HC b/Adam/Opt/Boot/BootRAM.HC index b77dfdc..dcb6378 100644 --- a/Adam/Opt/Boot/BootRAM.HC +++ b/Adam/Opt/Boot/BootRAM.HC @@ -30,12 +30,13 @@ _extern _HI_CALL I64 HiCall(U8 *machine_code); _extern _HI_MEMCPY U8 *HiMemCpy(U8 *dst,U8 *src,I64 cnt); #help_index "Boot" -public U0 BootRAM(U8 *filename) -{//Softboot Kernel Bin file. No hardware reset. +public U0 BootRAM(U8 *filename=NULL) +{//Softboot Kernel.BIN file. No hardware reset. I64 size; - CKernel *hi_image,*lo_image=sys_boot_base-sizeof(CBinFile), + CKernel *hi_image,*lo_image=mem_boot_base-sizeof(CBinFile), reg *sys_ram_reboot; - + if (!filename) + filename="::/Kernel/" KERNEL_BIN_C; do if (!(hi_image=FileRead(filename,&size))) return; while (hi_image<0x100000); //If alloc from low 640K, just get another copy. diff --git a/Adam/Opt/Boot/DskISORedSea.HC b/Adam/Opt/Boot/DskISORedSea.HC index 2509eb0..ee71375 100644 --- a/Adam/Opt/Boot/DskISORedSea.HC +++ b/Adam/Opt/Boot/DskISORedSea.HC @@ -25,7 +25,27 @@ class CElTorito U8 zero2[20]; }; -U0 RedSeaISO9660(U8 *iso_filename,U8 drv_let,I64 stage2_blk=0,I64 stage2_size=0) +U0 RedSeaISO9660Stage1(U8 *iso_filename,U8 *stage2_filename) +{ + CDirEntry de; + CFile *out_file=NULL; + U8 *stage1_buf=CAlloc(DVD_BOOT_LOADER_SIZE); + if (FileFind(stage2_filename,&de) && (out_file=FOpen(iso_filename,"wc+"))) { + MemCpy(stage1_buf,BDVD_START,BDVD_END-BDVD_START); + *(BDVD_BLK_LO -BDVD_START+stage1_buf)(U32 *)=de.cluster>>2; + *(BDVD_BLK_CNT -BDVD_START+stage1_buf)(U16 *)= + (de.size+DVD_BLK_SIZE-1)>>(BLK_SIZE_BITS+2); + *(BDVD_SHIFT_BLKS -BDVD_START+stage1_buf)(U16 *)=de.cluster&3; + if (de.cluster&3) + *(BDVD_BLK_CNT -BDVD_START+stage1_buf)(U16 *)+=1; + FWBlks(out_file,stage1_buf, + 20<<2+1<<2,DVD_BOOT_LOADER_SIZE/BLK_SIZE); + FClose(out_file); + } + Free(stage1_buf); +} + +U0 RedSeaISO9660(U8 *iso_filename,U8 drv_let) { CDrv *dv=Let2Drv(drv_let); CISO1PriDesc *iso_pri=CAlloc(DVD_BLK_SIZE), @@ -35,8 +55,7 @@ U0 RedSeaISO9660(U8 *iso_filename,U8 drv_let,I64 stage2_blk=0,I64 stage2_size=0) I64 iso_size=0,i,j; U32 *d; CElTorito *et=CAlloc(DVD_BLK_SIZE); - U8 *stage1_buf=CAlloc(DVD_BOOT_LOADER_SIZE), - *zero_buf=CAlloc(DVD_BLK_SIZE); + U8 *zero_buf=CAlloc(DVD_BLK_SIZE); CFile *out_file=NULL; if (out_file=FOpen(iso_filename,"wc+")) { @@ -87,20 +106,9 @@ U0 RedSeaISO9660(U8 *iso_filename,U8 drv_let,I64 stage2_blk=0,I64 stage2_size=0) et->sect_cnt=4; //5 seems like the limit, 4 is safer et->load_rba=20<<2>>2+1; FWBlks(out_file,et,20<<2,4); - - MemCpy(stage1_buf,BDVD_START,BDVD_END-BDVD_START); - *(BDVD_BLK_LO -BDVD_START+stage1_buf)(U32 *)=stage2_blk>>2; - *(BDVD_BLK_CNT -BDVD_START+stage1_buf)(U16 *)= - (stage2_size+DVD_BLK_SIZE-1)>>(BLK_SIZE_BITS+2); - *(BDVD_SHIFT_BLKS -BDVD_START+stage1_buf)(U16 *)=stage2_blk&3; - if (stage2_blk&3) - *(BDVD_BLK_CNT -BDVD_START+stage1_buf)(U16 *)+=1; - FWBlks(out_file,stage1_buf, - 20<<2+1<<2,DVD_BOOT_LOADER_SIZE/BLK_SIZE); FClose(out_file); } Free(zero_buf); - Free(stage1_buf); Free(et); Free(iso_pri); Free(iso_boot); @@ -129,7 +137,7 @@ public I64 RedSeaISO(U8 *_iso_filename=NULL,U8 *_src_dir, U8 *_stage2_filename=NULL) {//See $LK,"::/Misc/DoDistro.HC"$. Must be ISO.C I64 i,res,root_cnt,root_dir_blks,bitmap_blks,bitmap_blks1; - CDirEntry *tmpde,de; + CDirEntry *tmpde; U8 buf[STR_LEN],*iso_filename,*src_dir,*stage2_filename; CDrv *dv=DrvMakeFreeSlot(DrvNextFreeLet('Q')); //First $LK,"BDT_ISO_FILE_WRITE",A="MN:BDT_ISO_FILE_WRITE"$ CBlkDev *bd=BlkDevNextFreeSlot(dv->drv_let,BDT_ISO_FILE_WRITE); @@ -162,13 +170,10 @@ public I64 RedSeaISO(U8 *_iso_filename=NULL,U8 *_src_dir, bd->max_blk--; //Inclusive. bd->file_dsk_name=AStrNew(iso_filename); bd->init_root_dir_blks=root_dir_blks; - BlkDevAdd(bd,TRUE,TRUE); + BlkDevAdd(bd,,TRUE,TRUE); StrPrint(buf,"%C:/",dv->drv_let); CopyTree(src_dir,buf,TRUE); - if (FileFind(stage2_filename,&de)) - RedSeaISO9660(iso_filename,dv->drv_let,de.cluster,de.size); - else - RedSeaISO9660(iso_filename,dv->drv_let); + RedSeaISO9660Stage1(iso_filename,stage2_filename); DrvDel(dv); BlkDevDel(bd); } diff --git a/Adam/DolDoc/DocOpt.HC b/Adam/Opt/Utils/DocUtils.HC similarity index 65% rename from Adam/DolDoc/DocOpt.HC rename to Adam/Opt/Utils/DocUtils.HC index ed10a35..26ad00b 100644 --- a/Adam/DolDoc/DocOpt.HC +++ b/Adam/Opt/Utils/DocUtils.HC @@ -1,4 +1,45 @@ -#help_index "DolDoc" +#help_index "DolDoc/Cmd Line (Typically)" + +U0 CursorRemFile(U8 *filename) +{//Rem ASCII 5 cursor from one file. + CDoc *doc=DocRead(filename,DOCF_PLAIN_TEXT|DOCF_NO_CURSOR); + DocWrite(doc); + DocDel(doc); +} +public U0 CursorRem(U8 *files_find_mask="*") +{//Rem ASCII 5 cursor. + I64 fuf_flags=0; + ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r+T+f+F+O"); + CDirEntry *tmpde=FilesFind(files_find_mask,fuf_flags),*tmpde1=tmpde; + while (tmpde) { + CursorRemFile(tmpde->full_name); + Touch(tmpde->full_name,"",,tmpde->datetime); + tmpde=tmpde->next; + } + DirTreeDel(tmpde1); +} + +U0 CollapseFile(U8 *filename,Bool collapse=TRUE) +{//Collapse $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.DD"$ trees in one file. + CDoc *doc=DocRead(filename,DOCF_NO_CURSOR); + DocCollapse(collapse,doc); + DocWrite(doc); + DocDel(doc); +} +public U0 Collapse(U8 *files_find_mask="*", + Bool collapse=TRUE,U8 *fu_flags=NULL) +{//Collapse $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.DD"$ trees. + I64 fuf_flags=0; + ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r+f+F+$$+O"); + ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),fu_flags); + CDirEntry *tmpde=FilesFind(files_find_mask,fuf_flags),*tmpde1=tmpde; + while (tmpde && !Bt(&fuf_flags,FUf_CANCEL)) { + CollapseFile(tmpde->full_name,collapse); + Touch(tmpde->full_name,"",,tmpde->datetime); + tmpde=tmpde->next; + } + DirTreeDel(tmpde1); +} I64 DocOptEntry(CDoc *,CDocEntry *doc_e,I64 fuf_flags) { @@ -48,7 +89,6 @@ I64 DocOptEntry(CDoc *,CDocEntry *doc_e,I64 fuf_flags) } return res; } - I64 DocOptDoc(CDoc *doc,I64 fuf_flags) {//Optimize Doc. Bool unlock=DocLock(doc); @@ -76,9 +116,8 @@ I64 DocOptDoc(CDoc *doc,I64 fuf_flags) DocUnlock(doc); return res; } - I64 DocOptFile(U8 *filename,I64 fuf_flags) -{//Optimize File. +{//Optimize file. I64 res; CDoc *doc=DocRead(filename); if (res=DocOptDoc(doc,fuf_flags)) { @@ -107,7 +146,7 @@ I64 DocOptLst(CDirEntry *tmpde,I64 fuf_flags) return res; } public I64 DocOpt(U8 *files_find_mask="*",U8 *fu_flags=NULL) -{//Optimize $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.DD"$ Files, eliminating aux_str's and .Z's. +{//Optimize $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.DD"$ files, eliminating aux_str's and .Z's. //+R flag for aggressively risky. I64 fuf_flags=0; ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r+$$"); diff --git a/Adam/Opt/Utils/HeapLog.HC b/Adam/Opt/Utils/HeapLog.HC index e809bef..16b2d3b 100644 --- a/Adam/Opt/Utils/HeapLog.HC +++ b/Adam/Opt/Utils/HeapLog.HC @@ -35,10 +35,10 @@ U0 HeapLogMAlloc(U8 *addr) i=addr>>3 &(HL_HASH_SIZE-1); PUSHFD CLI - while (LBts(&sys_semas[SYS_SEMA_HEAPLOG_LOCK],0)) + while (LBts(&sys_semas[SEMA_HEAPLOG_LOCK],0)) PAUSE QueIns(tmphl,heaplog_head[i].last); - LBtr(&sys_semas[SYS_SEMA_HEAPLOG_LOCK],0); + LBtr(&sys_semas[SEMA_HEAPLOG_LOCK],0); POPFD } } @@ -52,20 +52,20 @@ U0 HeapLogFree(U8 *addr) i=addr>>3 &(HL_HASH_SIZE-1); PUSHFD CLI - while (LBts(&sys_semas[SYS_SEMA_HEAPLOG_LOCK],0)) + while (LBts(&sys_semas[SEMA_HEAPLOG_LOCK],0)) PAUSE tmphl=heaplog_head[i].next; while (tmphl!=&heaplog_head[i]) { if (addr==tmphl->addr) { QueRem(tmphl); - LBtr(&sys_semas[SYS_SEMA_HEAPLOG_LOCK],0); + LBtr(&sys_semas[SEMA_HEAPLOG_LOCK],0); POPFD Free(tmphl); return; } tmphl=tmphl->next; } - LBtr(&sys_semas[SYS_SEMA_HEAPLOG_LOCK],0); + LBtr(&sys_semas[SEMA_HEAPLOG_LOCK],0); POPFD } } @@ -74,7 +74,7 @@ public Bool HeapLog(Bool val=ON,CTask *task=NULL) {//Turn on. Collect data. Call $LK,"HeapLogAddrRep",A="MN:HeapLogAddrRep"$() or $LK,"HeapLogSizeRep",A="MN:HeapLogSizeRep"$(). I64 i; if (val) { - if (Bt(&sys_semas[SYS_SEMA_HEAPLOG_ACTIVE],0)) { + if (Bt(&sys_semas[SEMA_HEAPLOG_ACTIVE],0)) { "HeapLog Already Active\n"; return TRUE; } else { @@ -85,7 +85,7 @@ public Bool HeapLog(Bool val=ON,CTask *task=NULL) heaplog_hc_watched=task;//Actually, not a task, must be a HeapCtrl. PUSHFD CLI - while (LBts(&sys_semas[SYS_SEMA_HEAPLOG_LOCK],0)) + while (LBts(&sys_semas[SEMA_HEAPLOG_LOCK],0)) PAUSE heaplog_hc=HeapCtrlInit(,,sys_data_bp); ext[EXT_HEAPLOG_MALLOC]=&HeapLogMAlloc; @@ -93,13 +93,13 @@ public Bool HeapLog(Bool val=ON,CTask *task=NULL) heaplog_head=MAlloc(sizeof(CHeapLogHash)*HL_HASH_SIZE,heaplog_hc); for (i=0;isrv_ctrl.flags,SVCRf_LOCKED)) + while (LBts(&task->srv_ctrl.flags,JOBCf_LOCKED)) PAUSE tmpc1=&task->srv_ctrl.next_waiting; @@ -56,7 +56,7 @@ I64 TaskQueSize(CTask *task) tmpc=tmpc->next; } - LBtr(&task->srv_ctrl.flags,SVCRf_LOCKED); + LBtr(&task->srv_ctrl.flags,JOBCf_LOCKED); POPFD return res; } @@ -101,7 +101,7 @@ Bool MemRepTask(CTask *task,Bool override_validate=FALSE) if (task==Fs) task->rsp=GetRSP; st=MStrUtil(task->task_title,SUF_REM_CTRL_CHARS|SUF_SAFE_DOLLAR); - "$$BLACK$$%-25ts %010X$$FG$$\n$$ID,2$$",st,task; + "$$BLACK$$%-27ts#%08X$$FG$$\n$$ID,2$$",st,task; Free(st); "Heap\t:%010X/%010X\n",TaskMemUsed(task,override_validate), TaskMemAlloced(task,override_validate); @@ -114,6 +114,8 @@ Bool MemRepTask(CTask *task,Bool override_validate=FALSE) "Stk\t\t:$$RED$$$$BK,1$$Overflow$$BK,0$$$$FG$$/%010X\n",j; "HashTable\t:%010X\n",HashTableSize2(task->hash_table); + "FPU\t\t:%010X\n",MSize2(task->fpu_mmx); + "CurDir\t:%010X\n",MSize2(task->cur_dir); if (pdoc=DocPut(task)) "PutDoc\t:%010X\n",DocSize(pdoc); @@ -124,7 +126,7 @@ Bool MemRepTask(CTask *task,Bool override_validate=FALSE) cc=task->next_cc; while (cc!=&task->next_cc) { - "Lex\t\t:%010X\n",CmpCtrlSize(cc); + "CmpCtrl\t:%010X\n",CmpCtrlSize(cc); cc=cc->next; } @@ -136,7 +138,7 @@ Bool MemRepTask(CTask *task,Bool override_validate=FALSE) if (task==sys_winmgr_task) { "gr.pen_brushes\t:%010X\n",PenBrushesSize; - "gr_scrn_zoom_tbles:%010X\n",ScrnZoomTablesSize; + "gr.scrn_zoom_tbles\t:%010X\n",ScrnZoomTablesSize; } else if (task==adam_task) { j=0;k=0;m=0;n=0; for (i=0;ifile_size-1; "$$BLACK$$Low Memory\t:0000100000$$FG$$\n$$ID,2$$"; - "Kernel\t:%010X-%010X\n",sys_boot_base-sizeof(CBinFile),bfh; + "Kernel\t:%010X-%010X\n",mem_boot_base-sizeof(CBinFile),bfh; "VGA\t\t:00000A0000-00000BFFFF\n"; "$$ID,-2$$$$BLACK$$High Memory\t:0000100000-%010X$$FG$$\n", - sys_heap_limit; - "$$ID,2$$Fixed Area for page tables and misc\n\t\t:%010X-%010X\n", + mem_heap_limit; + "$LK,"SYS_FIXED_AREA",A="MN:CSysFixedArea"$\t:%010X-%010X\n", SYS_FIXED_AREA,SYS_FIXED_AREA+sizeof(CSysFixedArea)-1; - "$$ID,-2$$"; if (sys_data_bp) { "$$BLACK$$Code Heap\t:%010X/%010X$$FG$$\n", diff --git a/Adam/Opt/Utils/Profiler.HC b/Adam/Opt/Utils/Profiler.HC index 6617a33..8ce193f 100644 --- a/Adam/Opt/Utils/Profiler.HC +++ b/Adam/Opt/Utils/Profiler.HC @@ -56,7 +56,7 @@ I64 ProfCompare(U8 *i1,U8 *i2) public U0 ProfRep(I64 filter_cnt=1,Bool leave_it=OFF) {//Profiler report. Call $LK,"Prof",A="MN:Prof"$() first and collect data. - I64 i,hits,ip,last_ip=0,routine_total=0; + I64 i,hits,rip,last_rip=0,routine_total=0; F64 total_time; U8 buf[256],buf2[256],last_buf[256]; if (!LBtr(&pf_prof_active,0)) @@ -69,12 +69,12 @@ public U0 ProfRep(I64 filter_cnt=1,Bool leave_it=OFF) QSortI64(pf_array,pf_buf_in_ptr,&ProfCompare); *last_buf=0; for (i=0;i=filter_cnt) @@ -85,8 +85,8 @@ public U0 ProfRep(I64 filter_cnt=1,Bool leave_it=OFF) } routine_total+=hits; if (hits>=filter_cnt) { - "%6.2f %08X:%P\n",100*hits/total_time,hits,ip; - last_ip=ip; + "%6.2f %08X:%P\n",100*hits/total_time,hits,rip; + last_rip=rip; } } if (*last_buf && routine_total>=filter_cnt) diff --git a/Adam/Opt/Utils/StrUtils.HC b/Adam/Opt/Utils/StrUtils.HC index aae2100..41a6737 100644 --- a/Adam/Opt/Utils/StrUtils.HC +++ b/Adam/Opt/Utils/StrUtils.HC @@ -69,7 +69,7 @@ public I64 Sort(U8 *_in_name,U8 *_out_name=NULL, return res; //Num Entries } -I64 DocWordsFile(CDoc *doc_out=NULL,U8 *filename,U32 *chars_bmp) +I64 DocWordsFile(CDoc *doc_out=NULL,U8 *filename,U32 *char_bmp) { U8 *ptr,*ptr2; I64 res=0,ch; @@ -79,11 +79,11 @@ I64 DocWordsFile(CDoc *doc_out=NULL,U8 *filename,U32 *chars_bmp) if (doc_e->de_flags & DOCEF_TAG) { ptr=doc_e->tag; while (*ptr) { - while (*ptr && !Bt(chars_bmp,*ptr)) + while (*ptr && !Bt(char_bmp,*ptr)) ptr++; ptr2=ptr; - while (*ptr && Bt(chars_bmp,*ptr)) + while (*ptr && Bt(char_bmp,*ptr)) ptr++; ch=*ptr; @@ -100,7 +100,7 @@ I64 DocWordsFile(CDoc *doc_out=NULL,U8 *filename,U32 *chars_bmp) DocDel(doc_in); return res; } -public I64 Words(U8 *files_find_mask="*",U32 *chars_bmp=chars_bmp_alpha, +public I64 Words(U8 *files_find_mask="*",U32 *char_bmp=char_bmp_alpha, U8 *fu_flags=NULL) {//Break file into list of not-unique words. I64 fuf_flags=0,res=0; @@ -110,7 +110,7 @@ public I64 Words(U8 *files_find_mask="*",U32 *chars_bmp=chars_bmp_alpha, ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),fu_flags); tmpde=tmpde1=FilesFind(files_find_mask,fuf_flags); while (tmpde) { - res+=DocWordsFile(doc_out,tmpde->full_name,chars_bmp); + res+=DocWordsFile(doc_out,tmpde->full_name,char_bmp); tmpde=tmpde->next; } DirTreeDel(tmpde1); diff --git a/Adam/Opt/Utils/TOS.HC b/Adam/Opt/Utils/TOS.HC new file mode 100644 index 0000000..644e708 --- /dev/null +++ b/Adam/Opt/Utils/TOS.HC @@ -0,0 +1,47 @@ +#help_index "Misc/TOS" + +public U0 TOSStaffIns() +{//Completes TOS install from TempleOSStaff.ISO + SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ + AutoComplete; + WinBorder; + WinMax; + DocClear; + "$$PURPLE$$$$TX+CX,\"Complete TOS install from TempleOSStaff.ISO\"$$$$FG$$\n\n\n\n"; + InsRereg; + if (HostChgDsk("/home/tad/TAD/Site1/Wb/TempleOSSup1.ISO.C")) + CopyTree("T:/","~/Sup1"); + if (HostChgDsk("/home/tad/TAD/Site1Stale/files/TempleOSBooks1.ISO.C")) + CopyTree("T:/","~/Books1"); + if (HostChgDsk("/home/tad/TAD/Site1Stale/files/TempleOSBooks2.ISO.C")) + CopyTree("T:/","~/Books2"); + SettingsPop; + Once("TOSBootHDIns;\"\n\nRun TOSRegen;\n\n\n\";"); + if (PressAKey!=CH_SHIFT_ESC) + Reboot; +} + +public U0 TOSStdIns() +{//Completes TOS install from TempleOSCD.ISO + SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ + AutoComplete; + WinBorder; + WinMax; + DocClear; + "$$PURPLE$$$$TX+CX,\"Complete TOS install from TempleOSCD.ISO\"$$$$FG$$\n\n\n\n"; + InsRereg; + if (FileFind("/Demo/AcctExample")) + Copy("::/Demo/AcctExample/*","~"); + if (HostChgDsk("/home/tad/Downloads/TempleOSSup1.ISO.C")) + CopyTree("T:/","~/Sup1"); + if (HostChgDsk("/home/tad/Downloads/TempleOSWeb.ISO.C")) + CopyTree("T:/","~/Web"); + if (HostChgDsk("/home/tad/Downloads/TempleOSBooks1.ISO.C")) + CopyTree("T:/","~/Books1"); + if (HostChgDsk("/home/tad/Downloads/TempleOSBooks2.ISO.C")) + CopyTree("T:/","~/Books2"); + SettingsPop; + Once("TOSBootHDIns;\"\n\nRun TOSRegen;\n\n\n\";"); + if (PressAKey!=CH_SHIFT_ESC) + Reboot; +} diff --git a/Adam/Snd/MakeSnd.HC b/Adam/Snd/MakeSnd.HC index 343a9aa..45ac0a8 100644 --- a/Adam/Snd/MakeSnd.HC +++ b/Adam/Snd/MakeSnd.HC @@ -10,7 +10,7 @@ class CSndWaveCtrl public U0 SndTaskEndCB() {//Will turn-off snd when a task gets killed. - Snd(0); + Snd; Exit; } diff --git a/Adam/Snd/SndEffects.HC b/Adam/Snd/SndEffects.HC index dd27a02..c925a69 100644 --- a/Adam/Snd/SndEffects.HC +++ b/Adam/Snd/SndEffects.HC @@ -5,8 +5,9 @@ class CSoundEffectFrame { - I32 type; - F64 duration,freq1,freq2; + I32 type; + I8 ona1,ona2; + F64 duration; }; U0 SoundEffectEndTaskCB() @@ -18,57 +19,60 @@ U0 SoundEffectEndTaskCB() U0 SoundEffectTask(CSoundEffectFrame *ns) { - I64 i; - F64 f,t0=tS,t,timeout=t0+ns->duration; + I64 i,ona; + F64 t0=tS,t,timeout=t0+ns->duration; FramePtrAdd("CSoundEffectFrame",ns); Fs->task_end_cb=&SoundEffectEndTaskCB; switch (ns->type) { case SE_NOISE: - i=MaxI64(ns->freq2-ns->freq1,1); - while (tSfreq1) { - Snd(f); - Sleep(ClampI64(3000/f,1,50)); - } else - break; + i=MaxI64(ns->ona2-ns->ona1,1); + while (tSona1; + Snd(ona); + t=Clamp(3000.0/Ona2Freq(ona),1.0,50.0); + if (t+tS>timeout) + t=timeout-tS; + Sleep(t); + } break; case SE_SWEEP: while (tSduration; - if (f=(1.0-t)*ns->freq1+t*ns->freq2) { - Snd(f); - Sleep(ClampI64(3000/f,1,50)); - } else - break; + ona=(1.0-t)*ns->ona1+t*ns->ona2; + Snd(ona); + t=Clamp(3000.0/Ona2Freq(ona),1.0,50.0); + if (t+tS>timeout) + t=timeout-tS; + Sleep(t); } break; } } -public CTask *Noise(I64 ms,F64 min_freq,F64 max_freq) -{//Make white noise for given number of ms. +public CTask *Noise(I64 mS,F64 min_ona,F64 max_ona) +{//Make white noise for given number of mS. CSoundEffectFrame *ns; - if (ms>0) { + if (mS>0) { ns=MAlloc(sizeof(CSoundEffectFrame)); ns->type=SE_NOISE; - ns->duration=ms/1000.0; - ns->freq1=min_freq; - ns->freq2=max_freq; + ns->duration=mS/1000.0; + ns->ona1=min_ona; + ns->ona2=max_ona; music.mute++; return Spawn(&SoundEffectTask,ns,"Noise",,Fs); } else return NULL; } -public CTask *Sweep(I64 ms,F64 freq1,F64 freq2) -{//Sweep through freq range in given number of ms. +public CTask *Sweep(I64 mS,F64 ona1,F64 ona2) +{//Sweep through freq range in given number of mS. CSoundEffectFrame *ns; - if (ms>0) { + if (mS>0) { ns=MAlloc(sizeof(CSoundEffectFrame)); ns->type=SE_SWEEP; - ns->duration=ms/1000.0; - ns->freq1=freq1; - ns->freq2=freq2; + ns->duration=mS/1000.0; + ns->ona1=ona1; + ns->ona2=ona2; music.mute++; return Spawn(&SoundEffectTask,ns,"Noise",,Fs); } else diff --git a/Adam/Snd/SndFile.HC b/Adam/Snd/SndFile.HC index 92d1c22..287e61d 100644 --- a/Adam/Snd/SndFile.HC +++ b/Adam/Snd/SndFile.HC @@ -67,7 +67,8 @@ public I64 SndFileCreate(U8 *base_filename,F64 normalized_vol=1.0, d1=d->next; dt=d1->time-d->time; cnt2=dt*SNDFILE_SAMPLE_RATE; - SndWaveAddBuf(swc,&s->body[k],cnt2,d->freq,waveform,normalized_vol); + SndWaveAddBuf(swc,&s->body[k],cnt2, + Ona2Freq(d->ona),waveform,normalized_vol); k+=cnt2; QueRem(d); Free(d); diff --git a/Adam/Snd/SndMath.HC b/Adam/Snd/SndMath.HC index 76375da..1051068 100644 --- a/Adam/Snd/SndMath.HC +++ b/Adam/Snd/SndMath.HC @@ -77,9 +77,27 @@ public F64 FullTri(F64 t,F64 period) } #help_index "Snd/Math" -public F64 Note2Freq(I64 note,I64 octave=3) -{//Note number in octave to freq. - return 440.0*2.0`(octave-3+note/12.0); + +public I8 Note2Ona(I64 note,I64 octave=4) +{//Note to ona. Mid C is ona=51, note=3 and octave=4. + if (note<3) + return (octave+1)*12+note; + else + return octave*12+note; +} + +public I8 Ona2Note(I8 ona) +{//Ona to note in octave. Mid C is ona=51, note=3 and octave=4. + return ona%12; +} + +public I8 Ona2Octave(I8 ona) +{//Ona to octave. Mid C is ona=51, note=3 and octave=4. + I64 note=ona%12,octave=ona/12; + if (note<3) + return octave-1; + else + return octave; } F64 SinPhaseCont(F64 last_y,F64 last_dydt, diff --git a/Adam/Snd/SndMusic.HC b/Adam/Snd/SndMusic.HC index 56a2fc7..1e3d554 100644 --- a/Adam/Snd/SndMusic.HC +++ b/Adam/Snd/SndMusic.HC @@ -16,7 +16,7 @@ public class CMusicGlbls I64 play_note_num; F64 tM_correction,last_Beat,last_tM; -} music={NULL,NULL,3,1.0,{0,2,3,5,7,8,10},FALSE,4,4,2.5,0.9,0,0,0,0}; +} music={NULL,NULL,4,1.0,{0,2,3,5,7,8,10},FALSE,4,4,2.5,0.9,0,0,0,0}; #help_index "Snd/Music;Time/Seconds" public F64 tM() @@ -30,7 +30,7 @@ public F64 Beat() PUSHFD CLI if (mp_cnt>1) - while (LBts(&sys_semas[SYS_SEMA_TMBEAT],0)) + while (LBts(&sys_semas[SEMA_TMBEAT],0)) PAUSE cur_tM=tM; res=music.last_Beat; @@ -38,7 +38,7 @@ public F64 Beat() res+=(cur_tM-music.last_tM)*music.tempo; music.last_tM=cur_tM; music.last_Beat=res; - LBtr(&sys_semas[SYS_SEMA_TMBEAT],0); + LBtr(&sys_semas[SEMA_TMBEAT],0); POPFD return res; } @@ -99,7 +99,7 @@ public U0 Play(U8 *st,U8 *words=NULL) {/* Notes are entered with a capital letter. Octaves are entered with a digit and -stay set until changed. +stay set until changed. Mid C is octave 4. Durations are entered with 'w' whole note @@ -127,9 +127,9 @@ per second. It defaults to 2.5 and gets faster when bigger. */ U8 *word,*last_st; - I64 note,i=0,timeout_val,timeout_val2; + I64 note,i=0,ona,timeout_val,timeout_val2; Bool tie; - F64 f,d,on_jiffies,off_jiffies; + F64 d,on_jiffies,off_jiffies; music.play_note_num=0; while (*st) { timeout_val=cnts.jiffies; @@ -158,9 +158,9 @@ per second. It defaults to note++; st++; } - f=Note2Freq(note,music.octave); + ona=Note2Ona(note,music.octave); } else - f=0; + ona=ONA_REST; if (words && (word=LstSub(i++,words)) && StrCmp(word," ")) "%s",word; d=JIFFY_FREQ*music.note_len/music.tempo; @@ -175,12 +175,12 @@ per second. It defaults to timeout_val2=timeout_val+off_jiffies; if (!music.mute) - Snd(f); + Snd(ona); SleepUntil(timeout_val); music.tM_correction+=on_jiffies-ToI64(on_jiffies); if (!music.mute) - Snd(0); + Snd; SleepUntil(timeout_val2); music.tM_correction+=off_jiffies-ToI64(off_jiffies); @@ -193,7 +193,7 @@ U0 MusicSettingsRst() music.play_note_num=0; music.stacatto_factor=0.9; music.tempo=2.5; - music.octave=3; + music.octave=4; music.note_len=1.0; music.meter_top=4; music.meter_bottom=4; @@ -201,11 +201,11 @@ U0 MusicSettingsRst() PUSHFD CLI if (mp_cnt>1) - while (LBts(&sys_semas[SYS_SEMA_TMBEAT],0)) + while (LBts(&sys_semas[SEMA_TMBEAT],0)) PAUSE music.last_tM=tM; music.last_Beat=0.0; - LBtr(&sys_semas[SYS_SEMA_TMBEAT],0); + LBtr(&sys_semas[SEMA_TMBEAT],0); POPFD } diff --git a/Adam/TaskRep.HC b/Adam/TaskRep.HC index 87db4a1..fa3f23c 100644 --- a/Adam/TaskRep.HC +++ b/Adam/TaskRep.HC @@ -23,7 +23,7 @@ public U0 TaskRep() CLI for (i=0;iseth_task,2); } POPFD diff --git a/Adam/TaskSettings.HC b/Adam/TaskSettings.HC index 80b78ff..4bcee95 100644 --- a/Adam/TaskSettings.HC +++ b/Adam/TaskSettings.HC @@ -18,7 +18,7 @@ public CTaskSettings *SettingsPush(CTask *task=NULL,I64 flags=0) if (!(flags&TSF_SAME_SONG)) { if (tmpse->song_task=task->song_task) { Suspend(task->song_task); - Snd(0); + Snd; } task->song_task=NULL; } @@ -83,7 +83,7 @@ U0 SettingsPop2(CTask *task,CTaskSettings *tmpse) StrCpy(task->task_title,tmpse->task_title); AutoComplete(tmpse->autocomplete); GrPaletteSet(tmpse->palette); - Snd(0); + Snd; } public U0 SettingsPop(CTask *task=NULL,I64 flags=0) diff --git a/Adam/Training.HC b/Adam/Training.HC index a2927ce..1a5fed3 100644 --- a/Adam/Training.HC +++ b/Adam/Training.HC @@ -1,6 +1,6 @@ #help_index "Help System" -U8 *KeyMapKeyMStrPrint(I64 sc,U0 (*fp_handler)(I64 sc), +U8 *KeyMapKeyMStrPrint(I64 sc,U0 (*fp_hndlr)(I64 sc), U8 *desc,CTask *task=NULL) { I64 i=9,k,c; @@ -12,7 +12,7 @@ U8 *KeyMapKeyMStrPrint(I64 sc,U0 (*fp_handler)(I64 sc), if (sc&(SCF_SHIFT|SCF_NO_SHIFT)) i+=6; if (TaskValidate(task)) Fs->hash_table=task->hash_table; - st2=SrcEdLink(fp_handler,256); + st2=SrcEdLink(fp_hndlr,256); Fs->hash_table=old_hash; k=*desc(U32 *); @@ -36,9 +36,9 @@ U8 *KeyMapKeyMStrPrint(I64 sc,U0 (*fp_handler)(I64 sc), return res; } -U0 KeyMapKeyPrint(I64 sc,U0 (*fp_handler)(I64 sc),U8 *desc,CTask *task=NULL) +U0 KeyMapKeyPrint(I64 sc,U0 (*fp_hndlr)(I64 sc),U8 *desc,CTask *task=NULL) { - U8 *st=KeyMapKeyMStrPrint(sc,fp_handler,desc,task); + U8 *st=KeyMapKeyMStrPrint(sc,fp_hndlr,desc,task); "%s",st; Free(st); } @@ -98,22 +98,22 @@ I64 KMCompare(U8 *e1,U8 *e2) U0 KeyMapFamily2(U8 **entries,CTask *task,I64 scf) { - I64 i,a1,a2; + I64 i,arg1,arg2; for (i=0;i<256;i++) { - a2=scf|i|SCF_KEY_DESC; - a1=ScanCode2Char(a2); + arg2=scf|i|SCF_KEY_DESC; + arg1=ScanCode2Char(arg2); *keydev.desc=0; - keydev.handler=NULL; + keydev.hndlr=NULL; if (TaskValidate(task) && !Bt(&task->win_inhibit,WIf_SELF_KEY_DESC)) { if (task==Fs) - PutKey(a1,a2); + PutKey(arg1,arg2); else - PostMsg(task,MSG_KEY_DOWN,a1,a2); + PostMsg(task,MSG_KEY_DOWN,arg1,arg2); Refresh(0,TRUE); Sleep(1); //Open loop because might be no response. TODO: Drops msgs. } if (*keydev.desc && StrNCmp(keydev.desc,"Char /",7)) - entries[i]=KeyMapKeyMStrPrint(a2,keydev.handler,keydev.desc,task); + entries[i]=KeyMapKeyMStrPrint(arg2,keydev.hndlr,keydev.desc,task); } } diff --git a/Adam/WallPaper.HC b/Adam/WallPaper.HC index 381135b..6598636 100644 Binary files a/Adam/WallPaper.HC and b/Adam/WallPaper.HC differ diff --git a/Adam/Win.HC b/Adam/Win.HC index 0e8f52a..c2b0e8e 100644 --- a/Adam/Win.HC +++ b/Adam/Win.HC @@ -1,9 +1,8 @@ #help_index "Windows" #help_file "::/Doc/Windows" -CIPStateGlbls old_ip={IP_NULL,{-1000,-1000,0},{-1000,-1000,0},{-1000,-1000,0}, - {0,0,0},{1.0,1.0,1.0}, - 0,(MAX_I32+1)>>3,0.0,GetTSC,0.350,0,0, +CMsStateGlbls old_ms={{-1000,-1000,0},{-1000,-1000,0},{-1000,-1000,0}, + {0,0,0},{1.0,1.0,1.0},0.0,GetTSC,0.350,0,0, FALSE,FALSE,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE }; @@ -11,9 +10,22 @@ public CWinMgrGlbls winmgr={0,0,0,WINMGR_FPS,tS,NULL,FALSE,FALSE,FALSE}; winmgr.t=CAlloc(sizeof(CWinMgrTimingGlbls)); winmgr.t->last_calc_idle_time=tS; +U0 ProgressBarsRegTf(U8 *path=NULL) +{ + F64 t,p1,p2,p3,p4; + if (path) { + t=tS; + if (progress1_t0) p1=t-progress1_t0; else p1=0; + if (progress2_t0) p2=t-progress2_t0; else p2=0; + if (progress3_t0) p3=t-progress3_t0; else p3=0; + if (progress4_t0) p4=t-progress4_t0; else p4=0; + RegWrite(path,"progress1_tf=%0.3f;progress2_tf=%0.3f;\n" + "progress3_tf=%0.3f;progress4_tf=%0.3f;\n",p1,p2,p3,p4); + } +} + #define PROGRESS_BAR_HEIGHT 20 #define PROGRESS_BAR_WIDTH (3*GR_WIDTH/4) - U0 DrawProgressBars(CDC *dc) { I64 i,j,k,n,m; @@ -52,20 +64,24 @@ U0 DrawProgressBars(CDC *dc) PROGRESS_BAR_HEIGHT)/2-4); } - dc->color=WHITE; + dc->color=GREEN; if (*sys_progresses[i].desc) st=StrNew(sys_progresses[i].desc); else st=MStrPrint("%d/%d",n,m); if (sys_progresses[i].t0) { - st2=MStrPrint("%s %5.3f",st,tS-sys_progresses[i].t0); + st2=MStrPrint("%s %fs",st,tS-sys_progresses[i].t0); Free(st); } else st2=st; - GrPrint(dc,(GR_WIDTH-FONT_WIDTH*StrLen(st2))/2, - (GR_HEIGHT-FONT_HEIGHT- - (NUM_PROGRESS_BARS*2-2-i*4)*PROGRESS_BAR_HEIGHT)/2,"%s",st2); - Free(st2); + if (sys_progresses[i].tf) { + st=MStrPrint("%s/%fs",st2,sys_progresses[i].tf); + Free(st2); + } else + st=st2; + GrPrint(dc,(GR_WIDTH-FONT_WIDTH*StrLen(st))/2,(GR_HEIGHT-FONT_HEIGHT- + (NUM_PROGRESS_BARS*2-2-i*4)*PROGRESS_BAR_HEIGHT)/2,"%s",st); + Free(st); } } } @@ -75,24 +91,24 @@ U0 DrawWinGrid(CDC *dc) F64 d; dc->color=BLACK; dc->pen_width=1; - for (d=ip_grid.x_offset;dscroll_z=s->z; } -U0 DrawInputPtr(CDC *dc) +U0 DrawMs(CDC *dc) { I64 x,y; PUSHFD CLI - x=ip.pos.x; - y=ip.pos.y; + x=ms.pos.x; + y=ms.pos.y; POPFD - if (ip.show && ip.dev!=IP_NULL) { + if (ms.show && ms_hard.installed) { if (!Bt(&sys_run_level,RLf_VGA)) //if text mode - gr.text_base[ip.pos_text.x+ip.pos_text.y*TEXT_COLS]^=0x7F00; + gr.text_base[ms.pos_text.x+ms.pos_text.y*TEXT_COLS]^=0x7F00; else { - if (gr.fp_draw_input_ptr) { - if (ip.lb) + if (gr.fp_draw_ms) { + if (ms.lb) dc->color=ROP_XOR+LTPURPLE^TRANSPARENT; - else if (ip.rb) + else if (ms.rb) dc->color=ROP_XOR+LTCYAN^TRANSPARENT; else dc->color=ROP_XOR+BLACK^TRANSPARENT; - if (winmgr.grab_scroll && gr.fp_draw_grab_input_ptr) - (*gr.fp_draw_grab_input_ptr)(dc,x,y,winmgr.grab_scroll_closed); + if (winmgr.grab_scroll && gr.fp_draw_grab_ms) + (*gr.fp_draw_grab_ms)(dc,x,y,winmgr.grab_scroll_closed); else - (*gr.fp_draw_input_ptr)(dc,x,y); + (*gr.fp_draw_ms)(dc,x,y); } } } @@ -185,50 +201,48 @@ U0 DrawInputPtr(CDC *dc) U0 WinFinalUpdate(CDC *dc) { - if (ip_grid.show) + if (ms_grid.show) DrawWinGrid(dc); DrawProgressBars(dc); if (winmgr.show_menu) DrawMenu(dc); else sys_cur_submenu_entry=NULL; - DrawInputPtr(dc); + DrawMs(dc); } gr.fp_final_scrn_update=&WinFinalUpdate; -U0 WinIPUpdate() +U0 WinMsUpdate() { I64 dd; Bool set=FALSE; - if (ip.dev==IP_MOUSE) { - ip.has_wheel=mouse.has_wheel; - if (mouse.evt) { - ip.throttle+=ip.throttle_step*SignI64(mouse.pos.z-ip.pos.z); - IPVarsUpdate(mouse.pos.x,mouse.pos.y,mouse.pos.z, - mouse.buttons[0],mouse.buttons[1]); - mouse.evt=FALSE; + if (ms_hard.installed) { + ms.has_wheel=ms_hard.has_wheel; + if (ms_hard.evt) { + MsUpdate(ms_hard.pos.x,ms_hard.pos.y,ms_hard.pos.z, + ms_hard.bttns[0],ms_hard.bttns[1]); + ms_hard.evt=FALSE; set=TRUE; } - } else if (ip.dev==IP_NULL && mouse.installed) - ip.dev=IP_MOUSE; + } if (set) { - if (ip.dev==IP_MOUSE) { - ip.speed=mouse.speed; - ip.timestamp=mouse.timestamp; + if (ms_hard.installed) { + ms.speed=ms_hard.speed; + ms.timestamp=ms_hard.timestamp; } } else - ip.speed*=0.95; + ms.speed*=0.95; if (gr.scrn_zoom!=1) { if (gr.continuous_scroll) GrScaleZoom(1.0); else { - dd=(ip.pos.x-gr.sx)*gr.scrn_zoom; + dd=(ms.pos.x-gr.sx)*gr.scrn_zoom; if (!(8<=ddwake_jiffy=cnts.jiffies; } Yield; @@ -25,7 +25,7 @@ public U0 Refresh(I64 cnt=1,Bool force=FALSE) update_cnt=winmgr.updates+cnt; while (winmgr.updateswake_jiffy=cnts.jiffies; } Sleep(1); @@ -39,153 +39,153 @@ public U0 Refresh(I64 cnt=1,Bool force=FALSE) I64 WinQueIPMsgs(Bool que) { - static CD3I64 single_ip={0,0,0}; + static CD3I64 single_ms={0,0,0}; F64 time=tS; - I64 msg_code=0,a1,a2,single_a1,single_a2; + I64 msg_code=0,arg1,arg2,single_arg1,single_arg2; CTask *task_focus=sys_focus_task; if (task_focus && !winmgr.grab_scroll) { - a1=ip.pos.x-task_focus->pix_left-task_focus->scroll_x; - a2=ip.pos.y-task_focus->pix_top-task_focus->scroll_y; - single_a1=single_ip.x-task_focus->pix_left-task_focus->scroll_x; - single_a2=single_ip.y-task_focus->pix_top-task_focus->scroll_y; - if (old_ip.presnap.x!=ip.presnap.x || old_ip.presnap.y!=ip.presnap.y) { + arg1=ms.pos.x-task_focus->pix_left-task_focus->scroll_x; + arg2=ms.pos.y-task_focus->pix_top-task_focus->scroll_y; + single_arg1=single_ms.x-task_focus->pix_left-task_focus->scroll_x; + single_arg2=single_ms.y-task_focus->pix_top-task_focus->scroll_y; + if (old_ms.presnap.x!=ms.presnap.x || old_ms.presnap.y!=ms.presnap.y) { if (que) TaskMsg(task_focus,0, - MSG_IP_MOVE,a1,a2,0); - msg_code=MSG_IP_MOVE; + MSG_MS_MOVE,arg1,arg2,0); + msg_code=MSG_MS_MOVE; } -//TODO que msg for ip.pos.z? - if (ip.left_dbl_time) { - if (time>ip.left_dbl_time) { - if (ip.left_dbl) { - if (!ip.left_down_sent) { +//TODO que msg for ms.pos.z? + if (ms.left_dbl_time) { + if (time>ms.left_dbl_time) { + if (ms.left_dbl) { + if (!ms.left_down_sent) { if (que) TaskMsg(task_focus,0, - MSG_IP_L_D_DOWN,a1,a2,0); - ip.left_down_sent=TRUE; - msg_code=MSG_IP_L_D_DOWN; + MSG_MS_L_D_DOWN,arg1,arg2,0); + ms.left_down_sent=TRUE; + msg_code=MSG_MS_L_D_DOWN; } - if (!ip.lb) { + if (!ms.lb) { if (que) TaskMsg(task_focus,0, - MSG_IP_L_D_UP,a1,a2,0); - ip.left_dbl_time=0; - msg_code=MSG_IP_L_D_UP; + MSG_MS_L_D_UP,arg1,arg2,0); + ms.left_dbl_time=0; + msg_code=MSG_MS_L_D_UP; } } else { - if (!ip.left_down_sent) { + if (!ms.left_down_sent) { if (que) TaskMsg(task_focus,0, - MSG_IP_L_DOWN,single_a1,single_a2,0); - ip.left_down_sent=TRUE; - msg_code=MSG_IP_L_DOWN; + MSG_MS_L_DOWN,single_arg1,single_arg2,0); + ms.left_down_sent=TRUE; + msg_code=MSG_MS_L_DOWN; } - if (!ip.lb) { + if (!ms.lb) { if (que) TaskMsg(task_focus,0, - MSG_IP_L_UP,a1,a2,0); - ip.left_dbl_time=0; - msg_code=MSG_IP_L_UP; + MSG_MS_L_UP,arg1,arg2,0); + ms.left_dbl_time=0; + msg_code=MSG_MS_L_UP; } } } else { - if (ip.lb && !ip_last.lb) { - ip.left_dbl_time=time; - ip.left_dbl=TRUE; + if (ms.lb && !ms_last.lb) { + ms.left_dbl_time=time; + ms.left_dbl=TRUE; } } } else { if (TaskValidate(task_focus) && - Bt(&task_focus->win_inhibit,WIf_FOCUS_TASK_IP_L_D)) { - if (ip.lb && !ip_last.lb) { + Bt(&task_focus->win_inhibit,WIf_FOCUS_TASK_MS_L_D)) { + if (ms.lb && !ms_last.lb) { if (que) TaskMsg(task_focus,0, - MSG_IP_L_DOWN,a1,a2,0); - msg_code=MSG_IP_L_DOWN; - } else if (!ip.lb && ip_last.lb) { + MSG_MS_L_DOWN,arg1,arg2,0); + msg_code=MSG_MS_L_DOWN; + } else if (!ms.lb && ms_last.lb) { if (que) TaskMsg(task_focus,0, - MSG_IP_L_UP,a1,a2,0); - msg_code=MSG_IP_L_UP; + MSG_MS_L_UP,arg1,arg2,0); + msg_code=MSG_MS_L_UP; } } else { - if (ip.lb && !ip_last.lb) { - ip.left_dbl=FALSE; - ip.left_down_sent=FALSE; - ip.left_dbl_time=time+ip.dbl_time; - single_ip.x=ip.pos.x; - single_ip.y=ip.pos.y; + if (ms.lb && !ms_last.lb) { + ms.left_dbl=FALSE; + ms.left_down_sent=FALSE; + ms.left_dbl_time=time+ms.dbl_time; + single_ms.x=ms.pos.x; + single_ms.y=ms.pos.y; } } } - if (ip.right_dbl_time) { - if (time>ip.right_dbl_time) { - if (ip.right_dbl) { - if (!ip.right_down_sent) { + if (ms.right_dbl_time) { + if (time>ms.right_dbl_time) { + if (ms.right_dbl) { + if (!ms.right_down_sent) { if (que) TaskMsg(task_focus,0, - MSG_IP_R_D_DOWN,a1,a2,0); - ip.right_down_sent=TRUE; - msg_code=MSG_IP_R_D_DOWN; + MSG_MS_R_D_DOWN,arg1,arg2,0); + ms.right_down_sent=TRUE; + msg_code=MSG_MS_R_D_DOWN; } - if (!ip.rb) { + if (!ms.rb) { if (que) TaskMsg(task_focus,0, - MSG_IP_R_D_UP,a1,a2,0); - ip.right_dbl_time=0; - msg_code=MSG_IP_R_D_UP; + MSG_MS_R_D_UP,arg1,arg2,0); + ms.right_dbl_time=0; + msg_code=MSG_MS_R_D_UP; } } else { - if (!ip.right_down_sent) { + if (!ms.right_down_sent) { if (que) TaskMsg(task_focus,0, - MSG_IP_R_DOWN,single_a1,single_a2,0); - ip.right_down_sent=TRUE; - msg_code=MSG_IP_R_DOWN; + MSG_MS_R_DOWN,single_arg1,single_arg2,0); + ms.right_down_sent=TRUE; + msg_code=MSG_MS_R_DOWN; } - if (!ip.rb) { + if (!ms.rb) { if (que) TaskMsg(task_focus,0, - MSG_IP_R_UP,a1,a2,0); - ip.right_dbl_time=0; - msg_code=MSG_IP_R_UP; + MSG_MS_R_UP,arg1,arg2,0); + ms.right_dbl_time=0; + msg_code=MSG_MS_R_UP; } } } else { - if (ip.rb && !ip_last.rb) { - ip.right_dbl_time=time; - ip.right_dbl=TRUE; + if (ms.rb && !ms_last.rb) { + ms.right_dbl_time=time; + ms.right_dbl=TRUE; } } } else { if (TaskValidate(task_focus) && - Bt(&task_focus->win_inhibit,WIf_FOCUS_TASK_IP_R_D)) { - if (ip.rb && !ip_last.rb) { + Bt(&task_focus->win_inhibit,WIf_FOCUS_TASK_MS_R_D)) { + if (ms.rb && !ms_last.rb) { if (que) TaskMsg(task_focus,0, - MSG_IP_R_DOWN,a1,a2,0); - msg_code=MSG_IP_R_DOWN; - } else if (!ip.rb && ip_last.rb) { + MSG_MS_R_DOWN,arg1,arg2,0); + msg_code=MSG_MS_R_DOWN; + } else if (!ms.rb && ms_last.rb) { if (que) TaskMsg(task_focus,0, - MSG_IP_R_UP,a1,a2,0); - msg_code=MSG_IP_R_UP; + MSG_MS_R_UP,arg1,arg2,0); + msg_code=MSG_MS_R_UP; } } else { - if (ip.rb && !ip_last.rb) { - ip.right_dbl=FALSE; - ip.right_down_sent=FALSE; - ip.right_dbl_time=time+ip.dbl_time; - single_ip.x=ip.pos.x; - single_ip.y=ip.pos.y; + if (ms.rb && !ms_last.rb) { + ms.right_dbl=FALSE; + ms.right_down_sent=FALSE; + ms.right_dbl_time=time+ms.dbl_time; + single_ms.x=ms.pos.x; + single_ms.y=ms.pos.y; } } } - MemCpy(&ip_last,&ip,sizeof(CIPStateGlbls)); - MemCpy(&old_ip,&ip,sizeof(CIPStateGlbls)); + MemCpy(&ms_last,&ms,sizeof(CMsStateGlbls)); + MemCpy(&old_ms,&ms,sizeof(CMsStateGlbls)); } return msg_code; } @@ -246,7 +246,7 @@ I64 WinMgrSleep(Bool flush_msgs=FALSE) !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_CTRLS)) { c=sys_focus_task->next_ctrl; while (c!=&sys_focus_task->next_ctrl) { - if (CtrlInside(c,ip.pos.x,ip.pos.y)) { + if (CtrlInside(c,ms.pos.x,ms.pos.y)) { que=FALSE; break; } @@ -261,13 +261,13 @@ I64 WinMgrSleep(Bool flush_msgs=FALSE) } if (sys_focus_task) LBtr(&sys_focus_task->task_flags,TASKf_HAS_SONG); - WinIPUpdate; + WinMsUpdate; - if (!LBtr(&sys_semas[SYS_SEMA_JUST_PUMP_MSGS],0)) { + if (!LBtr(&sys_semas[SEMA_JUST_PUMP_MSGS],0)) { timeout_val=cnts.jiffies+JIFFY_FREQ/WINMGR_FPS; - LBts(&sys_semas[SYS_SEMA_REFRESH_IN_PROGRESS],0); + LBts(&sys_semas[SEMA_REFRESH_IN_PROGRESS],0); GrUpdateScrn; - LBtr(&sys_semas[SYS_SEMA_REFRESH_IN_PROGRESS],0); + LBtr(&sys_semas[SEMA_REFRESH_IN_PROGRESS],0); if (sys_focus_task && !Bt(&sys_focus_task->task_flags,TASKf_HAS_SONG)) { Free(music.cur_song); @@ -281,26 +281,26 @@ I64 WinMgrSleep(Bool flush_msgs=FALSE) music.cur_song_task=NULL; } winmgr.updates++; - if (!mouse.install_attempts) + if (!ms_hard.install_attempts) SleepUntil(timeout_val); //Just for before mouse install attempt at boot. else do { - KbdMouseHandler(FALSE,TRUE); + KbdMsHndlr(FALSE,TRUE); SleepUntil(MinI64(timeout_val,cnts.jiffies+JIFFY_FREQ/500)); } while (cnts.jiffiesflags&DOCF_DONT_SHOW) res=NULL; else if (set_cursor) { @@ -311,8 +311,8 @@ CDoc *WinCursorPosSet(CTask *task,I64 ipx,I64 ipy,Bool set_cursor=TRUE) x0=res->line_start_col; y0=res->top_line_num; DocRecalc(res,RECALCF_HAS_CURSOR); - res->x=(ipx-task->pix_left-task->scroll_x)/FONT_WIDTH +x0; - res->y=(ipy-task->pix_top -task->scroll_y)/FONT_HEIGHT+y0; + res->x=(msx-task->pix_left-task->scroll_x)/FONT_WIDTH +x0; + res->y=(msy-task->pix_top -task->scroll_y)/FONT_HEIGHT+y0; DocRecalc(res,RECALCt_FIND_CURSOR); task->scroll_x=0; task->scroll_y=0; @@ -336,8 +336,8 @@ Bool WinKeyNavMenu() if (Bt(kbd.down_bitmap,SC_GUI) && focus && (m=focus->cur_menu)) { winmgr.show_menu=TRUE; sys_cur_submenu_entry=NULL; - old_pos.x=ip.pos.x; old_pos.y=ip.pos.y; - ip.pos.x=new_pos.x=ip.pos.y=new_pos.y=0; + old_pos.x=ms.pos.x; old_pos.y=ms.pos.y; + ms.pos.x=new_pos.x=ms.pos.y=new_pos.y=0; while (Bt(kbd.down_bitmap,SC_GUI)) { old_key_cnt=kbd.cnt; if (Bt(kbd.down_bitmap,SC_CURSOR_LEFT)) { @@ -382,16 +382,16 @@ Bool WinKeyNavMenu() } new_pos.x=ClampI64(new_pos.x,0,GR_WIDTH-1); new_pos.y=ClampI64(new_pos.y,0,GR_HEIGHT-1); - ip.pos.x=new_pos.x; ip.pos.y=new_pos.y; + ms.pos.x=new_pos.x; ms.pos.y=new_pos.y; WinMgrSleep(TRUE); if (!sys_cur_submenu_entry) - ip.pos.y=new_pos.y=0; + ms.pos.y=new_pos.y=0; } if (sys_cur_submenu_entry) TaskMsg(sys_focus_task,0,sys_cur_submenu_entry->msg_code, - sys_cur_submenu_entry->a1,sys_cur_submenu_entry->a2,0); + sys_cur_submenu_entry->arg1,sys_cur_submenu_entry->arg2,0); winmgr.show_menu=FALSE; - ip.pos.x=old_pos.x; ip.pos.y=old_pos.y; + ms.pos.x=old_pos.x; ms.pos.y=old_pos.y; return TRUE; } return FALSE; @@ -403,7 +403,7 @@ U0 WinMgrTask(I64) CDoc *doc; CDocEntry *doc_e; I64 x,y,z,msg_code, - my_ip_z=0,left,top, + my_ms_z=0,left,top, old_flags=GetRFlags; Bool has_border; CCtrl *c; @@ -445,7 +445,7 @@ wmt_start: SetRFlags(old_flags); goto wmt_start; } - if (WinInside(ip.pos.x,ip.pos.y,task,FONT_WIDTH)) { + if (WinInside(ms.pos.x,ms.pos.y,task,FONT_WIDTH)) { SetRFlags(old_flags); break; } @@ -468,19 +468,19 @@ wmt_start: !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_MENU)) { if (WinKeyNavMenu) goto wmt_start; - if (task==Fs && 0<=ip.pos.ymsg_code, - sys_cur_submenu_entry->a1, - sys_cur_submenu_entry->a2,0); + sys_cur_submenu_entry->arg1, + sys_cur_submenu_entry->arg2,0); winmgr.show_menu=FALSE; - old_ip.lb=FALSE; + old_ms.lb=FALSE; goto wmt_start; } } @@ -494,20 +494,20 @@ wmt_start: winmgr.grab_scroll_closed=FALSE; winmgr.grab_scroll=TRUE; while (kbd.scan_code&SCF_CTRL && TaskValidate(task) && (!ac.task || - !WinInside(ip.pos.x,ip.pos.y,ac.task,FONT_WIDTH))) { - if (ip.lb) { + !WinInside(ms.pos.x,ms.pos.y,ac.task,FONT_WIDTH))) { + if (ms.lb) { winmgr.grab_scroll_closed=TRUE; - x=ip.pos.x-task->scroll_x; - y=ip.pos.y-task->scroll_y; - z=ip.pos.z-task->scroll_z; - while (ip.lb && kbd.scan_code&SCF_CTRL && TaskValidate(task)) { - task->scroll_x=(ip.pos.x-x)&~7; - task->scroll_y=(ip.pos.y-y)&~7; - task->scroll_z=ip.pos.z-z; + x=ms.pos.x-task->scroll_x; + y=ms.pos.y-task->scroll_y; + z=ms.pos.z-task->scroll_z; + while (ms.lb && kbd.scan_code&SCF_CTRL && TaskValidate(task)) { + task->scroll_x=(ms.pos.x-x)&~7; + task->scroll_y=(ms.pos.y-y)&~7; + task->scroll_z=ms.pos.z-z; WinMgrSleep(TRUE); } winmgr.grab_scroll_closed=FALSE; - } else if (ip.rb) { + } else if (ms.rb) { task->scroll_x=0; task->scroll_y=0; task->scroll_z=0; @@ -523,40 +523,40 @@ wmt_start: if (!Bt(&task->win_inhibit,WIf_SELF_CTRLS) && (!TaskValidate(sys_focus_task)|| !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_CTRLS))) { - if (ip.lb && !old_ip.lb) { + if (ms.lb && !old_ms.lb) { c=task->next_ctrl; while (c!=&task->next_ctrl) { - if (CtrlInside(c,ip.pos.x,ip.pos.y)) { + if (CtrlInside(c,ms.pos.x,ms.pos.y)) { left=task->pix_left; top =task->pix_top; if (c->flags&CTRLF_BORDER) { left-=FONT_WIDTH; top -=FONT_HEIGHT; } - if (c->flags&CTRLF_CAPTURE_LEFT_IP) { - while (ip.lb && TaskValidate(task)) { + if (c->flags&CTRLF_CAPTURE_LEFT_MS) { + while (ms.lb && TaskValidate(task)) { if (c->left_click) - (*c->left_click)(c,ip.pos.x-left,ip.pos.y-top,TRUE); + (*c->left_click)(c,ms.pos.x-left,ms.pos.y-top,TRUE); WinMgrSleep; } if (c->left_click) - (*c->left_click)(c,ip.pos.x-left,ip.pos.y-top,FALSE); - old_ip.lb=FALSE; + (*c->left_click)(c,ms.pos.x-left,ms.pos.y-top,FALSE); + old_ms.lb=FALSE; goto wmt_start; } else { if (c->left_click) - (*c->left_click)(c,ip.pos.x-left,ip.pos.y-top,TRUE); - old_ip.lb=TRUE; + (*c->left_click)(c,ms.pos.x-left,ms.pos.y-top,TRUE); + old_ms.lb=TRUE; goto wmt_start; } } c=c->next; } } - if (old_ip.lb && !ip.lb) { + if (old_ms.lb && !ms.lb) { c=task->next_ctrl; while (c!=&task->next_ctrl) { - if (CtrlInside(c,ip.pos.x,ip.pos.y)) { + if (CtrlInside(c,ms.pos.x,ms.pos.y)) { left=task->pix_left; top =task->pix_top; if (c->flags&CTRLF_BORDER) { @@ -564,47 +564,47 @@ wmt_start: top -=FONT_HEIGHT; } if (c->left_click) - (*c->left_click)(c,ip.pos.x-left,ip.pos.y-top,FALSE); - old_ip.lb=FALSE; + (*c->left_click)(c,ms.pos.x-left,ms.pos.y-top,FALSE); + old_ms.lb=FALSE; goto wmt_start; } c=c->next; } } - if (ip.rb && !old_ip.rb) { + if (ms.rb && !old_ms.rb) { c=task->next_ctrl; while (c!=&task->next_ctrl) { - if (CtrlInside(c,ip.pos.x,ip.pos.y)) { + if (CtrlInside(c,ms.pos.x,ms.pos.y)) { left=task->pix_left; top =task->pix_top; if (c->flags&CTRLF_BORDER) { left-=FONT_WIDTH; top -=FONT_HEIGHT; } - if (c->flags&CTRLF_CAPTURE_RIGHT_IP) { - while (ip.rb && TaskValidate(task)) { + if (c->flags&CTRLF_CAPTURE_RIGHT_MS) { + while (ms.rb && TaskValidate(task)) { if (c->right_click) - (*c->right_click)(c,ip.pos.x-left,ip.pos.y-top,TRUE); + (*c->right_click)(c,ms.pos.x-left,ms.pos.y-top,TRUE); WinMgrSleep; } if (c->right_click) - (*c->right_click)(c,ip.pos.x-left,ip.pos.y-top,FALSE); - old_ip.rb=FALSE; + (*c->right_click)(c,ms.pos.x-left,ms.pos.y-top,FALSE); + old_ms.rb=FALSE; goto wmt_start; } else { if (c->right_click) - (*c->right_click)(c,ip.pos.x-left,ip.pos.y-top,TRUE); - old_ip.rb=TRUE; + (*c->right_click)(c,ms.pos.x-left,ms.pos.y-top,TRUE); + old_ms.rb=TRUE; goto wmt_start; } } c=c->next; } } - if (old_ip.rb && !ip.rb) { + if (old_ms.rb && !ms.rb) { c=task->next_ctrl; while (c!=&task->next_ctrl) { - if (CtrlInside(c,ip.pos.x,ip.pos.y)) { + if (CtrlInside(c,ms.pos.x,ms.pos.y)) { left=task->pix_left; top =task->pix_top; if (c->flags&CTRLF_BORDER) { @@ -612,38 +612,38 @@ wmt_start: top -=FONT_HEIGHT; } if (c->right_click) - (*c->right_click)(c,ip.pos.x-left,ip.pos.y-top,FALSE); - old_ip.rb=FALSE; + (*c->right_click)(c,ms.pos.x-left,ms.pos.y-top,FALSE); + old_ms.rb=FALSE; goto wmt_start; } c=c->next; } } - if (ip.has_wheel && my_ip_z!=ip.pos.z) { + if (ms.has_wheel && my_ms_z!=ms.pos.z) { if (task==sys_focus_task) { c=task->next_ctrl; while (c!=&task->next_ctrl) { if (c->wheel_chg) { - (*c->wheel_chg)(c,ip.pos.z-my_ip_z); - my_ip_z=ip.pos.z; + (*c->wheel_chg)(c,ms.pos.z-my_ms_z); + my_ms_z=ms.pos.z; goto wmt_start; } c=c->next; } - my_ip_z=ip.pos.z; + my_ms_z=ms.pos.z; } else if (!sys_focus_task) - my_ip_z=ip.pos.z; + my_ms_z=ms.pos.z; } } if (task==Fs) goto wmt_start; - if (!Bt(&task->win_inhibit,WIf_SELF_IP_L)&& + if (!Bt(&task->win_inhibit,WIf_SELF_MS_L)&& (!TaskValidate(sys_focus_task)|| - !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_IP_L))) { - if (!old_ip.lb && ip.lb) { - if (doc=WinCursorPosSet(task,ip.pos.x,ip.pos.y)) { + !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_MS_L))) { + if (!old_ms.lb && ms.lb) { + if (doc=WinCursorPosSet(task,ms.pos.x,ms.pos.y)) { DocLock(doc); if (doc->doc_signature==DOC_SIGNATURE_VAL) { doc_e=doc->cur_entry; @@ -653,17 +653,17 @@ wmt_start: } } DocUnlock(doc); - old_ip.lb=TRUE; + old_ms.lb=TRUE; goto wmt_start; } } } - if (!Bt(&task->win_inhibit,WIf_SELF_IP_R)&& + if (!Bt(&task->win_inhibit,WIf_SELF_MS_R)&& (!TaskValidate(sys_focus_task)|| - !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_IP_R))) { - if (!old_ip.rb && ip.rb) { - if (WinCursorPosSet(task,ip.pos.x,ip.pos.y)) { - old_ip.rb=TRUE; + !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_MS_R))) { + if (!old_ms.rb && ms.rb) { + if (WinCursorPosSet(task,ms.pos.x,ms.pos.y)) { + old_ms.rb=TRUE; goto wmt_start; } } @@ -671,32 +671,32 @@ wmt_start: if (!Bt(&task->win_inhibit,WIf_SELF_BORDER) && has_border && (!TaskValidate(sys_focus_task)|| !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_BORDER))) { - if (old_ip.lb && !ip.lb) { - if (ip.pos_text.y==task->win_top-1) { - if (task->win_left<=ip.pos_text.xwin_left+4) { + if (old_ms.lb && !ms.lb) { + if (ms.pos_text.y==task->win_top-1) { + if (task->win_left<=ms.pos_text.xwin_left+4) { TaskMsg(task,0,MSG_KEY_DOWN,CH_CTRLM,0x43200000432,0); - old_ip.lb=FALSE; + old_ms.lb=FALSE; goto wmt_start; - } else if (task->win_right-2<=ip.pos_text.x<=task->win_right) { + } else if (task->win_right-2<=ms.pos_text.x<=task->win_right) { if (DocPut(task)) TaskMsg(task,0,MSG_KEY_DOWN,CH_SHIFT_ESC,0,0); else Kill(task,FALSE); - old_ip.lb=FALSE; + old_ms.lb=FALSE; goto wmt_start; } } } } - if (!Bt(&task->win_inhibit,WIf_SELF_IP_L)&& + if (!Bt(&task->win_inhibit,WIf_SELF_MS_L)&& (!TaskValidate(sys_focus_task)|| - !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_IP_L))) { - if (old_ip.lb && !ip.lb) { - if (doc=WinCursorPosSet(task,ip.pos.x,ip.pos.y,FALSE)) { + !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_MS_L))) { + if (old_ms.lb && !ms.lb) { + if (doc=WinCursorPosSet(task,ms.pos.x,ms.pos.y,FALSE)) { do msg_code=WinMgrSleep; - while (TaskValidate(task) && (ip.lb || ip.left_dbl_time)); + while (TaskValidate(task) && (ms.lb || ms.left_dbl_time)); if (TaskValidate(task)) { - if (msg_code==MSG_IP_L_UP) { + if (msg_code==MSG_MS_L_UP) { if (doc->doc_signature==DOC_SIGNATURE_VAL) { DocLock(doc); if (TaskValidate(task)) { @@ -714,24 +714,24 @@ wmt_start: DocUnlock(doc); } } - } else if (msg_code==MSG_IP_L_D_UP) + } else if (msg_code==MSG_MS_L_D_UP) TaskMsg(task,0,MSG_KEY_DOWN,CH_ESC,0,0); } - old_ip.lb=FALSE; + old_ms.lb=FALSE; goto wmt_start; } } } - if (!Bt(&task->win_inhibit,WIf_SELF_IP_R)&& + if (!Bt(&task->win_inhibit,WIf_SELF_MS_R)&& (!TaskValidate(sys_focus_task)|| - !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_IP_R))) { - if (old_ip.rb && !ip.rb) { - if (doc=WinCursorPosSet(task,ip.pos.x,ip.pos.y,FALSE)) { + !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_MS_R))) { + if (old_ms.rb && !ms.rb) { + if (doc=WinCursorPosSet(task,ms.pos.x,ms.pos.y,FALSE)) { do msg_code=WinMgrSleep; - while (TaskValidate(task) && (ip.rb || ip.right_dbl_time)); + while (TaskValidate(task) && (ms.rb || ms.right_dbl_time)); if (TaskValidate(task)) { - if (msg_code==MSG_IP_R_UP) { + if (msg_code==MSG_MS_R_UP) { if (doc->doc_signature==DOC_SIGNATURE_VAL) { DocLock(doc); if (TaskValidate(task)) { @@ -746,10 +746,10 @@ wmt_start: DocUnlock(doc); } } - } else if (msg_code==MSG_IP_R_D_UP) + } else if (msg_code==MSG_MS_R_D_UP) TaskMsg(task,0,MSG_KEY_DOWN,CH_SHIFT_ESC,0,0); } - old_ip.rb=FALSE; + old_ms.rb=FALSE; goto wmt_start; } } @@ -758,79 +758,79 @@ wmt_start: if (!Bt(&task->win_inhibit,WIf_SELF_BORDER) && has_border && (!TaskValidate(sys_focus_task)|| !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_BORDER))) { - if (ip.lb && !old_ip.lb) { - if (task->win_top==ip.pos_text.y+1 && - task->win_left-1<=ip.pos_text.x<=task->win_right+1) { - if (task->win_left<=ip.pos_text.xwin_left+4) { - old_ip.lb=TRUE; + if (ms.lb && !old_ms.lb) { + if (task->win_top==ms.pos_text.y+1 && + task->win_left-1<=ms.pos_text.x<=task->win_right+1) { + if (task->win_left<=ms.pos_text.xwin_left+4) { + old_ms.lb=TRUE; goto wmt_start; } - if (task->win_right-2<=ip.pos_text.x<=task->win_right) { - old_ip.lb=TRUE; + if (task->win_right-2<=ms.pos_text.x<=task->win_right) { + old_ms.lb=TRUE; goto wmt_start; } - x=ip.pos_text.x-task->win_left; - if (ip.lb) { + x=ms.pos_text.x-task->win_left; + if (ms.lb) { WinToTop(task); - while (ip.lb && TaskValidate(task)) { - WinHorz(ip.pos_text.x-x,task->win_width-1+ip.pos_text.x-x,task); - WinVert(ip.pos_text.y+1,task->win_height+ip.pos_text.y,task); + while (ms.lb && TaskValidate(task)) { + WinHorz(ms.pos_text.x-x,task->win_width-1+ms.pos_text.x-x,task); + WinVert(ms.pos_text.y+1,task->win_height+ms.pos_text.y,task); WinMgrSleep; } } - old_ip.lb=FALSE; + old_ms.lb=FALSE; goto wmt_start; } - if (task->win_left==ip.pos_text.x+1 && - task->win_top-1<=ip.pos_text.y<=task->win_bottom+1) { - y=ip.pos_text.y-task->win_top; - if (ip.lb) { + if (task->win_left==ms.pos_text.x+1 && + task->win_top-1<=ms.pos_text.y<=task->win_bottom+1) { + y=ms.pos_text.y-task->win_top; + if (ms.lb) { WinToTop(task); - while (ip.lb && TaskValidate(task)) { - WinHorz(ip.pos_text.x+1,task->win_width+ip.pos_text.x,task); - WinVert(ip.pos_text.y-y, - task->win_height-1+ip.pos_text.y-y,task); + while (ms.lb && TaskValidate(task)) { + WinHorz(ms.pos_text.x+1,task->win_width+ms.pos_text.x,task); + WinVert(ms.pos_text.y-y, + task->win_height-1+ms.pos_text.y-y,task); WinMgrSleep; } } - old_ip.lb=FALSE; + old_ms.lb=FALSE; goto wmt_start; } - if (task->win_right+1==ip.pos_text.x && - task->win_bottom+1==ip.pos_text.y) { - if (ip.lb) { + if (task->win_right+1==ms.pos_text.x && + task->win_bottom+1==ms.pos_text.y) { + if (ms.lb) { WinToTop(task); - while (ip.lb && TaskValidate(task)) { - WinHorz(task->win_left,ip.pos_text.x-1,task); - WinVert(task->win_top,ip.pos_text.y-1,task); + while (ms.lb && TaskValidate(task)) { + WinHorz(task->win_left,ms.pos_text.x-1,task); + WinVert(task->win_top,ms.pos_text.y-1,task); WinMgrSleep; } } - old_ip.lb=FALSE; + old_ms.lb=FALSE; goto wmt_start; } - if (task->win_bottom==ip.pos_text.y-1 && - task->win_left<=ip.pos_text.x<=task->win_right) { - if (ip.lb) { + if (task->win_bottom==ms.pos_text.y-1 && + task->win_left<=ms.pos_text.x<=task->win_right) { + if (ms.lb) { WinToTop(task); - while (ip.lb && TaskValidate(task)) { - WinVert(task->win_top,ip.pos_text.y-1,task); + while (ms.lb && TaskValidate(task)) { + WinVert(task->win_top,ms.pos_text.y-1,task); WinMgrSleep; } } - old_ip.lb=FALSE; + old_ms.lb=FALSE; goto wmt_start; } - if (task->win_right==ip.pos_text.x-1 && - task->win_top<=ip.pos_text.y<=task->win_bottom) { - if (ip.lb) { + if (task->win_right==ms.pos_text.x-1 && + task->win_top<=ms.pos_text.y<=task->win_bottom) { + if (ms.lb) { WinToTop(task); - while (ip.lb && TaskValidate(task)) { - WinHorz(task->win_left,ip.pos_text.x-1,task); + while (ms.lb && TaskValidate(task)) { + WinHorz(task->win_left,ms.pos_text.x-1,task); WinMgrSleep; } } - old_ip.lb=FALSE; + old_ms.lb=FALSE; goto wmt_start; } } diff --git a/Apps/AfterEgypt/AESplash.DD b/Apps/AfterEgypt/AESplash.DD deleted file mode 100644 index bbf20cf..0000000 Binary files a/Apps/AfterEgypt/AESplash.DD and /dev/null differ diff --git a/Apps/AfterEgypt/AfterEgypt.HC b/Apps/AfterEgypt/AfterEgypt.HC deleted file mode 100644 index 1ea640a..0000000 --- a/Apps/AfterEgypt/AfterEgypt.HC +++ /dev/null @@ -1,194 +0,0 @@ -I64 num_people=100; - -U0 SongTask(I64) -{//Song by the Holy Spirit - Fs->task_end_cb=&SndTaskEndCB; - MusicSettingsRst; - while (TRUE) { - Play("3eGFqGetBEFeBEEFetBDCeCFqF"); - Play("eGFqGetBEFeBEEFetBDCeCFqF"); - Play("AetDAAqBDeBEqEetECDGBG"); - Play("qAetDAAqBDeBEqEetECDGBG"); - } -} - -U0 HoldCourt() -{ - I64 accused,crime,victim; - Bool old_form=LBts(&(DocPut)->flags,DOCf_FORM); - - DocDblBufStart; - '\n'; - accused=RandU32%3; - "%s",LstSub(accused, - "A man \0A woman \0A child \0"); - - crime=RandU32&3; - "%s",LstSub(crime, - "commits murder\0commits adultery\0" - "commits blasphemy\0commits idolatry\0"); - - if (crime<=1) { - '' CH_SPACE; - victim=RandU32%3; - "%s",LstSub(victim,"to a man\0to a woman\0to a child\0to an animal\0"); - } - if (!(RandU32%5)) - ", again!"; - else - '.'; - "\n\n\n\n" - "$$LM,4$$" - "\n\n$$BT,\"Show Mercy\",LE=0$$\n\n" - "\n\n$$BT,\"Punish\",LE=1$$\n\n" - "\n\n$$BT,\"Really Punish\",LE=2$$\n\n" - "$$LM,0$$"; - DocDblBufEnd; - DocMenu(DocPut); - - LBEqu(&(DocPut)->flags,DOCf_FORM,old_form); - DocBottom; -} - -#define T_BREAK_CAMP 0 -#define T_TALK_WITH_GOD 1 -#define T_VIEW_CLOUDS 2 -#define T_HOLD_COURT 3 -#define T_VIEW_MAP 4 -#define T_WATER_ROCK 5 -#define T_BATTLE 6 -#define T_QUAIL 7 -#define T_MOSES_COMICS 8 -#define T_HELP 9 -#define T_QUIT 10 - -Bool TakeTurn() -{ - I64 i; - Bool res,old_form=LBts(&(DocPut)->flags,DOCf_FORM); - num_people*=1.0+0.01*((RandU16%100)-30); - if (num_people>MAX_PEOPLE) - num_people=MAX_PEOPLE; - - if (!Fs->song_task) - Fs->song_task=Spawn(&SongTask,NULL,"Song",,Fs); - Camp(num_people); - Kill(Fs->song_task); - - DocDblBufStart; - "$$LM,4$$" - "\n\n$$BT,\"Break Camp\",LE=T_BREAK_CAMP$$\n\n" - "\n\n$$BT,\"Talk with God\",LE=T_TALK_WITH_GOD$$\n\n" - "\n\n$$BT,\"View Clouds\",LE=T_VIEW_CLOUDS$$\n\n" - "\n\n$$BT,\"Hold Court\",LE=T_HOLD_COURT$$\n\n" - "\n\n$$BT,\"View Map\",LE=T_VIEW_MAP$$\n\n" - "\n\n$$BT,\"Make Water\",LE=T_WATER_ROCK$$\n\n" - "\n\n$$BT,\"Battle\",LE=T_BATTLE$$\n\n" - "\n\n$$BT,\"Beg for Meat\",LE=T_QUAIL$$\n\n" - "\n\n$$BT,\"Moses Comics\",LE=T_MOSES_COMICS$$\n\n" - "\n\n$$BT,\"Help\",LE=T_HELP$$\n\n" - "\n\n$$BT,\"Quit\",LE=T_QUIT$$\n\n" - "$$LM,0$$"; - DocDblBufEnd; - i=DocMenu(DocPut,DOF_DONT_TEXT_ATTR); - - LBEqu(&(DocPut)->flags,DOCf_FORM,old_form); - DocBottom; - - if (!(0<=isong_task=NULL; - return res; -} - -U0 TMsg(CDC *dc,U8 *msg) -{ - F64 t0=tS; - while (tS-t0<1.5) { - if (Blink(5)) - dc->color=BLACK; - else - dc->color=RED; - GrRect(dc,0,GR_HEIGHT-FONT_HEIGHT*3,GR_WIDTH,FONT_HEIGHT*2); - dc->color=BLACK; - GrRect(dc,2,GR_HEIGHT-FONT_HEIGHT*3+2,GR_WIDTH-4,FONT_HEIGHT*2-4); - dc->color=YELLOW; - GrPrint(dc,(GR_WIDTH-StrLen(msg)*FONT_WIDTH)/2, - GR_HEIGHT-5*FONT_HEIGHT/2,"%s",msg); - Refresh; - if (ScanChar) - throw; - } -} - -U0 Trailer() -{ - CDC *dc=DCAlias; - WinBorder; - WinMax; - Cd(Fs->parent_task->cur_dir); - Type("AESplash.DD"); - Sleep(500); - try { - TMsg(dc,"Leaving all behind, they fled."); - TMsg(dc,"Found themselves in a desert."); - TMsg(dc,"God! We're gonna die!"); - TMsg(dc,"\"Trust Me!\""); - } catch - Fs->catch_except=TRUE; - DCFill; - DCDel(dc); -} - -U0 AfterEgypt() -{ - SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ - Fs->song_task=Spawn(&SongTask,NULL,"Song",,Fs); - AutoComplete; - WinBorder; - WinMax; - DocClear; - PopUp("Trailer;",Fs); - try //Catch . - while (TakeTurn); - catch - PutExcept; - DocClear; - SettingsPop; -} diff --git a/Apps/AfterEgypt/Battle.HC b/Apps/AfterEgypt/Battle.HC deleted file mode 100644 index 2267a4a..0000000 Binary files a/Apps/AfterEgypt/Battle.HC and /dev/null differ diff --git a/Apps/AfterEgypt/Comics.HC b/Apps/AfterEgypt/Comics.HC deleted file mode 100644 index 9c53398..0000000 --- a/Apps/AfterEgypt/Comics.HC +++ /dev/null @@ -1,26 +0,0 @@ -U0 ViewComics() -{ - I64 i=0; - U8 *st; - CDirEntry *tmpde=FilesFind("Comics/*.DD*"),*tmpde1=tmpde; - CDoc *doc=DocNew; - DocPrint(doc,"$$LTBLUE$$"); - while (tmpde) { - st=StrNew(tmpde->name); - FileExtRem(st); - tmpde->user_data=DocPrint(doc,"$$MU-UL,\"%-10ts\",LE=%d$$ ",st,tmpde); - Free(st); - tmpde=tmpde->next; - if ((i++&3)==3) - DocPrint(doc,"\n"); - } - while (TRUE) { - if ((tmpde=PopUpMenu(doc))>0) - Ed(tmpde->full_name); - else - break; - } - DocDel(doc); - DirTreeDel(tmpde1); -} - diff --git a/Apps/AfterEgypt/Comics/Moses01.DD b/Apps/AfterEgypt/Comics/Moses01.DD deleted file mode 100644 index e4aeeb4..0000000 Binary files a/Apps/AfterEgypt/Comics/Moses01.DD and /dev/null differ diff --git a/Apps/AfterEgypt/Comics/Moses02.DD b/Apps/AfterEgypt/Comics/Moses02.DD deleted file mode 100644 index a0f0a21..0000000 Binary files a/Apps/AfterEgypt/Comics/Moses02.DD and /dev/null differ diff --git a/Apps/AfterEgypt/Comics/Moses04.DD b/Apps/AfterEgypt/Comics/Moses04.DD deleted file mode 100644 index bfdeef7..0000000 Binary files a/Apps/AfterEgypt/Comics/Moses04.DD and /dev/null differ diff --git a/Apps/AfterEgypt/Comics/Moses05.DD b/Apps/AfterEgypt/Comics/Moses05.DD deleted file mode 100644 index 830ae89..0000000 Binary files a/Apps/AfterEgypt/Comics/Moses05.DD and /dev/null differ diff --git a/Apps/AfterEgypt/Comics/Moses06.DD b/Apps/AfterEgypt/Comics/Moses06.DD deleted file mode 100644 index ca78d30..0000000 Binary files a/Apps/AfterEgypt/Comics/Moses06.DD and /dev/null differ diff --git a/Apps/AfterEgypt/Comics/Moses07.DD b/Apps/AfterEgypt/Comics/Moses07.DD deleted file mode 100644 index 9514a60..0000000 Binary files a/Apps/AfterEgypt/Comics/Moses07.DD and /dev/null differ diff --git a/Apps/AfterEgypt/Comics/Moses08.DD b/Apps/AfterEgypt/Comics/Moses08.DD deleted file mode 100644 index 7bdb830..0000000 Binary files a/Apps/AfterEgypt/Comics/Moses08.DD and /dev/null differ diff --git a/Apps/AfterEgypt/GodTalking.HC b/Apps/AfterEgypt/GodTalking.HC deleted file mode 100644 index 4775360..0000000 Binary files a/Apps/AfterEgypt/GodTalking.HC and /dev/null differ diff --git a/Apps/AfterEgypt/HorebA.HC b/Apps/AfterEgypt/HorebA.HC deleted file mode 100644 index 7c2a212..0000000 Binary files a/Apps/AfterEgypt/HorebA.HC and /dev/null differ diff --git a/Apps/AfterEgypt/HorebBMP.HC b/Apps/AfterEgypt/HorebBMP.HC deleted file mode 100644 index 43586cf..0000000 --- a/Apps/AfterEgypt/HorebBMP.HC +++ /dev/null @@ -1,97 +0,0 @@ -I64 type_weights[OT_NUM_TYPES]={0,30,30,15,30,30,1,1,1}; - -I64 mp_not_done_flags; -U0 MPDrawHoreb(CDC *dc2) -{ - CTask *task=dc2->win_task; - CDC *dc=DCAlias(dc2,task); - I64 i,j,dx,dy,dz,w=task->pix_width,h=task->pix_height,r[16],cx=w>>1; - F64 s,m,a,x1,y1,x2,y2; - Obj *tmpo; - - Mat4x4IdentEqu(r); - Mat4x4RotY(r,-é); - Mat4x4RotX(r,77*ã/180); - for (i=Gs->num;ix1=tmpo->x+vx; tmpo->y1=tmpo->y; tmpo->z1=tmpo->z+vz; - Mat4x4MulXYZ(r,&tmpo->x1,&tmpo->y1,&tmpo->z1); - if (tmpo->type==OT_SHEEP || - tmpo->type==OT_GOAT1 || tmpo->type==OT_GOAT2) { - dx=100*tmpo->dx; dy=100*tmpo->dy; dz=100*tmpo->dz; - Mat4x4MulXYZ(r,&dx,&dy,&dz); - if (dx<0) - tmpo->sym=TRUE; - else - tmpo->sym=FALSE; - } - if (tmpo->z1>=0) { - s=100.0/(AbsI64(tmpo->z1)+50); - if (tmpo->type) { - Mat4x4IdentEqu(dc->r); - Mat4x4Scale(dc->r,s*2); - DCMat4x4Set(dc,dc->r); - dc->flags|=DCF_TRANSFORMATION; - if (tmpo->sym) { - dc->flags|=DCF_SYMMETRY|DCF_JUST_MIRROR; - DCSymmetrySet(dc,s*tmpo->x1+cx,s*tmpo->y1+h, - s*tmpo->x1+cx,s*tmpo->y1+h+10); - } - Sprite3B(dc,s*tmpo->x1+cx,s*tmpo->y1+h,tmpo->z1,imgs[tmpo->type]); - } else { - dc->flags&=~DCF_TRANSFORMATION; - dc->color=pebble_colors[tmpo->num&3]; - GrPlot3(dc,s*tmpo->x1+cx,s*tmpo->y1+h,tmpo->z1); - } - dc->flags&=~(DCF_SYMMETRY|DCF_JUST_MIRROR); - if (tmpo==&objs[O_BURNING_BUSH]) {//draw burning bush - dc->x=s*tmpo->x1+cx; - dc->y=s*tmpo->y1+h; - dc->z=tmpo->z1; - dc->pen_width=1; - dc->color=winmgr.updates&15; - for (j=0;j<45;j++) { - m=Sqr(Rand); a=2*ã*Rand; - P2R(&x1,&y1,m,a); - m=Sqr(Rand); a=2*ã*Rand; - P2R(&x2,&y2,m,a); - GrLine3(dc,20*x1,20*y1-25,0,20*x2,20*y2-25,0); - } - if (SqrI64(s*tmpo->x1)+SqrI64(s*tmpo->y1)<300*300) - horeb_done=TRUE; - } - } - } - dc->depth_buf=NULL; - DCDel(dc); - LBtr(&mp_not_done_flags,Gs->num); -} - -U0 DrawHoreb(CTask *task,CDC *dc) -{ - I64 i,x,y,z,w=task->pix_width,h=task->pix_height,r[16],cx=w>>1,cy=h>>1; - F64 s; - Mat4x4IdentEqu(r); - Mat4x4RotY(r,-é); - Mat4x4RotX(r,77*ã/180); -//Sun - x=vx; y=0; z=1000000+vz; - Mat4x4MulXYZ(r,&x,&y,&z); - s=100.0/(AbsI64(z)+50); - if (y<0) { - dc->color=BROWN; - GrCircle(dc,s*x+cx,15,15); - dc->color=YELLOW; - GrFloodFill(dc,s*x+cx,15); - } - DCDepthBufAlloc(dc); - mp_not_done_flags=1<color=LTRED; - GrPrint(dc,cx-21*FONT_WIDTH/2,cy-FONT_HEIGHT/2,"Find the Burning Bush."); - } -} diff --git a/Apps/AfterEgypt/HorebBSP.HC b/Apps/AfterEgypt/HorebBSP.HC deleted file mode 100644 index 4fcf136..0000000 --- a/Apps/AfterEgypt/HorebBSP.HC +++ /dev/null @@ -1,94 +0,0 @@ -I64 type_weights[OT_NUM_TYPES]={0,30,30,15,30,3,1,1,1}; - -I64 ObjCompare(Obj *o1,Obj *o2) -{ - return o2->z1-o1->z1; -} - -U0 DrawHoreb(CTask *task,CDC *dc) -{ - I64 i,j,x,y,z,dx,dy,dz, - w=task->pix_width, - h=task->pix_height,r[16], - cx=w>>1,cy=h>>1; - F64 s,m,a,x1,y1,x2,y2; - Obj *o_sort[O_NUM_OBJS+O_NUM_PEBBLES],*tmpo; - - Mat4x4IdentEqu(r); - Mat4x4RotY(r,-é); - Mat4x4RotX(r,77*ã/180); - - //Sun - x=vx; y=0; z=1000000+vz; - Mat4x4MulXYZ(r,&x,&y,&z); - s=100.0/(AbsI64(z)+50); - if (y<0) { - dc->color=BROWN; - GrCircle(dc,s*x+cx,15,15); - dc->color=YELLOW; - GrFloodFill(dc,s*x+cx,15); - } - - for (i=0;ix1=tmpo->x+vx; tmpo->y1=tmpo->y; tmpo->z1=tmpo->z+vz; - Mat4x4MulXYZ(r,&tmpo->x1,&tmpo->y1,&tmpo->z1); - if (tmpo->type==OT_SHEEP || - tmpo->type==OT_GOAT1 || tmpo->type==OT_GOAT2) { - dx=100*tmpo->dx; dy=100*tmpo->dy; dz=100*tmpo->dz; - Mat4x4MulXYZ(r,&dx,&dy,&dz); - if (dx<0) - tmpo->sym=TRUE; - else - tmpo->sym=FALSE; - } - } - QSortI64(o_sort,O_NUM_OBJS+O_NUM_PEBBLES,&ObjCompare); - - for (i=0;iz1<0) break; - s=100.0/(AbsI64(tmpo->z1)+50); - if (tmpo->type) { - Mat4x4IdentEqu(dc->r); - Mat4x4Scale(dc->r,s*2); - DCMat4x4Set(dc,dc->r); - dc->flags|=DCF_TRANSFORMATION; - if (tmpo->sym) { - dc->flags|=DCF_SYMMETRY|DCF_JUST_MIRROR; - DCSymmetrySet(dc,s*tmpo->x1+cx,s*tmpo->y1+h, - s*tmpo->x1+cx,s*tmpo->y1+h+10); - } - Sprite3B(dc,s*tmpo->x1+cx,s*tmpo->y1+h,0,imgs[tmpo->type]); - } else { - dc->flags&=~DCF_TRANSFORMATION; - dc->color=pebble_colors[tmpo->num&3]; - GrPlot3(dc,s*tmpo->x1+cx,s*tmpo->y1+h,tmpo->z1); - } - dc->flags&=~(DCF_SYMMETRY|DCF_JUST_MIRROR); - if (o_sort[i]==&objs[O_BURNING_BUSH]) {//draw burning bush - dc->x=s*tmpo->x1+cx; - dc->y=s*tmpo->y1+h; - dc->z=0; - - dc->pen_width=1; - dc->color=winmgr.updates&15; - for (j=0;j<45;j++) { - m=Sqr(Rand); a=2*ã*Rand; - P2R(&x1,&y1,m,a); - m=Sqr(Rand); a=2*ã*Rand; - P2R(&x2,&y2,m,a); - GrLine3(dc,20*x1,20*y1-25,0,20*x2,20*y2-25,0); - } - - if (SqrI64(s*tmpo->x1)+SqrI64(s*tmpo->y1)<300*300) - horeb_done=TRUE; - } - } - - if (Blink) { - dc->color=LTRED; - GrPrint(dc,cx-21*FONT_WIDTH/2,cy-FONT_HEIGHT/2,"Find the Burning Bush."); - } -} diff --git a/Apps/AfterEgypt/HorebC.HC b/Apps/AfterEgypt/HorebC.HC deleted file mode 100644 index f0592dd..0000000 --- a/Apps/AfterEgypt/HorebC.HC +++ /dev/null @@ -1,144 +0,0 @@ -U0 AnimateTask(I64) -{ - I64 i; - F64 t; - Obj *tmpo; - while (TRUE) { - t=tS; - for (i=0;itype==OT_SHEEP || - tmpo->type==OT_GOAT1 || tmpo->type==OT_GOAT2) { - tmpo->x+=tmpo->dx; - tmpo->y+=tmpo->dy; - tmpo->z+=tmpo->dz; - tmpo->dx=5*Cos(0.5*t+tmpo->é); - tmpo->dz=5*Sin(0.5*t+tmpo->é); - } - } - Sleep(20); - } -} - -U0 Init() -{ - Obj *tmpo; - I64 i,j,k,total=0; - - for (i=0;inum=i; - tmpo->x=RandU32&0x1FFF-0x1000; - tmpo->y=0; - tmpo->z=RandU32&0x1FFF-0x1000; - tmpo->é=2*ã*Rand; - tmpo->sym=RandU16&1; - - if (itype=k; - } else - tmpo->type=OT_PEBBLE; - } - objs[O_BURNING_BUSH].type=OT_BUSH1; - - vx=0; vz=0; é=0; - horeb_done=FALSE; -} - -#define ANIMATE_STEPS 5 - -U0 AnimateéTask(F64 a) -{ - I64 i; - for (i=0;itext_attr=YELLOW<<4+BLUE; - Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS - -WIF_SELF_GRAB_SCROLL-WIF_FOCUS_TASK_MENU; - AutoComplete; - WinBorder; - WinMax; - DocClear; - "$$BG,LTCYAN$$%h6c",'\n'; - "$$BG,YELLOW$$%h30c",'\n'; - BibleVerse(,"Exodus,3:1",21); - Init; - Fs->animate_task=Spawn(&AnimateTask,NULL,"Animate",,Fs); - Fs->draw_it=&DrawHoreb; - while (!horeb_done) - switch (GetKey(&sc)) { - case 0: - switch (sc.u8[0]) { - case SC_CURSOR_LEFT: - Spawn(&AnimateéTask,(-ã/100)(I64),"Animate é",,Fs); - break; - case SC_CURSOR_RIGHT: - Spawn(&AnimateéTask,( ã/100)(I64),"Animate é",,Fs); - break; - case SC_CURSOR_UP: - Spawn(&AnimateVTask,(-40.0 )(I64),"Animate V",,Fs); - break; - case SC_CURSOR_DOWN: - Spawn(&AnimateVTask,( 40.0 )(I64),"Animate V",,Fs); - break; - } - break; - case '\n': - Init; - break; - case CH_SHIFT_ESC: - case CH_ESC: - goto hr_done; - } -hr_done: //Don't goto out of try - } catch - Fs->catch_except=TRUE; - DocClear; - SettingsPop(Fs,TSF_SAME_SONG); - MenuPop; -} diff --git a/Apps/AfterEgypt/Load.HC b/Apps/AfterEgypt/Load.HC deleted file mode 100644 index f0bc9cd..0000000 --- a/Apps/AfterEgypt/Load.HC +++ /dev/null @@ -1,24 +0,0 @@ -#help_index "Games" - -Cd(__DIR__);; -#include "Comics" -#include "/Demo/Graphics/Camp" -#include "/Demo/MultiCore/Clouds" -#include "/Demo/Graphics/Mountain" -#include "Map" -#include "Battle" -#include "WaterRock" -#include "Quail" -#include "HorebA" - -#if mp_cnt>=4 - #include "HorebBMP" -#else - #include "HorebBSP" -#endif - -#include "HorebC" -#include "GodTalking" -#include "AfterEgypt" - -#help_index "" diff --git a/Apps/AfterEgypt/Map.HC b/Apps/AfterEgypt/Map.HC deleted file mode 100644 index 07bc555..0000000 --- a/Apps/AfterEgypt/Map.HC +++ /dev/null @@ -1,77 +0,0 @@ -I64 x=0,y=0; - -U0 DrawMap(CTask *,CDC *dc) -{ - static I64 last_x; - static Bool last_left; - if (xlast_x) - last_left=FALSE; - dc->pen_width=1; - if (last_left) - Sprite3(dc,x,y,0,left_imgs [ToI64(6.0*tS)&3]); - else - Sprite3(dc,x,y,0,right_imgs[ToI64(6.0*tS)&3]); - last_x=x; -} - -#define AE1_MIN 0.02 -#define AE1_MAX 0.05 -#define AE2_MIN 0.15 -#define AE2_MAX 0.30 - -U0 AEMap() -{ - I64 i=0, - cx=Fs->pix_width>>1, - cy=Fs->pix_height>>1, - c_min=MinI64(cx,cy), - *r=NULL, - x1=0,y1=0,z1=0, - x_last=x1,y_last=y1; - F64 a,a1=(AE1_MAX+AE1_MIN)/2,a2=(AE2_MAX+AE2_MIN)/2,a2_total=a2, - x_scale=ToF64(cx)/c_min,y_scale=ToF64(cy)/c_min; - CDC *dc=DCAlias; - - SettingsPush(Fs,TSF_SAME_SONG); //See $LK,"SettingsPush",A="MN:SettingsPush"$ - Fs->text_attr=YELLOW<<4+BLUE; - DocClear; - "$$BG,YELLOW$$%h*c",TEXT_ROWS,'\n'; - BibleVerse(,"Exodus,16:35",3); - Fs->draw_it=&DrawMap; - try { - while (!ScanChar) { - dc->color=BLACK; - a1=Clamp(Wrap(a1+(AE1_MAX+AE1_MIN)/5.0*(Rand-0.5)),-AE1_MAX,AE1_MAX); - a=a1; - if ( 0.0<=a<=AE1_MIN) a=AE1_MIN; - if (-AE1_MIN<=a<=0.0) a=-AE1_MIN; - Free(r); - r=Mat4x4IdentNew; - Mat4x4RotZ(r,a); - Mat4x4MulXYZ(r,&x1,&y1,&z1); - - a2=Clamp(Wrap(a2+(AE2_MAX+AE2_MIN)/5.0*(Rand-0.5)),-AE2_MAX,AE2_MAX); - a=a2; - if ( 0.0<=a<=AE2_MIN) a=AE2_MIN; - if (-AE2_MIN<=a<=0.0) a=-AE2_MIN; - a2_total+=a; - - x1=ClampI64(x1+6.0*Cos(a2_total),-c_min+10,c_min-10); - y1=ClampI64(y1+6.0*Sin(a2_total),-c_min+10,c_min-10); - - x=x_scale*x1+cx; y=y_scale*y1+cy; - if (i++&1) - GrLine(dc,x_last,y_last,x,y); - x_last=x; y_last=y; - Sleep(15); - } - } catch - Fs->catch_except=TRUE; - DocClear; - SettingsPop(Fs,TSF_SAME_SONG); - Free(r); - DCFill(dc); - DCDel(dc); -} diff --git a/Apps/AfterEgypt/Quail.HC b/Apps/AfterEgypt/Quail.HC deleted file mode 100644 index 244f3a1..0000000 Binary files a/Apps/AfterEgypt/Quail.HC and /dev/null differ diff --git a/Apps/AfterEgypt/Run.HC b/Apps/AfterEgypt/Run.HC deleted file mode 100644 index 0b9d290..0000000 --- a/Apps/AfterEgypt/Run.HC +++ /dev/null @@ -1,3 +0,0 @@ -Cd(__DIR__);; -#include "Load" -AfterEgypt; diff --git a/Apps/AfterEgypt/WaterRock.HC b/Apps/AfterEgypt/WaterRock.HC deleted file mode 100644 index 39f94c1..0000000 Binary files a/Apps/AfterEgypt/WaterRock.HC and /dev/null differ diff --git a/Apps/KeepAway/KeepAway.HC b/Apps/KeepAway/KeepAway.HC index b54d3f9..c33d496 100644 --- a/Apps/KeepAway/KeepAway.HC +++ b/Apps/KeepAway/KeepAway.HC @@ -232,8 +232,8 @@ Frame imgs[LAST_STOPPED_DRIBBLING+1]={ {{$IB,"<22>",BI=22$,$IB,"<23>",BI=23$},DRIBBLE_T/NUM_STOPPED_DRIBBLING_IMGS}, }; -RegSetDftEntry("TempleOS/KeepAway","I64 best_score0=0,best_score1=9999;\n"); -RegExeBranch("TempleOS/KeepAway"); +RegDft("TempleOS/KeepAway","I64 best_score0=0,best_score1=9999;\n"); +RegExe("TempleOS/KeepAway"); F64 game_t_end,foul_t_end; I64 score0,score1; @@ -283,7 +283,7 @@ U0 DrawObj(CDC *dc,Obj *o,F64 tt) tmps=SpriteInterpolate((tt-o->last_t0)/(o->next_t0-o->last_t0), imgs[o->last_img].img[o->team], imgs[o->next_img].img[o->team]); - SpriteY3B(dc,o->x,(o->y-o->z)/2,GR_Z_ALL-o->y,tmps,o->é); + Sprite3YB(dc,o->x,(o->y-o->z)/2,GR_Z_ALL-o->y,tmps,o->é); Free(tmps); } } @@ -442,8 +442,8 @@ U0 AnimateTask(CTask *parent_task) if (score0-score1>best_score0-best_score1) { best_score0=score0; best_score1=score1; - Snd(2000);Sleep(100); Snd(0);Sleep(100); - Snd(2000);Sleep(100); Snd(0);Sleep(100); + Snd(86);Sleep(100); Snd;Sleep(100); + Snd(86);Sleep(100); Snd;Sleep(100); } } @@ -498,13 +498,13 @@ U0 AnimateTask(CTask *parent_task) score1+=6; else score1+=2; - Noise(250,1000,1000); + Noise(250,74,74); } else { if (t0shooting) { if (o==human) { - dx=(ip.pos.x-parent_task->pix_left-parent_task->scroll_x)-o->x; - dy=(ip.pos.y-parent_task->pix_top-parent_task->scroll_y)*2-o->y; + dx=(ms.pos.x-parent_task->pix_left-parent_task->scroll_x)-o->x; + dy=(ms.pos.y-parent_task->pix_top-parent_task->scroll_y)*2-o->y; } else { if (!someone_has_ball && o->nearest_man_dd>4*MAN_SQR_RADIUS && o->nearest_ball) { @@ -551,7 +551,7 @@ U0 AnimateTask(CTask *parent_task) if (o==human && t0>o->foul_t0+1.0 && dt && d/dt>FOUL_VELOCITY_THRESHOLD && objs[j].team) { - Noise(250,500,500); + Noise(250,62,62); score1+=1; foul_t_end=t0+1.0; } @@ -577,33 +577,33 @@ U0 AnimateTask(CTask *parent_task) o->x=parent_task->pix_width-COURT_BORDER-1-o->radius; o->DxDt=-COLLISION_DAMP*o->DxDt; if (o==ball) - Noise(10,1000,2000); + Noise(10,74,86); } if (o->x-o->radiusx=COURT_BORDER+o->radius; o->DxDt=-COLLISION_DAMP*o->DxDt; if (o==ball) - Noise(10,1000,2000); + Noise(10,74,86); } if (o->y+o->radius*2>=(parent_task->pix_height-COURT_BORDER)*2) { o->y=(parent_task->pix_height-COURT_BORDER)*2-1-o->radius*2; o->DyDt=-COLLISION_DAMP*o->DyDt; if (o==ball) - Noise(10,1000,2000); + Noise(10,74,86); } if (o->y-o->radius*2<2*COURT_BORDER) { o->y=COURT_BORDER*2+o->radius*2; o->DyDt=-COLLISION_DAMP*o->DyDt; if (o==ball) - Noise(10,1000,2000); + Noise(10,74,86); } if (o->z-o->radius*2<0) { o->z=o->radius*2; o->DzDt=-COLLISION_DAMP*o->DzDt; if (o->DzDt>ROLL_VELOCITY_THRESHOLD) - Noise(10,1000,2000); + Noise(10,74,86); if (o!=ball) o->DzDt=0; } else if (o->z-o->radius*2>0) @@ -647,7 +647,7 @@ U0 Init() U0 KeepAway() { - I64 msg_code,a1,a2; + I64 msg_code,arg1,arg2; PopUpOk( "Pass or hand-off to your team to score points.$$FG$$\n\n" @@ -683,19 +683,19 @@ U0 KeepAway() try { while (TRUE) { - msg_code=GetMsg(&a1,&a2, - 1<DzDt=JUMP_VELOCITY; break; case MSG_KEY_DOWN: - switch (a1) { + switch (arg1) { case '\n': Init; break; @@ -715,7 +715,7 @@ ka_done: //Don't goto out of try } catch PutExcept; SettingsPop; - RegWriteBranch("TempleOS/KeepAway","I64 best_score0=%d,best_score1=%d;\n", + RegWrite("TempleOS/KeepAway","I64 best_score0=%d,best_score1=%d;\n", best_score0,best_score1); MenuPop; } diff --git a/Apps/Logic/Logic.HC b/Apps/Logic/Logic.HC index 9b9aebe..d400140 100644 --- a/Apps/Logic/Logic.HC +++ b/Apps/Logic/Logic.HC @@ -114,7 +114,7 @@ U0 Init() "Too large\n"; else if (table_size<1) { "No table specified, aborting.\n"; - ThrowBreak; + throw; } } while (table_size>MAX_TABLE_SIZE); @@ -148,7 +148,7 @@ U0 Init() } if (!num_inputs_entered) { "No inputs specified, aborting.\n"; - ThrowBreak; + throw; } "\nEnter the hex truth table columns values of the outputs.\n"; @@ -174,7 +174,7 @@ U0 Init() if (!num_outputs_entered) { "No output specified, aborting.\n"; - ThrowBreak; + throw; } } diff --git a/Apps/Psalmody/Examples/childish.HC b/Apps/Psalmody/Examples/childish.HC index 1509e68..83938fd 100644 --- a/Apps/Psalmody/Examples/childish.HC +++ b/Apps/Psalmody/Examples/childish.HC @@ -7,18 +7,18 @@ U0 Song() music.stacatto_factor= 0.902; try { while (!ScanKey) { - Play("3qEsCDCDqCDeEGsEBEBeCBsDADA", + Play("5qEsCDCDqCDeEGsE4B5E4B5eC4B5sD4A5D4A", "Be \0like \0 \0a \0 \0child \0 \0 \0 \0" "some \0 \0re\0 \0spect.\n\0 \0 \0 \0 \0 \0"); - Play("qEsCDCDqCDeEGsEBEBeCBsDADA", + Play("5qEsCDCDqCDeEGsE4B5E4B5eC4B5sD4A5D4A", "Ma\0tur\0 \0i\0 \0ty \0 \0 \0 \0don't \0 \0" "ne\0 \0glect.\n\0 \0 \0 \0 \0 \0"); - Play("eBDqF2sG3A2G3AqAAAetDAAsDBDB"); - Play("eBDqF2sG3A2G3AqAAAetDAAsDBDB"); + Play("4eB5DqF4sGAGAqAAA5etD4AA5sD4B5D4B"); + Play("4eB5DqF4sGAGAqAAA5etD4AA5sD4B5D4B"); } } catch PutExcept; - Snd(0); + Snd; } Song; diff --git a/Apps/Psalmody/Examples/night.HC b/Apps/Psalmody/Examples/night.HC index b712774..e1457da 100644 Binary files a/Apps/Psalmody/Examples/night.HC and b/Apps/Psalmody/Examples/night.HC differ diff --git a/Apps/Psalmody/Examples/prosper.HC b/Apps/Psalmody/Examples/prosper.HC index 50a8e32..310557b 100644 Binary files a/Apps/Psalmody/Examples/prosper.HC and b/Apps/Psalmody/Examples/prosper.HC differ diff --git a/Apps/Psalmody/Help.DD b/Apps/Psalmody/Help.DD index 49b517a..1948097 100644 --- a/Apps/Psalmody/Help.DD +++ b/Apps/Psalmody/Help.DD @@ -1,6 +1,6 @@ $WW,1$$FG,5$$TX+CX,"Psalmody Help"$$FG$ -* The keyboard can be used as an organ by typing letter keys or clicking the mouse on the keyboard diagram$FG$. You can "record" notes by pressing the red button and typing letters. They will appear on the musical staff. You can edit and save them. +* The keyboard can be used as an organ by typing letter keys or clicking the mouse on the keyboard diagram$FG$. You can "record" notes by pressing the red bttn and typing letters. They will appear on the musical staff. You can edit and save them. * The clipboard can be used to cut and paste. @@ -8,7 +8,7 @@ $WW,1$$FG,5$$TX+CX,"Psalmody Help"$$FG$ * The first line of the $LK,"HolyC",A="FI:::/Doc/HolyC.DD"$ song files is a comment with a category recognized by $LK,"JukeBox",A="FF:::/Apps/Psalmody/JukeBox.HC,JukeBox"$(). The categories are $FG,2$"no nothing"$FG$, $FG,2$"has words"$FG$, $FG,2$"has graphics"$FG$, or $FG,2$"special"$FG$. The third character in the song comment is a digit rating number, shown in $LK,"JukeBox",A="FF:::/Apps/Psalmody/JukeBox.HC,JukeBox"$(). You can set the song rating in $LK,"JukeBox",A="FF:::/Apps/Psalmody/JukeBox.HC,JukeBox"$() by pressing $FG,2$0$FG$-$FG,2$9$FG$. You can press $FG,2$$FG$ to delete songs. -* You can take the $LK,"Play",A="MN:Play"$() stmts out of a song file and place them in your programs. You can also add a song to a document with $FG,2$$FG$, but you should do it after pressing $FG,2$$FG$ because the clipboard-insert in $FG,2$$FG$ is screwy. See this $SO,"",A="2qG3ECB2eGG3qCeFDsBGBG2qG3ECB2eGG3qCeFDsBGBGqEeEFqEB2eG3FetCAGqFCEeEFqEB2eG3FetCAGqFC"$ after pressing $FG,2$$FG$, now. +* You can take the $LK,"Play",A="MN:Play"$() stmts out of a song file and place them in your programs. You can also add a song to a document with $FG,2$$FG$, but you should do it after pressing $FG,2$$FG$ because the clipboard-insert in $FG,2$$FG$ is screwy. See this $SO,"",A="4qG5EC4BeGG5qCeFD4sB5G4B5G4qG5EC4BeGG5qCeFD4sB5G4B5GqEeEFqE4BeG5FetC4A5GqFCEeEFqE4BeG5FetC4A5GqFC"$ after pressing $FG,2$$FG$, now. * You can call $LK,"JukeBox",A="FF:::/Apps/Psalmody/JukeBox.HC,JukeBox"$("~/Psalmody"); to play your songs. diff --git a/Apps/Psalmody/JukeBox.HC b/Apps/Psalmody/JukeBox.HC index 91719ad..e98795b 100644 --- a/Apps/Psalmody/JukeBox.HC +++ b/Apps/Psalmody/JukeBox.HC @@ -3,10 +3,10 @@ CTask *SingleSong(U8 *msg,U8 *name) CTask *task=Spawn(&SrvCmdLine,NULL,name,,Fs); StrCpy(task->task_title,name); task->title_src=TTS_LOCKED_CONST; - TaskExe(task,Fs,";",1<win_left,task->win_left+50,task); WinVert(2,2+8,task); - TaskExe(task,NULL,msg,1<max_entries=100; return task; } diff --git a/Apps/Psalmody/Psalmody.HC b/Apps/Psalmody/Psalmody.HC index 99ffb2f..591e10e 100644 --- a/Apps/Psalmody/Psalmody.HC +++ b/Apps/Psalmody/Psalmody.HC @@ -5,13 +5,13 @@ This uses four types of ctrls 2) The $LK,"CCtrl",A="MN:CCtrl"$ type for the tempo/stacatto sliders. - 3) The active $LK,"CDoc",A="MN:CDoc"$ sprite buttons with macros for left/record/play/right. + 3) The active $LK,"CDoc",A="MN:CDoc"$ sprite bttns with macros for left/record/play/right. 4) Hand-made ctrls for the kbdgraphic, notes and staff. This uses four types of output - 1) The $LK,"CDoc",A="MN:CDoc"$ for the text and buttons and kbdgraphic. + 1) The $LK,"CDoc",A="MN:CDoc"$ for the text and bttns and kbdgraphic. 2) The Fs->draw_it() for the staff region, drawn every refresh. @@ -22,9 +22,6 @@ This uses four types of output See $LK,"GrUpdateTaskWin",A="MN:GrUpdateTaskWin"$(), $LK,"GrUpdateTasks",A="MN:GrUpdateTasks"$() and $LK,"GrUpdateScrn",A="MN:GrUpdateScrn"$(). $WW,1$$WW,0$*/ -#define NOTE_REST MIN_I64 -#define OCTAVE_REST MIN_I64 - #define PSMT_HEAD 0 #define PSMT_NOTE 1 #define PSMT_METER 2 @@ -41,14 +38,7 @@ class PsmNote I64 x,y; U8 *word; I64 type,flags; - union { - I64 note; - I64 meter_top; - }; - union { - I64 octave; - I64 meter_bottom; - } + I64 ona,meter_top,meter_bottom; I64 duration,width; U8 ascii[32]; }; @@ -62,8 +52,7 @@ class PsmCtrl PsmNote head; PsmNote clipboard; CMenuEntry *incomplete_entry,*record_entry; - I64 scrn_x, - tool; + I64 scrn_x,tool; PsmNote *cur_note; CDC *dc2; Bool playing; diff --git a/Apps/Psalmody/PsalmodyCtrls.HC b/Apps/Psalmody/PsalmodyCtrls.HC index 5f5e3b9..3e9430a 100644 --- a/Apps/Psalmody/PsalmodyCtrls.HC +++ b/Apps/Psalmody/PsalmodyCtrls.HC @@ -69,7 +69,7 @@ CCtrl *TempoNew() { CCtrl *c=CAlloc(sizeof(CCtrl)); c->win_task=Fs; - c->flags=CTRLF_SHOW|CTRLF_CAPTURE_LEFT_IP; + c->flags=CTRLF_SHOW|CTRLF_CAPTURE_LEFT_MS; c->type=CTRLT_GENERIC; c->state=&tempo_state; c->draw_it=&DrawTempoCtrl; diff --git a/Apps/Psalmody/PsalmodyDraw.HC b/Apps/Psalmody/PsalmodyDraw.HC index 438b0f4..48c5685 100644 --- a/Apps/Psalmody/PsalmodyDraw.HC +++ b/Apps/Psalmody/PsalmodyDraw.HC @@ -53,13 +53,10 @@ $ID,-8$ F64 psm_durations[PSM_NUM_DURATIONS+1]={ 2*.25/3,.25,2*.5/3,.5,2.0/3.0,0.5*1.5,1.0,1.5,2.0,3.0,4.0,6.0,1000000.0}; U8 *psm_duration_lst="st\0s\0et\0e\0qt\0e.\0q\0q.\0h\0h.\0w\0w.\0"; -U8 *psm_duration_imgs[PSM_NUM_DURATIONS]={$IB,"<1>",BI=1$,$IB,"<1>",BI=1$,$IB,"<2>",BI=2$, - $IB,"<2>",BI=2$,$IB,"<3>",BI=3$,$IB,"<2>",BI=2$,$IB,"<3>",BI=3$,$IB,"<3>",BI=3$, - $IB,"<4>",BI=4$,$IB,"<4>",BI=4$,$IB,"<5>",BI=5$,$IB,"<5>",BI=5$}; +U8 *psm_duration_imgs[PSM_NUM_DURATIONS]={ + $IB,"<1>",BI=1$,$IB,"<1>",BI=1$,$IB,"<2>",BI=2$,$IB,"<2>",BI=2$,$IB,"<3>",BI=3$,$IB,"<2>",BI=2$,$IB,"<3>",BI=3$,$IB,"<3>",BI=3$,$IB,"<4>",BI=4$,$IB,"<4>",BI=4$,$IB,"<5>",BI=5$,$IB,"<5>",BI=5$}; Bool psm_triplet_durations[PSM_NUM_DURATIONS]={TRUE,FALSE,TRUE, - FALSE,TRUE,FALSE,FALSE,FALSE, - FALSE,FALSE,FALSE,FALSE}; - + FALSE,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE}; Bool PsmBlink() { @@ -117,7 +114,7 @@ U0 PsmSetOctave(I64 octave) I64 i; U8 buf[STR_LEN]; CMenuEntry *tmpse; - for (i=0;i<=6;i++) { + for (i=1;i<=7;i++) { StrPrint(buf,"Snd/Octave%d",i); if (tmpse=MenuEntryFind(Fs->cur_menu,buf)) { if (i==octave) @@ -149,7 +146,7 @@ U0 PsmRecalcNoteXY() { F64 measure_len=4,measure_left=measure_len; PsmNote *tmpn=psm.head.next; - I64 x=8-psm.scrn_x,note,octave; + I64 x=8-psm.scrn_x,ona,note,octave; while (TRUE) { tmpn->x=x; tmpn->y=50; @@ -157,22 +154,18 @@ U0 PsmRecalcNoteXY() break; else { if (tmpn->type!=PSMT_METER) { - octave=tmpn->octave; - if (octave!=OCTAVE_REST) { - note=tmpn->note; + if (tmpn->ona!=ONA_REST) { + ona=tmpn->ona; if (Bt(&tmpn->flags,PSMf_SHARP)) - note--; + ona--; if (Bt(&tmpn->flags,PSMf_FLAT)) - note++; - if (note<0) { - note=11; - octave--; - } else if (note>11) { - note=0; - octave++; - } + ona++; + octave=Ona2Octave(ona); + note =Ona2Note (ona); note=music.note_map[*LstSub(note,psm_note_lst)-'A']; - tmpn->y=(15+(psm_note_map[note]-7*(octave-2)))*4; + if (note<3) + octave++; + tmpn->y=(15+(psm_note_map[note]-7*(octave-4)))*4; } } x+=tmpn->width; @@ -237,7 +230,7 @@ U0 DrawIt(CTask *task,CDC *dc) } else if (tmpn->flags&PSMF_SEL) dc->color=RED; else { - if (tmpn->note!=NOTE_REST) + if (tmpn->ona!=ONA_REST) dc->color=BLACK; else dc->color=LTGRAY; @@ -314,21 +307,19 @@ U0 DrawPickTools() psm.dc2->color=ROPF_DITHER+WHITE<<16+RED; else psm.dc2->color=ROPF_DITHER+WHITE<<16+BLACK; - GrBorder(psm.dc2,PSM_TOOLS_X,PSM_TOOLS_Y, - PSM_TOOLS_X+10,PSM_TOOLS_Y+10); + GrBorder(psm.dc2,PSM_TOOLS_X,PSM_TOOLS_Y,PSM_TOOLS_X+10,PSM_TOOLS_Y+10); if (psm.tool==PSMTT_PTR_TOOL) psm.dc2->color=RED; else psm.dc2->color=BLACK; - (*gr.fp_draw_input_ptr)(psm.dc2,PSM_TOOLS_X+15,PSM_TOOLS_Y); + (*gr.fp_draw_ms)(psm.dc2,PSM_TOOLS_X+15,PSM_TOOLS_Y); psm.dc2->color=BLACK; } Bool PsmGetPickToolBox(I64 xx,I64 yy) { - if (PSM_TOOLS_X<=xxflags,PSMf_FLAT); note--; st++; + if (note<0) //Ab + note=11; + else if (note==2) //Cb + *psm_octave-=1; } else if (*st=='#') { Bts(&tmpn->flags,PSMf_SHARP); note++; st++; + if (note>11) //G# + note=0; + else if (note==3) //B# + *psm_octave+=1; } - if (note<0) { - note=11; - *psm_octave-=1; - } else if (note>11) { - note=0; - *psm_octave+=1; - } - tmpn->note=note; - tmpn->octave=*psm_octave; - } else { - tmpn->note=NOTE_REST; - tmpn->octave=OCTAVE_REST; - } + tmpn->ona=Note2Ona(note,*psm_octave); + } else + tmpn->ona=ONA_REST; if (*psm_duration<=2*.25/3) i=0; else if (*psm_duration<=.25) @@ -251,11 +249,11 @@ U8 *PsmCvtSong() { PsmNote *tmpn; U8 *st,*src,*dst; - I64 i,note,octave,last_octave,last_duration; + I64 i,ona,note,octave,last_octave,last_duration; i=0; tmpn=psm.head.next; - last_octave=OCTAVE_REST; + last_octave=MIN_I64; last_duration=-1; while (tmpn!=&psm.head) { dst=&tmpn->ascii; @@ -265,25 +263,19 @@ U8 *PsmCvtSong() *dst++='/'; *dst++=tmpn->meter_bottom+'0'; } else { - octave=tmpn->octave; - note=tmpn->note; - if (note!=NOTE_REST) { + if (tmpn->ona!=ONA_REST) { + ona=tmpn->ona; if (Bt(&tmpn->flags,PSMf_SHARP)) - note--; + ona--; if (Bt(&tmpn->flags,PSMf_FLAT)) - note++; - if (note<0) { - note=11; - octave--; - } else if (note>11) { - note=0; - octave++; - } + ona++; + octave=Ona2Octave(ona); + note =Ona2Note (ona); note=music.note_map[*LstSub(note,psm_note_lst)-'A']; } if (Bt(&tmpn->flags,PSMf_TIE)) *dst++='('; - if (octave!=last_octave && note!=NOTE_REST) { + if (octave!=last_octave && tmpn->ona!=ONA_REST) { *dst++=octave+'0'; last_octave=octave; } @@ -294,7 +286,7 @@ U8 *PsmCvtSong() *dst++=src[1]; last_duration=tmpn->duration; } - if (note!=NOTE_REST) { + if (tmpn->ona!=ONA_REST) { src=LstSub(note,psm_note_lst); *dst++=src[0]; if (src[1]) @@ -419,7 +411,7 @@ U8 *PsmSaveSong(U8 *dirname,U8 *full_filename) " }\n" " } catch\n" " PutExcept;\n" - " Snd(0);\n" + " Snd;\n" "}\n" "\n" "Song;\n"); diff --git a/Apps/Psalmody/PsalmodyMain.HC b/Apps/Psalmody/PsalmodyMain.HC index 2c986b8..751964c 100644 --- a/Apps/Psalmody/PsalmodyMain.HC +++ b/Apps/Psalmody/PsalmodyMain.HC @@ -41,43 +41,27 @@ U0 PsmRightClick(I64 x,I64 y) } else { switch (i) { case PSMR_REST: - if (tmpn->type==PSMT_NOTE) { - tmpn->octave=OCTAVE_REST; - tmpn->note=NOTE_REST; - } + if (tmpn->type==PSMT_NOTE) + tmpn->ona=ONA_REST; break; case PSMR_SHARP: - if (tmpn->type==PSMT_NOTE && tmpn->octave!=OCTAVE_REST) { + if (tmpn->type==PSMT_NOTE && tmpn->ona!=ONA_REST) { if (Btr(&tmpn->flags,PSMf_FLAT)) - tmpn->note++; + tmpn->ona++; if (Btc(&tmpn->flags,PSMf_SHARP)) - tmpn->note--; + tmpn->ona--; else - tmpn->note++; - if (tmpn->note<0) { - tmpn->note=11; - tmpn->octave--; - } else if (tmpn->note>11) { - tmpn->note=0; - tmpn->octave++; - } + tmpn->ona++; } break; case PSMR_FLAT: - if (tmpn->type==PSMT_NOTE && tmpn->octave!=OCTAVE_REST) { + if (tmpn->type==PSMT_NOTE && tmpn->ona!=ONA_REST) { if (Btr(&tmpn->flags,PSMf_SHARP)) - tmpn->note--; + tmpn->ona--; if (Btc(&tmpn->flags,PSMf_FLAT)) - tmpn->note++; + tmpn->ona++; else - tmpn->note--; - if (tmpn->note<0) { - tmpn->note=11; - tmpn->octave--; - } else if (tmpn->note>11) { - tmpn->note=0; - tmpn->octave++; - } + tmpn->ona--; } break; case PSMR_TIE: @@ -123,35 +107,35 @@ U0 PsmRightClick(I64 x,I64 y) U0 PsmLeftClickPickNoteBox(I64 duration) { - I64 o,n,msg_code,a1,a2; + I64 o,n,msg_code,arg1,arg2; PsmNote *tmpn,*tmpn1; do { - msg_code=GetMsg(&a1,&a2,1<psm.head.last->x) + } while (msg_code!=MSG_MS_L_UP); + if (arg2<13*FONT_HEIGHT) { + if (arg1>psm.head.last->x) tmpn1=psm.head.last; - else if (a1x) + else if (arg1x) tmpn1=&psm.head; else - tmpn1=PsmFindNote(a1-PSM_NOTE_SPACING/2,a2); + tmpn1=PsmFindNote(arg1-PSM_NOTE_SPACING/2,arg2); tmpn=CAlloc(sizeof(PsmNote)); tmpn->type=PSMT_NOTE; - a2=a2/4-15; - n=-a2%7; - o=2+a2/-7; - n=-n; + arg2=arg2/4-15; + n=arg2%7; + o=4+arg2/-7; if (n<0) { n+=7; o++; } n=psm_note_inverse_map[n]; - tmpn->note=n; - tmpn->octave=o; + if (n<3) + o--; + tmpn->ona=Note2Ona(n,o); tmpn->duration=duration; PsmSetWidth(tmpn); QueIns(tmpn,tmpn1); @@ -162,22 +146,22 @@ U0 PsmLeftClickPickNoteBox(I64 duration) U0 PsmLeftClickPickMeterBox(I64 top,I64 bottom) { - I64 msg_code,a1,a2; + I64 msg_code,arg1,arg2; PsmNote *tmpn,*tmpn1; do { - msg_code=GetMsg(&a1,&a2,1<=psm.head.x) + } while (msg_code!=MSG_MS_L_UP); + if (arg2<13*FONT_HEIGHT) { + if (arg1>=psm.head.x) tmpn1=psm.head.last; - else if (a1x) + else if (arg1x) tmpn1=&psm.head; else - tmpn1=PsmFindNote(a1-PSM_NOTE_SPACING/2,a2); + tmpn1=PsmFindNote(arg1-PSM_NOTE_SPACING/2,arg2); tmpn=CAlloc(sizeof(PsmNote)); tmpn->type=PSMT_METER; tmpn->meter_top=top; @@ -192,40 +176,39 @@ U0 PsmLeftClickPickMeterBox(I64 top,I64 bottom) U0 PsmLeftClickStaffPtr(I64 x,I64 y) { PsmNote *tmpn,*tmpn1; - I64 o,n,msg_code,a1,a2,n_original,o_original; + I64 o,n,msg_code,arg1,arg2,n_original,o_original; psm.cur_note=tmpn=PsmFindNote(x,y); if (tmpn!=&psm.head) { if (tmpn->type==PSMT_NOTE) { - n_original=tmpn->note; - o_original=tmpn->octave; + o_original=Ona2Octave(tmpn->ona); + n_original=Ona2Note (tmpn->ona); do { - msg_code=GetMsg(&a1,&a2,1<word); tmpn1->word=tmpn->word; tmpn->word=NULL; - tmpn->note=n_original; - tmpn->octave=o_original; + tmpn->ona=Note2Ona(n_original,o_original); } } else { move_note: - a2=a2/4-15; - n=-a2%7; - o=2+a2/-7; - n=-n; + arg2=arg2/4-15; + n=arg2%7; + o=4+arg2/-7; if (n<0) { n+=7; o++; } n=psm_note_inverse_map[n]; - tmpn->note=n; - tmpn->octave=o; + if (n<3) + o--; + tmpn->ona=Note2Ona(n,o); } - } while (msg_code!=MSG_IP_L_UP); + } while (msg_code!=MSG_MS_L_UP); PsmSetWidth(tmpn); } } @@ -233,17 +216,17 @@ move_note: U0 PsmLeftClickStaffBox(I64 x,I64 y) { - I64 msg_code,a1,a2; + I64 msg_code,arg1,arg2; do { - msg_code=GetMsg(&a1,&a2,1<color=ROPF_DITHER+WHITE<<16+BLACK; - GrBorder(psm.dc2,x,y,a1,a2); - if (msg_code==MSG_IP_L_UP) { - if (x>a1) SwapI64(&x,&a1); - PsmMarkSel(x,a1,TRUE); + GrBorder(psm.dc2,x,y,arg1,arg2); + if (msg_code==MSG_MS_L_UP) { + if (x>arg1) SwapI64(&x,&arg1); + PsmMarkSel(x,arg1,TRUE); } - } while (msg_code!=MSG_IP_L_UP); + } while (msg_code!=MSG_MS_L_UP); DrawDC2; } @@ -366,14 +349,12 @@ U0 PsmPopMode() U0 Psalmody(U8 *dirname="~/Psalmody") { - Bool was_playing; - I64 a1,a2,msg_code=0,col, - note=NOTE_REST,octave=OCTAVE_REST,psm_octave=3,timeout_val,timeout_val2, - old_doc_flags; + Bool was_playing,is_null=TRUE,was_null=TRUE; + I64 arg1,arg2,msg_code=0,col,ona=ONA_REST,last_ona=ONA_REST, + psm_octave=4,timeout_val,timeout_val2,old_doc_flags; U8 *filename=NULL,*st,*st2; PsmNote *tmpn; - F64 f=0,last_f=0,psm_duration=1.0, - d,evt_time=tS,note_down_time=tS; + F64 psm_duration=1.0,d,evt_time=tS,note_down_time=tS; CCtrl *c=TempoNew; if (DocPut) old_doc_flags=DocPut->flags; @@ -421,13 +402,13 @@ U0 Psalmody(U8 *dirname="~/Psalmody") " MarkIncomplete(MSG_CMD,PSMF_INCOMPLETE);" "}" "Snd {" - " Octave0(,'0');" " Octave1(,'1');" " Octave2(,'2');" " Octave3(,'3');" " Octave4(,'4');" " Octave5(,'5');" " Octave6(,'6');" + " Octave7(,'7');" "}" "Help {" " Help(,,SC_F1);" @@ -449,23 +430,23 @@ U0 Psalmody(U8 *dirname="~/Psalmody") while (TRUE) { was_playing=FALSE; mo_start: - if (ip.pos_text.y-Fs->win_top<18) - msg_code=GetMsg(&a1,&a2,1<win_top<18) + msg_code=GetMsg(&arg1,&arg2,1< when the Doc Buttons are clicked. + if (msg_code==MSG_KEY_DOWN && arg1==CH_SPACE && !arg2) { +//The Window Mgr sets the Doc cur_entry to a bttn + //and generates a when the Doc Bttns are clicked. //This is so that kbd and mouse are the same for Doc's. - //We must now pass the onto the Doc handler. - PutKey(a1,a2); + //We must now pass the onto the Doc hndlr. + PutKey(arg1,arg2); goto mo_start; } - if (msg_code!=MSG_IP_MOVE) { + if (msg_code!=MSG_MS_MOVE) { DocBottom; if (was_playing || DocPut->cur_entry->y>=Fs->win_height-2) { PsmMenu(psm_octave); @@ -473,11 +454,12 @@ mo_got_msg: } } - octave=psm_octave; + ona=Note2Ona(3,psm_octave+1); //C + is_null=TRUE; switch (msg_code) { case MSG_CMD: PsmPopMode; - switch (a1) { + switch (arg1) { case PSMF_CD: st2=dirname; if (dirname=PopUpPickDir) { @@ -496,75 +478,71 @@ mo_got_msg: break; case MSG_KEY_DOWN: evt_time=tS; - if ('0'<=a1<='9') { - psm_octave=a1-'0'; + if ('0'<=arg1<='9') { + psm_octave=arg1-'0'; PsmMenu(psm_octave); col=0; } else { - switch (a1) { + switch (arg1) { start: - case 'a': note=7; octave--; break; - case 's': note=8; octave--; break; - case 'e': note=9; octave--; break; - case 'd': note=10; octave--; break; - case 'r': note=11; octave--; break; - case 'f': note=0; break; - case 't': note=1; break; - case 'g': note=2; break; - case 'h': note=3; break; - case 'u': note=4; break; - case 'j': note=5; break; - case 'i': note=6; break; - case 'k': note=7; break; - case 'l': note=8; break; - case 'p': note=9; break; - case ';': note=10; break; - case '[': note=11; break; - case '\'': note=0; octave++; break; - case ']': note=1; octave++; break; + case 'a': ona-=8; break; + case 's': ona-=7; break; + case 'e': ona-=6; break; + case 'd': ona-=5; break; + case 'r': ona-=4; break; + case 'f': ona-=3; break; + case 't': ona-=2; break; + case 'g': ona--; break; + case 'h': break; + case 'u': ona++; break; + case 'j': ona+=2; break; + case 'i': ona+=3; break; + case 'k': ona+=4; break; + case 'l': ona+=5; break; + case 'p': ona+=6; break; + case ';': ona+=7; break; + case '[': ona+=8; break; + case '\'': ona+=9; break; + case ']': ona+=10; break; + case CH_SPACE: ona=ONA_REST; break; end: - f=Note2Freq(note,octave); - break; - case CH_SPACE: - note=NOTE_REST; - octave=OCTAVE_REST; - f=-1; //rest + is_null=FALSE; break; case 0: - switch (a2.u8[0]) { + switch (arg2.u8[0]) { case SC_CURSOR_LEFT: - if (a2&SCF_CTRL) { + if (arg2&SCF_CTRL) { while (psm.cur_note->last!=&psm.head) { psm.cur_note=psm.cur_note->last; if (psm.cur_note!=&psm.head) - LBEqu(&psm.cur_note->flags,PSMf_SEL,a2&SCF_SHIFT); + LBEqu(&psm.cur_note->flags,PSMf_SEL,arg2&SCF_SHIFT); } } else { if (psm.cur_note->last!=&psm.head) { psm.cur_note=psm.cur_note->last; if (psm.cur_note!=&psm.head) - LBEqu(&psm.cur_note->flags,PSMf_SEL,a2&SCF_SHIFT); + LBEqu(&psm.cur_note->flags,PSMf_SEL,arg2&SCF_SHIFT); } } break; case SC_CURSOR_RIGHT: - if (a2&SCF_CTRL) { + if (arg2&SCF_CTRL) { while (psm.cur_note!=&psm.head) { if (psm.cur_note!=&psm.head) - LBEqu(&psm.cur_note->flags,PSMf_SEL,a2&SCF_SHIFT); + LBEqu(&psm.cur_note->flags,PSMf_SEL,arg2&SCF_SHIFT); psm.cur_note=psm.cur_note->next; } } else { if (psm.cur_note!=&psm.head) { if (psm.cur_note!=&psm.head) - LBEqu(&psm.cur_note->flags,PSMf_SEL,a2&SCF_SHIFT); + LBEqu(&psm.cur_note->flags,PSMf_SEL,arg2&SCF_SHIFT); psm.cur_note=psm.cur_note->next; } } break; case SC_DELETE: - if (a2&SCF_SHIFT) + if (arg2&SCF_SHIFT) PsmCutToClipboard; else { tmpn=psm.cur_note; @@ -576,9 +554,9 @@ mo_got_msg: } break; case SC_INS: - if (a2&SCF_SHIFT) + if (arg2&SCF_SHIFT) PsmPasteClipboard; - else if (a2&SCF_CTRL) + else if (arg2&SCF_CTRL) PsmCopyToClipboard; break; case SC_F1: @@ -615,7 +593,7 @@ mo_got_msg: if (filename) { psm.scrn_x=0; psm_duration=1.0; - psm_octave=3; + psm_octave=4; PsmSongDel(&psm.head); psm.cur_note=&psm.head; PsmLoadSong(filename,&psm_octave,&psm_duration); @@ -645,7 +623,7 @@ mo_got_msg: Free(filename); filename=NULL; psm_duration=1.0; - psm_octave=3; + psm_octave=4; PsmSongDel(&psm.head); psm.cur_note=&psm.head; psm.scrn_x=0; @@ -664,19 +642,18 @@ mo_got_msg: while (tmpn!=&psm.head) { if (tmpn->type!=PSMT_METER) { timeout_val=cnts.jiffies; - if (ip.pos_text.y-Fs->win_top<18) - msg_code=ScanMsg(&a1,&a2,1<win_top<18) + msg_code=ScanMsg(&arg1,&arg2,1<win_top>=18 && - msg_code==MSG_IP_L_DOWN) + if (ms.pos_text.y-Fs->win_top>=18 && + msg_code==MSG_MS_L_DOWN) goto mo_start; else goto mo_got_msg; @@ -685,16 +662,7 @@ mo_got_msg: psm.scrn_x+=tmpn->x-0.33*GR_WIDTH; if (PsmHasWords(tmpn->word)) "%s",tmpn->word; - note=tmpn->note; - octave=tmpn->octave; - if (note!=NOTE_REST) - f=Note2Freq(note,octave); - else - f=-1; //rest - if (f>0) - Snd(f); - else - Snd(0); + Snd(tmpn->ona); music.tempo=4.4*tempo_state.tempo/TEMPO_RANGE+0.5; music.stacatto_factor= @@ -709,7 +677,7 @@ mo_got_msg: d*(1.0-music.stacatto_factor); } SleepUntil(timeout_val); - Snd(0); + Snd; SleepUntil(timeout_val2); } tmpn=tmpn->next; @@ -719,8 +687,7 @@ mo_got_msg: psm.playing=FALSE; PsmMenu(psm_octave); col=0; - f=0; - Snd(0); + Snd; break; case CH_BACKSPACE: tmpn=psm.cur_note->last; @@ -739,7 +706,7 @@ mo_got_msg: else { psm.record_entry->checked=TRUE; psm_duration=1.0; - psm_octave=3; + psm_octave=4; psm.scrn_x=0; } PsmMenu(psm_octave); @@ -756,57 +723,55 @@ mo_got_msg: break; case MSG_KEY_UP: evt_time=tS; - f=0; break; - case MSG_IP_MOVE: - if (a2>18*FONT_HEIGHT) + case MSG_MS_MOVE: + if (arg2>18*FONT_HEIGHT) Fs->win_inhibit=WIG_USER_TASK_DFT; else Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_BORDER -WIF_FOCUS_TASK_MENU-WIF_SELF_CTRLS; break; - case MSG_IP_L_DOWN: - PsmDownKey(a1,a2); - PsmLeftClick(a1,a2); + case MSG_MS_L_DOWN: + PsmDownKey(arg1,arg2); + PsmLeftClick(arg1,arg2); break; - case MSG_IP_L_UP: - PsmUpKey(a1,a2); + case MSG_MS_L_UP: + PsmUpKey(arg1,arg2); break; default: - PsmRightClick(a1,a2); + PsmRightClick(arg1,arg2); } - if (f!=last_f) { - if (f>0) { - st=LstSub(note,psm_note_lst); - Snd(f); - } else { - if (f<0) - st="R"; - else + if (is_null) + ona=ONA_REST; + if (ona!=last_ona || is_null!=was_null) { + if (ona==ONA_REST) { + if (is_null) st=""; - Snd(0); - } + else + st="R"; + } else + st=LstSub(Ona2Note(ona),psm_note_lst); + Snd(ona); if (psm.record_entry->checked) { - if (last_f) { + if (!was_null) { music.tempo=4.4*tempo_state.tempo/TEMPO_RANGE+0.5; music.stacatto_factor=0.88*tempo_state.stacatto/TEMPO_RANGE+0.12; - tmpn->duration=PsmCvtDuration( music.tempo*(evt_time-note_down_time)); PsmSetWidth(tmpn); QueIns(tmpn,psm.cur_note->last); } - if (f) { + if (!is_null) { note_down_time=tS; tmpn=CAlloc(sizeof(PsmNote)); tmpn->type=PSMT_NOTE; - tmpn->note=note; - tmpn->octave=octave; + tmpn->ona=ona; if (st[1]=='#') Bts(&tmpn->flags,PSMf_SHARP); } } - last_f=f; + last_ona=ona; + was_null=is_null; "%s",st; col+=StrLen(st); if (col>=Fs->win_width-1) { diff --git a/Apps/Span/Span.HH b/Apps/Span/Span.HH index abc5693..11f486f 100644 --- a/Apps/Span/Span.HH +++ b/Apps/Span/Span.HH @@ -24,7 +24,7 @@ I32 pen_width; CMathODE *ode=NULL; -CCtrlButtonState run_button,mode_button; +CCtrlBttnState run_bttn,mode_bttn; CColorROPU32 run_colors[2]={RED,GREEN}; diff --git a/Apps/Span/SpanDerive.HC b/Apps/Span/SpanDerive.HC index 77ae4b0..41a010a 100644 --- a/Apps/Span/SpanDerive.HC +++ b/Apps/Span/SpanDerive.HC @@ -36,8 +36,8 @@ U0 MyDerivative(CMathODE *ode,F64,COrder2D3 *,COrder2D3 *) } if (cursor_mass) { - p2.x=ip.pos.x-task->pix_left-task->scroll_x; - p2.y=ip.pos.y-task->pix_top-task->scroll_y; + p2.x=ms.pos.x-task->pix_left-task->scroll_x; + p2.y=ms.pos.y-task->pix_top-task->scroll_y; p2.z=0; D3Sub(&p,&p2,&cursor_mass->state->x); d=10.0*D3NormSqr(&p); diff --git a/Apps/Span/SpanMain.HC b/Apps/Span/SpanMain.HC index 09632ca..2d30b3b 100644 --- a/Apps/Span/SpanMain.HC +++ b/Apps/Span/SpanMain.HC @@ -1,6 +1,6 @@ F64 SpanTime() { - if (run_button.state) + if (run_bttn.state) return a.elapsed_t+tS-a.start_wall_t; else return a.elapsed_t; @@ -43,8 +43,8 @@ U0 DrawIt(CTask *task,CDC *dc) if (cursor_mass) { dc->color=RED; dc->pen_width=2; - GrLine3(dc,ip.pos.x-task->pix_left-task->scroll_x, - ip.pos.y-task->pix_top-task->scroll_y,0, + GrLine3(dc,ms.pos.x-task->pix_left-task->scroll_x, + ms.pos.y-task->pix_top-task->scroll_y,0, cursor_mass->x,cursor_mass->y,0); } @@ -134,7 +134,7 @@ U0 DelMass(MyMass *tmpm) U0 DrawSpring(CDC *dc,MyMass *tmpm,I64 x,I64 y) { - switch (mode_button.state) { + switch (mode_bttn.state) { case MD_CONCRETE: dc->color=LTGRAY; dc->pen_width=2; @@ -156,7 +156,7 @@ U0 PlaceSpring(MyMass *tmpm1,MyMass *tmpm2) MySpring *tmps=CAlloc(sizeof(MySpring)); tmps->end1=tmpm1; tmps->end2=tmpm2; - switch (mode_button.state) { + switch (mode_bttn.state) { case MD_CONCRETE: tmps->base_const = 3.00*SPRING_SCALE; tmps->base_compression_strength=10.00*STRENGTH_SCALE; @@ -208,8 +208,8 @@ U0 AnimateTask(SpanAnimateStruct *a) } AdjustLoads(ode); Refresh; //CMathODE updated once per refresh. - if (old_run!=run_button.state) { - if (run_button.state) { + if (old_run!=run_bttn.state) { + if (run_bttn.state) { if (!a->elapsed_t || !a->saved_ode) { Free(a->saved_ode); a->saved_ode=SpanSave(ode); @@ -220,7 +220,7 @@ U0 AnimateTask(SpanAnimateStruct *a) ode->flags|=ODEF_PAUSED; a->elapsed_t+=tS-a->start_wall_t; } - old_run=run_button.state; + old_run=run_bttn.state; } } } @@ -230,7 +230,7 @@ U0 Init(SpanAnimateStruct *a) SpanDel(ode); ode=SpanNew; - run_button.state=0; + run_bttn.state=0; Refresh(2); //Allow stop to reg in animate task. if (a->saved_ode) @@ -248,16 +248,16 @@ U0 SongTask(I64) music.tempo= 3.636; music.stacatto_factor= 0.902; while (TRUE) { - Play("3q.EeDqED2G3DhE"); - Play("q.EeDqED2G3DhE"); - Play("q.FeEFEqF2G3EhF"); - Play("q.FeEFEqF2G3EhF"); + Play("5q.EeDqED4G5DhE"); + Play("5q.EeDqED4G5DhE"); + Play("5q.FeEFEqF4G5EhF"); + Play("5q.FeEFEqF4G5EhF"); } } U0 Span() { - I64 msg_code,a1,a2; + I64 msg_code,arg1,arg2; MyMass *tmpm1=NULL,*tmpm2=NULL; MySpring *tmps; CCtrl *bt_run,*bt_mode; @@ -272,10 +272,10 @@ U0 Span() DocCursor; Fs->song_task=Spawn(&SongTask,NULL,"Song",,Fs); - bt_run =CtrlButtonNew(0,0, 80,, - 2,"Stopped\0Running\0",run_colors,&run_button); - bt_mode=CtrlButtonNew(0,3.0*FONT_HEIGHT,80,, - MD_NUM_MODES,Define("ST_SPAN_MODES"),mode_colors,&mode_button); + bt_run =CtrlBttnNew(0,0, 80,, + 2,"Stopped\0Running\0",run_colors,&run_bttn); + bt_mode=CtrlBttnNew(0,3.0*FONT_HEIGHT,80,, + MD_NUM_MODES,Define("ST_SPAN_MODES"),mode_colors,&mode_bttn); a.saved_ode=NULL; Fs->win_inhibit|=WIG_DBL_CLICK; @@ -323,30 +323,30 @@ U0 Span() try { while (TRUE) { - msg_code=GetMsg(&a1,&a2,1<=MD_NUM_MODES) - mode_button.state=0; + case MSG_MS_R_DOWN: + mode_bttn.state++; + if (mode_bttn.state>=MD_NUM_MODES) + mode_bttn.state=0; cursor_mass=tmpm1=tmpm2=NULL; break; case MSG_KEY_DOWN: - switch (a1) { + switch (arg1) { case '\n': if (!SpanTime || !a.saved_ode) { Free(a.saved_ode); @@ -420,25 +420,25 @@ U0 Span() SpanWrite(ode); break; case CH_SPACE: - run_button.state=!run_button.state; + run_bttn.state=!run_bttn.state; break; case 'c': - mode_button.state=MD_CONCRETE; + mode_bttn.state=MD_CONCRETE; break; case 's': - mode_button.state=MD_STEEL; + mode_bttn.state=MD_STEEL; break; case 'w': - mode_button.state=MD_WIRE; + mode_bttn.state=MD_WIRE; break; case 'm': - mode_button.state=MD_MASS; + mode_bttn.state=MD_MASS; break; case 'v': - mode_button.state=MD_MOVE; + mode_bttn.state=MD_MOVE; break; case 'd': - mode_button.state=MD_DELETE; + mode_bttn.state=MD_DELETE; break; case CH_ESC: if (!SpanTime || !a.saved_ode) { @@ -459,8 +459,8 @@ span_done: //Don't goto out of try PutExcept; DocClear; SettingsPop; - CtrlButtonDel(bt_run); - CtrlButtonDel(bt_mode); + CtrlBttnDel(bt_run); + CtrlBttnDel(bt_mode); SpanDel(ode); DCFill(dc); DCDel(dc); diff --git a/Apps/Strut/Strut.HC b/Apps/Strut/Strut.HC index 1c6e964..dc6ef6e 100644 --- a/Apps/Strut/Strut.HC +++ b/Apps/Strut/Strut.HC @@ -28,7 +28,7 @@ class MySpring:CSpring #define MMD_NUM_MODES 2 CColorROPU32 main_mode_colors[MMD_NUM_MODES]={LTRED,LTGREEN}; DefineLstLoad("ST_MAIN_MODES","Edit\0Play\0"); -CCtrlButtonState main_mode_button; +CCtrlBttnState main_mode_bttn; //Edit Modes #define EMD_MASS 0 @@ -39,7 +39,7 @@ CCtrlButtonState main_mode_button; #define EMD_NUM_MODES 5 CColorROPU32 edit_mode_colors[EMD_NUM_MODES]={LTGRAY,LTCYAN,CYAN,YELLOW,LTBLUE}; DefineLstLoad("ST_EDIT_MODES","Mass\0Spring\0Connector\0Thruster\0Move\0"); -CCtrlButtonState edit_mode_button; +CCtrlBttnState edit_mode_bttn; CTask *task; F64 zoom; @@ -64,14 +64,14 @@ U0 W2S(F64 wx,F64 wy,F64 *_sx,F64 *_sy) U0 Zoom(F64 d) { F64 sx,sy,wx,wy; - I64 i,x=ip.pos.x,y=ip.pos.y; + I64 i,x=ms.pos.x,y=ms.pos.y; d=Exp(Ln(d)/ZOOM_STEPS); for (i=0;iscroll_x=ip.pos.x-sx-task->pix_left; - task->scroll_y=ip.pos.y-sy-task->pix_top; + task->scroll_x=ms.pos.x-sx-task->pix_left; + task->scroll_y=ms.pos.y-sy-task->pix_top; Sleep(10); } } @@ -92,7 +92,7 @@ U0 DrawIt(CTask *,CDC *dc) dc->flags|=DCF_TRANSFORMATION; Mat4x4Scale(dc->r,zoom); - switch (main_mode_button.state) { + switch (main_mode_bttn.state) { case MMD_EDIT: task->text_attr=DKGRAY<<4+WHITE; dc->color=BLACK; @@ -105,12 +105,12 @@ U0 DrawIt(CTask *,CDC *dc) break; } - if (main_mode_button.state==MMD_EDIT) { - if (edit_mode_button.state==EMD_CONNECTOR) { + if (main_mode_bttn.state==MMD_EDIT) { + if (edit_mode_bttn.state==EMD_CONNECTOR) { dc->color=CYAN; S2W(FONT_WIDTH*11,FONT_HEIGHT*7,&x1,&y1); GrPutChar3(dc,x1,y1,0,next_action_key); - } else if (edit_mode_button.state==EMD_THRUSTER) { + } else if (edit_mode_bttn.state==EMD_THRUSTER) { dc->color=YELLOW; S2W(FONT_WIDTH*11,FONT_HEIGHT*7,&x1,&y1); GrPutChar3(dc,x1,y1,0,next_action_key); @@ -164,7 +164,7 @@ U0 DrawIt(CTask *,CDC *dc) } dc->flags&=~DCF_SYMMETRY; } - SpriteZ3B(dc,x1,y1,0,$IB,"<3>",BI=3$,é); + Sprite3ZB(dc,x1,y1,0,$IB,"<3>",BI=3$,é); if (zoom>0.5) { dc->color=YELLOW; GrPutChar3(dc,(x1*7+x2)/8,(y1*7+y2)/8,0,tmps->action_key); @@ -210,7 +210,7 @@ U0 MyDerivative(CMathODE *ode,F64,COrder2D3 *,COrder2D3 *) tmps=ode->next_spring; while (tmps!=&ode->next_spring) { - if (main_mode_button.state==MMD_PLAY && tmps->type==EMD_THRUSTER && + if (main_mode_bttn.state==MMD_PLAY && tmps->type==EMD_THRUSTER && Bt(kbd.down_bitmap,action_scan_codes[tmps->action_key-'0'])) { D3Sub(&p,&tmps->end2->state->x,&tmps->end1->state->x); D3Unit(&p); @@ -320,7 +320,7 @@ U0 CleanUp() U0 PlayShip() { - I64 a1,a2; + I64 arg1,arg2; F64 last_noise=0; Bool okay; ode->flags&=~ODEF_PAUSED; @@ -353,14 +353,14 @@ U0 PlayShip() ); DocClear; try { - while (main_mode_button.state==MMD_PLAY) { + while (main_mode_bttn.state==MMD_PLAY) { BreakConnectors; - switch (ScanMsg(&a1,&a2,1<last_noise+0.25) { - Noise(250,40,200); + Noise(250,18,46); last_noise=tS; } break; @@ -378,8 +378,8 @@ U0 PlayShip() ode->drag_v3=0.0001; break; case CH_SPACE: - if (++main_mode_button.state==MMD_NUM_MODES) - main_mode_button.state=0; + if (++main_mode_bttn.state==MMD_NUM_MODES) + main_mode_bttn.state=0; GetMsg(,,1<drag_v2=0.000002; ode->drag_v3=0.0000001; @@ -411,12 +411,12 @@ ps_done: //Don't goto out of try U0 EditShip() { - I64 a1,a2; + I64 arg1,arg2; F64 wx,wy; Bool okay; MyMass *tmpm1=NULL,*tmpm2=NULL; - CCtrl *bt_edit_mode=CtrlButtonNew(0,5*FONT_HEIGHT+4,80,,EMD_NUM_MODES, - Define("ST_EDIT_MODES"),edit_mode_colors,&edit_mode_button); + CCtrl *bt_edit_mode=CtrlBttnNew(0,5*FONT_HEIGHT+4,80,,EMD_NUM_MODES, + Define("ST_EDIT_MODES"),edit_mode_colors,&edit_mode_bttn); ode->flags|=ODEF_PAUSED; MenuPush( "File {" @@ -453,13 +453,14 @@ U0 EditShip() ); DocClear; try { - while (main_mode_button.state==MMD_EDIT) { - switch (ScanMsg(&a1,&a2,1<next_mass==tmpm1) tmpm1->img=$IB,"<1>",BI=1$; @@ -471,26 +472,26 @@ U0 EditShip() case EMD_CONNECTOR: case EMD_THRUSTER: case EMD_MOVE: - S2W(ip.pos.x,ip.pos.y,&wx,&wy); + S2W(ms.pos.x,ms.pos.y,&wx,&wy); tmpm1=MassFind(ode,wx,wy); tmpm2=NULL; break; } break; - case MSG_IP_L_UP: - switch (edit_mode_button.state) { + case MSG_MS_L_UP: + switch (edit_mode_bttn.state) { case EMD_MASS: break; case EMD_SPRING: case EMD_CONNECTOR: case EMD_THRUSTER: - S2W(ip.pos.x,ip.pos.y,&wx,&wy); + S2W(ms.pos.x,ms.pos.y,&wx,&wy); if (tmpm1 && (tmpm2=MassFind(ode,wx,wy)) && tmpm1!=tmpm2) - PlaceSpring(tmpm1,tmpm2,edit_mode_button.state); + PlaceSpring(tmpm1,tmpm2,edit_mode_bttn.state); tmpm1=tmpm2=NULL; break; case EMD_MOVE: - S2W(ip.pos.x,ip.pos.y,&wx,&wy); + S2W(ms.pos.x,ms.pos.y,&wx,&wy); if (tmpm1) { tmpm1->x=wx; tmpm1->y=wy; @@ -501,10 +502,10 @@ U0 EditShip() break; } break; - case MSG_IP_MOVE: - switch (edit_mode_button.state) { + case MSG_MS_MOVE: + switch (edit_mode_bttn.state) { case EMD_MOVE: - S2W(ip.pos.x,ip.pos.y,&wx,&wy); + S2W(ms.pos.x,ms.pos.y,&wx,&wy); if (tmpm1) { tmpm1->x=wx; tmpm1->y=wy; @@ -514,20 +515,20 @@ U0 EditShip() break; } break; - case MSG_IP_R_DOWN: - if (++edit_mode_button.state==EMD_NUM_MODES) - edit_mode_button.state=0; + case MSG_MS_R_DOWN: + if (++edit_mode_bttn.state==EMD_NUM_MODES) + edit_mode_bttn.state=0; break; - case MSG_IP_R_UP: + case MSG_MS_R_UP: break; case MSG_KEY_DOWN: - switch (a1) { + switch (arg1) { case '\n': CleanUp; Init; break; case '0'...'9': - next_action_key=a1; + next_action_key=arg1; break; case 'c': CenterMasses; @@ -538,19 +539,19 @@ U0 EditShip() ode->drag_v3=0.0001; break; case 'v': - edit_mode_button.state=EMD_MOVE; + edit_mode_bttn.state=EMD_MOVE; break; case 'm': - edit_mode_button.state=EMD_MASS; + edit_mode_bttn.state=EMD_MASS; break; case 'n': - edit_mode_button.state=EMD_CONNECTOR; + edit_mode_bttn.state=EMD_CONNECTOR; break; case 's': - edit_mode_button.state=EMD_SPRING; + edit_mode_bttn.state=EMD_SPRING; break; case 't': - edit_mode_button.state=EMD_THRUSTER; + edit_mode_bttn.state=EMD_THRUSTER; break; case 'z': Spawn(&Zoom,2.0(I64)); @@ -559,8 +560,8 @@ U0 EditShip() Spawn(&Zoom,0.5(I64)); break; case CH_SPACE: - if (++main_mode_button.state==MMD_NUM_MODES) - main_mode_button.state=0; + if (++main_mode_bttn.state==MMD_NUM_MODES) + main_mode_bttn.state=0; GetMsg(,,1<flags|=ODEF_PAUSED; ode->drag_v2=0.000002; @@ -587,7 +588,7 @@ es_done: //Don't goto out of try okay=FALSE; } MenuPop; - CtrlButtonDel(bt_edit_mode); + CtrlBttnDel(bt_edit_mode); if (!okay) throw; } @@ -596,7 +597,7 @@ U0 Strut() { CCtrl *bt_main_mode; SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ - Fs->win_inhibit|=WIF_SELF_IP_L|WIF_SELF_IP_R|WIG_DBL_CLICK; + Fs->win_inhibit|=WIF_SELF_MS_L|WIF_SELF_MS_R|WIG_DBL_CLICK; AutoComplete; WinBorder; WinMax; @@ -613,9 +614,9 @@ U0 Strut() "Press $$GREEN$$$$FG$$ or $$GREEN$$$$FG$$ to zoom in/out.\n\n"; PressAKey; - bt_main_mode=CtrlButtonNew( + bt_main_mode=CtrlBttnNew( (GR_WIDTH-4*FONT_WIDTH-16)>>1,1*FONT_HEIGHT+4,80,,MMD_NUM_MODES, - Define("ST_MAIN_MODES"),main_mode_colors,&main_mode_button); + Define("ST_MAIN_MODES"),main_mode_colors,&main_mode_bttn); DocClear; Init; Fs->draw_it=&DrawIt; @@ -629,6 +630,6 @@ U0 Strut() Fs->catch_except=TRUE; } SettingsPop; - CtrlButtonDel(bt_main_mode); + CtrlBttnDel(bt_main_mode); } øÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚ùÿÿÿöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/Apps/TimeOut/Load.HC b/Apps/Titanium/Load.HC similarity index 71% rename from Apps/TimeOut/Load.HC rename to Apps/Titanium/Load.HC index 28cd615..a86d30c 100644 --- a/Apps/TimeOut/Load.HC +++ b/Apps/Titanium/Load.HC @@ -1,6 +1,6 @@ #help_index "Games" Cd(__DIR__);; -#include "TimeOut" +#include "Titanium" #help_index "" diff --git a/Apps/TimeOut/Run.HC b/Apps/Titanium/Run.HC similarity index 76% rename from Apps/TimeOut/Run.HC rename to Apps/Titanium/Run.HC index fd210c6..aa4c283 100644 --- a/Apps/TimeOut/Run.HC +++ b/Apps/Titanium/Run.HC @@ -1,3 +1,3 @@ Cd(__DIR__);; #include "Load" -TimeOut; \ No newline at end of file +Titanium; \ No newline at end of file diff --git a/Apps/TimeOut/TimeOut.HC b/Apps/Titanium/Titanium.HC similarity index 54% rename from Apps/TimeOut/TimeOut.HC rename to Apps/Titanium/Titanium.HC index 362fa04..56bd10b 100644 --- a/Apps/TimeOut/TimeOut.HC +++ b/Apps/Titanium/Titanium.HC @@ -1,32 +1,45 @@ -RegSetDftEntry("TempleOS/TimeOut","I64 best_score=0;\n"); -RegExeBranch("TempleOS/TimeOut"); +RegDft("TempleOS/Titanium","I64 best_score=0;\n"); +RegExe("TempleOS/Titanium"); #define MAP_HEIGHT 4096 -#define BULLET_LEN 10 -#define BULLET_SPEED 5 -#define MAX_BULLETS 128 +#define B_LEN 10 +#define B_SPEED 5 +#define B_NUM 128 class Bullet { I64 x,y,dx,dy,dx2,dy2; Bool dead,missile,pad[6]; -} b[MAX_BULLETS]; -I64 bullets_fired,missiles_fired; +} b[B_NUM]; +I64 bullets_fired,missile_bmp; I64 x,y,dx,dy,finish_line; F64 é,t0,tf,snd_timeout; #define PHASES_GROUPS 8 -#define MAX_ENEMY (PHASES_GROUPS*64) -#define MAX_FRIENDLY (PHASES_GROUPS*16) -#define MAX_UNIT (MAX_FRIENDLY+MAX_ENEMY) #define HACK_DIST 5 + +#define U_NUM_ENEMY (PHASES_GROUPS*64) +#define U_NUM_FRIENDLY (PHASES_GROUPS*16) +#define U_NUM (U_NUM_FRIENDLY+U_NUM_ENEMY) class Unit { I64 x,y,best_dd; - F64 é,phase,die_time,corpse_timeout; - Bool friendly,dead,tank,missile_strike,pad[4]; -} u[MAX_UNIT]; + F64 é,phase; + Bool friendly,dead,tank,pad[5]; +} u[U_NUM]; + +#define ET_MAN 0 +#define ET_TANK 1 +#define ET_MISSILE 2 +#define ET_BUILDING 3 +#define E_NUM 512 +class Explosion +{ + I64 x,y,num,type; + F64 t0,tf; + Bool dead,pad[7]; +} e[E_NUM]; I64 total_score,friendly_fire,enemy_by_friendly,friendly_left,enemy_left, main_loop_pass; @@ -35,6 +48,7 @@ $BG,14$ + $SP,"<1>",BI=1$ @@ -43,11 +57,11 @@ $BG,14$ $SP,"<2>",BI=2$ - $SP,"<3>",BI=3$ + $SP,"<4>",BI=4$ @@ -56,15 +70,14 @@ $BG,14$ -U8 *friendly_imgs[4]={$IB,"<4>",BI=4$,$IB,"<3>",BI=3$,$IB,"<4>",BI=4$,$IB,"<5>",BI=5$}; - - - - $SP,"<6>",BI=6$ +U8 *friendly_imgs[4]={$IB,"<5>",BI=5$,$IB,"<4>",BI=4$,$IB,"<5>",BI=5$,$IB,"<6>",BI=6$}; + + + $SP,"<7>",BI=7$ @@ -76,15 +89,16 @@ U8 *friendly_imgs[4]={$IB,"<4>",BI=4$,$IB,"<3>",BI=3$,$IB,"<4>",BI=4$,$IB,"<5>", -U8 *friendly_hacking_imgs[4]={$IB,"<7>",BI=7$,$IB,"<6>",BI=6$,$IB,"<7>",BI=7$,$IB,"<8>",BI=8$}; - - - - $SP,"<9>",BI=9$ + +U8 *friendly_hacking_imgs[4]={$IB,"<7>",BI=7$,$IB,"<8>",BI=8$,$IB,"<7>",BI=7$,$IB,"<9>",BI=9$}; + + + + $SP,"<10>",BI=10$ @@ -93,15 +107,14 @@ U8 *friendly_hacking_imgs[4]={$IB,"<7>",BI=7$,$IB,"<6>",BI=6$,$IB,"<7>",BI=7$,$I -U8 *enemy_imgs[4]={$IB,"<10>",BI=10$,$IB,"<9>",BI=9$,$IB,"<10>",BI=10$,$IB,"<11>",BI=11$}; - - - - $SP,"<12>",BI=12$ +U8 *enemy_imgs[4]={$IB,"<11>",BI=11$,$IB,"<10>",BI=10$,$IB,"<11>",BI=11$,$IB,"<12>",BI=12$}; + + + $SP,"<13>",BI=13$ @@ -113,13 +126,6 @@ U8 *enemy_imgs[4]={$IB,"<10>",BI=10$,$IB,"<9>",BI=9$,$IB,"<10>",BI=10$,$IB,"<11> - - - - - - - $SP,"<15>",BI=15$ @@ -131,119 +137,153 @@ U8 *enemy_imgs[4]={$IB,"<10>",BI=10$,$IB,"<9>",BI=9$,$IB,"<10>",BI=10$,$IB,"<11> -U8 *enemy_hacking_imgs[4]={$IB,"<13>",BI=13$,$IB,"<12>",BI=12$,$IB,"<13>",BI=13$,$IB,"<14>",BI=14$}; - - -#define LANDSCAPE_TYPES 4 - - - - - $SP,"<16>",BI=16$ + + + + + +U8 *enemy_hacking_imgs[4]={$IB,"<14>",BI=14$,$IB,"<13>",BI=13$,$IB,"<14>",BI=14$,$IB,"<15>",BI=15$}; + + + + + + + $SP,"<17>",BI=17$ - - - - $SP,"<18>",BI=18$ + + + $SP,"<19>",BI=19$ + + $SP,"<20>",BI=20$ + + + + $BG$ - -U8 *landscape_imgs[LANDSCAPE_TYPES]= - {$IB,"<16>",BI=16$,$IB,"<17>",BI=17$,$IB,"<18>",BI=18$,$IB,"<19>",BI=19$}; - -#define MAX_LANDSCAPE 128 +#define LS_NUM_APTS 20 +#define LS_NUM_MOUNTAINS 3 +#define LS_NUM 128 class LandScapeItem { I64 x,y; U8 *img; -} ls[MAX_LANDSCAPE]; +} ls[LS_NUM]; -U0 Explosion(CDC *dc,I64 num,I64 y) +#define LS_TYPES 4 +U8 *landscape_imgs[LS_TYPES]= + {$IB,"<17>",BI=17$,$IB,"<18>",BI=18$,$IB,"<19>",BI=19$,$IB,"<20>",BI=20$}; + +U0 ExplosionDraw(CDC *dc,Explosion *tmpe,I64 y) { - Unit *tmpu=&u[num]; I64 i,n1,n2,n3,n4,n5; - F64 t=(tS-tmpu->die_time)/(tmpu->corpse_timeout-tmpu->die_time); - Seed(num+1); - if (tmpu->missile_strike) { - n1=128; n2=30; n3=30; n4=99; n5=99; - } else if (tmpu->tank) { - n1=64; n2=14; n3=12; n4=60; n5=45; - } else { - n1=8; n2=0; n3=0; n4=18; n5=14; + F64 t=(tS-tmpe->t0)/(tmpe->tf-tmpe->t0); + Seed(tmpe->num+1); + + switch (tmpe->type) { + case ET_MAN: n1=8; n2=0; n3=0; n4=18; n5=28; break; + case ET_TANK: n1=64; n2=14; n3=24; n4=60; n5=90; break; + case ET_MISSILE: n1=128; n2=30; n3=60; n4=100; n5=200; break; + case ET_BUILDING: n1=128; n2=80; n3=80; n4=200; n5=300; break; } for (i=0;imissile_strike && i&2) { - if (i&1) { - if (i&4) - dc->color=RED; - else - dc->color=DKGRAY; - } else - dc->color=YELLOW; - } else if (tmpu->tank && i&2) { - if (i&1) { - if (i&4) - dc->color=RED; - else - dc->color=RED; - } else - dc->color=LTRED; - } else if (i&1) + if (i&2) + switch (tmpe->type) { + case ET_MAN: + if (i&1) + dc->color=WHITE; + else + dc->color=LTGRAY; + break; + case ET_MISSILE: + if (i&1) { + if (i&4) + dc->color=RED; + else + dc->color=DKGRAY; + } else + dc->color=YELLOW; + break; + case ET_TANK: + if (i&1) { + if (i&4) + dc->color=RED; + else + dc->color=DKGRAY; + } else + dc->color=LTRED; + break; + case ET_BUILDING: + if (i&1) { + if (i&4) + dc->color=BLACK; + else + dc->color=DKGRAY; + } else + dc->color=LTGRAY; + break; + } + else if (i&1) dc->color=WHITE; else dc->color=LTGRAY; - GrLine(dc,tmpu->x+n2*(Rand-.5),y+n3*Rand, - tmpu->x+n4*t*(Rand-.5),y-n5*t*Rand); + GrLine(dc,tmpe->x+n2*(Rand-.5),y+n3/2*Rand, + tmpe->x+n4*t*(Rand-.5),y-n5/2*t*Rand); } } I64 mp_not_done_flags; -U0 MPDrawMen(CDC *dc2) +U0 MPMenDraw(CDC *dc2) { CTask *task=dc2->win_task; CDC *dc=DCAlias(dc2,task); - I64 i,r[16],lo=Gs->num*MAX_UNIT/mp_cnt,hi=(Gs->num+1)*MAX_UNIT/mp_cnt, + I64 i,r[16],lo=Gs->num*U_NUM/mp_cnt,hi=(Gs->num+1)*U_NUM/mp_cnt, yy,phase,scroll_y=MAP_HEIGHT-100-100*(tS-t0); Unit *tmpu; + Explosion *tmpe; U8 *tmps,**_tmps; F64 tt,ts=tS; + for (i=Gs->num;iy-scroll_y)&(MAP_HEIGHT-1); + if (-32<=yy<=task->pix_bottom+32 && !tmpe->dead) { + ExplosionDraw(dc,tmpe,yy); + if (tS>tmpe->tf) + tmpe->dead=TRUE; + } + } for (i=lo;iy-scroll_y)&(MAP_HEIGHT-1); if (-32<=yy<=task->pix_bottom+32) { - if (tmpu->dead) { - if (tmpu->corpse_timeout) { - Explosion(dc,i,yy); - if (tS>tmpu->corpse_timeout) - tmpu->corpse_timeout=0; - } - } else { + if (!tmpu->dead) { Mat4x4IdentEqu(r); - Mat4x4RotY(r,tmpu->é+ã/2); + Mat4x4RotY(r,tmpu->é); Mat4x4RotX(r,ã/6); Mat4x4Scale(r,0.3); if (tmpu->tank) - SpriteMat3B(dc,tmpu->x,yy,GR_Z_ALL,$IB,"<15>",BI=15$,r); + Sprite3Mat4x4B(dc,tmpu->x,yy,GR_Z_ALL,$IB,"<16>",BI=16$,r); else { if (tmpu->best_dd<(2*HACK_DIST)*(2*HACK_DIST)) {//It's neat so times 2 if (tmpu->friendly) @@ -260,7 +300,7 @@ U0 MPDrawMen(CDC *dc2) } phase=tt; tt%=1.0; tmps=SpriteInterpolate(tt,_tmps[phase&3],_tmps[(phase+1)&3]); - SpriteMat3B(dc,tmpu->x,yy,GR_Z_ALL,tmps,r); + Sprite3Mat4x4B(dc,tmpu->x,yy,GR_Z_ALL,tmps,r); Free(tmps); } } @@ -273,16 +313,27 @@ U0 MPDrawMen(CDC *dc2) Seed; //Return Seth task to timer-based. } +U0 MissilePos(I64 m,F64 é,I64 *_x,I64 *_y) +{ + I64 n; + if (m<2) + n=-1; + else + n=1; + *_x=x+3.0*Cos(é)-(15.0-(m&1)<<3)*Cos(é-n*ã/2); + *_y=y+3.0*Sin(é)-(15.0-(m&1)<<3)*Sin(é-n*ã/2); +} + U0 DrawIt(CTask *task,CDC *dc) { - I64 i,yy,scroll_y=MAP_HEIGHT-100-100*(tS-t0); + I64 i,m,xx,yy,scroll_y=MAP_HEIGHT-100-100*(tS-t0); F64 tt,ts=tS; Bullet *tmpb; dc->color=ROPF_DITHER|BROWN<<16|YELLOW; GrRect3(dc,0,0,0,dc->width,dc->height); - for (i=0;ipix_bottom+32) Sprite3(dc,ls[i].x,yy,0,ls[i].img); @@ -294,26 +345,31 @@ U0 DrawIt(CTask *task,CDC *dc) GR_WIDTH,(finish_line-scroll_y)&(MAP_HEIGHT-1),0); dc->color=LTGRAY; - for (i=0,tmpb=b;idead) { if (tmpb->missile) - SpriteZ3B(dc,tmpb->x>>32,tmpb->y>>32,0,$IB,"<2>",BI=2$,Arg(tmpb->dx,tmpb->dy)); + Sprite3ZB(dc,tmpb->x>>32,tmpb->y>>32,0,$IB,"<2>",BI=2$,ã/2+Arg(tmpb->dx,tmpb->dy)); else GrLine(dc,tmpb->x>>32,tmpb->y>>32, - (tmpb->x+tmpb->dx*BULLET_LEN)>>32, - (tmpb->y+tmpb->dy*BULLET_LEN)>>32); + (tmpb->x+tmpb->dy*B_LEN)>>32, + (tmpb->y+tmpb->dx*B_LEN)>>32); } DCDepthBufAlloc(dc); mp_not_done_flags=1<depth_buf); dc->depth_buf=NULL; - SpriteZ3B(dc,x,y,0,$IB,"<1>",BI=1$,é); + for (m=0;m<4;m++) + if (Bt(&missile_bmp,m)) { + MissilePos(m,é,&xx,&yy); + Sprite3ZB(dc,xx,yy,0,$IB,"<3>",BI=3$,é); + } + Sprite3ZB(dc,x,y,0,$IB,"<1>",BI=1$,é); if (tf) { tt=tf; @@ -327,26 +383,42 @@ U0 DrawIt(CTask *task,CDC *dc) game_over=TRUE; } dc->color=BLACK; - GrPrint(dc,0,0,"Enemy:%d Friends:%d Friendly Fire:%d Time:%6.2f " - "Bullets:%d Missiles:%d",enemy_left,friendly_left,friendly_fire, - tt-t0,bullets_fired,missiles_fired); + GrPrint(dc,0,0,"Enemy:%d Friends:%d Friendly Fire:%d Time:%6.2f Bullets:%d", + enemy_left,friendly_left,friendly_fire,tt-t0,bullets_fired); GrPrint(dc,0,8,"Total Score:%,d High Score:%,d", total_score,best_score); } +Explosion *ExplosionNew(I64 x,I64 y) +{ + I64 i; + for (i=0;idead=TRUE; - tmpu->die_time=tS; if (by_human) { - if (tmpu->missile_strike) - tmpu->corpse_timeout=tS+1.0; - else if (tmpu->tank) - tmpu->corpse_timeout=tS+0.40; - else - tmpu->corpse_timeout=tS+0.20; - } else - tmpu->corpse_timeout=0; + if (tmpe=ExplosionNew(tmpu->x,tmpu->y)) { + tmpe->t0=tS; + if (tmpu->tank) { + tmpe->type=ET_TANK; + tmpe->tf=tmpe->t0+0.40; + } else { + tmpe->type=ET_MAN; + tmpe->tf=tmpe->t0+0.20; + } + } + } if (tmpu->friendly) { friendly_left--; @@ -360,28 +432,59 @@ U0 ManDie(Unit *tmpu,Bool by_human) if (by_human && !snd_timeout) { snd_timeout=tS+0.01; if (tmpu->friendly) - Snd(200); + Snd(46); else - Snd(50); + Snd(22); + } +} + +U0 ExplosionDo(I64 x,I64 y,I64 scroll_y) +{ + I64 i,x2,y2; + Explosion *tmpe; + Unit *tmpu; + if (tmpe=ExplosionNew(x,y+scroll_y)) { + tmpe->t0=tS; + tmpe->type=ET_MISSILE; + tmpe->tf=tmpe->t0+1.0; + } + for (i=0,tmpu=u;idead) { + x2=tmpu->x; + y2=(tmpu->y-scroll_y)&(MAP_HEIGHT-1); + if (SqrI64(x-x2)+SqrI64(y-y2)<100*100) + ManDie(tmpu,TRUE); + } + } + for (i=0;it0=tS; + tmpe->type=ET_BUILDING; + tmpe->tf=tmpe->t0+2.0; + } + } } } U0 CheckCollisions() { - I64 i,i2,x,y,x2,y2,scroll_y=MAP_HEIGHT-100-100*(tS-t0); - Unit *tmpu,*tmpu2; + I64 i,n1,x,y,scroll_y=MAP_HEIGHT-100-100*(tS-t0); + Unit *tmpu; Bullet *tmpb; CDC *dc2=DCNew(GR_WIDTH,GR_HEIGHT); dc2->color=LTRED; - for (i=0,tmpb=b;idead && !tmpb->missile) //Bullets not missiles GrLine(dc2,tmpb->x>>32,tmpb->y>>32, - (tmpb->x+tmpb->dx*BULLET_LEN)>>32, - (tmpb->y+tmpb->dy*BULLET_LEN)>>32); + (tmpb->x+tmpb->dx*B_LEN)>>32, + (tmpb->y+tmpb->dy*B_LEN)>>32); dc2->color =ROP_COLLISION; dc2->bkcolor=BLACK; - for (i=0,tmpu=u;idead) { x=tmpu->x; y=(tmpu->y-scroll_y)&(MAP_HEIGHT-1); @@ -395,26 +498,28 @@ U0 CheckCollisions() } DCDel(dc2); - for (i=0,tmpb=b;idead && tmpb->missile) { //Missiles not bullets x=tmpb->x>>32; y=tmpb->y>>32; - for (i=0,tmpu=u;idead && AbsI64(x-tmpu->x-3)+ - AbsI64(y-(tmpu->y-scroll_y)&(MAP_HEIGHT-1)+2)<7+14*tmpu->tank) { + for (i=0,tmpu=u;itank) + n1=16; + else + n1=6; + if (!tmpu->dead && AbsI64(x-tmpu->x-n1)+ + AbsI64(y-(tmpu->y-scroll_y)&(MAP_HEIGHT-1)+n1)dead=TRUE; - tmpu->missile_strike=TRUE; - ManDie(tmpu,TRUE); - for (i2=0,tmpu2=u;i2dead) { - x2=tmpu2->x; - y2=(tmpu2->y-scroll_y)&(MAP_HEIGHT-1); - if (SqrI64(x-x2)+SqrI64(y-y2)<100*100) - ManDie(tmpu2,TRUE); - } - } + ExplosionDo(x,y,scroll_y); } } + if (!tmpb->dead) + for (i=0;idead=TRUE; + ExplosionDo(x,y,scroll_y); + } } } @@ -424,7 +529,7 @@ U0 Init() Unit *tmpu; snd_timeout=0; - Snd(0); + Snd; total_score=0; game_over=FALSE; @@ -435,23 +540,23 @@ U0 Init() finish_line=scroll_y+y; dx=0; dy=0; - é=0; + é=-ã/2; - for (i=0;ipix_width-100)*RandU32/MAX_U32+50; ls[i].y=(MAP_HEIGHT-100)*RandU32/MAX_U32+50; - ls[i].img=landscape_imgs[RandU16%(LANDSCAPE_TYPES-2)]; + ls[i].img=landscape_imgs[RandU16%(LS_TYPES-2)]; } - for (i=0;i<2;i++) - ls[i].img=landscape_imgs[LANDSCAPE_TYPES-2]; //mountain + for (i=0;ifriendly=TRUE; if (!(i&7)) { xx=(Fs->pix_width-200)*RandU32/MAX_U32; @@ -467,21 +572,23 @@ U0 Init() tmpu->tank=TRUE; } tmpu->dead=FALSE; - tmpu->missile_strike=FALSE; tmpu->x=xx+64*RandI32/MAX_I32+100; tmpu->y=yy+64*RandU32/MAX_I32-64+100; tmpu->best_dd=MAX_I64; - tmpu->é=0; + tmpu->é=ã/2; tmpu->phase=2*ã*Rand; - tmpu->corpse_timeout=0; } - for (i=0;ix=j<<32; - - j=y-28.0*Cos(é); + j=y+28.0*Sin(é); tmpb->y=j<<32; - tmpb->dx2=(BULLET_SPEED*Sin(é)+dx)*0x100000000; - tmpb->dy2=-BULLET_SPEED*Cos(é)*0x100000000; + tmpb->dx2=(B_SPEED*Cos(é)+dx)*0x100000000; + tmpb->dy2= B_SPEED*Sin(é)*0x100000000; a=Arg(tmpb->dx2,tmpb->dy2); - tmpb->dx=Cos(a)*0x100000000; - tmpb->dy=Sin(a)*0x100000000; + tmpb->dx=Sin(a)*0x100000000; + tmpb->dy=Cos(a)*0x100000000; bullets_fired++; tmpb->dead=FALSE; tmpb->missile=FALSE; if (!snd_timeout) { snd_timeout=tS+0.0005; - Snd(1000); + Snd(74); } } -U0 FireMissile(I64 n) +Bool FireMissile(I64 n) { - I64 i,j; + I64 i,m; F64 a; Bullet *tmpb; - for (i=0;ix=j<<32; + m=n; + if (Btr(&missile_bmp,++m) || Btr(&missile_bmp,++m)) + res=TRUE; - j=y+10.0*Cos(é)-20.0*Cos(é+n*ã/2); - tmpb->y=j<<32; + if (res) { + for (i=0;idx2=(BULLET_SPEED*Sin(é)+dx)*0x100000000; - tmpb->dy2=-BULLET_SPEED*Cos(é)*0x100000000; - a=Arg(tmpb->dx2,tmpb->dy2); - tmpb->dx=Cos(a)*0x100000000; - tmpb->dy=Sin(a)*0x100000000; - missiles_fired++; - tmpb->dead=FALSE; - tmpb->missile=TRUE; - if (!snd_timeout) { - snd_timeout=tS+0.0005; - Snd(1000); + MissilePos(m,é,&tmpb->x,&tmpb->y); + tmpb->x<<=32; + tmpb->y<<=32; + + tmpb->dx2=(B_SPEED*Cos(é)+dx)*0x100000000; + tmpb->dy2= B_SPEED*Sin(é)*0x100000000; + a=Arg(tmpb->dx2,tmpb->dy2); + tmpb->dx=Sin(a)*0x100000000; + tmpb->dy=Cos(a)*0x100000000; + tmpb->dead=FALSE; + tmpb->missile=TRUE; + if (!snd_timeout) { + snd_timeout=tS+0.0005; + Snd(74); + } } } U0 MenMove(I64 phase_group) { I64 i,j,dd,best,best_dd; - for (i=phase_group;isnd_timeout) { snd_timeout=0; - Snd(0); + Snd; } SleepUntil(next_update_jiffy); - total_score=3*(MAX_ENEMY-enemy_left)+5*enemy_by_friendly - -100*friendly_fire-10*(tS-t0)-bullets_fired-50*missiles_fired; + total_score=3*(U_NUM_ENEMY-enemy_left)+5*enemy_by_friendly + -100*friendly_fire-10*(tS-t0)-bullets_fired; if (game_over) { tf=tS; Sleep(750); FlushMsgs; - while (!ScanKey(&ch)&&friendly_left) { + while (!ScanKey(&ch)&&friendly_left||tS-tf<1.5) { total_score+=250; - Snd(2000); Sleep(150); - Snd(0); Sleep(50); + Snd(86); Sleep(150); + Snd; Sleep(50); friendly_left--; } total_score+=250*friendly_left; @@ -817,9 +927,9 @@ to_done: PutExcept; SettingsPop; MenuPop; - RegWriteBranch("TempleOS/TimeOut","I64 best_score=%d;\n",best_score); + RegWrite("TempleOS/Titanium","I64 best_score=%d;\n",best_score); } -RóÿÿÿÏÿÿÿ2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +RóÿÿÿÏÿÿÿ2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ @@ -1041,87 +1151,87 @@ to_done: -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒìÿÿÿêÿÿÿ&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’ ÂÿÿÿÃÿÿÿ{?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊp¨ÝÿÿÿýÿÿÿýÿÿÿÝÿÿÿýÿÿÿáÿÿÿýÿÿÿýÿÿÿáÿÿÿýÿÿÿÝÿÿÿýÿÿÿÝÿÿÿáÿÿÿýÿÿÿáÿÿÿáÿÿÿýÿÿÿûÿÿÿáÿÿÿýÿÿÿðÿÿÿýÿÿÿûÿÿÿðÿÿÿýÿÿÿáÿÿÿûÿÿÿáÿÿÿðÿÿÿûÿÿÿðÿÿÿâÿÿÿþÿÿÿãÿÿÿÿÿÿÿèÿÿÿéÿÿÿàÿÿÿáÿÿÿçÿÿÿèÿÿÿéÿÿÿêÿÿÿìÿÿÿíÿÿÿæÿÿÿçÿÿÿêÿÿÿëÿÿÿ ìÿÿÿíÿÿÿ íÿÿÿ îÿÿÿ êÿÿÿëÿÿÿ ìÿÿÿ íÿÿÿ ûÿÿÿáÿÿÿÿÿÿÿúÿÿÿáÿÿÿúÿÿÿèÿÿÿûÿÿÿøÿÿÿèÿÿÿüÿÿÿûÿÿÿâÿÿÿúÿÿÿâÿÿÿúÿÿÿèÿÿÿýÿÿÿøÿÿÿèÿÿÿþÿÿÿúÿÿÿèÿÿÿûÿÿÿøÿÿÿèÿÿÿüÿÿÿùÿÿÿíÿÿÿøÿÿÿøÿÿÿíÿÿÿùÿÿÿúÿÿÿèÿÿÿýÿÿÿøÿÿÿèÿÿÿþÿÿÿùÿÿÿîÿÿÿúÿÿÿøÿÿÿîÿÿÿûÿÿÿùÿÿÿíÿÿÿùÿÿÿøÿÿÿíÿÿÿúÿÿÿùÿÿÿðÿÿÿøÿÿÿ÷ÿÿÿðÿÿÿøÿÿÿùÿÿÿîÿÿÿúÿÿÿøÿÿÿîÿÿÿúÿÿÿùÿÿÿñÿÿÿøÿÿÿ÷ÿÿÿñÿÿÿùÿÿÿîÿÿÿÿÿÿÿïÿÿÿÿÿÿÿóÿÿÿúÿÿÿôÿÿÿúÿÿÿðÿÿÿñÿÿÿõÿÿÿüÿÿÿöÿÿÿüÿÿÿóÿÿÿúÿÿÿôÿÿÿúÿÿÿøÿÿÿõÿÿÿùÿÿÿõÿÿÿõÿÿÿüÿÿÿöÿÿÿüÿÿÿúÿÿÿ÷ÿÿÿûÿÿÿ÷ÿÿÿúÿÿÿóÿÿÿûÿÿÿôÿÿÿÿÿÿÿøÿÿÿøÿÿÿøÿÿÿõÿÿÿùÿÿÿõÿÿÿýÿÿÿùÿÿÿýÿÿÿúÿÿÿþÿÿÿñÿÿÿÿÿÿÿüÿÿÿñÿÿÿÿÿÿÿþÿÿÿöÿÿÿûÿÿÿöÿÿÿþÿÿÿîÿÿÿüÿÿÿîÿÿÿþÿÿÿóÿÿÿûÿÿÿóÿÿÿþÿÿÿõÿÿÿûÿÿÿõÿÿÿýÿÿÿüÿÿÿûÿÿÿüÿÿÿþÿÿÿôÿÿÿûÿÿÿôÿÿÿýÿÿÿúÿÿÿûÿÿÿúÿÿÿýÿÿÿþÿÿÿûÿÿÿÿÿÿÿýÿÿÿüÿÿÿ úÿÿÿýÿÿÿ ýÿÿÿûÿÿÿûÿÿÿüÿÿÿýÿÿÿùÿÿÿ úÿÿÿúÿÿÿ   - -       -  -   -      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmokÊp¨ÝÿÿÿýÿÿÿýÿÿÿÝÿÿÿýÿÿÿáÿÿÿýÿÿÿýÿÿÿáÿÿÿýÿÿÿÝÿÿÿýÿÿÿÝÿÿÿáÿÿÿýÿÿÿáÿÿÿáÿÿÿýÿÿÿûÿÿÿáÿÿÿýÿÿÿðÿÿÿýÿÿÿûÿÿÿðÿÿÿýÿÿÿáÿÿÿûÿÿÿáÿÿÿðÿÿÿûÿÿÿðÿÿÿáÿÿÿþÿÿÿâÿÿÿþÿÿÿèÿÿÿþÿÿÿéÿÿÿþÿÿÿáÿÿÿâÿÿÿèÿÿÿéÿÿÿèÿÿÿþÿÿÿéÿÿÿþÿÿÿïÿÿÿþÿÿÿðÿÿÿþÿÿÿèÿÿÿéÿÿÿïÿÿÿðÿÿÿïÿÿÿÿÿÿÿðÿÿÿÿÿÿÿ òÿÿÿÿÿÿÿóÿÿÿÿÿÿÿïÿÿÿðÿÿÿ òÿÿÿóÿÿÿûÿÿÿâÿÿÿþÿÿÿúÿÿÿâÿÿÿþÿÿÿúÿÿÿéÿÿÿþÿÿÿøÿÿÿéÿÿÿþÿÿÿûÿÿÿâÿÿÿúÿÿÿâÿÿÿúÿÿÿéÿÿÿøÿÿÿéÿÿÿúÿÿÿéÿÿÿþÿÿÿøÿÿÿéÿÿÿþÿÿÿùÿÿÿïÿÿÿþÿÿÿøÿÿÿïÿÿÿþÿÿÿúÿÿÿéÿÿÿøÿÿÿéÿÿÿùÿÿÿïÿÿÿøÿÿÿïÿÿÿùÿÿÿïÿÿÿÿÿÿÿøÿÿÿïÿÿÿÿÿÿÿùÿÿÿòÿÿÿÿÿÿÿ÷ÿÿÿòÿÿÿÿÿÿÿùÿÿÿïÿÿÿøÿÿÿïÿÿÿùÿÿÿòÿÿÿ÷ÿÿÿòÿÿÿïÿÿÿþÿÿÿðÿÿÿþÿÿÿöÿÿÿþÿÿÿ÷ÿÿÿþÿÿÿïÿÿÿðÿÿÿöÿÿÿ÷ÿÿÿöÿÿÿþÿÿÿ÷ÿÿÿþÿÿÿýÿÿÿþÿÿÿýÿÿÿþÿÿÿöÿÿÿ÷ÿÿÿýÿÿÿýÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿþÿÿÿýÿÿÿÿÿÿÿýÿÿÿýÿÿÿþÿÿÿðÿÿÿþÿÿÿüÿÿÿðÿÿÿþÿÿÿþÿÿÿöÿÿÿþÿÿÿûÿÿÿöÿÿÿþÿÿÿþÿÿÿðÿÿÿüÿÿÿðÿÿÿþÿÿÿöÿÿÿûÿÿÿöÿÿÿþÿÿÿöÿÿÿþÿÿÿûÿÿÿöÿÿÿþÿÿÿýÿÿÿýÿÿÿþÿÿÿûÿÿÿýÿÿÿþÿÿÿþÿÿÿöÿÿÿûÿÿÿöÿÿÿýÿÿÿýÿÿÿûÿÿÿýÿÿÿýÿÿÿÿÿÿÿþÿÿÿûÿÿÿÿÿÿÿþÿÿÿýÿÿÿÿÿÿÿúÿÿÿÿÿÿÿýÿÿÿýÿÿÿþÿÿÿûÿÿÿýÿÿÿþÿÿÿýÿÿÿýÿÿÿúÿÿÿýÿÿÿ  - -       -  -   -      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmokÊp¨ÝÿÿÿýÿÿÿýÿÿÿÝÿÿÿýÿÿÿáÿÿÿýÿÿÿýÿÿÿáÿÿÿýÿÿÿÝÿÿÿýÿÿÿÝÿÿÿáÿÿÿýÿÿÿáÿÿÿáÿÿÿýÿÿÿûÿÿÿáÿÿÿýÿÿÿðÿÿÿýÿÿÿûÿÿÿðÿÿÿýÿÿÿáÿÿÿûÿÿÿáÿÿÿðÿÿÿûÿÿÿðÿÿÿáÿÿÿâÿÿÿçÿÿÿüÿÿÿèÿÿÿüÿÿÿâÿÿÿãÿÿÿèÿÿÿýÿÿÿéÿÿÿýÿÿÿçÿÿÿüÿÿÿèÿÿÿüÿÿÿíÿÿÿùÿÿÿíÿÿÿùÿÿÿèÿÿÿýÿÿÿéÿÿÿýÿÿÿíÿÿÿúÿÿÿîÿÿÿúÿÿÿíÿÿÿùÿÿÿíÿÿÿùÿÿÿ ðÿÿÿøÿÿÿðÿÿÿøÿÿÿíÿÿÿúÿÿÿîÿÿÿúÿÿÿ ðÿÿÿùÿÿÿñÿÿÿùÿÿÿûÿÿÿãÿÿÿþÿÿÿúÿÿÿãÿÿÿþÿÿÿúÿÿÿéÿÿÿøÿÿÿéÿÿÿûÿÿÿáÿÿÿúÿÿÿáÿÿÿúÿÿÿçÿÿÿøÿÿÿçÿÿÿúÿÿÿéÿÿÿøÿÿÿéÿÿÿùÿÿÿíÿÿÿøÿÿÿíÿÿÿúÿÿÿçÿÿÿøÿÿÿçÿÿÿùÿÿÿêÿÿÿ øÿÿÿêÿÿÿ ùÿÿÿìÿÿÿøÿÿÿìÿÿÿùÿÿÿîÿÿÿ ÷ÿÿÿîÿÿÿ ùÿÿÿëÿÿÿøÿÿÿëÿÿÿùÿÿÿìÿÿÿ ÷ÿÿÿìÿÿÿ ðÿÿÿþÿÿÿñÿÿÿÿÿÿÿõÿÿÿöÿÿÿîÿÿÿïÿÿÿóÿÿÿôÿÿÿõÿÿÿöÿÿÿüÿÿÿýÿÿÿóÿÿÿôÿÿÿúÿÿÿûÿÿÿþÿÿÿþÿÿÿüÿÿÿ üÿÿÿ üÿÿÿüÿÿÿúÿÿÿ úÿÿÿ þÿÿÿïÿÿÿþÿÿÿüÿÿÿïÿÿÿÿÿÿÿþÿÿÿôÿÿÿúÿÿÿûÿÿÿôÿÿÿúÿÿÿþÿÿÿðÿÿÿüÿÿÿðÿÿÿþÿÿÿõÿÿÿûÿÿÿûÿÿÿõÿÿÿüÿÿÿþÿÿÿôÿÿÿúÿÿÿûÿÿÿôÿÿÿúÿÿÿýÿÿÿùÿÿÿõÿÿÿûÿÿÿùÿÿÿöÿÿÿþÿÿÿõÿÿÿûÿÿÿûÿÿÿõÿÿÿüÿÿÿýÿÿÿúÿÿÿ÷ÿÿÿûÿÿÿúÿÿÿøÿÿÿýÿÿÿûÿÿÿóÿÿÿûÿÿÿûÿÿÿóÿÿÿýÿÿÿøÿÿÿúÿÿÿøÿÿÿýÿÿÿøÿÿÿõÿÿÿûÿÿÿøÿÿÿõÿÿÿýÿÿÿýÿÿÿúÿÿÿúÿÿÿýÿÿÿúÿÿÿ  - -       -  -   -      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok Êp¨ÝÿÿÿýÿÿÿýÿÿÿÝÿÿÿýÿÿÿáÿÿÿýÿÿÿýÿÿÿáÿÿÿýÿÿÿÝÿÿÿýÿÿÿÝÿÿÿáÿÿÿýÿÿÿáÿÿÿáÿÿÿýÿÿÿûÿÿÿáÿÿÿýÿÿÿðÿÿÿýÿÿÿûÿÿÿðÿÿÿýÿÿÿáÿÿÿûÿÿÿáÿÿÿðÿÿÿûÿÿÿðÿÿÿâÿÿÿþÿÿÿãÿÿÿÿÿÿÿèÿÿÿéÿÿÿàÿÿÿáÿÿÿçÿÿÿèÿÿÿéÿÿÿêÿÿÿìÿÿÿíÿÿÿæÿÿÿçÿÿÿêÿÿÿëÿÿÿ ìÿÿÿíÿÿÿ íÿÿÿ îÿÿÿ êÿÿÿëÿÿÿ ìÿÿÿ íÿÿÿ ûÿÿÿáÿÿÿÿÿÿÿúÿÿÿáÿÿÿúÿÿÿèÿÿÿûÿÿÿøÿÿÿèÿÿÿüÿÿÿûÿÿÿâÿÿÿúÿÿÿâÿÿÿúÿÿÿèÿÿÿýÿÿÿøÿÿÿèÿÿÿþÿÿÿúÿÿÿèÿÿÿûÿÿÿøÿÿÿèÿÿÿüÿÿÿùÿÿÿíÿÿÿøÿÿÿøÿÿÿíÿÿÿùÿÿÿúÿÿÿèÿÿÿýÿÿÿøÿÿÿèÿÿÿþÿÿÿùÿÿÿîÿÿÿúÿÿÿøÿÿÿîÿÿÿûÿÿÿùÿÿÿíÿÿÿùÿÿÿøÿÿÿíÿÿÿúÿÿÿùÿÿÿðÿÿÿøÿÿÿ÷ÿÿÿðÿÿÿøÿÿÿùÿÿÿîÿÿÿúÿÿÿøÿÿÿîÿÿÿúÿÿÿùÿÿÿñÿÿÿøÿÿÿ÷ÿÿÿñÿÿÿùÿÿÿîÿÿÿÿÿÿÿïÿÿÿÿÿÿÿóÿÿÿúÿÿÿôÿÿÿúÿÿÿðÿÿÿñÿÿÿõÿÿÿüÿÿÿöÿÿÿüÿÿÿóÿÿÿúÿÿÿôÿÿÿúÿÿÿøÿÿÿõÿÿÿùÿÿÿõÿÿÿõÿÿÿüÿÿÿöÿÿÿüÿÿÿúÿÿÿ÷ÿÿÿûÿÿÿ÷ÿÿÿúÿÿÿóÿÿÿûÿÿÿôÿÿÿÿÿÿÿøÿÿÿøÿÿÿøÿÿÿõÿÿÿùÿÿÿõÿÿÿýÿÿÿùÿÿÿýÿÿÿúÿÿÿþÿÿÿñÿÿÿÿÿÿÿüÿÿÿñÿÿÿÿÿÿÿþÿÿÿöÿÿÿûÿÿÿöÿÿÿþÿÿÿîÿÿÿüÿÿÿîÿÿÿþÿÿÿóÿÿÿûÿÿÿóÿÿÿþÿÿÿõÿÿÿûÿÿÿõÿÿÿýÿÿÿüÿÿÿûÿÿÿüÿÿÿþÿÿÿôÿÿÿûÿÿÿôÿÿÿýÿÿÿúÿÿÿûÿÿÿúÿÿÿýÿÿÿþÿÿÿûÿÿÿÿÿÿÿýÿÿÿüÿÿÿ úÿÿÿýÿÿÿ ýÿÿÿûÿÿÿûÿÿÿüÿÿÿýÿÿÿùÿÿÿ úÿÿÿúÿÿÿ   +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒìÿÿÿêÿÿÿ&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’ ÂÿÿÿÃÿÿÿ{?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +Êp¨ýÿÿÿÝÿÿÿþÿÿÿýÿÿÿÝÿÿÿýÿÿÿáÿÿÿþÿÿÿýÿÿÿáÿÿÿÝÿÿÿþÿÿÿÝÿÿÿáÿÿÿþÿÿÿáÿÿÿýÿÿÿáÿÿÿüÿÿÿýÿÿÿáÿÿÿýÿÿÿðÿÿÿüÿÿÿýÿÿÿðÿÿÿáÿÿÿüÿÿÿáÿÿÿðÿÿÿüÿÿÿðÿÿÿþÿÿÿâÿÿÿúÿÿÿÿÿÿÿãÿÿÿüÿÿÿèÿÿÿùÿÿÿéÿÿÿûÿÿÿàÿÿÿúÿÿÿáÿÿÿüÿÿÿçÿÿÿùÿÿÿèÿÿÿûÿÿÿéÿÿÿùÿÿÿêÿÿÿûÿÿÿìÿÿÿøÿÿÿíÿÿÿùÿÿÿæÿÿÿùÿÿÿçÿÿÿûÿÿÿêÿÿÿøÿÿÿ ëÿÿÿùÿÿÿìÿÿÿøÿÿÿ íÿÿÿùÿÿÿ íÿÿÿ÷ÿÿÿ îÿÿÿùÿÿÿêÿÿÿøÿÿÿ ëÿÿÿùÿÿÿ ìÿÿÿ÷ÿÿÿ íÿÿÿùÿÿÿÿÿÿÿáÿÿÿáÿÿÿûÿÿÿèÿÿÿüÿÿÿèÿÿÿâÿÿÿâÿÿÿýÿÿÿèÿÿÿþÿÿÿèÿÿÿûÿÿÿèÿÿÿüÿÿÿèÿÿÿøÿÿÿíÿÿÿùÿÿÿíÿÿÿýÿÿÿèÿÿÿþÿÿÿèÿÿÿúÿÿÿîÿÿÿûÿÿÿîÿÿÿùÿÿÿíÿÿÿúÿÿÿíÿÿÿøÿÿÿðÿÿÿøÿÿÿðÿÿÿ úÿÿÿîÿÿÿúÿÿÿîÿÿÿøÿÿÿñÿÿÿùÿÿÿñÿÿÿ ÿÿÿÿîÿÿÿýÿÿÿÿÿÿÿïÿÿÿÿÿÿÿúÿÿÿóÿÿÿüÿÿÿúÿÿÿôÿÿÿþÿÿÿðÿÿÿýÿÿÿñÿÿÿÿÿÿÿüÿÿÿõÿÿÿüÿÿÿüÿÿÿöÿÿÿþÿÿÿúÿÿÿóÿÿÿüÿÿÿúÿÿÿôÿÿÿþÿÿÿõÿÿÿøÿÿÿûÿÿÿõÿÿÿùÿÿÿþÿÿÿüÿÿÿõÿÿÿüÿÿÿüÿÿÿöÿÿÿþÿÿÿ÷ÿÿÿúÿÿÿûÿÿÿ÷ÿÿÿûÿÿÿþÿÿÿóÿÿÿúÿÿÿûÿÿÿôÿÿÿûÿÿÿþÿÿÿøÿÿÿÿÿÿÿúÿÿÿøÿÿÿýÿÿÿõÿÿÿøÿÿÿûÿÿÿõÿÿÿùÿÿÿþÿÿÿùÿÿÿýÿÿÿúÿÿÿúÿÿÿýÿÿÿýÿÿÿÿÿÿÿñÿÿÿÿÿÿÿñÿÿÿöÿÿÿöÿÿÿîÿÿÿîÿÿÿóÿÿÿóÿÿÿõÿÿÿõÿÿÿüÿÿÿüÿÿÿôÿÿÿôÿÿÿúÿÿÿúÿÿÿþÿÿÿÿÿÿÿ üÿÿÿ ýÿÿÿûÿÿÿüÿÿÿ ùÿÿÿ úÿÿÿ       -     ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok -Êp¨ÝÿÿÿýÿÿÿýÿÿÿÝÿÿÿýÿÿÿáÿÿÿýÿÿÿýÿÿÿáÿÿÿýÿÿÿÝÿÿÿýÿÿÿÝÿÿÿáÿÿÿýÿÿÿáÿÿÿáÿÿÿýÿÿÿûÿÿÿáÿÿÿýÿÿÿðÿÿÿýÿÿÿûÿÿÿðÿÿÿýÿÿÿáÿÿÿûÿÿÿáÿÿÿðÿÿÿûÿÿÿðÿÿÿáÿÿÿþÿÿÿâÿÿÿþÿÿÿèÿÿÿþÿÿÿéÿÿÿþÿÿÿáÿÿÿâÿÿÿèÿÿÿéÿÿÿèÿÿÿþÿÿÿéÿÿÿþÿÿÿïÿÿÿþÿÿÿðÿÿÿþÿÿÿèÿÿÿéÿÿÿïÿÿÿðÿÿÿïÿÿÿÿÿÿÿðÿÿÿÿÿÿÿ òÿÿÿÿÿÿÿóÿÿÿÿÿÿÿïÿÿÿðÿÿÿ òÿÿÿóÿÿÿûÿÿÿâÿÿÿþÿÿÿúÿÿÿâÿÿÿþÿÿÿúÿÿÿéÿÿÿþÿÿÿøÿÿÿéÿÿÿþÿÿÿûÿÿÿâÿÿÿúÿÿÿâÿÿÿúÿÿÿéÿÿÿøÿÿÿéÿÿÿúÿÿÿéÿÿÿþÿÿÿøÿÿÿéÿÿÿþÿÿÿùÿÿÿïÿÿÿþÿÿÿøÿÿÿïÿÿÿþÿÿÿúÿÿÿéÿÿÿøÿÿÿéÿÿÿùÿÿÿïÿÿÿøÿÿÿïÿÿÿùÿÿÿïÿÿÿÿÿÿÿøÿÿÿïÿÿÿÿÿÿÿùÿÿÿòÿÿÿÿÿÿÿ÷ÿÿÿòÿÿÿÿÿÿÿùÿÿÿïÿÿÿøÿÿÿïÿÿÿùÿÿÿòÿÿÿ÷ÿÿÿòÿÿÿïÿÿÿþÿÿÿðÿÿÿþÿÿÿöÿÿÿþÿÿÿ÷ÿÿÿþÿÿÿïÿÿÿðÿÿÿöÿÿÿ÷ÿÿÿöÿÿÿþÿÿÿ÷ÿÿÿþÿÿÿýÿÿÿþÿÿÿýÿÿÿþÿÿÿöÿÿÿ÷ÿÿÿýÿÿÿýÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿþÿÿÿýÿÿÿÿÿÿÿýÿÿÿýÿÿÿþÿÿÿðÿÿÿþÿÿÿüÿÿÿðÿÿÿþÿÿÿþÿÿÿöÿÿÿþÿÿÿûÿÿÿöÿÿÿþÿÿÿþÿÿÿðÿÿÿüÿÿÿðÿÿÿþÿÿÿöÿÿÿûÿÿÿöÿÿÿþÿÿÿöÿÿÿþÿÿÿûÿÿÿöÿÿÿþÿÿÿýÿÿÿýÿÿÿþÿÿÿûÿÿÿýÿÿÿþÿÿÿþÿÿÿöÿÿÿûÿÿÿöÿÿÿýÿÿÿýÿÿÿûÿÿÿýÿÿÿýÿÿÿÿÿÿÿþÿÿÿûÿÿÿÿÿÿÿþÿÿÿýÿÿÿÿÿÿÿúÿÿÿÿÿÿÿýÿÿÿýÿÿÿþÿÿÿûÿÿÿýÿÿÿþÿÿÿýÿÿÿýÿÿÿúÿÿÿýÿÿÿ  +     ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok Êp¨ýÿÿÿÝÿÿÿþÿÿÿýÿÿÿÝÿÿÿýÿÿÿáÿÿÿþÿÿÿýÿÿÿáÿÿÿÝÿÿÿþÿÿÿÝÿÿÿáÿÿÿþÿÿÿáÿÿÿýÿÿÿáÿÿÿüÿÿÿýÿÿÿáÿÿÿýÿÿÿðÿÿÿüÿÿÿýÿÿÿðÿÿÿáÿÿÿüÿÿÿáÿÿÿðÿÿÿüÿÿÿðÿÿÿþÿÿÿáÿÿÿúÿÿÿþÿÿÿâÿÿÿüÿÿÿþÿÿÿèÿÿÿùÿÿÿþÿÿÿéÿÿÿûÿÿÿáÿÿÿúÿÿÿâÿÿÿüÿÿÿèÿÿÿùÿÿÿéÿÿÿûÿÿÿþÿÿÿèÿÿÿùÿÿÿþÿÿÿéÿÿÿûÿÿÿþÿÿÿïÿÿÿøÿÿÿþÿÿÿðÿÿÿùÿÿÿèÿÿÿùÿÿÿéÿÿÿûÿÿÿïÿÿÿøÿÿÿðÿÿÿùÿÿÿÿÿÿÿïÿÿÿøÿÿÿÿÿÿÿðÿÿÿùÿÿÿÿÿÿÿòÿÿÿ÷ÿÿÿÿÿÿÿóÿÿÿùÿÿÿïÿÿÿøÿÿÿðÿÿÿùÿÿÿòÿÿÿ÷ÿÿÿóÿÿÿùÿÿÿþÿÿÿâÿÿÿþÿÿÿâÿÿÿþÿÿÿéÿÿÿþÿÿÿéÿÿÿâÿÿÿâÿÿÿéÿÿÿéÿÿÿþÿÿÿéÿÿÿþÿÿÿéÿÿÿþÿÿÿïÿÿÿþÿÿÿïÿÿÿéÿÿÿéÿÿÿïÿÿÿïÿÿÿÿÿÿÿïÿÿÿÿÿÿÿïÿÿÿÿÿÿÿòÿÿÿÿÿÿÿòÿÿÿ ïÿÿÿïÿÿÿòÿÿÿòÿÿÿ þÿÿÿïÿÿÿýÿÿÿþÿÿÿðÿÿÿÿÿÿÿþÿÿÿöÿÿÿüÿÿÿþÿÿÿ÷ÿÿÿþÿÿÿïÿÿÿýÿÿÿðÿÿÿÿÿÿÿöÿÿÿüÿÿÿ÷ÿÿÿþÿÿÿþÿÿÿöÿÿÿüÿÿÿþÿÿÿ÷ÿÿÿþÿÿÿþÿÿÿýÿÿÿûÿÿÿþÿÿÿýÿÿÿþÿÿÿöÿÿÿüÿÿÿ÷ÿÿÿþÿÿÿýÿÿÿûÿÿÿýÿÿÿþÿÿÿþÿÿÿÿÿÿÿûÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿúÿÿÿÿÿÿÿýÿÿÿþÿÿÿýÿÿÿûÿÿÿÿÿÿÿýÿÿÿþÿÿÿýÿÿÿúÿÿÿýÿÿÿýÿÿÿþÿÿÿðÿÿÿþÿÿÿðÿÿÿþÿÿÿöÿÿÿþÿÿÿöÿÿÿðÿÿÿðÿÿÿöÿÿÿöÿÿÿþÿÿÿöÿÿÿþÿÿÿöÿÿÿþÿÿÿýÿÿÿþÿÿÿýÿÿÿöÿÿÿöÿÿÿýÿÿÿýÿÿÿþÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿýÿÿÿþÿÿÿýÿÿÿýÿÿÿýÿÿÿ       -     ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok Êp¨ÝÿÿÿýÿÿÿýÿÿÿÝÿÿÿýÿÿÿáÿÿÿýÿÿÿýÿÿÿáÿÿÿýÿÿÿÝÿÿÿýÿÿÿÝÿÿÿáÿÿÿýÿÿÿáÿÿÿáÿÿÿýÿÿÿûÿÿÿáÿÿÿýÿÿÿðÿÿÿýÿÿÿûÿÿÿðÿÿÿýÿÿÿáÿÿÿûÿÿÿáÿÿÿðÿÿÿûÿÿÿðÿÿÿáÿÿÿâÿÿÿçÿÿÿüÿÿÿèÿÿÿüÿÿÿâÿÿÿãÿÿÿèÿÿÿýÿÿÿéÿÿÿýÿÿÿçÿÿÿüÿÿÿèÿÿÿüÿÿÿíÿÿÿùÿÿÿíÿÿÿùÿÿÿèÿÿÿýÿÿÿéÿÿÿýÿÿÿíÿÿÿúÿÿÿîÿÿÿúÿÿÿíÿÿÿùÿÿÿíÿÿÿùÿÿÿ ðÿÿÿøÿÿÿðÿÿÿøÿÿÿíÿÿÿúÿÿÿîÿÿÿúÿÿÿ ðÿÿÿùÿÿÿñÿÿÿùÿÿÿûÿÿÿãÿÿÿþÿÿÿúÿÿÿãÿÿÿþÿÿÿúÿÿÿéÿÿÿøÿÿÿéÿÿÿûÿÿÿáÿÿÿúÿÿÿáÿÿÿúÿÿÿçÿÿÿøÿÿÿçÿÿÿúÿÿÿéÿÿÿøÿÿÿéÿÿÿùÿÿÿíÿÿÿøÿÿÿíÿÿÿúÿÿÿçÿÿÿøÿÿÿçÿÿÿùÿÿÿêÿÿÿ øÿÿÿêÿÿÿ ùÿÿÿìÿÿÿøÿÿÿìÿÿÿùÿÿÿîÿÿÿ ÷ÿÿÿîÿÿÿ ùÿÿÿëÿÿÿøÿÿÿëÿÿÿùÿÿÿìÿÿÿ ÷ÿÿÿìÿÿÿ ðÿÿÿþÿÿÿñÿÿÿÿÿÿÿõÿÿÿöÿÿÿîÿÿÿïÿÿÿóÿÿÿôÿÿÿõÿÿÿöÿÿÿüÿÿÿýÿÿÿóÿÿÿôÿÿÿúÿÿÿûÿÿÿþÿÿÿþÿÿÿüÿÿÿ üÿÿÿ üÿÿÿüÿÿÿúÿÿÿ úÿÿÿ þÿÿÿïÿÿÿþÿÿÿüÿÿÿïÿÿÿÿÿÿÿþÿÿÿôÿÿÿúÿÿÿûÿÿÿôÿÿÿúÿÿÿþÿÿÿðÿÿÿüÿÿÿðÿÿÿþÿÿÿõÿÿÿûÿÿÿûÿÿÿõÿÿÿüÿÿÿþÿÿÿôÿÿÿúÿÿÿûÿÿÿôÿÿÿúÿÿÿýÿÿÿùÿÿÿõÿÿÿûÿÿÿùÿÿÿöÿÿÿþÿÿÿõÿÿÿûÿÿÿûÿÿÿõÿÿÿüÿÿÿýÿÿÿúÿÿÿ÷ÿÿÿûÿÿÿúÿÿÿøÿÿÿýÿÿÿûÿÿÿóÿÿÿûÿÿÿûÿÿÿóÿÿÿýÿÿÿøÿÿÿúÿÿÿøÿÿÿýÿÿÿøÿÿÿõÿÿÿûÿÿÿøÿÿÿõÿÿÿýÿÿÿýÿÿÿúÿÿÿúÿÿÿýÿÿÿúÿÿÿ  +     ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok Êp¨ýÿÿÿÝÿÿÿþÿÿÿýÿÿÿÝÿÿÿýÿÿÿáÿÿÿþÿÿÿýÿÿÿáÿÿÿÝÿÿÿþÿÿÿÝÿÿÿáÿÿÿþÿÿÿáÿÿÿýÿÿÿáÿÿÿüÿÿÿýÿÿÿáÿÿÿýÿÿÿðÿÿÿüÿÿÿýÿÿÿðÿÿÿáÿÿÿüÿÿÿáÿÿÿðÿÿÿüÿÿÿðÿÿÿáÿÿÿúÿÿÿâÿÿÿüÿÿÿüÿÿÿçÿÿÿùÿÿÿüÿÿÿèÿÿÿûÿÿÿâÿÿÿúÿÿÿãÿÿÿüÿÿÿýÿÿÿèÿÿÿùÿÿÿýÿÿÿéÿÿÿûÿÿÿüÿÿÿçÿÿÿùÿÿÿüÿÿÿèÿÿÿûÿÿÿùÿÿÿíÿÿÿøÿÿÿùÿÿÿíÿÿÿùÿÿÿýÿÿÿèÿÿÿùÿÿÿýÿÿÿéÿÿÿûÿÿÿúÿÿÿíÿÿÿøÿÿÿúÿÿÿîÿÿÿùÿÿÿùÿÿÿíÿÿÿøÿÿÿùÿÿÿíÿÿÿùÿÿÿøÿÿÿðÿÿÿ÷ÿÿÿøÿÿÿðÿÿÿùÿÿÿúÿÿÿíÿÿÿøÿÿÿúÿÿÿîÿÿÿùÿÿÿùÿÿÿðÿÿÿ÷ÿÿÿùÿÿÿñÿÿÿùÿÿÿþÿÿÿãÿÿÿþÿÿÿãÿÿÿéÿÿÿéÿÿÿáÿÿÿáÿÿÿçÿÿÿçÿÿÿéÿÿÿéÿÿÿíÿÿÿíÿÿÿçÿÿÿçÿÿÿ êÿÿÿ êÿÿÿìÿÿÿìÿÿÿ îÿÿÿ îÿÿÿ ëÿÿÿëÿÿÿ ìÿÿÿ ìÿÿÿ þÿÿÿðÿÿÿýÿÿÿÿÿÿÿñÿÿÿÿÿÿÿõÿÿÿüÿÿÿöÿÿÿþÿÿÿîÿÿÿýÿÿÿïÿÿÿÿÿÿÿóÿÿÿüÿÿÿôÿÿÿþÿÿÿõÿÿÿüÿÿÿöÿÿÿþÿÿÿüÿÿÿûÿÿÿýÿÿÿþÿÿÿóÿÿÿüÿÿÿôÿÿÿþÿÿÿúÿÿÿûÿÿÿûÿÿÿþÿÿÿþÿÿÿûÿÿÿþÿÿÿþÿÿÿ üÿÿÿúÿÿÿ üÿÿÿýÿÿÿüÿÿÿûÿÿÿüÿÿÿþÿÿÿ úÿÿÿúÿÿÿ úÿÿÿýÿÿÿþÿÿÿïÿÿÿÿÿÿÿïÿÿÿúÿÿÿôÿÿÿúÿÿÿôÿÿÿðÿÿÿðÿÿÿûÿÿÿõÿÿÿüÿÿÿõÿÿÿúÿÿÿôÿÿÿúÿÿÿôÿÿÿõÿÿÿùÿÿÿöÿÿÿùÿÿÿûÿÿÿõÿÿÿüÿÿÿõÿÿÿ÷ÿÿÿúÿÿÿøÿÿÿúÿÿÿóÿÿÿûÿÿÿóÿÿÿûÿÿÿøÿÿÿøÿÿÿõÿÿÿøÿÿÿõÿÿÿøÿÿÿúÿÿÿýÿÿÿúÿÿÿýÿÿÿ       -     ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmokæq©ÞÿÿÿþÿÿÿþÿÿÿÞÿÿÿþÿÿÿâÿÿÿþÿÿÿþÿÿÿâÿÿÿþÿÿÿÞÿÿÿþÿÿÿÞÿÿÿâÿÿÿþÿÿÿâÿÿÿâÿÿÿþÿÿÿüÿÿÿâÿÿÿþÿÿÿðÿÿÿþÿÿÿüÿÿÿðÿÿÿþÿÿÿâÿÿÿüÿÿÿâÿÿÿðÿÿÿüÿÿÿðÿÿÿåÿÿÿåÿÿÿßÿÿÿþÿÿÿßÿÿÿþÿÿÿæÿÿÿÿÿÿÿæÿÿÿÿÿÿÿàÿÿÿüÿÿÿàÿÿÿüÿÿÿÞÿÿÿþÿÿÿÞÿÿÿþÿÿÿ ÜÿÿÿùÿÿÿÜÿÿÿùÿÿÿàÿÿÿüÿÿÿàÿÿÿüÿÿÿ Ýÿÿÿ÷ÿÿÿÝÿÿÿ÷ÿÿÿ ÜÿÿÿøÿÿÿÜÿÿÿøÿÿÿ -ÛÿÿÿöÿÿÿÛÿÿÿöÿÿÿ ÝÿÿÿøÿÿÿÝÿÿÿøÿÿÿ -ÜÿÿÿõÿÿÿÜÿÿÿõÿÿÿüÿÿÿãÿÿÿÿÿÿÿúÿÿÿãÿÿÿúÿÿÿéÿÿÿüÿÿÿøÿÿÿéÿÿÿüÿÿÿüÿÿÿäÿÿÿúÿÿÿäÿÿÿúÿÿÿêÿÿÿýÿÿÿøÿÿÿêÿÿÿþÿÿÿúÿÿÿéÿÿÿüÿÿÿøÿÿÿéÿÿÿüÿÿÿùÿÿÿîÿÿÿùÿÿÿ÷ÿÿÿîÿÿÿúÿÿÿúÿÿÿêÿÿÿýÿÿÿøÿÿÿêÿÿÿþÿÿÿùÿÿÿïÿÿÿúÿÿÿ÷ÿÿÿïÿÿÿûÿÿÿùÿÿÿîÿÿÿùÿÿÿ÷ÿÿÿîÿÿÿúÿÿÿøÿÿÿñÿÿÿøÿÿÿöÿÿÿñÿÿÿùÿÿÿùÿÿÿïÿÿÿúÿÿÿ÷ÿÿÿïÿÿÿûÿÿÿøÿÿÿòÿÿÿùÿÿÿöÿÿÿòÿÿÿúÿÿÿðÿÿÿþÿÿÿðÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿüÿÿÿðÿÿÿñÿÿÿöÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿöÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿúÿÿÿüÿÿÿúÿÿÿöÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿüÿÿÿýÿÿÿýÿÿÿýÿÿÿþÿÿÿùÿÿÿþÿÿÿúÿÿÿÿÿÿÿûÿÿÿúÿÿÿüÿÿÿúÿÿÿþÿÿÿþÿÿÿþÿÿÿñÿÿÿþÿÿÿüÿÿÿñÿÿÿþÿÿÿþÿÿÿ÷ÿÿÿüÿÿÿ÷ÿÿÿþÿÿÿðÿÿÿüÿÿÿðÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿþÿÿÿ÷ÿÿÿüÿÿÿ÷ÿÿÿþÿÿÿýÿÿÿûÿÿÿýÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿþÿÿÿüÿÿÿûÿÿÿüÿÿÿþÿÿÿÿÿÿÿûÿÿÿýÿÿÿþÿÿÿúÿÿÿþÿÿÿþÿÿÿüÿÿÿûÿÿÿýÿÿÿýÿÿÿûÿÿÿúÿÿÿüÿÿÿÒÿÿÿèÿÿÿ  +     ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok æq©þÿÿÿÞÿÿÿÿÿÿÿþÿÿÿÞÿÿÿþÿÿÿâÿÿÿÿÿÿÿþÿÿÿâÿÿÿÞÿÿÿÿÿÿÿÞÿÿÿâÿÿÿÿÿÿÿâÿÿÿþÿÿÿâÿÿÿýÿÿÿþÿÿÿâÿÿÿþÿÿÿðÿÿÿýÿÿÿþÿÿÿðÿÿÿâÿÿÿýÿÿÿâÿÿÿðÿÿÿýÿÿÿðÿÿÿåÿÿÿûÿÿÿåÿÿÿüÿÿÿþÿÿÿßÿÿÿùÿÿÿþÿÿÿßÿÿÿûÿÿÿÿÿÿÿæÿÿÿûÿÿÿÿÿÿÿæÿÿÿüÿÿÿüÿÿÿàÿÿÿùÿÿÿüÿÿÿàÿÿÿûÿÿÿþÿÿÿÞÿÿÿùÿÿÿþÿÿÿÞÿÿÿûÿÿÿùÿÿÿÜÿÿÿ÷ÿÿÿùÿÿÿÜÿÿÿùÿÿÿüÿÿÿàÿÿÿùÿÿÿüÿÿÿàÿÿÿûÿÿÿ÷ÿÿÿÝÿÿÿ÷ÿÿÿ÷ÿÿÿÝÿÿÿùÿÿÿøÿÿÿÜÿÿÿ÷ÿÿÿøÿÿÿÜÿÿÿùÿÿÿöÿÿÿÛÿÿÿöÿÿÿöÿÿÿÛÿÿÿøÿÿÿøÿÿÿÝÿÿÿ÷ÿÿÿøÿÿÿÝÿÿÿùÿÿÿõÿÿÿÜÿÿÿöÿÿÿõÿÿÿÜÿÿÿøÿÿÿÿÿÿÿãÿÿÿãÿÿÿüÿÿÿéÿÿÿüÿÿÿéÿÿÿäÿÿÿäÿÿÿýÿÿÿêÿÿÿþÿÿÿêÿÿÿüÿÿÿéÿÿÿüÿÿÿéÿÿÿùÿÿÿîÿÿÿúÿÿÿîÿÿÿ ýÿÿÿêÿÿÿþÿÿÿêÿÿÿúÿÿÿïÿÿÿûÿÿÿïÿÿÿ ùÿÿÿîÿÿÿúÿÿÿîÿÿÿ øÿÿÿñÿÿÿùÿÿÿñÿÿÿ +úÿÿÿïÿÿÿûÿÿÿïÿÿÿ ùÿÿÿòÿÿÿúÿÿÿòÿÿÿ +þÿÿÿðÿÿÿýÿÿÿþÿÿÿðÿÿÿÿÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿöÿÿÿÿÿÿÿðÿÿÿýÿÿÿñÿÿÿÿÿÿÿÿÿÿÿöÿÿÿüÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿöÿÿÿÿÿÿÿúÿÿÿüÿÿÿûÿÿÿúÿÿÿüÿÿÿþÿÿÿÿÿÿÿöÿÿÿüÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿýÿÿÿüÿÿÿûÿÿÿýÿÿÿýÿÿÿþÿÿÿùÿÿÿþÿÿÿûÿÿÿúÿÿÿþÿÿÿþÿÿÿÿÿÿÿûÿÿÿýÿÿÿúÿÿÿûÿÿÿûÿÿÿúÿÿÿüÿÿÿþÿÿÿþÿÿÿûÿÿÿþÿÿÿýÿÿÿþÿÿÿñÿÿÿþÿÿÿñÿÿÿ÷ÿÿÿ÷ÿÿÿðÿÿÿðÿÿÿöÿÿÿöÿÿÿ÷ÿÿÿ÷ÿÿÿýÿÿÿýÿÿÿöÿÿÿöÿÿÿüÿÿÿüÿÿÿÿÿÿÿþÿÿÿþÿÿÿüÿÿÿýÿÿÿûÿÿÿüÿÿÿèÿÿÿÒÿÿÿïÿÿÿ  + +   + +  +     ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok&p"æq©þÿÿÿÞÿÿÿÿÿÿÿþÿÿÿÞÿÿÿþÿÿÿâÿÿÿÿÿÿÿþÿÿÿâÿÿÿÞÿÿÿÿÿÿÿÞÿÿÿâÿÿÿÿÿÿÿâÿÿÿþÿÿÿâÿÿÿýÿÿÿþÿÿÿâÿÿÿþÿÿÿðÿÿÿýÿÿÿþÿÿÿðÿÿÿâÿÿÿýÿÿÿâÿÿÿðÿÿÿýÿÿÿðÿÿÿÿÿÿÿæÿÿÿûÿÿÿæÿÿÿüÿÿÿäÿÿÿùÿÿÿäÿÿÿûÿÿÿþÿÿÿãÿÿÿûÿÿÿþÿÿÿãÿÿÿüÿÿÿáÿÿÿùÿÿÿáÿÿÿûÿÿÿãÿÿÿùÿÿÿãÿÿÿûÿÿÿ +ßÿÿÿ÷ÿÿÿ ßÿÿÿùÿÿÿâÿÿÿùÿÿÿâÿÿÿûÿÿÿÝÿÿÿ÷ÿÿÿÝÿÿÿùÿÿÿ ßÿÿÿ÷ÿÿÿ +ßÿÿÿùÿÿÿ Ýÿÿÿöÿÿÿ ÝÿÿÿøÿÿÿÝÿÿÿ÷ÿÿÿ Ýÿÿÿùÿÿÿ +Ûÿÿÿöÿÿÿ Ûÿÿÿøÿÿÿÿÿÿÿãÿÿÿãÿÿÿüÿÿÿéÿÿÿüÿÿÿéÿÿÿäÿÿÿäÿÿÿýÿÿÿêÿÿÿþÿÿÿêÿÿÿüÿÿÿéÿÿÿüÿÿÿéÿÿÿùÿÿÿîÿÿÿúÿÿÿîÿÿÿ ýÿÿÿêÿÿÿþÿÿÿêÿÿÿúÿÿÿïÿÿÿûÿÿÿïÿÿÿ ùÿÿÿîÿÿÿúÿÿÿîÿÿÿ øÿÿÿñÿÿÿùÿÿÿñÿÿÿ +úÿÿÿïÿÿÿûÿÿÿïÿÿÿ ùÿÿÿòÿÿÿúÿÿÿòÿÿÿ +þÿÿÿðÿÿÿýÿÿÿþÿÿÿðÿÿÿÿÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿöÿÿÿÿÿÿÿðÿÿÿýÿÿÿñÿÿÿÿÿÿÿÿÿÿÿöÿÿÿüÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿöÿÿÿÿÿÿÿúÿÿÿüÿÿÿûÿÿÿúÿÿÿüÿÿÿþÿÿÿÿÿÿÿöÿÿÿüÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿýÿÿÿüÿÿÿûÿÿÿýÿÿÿýÿÿÿþÿÿÿùÿÿÿþÿÿÿûÿÿÿúÿÿÿþÿÿÿþÿÿÿÿÿÿÿûÿÿÿýÿÿÿúÿÿÿûÿÿÿûÿÿÿúÿÿÿüÿÿÿþÿÿÿþÿÿÿûÿÿÿþÿÿÿýÿÿÿþÿÿÿñÿÿÿþÿÿÿñÿÿÿ÷ÿÿÿ÷ÿÿÿðÿÿÿðÿÿÿöÿÿÿöÿÿÿ÷ÿÿÿ÷ÿÿÿýÿÿÿýÿÿÿöÿÿÿöÿÿÿüÿÿÿüÿÿÿÿÿÿÿþÿÿÿþÿÿÿüÿÿÿýÿÿÿûÿÿÿüÿÿÿÒÿÿÿïÿÿÿ  + +   + +  +     ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok&p"æq©þÿÿÿÞÿÿÿÿÿÿÿþÿÿÿÞÿÿÿþÿÿÿâÿÿÿÿÿÿÿþÿÿÿâÿÿÿÞÿÿÿÿÿÿÿÞÿÿÿâÿÿÿÿÿÿÿâÿÿÿþÿÿÿâÿÿÿýÿÿÿþÿÿÿâÿÿÿþÿÿÿðÿÿÿýÿÿÿþÿÿÿðÿÿÿâÿÿÿýÿÿÿâÿÿÿðÿÿÿýÿÿÿðÿÿÿþÿÿÿåÿÿÿûÿÿÿÿÿÿÿåÿÿÿüÿÿÿåÿÿÿùÿÿÿåÿÿÿûÿÿÿþÿÿÿãÿÿÿûÿÿÿÿÿÿÿãÿÿÿüÿÿÿãÿÿÿùÿÿÿãÿÿÿûÿÿÿåÿÿÿùÿÿÿåÿÿÿûÿÿÿ åÿÿÿ÷ÿÿÿ åÿÿÿùÿÿÿãÿÿÿùÿÿÿãÿÿÿûÿÿÿ ãÿÿÿ÷ÿÿÿ ãÿÿÿùÿÿÿ åÿÿÿ÷ÿÿÿ åÿÿÿùÿÿÿåÿÿÿöÿÿÿåÿÿÿøÿÿÿ ãÿÿÿ÷ÿÿÿ ãÿÿÿùÿÿÿãÿÿÿöÿÿÿãÿÿÿøÿÿÿÿÿÿÿãÿÿÿãÿÿÿüÿÿÿéÿÿÿüÿÿÿéÿÿÿäÿÿÿäÿÿÿýÿÿÿêÿÿÿþÿÿÿêÿÿÿüÿÿÿéÿÿÿüÿÿÿéÿÿÿùÿÿÿîÿÿÿúÿÿÿîÿÿÿ ýÿÿÿêÿÿÿþÿÿÿêÿÿÿúÿÿÿïÿÿÿûÿÿÿïÿÿÿ ùÿÿÿîÿÿÿúÿÿÿîÿÿÿ øÿÿÿñÿÿÿùÿÿÿñÿÿÿ +úÿÿÿïÿÿÿûÿÿÿïÿÿÿ ùÿÿÿòÿÿÿúÿÿÿòÿÿÿ +þÿÿÿðÿÿÿýÿÿÿþÿÿÿðÿÿÿÿÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿöÿÿÿÿÿÿÿðÿÿÿýÿÿÿñÿÿÿÿÿÿÿÿÿÿÿöÿÿÿüÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿöÿÿÿÿÿÿÿúÿÿÿüÿÿÿûÿÿÿúÿÿÿüÿÿÿþÿÿÿÿÿÿÿöÿÿÿüÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿýÿÿÿüÿÿÿûÿÿÿýÿÿÿýÿÿÿþÿÿÿùÿÿÿþÿÿÿûÿÿÿúÿÿÿþÿÿÿþÿÿÿÿÿÿÿûÿÿÿýÿÿÿúÿÿÿûÿÿÿûÿÿÿúÿÿÿüÿÿÿþÿÿÿþÿÿÿûÿÿÿþÿÿÿýÿÿÿþÿÿÿñÿÿÿþÿÿÿñÿÿÿ÷ÿÿÿ÷ÿÿÿðÿÿÿðÿÿÿöÿÿÿöÿÿÿ÷ÿÿÿ÷ÿÿÿýÿÿÿýÿÿÿöÿÿÿöÿÿÿüÿÿÿüÿÿÿÿÿÿÿþÿÿÿþÿÿÿüÿÿÿýÿÿÿûÿÿÿüÿÿÿ#ãÿÿÿïÿÿÿ  + +   + +  +     ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok&p"*ØÿÿÿÜÿÿÿEKÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ*$ÅÿÿÿØÿÿÿwMÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒãÿÿÿþÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŠíÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊp¨ýÿÿÿÝÿÿÿþÿÿÿýÿÿÿÝÿÿÿýÿÿÿáÿÿÿþÿÿÿýÿÿÿáÿÿÿÝÿÿÿþÿÿÿÝÿÿÿáÿÿÿþÿÿÿáÿÿÿýÿÿÿáÿÿÿüÿÿÿýÿÿÿáÿÿÿýÿÿÿðÿÿÿüÿÿÿýÿÿÿðÿÿÿáÿÿÿüÿÿÿáÿÿÿðÿÿÿüÿÿÿðÿÿÿþÿÿÿâÿÿÿúÿÿÿÿÿÿÿãÿÿÿüÿÿÿèÿÿÿùÿÿÿéÿÿÿûÿÿÿàÿÿÿúÿÿÿáÿÿÿüÿÿÿçÿÿÿùÿÿÿèÿÿÿûÿÿÿéÿÿÿùÿÿÿêÿÿÿûÿÿÿìÿÿÿøÿÿÿíÿÿÿùÿÿÿæÿÿÿùÿÿÿçÿÿÿûÿÿÿêÿÿÿøÿÿÿ ëÿÿÿùÿÿÿìÿÿÿøÿÿÿ íÿÿÿùÿÿÿ íÿÿÿ÷ÿÿÿ îÿÿÿùÿÿÿêÿÿÿøÿÿÿ ëÿÿÿùÿÿÿ ìÿÿÿ÷ÿÿÿ íÿÿÿùÿÿÿÿÿÿÿáÿÿÿáÿÿÿûÿÿÿèÿÿÿüÿÿÿèÿÿÿâÿÿÿâÿÿÿýÿÿÿèÿÿÿþÿÿÿèÿÿÿûÿÿÿèÿÿÿüÿÿÿèÿÿÿøÿÿÿíÿÿÿùÿÿÿíÿÿÿýÿÿÿèÿÿÿþÿÿÿèÿÿÿúÿÿÿîÿÿÿûÿÿÿîÿÿÿùÿÿÿíÿÿÿúÿÿÿíÿÿÿøÿÿÿðÿÿÿøÿÿÿðÿÿÿ úÿÿÿîÿÿÿúÿÿÿîÿÿÿøÿÿÿñÿÿÿùÿÿÿñÿÿÿ ÿÿÿÿîÿÿÿýÿÿÿÿÿÿÿïÿÿÿÿÿÿÿúÿÿÿóÿÿÿüÿÿÿúÿÿÿôÿÿÿþÿÿÿðÿÿÿýÿÿÿñÿÿÿÿÿÿÿüÿÿÿõÿÿÿüÿÿÿüÿÿÿöÿÿÿþÿÿÿúÿÿÿóÿÿÿüÿÿÿúÿÿÿôÿÿÿþÿÿÿõÿÿÿøÿÿÿûÿÿÿõÿÿÿùÿÿÿþÿÿÿüÿÿÿõÿÿÿüÿÿÿüÿÿÿöÿÿÿþÿÿÿ÷ÿÿÿúÿÿÿûÿÿÿ÷ÿÿÿûÿÿÿþÿÿÿóÿÿÿúÿÿÿûÿÿÿôÿÿÿûÿÿÿþÿÿÿøÿÿÿÿÿÿÿúÿÿÿøÿÿÿýÿÿÿõÿÿÿøÿÿÿûÿÿÿõÿÿÿùÿÿÿþÿÿÿùÿÿÿýÿÿÿúÿÿÿúÿÿÿýÿÿÿýÿÿÿÿÿÿÿñÿÿÿÿÿÿÿñÿÿÿöÿÿÿöÿÿÿîÿÿÿîÿÿÿóÿÿÿóÿÿÿõÿÿÿõÿÿÿüÿÿÿüÿÿÿôÿÿÿôÿÿÿúÿÿÿúÿÿÿþÿÿÿÿÿÿÿ üÿÿÿ ýÿÿÿûÿÿÿüÿÿÿ ùÿÿÿ úÿÿÿ              -      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok&p"æq©ÞÿÿÿþÿÿÿþÿÿÿÞÿÿÿþÿÿÿâÿÿÿþÿÿÿþÿÿÿâÿÿÿþÿÿÿÞÿÿÿþÿÿÿÞÿÿÿâÿÿÿþÿÿÿâÿÿÿâÿÿÿþÿÿÿüÿÿÿâÿÿÿþÿÿÿðÿÿÿþÿÿÿüÿÿÿðÿÿÿþÿÿÿâÿÿÿüÿÿÿâÿÿÿðÿÿÿüÿÿÿðÿÿÿæÿÿÿÿÿÿÿæÿÿÿäÿÿÿäÿÿÿãÿÿÿþÿÿÿãÿÿÿþÿÿÿáÿÿÿáÿÿÿãÿÿÿãÿÿÿ ßÿÿÿ -ßÿÿÿ âÿÿÿâÿÿÿ ÝÿÿÿÝÿÿÿ ßÿÿÿ ßÿÿÿ - -Ýÿÿÿ Ýÿÿÿ ÝÿÿÿÝÿÿÿ -Ûÿÿÿ -Ûÿÿÿ üÿÿÿãÿÿÿÿÿÿÿúÿÿÿãÿÿÿúÿÿÿéÿÿÿüÿÿÿøÿÿÿéÿÿÿüÿÿÿüÿÿÿäÿÿÿúÿÿÿäÿÿÿúÿÿÿêÿÿÿýÿÿÿøÿÿÿêÿÿÿþÿÿÿúÿÿÿéÿÿÿüÿÿÿøÿÿÿéÿÿÿüÿÿÿùÿÿÿîÿÿÿùÿÿÿ÷ÿÿÿîÿÿÿúÿÿÿúÿÿÿêÿÿÿýÿÿÿøÿÿÿêÿÿÿþÿÿÿùÿÿÿïÿÿÿúÿÿÿ÷ÿÿÿïÿÿÿûÿÿÿùÿÿÿîÿÿÿùÿÿÿ÷ÿÿÿîÿÿÿúÿÿÿøÿÿÿñÿÿÿøÿÿÿöÿÿÿñÿÿÿùÿÿÿùÿÿÿïÿÿÿúÿÿÿ÷ÿÿÿïÿÿÿûÿÿÿøÿÿÿòÿÿÿùÿÿÿöÿÿÿòÿÿÿúÿÿÿðÿÿÿþÿÿÿðÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿüÿÿÿðÿÿÿñÿÿÿöÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿöÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿúÿÿÿüÿÿÿúÿÿÿöÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿüÿÿÿýÿÿÿýÿÿÿýÿÿÿþÿÿÿùÿÿÿþÿÿÿúÿÿÿÿÿÿÿûÿÿÿúÿÿÿüÿÿÿúÿÿÿþÿÿÿþÿÿÿþÿÿÿñÿÿÿþÿÿÿüÿÿÿñÿÿÿþÿÿÿþÿÿÿ÷ÿÿÿüÿÿÿ÷ÿÿÿþÿÿÿðÿÿÿüÿÿÿðÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿþÿÿÿ÷ÿÿÿüÿÿÿ÷ÿÿÿþÿÿÿýÿÿÿûÿÿÿýÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿþÿÿÿüÿÿÿûÿÿÿüÿÿÿþÿÿÿÿÿÿÿûÿÿÿýÿÿÿþÿÿÿúÿÿÿþÿÿÿþÿÿÿüÿÿÿûÿÿÿýÿÿÿýÿÿÿûÿÿÿúÿÿÿüÿÿÿÒÿÿÿ  +      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmokÊp¨ýÿÿÿÝÿÿÿþÿÿÿýÿÿÿÝÿÿÿýÿÿÿáÿÿÿþÿÿÿýÿÿÿáÿÿÿÝÿÿÿþÿÿÿÝÿÿÿáÿÿÿþÿÿÿáÿÿÿýÿÿÿáÿÿÿüÿÿÿýÿÿÿáÿÿÿýÿÿÿðÿÿÿüÿÿÿýÿÿÿðÿÿÿáÿÿÿüÿÿÿáÿÿÿðÿÿÿüÿÿÿðÿÿÿþÿÿÿáÿÿÿúÿÿÿþÿÿÿâÿÿÿüÿÿÿþÿÿÿèÿÿÿùÿÿÿþÿÿÿéÿÿÿûÿÿÿáÿÿÿúÿÿÿâÿÿÿüÿÿÿèÿÿÿùÿÿÿéÿÿÿûÿÿÿþÿÿÿèÿÿÿùÿÿÿþÿÿÿéÿÿÿûÿÿÿþÿÿÿïÿÿÿøÿÿÿþÿÿÿðÿÿÿùÿÿÿèÿÿÿùÿÿÿéÿÿÿûÿÿÿïÿÿÿøÿÿÿðÿÿÿùÿÿÿÿÿÿÿïÿÿÿøÿÿÿÿÿÿÿðÿÿÿùÿÿÿÿÿÿÿòÿÿÿ÷ÿÿÿÿÿÿÿóÿÿÿùÿÿÿïÿÿÿøÿÿÿðÿÿÿùÿÿÿòÿÿÿ÷ÿÿÿóÿÿÿùÿÿÿþÿÿÿâÿÿÿþÿÿÿâÿÿÿþÿÿÿéÿÿÿþÿÿÿéÿÿÿâÿÿÿâÿÿÿéÿÿÿéÿÿÿþÿÿÿéÿÿÿþÿÿÿéÿÿÿþÿÿÿïÿÿÿþÿÿÿïÿÿÿéÿÿÿéÿÿÿïÿÿÿïÿÿÿÿÿÿÿïÿÿÿÿÿÿÿïÿÿÿÿÿÿÿòÿÿÿÿÿÿÿòÿÿÿ ïÿÿÿïÿÿÿòÿÿÿòÿÿÿ þÿÿÿïÿÿÿýÿÿÿþÿÿÿðÿÿÿÿÿÿÿþÿÿÿöÿÿÿüÿÿÿþÿÿÿ÷ÿÿÿþÿÿÿïÿÿÿýÿÿÿðÿÿÿÿÿÿÿöÿÿÿüÿÿÿ÷ÿÿÿþÿÿÿþÿÿÿöÿÿÿüÿÿÿþÿÿÿ÷ÿÿÿþÿÿÿþÿÿÿýÿÿÿûÿÿÿþÿÿÿýÿÿÿþÿÿÿöÿÿÿüÿÿÿ÷ÿÿÿþÿÿÿýÿÿÿûÿÿÿýÿÿÿþÿÿÿþÿÿÿÿÿÿÿûÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿúÿÿÿÿÿÿÿýÿÿÿþÿÿÿýÿÿÿûÿÿÿÿÿÿÿýÿÿÿþÿÿÿýÿÿÿúÿÿÿýÿÿÿýÿÿÿþÿÿÿðÿÿÿþÿÿÿðÿÿÿþÿÿÿöÿÿÿþÿÿÿöÿÿÿðÿÿÿðÿÿÿöÿÿÿöÿÿÿþÿÿÿöÿÿÿþÿÿÿöÿÿÿþÿÿÿýÿÿÿþÿÿÿýÿÿÿöÿÿÿöÿÿÿýÿÿÿýÿÿÿþÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿýÿÿÿþÿÿÿýÿÿÿýÿÿÿýÿÿÿ              -      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok&p"æq©ÞÿÿÿþÿÿÿþÿÿÿÞÿÿÿþÿÿÿâÿÿÿþÿÿÿþÿÿÿâÿÿÿþÿÿÿÞÿÿÿþÿÿÿÞÿÿÿâÿÿÿþÿÿÿâÿÿÿâÿÿÿþÿÿÿüÿÿÿâÿÿÿþÿÿÿðÿÿÿþÿÿÿüÿÿÿðÿÿÿþÿÿÿâÿÿÿüÿÿÿâÿÿÿðÿÿÿüÿÿÿðÿÿÿåÿÿÿþÿÿÿåÿÿÿÿÿÿÿåÿÿÿåÿÿÿãÿÿÿþÿÿÿãÿÿÿÿÿÿÿãÿÿÿãÿÿÿåÿÿÿåÿÿÿ åÿÿÿ åÿÿÿ ãÿÿÿãÿÿÿ ãÿÿÿ ãÿÿÿ åÿÿÿ åÿÿÿ -åÿÿÿåÿÿÿ ãÿÿÿ ãÿÿÿ -ãÿÿÿãÿÿÿüÿÿÿãÿÿÿÿÿÿÿúÿÿÿãÿÿÿúÿÿÿéÿÿÿüÿÿÿøÿÿÿéÿÿÿüÿÿÿüÿÿÿäÿÿÿúÿÿÿäÿÿÿúÿÿÿêÿÿÿýÿÿÿøÿÿÿêÿÿÿþÿÿÿúÿÿÿéÿÿÿüÿÿÿøÿÿÿéÿÿÿüÿÿÿùÿÿÿîÿÿÿùÿÿÿ÷ÿÿÿîÿÿÿúÿÿÿúÿÿÿêÿÿÿýÿÿÿøÿÿÿêÿÿÿþÿÿÿùÿÿÿïÿÿÿúÿÿÿ÷ÿÿÿïÿÿÿûÿÿÿùÿÿÿîÿÿÿùÿÿÿ÷ÿÿÿîÿÿÿúÿÿÿøÿÿÿñÿÿÿøÿÿÿöÿÿÿñÿÿÿùÿÿÿùÿÿÿïÿÿÿúÿÿÿ÷ÿÿÿïÿÿÿûÿÿÿøÿÿÿòÿÿÿùÿÿÿöÿÿÿòÿÿÿúÿÿÿðÿÿÿþÿÿÿðÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿüÿÿÿðÿÿÿñÿÿÿöÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿöÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿúÿÿÿüÿÿÿúÿÿÿöÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿüÿÿÿýÿÿÿýÿÿÿýÿÿÿþÿÿÿùÿÿÿþÿÿÿúÿÿÿÿÿÿÿûÿÿÿúÿÿÿüÿÿÿúÿÿÿþÿÿÿþÿÿÿþÿÿÿñÿÿÿþÿÿÿüÿÿÿñÿÿÿþÿÿÿþÿÿÿ÷ÿÿÿüÿÿÿ÷ÿÿÿþÿÿÿðÿÿÿüÿÿÿðÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿþÿÿÿ÷ÿÿÿüÿÿÿ÷ÿÿÿþÿÿÿýÿÿÿûÿÿÿýÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿþÿÿÿüÿÿÿûÿÿÿüÿÿÿþÿÿÿÿÿÿÿûÿÿÿýÿÿÿþÿÿÿúÿÿÿþÿÿÿþÿÿÿüÿÿÿûÿÿÿýÿÿÿýÿÿÿûÿÿÿúÿÿÿüÿÿÿãÿÿÿ#  +      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmokÊp¨ýÿÿÿÝÿÿÿþÿÿÿýÿÿÿÝÿÿÿýÿÿÿáÿÿÿþÿÿÿýÿÿÿáÿÿÿÝÿÿÿþÿÿÿÝÿÿÿáÿÿÿþÿÿÿáÿÿÿýÿÿÿáÿÿÿüÿÿÿýÿÿÿáÿÿÿýÿÿÿðÿÿÿüÿÿÿýÿÿÿðÿÿÿáÿÿÿüÿÿÿáÿÿÿðÿÿÿüÿÿÿðÿÿÿáÿÿÿúÿÿÿâÿÿÿüÿÿÿüÿÿÿçÿÿÿùÿÿÿüÿÿÿèÿÿÿûÿÿÿâÿÿÿúÿÿÿãÿÿÿüÿÿÿýÿÿÿèÿÿÿùÿÿÿýÿÿÿéÿÿÿûÿÿÿüÿÿÿçÿÿÿùÿÿÿüÿÿÿèÿÿÿûÿÿÿùÿÿÿíÿÿÿøÿÿÿùÿÿÿíÿÿÿùÿÿÿýÿÿÿèÿÿÿùÿÿÿýÿÿÿéÿÿÿûÿÿÿúÿÿÿíÿÿÿøÿÿÿúÿÿÿîÿÿÿùÿÿÿùÿÿÿíÿÿÿøÿÿÿùÿÿÿíÿÿÿùÿÿÿøÿÿÿðÿÿÿ÷ÿÿÿøÿÿÿðÿÿÿùÿÿÿúÿÿÿíÿÿÿøÿÿÿúÿÿÿîÿÿÿùÿÿÿùÿÿÿðÿÿÿ÷ÿÿÿùÿÿÿñÿÿÿùÿÿÿþÿÿÿãÿÿÿþÿÿÿãÿÿÿéÿÿÿéÿÿÿáÿÿÿáÿÿÿçÿÿÿçÿÿÿéÿÿÿéÿÿÿíÿÿÿíÿÿÿçÿÿÿçÿÿÿ êÿÿÿ êÿÿÿìÿÿÿìÿÿÿ îÿÿÿ îÿÿÿ ëÿÿÿëÿÿÿ ìÿÿÿ ìÿÿÿ þÿÿÿðÿÿÿýÿÿÿÿÿÿÿñÿÿÿÿÿÿÿõÿÿÿüÿÿÿöÿÿÿþÿÿÿîÿÿÿýÿÿÿïÿÿÿÿÿÿÿóÿÿÿüÿÿÿôÿÿÿþÿÿÿõÿÿÿüÿÿÿöÿÿÿþÿÿÿüÿÿÿûÿÿÿýÿÿÿþÿÿÿóÿÿÿüÿÿÿôÿÿÿþÿÿÿúÿÿÿûÿÿÿûÿÿÿþÿÿÿþÿÿÿûÿÿÿþÿÿÿþÿÿÿ üÿÿÿúÿÿÿ üÿÿÿýÿÿÿüÿÿÿûÿÿÿüÿÿÿþÿÿÿ úÿÿÿúÿÿÿ úÿÿÿýÿÿÿþÿÿÿïÿÿÿÿÿÿÿïÿÿÿúÿÿÿôÿÿÿúÿÿÿôÿÿÿðÿÿÿðÿÿÿûÿÿÿõÿÿÿüÿÿÿõÿÿÿúÿÿÿôÿÿÿúÿÿÿôÿÿÿõÿÿÿùÿÿÿöÿÿÿùÿÿÿûÿÿÿõÿÿÿüÿÿÿõÿÿÿ÷ÿÿÿúÿÿÿøÿÿÿúÿÿÿóÿÿÿûÿÿÿóÿÿÿûÿÿÿøÿÿÿøÿÿÿõÿÿÿøÿÿÿõÿÿÿøÿÿÿúÿÿÿýÿÿÿúÿÿÿýÿÿÿ              -      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok&p" æq©ÞÿÿÿþÿÿÿþÿÿÿÞÿÿÿþÿÿÿâÿÿÿþÿÿÿþÿÿÿâÿÿÿþÿÿÿÞÿÿÿþÿÿÿÞÿÿÿâÿÿÿþÿÿÿâÿÿÿâÿÿÿþÿÿÿüÿÿÿâÿÿÿþÿÿÿðÿÿÿþÿÿÿüÿÿÿðÿÿÿþÿÿÿâÿÿÿüÿÿÿâÿÿÿðÿÿÿüÿÿÿðÿÿÿåÿÿÿåÿÿÿßÿÿÿþÿÿÿßÿÿÿþÿÿÿæÿÿÿÿÿÿÿæÿÿÿÿÿÿÿàÿÿÿüÿÿÿàÿÿÿüÿÿÿÞÿÿÿþÿÿÿÞÿÿÿþÿÿÿ ÜÿÿÿùÿÿÿÜÿÿÿùÿÿÿàÿÿÿüÿÿÿàÿÿÿüÿÿÿ Ýÿÿÿ÷ÿÿÿÝÿÿÿ÷ÿÿÿ ÜÿÿÿøÿÿÿÜÿÿÿøÿÿÿ -ÛÿÿÿöÿÿÿÛÿÿÿöÿÿÿ ÝÿÿÿøÿÿÿÝÿÿÿøÿÿÿ -ÜÿÿÿõÿÿÿÜÿÿÿõÿÿÿüÿÿÿãÿÿÿÿÿÿÿúÿÿÿãÿÿÿúÿÿÿéÿÿÿüÿÿÿøÿÿÿéÿÿÿüÿÿÿüÿÿÿäÿÿÿúÿÿÿäÿÿÿúÿÿÿêÿÿÿýÿÿÿøÿÿÿêÿÿÿþÿÿÿúÿÿÿéÿÿÿüÿÿÿøÿÿÿéÿÿÿüÿÿÿùÿÿÿîÿÿÿùÿÿÿ÷ÿÿÿîÿÿÿúÿÿÿúÿÿÿêÿÿÿýÿÿÿøÿÿÿêÿÿÿþÿÿÿùÿÿÿïÿÿÿúÿÿÿ÷ÿÿÿïÿÿÿûÿÿÿùÿÿÿîÿÿÿùÿÿÿ÷ÿÿÿîÿÿÿúÿÿÿøÿÿÿñÿÿÿøÿÿÿöÿÿÿñÿÿÿùÿÿÿùÿÿÿïÿÿÿúÿÿÿ÷ÿÿÿïÿÿÿûÿÿÿøÿÿÿòÿÿÿùÿÿÿöÿÿÿòÿÿÿúÿÿÿðÿÿÿþÿÿÿðÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿüÿÿÿðÿÿÿñÿÿÿöÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿöÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿúÿÿÿüÿÿÿúÿÿÿöÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿüÿÿÿýÿÿÿýÿÿÿýÿÿÿþÿÿÿùÿÿÿþÿÿÿúÿÿÿÿÿÿÿûÿÿÿúÿÿÿüÿÿÿúÿÿÿþÿÿÿþÿÿÿþÿÿÿñÿÿÿþÿÿÿüÿÿÿñÿÿÿþÿÿÿþÿÿÿ÷ÿÿÿüÿÿÿ÷ÿÿÿþÿÿÿðÿÿÿüÿÿÿðÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿþÿÿÿ÷ÿÿÿüÿÿÿ÷ÿÿÿþÿÿÿýÿÿÿûÿÿÿýÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿþÿÿÿüÿÿÿûÿÿÿüÿÿÿþÿÿÿÿÿÿÿûÿÿÿýÿÿÿþÿÿÿúÿÿÿþÿÿÿþÿÿÿüÿÿÿûÿÿÿýÿÿÿýÿÿÿûÿÿÿúÿÿÿüÿÿÿÒÿÿÿèÿÿÿ  - -   - -  -     ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok&p" æq©ÞÿÿÿþÿÿÿþÿÿÿÞÿÿÿþÿÿÿâÿÿÿþÿÿÿþÿÿÿâÿÿÿþÿÿÿÞÿÿÿþÿÿÿÞÿÿÿâÿÿÿþÿÿÿâÿÿÿâÿÿÿþÿÿÿüÿÿÿâÿÿÿþÿÿÿðÿÿÿþÿÿÿüÿÿÿðÿÿÿþÿÿÿâÿÿÿüÿÿÿâÿÿÿðÿÿÿüÿÿÿðÿÿÿæÿÿÿÿÿÿÿæÿÿÿäÿÿÿäÿÿÿãÿÿÿþÿÿÿãÿÿÿþÿÿÿáÿÿÿáÿÿÿãÿÿÿãÿÿÿ ßÿÿÿ -ßÿÿÿ âÿÿÿâÿÿÿ ÝÿÿÿÝÿÿÿ ßÿÿÿ ßÿÿÿ - -Ýÿÿÿ Ýÿÿÿ ÝÿÿÿÝÿÿÿ -Ûÿÿÿ -Ûÿÿÿ üÿÿÿãÿÿÿÿÿÿÿúÿÿÿãÿÿÿúÿÿÿéÿÿÿüÿÿÿøÿÿÿéÿÿÿüÿÿÿüÿÿÿäÿÿÿúÿÿÿäÿÿÿúÿÿÿêÿÿÿýÿÿÿøÿÿÿêÿÿÿþÿÿÿúÿÿÿéÿÿÿüÿÿÿøÿÿÿéÿÿÿüÿÿÿùÿÿÿîÿÿÿùÿÿÿ÷ÿÿÿîÿÿÿúÿÿÿúÿÿÿêÿÿÿýÿÿÿøÿÿÿêÿÿÿþÿÿÿùÿÿÿïÿÿÿúÿÿÿ÷ÿÿÿïÿÿÿûÿÿÿùÿÿÿîÿÿÿùÿÿÿ÷ÿÿÿîÿÿÿúÿÿÿøÿÿÿñÿÿÿøÿÿÿöÿÿÿñÿÿÿùÿÿÿùÿÿÿïÿÿÿúÿÿÿ÷ÿÿÿïÿÿÿûÿÿÿøÿÿÿòÿÿÿùÿÿÿöÿÿÿòÿÿÿúÿÿÿðÿÿÿþÿÿÿðÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿüÿÿÿðÿÿÿñÿÿÿöÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿöÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿúÿÿÿüÿÿÿúÿÿÿöÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿüÿÿÿýÿÿÿýÿÿÿýÿÿÿþÿÿÿùÿÿÿþÿÿÿúÿÿÿÿÿÿÿûÿÿÿúÿÿÿüÿÿÿúÿÿÿþÿÿÿþÿÿÿþÿÿÿñÿÿÿþÿÿÿüÿÿÿñÿÿÿþÿÿÿþÿÿÿ÷ÿÿÿüÿÿÿ÷ÿÿÿþÿÿÿðÿÿÿüÿÿÿðÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿþÿÿÿ÷ÿÿÿüÿÿÿ÷ÿÿÿþÿÿÿýÿÿÿûÿÿÿýÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿþÿÿÿüÿÿÿûÿÿÿüÿÿÿþÿÿÿÿÿÿÿûÿÿÿýÿÿÿþÿÿÿúÿÿÿþÿÿÿþÿÿÿüÿÿÿûÿÿÿýÿÿÿýÿÿÿûÿÿÿúÿÿÿüÿÿÿÒÿÿÿ  - -   - -  -     ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok&p"æq©ÞÿÿÿþÿÿÿþÿÿÿÞÿÿÿþÿÿÿâÿÿÿþÿÿÿþÿÿÿâÿÿÿþÿÿÿÞÿÿÿþÿÿÿÞÿÿÿâÿÿÿþÿÿÿâÿÿÿâÿÿÿþÿÿÿüÿÿÿâÿÿÿþÿÿÿðÿÿÿþÿÿÿüÿÿÿðÿÿÿþÿÿÿâÿÿÿüÿÿÿâÿÿÿðÿÿÿüÿÿÿðÿÿÿåÿÿÿþÿÿÿåÿÿÿÿÿÿÿåÿÿÿåÿÿÿãÿÿÿþÿÿÿãÿÿÿÿÿÿÿãÿÿÿãÿÿÿåÿÿÿåÿÿÿ åÿÿÿ åÿÿÿ ãÿÿÿãÿÿÿ ãÿÿÿ ãÿÿÿ åÿÿÿ åÿÿÿ -åÿÿÿåÿÿÿ ãÿÿÿ ãÿÿÿ -ãÿÿÿãÿÿÿüÿÿÿãÿÿÿÿÿÿÿúÿÿÿãÿÿÿúÿÿÿéÿÿÿüÿÿÿøÿÿÿéÿÿÿüÿÿÿüÿÿÿäÿÿÿúÿÿÿäÿÿÿúÿÿÿêÿÿÿýÿÿÿøÿÿÿêÿÿÿþÿÿÿúÿÿÿéÿÿÿüÿÿÿøÿÿÿéÿÿÿüÿÿÿùÿÿÿîÿÿÿùÿÿÿ÷ÿÿÿîÿÿÿúÿÿÿúÿÿÿêÿÿÿýÿÿÿøÿÿÿêÿÿÿþÿÿÿùÿÿÿïÿÿÿúÿÿÿ÷ÿÿÿïÿÿÿûÿÿÿùÿÿÿîÿÿÿùÿÿÿ÷ÿÿÿîÿÿÿúÿÿÿøÿÿÿñÿÿÿøÿÿÿöÿÿÿñÿÿÿùÿÿÿùÿÿÿïÿÿÿúÿÿÿ÷ÿÿÿïÿÿÿûÿÿÿøÿÿÿòÿÿÿùÿÿÿöÿÿÿòÿÿÿúÿÿÿðÿÿÿþÿÿÿðÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿüÿÿÿðÿÿÿñÿÿÿöÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿöÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿúÿÿÿüÿÿÿúÿÿÿöÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿüÿÿÿýÿÿÿýÿÿÿýÿÿÿþÿÿÿùÿÿÿþÿÿÿúÿÿÿÿÿÿÿûÿÿÿúÿÿÿüÿÿÿúÿÿÿþÿÿÿþÿÿÿþÿÿÿñÿÿÿþÿÿÿüÿÿÿñÿÿÿþÿÿÿþÿÿÿ÷ÿÿÿüÿÿÿ÷ÿÿÿþÿÿÿðÿÿÿüÿÿÿðÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿþÿÿÿ÷ÿÿÿüÿÿÿ÷ÿÿÿþÿÿÿýÿÿÿûÿÿÿýÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿþÿÿÿüÿÿÿûÿÿÿüÿÿÿþÿÿÿÿÿÿÿûÿÿÿýÿÿÿþÿÿÿúÿÿÿþÿÿÿþÿÿÿüÿÿÿûÿÿÿýÿÿÿýÿÿÿûÿÿÿúÿÿÿüÿÿÿãÿÿÿ#  - -   - -  -     ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok&p"RÜÿÿÿäÿÿÿJDÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ*$ÌÿÿÿÔÿÿÿwMÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²6Réÿÿÿæÿÿÿ-éÿÿÿæÿÿÿÒÿÿÿéÿÿÿÒÿÿÿéÿÿÿ-éÿÿÿóÿÿÿ@éÿÿÿ @éÿÿÿ ¿ÿÿÿéÿÿÿóÿÿÿ¿ÿÿÿßÿÿÿæÿÿÿ-ßÿÿÿæÿÿÿÒÿÿÿßÿÿÿóÿÿÿ¿ÿÿÿßÿÿÿ ¿ÿÿÿßÿÿÿÒÿÿÿßÿÿÿ-ßÿÿÿ @ßÿÿÿóÿÿÿ@éÿÿÿ3éÿÿÿóÿÿÿ3éÿÿÿÒÿÿÿéÿÿÿÒÿÿÿæÿÿÿéÿÿÿóÿÿÿÜÿÿÿéÿÿÿ*æÿÿÿ-æÿÿÿÒÿÿÿÒÿÿÿ- @ ¿ÿÿÿóÿÿÿ¿ÿÿÿ æÿÿÿ- æÿÿÿÒÿÿÿ óÿÿÿ¿ÿÿÿ ¿ÿÿÿ Òÿÿÿ - @ óÿÿÿ@3óÿÿÿ3ÒÿÿÿÒÿÿÿæÿÿÿóÿÿÿÜÿÿÿÜÿÿÿ*éÿÿÿÜÿÿÿóÿÿÿ@ßÿÿÿüÿÿÿßÿÿÿüÿÿÿæÿÿÿæÿÿÿßÿÿÿaüÿÿÿßÿÿÿaüÿÿÿæÿÿÿaæÿÿÿa    +      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmokæq©þÿÿÿÞÿÿÿÿÿÿÿþÿÿÿÞÿÿÿþÿÿÿâÿÿÿÿÿÿÿþÿÿÿâÿÿÿÞÿÿÿÿÿÿÿÞÿÿÿâÿÿÿÿÿÿÿâÿÿÿþÿÿÿâÿÿÿýÿÿÿþÿÿÿâÿÿÿþÿÿÿðÿÿÿýÿÿÿþÿÿÿðÿÿÿâÿÿÿýÿÿÿâÿÿÿðÿÿÿýÿÿÿðÿÿÿåÿÿÿûÿÿÿåÿÿÿüÿÿÿþÿÿÿßÿÿÿùÿÿÿþÿÿÿßÿÿÿûÿÿÿÿÿÿÿæÿÿÿûÿÿÿÿÿÿÿæÿÿÿüÿÿÿüÿÿÿàÿÿÿùÿÿÿüÿÿÿàÿÿÿûÿÿÿþÿÿÿÞÿÿÿùÿÿÿþÿÿÿÞÿÿÿûÿÿÿùÿÿÿÜÿÿÿ÷ÿÿÿùÿÿÿÜÿÿÿùÿÿÿüÿÿÿàÿÿÿùÿÿÿüÿÿÿàÿÿÿûÿÿÿ÷ÿÿÿÝÿÿÿ÷ÿÿÿ÷ÿÿÿÝÿÿÿùÿÿÿøÿÿÿÜÿÿÿ÷ÿÿÿøÿÿÿÜÿÿÿùÿÿÿöÿÿÿÛÿÿÿöÿÿÿöÿÿÿÛÿÿÿøÿÿÿøÿÿÿÝÿÿÿ÷ÿÿÿøÿÿÿÝÿÿÿùÿÿÿõÿÿÿÜÿÿÿöÿÿÿõÿÿÿÜÿÿÿøÿÿÿÿÿÿÿãÿÿÿãÿÿÿüÿÿÿéÿÿÿüÿÿÿéÿÿÿäÿÿÿäÿÿÿýÿÿÿêÿÿÿþÿÿÿêÿÿÿüÿÿÿéÿÿÿüÿÿÿéÿÿÿùÿÿÿîÿÿÿúÿÿÿîÿÿÿ ýÿÿÿêÿÿÿþÿÿÿêÿÿÿúÿÿÿïÿÿÿûÿÿÿïÿÿÿ ùÿÿÿîÿÿÿúÿÿÿîÿÿÿ øÿÿÿñÿÿÿùÿÿÿñÿÿÿ +úÿÿÿïÿÿÿûÿÿÿïÿÿÿ ùÿÿÿòÿÿÿúÿÿÿòÿÿÿ +þÿÿÿðÿÿÿýÿÿÿþÿÿÿðÿÿÿÿÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿöÿÿÿÿÿÿÿðÿÿÿýÿÿÿñÿÿÿÿÿÿÿÿÿÿÿöÿÿÿüÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿöÿÿÿÿÿÿÿúÿÿÿüÿÿÿûÿÿÿúÿÿÿüÿÿÿþÿÿÿÿÿÿÿöÿÿÿüÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿýÿÿÿüÿÿÿûÿÿÿýÿÿÿýÿÿÿþÿÿÿùÿÿÿþÿÿÿûÿÿÿúÿÿÿþÿÿÿþÿÿÿÿÿÿÿûÿÿÿýÿÿÿúÿÿÿûÿÿÿûÿÿÿúÿÿÿüÿÿÿþÿÿÿþÿÿÿûÿÿÿþÿÿÿýÿÿÿþÿÿÿñÿÿÿþÿÿÿñÿÿÿ÷ÿÿÿ÷ÿÿÿðÿÿÿðÿÿÿöÿÿÿöÿÿÿ÷ÿÿÿ÷ÿÿÿýÿÿÿýÿÿÿöÿÿÿöÿÿÿüÿÿÿüÿÿÿÿÿÿÿþÿÿÿþÿÿÿüÿÿÿýÿÿÿûÿÿÿüÿÿÿèÿÿÿÒÿÿÿïÿÿÿ  + +       +  +   +      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok&p"æq©þÿÿÿÞÿÿÿÿÿÿÿþÿÿÿÞÿÿÿþÿÿÿâÿÿÿÿÿÿÿþÿÿÿâÿÿÿÞÿÿÿÿÿÿÿÞÿÿÿâÿÿÿÿÿÿÿâÿÿÿþÿÿÿâÿÿÿýÿÿÿþÿÿÿâÿÿÿþÿÿÿðÿÿÿýÿÿÿþÿÿÿðÿÿÿâÿÿÿýÿÿÿâÿÿÿðÿÿÿýÿÿÿðÿÿÿÿÿÿÿæÿÿÿûÿÿÿæÿÿÿüÿÿÿäÿÿÿùÿÿÿäÿÿÿûÿÿÿþÿÿÿãÿÿÿûÿÿÿþÿÿÿãÿÿÿüÿÿÿáÿÿÿùÿÿÿáÿÿÿûÿÿÿãÿÿÿùÿÿÿãÿÿÿûÿÿÿ +ßÿÿÿ÷ÿÿÿ ßÿÿÿùÿÿÿâÿÿÿùÿÿÿâÿÿÿûÿÿÿÝÿÿÿ÷ÿÿÿÝÿÿÿùÿÿÿ ßÿÿÿ÷ÿÿÿ +ßÿÿÿùÿÿÿ Ýÿÿÿöÿÿÿ ÝÿÿÿøÿÿÿÝÿÿÿ÷ÿÿÿ Ýÿÿÿùÿÿÿ +Ûÿÿÿöÿÿÿ Ûÿÿÿøÿÿÿÿÿÿÿãÿÿÿãÿÿÿüÿÿÿéÿÿÿüÿÿÿéÿÿÿäÿÿÿäÿÿÿýÿÿÿêÿÿÿþÿÿÿêÿÿÿüÿÿÿéÿÿÿüÿÿÿéÿÿÿùÿÿÿîÿÿÿúÿÿÿîÿÿÿ ýÿÿÿêÿÿÿþÿÿÿêÿÿÿúÿÿÿïÿÿÿûÿÿÿïÿÿÿ ùÿÿÿîÿÿÿúÿÿÿîÿÿÿ øÿÿÿñÿÿÿùÿÿÿñÿÿÿ +úÿÿÿïÿÿÿûÿÿÿïÿÿÿ ùÿÿÿòÿÿÿúÿÿÿòÿÿÿ +þÿÿÿðÿÿÿýÿÿÿþÿÿÿðÿÿÿÿÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿöÿÿÿÿÿÿÿðÿÿÿýÿÿÿñÿÿÿÿÿÿÿÿÿÿÿöÿÿÿüÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿöÿÿÿÿÿÿÿúÿÿÿüÿÿÿûÿÿÿúÿÿÿüÿÿÿþÿÿÿÿÿÿÿöÿÿÿüÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿýÿÿÿüÿÿÿûÿÿÿýÿÿÿýÿÿÿþÿÿÿùÿÿÿþÿÿÿûÿÿÿúÿÿÿþÿÿÿþÿÿÿÿÿÿÿûÿÿÿýÿÿÿúÿÿÿûÿÿÿûÿÿÿúÿÿÿüÿÿÿþÿÿÿþÿÿÿûÿÿÿþÿÿÿýÿÿÿþÿÿÿñÿÿÿþÿÿÿñÿÿÿ÷ÿÿÿ÷ÿÿÿðÿÿÿðÿÿÿöÿÿÿöÿÿÿ÷ÿÿÿ÷ÿÿÿýÿÿÿýÿÿÿöÿÿÿöÿÿÿüÿÿÿüÿÿÿÿÿÿÿþÿÿÿþÿÿÿüÿÿÿýÿÿÿûÿÿÿüÿÿÿÒÿÿÿïÿÿÿ  + +       +  +   +      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok&p" æq©þÿÿÿÞÿÿÿÿÿÿÿþÿÿÿÞÿÿÿþÿÿÿâÿÿÿÿÿÿÿþÿÿÿâÿÿÿÞÿÿÿÿÿÿÿÞÿÿÿâÿÿÿÿÿÿÿâÿÿÿþÿÿÿâÿÿÿýÿÿÿþÿÿÿâÿÿÿþÿÿÿðÿÿÿýÿÿÿþÿÿÿðÿÿÿâÿÿÿýÿÿÿâÿÿÿðÿÿÿýÿÿÿðÿÿÿþÿÿÿåÿÿÿûÿÿÿÿÿÿÿåÿÿÿüÿÿÿåÿÿÿùÿÿÿåÿÿÿûÿÿÿþÿÿÿãÿÿÿûÿÿÿÿÿÿÿãÿÿÿüÿÿÿãÿÿÿùÿÿÿãÿÿÿûÿÿÿåÿÿÿùÿÿÿåÿÿÿûÿÿÿ åÿÿÿ÷ÿÿÿ åÿÿÿùÿÿÿãÿÿÿùÿÿÿãÿÿÿûÿÿÿ ãÿÿÿ÷ÿÿÿ ãÿÿÿùÿÿÿ åÿÿÿ÷ÿÿÿ åÿÿÿùÿÿÿåÿÿÿöÿÿÿåÿÿÿøÿÿÿ ãÿÿÿ÷ÿÿÿ ãÿÿÿùÿÿÿãÿÿÿöÿÿÿãÿÿÿøÿÿÿÿÿÿÿãÿÿÿãÿÿÿüÿÿÿéÿÿÿüÿÿÿéÿÿÿäÿÿÿäÿÿÿýÿÿÿêÿÿÿþÿÿÿêÿÿÿüÿÿÿéÿÿÿüÿÿÿéÿÿÿùÿÿÿîÿÿÿúÿÿÿîÿÿÿ ýÿÿÿêÿÿÿþÿÿÿêÿÿÿúÿÿÿïÿÿÿûÿÿÿïÿÿÿ ùÿÿÿîÿÿÿúÿÿÿîÿÿÿ øÿÿÿñÿÿÿùÿÿÿñÿÿÿ +úÿÿÿïÿÿÿûÿÿÿïÿÿÿ ùÿÿÿòÿÿÿúÿÿÿòÿÿÿ +þÿÿÿðÿÿÿýÿÿÿþÿÿÿðÿÿÿÿÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿöÿÿÿÿÿÿÿðÿÿÿýÿÿÿñÿÿÿÿÿÿÿÿÿÿÿöÿÿÿüÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿöÿÿÿÿÿÿÿúÿÿÿüÿÿÿûÿÿÿúÿÿÿüÿÿÿþÿÿÿÿÿÿÿöÿÿÿüÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿýÿÿÿüÿÿÿûÿÿÿýÿÿÿýÿÿÿþÿÿÿùÿÿÿþÿÿÿûÿÿÿúÿÿÿþÿÿÿþÿÿÿÿÿÿÿûÿÿÿýÿÿÿúÿÿÿûÿÿÿûÿÿÿúÿÿÿüÿÿÿþÿÿÿþÿÿÿûÿÿÿþÿÿÿýÿÿÿþÿÿÿñÿÿÿþÿÿÿñÿÿÿ÷ÿÿÿ÷ÿÿÿðÿÿÿðÿÿÿöÿÿÿöÿÿÿ÷ÿÿÿ÷ÿÿÿýÿÿÿýÿÿÿöÿÿÿöÿÿÿüÿÿÿüÿÿÿÿÿÿÿþÿÿÿþÿÿÿüÿÿÿýÿÿÿûÿÿÿüÿÿÿ#ãÿÿÿïÿÿÿ  + +       +  +   +      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok&p"²6R-æÿÿÿÒÿÿÿæÿÿÿÒÿÿÿ-@óÿÿÿ@ ¿ÿÿÿ ¿ÿÿÿóÿÿÿ-æÿÿÿ!Òÿÿÿæÿÿÿ!¿ÿÿÿóÿÿÿ!¿ÿÿÿ !Òÿÿÿ!-!@ !@óÿÿÿ!33óÿÿÿÒÿÿÿæÿÿÿÒÿÿÿÜÿÿÿóÿÿÿ*-æÿÿÿêÿÿÿÒÿÿÿæÿÿÿêÿÿÿÒÿÿÿêÿÿÿ-êÿÿÿ@ êÿÿÿ¿ÿÿÿ êÿÿÿ¿ÿÿÿóÿÿÿêÿÿÿ-æÿÿÿàÿÿÿÒÿÿÿæÿÿÿàÿÿÿ¿ÿÿÿóÿÿÿàÿÿÿ¿ÿÿÿ àÿÿÿÒÿÿÿàÿÿÿ-àÿÿÿ@ àÿÿÿ@óÿÿÿàÿÿÿ3êÿÿÿ3óÿÿÿêÿÿÿÒÿÿÿêÿÿÿæÿÿÿÒÿÿÿêÿÿÿÜÿÿÿóÿÿÿêÿÿÿÜÿÿÿêÿÿÿ*êÿÿÿÜÿÿÿ@óÿÿÿêÿÿÿßÿÿÿýÿÿÿßÿÿÿæÿÿÿæÿÿÿýÿÿÿaßÿÿÿýÿÿÿaßÿÿÿaæÿÿÿaæÿÿÿýÿÿÿ              -    $"$#"!  !"!#"$#! !    "!"%++&%%'&&(''(()),),**,*+-$$-$'()')&3/..232.11523400/3451104-"²éÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file +    $"$#"!  !"!#"$#! !    "!"%++&%%'&&(''(()),),**,*+-$$-$'()')&3/..232.11523400/3451104-" \ No newline at end of file diff --git a/Apps/ToTheFront/AIs/Human.HC b/Apps/ToTheFront/AIs/Human.HC index c48f89a..9096d4e 100644 --- a/Apps/ToTheFront/AIs/Human.HC +++ b/Apps/ToTheFront/AIs/Human.HC @@ -1,7 +1,7 @@ U0 PlayerIndirect() { Unit *tmpu=NULL; - I64 i,remaining=0,msg_code,a1,a2; + I64 i,remaining=0,msg_code,arg1,arg2; F64 target_x,target_y; ViewPlayerSet(cur_player); for (i=0;iplayer==enemy_player || tmpu->fired || !tmpu->indirect_fire) @@ -33,10 +33,10 @@ U0 PlayerIndirect() } } break; - case MSG_IP_L_UP: - if (CursorInWin(Fs,a1,a2)) { - a1-=x0; a2-=y0; - CursorUpdate(Fs,a1,a2); + case MSG_MS_L_UP: + if (CursorInWin(Fs,arg1,arg2)) { + arg1-=x0; arg2-=y0; + CursorUpdate(Fs,arg1,arg2); RowCol2XY(&target_x,&target_y,cursor_row,cursor_col); if (!tmpu) Beep; @@ -53,8 +53,8 @@ U0 PlayerIndirect() tmpu=NULL; fire_radius=0; break; - case MSG_IP_R_UP: - if (CursorInWin(Fs,a1,a2)) + case MSG_MS_R_UP: + if (CursorInWin(Fs,arg1,arg2)) throw('PhaseOvr',TRUE); break; } @@ -65,42 +65,42 @@ U0 PlayerIndirect() U0 PlayerMove() { Unit *tmpu=NULL; - I64 msg_code,a1,a2; + I64 msg_code,arg1,arg2; ViewPlayerSet(cur_player); while (TRUE) { if (!alive_cnt[0] || !alive_cnt[1]) throw('GameOver',TRUE); - msg_code=GetMsg(&a1,&a2,1<player==enemy_player || !tmpu->remaining_movement) tmpu=NULL; } } break; - case MSG_IP_L_UP: - if (CursorInWin(Fs,a1,a2)) { - a1-=x0; a2-=y0; - CursorUpdate(Fs,a1,a2); + case MSG_MS_L_UP: + if (CursorInWin(Fs,arg1,arg2)) { + arg1-=x0; arg2-=y0; + CursorUpdate(Fs,arg1,arg2); if (!tmpu) Beep; else { - UnitMove(tmpu,a1,a2); + UnitMove(tmpu,arg1,arg2); break; } } tmpu=NULL; break; - case MSG_IP_R_UP: - if (CursorInWin(Fs,a1,a2)) + case MSG_MS_R_UP: + if (CursorInWin(Fs,arg1,arg2)) throw('PhaseOvr',TRUE); break; } @@ -110,21 +110,21 @@ U0 PlayerMove() U0 PlayerDirect() { Unit *tmpu=NULL,*target; - I64 msg_code,a1,a2; + I64 msg_code,arg1,arg2; ViewPlayerSet(cur_player); while (TRUE) { if (!alive_cnt[0] || !alive_cnt[1]) throw('GameOver',TRUE); - msg_code=GetMsg(&a1,&a2,1<player==enemy_player || tmpu->fired || tmpu->indirect_fire) @@ -138,10 +138,10 @@ U0 PlayerDirect() } } break; - case MSG_IP_L_UP: - if (CursorInWin(Fs,a1,a2)) { - a1-=x0; a2-=y0; - CursorUpdate(Fs,a1,a2); + case MSG_MS_L_UP: + if (CursorInWin(Fs,arg1,arg2)) { + arg1-=x0; arg2-=y0; + CursorUpdate(Fs,arg1,arg2); target=UnitFind(cursor_row,cursor_col); if (!tmpu) Beep; @@ -157,8 +157,8 @@ U0 PlayerDirect() tmpu=NULL; fire_radius=0; break; - case MSG_IP_R_UP: - if (CursorInWin(Fs,a1,a2)) + case MSG_MS_R_UP: + if (CursorInWin(Fs,arg1,arg2)) throw('PhaseOvr',TRUE); break; } diff --git a/Apps/ToTheFront/TTFDraw.HC b/Apps/ToTheFront/TTFDraw.HC index 72f9f9b..bf19669 100644 Binary files a/Apps/ToTheFront/TTFDraw.HC and b/Apps/ToTheFront/TTFDraw.HC differ diff --git a/Apps/ToTheFront/TTFFire.HC b/Apps/ToTheFront/TTFFire.HC index 428b354..b964d36 100644 --- a/Apps/ToTheFront/TTFFire.HC +++ b/Apps/ToTheFront/TTFFire.HC @@ -65,7 +65,7 @@ Bool DamageDo(Unit *target,F64 damage) "%3d Life - %3f Damage\t=",target->life,damage; if (damage>=target->life) { "$$RED$$Killed$$FG$$\n"; - Noise(1000*animation_delay,1000,4000); + Noise(1000*animation_delay,74,98); Sleep(1000*animation_delay); target->life=0; VisRecalc(VR_FRIENDLY_UNIT_DIED,target); @@ -140,13 +140,13 @@ U0 UnitDirectFire(Unit *tmpu,Unit *target) if (d>=0) { "+%5.2f Hit\n",d; target_hit=TRUE; - Noise(500*animation_delay,100,150); + Noise(500*animation_delay,34,41); Sleep(500*animation_delay); Line(NULL,x1,y1,0,x2,y2,0,&BulletPlot); } else { "-%5.2f Miss\n",-d; target_hit=FALSE; - Noise(1000*animation_delay,750,1000); + Noise(1000*animation_delay,69,74); Sleep(1000*animation_delay); a=ã*2*Rand; d=(0.5-d/100)*HEX_SIDE; @@ -162,7 +162,7 @@ U0 UnitDirectFire(Unit *tmpu,Unit *target) facing=0; DamageDo(target,HitDamage(tmpu,target,facing,range_factor)); } - while (snd.freq) //see $LK,"Snd",A="MN:Snd"$() + while (snd.ona!=ONA_REST) //see $LK,"Snd",A="MN:Snd"$() Yield; target_unit=NULL; } @@ -177,7 +177,7 @@ Bool HexOccupy(Bool overrun,Unit *tmpu,Unit *target) AttackHeader(tmpu,"OverRun",target); else AttackHeader(tmpu,"CloseAssault",target); - Noise(500*animation_delay,100,150); + Noise(500*animation_delay,34,41); Sleep(500*animation_delay); tmpu->fired=TRUE; target->fired=TRUE; @@ -195,7 +195,7 @@ Bool HexOccupy(Bool overrun,Unit *tmpu,Unit *target) } if (DamageDo(target,Round(damage))) { "$$RED$$Success$$FG$$\n"; - while (snd.freq) //see $LK,"Snd",A="MN:Snd"$() + while (snd.ona!=ONA_REST) //see $LK,"Snd",A="MN:Snd"$() Yield; return TRUE; } else { @@ -203,7 +203,7 @@ Bool HexOccupy(Bool overrun,Unit *tmpu,Unit *target) VisRecalc(VR_FRIENDLY_UNIT_DIED,tmpu); alive_cnt[tmpu->player]--; "$$RED$$Failure$$FG$$\n"; - while (snd.freq) //see $LK,"Snd",A="MN:Snd"$() + while (snd.ona!=ONA_REST) //see $LK,"Snd",A="MN:Snd"$() Yield; return FALSE; } @@ -233,11 +233,11 @@ U0 IndirectResolveAll() if (d>=0) { "+%5.2f Hit\n",d; - Noise(500*animation_delay,100,150); + Noise(500*animation_delay,34,41); Sleep(500*animation_delay); } else { "-%5.2f Miss\n",-d; - Noise(1000*animation_delay,750,1000); + Noise(1000*animation_delay,69,74); Sleep(1000*animation_delay); i=RandU16%6; if (tmpi->row&1) @@ -265,9 +265,9 @@ U0 IndirectResolveAll() DamageDo(target,HitDamage(tmpu,target)); } } - Noise(2000*animation_delay,800,1000); + Noise(2000*animation_delay,70,74); Sleep(2000*animation_delay); - while (snd.freq) //see $LK,"Snd",A="MN:Snd"$() + while (snd.ona!=ONA_REST) //see $LK,"Snd",A="MN:Snd"$() Yield; indirect_explosion=FALSE; diff --git a/Apps/ToTheFront/TTFMove.HC b/Apps/ToTheFront/TTFMove.HC index e529ae3..b36a1d5 100644 --- a/Apps/ToTheFront/TTFMove.HC +++ b/Apps/ToTheFront/TTFMove.HC @@ -64,10 +64,10 @@ U0 UnitMoveAnimation(Unit *tmpu,I64 r,I64 c,I64 facing) move_x=x1; move_y=y1; moving=TRUE; if (tmpu->infantry) - Snd(300); + Snd(53); else { move_facing=tmpu->facing*60.0*ã/180.0; - Snd(150); + Snd(41); while (Wrap(f-move_facing,-ã)<=0) { move_facing-=0.03; Sleep(5*animation_delay); @@ -76,12 +76,12 @@ U0 UnitMoveAnimation(Unit *tmpu,I64 r,I64 c,I64 facing) move_facing+=0.03; Sleep(5*animation_delay); } - Snd(100); + Snd(34); } move_facing=f; RowCol2XY(&x2,&y2,r,c); Line(NULL,x1,y1,0,x2,y2,0,&UnitMovePlot); - Snd(0); + Snd; moving_unit=NULL; moving=FALSE; } diff --git a/Apps/ToTheFront/TTFVis.HC b/Apps/ToTheFront/TTFVis.HC index 367c093..1c8fb4b 100644 --- a/Apps/ToTheFront/TTFVis.HC +++ b/Apps/ToTheFront/TTFVis.HC @@ -144,7 +144,7 @@ stk size, so don't get in the habit. $LK,"MAlloc",A="MN:MAlloc"$() would probably be the better choice. */ MPCtrl1 job[mp_cnt]; - CSrvCmd *cmd[mp_cnt]; + CJob *cmd[mp_cnt]; if (mode==VR_FRIENDLY_UNIT_DIED) { MemSet((&vis_unit_bitmap[enemy_player])(U8 *)+ @@ -200,7 +200,7 @@ U0 VisRecalcMap(I64 row,I64 col) { I64 i,hi,k,cnt; MPCtrl2 job[mp_cnt]; - CSrvCmd *cmd[mp_cnt]; + CJob *cmd[mp_cnt]; cnt=mp_cnt; //Cores hi=map_rows; diff --git a/Apps/ToTheFront/ToTheFront.HC b/Apps/ToTheFront/ToTheFront.HC index 81288b8..cea77d7 100644 --- a/Apps/ToTheFront/ToTheFront.HC +++ b/Apps/ToTheFront/ToTheFront.HC @@ -16,7 +16,7 @@ U0 TurnNew() SleepUntil(msg_off_timeout); msg_off_timeout=cnts.jiffies+JIFFY_FREQ*2*animation_delay+1; - Snd(1000); + Snd(74); StrPrint(msg_buf,"Turn %d",++turn); VRSetUp(0); VRSetUp(1); @@ -36,7 +36,7 @@ U0 PhaseNew() SleepUntil(msg_off_timeout); msg_off_timeout=cnts.jiffies+JIFFY_FREQ*2*animation_delay+1; - Snd(1000); + Snd(74); switch (phase) { case PHASE_INDIRECT0: case PHASE_INDIRECT1: @@ -102,7 +102,7 @@ U0 UserChk() U0 TaskEndCB() { - Snd(0); + Snd; progress4=progress4_max=progress1=progress1_max=0; Exit; } @@ -132,7 +132,7 @@ U0 ToTheFront() SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ Cd(__DIR__); - Fs->win_inhibit|=WIF_SELF_IP_L|WIF_SELF_IP_R|WIG_DBL_CLICK; + Fs->win_inhibit|=WIF_SELF_MS_L|WIF_SELF_MS_R|WIG_DBL_CLICK; MenuPush( "File {" @@ -181,7 +181,7 @@ U0 ToTheFront() while (TRUE) { msg_off_timeout=0; StrCpy(msg_buf,"Game Over"); - Snd(0); + Snd; ch=GetChar(,FALSE); if (ch=='\n') { CleanUp; diff --git a/Apps/Vocabulary/VocabQuiz.HC b/Apps/Vocabulary/VocabQuiz.HC index ac3eb7c..2610d22 100644 --- a/Apps/Vocabulary/VocabQuiz.HC +++ b/Apps/Vocabulary/VocabQuiz.HC @@ -41,13 +41,13 @@ U0 VocabQuiz() '\n'; if (ch-'1'==num) { "$$LTGREEN$$Correct\n$$FG$$"; - Snd(1000); + Snd(74); } else { "$$LTRED$$Incorrect\n$$FG$$"; - Snd(200); + Snd(46); } Sleep(500); - Snd(0); + Snd; ACDPopUpDef(right_word); break; } diff --git a/Apps/X-Caliber/X-Caliber.HC b/Apps/X-Caliber/X-Caliber.HC index 49b6ad8..80cb706 100644 --- a/Apps/X-Caliber/X-Caliber.HC +++ b/Apps/X-Caliber/X-Caliber.HC @@ -1,15 +1,18 @@ -#define XMSGF_ANTISPIN 0 -RegSetDftEntry("TempleOS/XCaliber", +#define XMSGF_ANTISPIN 0 +#define XMSGF_SOLAR_STORM 1 +RegDft("TempleOS/XCaliber", "I64 best_score=0;\n" "I64 msg_flags=0;\n" ); -RegExeBranch("TempleOS/XCaliber"); +RegExe("TempleOS/XCaliber"); #define MT_HUMAN_SHIP 0 #define MT_ENEMY_SHIP 1 -#define MT_SUPER_NAPALM_BALL 2 -#define MT_SUPER_NAPALM_SPLAT 3 -#define MT_MISSILE 4 +#define MT_SOLAR_FLARE 2 +#define MT_ION 3 +#define MT_ANTIMATTER_BALL 4 +#define MT_ANTIMATTER_SPLAT 5 +#define MT_MISSILE 6 class MyMass:CMass { @@ -71,6 +74,9 @@ class Shot MyMass p; } shot_head; +F64 t_solar_storm; +Bool alarm; + #define MAX_THRUST 200.0 #define MAX_ANTISPIN 25.0 #define SPACEWALK_TIME 7.5 @@ -396,8 +402,7 @@ I64 Tweaked() if (human) { D3Sub(&p1,&human->p[0].x,&human->p[1].x); D3Sub(&p2,&human->p[0].x,&human->p[2].x); - D3Add(&p,&p1,&p2); - D3Unit(&p); + D3Unit(D3Add(&p,&p1,&p2)); D3Sub(&p1,&human->p[0].x,&human->p[3].x); D3Sub(&p2,&human->p[0].x,&human->p[4].x); D3Unit(&p1); @@ -471,7 +476,10 @@ U0 DrawIt(CTask *task,CDC *dc) tmpm=ode->next_mass; while (tmpm!=&ode->next_mass) { - if (tmpm->type==MT_SUPER_NAPALM_SPLAT) { + if (tmpm->type==MT_ANTIMATTER_SPLAT) { + dc->color=LTGREEN; + GrPlot(dc,tmpm->x,tmpm->y); + } else if (tmpm->type==MT_ION) { dc->color=YELLOW; GrPlot(dc,tmpm->x,tmpm->y); } @@ -502,7 +510,7 @@ U0 DrawIt(CTask *task,CDC *dc) GrCircle(dc,tmpmi->p_front.x,tmpmi->p_front.y,i); } } else - SpriteZ3B(dc,(tmpmi->p_front.x+tmpmi->p_back.x)/2, + Sprite3ZB(dc,(tmpmi->p_front.x+tmpmi->p_back.x)/2, (tmpmi->p_front.y+tmpmi->p_back.y)/2,0,tmpmi->img, Arg(tmpmi->p_front.x-tmpmi->p_back.x, tmpmi->p_front.y-tmpmi->p_back.y)); @@ -547,7 +555,7 @@ U0 DrawIt(CTask *task,CDC *dc) D3AddEqu(D3Mul(&p1,t_left/25,&p),&tmpsp->p[3].x); GrLine(dc,tmpsp->p[1].x,tmpsp->p[1].y,p1.x,p1.y); arg=Arg(p.x,p.y); - SpriteZ3B(dc,tmpsp->p[3].x,tmpsp->p[3].y,0,$IB,"",BI=1$,arg); + Sprite3ZB(dc,tmpsp->p[3].x,tmpsp->p[3].y,0,$IB,"",BI=1$,arg); } if (!(tmpsp->s[5].flags&SSF_INACTIVE)) { @@ -555,7 +563,7 @@ U0 DrawIt(CTask *task,CDC *dc) D3AddEqu(D3Mul(&p2,t_right/25,&p),&tmpsp->p[4].x); GrLine(dc,tmpsp->p[2].x,tmpsp->p[2].y,p2.x,p2.y); arg=Arg(p.x,p.y); - SpriteZ3B(dc,tmpsp->p[4].x,tmpsp->p[4].y,0,$IB,"",BI=1$,arg); + Sprite3ZB(dc,tmpsp->p[4].x,tmpsp->p[4].y,0,$IB,"",BI=1$,arg); } if (tS>tmpsp->reload_timeout) @@ -566,22 +574,22 @@ U0 DrawIt(CTask *task,CDC *dc) switch (level) { case 3: if (!(tmpsp->s[3].flags&SSF_INACTIVE)) - SpriteZ3B(dc,tmpsp->p[3].x,tmpsp->p[3].y,0,img,arg); + Sprite3ZB(dc,tmpsp->p[3].x,tmpsp->p[3].y,0,img,arg); if (!(tmpsp->s[5].flags&SSF_INACTIVE)) - SpriteZ3B(dc,tmpsp->p[4].x,tmpsp->p[4].y,0,img,arg); + Sprite3ZB(dc,tmpsp->p[4].x,tmpsp->p[4].y,0,img,arg); case 2: if (!(tmpsp->s[1].flags&SSF_INACTIVE)) - SpriteZ3B(dc,tmpsp->p[1].x,tmpsp->p[1].y,0,img,arg); + Sprite3ZB(dc,tmpsp->p[1].x,tmpsp->p[1].y,0,img,arg); if (!(tmpsp->s[2].flags&SSF_INACTIVE)) - SpriteZ3B(dc,tmpsp->p[2].x,tmpsp->p[2].y,0,img,arg); + Sprite3ZB(dc,tmpsp->p[2].x,tmpsp->p[2].y,0,img,arg); case 1: - SpriteZ3B(dc,tmpsp->p[0].x,tmpsp->p[0].y,0,img,arg); + Sprite3ZB(dc,tmpsp->p[0].x,tmpsp->p[0].y,0,img,arg); break; default: - SpriteZ3B(dc,tmpsp->p[0].x,tmpsp->p[0].y,0,$IB,"",BI=6$,arg); + Sprite3ZB(dc,tmpsp->p[0].x,tmpsp->p[0].y,0,$IB,"",BI=6$,arg); if (tmpsp->lasering && !tmpsp->laser_overheat) { draw_laser_line=TRUE; - Snd(1000); + Snd(74); } } @@ -606,7 +614,7 @@ U0 DrawIt(CTask *task,CDC *dc) y=tmpsp->p[tmpsp->spacewalk_side].y*(1.0-d)+ tmpsp->p[0].y*(d); } - SpriteZ3B(dc,x,y,0,$IB,"",BI=4$,arg+0.75*Sin(tS*2)); + Sprite3ZB(dc,x,y,0,$IB,"",BI=4$,arg+0.75*Sin(tS*2)); } } else { if (ctrl_panel.spacewalk) { @@ -634,12 +642,12 @@ U0 DrawIt(CTask *task,CDC *dc) else img=$IB,"",BI=3$; arg=Arg(p.x,p.y); - SpriteZ3B(dc,tmpsp->p[0].x,tmpsp->p[0].y,0,img,arg); + Sprite3ZB(dc,tmpsp->p[0].x,tmpsp->p[0].y,0,img,arg); arg=Arg(p1.x,p1.y); - SpriteZ3B(dc,tmpsp->p[0].x+p1.x,tmpsp->p[0].y+p1.y,0, + Sprite3ZB(dc,tmpsp->p[0].x+p1.x,tmpsp->p[0].y+p1.y,0, $IB,"",BI=5$,arg); arg=Arg(p2.x,p2.y); - SpriteZ3B(dc,tmpsp->p[0].x+p2.x,tmpsp->p[0].y+p2.y,0, + Sprite3ZB(dc,tmpsp->p[0].x+p2.x,tmpsp->p[0].y+p2.y,0, $IB,"",BI=5$,arg); break; } @@ -765,23 +773,23 @@ U0 MyDerivative(CMathODE *ode,F64,COrder2D3 *,COrder2D3 *) tmpm=ode->next_mass; while (tmpm!=&ode->next_mass) { - d=tmpm->state->x; - if (d-tmpm->radius<0) - tmpm->DstateDt->DxDt+=Sqr(Sqr(Sqr(d-tmpm->radius))); - if (d+tmpm->radius>task->pix_width) - tmpm->DstateDt->DxDt-=Sqr(Sqr(Sqr((d+tmpm->radius)-task->pix_width))); - - d=tmpm->state->y; - if (d-tmpm->radius<0) - tmpm->DstateDt->DyDt+=Sqr(Sqr(Sqr(d-tmpm->radius))); - if (d+tmpm->radius>task->pix_height) - tmpm->DstateDt->DyDt-=Sqr(Sqr(Sqr((d+tmpm->radius)-task->pix_height))); - - if (tmpm->type!=MT_SUPER_NAPALM_SPLAT) { + if (tmpm->type!=MT_SOLAR_FLARE && tmpm->type!=MT_ION) { + d=tmpm->state->x; + if (d-tmpm->radius<0) + tmpm->DstateDt->DxDt+=Sqr(Sqr(Sqr(d-tmpm->radius))); + if (d+tmpm->radius>task->pix_width) + tmpm->DstateDt->DxDt-=Sqr(Sqr(Sqr((d+tmpm->radius)-task->pix_width))); + d=tmpm->state->y; + if (d-tmpm->radius<0) + tmpm->DstateDt->DyDt+=Sqr(Sqr(Sqr(d-tmpm->radius))); + if (d+tmpm->radius>task->pix_height) + tmpm->DstateDt->DyDt-=Sqr(Sqr(Sqr((d+tmpm->radius)-task->pix_height))); + } + if (tmpm->type!=MT_ION && tmpm->type!=MT_ANTIMATTER_SPLAT) { tmpm1=ode->next_mass; while (tmpm1!=&ode->next_mass) { if (tmpm!=tmpm1) { - if (tmpm1->type==MT_SUPER_NAPALM_SPLAT) { + if (tmpm1->type==MT_ANTIMATTER_SPLAT) { if (tmpm->type==MT_HUMAN_SHIP || tmpm->type==MT_ENEMY_SHIP) { D3Sub(&p,&tmpm->state->x,&tmpm1->state->x); dd=D3NormSqr(&p)+1; @@ -790,7 +798,7 @@ U0 MyDerivative(CMathODE *ode,F64,COrder2D3 *,COrder2D3 *) D3AddEqu(&tmpm1->DstateDt->DxDt,&p); } } - } else { + } else if (tmpm1->type!=MT_ION) { D3Sub(&p,&tmpm->state->x,&tmpm1->state->x); dd=D3NormSqr(&p); dd2=Sqr(tmpm->radius+tmpm1->radius); @@ -915,13 +923,34 @@ U0 CheckDamage() MyMass *tmpm,*tmpm1,*best_mass; CD3 p,p1,p2; F64 d,best_distance; + Bool facing_sun=FALSE; + + if (human) { + D3Sub(&p1,&human->p[1].x,&human->p[0].x); + D3Sub(&p2,&human->p[2].x,&human->p[0].x); + D3Add(&p,&p1,&p2); + if (p.x>0) + facing_sun=TRUE; + } tmpm=ode->next_mass; while (tmpm!=&ode->next_mass) { - if (tmpm->type==MT_SUPER_NAPALM_SPLAT) { + if (tmpm->type==MT_ION) { + if (facing_sun) { + tmpm1=ode->next_mass; + while (tmpm1!=&ode->next_mass) { + if (tmpm1->type==MT_HUMAN_SHIP) { + D3Sub(&p,&tmpm1->x,&tmpm->x); + if (D3NormSqr(&p)radius)) + tmpm1->temperature+=3.0; + } + tmpm1=tmpm1->next; + } + } + } else if (tmpm->type==MT_ANTIMATTER_SPLAT) { tmpm1=ode->next_mass; while (tmpm1!=&ode->next_mass) { - if (tmpm1->type!=MT_SUPER_NAPALM_SPLAT) { + if (tmpm1->type!=MT_ION && tmpm1->type!=MT_ANTIMATTER_SPLAT) { D3Sub(&p,&tmpm1->x,&tmpm->x); if (D3NormSqr(&p)radius)) tmpm1->temperature+=0.4; @@ -943,7 +972,7 @@ U0 CheckDamage() if (!human->laser_overheat && human->lasering) { if (human->laser_temperature>=LASER_MAX_TEMP) { human->laser_overheat=TRUE; - Snd(0); + Snd; } else { human->laser_temperature+=1.0; D3Sub(&p1,&human->p[0].x,&human->p[1].x); @@ -1027,7 +1056,7 @@ U0 CheckDamage() tmpsp->exploding=TRUE; tmpsp->die_time=tS; tmpsp->die_timeout=tS+0.75; - Noise(750,1000,3000); + Noise(750,74,93); if (tmpsp->type==ST_HUMAN1) game_over=TRUE; } @@ -1038,30 +1067,61 @@ U0 CheckDamage() //********************************** Shots -U0 FireOneGun(Ship *tmpsp,I64 n,F64 r,F64 fuse_time) +Shot *ShotNew(I64 type,CD3 *_p,CD3 *_v,F64 r,F64 fuse_time, + CD3 *_p_gun_offset=NULL) { - CD3 p,p1,p2; - Shot *tmps; - - tmps=CAlloc(sizeof(Shot)); - D3Copy(&tmps->p.x,&tmpsp->p[n].x); + Shot *tmps=CAlloc(sizeof(Shot)); + D3Copy(&tmps->p.x,_p); tmps->radius=r; tmps->splats=20*r; tmps->fuse_time=tS+fuse_time; tmps->p.mass=0.3*r*r*r; - tmps->p.type=MT_SUPER_NAPALM_BALL; + tmps->p.type=type; + if (_p_gun_offset) + D3AddEqu(&tmps->p.x,_p_gun_offset); + D3Copy(&tmps->p.DxDt,_v); + QueIns(&tmps->p,ode->last_mass); + QueIns(tmps,shot_head.last); +} + +U0 SolarFlares() +{ + CD3 p,v,p1,p2; + CTask *task=ode->win_task; + if (!alarm && t_solar_storm-2.0pix_height,0); + D3Equ(&v,200.0,0,0); + ShotNew(MT_SOLAR_FLARE,&p,&v,25,0.1); + } + } else { + t_solar_storm=tS+25*Rand; //Schedule next solar storm + alarm=FALSE; + } + } +} + +U0 FireOneGun(Ship *tmpsp,I64 n,F64 r,F64 fuse_time) +{ + I64 ona; + CD3 p,v,p1,p2; + Shot *tmps; D3Sub(&p1,&tmpsp->p[0].x,&tmpsp->p[1].x); D3Sub(&p2,&tmpsp->p[0].x,&tmpsp->p[2].x); D3Unit(D3Add(&p,&p1,&p2)); - D3AddEqu(&tmps->p.x,D3MulEqu(D3Copy(&p1,&p),r+tmpsp->p[0].radius+5)); - D3AddEqu(D3MulEqu(&p,1000/(r+1)),&tmpsp->p[n].DxDt); - D3Copy(&tmps->p.DxDt,&p); + D3MulEqu(D3Copy(&p1,&p),r+tmpsp->p[0].radius+5); + D3AddEqu(D3MulEqu(D3Copy(&v,&p),1000/(r+1)),&tmpsp->p[n].DxDt); + tmps=ShotNew(MT_ANTIMATTER_BALL,&tmpsp->p[n].x,&v,r,fuse_time,&p1); D3MulEqu(&p,tmps->p.mass/tmpsp->p[n].mass/100.0); D3SubEqu(&tmpsp->p[n].DxDt,&p); - QueIns(&tmps->p,ode->last_mass); - QueIns(tmps,shot_head.last); tmpsp->reload_timeout=tS+r/tmpsp->fire_rate; - Noise(100,r*200,r*400); + ona=Freq2Ona(500/r); + Noise(100,ona,ona+12); } U0 FireOneMissile(Ship *tmpsp,I64 n) @@ -1075,7 +1135,7 @@ U0 FireOneMissile(Ship *tmpsp,I64 n) for (i=1;i<5;i++) tmpmi->s[i].flags|=SSF_INACTIVE; tmpmi->launched=TRUE; - Sweep(250,300,350); + Sweep(250,53,56); } } @@ -1120,33 +1180,44 @@ U0 HumanFireLaserEnd() { if (human && !human->exploding) { human->lasering=FALSE; - Snd(0); + Snd; + } +} + +U0 SplatNew(Shot *tmps,F64 die_time,F64 start,F64 end) +{ + MyMass *tmpm; + F64 é=Arg(tmps->p.DxDt,tmps->p.DyDt); + I64 i; + for (i=0;isplats;i++) { + tmpm=CAlloc(sizeof(MyMass)); + D3Copy(&tmpm->x,&tmps->p.x); + tmpm->radius=1; + tmpm->mass=1; + tmpm->die_timeout=tS+die_time; + if (tmps->p.type==MT_SOLAR_FLARE) + tmpm->type=MT_ION; + else + tmpm->type=MT_ANTIMATTER_SPLAT; + D3Copy(&tmpm->DxDt,&tmps->p.DxDt); + tmpm->DxDt+=50*Sqr(tmps->radius)*Rand* + Sin(start+é+(end-start)*i/tmps->splats); + tmpm->DyDt+=50*Sqr(tmps->radius)*Rand* + Cos(start+é+(end-start)*i/tmps->splats); + QueIns(tmpm,ode->last_mass); } } U0 ExpireShots() { - I64 i; - F64 é; Shot *tmps=shot_head.next,*tmps1; - MyMass *tmpm; - while (tmps!=&shot_head) { tmps1=tmps->next; if (tS>tmps->fuse_time) { - é=Arg(tmps->p.DxDt,tmps->p.DyDt); - for (i=0;isplats;i++) { - tmpm=CAlloc(sizeof(MyMass)); - D3Copy(&tmpm->x,&tmps->p.x); - tmpm->radius=1; - tmpm->mass=1; - tmpm->die_timeout=tS+0.2; - tmpm->type=MT_SUPER_NAPALM_SPLAT; - D3Copy(&tmpm->DxDt,&tmps->p.DxDt); - tmpm->DxDt+=50*Sqr(tmps->radius)*Rand*Sin(é+2*ã*i/tmps->splats); - tmpm->DyDt+=50*Sqr(tmps->radius)*Rand*Cos(é+2*ã*i/tmps->splats); - QueIns(tmpm,ode->last_mass); - } + if (tmps->p.type==MT_SOLAR_FLARE) + SplatNew(tmps,1.0,3*ã/8,5*ã/8); + else + SplatNew(tmps,.2,0,2*ã); QueRem(tmps); QueRem(&tmps->p); Free(tmps); @@ -1161,7 +1232,8 @@ U0 ExpireSplats() tmpm=ode->next_mass; while (tmpm!=&ode->next_mass) { tmpm1=tmpm->next; - if (tmpm->type==MT_SUPER_NAPALM_SPLAT && tS>tmpm->die_timeout) { + if ((tmpm->type==MT_ION || tmpm->type==MT_ANTIMATTER_SPLAT) && + tS>tmpm->die_timeout) { QueRem(tmpm); Free(tmpm); } @@ -1188,7 +1260,7 @@ U0 ExpireMissiles() tmpmi->p_front.mass=10.0; //They go flying, if too light. tmpmi->p_back.mass =10.0; tmpmi->exploding=TRUE; - Noise(50,3000,6000); + Noise(50,93,105); } else if (tS>tmpmi->die_timeout) MissileDel(tmpmi); } @@ -1223,16 +1295,20 @@ U0 InitLevel() I64 i; MyMass *tmpm,*tmpm1; + t_solar_storm=0; + tmpm=ode->next_mass; while (tmpm!=&ode->next_mass) { tmpm1=tmpm->next; - if (tmpm->type==MT_SUPER_NAPALM_SPLAT) { + if (tmpm->type==MT_ION || tmpm->type==MT_ANTIMATTER_SPLAT) { QueRem(tmpm); Free(tmpm); } tmpm=tmpm1; } - + if (level==1) + OneTimePopUp(&msg_flags,XMSGF_SOLAR_STORM, + "Face away from Sun in solar storm.\n"); if (level==4) OneTimePopUp(&msg_flags,XMSGF_ANTISPIN, "Press $$GREEN$$$$FG$$ for anti-spin stabilizer.\n"); @@ -1270,7 +1346,7 @@ U0 Init() //********************************** Main U0 XCaliber() { - I64 ch,msg_code,a1,a2,sc; + I64 ch,msg_code,arg1,arg2,sc; CCtrl *cp=CtrlPanelNew; SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ @@ -1318,10 +1394,10 @@ U0 XCaliber() ch=0; do { while (!game_over && !show_level_msg && - (msg_code=ScanMsg(&a1,&a2,1<color=LTRED; GrRect(dc, c->left,c->top,CTRL_PANEL_SPACING*3+2, - CTRL_PANEL_SPACING*2+CTRL_PANEL_RANGE+CTRL_PANEL_BUTTON_SIZE); + CTRL_PANEL_SPACING*2+CTRL_PANEL_RANGE+CTRL_PANEL_BTTN_SIZE); dc->color=DKGRAY; GrRect(dc, c->left+CTRL_PANEL_BORDER,c->top+CTRL_PANEL_BORDER, CTRL_PANEL_SPACING*3+2-2*CTRL_PANEL_BORDER, - CTRL_PANEL_SPACING*2+CTRL_PANEL_RANGE+CTRL_PANEL_BUTTON_SIZE + CTRL_PANEL_SPACING*2+CTRL_PANEL_RANGE+CTRL_PANEL_BTTN_SIZE -2*CTRL_PANEL_BORDER); dc->color=BLACK; - GrLine(dc,c->left+CTRL_PANEL_SPACING,(c->top+CTRL_PANEL_BUTTON_SIZE)+ + GrLine(dc,c->left+CTRL_PANEL_SPACING,(c->top+CTRL_PANEL_BTTN_SIZE)+ CTRL_PANEL_SPACING,c->left+CTRL_PANEL_SPACING, - (c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING+CTRL_PANEL_RANGE-1); - GrLine(dc,c->left+2*CTRL_PANEL_SPACING+1,(c->top+CTRL_PANEL_BUTTON_SIZE)+ + (c->top+CTRL_PANEL_BTTN_SIZE)+CTRL_PANEL_SPACING+CTRL_PANEL_RANGE-1); + GrLine(dc,c->left+2*CTRL_PANEL_SPACING+1,(c->top+CTRL_PANEL_BTTN_SIZE)+ CTRL_PANEL_SPACING,c->left+2*CTRL_PANEL_SPACING+1, - (c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING+CTRL_PANEL_RANGE-1); + (c->top+CTRL_PANEL_BTTN_SIZE)+CTRL_PANEL_SPACING+CTRL_PANEL_RANGE-1); dc->color=BLACK; GrRect(dc,(c->left+c->right+1)/2-9*FONT_WIDTH/2-3, @@ -55,30 +55,30 @@ U0 DrawCtrlPanelCtrl(CDC *dc,CCtrl *c) c->top+CTRL_PANEL_BORDER+3+ (CTRL_PANEL_SPACING-FONT_HEIGHT)/2,"SpaceWalk"); GrPrint(dc,c->left+CTRL_PANEL_SPACING-4*FONT_WIDTH/2, - (c->top+CTRL_PANEL_BUTTON_SIZE)+ + (c->top+CTRL_PANEL_BTTN_SIZE)+ CTRL_PANEL_SPACING-FONT_HEIGHT-2,"Size"); GrPrint(dc,c->left+2*CTRL_PANEL_SPACING+1-4*FONT_WIDTH/2, - (c->top+CTRL_PANEL_BUTTON_SIZE)+ + (c->top+CTRL_PANEL_BTTN_SIZE)+ CTRL_PANEL_SPACING-FONT_HEIGHT-2,"Fuse"); dc->color=LTRED; GrPrint(dc,c->left+CTRL_PANEL_SPACING-FONT_WIDTH/2, - (c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING+CTRL_PANEL_RANGE+3, + (c->top+CTRL_PANEL_BTTN_SIZE)+CTRL_PANEL_SPACING+CTRL_PANEL_RANGE+3, "%d",s->shot_radius*10/CTRL_PANEL_RANGE); GrPrint(dc,c->left+2*CTRL_PANEL_SPACING+1-FONT_WIDTH/2, - (c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING+CTRL_PANEL_RANGE+3, + (c->top+CTRL_PANEL_BTTN_SIZE)+CTRL_PANEL_SPACING+CTRL_PANEL_RANGE+3, "%d",s->fuse_time*10/CTRL_PANEL_RANGE); GrRect(dc,c->left+CTRL_PANEL_SPACING-3, - (c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING+ + (c->top+CTRL_PANEL_BTTN_SIZE)+CTRL_PANEL_SPACING+ CTRL_PANEL_RANGE-1-s->shot_radius-2 ,7,5); GrRect(dc,c->left+2*CTRL_PANEL_SPACING+1-3, - (c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING+ + (c->top+CTRL_PANEL_BTTN_SIZE)+CTRL_PANEL_SPACING+ CTRL_PANEL_RANGE-1-s->fuse_time-2,7,5); dc->color=YELLOW; GrRect(dc,c->left+CTRL_PANEL_SPACING-2, - (c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING+ + (c->top+CTRL_PANEL_BTTN_SIZE)+CTRL_PANEL_SPACING+ CTRL_PANEL_RANGE-1-s->shot_radius-1 ,5,3); GrRect(dc,c->left+2*CTRL_PANEL_SPACING+1-2, - (c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING+ + (c->top+CTRL_PANEL_BTTN_SIZE)+CTRL_PANEL_SPACING+ CTRL_PANEL_RANGE-1-s->fuse_time-1,5,3); d_range=c->right-c->left-5-5; @@ -106,7 +106,7 @@ U0 UpdateDerivedCtrlPanelCtrl(CCtrl *c) c->left=c->win_task->pix_width-(CTRL_PANEL_SPACING*3+2); c->right=c->left+CTRL_PANEL_SPACING*3+2; c->top=c->win_task->pix_height-(CTRL_PANEL_SPACING*2+ - CTRL_PANEL_RANGE+CTRL_PANEL_BUTTON_SIZE); + CTRL_PANEL_RANGE+CTRL_PANEL_BTTN_SIZE); c->bottom=c->top+CTRL_PANEL_SPACING*2+CTRL_PANEL_RANGE; s->shot_radius=ClampI64(s->shot_radius,0,CTRL_PANEL_RANGE-1); @@ -122,10 +122,10 @@ U0 LeftClickCtrlPanel(CCtrl *c,I64 x,I64 y,Bool) else { if (x<(c->right+c->left)/2) s->shot_radius=CTRL_PANEL_RANGE-1 - -(y-(c->top+CTRL_PANEL_SPACING+CTRL_PANEL_BUTTON_SIZE)); + -(y-(c->top+CTRL_PANEL_SPACING+CTRL_PANEL_BTTN_SIZE)); else s->fuse_time=CTRL_PANEL_RANGE-1 - -(y-(c->top+CTRL_PANEL_SPACING+CTRL_PANEL_BUTTON_SIZE)); + -(y-(c->top+CTRL_PANEL_SPACING+CTRL_PANEL_BTTN_SIZE)); } if (c->update_derived_vals) (*c->update_derived_vals)(c); @@ -136,7 +136,7 @@ CCtrl *CtrlPanelNew() CCtrl *c=CAlloc(sizeof(CCtrl)); MemSet(&ctrl_panel,0,sizeof(ctrl_panel)); c->win_task=Fs; - c->flags=CTRLF_SHOW|CTRLF_CAPTURE_LEFT_IP; + c->flags=CTRLF_SHOW|CTRLF_CAPTURE_LEFT_MS; c->type=CTRLT_GENERIC; c->state=&ctrl_panel; c->draw_it=&DrawCtrlPanelCtrl; diff --git a/Compiler/Asm.HC b/Compiler/Asm.HC index 70cce5d..7e3f3d1 100644 --- a/Compiler/Asm.HC +++ b/Compiler/Asm.HC @@ -277,7 +277,7 @@ Bool AsmStoreNum(CCmpCtrl *cc,CAsmNum2 *num2,I64 cnt,Bool U8_avail) if (num2->U8_cnt==1) { if (num2->num.local_asm_undef_hash||num2->num.glbl_asm_undef_hash) AsmUnresolvedAdd(cc,num2->num.machine_code,IET_REL_I8+num2->imm_flag, - aotc->ip,num2->rel,num2->num.local_asm_undef_hash, + aotc->rip,num2->rel,num2->num.local_asm_undef_hash, num2->num.glbl_asm_undef_hash,cc->lex_include_stk->line_num, U8_avail); else if (!num2->imm_flag && !(MIN_I8<=num2->num.i<=MAX_I8)) @@ -287,7 +287,7 @@ Bool AsmStoreNum(CCmpCtrl *cc,CAsmNum2 *num2,I64 cnt,Bool U8_avail) tmpa=CAlloc(sizeof(CAOTAbsAddr)); tmpa->next=aotc->abss; aotc->abss=tmpa; - tmpa->ip=aotc->ip; + tmpa->rip=aotc->rip; tmpa->type=AAT_ADD_U8; } } else { @@ -295,7 +295,7 @@ Bool AsmStoreNum(CCmpCtrl *cc,CAsmNum2 *num2,I64 cnt,Bool U8_avail) tmpa=CAlloc(sizeof(CAOTAbsAddr)); tmpa->next=aotc->abss; aotc->abss=tmpa; - tmpa->ip=aotc->ip; + tmpa->rip=aotc->rip; tmpa->type=AAT_SUB_U8; } } @@ -304,7 +304,7 @@ Bool AsmStoreNum(CCmpCtrl *cc,CAsmNum2 *num2,I64 cnt,Bool U8_avail) if (num2->U8_cnt==2) { if (num2->num.local_asm_undef_hash||num2->num.glbl_asm_undef_hash) AsmUnresolvedAdd(cc,num2->num.machine_code,IET_REL_I16+num2->imm_flag, - aotc->ip,num2->rel,num2->num.local_asm_undef_hash, + aotc->rip,num2->rel,num2->num.local_asm_undef_hash, num2->num.glbl_asm_undef_hash,cc->lex_include_stk->line_num, U8_avail); else if (!num2->imm_flag && !(MIN_I16<=num2->num.i<=MAX_I16)) @@ -314,7 +314,7 @@ Bool AsmStoreNum(CCmpCtrl *cc,CAsmNum2 *num2,I64 cnt,Bool U8_avail) tmpa=CAlloc(sizeof(CAOTAbsAddr)); tmpa->next=aotc->abss; aotc->abss=tmpa; - tmpa->ip=aotc->ip; + tmpa->rip=aotc->rip; tmpa->type=AAT_ADD_U16; } } else { @@ -322,7 +322,7 @@ Bool AsmStoreNum(CCmpCtrl *cc,CAsmNum2 *num2,I64 cnt,Bool U8_avail) tmpa=CAlloc(sizeof(CAOTAbsAddr)); tmpa->next=aotc->abss; aotc->abss=tmpa; - tmpa->ip=aotc->ip; + tmpa->rip=aotc->rip; tmpa->type=AAT_SUB_U16; } } @@ -331,7 +331,7 @@ Bool AsmStoreNum(CCmpCtrl *cc,CAsmNum2 *num2,I64 cnt,Bool U8_avail) } else if (num2->U8_cnt==4) { if (num2->num.local_asm_undef_hash||num2->num.glbl_asm_undef_hash) AsmUnresolvedAdd(cc,num2->num.machine_code,IET_REL_I32+num2->imm_flag, - aotc->ip,num2->rel,num2->num.local_asm_undef_hash, + aotc->rip,num2->rel,num2->num.local_asm_undef_hash, num2->num.glbl_asm_undef_hash,cc->lex_include_stk->line_num, U8_avail); else if (!num2->imm_flag && !(MIN_I32<=num2->num.i<=MAX_I32)) @@ -341,7 +341,7 @@ Bool AsmStoreNum(CCmpCtrl *cc,CAsmNum2 *num2,I64 cnt,Bool U8_avail) tmpa=CAlloc(sizeof(CAOTAbsAddr)); tmpa->next=aotc->abss; aotc->abss=tmpa; - tmpa->ip=aotc->ip; + tmpa->rip=aotc->rip; tmpa->type=AAT_ADD_U32; } } else { @@ -349,7 +349,7 @@ Bool AsmStoreNum(CCmpCtrl *cc,CAsmNum2 *num2,I64 cnt,Bool U8_avail) tmpa=CAlloc(sizeof(CAOTAbsAddr)); tmpa->next=aotc->abss; aotc->abss=tmpa; - tmpa->ip=aotc->ip; + tmpa->rip=aotc->rip; tmpa->type=AAT_SUB_U32; } } @@ -357,7 +357,7 @@ Bool AsmStoreNum(CCmpCtrl *cc,CAsmNum2 *num2,I64 cnt,Bool U8_avail) } else if (num2->U8_cnt==8) { if (num2->num.local_asm_undef_hash||num2->num.glbl_asm_undef_hash) AsmUnresolvedAdd(cc,num2->num.machine_code,IET_REL_I64+num2->imm_flag, - aotc->ip,num2->rel,num2->num.local_asm_undef_hash, + aotc->rip,num2->rel,num2->num.local_asm_undef_hash, num2->num.glbl_asm_undef_hash,cc->lex_include_stk->line_num, U8_avail); if (num2->imm_flag) { @@ -365,7 +365,7 @@ Bool AsmStoreNum(CCmpCtrl *cc,CAsmNum2 *num2,I64 cnt,Bool U8_avail) tmpa=CAlloc(sizeof(CAOTAbsAddr)); tmpa->next=aotc->abss; aotc->abss=tmpa; - tmpa->ip=aotc->ip; + tmpa->rip=aotc->rip; tmpa->type=AAT_ADD_U64; } } else { @@ -373,7 +373,7 @@ Bool AsmStoreNum(CCmpCtrl *cc,CAsmNum2 *num2,I64 cnt,Bool U8_avail) tmpa=CAlloc(sizeof(CAOTAbsAddr)); tmpa->next=aotc->abss; aotc->abss=tmpa; - tmpa->ip=aotc->ip; + tmpa->rip=aotc->rip; tmpa->type=AAT_SUB_U64; } } @@ -395,7 +395,7 @@ U8 asm_seg_prefixes[6]={0x26,0x2E,0x36,0x3E,0x64,0x65}; Bool PrsAsmInst(CCmpCtrl *cc,CHashOpcode *tmpo,I64 argcnt) { CAOTCtrl *aotc=cc->aotc; - I64 i,j,a1,a2,om,seg,arg1mask,arg2mask; + I64 i,j,arg1,arg2,om,seg,arg1mask,arg2mask; CAsmArg *tmpa1,*tmpa2; Bool ModrM_complete,U8_avail=FALSE,found_second_possible=FALSE; CInst *tmpins; @@ -429,8 +429,8 @@ Bool PrsAsmInst(CCmpCtrl *cc,CHashOpcode *tmpo,I64 argcnt) cur.disp.imm_flag=TRUE; cur.imm.imm_flag=TRUE; om=tmpins->opcode_modifier; - a1=tmpins->arg1; - a2=tmpins->arg2; + arg1=tmpins->arg1; + arg2=tmpins->arg2; tmpa1=&aotc->arg1; tmpa2=&aotc->arg2; cur.last_opcode_U8=tmpins->opcode[tmpins->opcode_cnt-1]; @@ -479,9 +479,9 @@ Bool PrsAsmInst(CCmpCtrl *cc,CHashOpcode *tmpo,I64 argcnt) cur.last_opcode_U8+=tmpa1->reg1; } } - if (a1==ARGT_R64 || a1==ARGT_RM64 || a1==ARGT_M64) + if (arg1==ARGT_R64 || arg1==ARGT_RM64 || arg1==ARGT_M64) cur.REX|=8; - if (ARGT_RM8<=a1<=ARGT_RM64 || ARGT_M8<=a1<=ARGT_M64) { + if (ARGT_RM8<=arg1<=ARGT_RM64 || ARGT_M8<=arg1<=ARGT_M64) { if (aotc->seg_size==16) cur.has_addr_prefix=TRUE; @@ -563,9 +563,9 @@ Bool PrsAsmInst(CCmpCtrl *cc,CHashOpcode *tmpo,I64 argcnt) } } } - } else if (ARGT_REL8<=a1<=ARGT_REL32 || ARGT_IMM8<=a1<=ARGT_IMM64 || - ARGT_UIMM8<=a1<=ARGT_UIMM64) { - if (a1==ARGT_IMM64 || a2==ARGT_UIMM64) + } else if (ARGT_REL8<=arg1<=ARGT_REL32 || ARGT_IMM8<=arg1<=ARGT_IMM64 || + ARGT_UIMM8<=arg1<=ARGT_UIMM64) { + if (arg1==ARGT_IMM64 || arg2==ARGT_UIMM64) cur.REX|=8; MemCpy(&cur.imm.num,&tmpa1->num,sizeof(CAsmNum)); } @@ -579,7 +579,7 @@ Bool PrsAsmInst(CCmpCtrl *cc,CHashOpcode *tmpo,I64 argcnt) } if (tmpins->flags & IEF_PLUS_OPCODE) { if (tmpins->slash_val==SV_R_REG) { - if (ARGT_AL<=a1<=ARGT_RAX) { + if (ARGT_AL<=arg1<=ARGT_RAX) { cur.last_opcode_U8|=tmpa2->reg1&7; if (tmpa2->reg1&15>7) cur.REX|=1; @@ -599,15 +599,16 @@ Bool PrsAsmInst(CCmpCtrl *cc,CHashOpcode *tmpo,I64 argcnt) cur.last_opcode_U8|=tmpa2->reg1; } } - if (a1==ARGT_RM64 || a2==ARGT_RM64 || a1==ARGT_M64 || a2==ARGT_M64 || - a1==ARGT_R64 || a2==ARGT_R64) + if (arg1==ARGT_RM64 || arg2==ARGT_RM64 || + arg1==ARGT_M64 || arg2==ARGT_M64 || + arg1==ARGT_R64 || arg2==ARGT_R64) cur.REX|=8; - if (ARGT_RM8<=a1<=ARGT_RM64 || ARGT_RM8<=a2<=ARGT_RM64 || - ARGT_M8<=a1<=ARGT_M64 || ARGT_M8<=a2<=ARGT_M64) { + if (ARGT_RM8<=arg1<=ARGT_RM64 || ARGT_RM8<=arg2<=ARGT_RM64 || + ARGT_M8<=arg1<=ARGT_M64 || ARGT_M8<=arg2<=ARGT_M64) { if (aotc->seg_size==16) cur.has_addr_prefix=TRUE; cur.has_ModrM=TRUE; - if (ARGT_RM8<=a2<=ARGT_RM64 || ARGT_M8<=a2<=ARGT_M64) { + if (ARGT_RM8<=arg2<=ARGT_RM64 || ARGT_M8<=arg2<=ARGT_M64) { tmpa1=&aotc->arg2; tmpa2=&aotc->arg1; } @@ -709,39 +710,39 @@ Bool PrsAsmInst(CCmpCtrl *cc,CHashOpcode *tmpo,I64 argcnt) } } } - } else if (ARGT_MOFFS8<=a1<=ARGT_MOFFS64) { + } else if (ARGT_MOFFS8<=arg1<=ARGT_MOFFS64) { MemCpy(&cur.disp.num,&tmpa1->num,sizeof(CAsmNum)); if (aotc->seg_size==16) cur.disp.U8_cnt=2; else cur.disp.U8_cnt=4; cur.has_addr_prefix=FALSE; - } else if (ARGT_MOFFS8<=a2<=ARGT_MOFFS64) { + } else if (ARGT_MOFFS8<=arg2<=ARGT_MOFFS64) { MemCpy(&cur.disp.num,&tmpa2->num,sizeof(CAsmNum)); if (aotc->seg_size==16) cur.disp.U8_cnt=2; else cur.disp.U8_cnt=4; cur.has_addr_prefix=FALSE; - } else if (ARGT_IMM8<=a1<=ARGT_IMM64 || - ARGT_UIMM8<=a1<=ARGT_UIMM64) { + } else if (ARGT_IMM8<=arg1<=ARGT_IMM64 || + ARGT_UIMM8<=arg1<=ARGT_UIMM64) { MemCpy(&cur.imm.num,&tmpa1->num,sizeof(CAsmNum)); - if (a1==ARGT_IMM8 || a1==ARGT_UIMM8) cur.imm.U8_cnt=1; - else if (a1==ARGT_IMM16 || a1==ARGT_UIMM16) cur.imm.U8_cnt=2; - else if (a1==ARGT_IMM32 || a1==ARGT_UIMM32) cur.imm.U8_cnt=4; + if (arg1==ARGT_IMM8 || arg1==ARGT_UIMM8) cur.imm.U8_cnt=1; + else if (arg1==ARGT_IMM16 || arg1==ARGT_UIMM16) cur.imm.U8_cnt=2; + else if (arg1==ARGT_IMM32 || arg1==ARGT_UIMM32) cur.imm.U8_cnt=4; else { cur.imm.U8_cnt=8; cur.REX|=8; } } - if (ARGT_IMM8<=a2<=ARGT_IMM64 || - ARGT_UIMM8<=a2<=ARGT_UIMM64) { + if (ARGT_IMM8<=arg2<=ARGT_IMM64 || + ARGT_UIMM8<=arg2<=ARGT_UIMM64) { MemCpy(&cur.imm.num,&tmpa2->num,sizeof(CAsmNum)); - if (a2==ARGT_IMM8 || a2==ARGT_UIMM8) cur.imm.U8_cnt=1; - else if (a2==ARGT_IMM16 || a2==ARGT_UIMM16) cur.imm.U8_cnt=2; - else if (a2==ARGT_IMM32 || a2==ARGT_UIMM32) { + if (arg2==ARGT_IMM8 || arg2==ARGT_UIMM8) cur.imm.U8_cnt=1; + else if (arg2==ARGT_IMM16 || arg2==ARGT_UIMM16) cur.imm.U8_cnt=2; + else if (arg2==ARGT_IMM32 || arg2==ARGT_UIMM32) { cur.imm.U8_cnt=4; - if (tmpins->flags&IEF_REX_ONLY_R8_R15 && a2==ARGT_UIMM32) + if (tmpins->flags&IEF_REX_ONLY_R8_R15 && arg2==ARGT_UIMM32) cur.REX&=~8; } else { cur.imm.U8_cnt=8; @@ -793,13 +794,13 @@ Bool PrsAsmInst(CCmpCtrl *cc,CHashOpcode *tmpo,I64 argcnt) AOTStoreCodeU8(cc,best.SIB); if (best.disp.U8_cnt) { - best.disp.rel=aotc->ip+best.disp.U8_cnt+best.imm.U8_cnt; + best.disp.rel=aotc->rip+best.disp.U8_cnt+best.imm.U8_cnt; if (!AsmStoreNum(cc,&best.disp,1,U8_avail)) return FALSE; } if (best.imm.U8_cnt) { - best.imm.rel=aotc->ip+best.imm.U8_cnt; + best.imm.rel=aotc->rip+best.imm.U8_cnt; if (!AsmStoreNum(cc,&best.imm,1,U8_avail)) return FALSE; } @@ -949,7 +950,7 @@ U0 PrsAsmBlk(CCmpCtrl *cc,I64 cmp_flags) LexExcept(cc,"ORG not allowed in fun asm blk "); if (aotc->module_org!=INVALID_PTR) LexExcept(cc,"Just one org allowed "); - if (aotc->ip) + if (aotc->rip) LexExcept(cc,"ORG must be at beginning "); aotc->module_org=AsmLexExpression(cc); break; @@ -963,12 +964,12 @@ U0 PrsAsmBlk(CCmpCtrl *cc,I64 cmp_flags) if (!(cc->flags&CCF_AOT_COMPILE) && i>8) LexExcept(cc,"In JIT mode, max ALIGN is 8 "); if (j>aotc->max_align_bits) aotc->max_align_bits=j; - i=CeilU64(aotc->ip,i); + i=CeilU64(aotc->rip,i); if (cc->token!=',') LexExcept(cc,"Expecting ',' at "); Lex(cc); k=AsmLexExpression(cc); - for (j=aotc->ip;jrip;jhash_entry->type & HTT_EXPORT_SYS_SYM) { if (Btr(&cc->hash_entry->type,HTf_UNRESOLVED)) { if (cc->hash_entry->type & HTF_LOCAL) { - cc->hash_entry(CHashExport *)->val=aotc->ip; + cc->hash_entry(CHashExport *)->val=aotc->rip; if (Lex(cc)!=':') LexExcept(cc,"Expecting ':' at "); Lex(cc); } else { if (cc->hash_entry->type & HTF_IMPORT) LexExcept(cc,"attempt to define import at "); - cc->hash_entry(CHashExport *)->val=aotc->ip; + cc->hash_entry(CHashExport *)->val=aotc->rip; next_last_label=cc->hash_entry->str; Lex(cc); //Skip cur_str if (cc->token!=':' && cc->token!=TK_DBL_COLON) @@ -1052,7 +1053,7 @@ U0 PrsAsmBlk(CCmpCtrl *cc,I64 cmp_flags) } Lex(cc); } - } else if (cc->hash_entry(CHashExport *)->val==aotc->ip) { + } else if (cc->hash_entry(CHashExport *)->val==aotc->rip) { Lex(cc); //Skip cur_str if (cc->token!=':' && cc->token!=TK_DBL_COLON) LexExcept(cc,"Expecting ':' at "); @@ -1066,7 +1067,7 @@ U0 PrsAsmBlk(CCmpCtrl *cc,I64 cmp_flags) tmpex->str=cc->cur_str; cc->cur_str=0; tmpex->type=HTT_EXPORT_SYS_SYM; - tmpex->val=aotc->ip; + tmpex->val=aotc->rip; Lex(cc); //Skip cur_str if (cc->token!=':' && cc->token!=TK_DBL_COLON) LexExcept(cc,"Expecting ':' at "); @@ -1085,7 +1086,7 @@ U0 PrsAsmBlk(CCmpCtrl *cc,I64 cmp_flags) LexExcept(cc,"Duplicate goto label at "); g_lb->type=CMT_ASM_LABEL; g_lb->flags|=CMF_DEFINED; - g_lb->ip=aotc->ip; + g_lb->rip=aotc->rip; g_lb->use_cnt++; //Disable warning on unused labels. ICAdd(cc,IC_LABEL,g_lb,0); } diff --git a/Compiler/AsmLib.HC b/Compiler/AsmLib.HC index 937e59b..63b1a71 100644 --- a/Compiler/AsmLib.HC +++ b/Compiler/AsmLib.HC @@ -1,11 +1,11 @@ U0 AOTStoreCodeU8(CCmpCtrl *cc,U8 b) { CAOTCtrl *aotc=cc->aotc; - I64 i=aotc->ip>>AOT_BIN_BLK_BITS; + I64 i=aotc->rip>>AOT_BIN_BLK_BITS; CAOTBinBlk *tmpbin=aotc->bin; while (i--) if (!(tmpbin=tmpbin->next)) { - i=aotc->ip>>AOT_BIN_BLK_BITS+1; + i=aotc->rip>>AOT_BIN_BLK_BITS+1; tmpbin=&aotc->bin; while (i--) { if (!tmpbin->next) @@ -14,7 +14,7 @@ U0 AOTStoreCodeU8(CCmpCtrl *cc,U8 b) } break; } - tmpbin->body[aotc->ip++ & (AOT_BIN_BLK_SIZE-1)]=b; + tmpbin->body[aotc->rip++ & (AOT_BIN_BLK_SIZE-1)]=b; if (aotc->lst) { if (aotc->lst_col>=24) { '\n'; @@ -23,14 +23,14 @@ U0 AOTStoreCodeU8(CCmpCtrl *cc,U8 b) "%02X ",b; aotc->lst_col+=3; } - if (aotc->ip>aotc->num_bin_U8s) - aotc->num_bin_U8s=aotc->ip; + if (aotc->rip>aotc->num_bin_U8s) + aotc->num_bin_U8s=aotc->rip; } U0 AOTStoreCodeU32(CCmpCtrl *cc,U32 d) { CAOTCtrl *aotc=cc->aotc; - I64 i=aotc->ip>>AOT_BIN_BLK_BITS,j=(aotc->ip+sizeof(U32))>>AOT_BIN_BLK_BITS; + I64 i=aotc->rip>>AOT_BIN_BLK_BITS,j=(aotc->rip+sizeof(U32))>>AOT_BIN_BLK_BITS; U32 *_d; CAOTBinBlk *tmpbin; if (i!=j) @@ -40,7 +40,7 @@ U0 AOTStoreCodeU32(CCmpCtrl *cc,U32 d) tmpbin=aotc->bin; while (i--) if (!(tmpbin=tmpbin->next)) { - i=aotc->ip>>AOT_BIN_BLK_BITS+1; + i=aotc->rip>>AOT_BIN_BLK_BITS+1; tmpbin=&aotc->bin; while (i--) { if (!tmpbin->next) @@ -49,9 +49,9 @@ U0 AOTStoreCodeU32(CCmpCtrl *cc,U32 d) } break; } - _d=tmpbin->body+ aotc->ip&(AOT_BIN_BLK_SIZE-1); + _d=tmpbin->body+ aotc->rip&(AOT_BIN_BLK_SIZE-1); *_d=d; - aotc->ip+=sizeof(U32); + aotc->rip+=sizeof(U32); if (aotc->lst) { if (aotc->lst_col>=24) { '\n'; @@ -60,16 +60,16 @@ U0 AOTStoreCodeU32(CCmpCtrl *cc,U32 d) "%08X ",d; aotc->lst_col+=9; } - if (aotc->ip>aotc->num_bin_U8s) - aotc->num_bin_U8s=aotc->ip; + if (aotc->rip>aotc->num_bin_U8s) + aotc->num_bin_U8s=aotc->rip; } } U0 AOTStoreCodeU64(CCmpCtrl *cc,U64 q) { CAOTCtrl *aotc=cc->aotc; - I64 i=aotc->ip>>AOT_BIN_BLK_BITS,j=(aotc->ip+sizeof(I64))>>AOT_BIN_BLK_BITS, - *_q; + I64 i=aotc->rip>>AOT_BIN_BLK_BITS, + j=(aotc->rip+sizeof(I64))>>AOT_BIN_BLK_BITS, *_q; CAOTBinBlk *tmpbin; if (i!=j) for (i=0;ibin; while (i--) if (!(tmpbin=tmpbin->next)) { - i=aotc->ip>>AOT_BIN_BLK_BITS+1; + i=aotc->rip>>AOT_BIN_BLK_BITS+1; tmpbin=&aotc->bin; while (i--) { if (!tmpbin->next) @@ -87,9 +87,9 @@ U0 AOTStoreCodeU64(CCmpCtrl *cc,U64 q) } break; } - _q=tmpbin->body+ aotc->ip&(AOT_BIN_BLK_SIZE-1); + _q=tmpbin->body+ aotc->rip&(AOT_BIN_BLK_SIZE-1); *_q=q; - aotc->ip+=sizeof(I64); + aotc->rip+=sizeof(I64); if (aotc->lst) { if (aotc->lst_col>=24) { '\n'; @@ -98,18 +98,18 @@ U0 AOTStoreCodeU64(CCmpCtrl *cc,U64 q) "%016X ",q; aotc->lst_col+=17; } - if (aotc->ip>aotc->num_bin_U8s) - aotc->num_bin_U8s=aotc->ip; + if (aotc->rip>aotc->num_bin_U8s) + aotc->num_bin_U8s=aotc->rip; } } -U0 AOTStoreCodeU8At(CCmpCtrl *cc,I64 ip,...) +U0 AOTStoreCodeU8At(CCmpCtrl *cc,I64 rip,...) { CAOTCtrl *aotc=cc->aotc; CAOTBinBlk *tmpbin; I64 i,j; for (j=0;j>AOT_BIN_BLK_BITS+1; + i=rip>>AOT_BIN_BLK_BITS+1; tmpbin=&aotc->bin; while (i--) { if (!tmpbin->next) { @@ -118,10 +118,10 @@ U0 AOTStoreCodeU8At(CCmpCtrl *cc,I64 ip,...) } tmpbin=tmpbin->next; } - tmpbin->body[ip++ & (AOT_BIN_BLK_SIZE-1)]=argv[j]; + tmpbin->body[rip++ & (AOT_BIN_BLK_SIZE-1)]=argv[j]; } - if (ip>aotc->num_bin_U8s) - aotc->num_bin_U8s=ip; + if (rip>aotc->num_bin_U8s) + aotc->num_bin_U8s=rip; } I64 AsmLexExpression(CCmpCtrl *cc) @@ -153,13 +153,13 @@ U0 AsmLineLst(CCmpCtrl *cc) if (doc_e2=aotc->lst_last_line) { if (tmpf->flags& LFSF_DOC) { while (doc_e2->yy) { - "%h*c%08X ",24-aotc->lst_col,CH_SPACE,aotc->lst_last_ip; + "%h*c%08X ",24-aotc->lst_col,CH_SPACE,aotc->lst_last_rip; aotc->lst_col=0; doc_e2=LexPutLine(cc,doc_e2); } } else { while (*doc_e2(U8 *) && doc_e2!=doc_e) { - "%h*c%08X ",24-aotc->lst_col,CH_SPACE,aotc->lst_last_ip; + "%h*c%08X ",24-aotc->lst_col,CH_SPACE,aotc->lst_last_rip; aotc->lst_col=0; doc_e2=LexPutLine(cc,doc_e2); } @@ -171,5 +171,5 @@ U0 AsmLineLst(CCmpCtrl *cc) aotc->lst_last_line=NULL; aotc->lst_last_lfn=tmpf; } - aotc->lst_last_ip=aotc->ip; + aotc->lst_last_rip=aotc->rip; } diff --git a/Compiler/AsmResolve.HC b/Compiler/AsmResolve.HC index 0157292..9284765 100644 --- a/Compiler/AsmResolve.HC +++ b/Compiler/AsmResolve.HC @@ -2,7 +2,7 @@ U0 AsmResolve(CCmpCtrl *cc,CAsmUnresolvedRef *tmpu,U8 *label,Bool undefined) { CAOTImportExport *tmpie; CAsmUndefHash *tmpauh; - I64 r=Call(tmpu->machine_code); + I64 res=Call(tmpu->machine_code); if (undefined) { tmpauh=tmpu->asm_undef_hash; while (tmpauh) { @@ -10,31 +10,32 @@ U0 AsmResolve(CCmpCtrl *cc,CAsmUnresolvedRef *tmpu,U8 *label,Bool undefined) tmpie=CAlloc(sizeof(CAOTImportExport)); tmpie->next=tmpauh->hash->ie_lst; tmpauh->hash->ie_lst=tmpie; - tmpie->ip=tmpu->ip; + tmpie->rip=tmpu->rip; tmpie->aot=cc->aot; tmpie->type=tmpu->type; } tmpauh=tmpauh->next; //Technically, more than one won't work. } } else if (!(tmpu->type&IEF_IMM_NOT_REL)) { - r-=tmpu->rel_ip; - if (tmpu->type==IET_REL_I8 && !(MIN_I8<=r<=MAX_I8) || - tmpu->type==IET_REL_I16 && !(MIN_I16<=r<=MAX_I16)) { + res-=tmpu->rel_rip; + if (tmpu->type==IET_REL_I8 && !(MIN_I8<=res<=MAX_I8) || + tmpu->type==IET_REL_I16 && !(MIN_I16<=res<=MAX_I16)) { PrintErr("Branch out of range at line:%04d %s\n", tmpu->line_num,label); LexExcept(cc); } - if (tmpu->U8_avail && tmpu->type>IET_IMM_U8 && -124<=r<=123) + if (tmpu->U8_avail && tmpu->type>IET_IMM_U8 && -124<=res<=123) PrintWarn("could use I8 displacement at line:%04d %s %s\n", tmpu->line_num,cc->aotc->last_label,label); } - AOTStoreCodeU8At(cc,tmpu->ip,r.u8[0]); + AOTStoreCodeU8At(cc,tmpu->rip,res.u8[0]); if (tmpu->type>=IET_REL_I16) { - AOTStoreCodeU8At(cc,tmpu->ip+1,r.u8[1]); + AOTStoreCodeU8At(cc,tmpu->rip+1,res.u8[1]); if (tmpu->type>=IET_REL_I32) { - AOTStoreCodeU8At(cc,tmpu->ip+2,r.u8[2],r.u8[3]); + AOTStoreCodeU8At(cc,tmpu->rip+2,res.u8[2],res.u8[3]); if (tmpu->type>=IET_REL_I64) - AOTStoreCodeU8At(cc,tmpu->ip+4,r.u8[4],r.u8[5],r.u8[6],r.u8[7]); + AOTStoreCodeU8At(cc,tmpu->rip+4,res.u8[4],res.u8[5], + res.u8[6],res.u8[7]); } } } @@ -157,8 +158,8 @@ U0 AOTGlblsResolve(CCmpCtrl *cc,CAOT *tmpaot) tmpeu=tmpf->ext_lst; while (tmpeu) { tmpeu8=tmpeu->next; - j=tmpf->exe_addr-(tmpeu->ip+4); - AOTStoreCodeU8At(cc,tmpeu->ip,j.u8[0],j.u8[1],j.u8[2],j.u8[3]); + j=tmpf->exe_addr-(tmpeu->rip+4); + AOTStoreCodeU8At(cc,tmpeu->rip,j.u8[0],j.u8[1],j.u8[2],j.u8[3]); Free(tmpeu); tmpeu=tmpeu8; } @@ -167,11 +168,11 @@ U0 AOTGlblsResolve(CCmpCtrl *cc,CAOT *tmpaot) tmpie=CAlloc(sizeof(CAOTImportExport)); tmpie->type=IET_REL32_EXPORT; if (tmpex->type & HTT_FUN) - tmpie->ip=tmpf->exe_addr; + tmpie->rip=tmpf->exe_addr; else if (tmpex->type & HTT_GLBL_VAR) - tmpie->ip=tmpex(CHashGlblVar *)->data_addr_ip; + tmpie->rip=tmpex(CHashGlblVar *)->data_addr_rip; else - tmpie->ip=tmpex->val; + tmpie->rip=tmpex->val; tmpie->aot=cc->aot; if (tmpex->type & HTF_IMM) tmpie->type++; @@ -185,15 +186,15 @@ U0 AOTGlblsResolve(CCmpCtrl *cc,CAOT *tmpaot) } } -U0 AsmUnresolvedAdd(CCmpCtrl *cc,U8 *machine_code,I64 type,I64 ip,I64 rel_ip, +U0 AsmUnresolvedAdd(CCmpCtrl *cc,U8 *machine_code,I64 type,I64 rip,I64 rel_rip, CAsmUndefHash *local_asm_undef_hash,CAsmUndefHash *glbl_asm_undef_hash, I64 line_num,Bool U8_avail) { CAsmUnresolvedRef *tmpu=MAlloc(sizeof(CAsmUnresolvedRef)); tmpu->machine_code=machine_code; tmpu->type=type; - tmpu->ip=ip; - tmpu->rel_ip=rel_ip; + tmpu->rip=rip; + tmpu->rel_rip=rel_rip; tmpu->aot=cc->aot; tmpu->imm_flag=FALSE; tmpu->line_num=line_num; diff --git a/Compiler/BackA.HC b/Compiler/BackA.HC index 6e5484f..6060d9b 100644 --- a/Compiler/BackA.HC +++ b/Compiler/BackA.HC @@ -1,5 +1,5 @@ U0 ICAddEct(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, - CICType t2,I64 r2,I64 d2,CICType t3,I64 r3,I64 d3,I64 op,I64 ip) + CICType t2,I64 r2,I64 d2,CICType t3,I64 r3,I64 d3,I64 op,I64 rip) { I64 i,tmp,res_reg=REG_RAX; Bool swap=FALSE; @@ -12,13 +12,13 @@ U0 ICAddEct(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, if (t2.raw_type>=RT_I64 && r2!=res_reg && t2&MDG_REG_DISP_SIB_RIP) { if (t1&MDF_REG && !(r2==r1 && t2&MDG_REG_DISP_SIB)) res_reg=r1; - ICMov(tmpi,MDF_REG+RT_I64,res_reg,0,t3,r3,d3,ip); + ICMov(tmpi,MDF_REG+RT_I64,res_reg,0,t3,r3,d3,rip); i=ICModr1(res_reg,t2,r2,d2); if (tmpi->ic_flags&ICF_LOCK) ICU8(tmpi,OC_LOCK_PREFIX); ICRex(tmpi,i.u8[1]); ICU16(tmpi,i.u8[2]<<8+op); - ICModr2(tmpi,i,d2,ip+4); + ICModr2(tmpi,i,,d2,rip); } else { if (t2&MDF_REG) tmp=r2; @@ -33,13 +33,13 @@ U0 ICAddEct(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, if (swap) { if (r3==tmp && t3&MDG_REG_DISP_SIB) tmp=REG_RCX; - ICMov(tmpi,MDF_REG+RT_I64,tmp,0,t2,r2,d2,ip); - ICMov(tmpi,MDF_REG+RT_I64,res_reg,0,t3,r3,d3,ip); + ICMov(tmpi,MDF_REG+RT_I64,tmp,0,t2,r2,d2,rip); + ICMov(tmpi,MDF_REG+RT_I64,res_reg,0,t3,r3,d3,rip); } else { if (r2==res_reg && t2&MDG_REG_DISP_SIB) res_reg=REG_RDX; - ICMov(tmpi,MDF_REG+RT_I64,res_reg,0,t3,r3,d3,ip); - ICMov(tmpi,MDF_REG+RT_I64,tmp,0,t2,r2,d2,ip); + ICMov(tmpi,MDF_REG+RT_I64,res_reg,0,t3,r3,d3,rip); + ICMov(tmpi,MDF_REG+RT_I64,tmp,0,t2,r2,d2,rip); } i=0x48; if (res_reg>7) @@ -50,20 +50,20 @@ U0 ICAddEct(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, ICU8(tmpi,OC_LOCK_PREFIX); ICU24(tmpi,0xC00000+i+(tmp&7)<<16+(res_reg&7)<<19+op<<8); } - ICMov(tmpi,t1,r1,d1,MDF_REG+RT_I64,res_reg,0,ip); + ICMov(tmpi,t1,r1,d1,MDF_REG+RT_I64,res_reg,0,rip); } U0 ICAddSubEctImm(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, - CICType t2,I64 r2,I64 d2,I64 d,I64 op,I64 ip) + CICType t2,I64 r2,I64 d2,I64 d,I64 op,I64 rip) { - I64 i,r; + I64 i; if (op.u8[0]==0x2B) { op=0x0003; d=-d; } if (t1&MDF_REG) { if (!(t2&MDF_REG)) { - ICMov(tmpi,t1,r1,d1,t2,r2,d2,ip); + ICMov(tmpi,t1,r1,d1,t2,r2,d2,rip); t2=t1; r2=r1; d2=d1; @@ -97,7 +97,7 @@ U0 ICAddSubEctImm(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, i=ICModr1(r1,MDF_DISP+RT_I64,r2,d); i.u8[1]|=0x48; ICU24(tmpi,i.u8[2]<<16+0x8D00+i.u8[1]); - ICModr2(tmpi,i,d,ip+4); + ICModr2(tmpi,i,,d,rip); return; } } @@ -107,7 +107,7 @@ U0 ICAddSubEctImm(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, case MDf_SIB: case MDf_RIP_DISP32: if (t1!=t2 || r1!=r2 || d1!=d2) { - ICMov(tmpi,t1,r1,d1,t2,r2,d2,ip); + ICMov(tmpi,t1,r1,d1,t2,r2,d2,rip); t2=t1; r2=r1; d2=d1; @@ -115,12 +115,12 @@ U0 ICAddSubEctImm(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, if (!d &&(op.u8[0]==0x03||op.u8[0]==0x2B||op.u8[0]==0x33||op.u8[0]==0x0B)) return; - r=op.u8[1]; //not a reg but a slash val + if (op.u8[0]==0x03 && d==-1) //add -1 - r=1; //Decrement slash val + op.u8[1]=1; //Decrement slash val if (op.u8[0]==0x03 && (d==1 || d==-1)) { //Add - i=ICModr1(r,t1,r1,d1); + i=ICModr1(op.u8[1],t1,r1,d1); if (!(t1&MDF_REG) && tmpi->ic_flags&ICF_LOCK) ICU8(tmpi,OC_LOCK_PREFIX); switch (t1.raw_type) { @@ -138,55 +138,16 @@ U0 ICAddSubEctImm(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, ICRex(tmpi,i.u8[1]); ICU16(tmpi,i.u8[2]<<8+0xFF); } - ICModr2(tmpi,i,d1,ip+4); + ICModr2(tmpi,i,,d1,rip); return; } if (MIN_I8<=d<=MAX_I8 || t1&(RTG_MASK-RTF_UNSIGNED)==RT_I8) { - i=ICModr1(r,t1,r1,d1); - if (tmpi->ic_flags&ICF_LOCK) - ICU8(tmpi,OC_LOCK_PREFIX); - switch (t1.raw_type) { - case RT_I8: - case RT_U8: - ICRex(tmpi,i.u8[1]); - ICU16(tmpi,i.u8[2]<<8+0x80); - break; - case RT_I16: - case RT_U16: - ICOpSizeRex(tmpi,i.u8[1]); - ICU16(tmpi,i.u8[2]<<8+0x83); - break; - default: - ICRex(tmpi,i.u8[1]); - ICU16(tmpi,i.u8[2]<<8+0x83); - } - ICModr2(tmpi,i,d1,ip+5); + ICSlashOp(tmpi,t1,r1,d1,SLASH_OP_IMM_U8+op.u8[1],rip+1); ICU8(tmpi,d); return; } if (MIN_I32<=d<=MAX_I32 || t1.raw_typeic_flags&ICF_LOCK) - ICU8(tmpi,OC_LOCK_PREFIX); - switch (t1.raw_type) { - case RT_I16: - case RT_U16: - ICOpSizeRex(tmpi,i.u8[1]); - ICU16(tmpi,i.u8[2]<<8+0x81); - break; - default: - ICRex(tmpi,i.u8[1]); - ICU16(tmpi,i.u8[2]<<8+0x81); - } - if (i.u8[0]!=MODR_RIP_REL) - ICModr2(tmpi,i,d1,); - else { - if (t1&(RTG_MASK-RTF_UNSIGNED)==RT_I16) - ICU32(tmpi,d1-(ip+tmpi->ic_cnt+6)); - else - ICU32(tmpi,d1-(ip+tmpi->ic_cnt+8)); - tmpi->ic_flags&=~ICF_CODE_FINAL; - } + ICSlashOp(tmpi,t1,r1,d1,SLASH_OP_IMM_U32+op.u8[1],rip); if (t1&(RTG_MASK-RTF_UNSIGNED)==RT_I16) ICU16(tmpi,d); else @@ -195,15 +156,15 @@ U0 ICAddSubEctImm(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, } break; case MDf_STK: - ICAddSubEctImm(tmpi,MDF_REG+RT_I64,REG_RAX,0,t2,r2,d2,d,op,ip); + ICAddSubEctImm(tmpi,MDF_REG+RT_I64,REG_RAX,0,t2,r2,d2,d,op,rip); ICPushRegs(tmpi,1<=RT_I64 && r2.u8[0]!=REG_RAX && (!(t2&MDF_SIB) || r2.u8[1]&15!=REG_RAX) && t2&MDG_REG_DISP_SIB_RIP) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,t3,r3,d3,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,t3,r3,d3,rip); if (!swap) { op=0x03; ICU24(tmpi,0xD8F748); @@ -225,24 +186,24 @@ U0 ICSub(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, ICU8(tmpi,OC_LOCK_PREFIX); ICRex(tmpi,i.u8[1]); ICU16(tmpi,i.u8[2]<<8+op); - ICModr2(tmpi,i,d2,ip+4); - ICMov(tmpi,t1,r1,d1,MDF_REG+RT_I64,REG_RAX,0,ip); + ICModr2(tmpi,i,,d2,rip); + ICMov(tmpi,t1,r1,d1,MDF_REG+RT_I64,REG_RAX,0,rip); } else { if (!(t3&MDF_REG) || t3.raw_typeic_flags&ICF_LOCK) ICU8(tmpi,OC_LOCK_PREFIX); ICU24(tmpi,0xC00000+i+(r3&7)<<16+(r2&7)<<19+op<<8); - ICMov(tmpi,t1,r1,d1,MDF_REG+RT_I64,r2,0,ip); + ICMov(tmpi,t1,r1,d1,MDF_REG+RT_I64,r2,0,rip); } } -U0 ICMul(CIntermediateCode *tmpi,I64 ip) +U0 ICMul(CIntermediateCode *tmpi,I64 rip) { I64 i,r2,r=REG_RAX,j; - CICArg *a1,*a2; + CICArg *arg1,*arg2; Bool alt; - if (tmpi->a1.type&MDF_IMM) { - a1=&tmpi->a2; - a2=&tmpi->a1; + if (tmpi->arg1.type&MDF_IMM) { + arg1=&tmpi->arg2; + arg2=&tmpi->arg1; alt=TRUE; } else { - a1=&tmpi->a1; - a2=&tmpi->a2; + arg1=&tmpi->arg1; + arg2=&tmpi->arg2; alt=FALSE; } - i=a2->disp; + i=arg2->disp; if (!(tmpi->ic_class->raw_type&RTF_UNSIGNED) && - a2->type&MDF_IMM && MIN_I32<=i<=MAX_I32) { - if (tmpi->r.type==MDF_REG+RT_I64) { - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - a1->type,a1->reg,a1->disp,ip); - r=tmpi->r.reg; + arg2->type&MDF_IMM && MIN_I32<=i<=MAX_I32) { + if (tmpi->res.type==MDF_REG+RT_I64) { + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + arg1->type,arg1->reg,arg1->disp,rip); + r=tmpi->res.reg; } else - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,a1->type,a1->reg,a1->disp,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,arg1->type,arg1->reg,arg1->disp,rip); if (r>7) j=0xC0004D; else @@ -299,16 +260,17 @@ U0 ICMul(CIntermediateCode *tmpi,I64 ip) else i=0xE8F748; if (alt) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,a1->type,a1->reg,a1->disp,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,arg1->type,arg1->reg,arg1->disp,rip); r2=REG_RCX; - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,a2->type,a2->reg,a2->disp,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,arg2->type,arg2->reg,arg2->disp,rip); } else { - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,a2->type,a2->reg,a2->disp,ip); - if (!(a1->type&MDF_REG) || a1->type.raw_typetype,a1->reg,a1->disp,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,arg2->type,arg2->reg,arg2->disp,rip); + if (!(arg1->type&MDF_REG) || arg1->type.raw_typetype,arg1->reg,arg1->disp,rip); r2=REG_RCX; } else - r2=a1->reg; + r2=arg1->reg; } if (r2>7) { i++; @@ -316,21 +278,22 @@ U0 ICMul(CIntermediateCode *tmpi,I64 ip) } ICU24(tmpi,i+r2<<16); } - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp,MDF_REG+RT_I64,r,0,ip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,r,0,rip); } -U0 ICMulEqu(CIntermediateCode *tmpi,I64 ip) +U0 ICMulEqu(CIntermediateCode *tmpi,I64 rip) { - I64 i=tmpi->a2.disp,r=REG_RAX,j; + I64 i=tmpi->arg2.disp,r=REG_RAX,j; if (!(tmpi->ic_class->raw_type&RTF_UNSIGNED) && - tmpi->a2.type&MDF_IMM && MIN_I32<=i<=MAX_I32) { + tmpi->arg2.type&MDF_IMM && MIN_I32<=i<=MAX_I32) { if (tmpi->ic_flags & ICF_BY_VAL) { - if (tmpi->a1.type==MDF_REG+RT_I64) - r=tmpi->a1.reg; + if (tmpi->arg1.type==MDF_REG+RT_I64) + r=tmpi->arg1.reg; else ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,rip); if (r>7) j=0xC0004D; else @@ -341,13 +304,13 @@ U0 ICMulEqu(CIntermediateCode *tmpi,I64 ip) ICU24(tmpi,0x6900+j+(r&7)<<16+(r&7)<<19); ICU32(tmpi,i); } - ICMov(tmpi,tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,MDF_REG+RT_I64,r,0,ip); + ICMov(tmpi,tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,MDF_REG+RT_I64,r,0,rip); } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0, - MDF_DISP+tmpi->a1_type_pointed_to,REG_RCX,0,ip); + MDF_DISP+tmpi->arg1_type_pointed_to,REG_RCX,0,rip); r=REG_RBX; if (MIN_I8<=i<=MAX_I8) ICU32(tmpi,i<<24+0xDB6B48); @@ -355,8 +318,8 @@ U0 ICMulEqu(CIntermediateCode *tmpi,I64 ip) ICU24(tmpi,0xDB6948); ICU32(tmpi,i); } - ICMov(tmpi,MDF_DISP+tmpi->a1_type_pointed_to,REG_RCX,0, - MDF_REG+RT_I64,REG_RBX,0,ip); + ICMov(tmpi,MDF_DISP+tmpi->arg1_type_pointed_to,REG_RCX,0, + MDF_REG+RT_I64,REG_RBX,0,rip); } } else { if (tmpi->ic_class->raw_type&RTF_UNSIGNED) @@ -365,35 +328,36 @@ U0 ICMulEqu(CIntermediateCode *tmpi,I64 ip) i=0xEBF748; if (tmpi->ic_flags & ICF_BY_VAL) { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0, - tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,rip); ICU24(tmpi,i); - ICMov(tmpi,tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,MDF_REG+RT_I64,REG_RAX,0,ip); + ICMov(tmpi,tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,MDF_REG+RT_I64,REG_RAX,0,rip); } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0, - MDF_DISP+tmpi->a1_type_pointed_to,REG_RCX,0,ip); + MDF_DISP+tmpi->arg1_type_pointed_to,REG_RCX,0,rip); ICU24(tmpi,i); - ICMov(tmpi,MDF_DISP+tmpi->a1_type_pointed_to,REG_RCX,0, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICMov(tmpi,MDF_DISP+tmpi->arg1_type_pointed_to,REG_RCX,0, + MDF_REG+RT_I64,REG_RAX,0,rip); } } - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp,MDF_REG+RT_I64,r,0,ip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,r,0,rip); } -U0 ICDiv(CIntermediateCode *tmpi,I64 ip) +U0 ICDiv(CIntermediateCode *tmpi,I64 rip) { ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); if (tmpi->ic_class->raw_type&RTF_UNSIGNED) { ICZero(tmpi,REG_RDX); ICU24(tmpi,0xF1F748); @@ -401,18 +365,18 @@ U0 ICDiv(CIntermediateCode *tmpi,I64 ip) ICU16(tmpi,0x9948); ICU24(tmpi,0xF9F748); } - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } -U0 ICDivEqu(CIntermediateCode *tmpi,Bool is_mod,I64 ip) +U0 ICDivEqu(CIntermediateCode *tmpi,Bool is_mod,I64 rip) { if (tmpi->ic_flags & ICF_BY_VAL) { ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,rip); if (tmpi->ic_class->raw_type&RTF_UNSIGNED) { ICZero(tmpi,REG_RDX); ICU24(tmpi,0xF1F748); @@ -421,19 +385,19 @@ U0 ICDivEqu(CIntermediateCode *tmpi,Bool is_mod,I64 ip) ICU24(tmpi,0xF9F748); } if (is_mod) - ICMov(tmpi,tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,MDF_REG+RT_I64,REG_RDX,0,ip); + ICMov(tmpi,tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,MDF_REG+RT_I64,REG_RDX,0,rip); else - ICMov(tmpi,tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,MDF_REG+RT_I64,REG_RAX,0,ip); + ICMov(tmpi,tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,MDF_REG+RT_I64,REG_RAX,0,rip); } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); //dangerous might clobber RBX in Mov, but it doesn't - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,MDF_DISP+tmpi->a1_type_pointed_to, - REG_RBX,0,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,MDF_DISP+tmpi->arg1_type_pointed_to, + REG_RBX,0,rip); if (tmpi->ic_class->raw_type&RTF_UNSIGNED) { ICZero(tmpi,REG_RDX); ICU24(tmpi,0xF1F748); @@ -442,28 +406,28 @@ U0 ICDivEqu(CIntermediateCode *tmpi,Bool is_mod,I64 ip) ICU24(tmpi,0xF9F748); } if (is_mod) - ICMov(tmpi,MDF_DISP+tmpi->a1_type_pointed_to,REG_RBX,0, - MDF_REG+RT_I64,REG_RDX,0,ip); + ICMov(tmpi,MDF_DISP+tmpi->arg1_type_pointed_to,REG_RBX,0, + MDF_REG+RT_I64,REG_RDX,0,rip); else - ICMov(tmpi,MDF_DISP+tmpi->a1_type_pointed_to,REG_RBX,0, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICMov(tmpi,MDF_DISP+tmpi->arg1_type_pointed_to,REG_RBX,0, + MDF_REG+RT_I64,REG_RAX,0,rip); } - if (tmpi->r.type.mode) { + if (tmpi->res.type.mode) { if (is_mod) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RDX,0,ip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RDX,0,rip); else - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } } -U0 ICMod(CIntermediateCode *tmpi,I64 ip) +U0 ICMod(CIntermediateCode *tmpi,I64 rip) { ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); if (tmpi->ic_class->raw_type&RTF_UNSIGNED) { ICZero(tmpi,REG_RDX); ICU24(tmpi,0xF1F748); @@ -471,22 +435,22 @@ U0 ICMod(CIntermediateCode *tmpi,I64 ip) ICU16(tmpi,0x9948); ICU24(tmpi,0xF9F748); } - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RDX,0,ip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RDX,0,rip); } U0 ICAddSubEctEqu(CIntermediateCode *tmpi,U8 type_pointed_to, CICType t1,I64 r1,I64 d1,CICType t2,I64 r2,I64 d2, - CICType t3,I64 r3,I64 d3,I64 op,I64 ip) + CICType t3,I64 r3,I64 d3,I64 op,I64 rip) { Bool done; I64 res_reg,tmp,i; if (tmpi->ic_flags & ICF_BY_VAL) { if (t3&MDF_IMM) { ICAddSubEctImm(tmpi,t2&MDG_MASK+type_pointed_to,r2,d2,t2&MDG_MASK+ - type_pointed_to,r2,d2,d3,op,ip); + type_pointed_to,r2,d2,d3,op,rip); if (t1.mode) - ICMov(tmpi,t1,r1,d1,t2&MDG_MASK+type_pointed_to,r2,d2,ip); + ICMov(tmpi,t1,r1,d1,t2&MDG_MASK+type_pointed_to,r2,d2,rip); return; } else { done=FALSE; @@ -496,14 +460,14 @@ U0 ICAddSubEctEqu(CIntermediateCode *tmpi,U8 type_pointed_to, tmp=r3; else { tmp=REG_RCX; - ICMov(tmpi,MDF_REG+RT_I64,tmp,0,t3,r3,d3,ip); + ICMov(tmpi,MDF_REG+RT_I64,tmp,0,t3,r3,d3,rip); } i=ICModr1(tmp,t2&MDG_MASK+type_pointed_to,r2,d2); if (tmpi->ic_flags&ICF_LOCK) ICU8(tmpi,OC_LOCK_PREFIX); ICRex(tmpi,i.u8[1]); ICU16(tmpi,i.u8[2]<<8+op.u8[5]); - ICModr2(tmpi,i,d2,ip+4); + ICModr2(tmpi,i,,d2,rip); return; } if (t3.raw_type>=RT_I64 && t3&MDG_REG_DISP_SIB_RIP) { @@ -511,27 +475,27 @@ U0 ICAddSubEctEqu(CIntermediateCode *tmpi,U8 type_pointed_to, res_reg=r2; else { res_reg=REG_RCX; - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,t2,r2,d2,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,t2,r2,d2,rip); } i=ICModr1(res_reg,t3&MDG_MASK+type_pointed_to,r3,d3); if (tmpi->ic_flags&ICF_LOCK) ICU8(tmpi,OC_LOCK_PREFIX); ICRex(tmpi,i.u8[1]); ICU16(tmpi,i.u8[2]<<8+op.u8[0]); - ICModr2(tmpi,i,d3,ip+4); + ICModr2(tmpi,i,,d3,rip); ICMov(tmpi,t2&MDG_MASK+type_pointed_to,r2,d2, - MDF_REG+RT_I64,res_reg,0,ip); + MDF_REG+RT_I64,res_reg,0,rip); done=TRUE; } } if (!done) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,t3,r3,d3,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,t3,r3,d3,rip); if (t2&MDF_REG && r2!=REG_RAX) res_reg=r2; else { res_reg=REG_RCX; ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - t2&MDG_MASK+type_pointed_to,r2,d2,ip); + t2&MDG_MASK+type_pointed_to,r2,d2,rip); } if (tmpi->ic_flags&ICF_LOCK) ICU8(tmpi,OC_LOCK_PREFIX); @@ -541,7 +505,7 @@ U0 ICAddSubEctEqu(CIntermediateCode *tmpi,U8 type_pointed_to, ICU8(tmpi,0x48); ICU16(tmpi,0xC000+op.u8[0]+(res_reg&7)<<11); ICMov(tmpi,t2&MDG_MASK+type_pointed_to,r2,d2, - MDF_REG+RT_I64,res_reg,0,ip); + MDF_REG+RT_I64,res_reg,0,rip); } } } else { @@ -550,25 +514,25 @@ U0 ICAddSubEctEqu(CIntermediateCode *tmpi,U8 type_pointed_to, if (!d3.u32[1]) { if (tmpi->ic_flags&ICF_RES_NOT_USED && t2&MDF_REG && d3(U64)<=MAX_I8) { - ICSlashOp(tmpi,MDF_DISP+type_pointed_to,r2,0,0x838000+op.u8[4],ip); + ICSlashOp(tmpi,MDF_DISP+type_pointed_to,r2,0,0x838000+op.u8[4],rip); ICU8(tmpi,d3); done=TRUE; } else if (op.u8[2]==0x24) {//AND - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,t2,r2,d2,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,t2,r2,d2,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - MDF_DISP+type_pointed_to,REG_RCX,0,ip); + MDF_DISP+type_pointed_to,REG_RCX,0,rip); res_reg=REG_RAX; if (tmpi->ic_flags&ICF_LOCK) ICU8(tmpi,OC_LOCK_PREFIX); ICU16(tmpi,op.u8[3]<<8+0x40); ICU32(tmpi,d3); ICMov(tmpi,MDF_DISP+type_pointed_to,REG_RCX,0, - MDF_REG+RT_I64,res_reg,0,ip); + MDF_REG+RT_I64,res_reg,0,rip); done=TRUE; } else if (type_pointed_toic_flags&ICF_LOCK) ICU8(tmpi,OC_LOCK_PREFIX); @@ -583,32 +547,32 @@ U0 ICAddSubEctEqu(CIntermediateCode *tmpi,U8 type_pointed_to, ICU8(tmpi,d3); } ICMov(tmpi,MDF_DISP+type_pointed_to,REG_RCX,0, - MDF_REG+RT_I64,res_reg,0,ip); + MDF_REG+RT_I64,res_reg,0,rip); done=TRUE; } } } if (!done) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,t3,r3,d3,ip); - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,t2,r2,d2,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,t3,r3,d3,rip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,t2,r2,d2,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0, - MDF_DISP+type_pointed_to,REG_RCX,0,ip); + MDF_DISP+type_pointed_to,REG_RCX,0,rip); res_reg=REG_RBX; if (tmpi->ic_flags&ICF_LOCK) ICU8(tmpi,OC_LOCK_PREFIX); ICU8(tmpi,0x48); ICU16(tmpi,0xC000+op.u8[0]+(res_reg&7)<<11); ICMov(tmpi,MDF_DISP+type_pointed_to,REG_RCX,0, - MDF_REG+RT_I64,res_reg,0,ip); + MDF_REG+RT_I64,res_reg,0,rip); } } if (t1.mode) - ICMov(tmpi,t1,r1,d1,MDF_REG+RT_I64,res_reg,0,ip); + ICMov(tmpi,t1,r1,d1,MDF_REG+RT_I64,res_reg,0,rip); } U0 ICShift(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, CICType t2,I64 r2,I64 d2,CICType t3,I64 r3,I64 d3, - I64 us,I64 is,I64 ip) + I64 us,I64 is,I64 rip) { I64 i=0x48,res_reg; if (tmpi->ic_class->raw_type&RTF_UNSIGNED || @@ -621,7 +585,7 @@ U0 ICShift(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, } else res_reg=REG_RAX; if (t3&MDF_IMM) { - ICMov(tmpi,MDF_REG+RT_I64,res_reg,0,t2,r2,d2,ip); + ICMov(tmpi,MDF_REG+RT_I64,res_reg,0,t2,r2,d2,rip); if (d3==1) ICU24(tmpi,i+is.u16[2]<<8+(res_reg&7)<<16); else { @@ -629,17 +593,17 @@ U0 ICShift(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, ICU8(tmpi,d3); } } else { - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,t3,r3,d3,ip); - ICMov(tmpi,MDF_REG+RT_I64,res_reg,0,t2,r2,d2,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,t3,r3,d3,rip); + ICMov(tmpi,MDF_REG+RT_I64,res_reg,0,t2,r2,d2,rip); ICU24(tmpi,i+is.u16[1]<<8+(res_reg&7)<<16); } - ICMov(tmpi,t1,r1,d1,MDF_REG+RT_I64,res_reg,0,ip); + ICMov(tmpi,t1,r1,d1,MDF_REG+RT_I64,res_reg,0,rip); } U0 ICShiftEqu(CIntermediateCode *tmpi,U8 type_pointed_to, CICType t1,I64 r1,I64 d1, CICType t2,I64 r2,I64 d2, - CICType t3,I64 r3,I64 d3,I64 us,I64 is,I64 ip) + CICType t3,I64 r3,I64 d3,I64 us,I64 is,I64 rip) { I64 res_reg; if (tmpi->ic_class->raw_type&RTF_UNSIGNED || @@ -647,13 +611,13 @@ U0 ICShiftEqu(CIntermediateCode *tmpi,U8 type_pointed_to, is=us; if (tmpi->ic_flags & ICF_BY_VAL) { if (!(t3&MDF_IMM)) - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,t3,r3,d3,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,t3,r3,d3,rip); if (t2&MDF_REG) res_reg=r2; else { res_reg=REG_RAX; ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - t2&MDG_MASK+type_pointed_to,r2,d2,ip); + t2&MDG_MASK+type_pointed_to,r2,d2,rip); } if (res_reg>7) ICU8(tmpi,0x49); @@ -669,12 +633,12 @@ U0 ICShiftEqu(CIntermediateCode *tmpi,U8 type_pointed_to, } else ICU16(tmpi,is.u16[1]+(res_reg&7)<<8); ICMov(tmpi,t2&MDG_MASK+type_pointed_to,r2,d2, - MDF_REG+RT_I64,res_reg,0,ip); + MDF_REG+RT_I64,res_reg,0,rip); } else { if (!(t3&MDF_IMM)) - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,t3,r3,d3,ip); - ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,t2,r2,d2,ip); - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,MDF_DISP+type_pointed_to,REG_RDX,0,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,t3,r3,d3,rip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,t2,r2,d2,rip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,MDF_DISP+type_pointed_to,REG_RDX,0,rip); res_reg=REG_RAX; ICU8(tmpi,0x48); if (t3&MDF_IMM) { @@ -687,8 +651,8 @@ U0 ICShiftEqu(CIntermediateCode *tmpi,U8 type_pointed_to, } else ICU16(tmpi,is.u16[1]+(res_reg&7)<<8); ICMov(tmpi, - MDF_DISP+type_pointed_to,REG_RDX,0,MDF_REG+RT_I64,res_reg,0,ip); + MDF_DISP+type_pointed_to,REG_RDX,0,MDF_REG+RT_I64,res_reg,0,rip); } if (t1.mode) - ICMov(tmpi,t1,r1,d1,MDF_REG+RT_I64,res_reg,0,ip); + ICMov(tmpi,t1,r1,d1,MDF_REG+RT_I64,res_reg,0,rip); } diff --git a/Compiler/BackB.HC b/Compiler/BackB.HC index 0b78544..ce6e295 100644 --- a/Compiler/BackB.HC +++ b/Compiler/BackB.HC @@ -1,64 +1,64 @@ -U0 ICUnaries(CIntermediateCode *tmpi,I64 op,I64 ip) +U0 ICUnaries(CIntermediateCode *tmpi,I64 op,I64 rip) { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); - ICSlashOp(tmpi,MDF_REG+RT_I64,REG_RAX,0,op,ip); - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); + ICSlashOp(tmpi,MDF_REG+RT_I64,REG_RAX,0,op,rip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } -U0 ICNot(CIntermediateCode *tmpi,I64 ip) +U0 ICNot(CIntermediateCode *tmpi,I64 rip) { I64 i; - if (tmpi->a1.type.raw_type<=RT_U8 && tmpi->a1.type&MDG_DISP_SIB_RIP) { - i=ICModr1(tmpi,tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp); + if (tmpi->arg1.type.raw_type<=RT_U8 && tmpi->arg1.type&MDG_DISP_SIB_RIP) { + i=ICModr1(tmpi,tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp); ICRex(tmpi,i.u8[1]); ICU16(tmpi,i.u8[2]<<8+0xF6); //TEST ?,0xFF - ICModr2(tmpi,i,tmpi->a1.disp,ip+5); + ICModr2(tmpi,i,,tmpi->arg1.disp,rip+1); ICU8(tmpi,0xFF); } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); ICTest(tmpi,REG_RAX); } ICU24(tmpi,0xC0940F); //SETZ AL ICU32(tmpi,0xC0B60F48); //MOVZX RAX,AL - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_U64,REG_RAX,0,ip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_U64,REG_RAX,0,rip); } -U0 ICAndAnd(CIntermediateCode *tmpi,I64 ip) +U0 ICAndAnd(CIntermediateCode *tmpi,I64 rip) { I64 r2; ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); - if (!(tmpi->a1.type&MDF_REG) || tmpi->a1.reg==REG_RAX) { + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); + if (!(tmpi->arg1.type&MDF_REG) || tmpi->arg1.reg==REG_RAX) { ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); r2=REG_RDX; } else - r2=tmpi->a1.reg; + r2=tmpi->arg1.reg; ICZero(tmpi,REG_RAX); ICTest(tmpi,r2); ICU16(tmpi,0x0874); ICTest(tmpi,REG_RCX); ICU16(tmpi,0x0374); ICU24(tmpi,0xC0FF48); - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } -U0 ICOrOr(CIntermediateCode *tmpi,I64 ip) +U0 ICOrOr(CIntermediateCode *tmpi,I64 rip) { I64 i=0x48,r2; ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); - if (!(tmpi->a1.type&MDF_REG) || tmpi->a1.reg==REG_RAX) { + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); + if (!(tmpi->arg1.type&MDF_REG) || tmpi->arg1.reg==REG_RAX) { ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); r2=REG_RDX; } else - r2=tmpi->a1.reg; + r2=tmpi->arg1.reg; if (r2>7) { i++; @@ -68,21 +68,21 @@ U0 ICOrOr(CIntermediateCode *tmpi,I64 ip) ICU24(tmpi,0xC80B00+i+r2<<16); ICU16(tmpi,0x0374); ICU24(tmpi,0xC0FF48); - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } -U0 ICXorXor(CIntermediateCode *tmpi,I64 ip) +U0 ICXorXor(CIntermediateCode *tmpi,I64 rip) { I64 r2; ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); - if (!(tmpi->a1.type&MDF_REG)) { + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); + if (!(tmpi->arg1.type&MDF_REG)) { ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); r2=REG_RDX; } else - r2=tmpi->a1.reg; + r2=tmpi->arg1.reg; ICZero(tmpi,REG_RBX); ICTest(tmpi,r2); ICU16(tmpi,0x0374); @@ -95,19 +95,19 @@ U0 ICXorXor(CIntermediateCode *tmpi,I64 ip) ICU24(tmpi,0xC33348); - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } -U0 ICCmp(CIntermediateCode *tmpi,I64 us,I64 is,I64 ip) +U0 ICCmp(CIntermediateCode *tmpi,I64 us,I64 is,I64 rip) { - I64 r1,d1,r2,i=0x48,j=tmpi->a2.disp; - if (tmpi->a2.type&MDF_IMM && MIN_I32<=j<=MAX_I32) { + I64 r1,d1,r2,i=0x48,j=tmpi->arg2.disp; + if (tmpi->arg2.type&MDF_IMM && MIN_I32<=j<=MAX_I32) { if (!(tmpi->ic_flags&(ICF_POP_CMP|ICF_PUSH_CMP)) && - tmpi->a1.type&MDF_DISP && //TODO - tmpi->a1.type.raw_type>=RT_I64 && tmpi->a1.reg!=REG_RAX) { - r1=tmpi->a1.reg; - d1=tmpi->a1.disp; + tmpi->arg1.type&MDF_DISP && //TODO + tmpi->arg1.type.raw_type>=RT_I64 && tmpi->arg1.reg!=REG_RAX) { + r1=tmpi->arg1.reg; + d1=tmpi->arg1.disp; ICZero(tmpi,REG_RAX); if (r1>7) i++; @@ -133,11 +133,11 @@ U0 ICCmp(CIntermediateCode *tmpi,I64 us,I64 is,I64 ip) ICPopRegs(tmpi,1<a1.type&MDF_REG && tmpi->a1.reg!=REG_RAX) - r1=tmpi->a1.reg; + if (tmpi->arg1.type&MDF_REG && tmpi->arg1.reg!=REG_RAX) + r1=tmpi->arg1.reg; else { ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); r1=REG_RCX; } } @@ -153,31 +153,31 @@ U0 ICCmp(CIntermediateCode *tmpi,I64 us,I64 is,I64 ip) } } if (tmpi->ic_flags & ICF_PUSH_CMP) - ICPush(tmpi,MDF_IMM+RT_I64,0,j,ip); + ICPush(tmpi,MDF_IMM+RT_I64,0,j,rip); if (tmpi->ic_class->raw_type&RTF_UNSIGNED || tmpi->ic_flags & ICF_USE_UNSIGNED) is=us; ICU16(tmpi,0x300+is); ICU24(tmpi,0xC0FF48); - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } else { - if (tmpi->a2.type&MDF_REG && tmpi->a2.reg!=REG_RAX) - r2=tmpi->a2.reg; + if (tmpi->arg2.type&MDF_REG && tmpi->arg2.reg!=REG_RAX) + r2=tmpi->arg2.reg; else { ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); r2=REG_RCX; } if (tmpi->ic_flags & ICF_POP_CMP) { ICPopRegs(tmpi,1<a1.type&MDF_REG && tmpi->a1.reg!=REG_RAX) - r1=tmpi->a1.reg; + if (tmpi->arg1.type&MDF_REG && tmpi->arg1.reg!=REG_RAX) + r1=tmpi->arg1.reg; else { ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); r1=REG_RDX; } } @@ -194,47 +194,47 @@ U0 ICCmp(CIntermediateCode *tmpi,I64 us,I64 is,I64 ip) is=us; ICU16(tmpi,0x300+is); ICU24(tmpi,0xC0FF48); - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } } -U0 ICBitOps(CIntermediateCode *tmpi,CICArg *a1,CICArg *a2, - CIntermediateCode *tmpi2,I64 op,I64 op_imm,I64 ip) +U0 ICBitOps(CIntermediateCode *tmpi,CICArg *arg1,CICArg *arg2, + CIntermediateCode *tmpi2,I64 op,I64 op_imm,I64 rip) {//TODO:not fully utilizing Modr Bool res_not_used=ToBool(tmpi2->ic_flags&ICF_RES_NOT_USED); I64 r1,t2,r2,d2,i=0x48; if (tmpi->ic_flags & ICF_BY_VAL) { - t2=a2->type&MDG_MASK+RT_I64; //TODO: check overflow - r2=a2->reg; - d2=a2->disp; + t2=arg2->type&MDG_MASK+RT_I64; //TODO: check overflow + r2=arg2->reg; + d2=arg2->disp; if (!(t2&MDG_REG_DISP_SIB_RIP) || !(r2.u8[0]!=REG_RAX&&(!(t2&MDF_SIB) || r2.u8[1]&15!=REG_RAX) || res_not_used)) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,t2,r2,d2,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,t2,r2,d2,rip); t2=MDF_REG+RT_I64; r2=REG_RCX; d2=0; } - if (a1->type&MDF_REG && (a1->reg!=REG_RAX||res_not_used)) - r1=a1->reg; - else if (!(a1->type&MDF_IMM) || a1->disp>63) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,a1->type,a1->reg,a1->disp,ip); + if (arg1->type&MDF_REG && (arg1->reg!=REG_RAX||res_not_used)) + r1=arg1->reg; + else if (!(arg1->type&MDF_IMM) || arg1->disp>63) { + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,arg1->type,arg1->reg,arg1->disp,rip); r1=REG_RDX; } else r1=0; } else { t2=MDF_DISP+RT_I64; d2=0; - if (a2->type&MDF_REG && (a2->reg!=REG_RAX||res_not_used)) - r2=a2->reg; + if (arg2->type&MDF_REG && (arg2->reg!=REG_RAX||res_not_used)) + r2=arg2->reg; else { - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,a2->type,a2->reg,a2->disp,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,arg2->type,arg2->reg,arg2->disp,rip); r2=REG_RCX; } - if (a1->type&MDF_REG && (a1->reg!=REG_RAX||res_not_used)) - r1=a1->reg; - else if (!(a1->type&MDF_IMM) || a1->disp>63) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,a1->type,a1->reg,a1->disp,ip); + if (arg1->type&MDF_REG && (arg1->reg!=REG_RAX||res_not_used)) + r1=arg1->reg; + else if (!(arg1->type&MDF_IMM) || arg1->disp>63) { + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,arg1->type,arg1->reg,arg1->disp,rip); r1=REG_RDX; } else r1=0; @@ -243,30 +243,30 @@ U0 ICBitOps(CIntermediateCode *tmpi,CICArg *a1,CICArg *a2, ICZero(tmpi,REG_RAX); if (tmpi->ic_flags&ICF_LOCK && op!=0xA30F) ICU8(tmpi,OC_LOCK_PREFIX); - if (a1->type&MDF_IMM && a1->disp<32) + if (arg1->type&MDF_IMM && arg1->disp<32) t2=t2&MDG_MASK+RT_U32; i=ICModr1(r1,t2,r2,d2); ICRex(tmpi,i.u8[1]); - if (a1->type&MDF_IMM && a1->disp<64) { + if (arg1->type&MDF_IMM && arg1->disp<64) { ICU24(tmpi,i.u8[2]<<16+op_imm); - ICModr2(tmpi,i,d2,ip+5); - ICU8(tmpi,a1->disp); + ICModr2(tmpi,i,,d2,rip+1); + ICU8(tmpi,arg1->disp); } else { ICU24(tmpi,i.u8[2]<<16+op); - ICModr2(tmpi,i,d2,ip+4); + ICModr2(tmpi,i,,d2,rip); } if (!res_not_used) { ICU24(tmpi,0xC0920F); //SETC AL - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } } -U0 ICToUpper(CIntermediateCode *tmpi,I64 ip) +U0 ICToUpper(CIntermediateCode *tmpi,I64 rip) { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); ICU32(tmpi,0x61F88348); ICU16(tmpi,0x0A7C); ICU32(tmpi,0x7AF88348); @@ -274,26 +274,26 @@ U0 ICToUpper(CIntermediateCode *tmpi,I64 ip) ICU32(tmpi,0xE0C08348); } -U0 ICToI64(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip) +U0 ICToI64(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 rip) { ICFCvt(cc,tmpi,REG_RAX, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,TRUE,CN_MAIN,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,TRUE,CN_INST,rip); } -U0 ICToF64(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip) +U0 ICToF64(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 rip) { ICFCvt(cc,tmpi,REG_RAX, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,FALSE,CN_MAIN,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,FALSE,CN_INST,rip); } -U0 ICToBool(CCmpCtrl *,CIntermediateCode *tmpi,I64 ip) +U0 ICToBool(CCmpCtrl *,CIntermediateCode *tmpi,I64 rip) { I64 r; - if (tmpi->a1.type&MDF_REG) - r=tmpi->a1.reg; + if (tmpi->arg1.type&MDF_REG) + r=tmpi->arg1.reg; else { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); r=REG_RAX; } ICTest(tmpi,r); @@ -301,182 +301,182 @@ U0 ICToBool(CCmpCtrl *,CIntermediateCode *tmpi,I64 ip) ICU32(tmpi,0xC0B60F48); //MOVZX RAX,AL } -U0 ICPreIncDec(CIntermediateCode *tmpi,I64 op,I64 ip) +U0 ICPreIncDec(CIntermediateCode *tmpi,I64 op,I64 rip) { I64 r; CHashClass *tmpc=tmpi->ic_class,*tmpc1=tmpc-1; if (tmpi->ic_flags & ICF_BY_VAL) { if (tmpc->ptr_stars_cnt && tmpc1->size!=1) { ICAddSubEctImm(tmpi, - tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp, - tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,tmpc1->size,op.u16[3],ip); + tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,tmpc1->size,op.u16[3],rip); } else ICSlashOp(tmpi, - tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,op,ip); - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,op,rip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,rip); } else { - if (tmpi->a1.type&MDF_REG) - r=tmpi->a1.reg; + if (tmpi->arg1.type&MDF_REG) + r=tmpi->arg1.reg; else { ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); r=REG_RCX; } if (tmpc->ptr_stars_cnt && tmpc1->size!=1) { - ICAddSubEctImm(tmpi,MDF_DISP+tmpi->a1_type_pointed_to,r,0, - MDF_DISP+tmpi->a1_type_pointed_to,r,0, - tmpc1->size,op.u16[3],ip); + ICAddSubEctImm(tmpi,MDF_DISP+tmpi->arg1_type_pointed_to,r,0, + MDF_DISP+tmpi->arg1_type_pointed_to,r,0, + tmpc1->size,op.u16[3],rip); } else ICSlashOp(tmpi, - MDF_DISP+tmpi->a1_type_pointed_to,r,0,op,ip); - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_DISP+tmpi->a1_type_pointed_to,r,0,ip); + MDF_DISP+tmpi->arg1_type_pointed_to,r,0,op,rip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_DISP+tmpi->arg1_type_pointed_to,r,0,rip); } } -U0 ICPostIncDec(CIntermediateCode *tmpi,I64 op,I64 ip) +U0 ICPostIncDec(CIntermediateCode *tmpi,I64 op,I64 rip) { I64 r; CHashClass *tmpc=tmpi->ic_class,*tmpc1=tmpc-1; if (tmpi->ic_flags & ICF_BY_VAL) { - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,ip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,rip); if (tmpc->ptr_stars_cnt && tmpc1->size!=1) ICAddSubEctImm(tmpi, - tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp, - tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,tmpc1->size,op.u16[3],ip); + tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,tmpc1->size,op.u16[3],rip); else ICSlashOp(tmpi, - tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,op,ip); + tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,op,rip); } else { - if (tmpi->a1.type&MDF_REG && - !(tmpi->r.type&MDF_REG && tmpi->r.reg==tmpi->a1.reg)) - r=tmpi->a1.reg; + if (tmpi->arg1.type&MDF_REG && + !(tmpi->res.type&MDF_REG && tmpi->res.reg==tmpi->arg1.reg)) + r=tmpi->arg1.reg; else { ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); r=REG_RCX; } - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_DISP+tmpi->a1_type_pointed_to,r,0,ip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_DISP+tmpi->arg1_type_pointed_to,r,0,rip); if (tmpc->ptr_stars_cnt && tmpc1->size!=1) - ICAddSubEctImm(tmpi,MDF_DISP+tmpi->a1_type_pointed_to,r,0, - MDF_DISP+tmpi->a1_type_pointed_to,r,0,tmpc1->size,op.u16[3],ip); + ICAddSubEctImm(tmpi,MDF_DISP+tmpi->arg1_type_pointed_to,r,0, + MDF_DISP+tmpi->arg1_type_pointed_to,r,0,tmpc1->size,op.u16[3],rip); else - ICSlashOp(tmpi,MDF_DISP+tmpi->a1_type_pointed_to,r,0,op,ip); + ICSlashOp(tmpi,MDF_DISP+tmpi->arg1_type_pointed_to,r,0,op,rip); } } -U0 ICDerefPostIncDec(CIntermediateCode *tmpi,I64 op,I64 ip) +U0 ICDerefPostIncDec(CIntermediateCode *tmpi,I64 op,I64 rip) { CICType t; I64 r; CHashClass *tmpc1=tmpi->ic_class; - t=tmpi->r.type.raw_type; - if (t>tmpi->a1_type_pointed_to) - t=tmpi->a1_type_pointed_to; + t=tmpi->res.type.raw_type; + if (t>tmpi->arg1_type_pointed_to) + t=tmpi->arg1_type_pointed_to; if (tmpi->ic_flags & ICF_BY_VAL) { - if (tmpi->a1.type&MDF_REG) - r=tmpi->a1.reg; + if (tmpi->arg1.type&MDF_REG) + r=tmpi->arg1.reg; else { ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a1.type&MDG_MASK+RT_I64,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type&MDG_MASK+RT_I64,tmpi->arg1.reg,tmpi->arg1.disp,rip); r=REG_RDX; } - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_DISP+t,r,0,ip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_DISP+t,r,0,rip); if (tmpc1->size!=1) ICAddSubEctImm(tmpi, - tmpi->a1.type&MDG_MASK+RT_I64,tmpi->a1.reg,tmpi->a1.disp, - tmpi->a1.type&MDG_MASK+RT_I64,tmpi->a1.reg,tmpi->a1.disp, - tmpc1->size,op.u16[3],ip); + tmpi->arg1.type&MDG_MASK+RT_I64,tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg1.type&MDG_MASK+RT_I64,tmpi->arg1.reg,tmpi->arg1.disp, + tmpc1->size,op.u16[3],rip); else - ICSlashOp(tmpi, - tmpi->a1.type&MDG_MASK+RT_I64,tmpi->a1.reg,tmpi->a1.disp,op,ip); + ICSlashOp(tmpi,tmpi->arg1.type&MDG_MASK+RT_I64, + tmpi->arg1.reg,tmpi->arg1.disp,op,rip); } else { - if (tmpi->a1.type&MDF_REG) - r=tmpi->a1.reg; + if (tmpi->arg1.type&MDF_REG) + r=tmpi->arg1.reg; else { ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a1.type&MDG_MASK+RT_I64,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type&MDG_MASK+RT_I64,tmpi->arg1.reg,tmpi->arg1.disp,rip); r=REG_RCX; } - ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,MDF_DISP+RT_I64,r,0,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,MDF_DISP+RT_I64,r,0,rip); if (tmpc1->size!=1) ICAddSubEctImm(tmpi,MDF_DISP+RT_I64,r,0,MDF_DISP+RT_I64,r,0, - tmpc1->size,op.u16[3],ip); + tmpc1->size,op.u16[3],rip); else - ICSlashOp(tmpi,MDF_DISP+RT_I64,r,0,op,ip); - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_DISP+t,REG_RDX,0,ip); + ICSlashOp(tmpi,MDF_DISP+RT_I64,r,0,op,rip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_DISP+t,REG_RDX,0,rip); } } -U0 ICAssignPostIncDec(CIntermediateCode *tmpi,I64 op,I64 ip) +U0 ICAssignPostIncDec(CIntermediateCode *tmpi,I64 op,I64 rip) { CHashClass *tmpc1=tmpi->ic_class2-1; I64 r; if (tmpi->ic_flags & ICF_BY_VAL) { - if (tmpi->a1.type&MDF_REG) - r=tmpi->a1.reg; + if (tmpi->arg1.type&MDF_REG) + r=tmpi->arg1.reg; else { ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a1.type&MDG_MASK+RT_I64,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type&MDG_MASK+RT_I64,tmpi->arg1.reg,tmpi->arg1.disp,rip); r=REG_RDX; } - ICMov(tmpi,MDF_DISP+tmpi->a1_type_pointed_to,r,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); - if (tmpc1->size!=1 || tmpi->a1.type&MDF_STK) - ICAddSubEctImm(tmpi,tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - MDF_REG+RT_I64,r,0,tmpc1->size,op.u16[3],ip); + ICMov(tmpi,MDF_DISP+tmpi->arg1_type_pointed_to,r,0, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); + if (tmpc1->size!=1 || tmpi->arg1.type&MDF_STK) + ICAddSubEctImm(tmpi,tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + MDF_REG+RT_I64,r,0,tmpc1->size,op.u16[3],rip); else - ICSlashOp(tmpi,tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,op,ip); + ICSlashOp(tmpi,tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,op,rip); } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,MDF_DISP+RT_I64,REG_RDX,0,ip); - ICMov(tmpi,MDF_DISP+tmpi->a1_type_pointed_to,REG_RCX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,MDF_DISP+RT_I64,REG_RDX,0,rip); + ICMov(tmpi,MDF_DISP+tmpi->arg1_type_pointed_to,REG_RCX,0, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); if (tmpc1->size!=1) ICAddSubEctImm(tmpi,MDF_DISP+RT_I64,REG_RDX,0, - MDF_REG+RT_I64,REG_RCX,0,tmpc1->size,op.u16[3],ip); + MDF_REG+RT_I64,REG_RCX,0,tmpc1->size,op.u16[3],rip); else - ICSlashOp(tmpi,MDF_DISP+RT_I64,REG_RDX,0,op,ip); + ICSlashOp(tmpi,MDF_DISP+RT_I64,REG_RDX,0,op,rip); } } -U0 ICCmpAndBranch(CIntermediateCode *tmpi,Bool has_res,I64 ip, - I64 us,I64 is,I64 not_us,I64 not_is,U8 *buf,I64 ip2) +U0 ICCmpAndBranch(CIntermediateCode *tmpi,Bool has_res,I64 rip, + I64 us,I64 is,I64 not_us,I64 not_is,U8 *buf,I64 rip2) { I64 r1,r2,i=0x48,j,res_reg; CICType t1,t2; Bool short_jmp,swap,done; CCodeMisc *lb; - CICArg *a1=&tmpi->a1,*a2=&tmpi->a2; + CICArg *arg1=&tmpi->arg1,*arg2=&tmpi->arg2; - j=a1->disp; - if (a1->type&MDF_IMM && MIN_I32<=j<=MAX_I32) { - SwapI64(&a1,&a2); + j=arg1->disp; + if (arg1->type&MDF_IMM && MIN_I32<=j<=MAX_I32) { + SwapI64(&arg1,&arg2); swap=TRUE; us=not_us; is=not_is; @@ -486,16 +486,17 @@ U0 ICCmpAndBranch(CIntermediateCode *tmpi,Bool has_res,I64 ip, tmpi->ic_flags & ICF_USE_UNSIGNED) is=us; - j=a2->disp; - if (a2->type&MDF_IMM && MIN_I32<=j<=MAX_I32) { - if (!has_res && a1->type&MDG_REG_DISP_SIB_RIP) - ICAddSubEctImm(tmpi,a1->type,a1->reg,a1->disp, - a1->type,a1->reg,a1->disp,j,0x073B,ip2); + j=arg2->disp; + if (arg2->type&MDF_IMM && MIN_I32<=j<=MAX_I32) { + if (!has_res && arg1->type&MDG_REG_DISP_SIB_RIP) + ICAddSubEctImm(tmpi,arg1->type,arg1->reg,arg1->disp, + arg1->type,arg1->reg,arg1->disp,j,0x073B,rip2); else { - if (a1->type&MDF_REG) - r1=a1->reg; + if (arg1->type&MDF_REG) + r1=arg1->reg; else { - ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,a1->type,a1->reg,a1->disp,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,arg1->type, + arg1->reg,arg1->disp,rip2); r1=REG_RDX; } if (!j) { @@ -527,56 +528,61 @@ U0 ICCmpAndBranch(CIntermediateCode *tmpi,Bool has_res,I64 ip, } if (has_res) { if (!swap) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,MDF_IMM+RT_I64,0,j,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,MDF_IMM+RT_I64,0,j,rip2); res_reg=REG_RCX; } else res_reg=r1; } } else { done=FALSE; - t1=a1->type; - r1=a1->reg; - r2=a2->reg; - t2=a2->type; + t1=arg1->type; + r1=arg1->reg; + r2=arg2->reg; + t2=arg2->type; if (t2.raw_type>=RT_I64 && !has_res && t2&MDG_DISP_SIB_RIP) { if (!(t1&MDF_REG) || t1.raw_typetype,a1->reg,a1->disp,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,arg1->type, + arg1->reg,arg1->disp,rip2); r1=REG_RAX; } - i=ICModr1(r1,t2,r2,a2->disp); + i=ICModr1(r1,t2,r2,arg2->disp); ICRex(tmpi,i.u8[1]); ICU16(tmpi,i.u8[2]<<8+0x3B); - ICModr2(tmpi,i,a2->disp,ip2+4); + ICModr2(tmpi,i,,arg2->disp,rip2); done=TRUE; } else if (t1.raw_type>=RT_I64 && t1&MDG_REG_DISP_SIB_RIP) { if (!(t2&MDF_REG) || t2.raw_typetype,a2->reg,a2->disp,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,arg2->type, + arg2->reg,arg2->disp,rip2); r2=REG_RCX; } else { - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,a2->type,a2->reg,a2->disp,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,arg2->type, + arg2->reg,arg2->disp,rip2); r2=REG_RAX; } } - i=ICModr1(r2,t1,r1,a1->disp); + i=ICModr1(r2,t1,r1,arg1->disp); ICRex(tmpi,i.u8[1]); ICU16(tmpi,i.u8[2]<<8+0x39); - ICModr2(tmpi,i,a1->disp,ip2+4); + ICModr2(tmpi,i,,arg1->disp,rip2); if (has_res) res_reg=r2; done=TRUE; } if (!done) { - if (a2->type&MDF_REG) - r2=a2->reg; + if (arg2->type&MDF_REG) + r2=arg2->reg; else { - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,a2->type,a2->reg,a2->disp,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,arg2->type, + arg2->reg,arg2->disp,rip2); r2=REG_RAX; } - if (a1->type&MDF_REG) - r1=a1->reg; + if (arg1->type&MDF_REG) + r1=arg1->reg; else { - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,a1->type,a1->reg,a1->disp,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,arg1->type, + arg1->reg,arg1->disp,rip2); r1=REG_RCX; } if (r2>7) @@ -589,11 +595,11 @@ U0 ICCmpAndBranch(CIntermediateCode *tmpi,Bool has_res,I64 ip, } } - ip+=tmpi->ic_cnt; + rip+=tmpi->ic_cnt; lb=OptLabelFwd(tmpi->ic_data); short_jmp=ToBool(tmpi->ic_flags&ICF_SHORT_JMP); if (!buf && lb->addr!=INVALID_PTR) { - i=lb->addr-(ip+2); + i=lb->addr-(rip+2); if (lb->flags&CMF_POP_CMP) { if(tmpi->ic_flags&ICF_PUSH_CMP) i+=4; @@ -606,7 +612,7 @@ U0 ICCmpAndBranch(CIntermediateCode *tmpi,Bool has_res,I64 ip, if (short_jmp) { tmpi->ic_flags|=ICF_SHORT_JMP; - i=lb->addr-(ip+2); + i=lb->addr-(rip+2); if (lb->flags&CMF_POP_CMP) { if(tmpi->ic_flags&ICF_PUSH_CMP) i+=4; @@ -616,7 +622,7 @@ U0 ICCmpAndBranch(CIntermediateCode *tmpi,Bool has_res,I64 ip, ICU16(tmpi,i<<8+is.u8[2]); } else { tmpi->ic_flags&=~ICF_SHORT_JMP; - i=lb->addr-(ip+6); + i=lb->addr-(rip+6); if (lb->flags&CMF_POP_CMP) { if(tmpi->ic_flags&ICF_PUSH_CMP) i+=4; @@ -627,36 +633,36 @@ U0 ICCmpAndBranch(CIntermediateCode *tmpi,Bool has_res,I64 ip, ICU32(tmpi,i); } if (has_res) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,res_reg,0,ip2); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,res_reg,0,rip2); } -U0 ICTestAndBranch(CIntermediateCode *tmpi,I64 ip,I64 is,U8 *buf,I64 ip2) +U0 ICTestAndBranch(CIntermediateCode *tmpi,I64 rip,I64 is,U8 *buf,I64 rip2) { I64 i; Bool short_jmp; CCodeMisc *lb; - if (!(tmpi->a1.type&MDF_REG)) { - if (tmpi->a1.type.raw_type<=RT_U8 && tmpi->a1.type&MDG_DISP_SIB_RIP) { - i=ICModr1(tmpi,tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp); + if (!(tmpi->arg1.type&MDF_REG)) { + if (tmpi->arg1.type.raw_type<=RT_U8 && tmpi->arg1.type&MDG_DISP_SIB_RIP) { + i=ICModr1(tmpi,tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp); ICRex(tmpi,i.u8[1]); ICU16(tmpi,i.u8[2]<<8+0xF6); - ICModr2(tmpi,i,tmpi->a1.disp,ip2+5); + ICModr2(tmpi,i,,tmpi->arg1.disp,rip2+1); ICU8(tmpi,0xFF); } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); ICTest(tmpi,REG_RAX); } } else - ICTest(tmpi,tmpi->a1.reg); + ICTest(tmpi,tmpi->arg1.reg); - ip+=tmpi->ic_cnt; + rip+=tmpi->ic_cnt; lb=OptLabelFwd(tmpi->ic_data); short_jmp=ToBool(tmpi->ic_flags&ICF_SHORT_JMP); if (!buf && lb->addr!=INVALID_PTR) { - i=lb->addr-(ip+2); + i=lb->addr-(rip+2); if (lb->flags&CMF_POP_CMP) i+=8; if (MIN_I8<=i<=MAX_I8) @@ -665,13 +671,13 @@ U0 ICTestAndBranch(CIntermediateCode *tmpi,I64 ip,I64 is,U8 *buf,I64 ip2) if (short_jmp) { tmpi->ic_flags|=ICF_SHORT_JMP; - i=lb->addr-(ip+2); + i=lb->addr-(rip+2); if (lb->flags&CMF_POP_CMP) i+=8; ICU16(tmpi,i<<8+is.u8[2]); } else { tmpi->ic_flags&=~ICF_SHORT_JMP; - i=lb->addr-(ip+6); + i=lb->addr-(rip+6); if (lb->flags&CMF_POP_CMP) i+=8; ICU16(tmpi,is.u16[0]); @@ -679,17 +685,17 @@ U0 ICTestAndBranch(CIntermediateCode *tmpi,I64 ip,I64 is,U8 *buf,I64 ip2) } } -U0 ICFlagBranch(CIntermediateCode *tmpi,I64 ip,I64 is,U8 *buf) +U0 ICFlagBranch(CIntermediateCode *tmpi,I64 rip,I64 is,U8 *buf) { I64 i; Bool short_jmp; CCodeMisc *lb; - ip+=tmpi->ic_cnt; + rip+=tmpi->ic_cnt; lb=OptLabelFwd(tmpi->ic_data); short_jmp=ToBool(tmpi->ic_flags&ICF_SHORT_JMP); if (!buf && lb->addr!=INVALID_PTR) { - i=lb->addr-(ip+2); + i=lb->addr-(rip+2); if (lb->flags&CMF_POP_CMP) i+=8; if (MIN_I8<=i<=MAX_I8) @@ -698,13 +704,13 @@ U0 ICFlagBranch(CIntermediateCode *tmpi,I64 ip,I64 is,U8 *buf) if (short_jmp) { tmpi->ic_flags|=ICF_SHORT_JMP; - i=lb->addr-(ip+2); + i=lb->addr-(rip+2); if (lb->flags&CMF_POP_CMP) i+=8; ICU16(tmpi,i<<8+is.u8[2]); } else { tmpi->ic_flags&=~ICF_SHORT_JMP; - i=lb->addr-(ip+6); + i=lb->addr-(rip+6); if (lb->flags&CMF_POP_CMP) i+=8; ICU16(tmpi,is.u16[0]); diff --git a/Compiler/BackC.HC b/Compiler/BackC.HC index d16ca9f..939e3a7 100644 --- a/Compiler/BackC.HC +++ b/Compiler/BackC.HC @@ -1,34 +1,34 @@ -U0 ICAndBranch(CIntermediateCode *tmpi,I64 ip,I64 is,U8 *buf,I64 ip2) +U0 ICAndBranch(CIntermediateCode *tmpi,I64 rip,I64 is,U8 *buf,I64 rip2) { U64 i; I64 it,t1,r1,d1,r2; Bool short_jmp,swap,override; CCodeMisc *lb; - CICArg *a1,*a2; + CICArg *arg1,*arg2; - if (tmpi->a1.type&MDF_IMM) { + if (tmpi->arg1.type&MDF_IMM) { swap=TRUE; - a1=&tmpi->a2; - a2=&tmpi->a1; + arg1=&tmpi->arg2; + arg2=&tmpi->arg1; } else { swap=FALSE; - a1=&tmpi->a1; - a2=&tmpi->a2; + arg1=&tmpi->arg1; + arg2=&tmpi->arg2; } - if (a2->type&MDF_IMM && a2->disp>MAX_U32) + if (arg2->type&MDF_IMM && arg2->disp>MAX_U32) override=TRUE; else override=FALSE; - if (a1->type.raw_typetype.raw_type) - it=a1->type.raw_type; + if (arg1->type.raw_typetype.raw_type) + it=arg1->type.raw_type; else - it=a2->type.raw_type; + it=arg2->type.raw_type; - i=a2->disp; - if (a2->type&MDF_IMM && i<=MAX_U32) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,a1->type,a1->reg,a1->disp,ip2); + i=arg2->disp; + if (arg2->type&MDF_IMM && i<=MAX_U32) { + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,arg1->type,arg1->reg,arg1->disp,rip2); if (i<=MAX_U8) ICU16(tmpi,i<<8+0xA8); else if (i<=MAX_U16) @@ -41,73 +41,73 @@ U0 ICAndBranch(CIntermediateCode *tmpi,I64 ip,I64 is,U8 *buf,I64 ip2) t1=MDF_REG+it; d1=0; if (swap && !override) { - if (a1->type&MDF_REG) { - r1=a1->reg; + if (arg1->type&MDF_REG) { + r1=arg1->reg; swap=TRUE; } else { r1=REG_RCX; swap=FALSE; } - if (a2->type&MDF_REG) { - r2=a2->reg; + if (arg2->type&MDF_REG) { + r2=arg2->reg; swap=FALSE; } else r2=REG_RDX; if (swap) { - if (!(a1->type&MDF_REG) || r1!=a1->reg) - ICMov(tmpi,MDF_REG+RT_I64,r1,0,a1->type,a1->reg,a1->disp,ip2); - if (a2->type&MDG_REG_DISP_SIB_RIP) { - t1=a2->type&MDG_MASK+it; - r2=a2->reg; - d1=a2->disp; + if (!(arg1->type&MDF_REG) || r1!=arg1->reg) + ICMov(tmpi,MDF_REG+RT_I64,r1,0,arg1->type,arg1->reg,arg1->disp,rip2); + if (arg2->type&MDG_REG_DISP_SIB_RIP) { + t1=arg2->type&MDG_MASK+it; + r2=arg2->reg; + d1=arg2->disp; } else - ICMov(tmpi,MDF_REG+RT_I64,r2,0,a2->type,a2->reg,a2->disp,ip2); + ICMov(tmpi,MDF_REG+RT_I64,r2,0,arg2->type,arg2->reg,arg2->disp,rip2); i=ICModr1(r1,t1,r2,d1); } else { - if (a1->type&MDG_REG_DISP_SIB_RIP) { - t1=a1->type&MDG_MASK+it; - r1=a1->reg; - d1=a1->disp; + if (arg1->type&MDG_REG_DISP_SIB_RIP) { + t1=arg1->type&MDG_MASK+it; + r1=arg1->reg; + d1=arg1->disp; } else - ICMov(tmpi,MDF_REG+RT_I64,r1,0,a1->type,a1->reg,a1->disp,ip2); - if (!(a2->type&MDF_REG) || r2!=a2->reg) - ICMov(tmpi,MDF_REG+RT_I64,r2,0,a2->type,a2->reg,a2->disp,ip2); + ICMov(tmpi,MDF_REG+RT_I64,r1,0,arg1->type,arg1->reg,arg1->disp,rip2); + if (!(arg2->type&MDF_REG) || r2!=arg2->reg) + ICMov(tmpi,MDF_REG+RT_I64,r2,0,arg2->type,arg2->reg,arg2->disp,rip2); i=ICModr1(r2,t1,r1,d1); } } else { - if (a2->type&MDF_REG) { - r2=a2->reg; + if (arg2->type&MDF_REG) { + r2=arg2->reg; swap=FALSE; } else { r2=REG_RDX; swap=TRUE; } - if (a1->type&MDF_REG) { - r1=a1->reg; + if (arg1->type&MDF_REG) { + r1=arg1->reg; swap=TRUE; } else r1=REG_RCX; if (override) swap=FALSE; if (swap) { - if (a2->type&MDG_REG_DISP_SIB_RIP) { - t1=a2->type&MDG_MASK+it; - r2=a2->reg; - d1=a2->disp; + if (arg2->type&MDG_REG_DISP_SIB_RIP) { + t1=arg2->type&MDG_MASK+it; + r2=arg2->reg; + d1=arg2->disp; } else - ICMov(tmpi,MDF_REG+RT_I64,r2,0,a2->type,a2->reg,a2->disp,ip2); - if (!(a1->type&MDF_REG) || r1!=a1->reg) - ICMov(tmpi,MDF_REG+RT_I64,r1,0,a1->type,a1->reg,a1->disp,ip2); + ICMov(tmpi,MDF_REG+RT_I64,r2,0,arg2->type,arg2->reg,arg2->disp,rip2); + if (!(arg1->type&MDF_REG) || r1!=arg1->reg) + ICMov(tmpi,MDF_REG+RT_I64,r1,0,arg1->type,arg1->reg,arg1->disp,rip2); i=ICModr1(r1,t1,r2,d1); } else { - if (!(a2->type&MDF_REG) || r2!=a2->reg) - ICMov(tmpi,MDF_REG+RT_I64,r2,0,a2->type,a2->reg,a2->disp,ip2); - if (a1->type&MDG_REG_DISP_SIB_RIP) { - t1=a1->type&MDG_MASK+it; - r1=a1->reg; - d1=a1->disp; + if (!(arg2->type&MDF_REG) || r2!=arg2->reg) + ICMov(tmpi,MDF_REG+RT_I64,r2,0,arg2->type,arg2->reg,arg2->disp,rip2); + if (arg1->type&MDG_REG_DISP_SIB_RIP) { + t1=arg1->type&MDG_MASK+it; + r1=arg1->reg; + d1=arg1->disp; } else - ICMov(tmpi,MDF_REG+RT_I64,r1,0,a1->type,a1->reg,a1->disp,ip2); + ICMov(tmpi,MDF_REG+RT_I64,r1,0,arg1->type,arg1->reg,arg1->disp,rip2); i=ICModr1(r2,t1,r1,d1); } } @@ -126,14 +126,14 @@ U0 ICAndBranch(CIntermediateCode *tmpi,I64 ip,I64 is,U8 *buf,I64 ip2) ICRex(tmpi,i.u8[1]); ICU16(tmpi,i.u8[2]<<8+0x85); } - ICModr2(tmpi,i,d1,ip2+4); + ICModr2(tmpi,i,,d1,rip2); } - ip+=tmpi->ic_cnt; + rip+=tmpi->ic_cnt; lb=OptLabelFwd(tmpi->ic_data); short_jmp=ToBool(tmpi->ic_flags&ICF_SHORT_JMP); if (!buf && lb->addr!=INVALID_PTR) { - i=lb->addr-(ip+2); + i=lb->addr-(rip+2); if (lb->flags&CMF_POP_CMP) i+=8; if (MIN_I8<=i<=MAX_I8) @@ -142,13 +142,13 @@ U0 ICAndBranch(CIntermediateCode *tmpi,I64 ip,I64 is,U8 *buf,I64 ip2) if (short_jmp) { tmpi->ic_flags|=ICF_SHORT_JMP; - i=lb->addr-(ip+2); + i=lb->addr-(rip+2); if (lb->flags&CMF_POP_CMP) i+=8; ICU16(tmpi,i<<8+is.u8[2]); } else { tmpi->ic_flags&=~ICF_SHORT_JMP; - i=lb->addr-(ip+6); + i=lb->addr-(rip+6); if (lb->flags&CMF_POP_CMP) i+=8; ICU16(tmpi,is.u16[0]); @@ -156,111 +156,114 @@ U0 ICAndBranch(CIntermediateCode *tmpi,I64 ip,I64 is,U8 *buf,I64 ip2) } } -U0 ICAssign(CIntermediateCode *tmpi,I64 ip) +U0 ICAssign(CIntermediateCode *tmpi,I64 rip) { CIntermediateCode *tmpi1; if (tmpi->ic_flags & ICF_BY_VAL) { - ICMov(tmpi,tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,ip); + ICMov(tmpi,tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,rip); } else { - if (tmpi->a1.type&MDF_REG) { + if (tmpi->arg1.type&MDF_REG) { if (!(tmpi1=OptLag1(tmpi)) || tmpi1->ic_code!=IC_ADD_CONST || - tmpi1->r.type!=MDF_REG+RT_I64 || tmpi1->r.reg!=tmpi->a1.reg || - tmpi1->a1.type!=MDF_REG+RT_I64 || tmpi1->a1.reg!=tmpi->a1.reg || - (tmpi->a2.type&MDF_REG || tmpi->a2.type&MDF_DISP) && - tmpi->a2.reg==tmpi->a1.reg || - tmpi->r.type.mode || tmpi1->ic_flags&~ICG_NO_CVT_MASK) { + tmpi1->res.type!=MDF_REG+RT_I64 || tmpi1->res.reg!=tmpi->arg1.reg || + tmpi1->arg1.type!=MDF_REG+RT_I64 || + tmpi1->arg1.reg!=tmpi->arg1.reg || + (tmpi->arg2.type&MDF_REG || tmpi->arg2.type&MDF_DISP) && + tmpi->arg2.reg==tmpi->arg1.reg || + tmpi->res.type.mode || tmpi1->ic_flags&~ICG_NO_CVT_MASK) { ICMov(tmpi, - MDF_DISP+tmpi->a1_type_pointed_to,tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + MDF_DISP+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); } else { tmpi->ic_flags=(tmpi->ic_flags|tmpi1->ic_flags)& ~ICF_CODE_FINAL|ICF_DONT_RESTORE; - tmpi->a1.disp=tmpi1->ic_data; + tmpi->arg1.disp=tmpi1->ic_data; OptSetNOP1(tmpi1); //This better not be last pass! - ICMov(tmpi,MDF_DISP+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + ICMov(tmpi,MDF_DISP+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); } } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); - ICMov(tmpi,MDF_DISP+tmpi->a1_type_pointed_to,REG_RCX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); + ICMov(tmpi,MDF_DISP+tmpi->arg1_type_pointed_to,REG_RCX,0, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); } } } -U0 ICBrBitOps(CIntermediateCode *tmpi,I64 ip, - I64 op,I64 op_imm,I64 is,U8 *buf,I64 ip2) +U0 ICBrBitOps(CIntermediateCode *tmpi,I64 rip, + I64 op,I64 op_imm,I64 is,U8 *buf,I64 rip2) { I64 i,t,r1,r2,d1,d2,t1,t2; - CICArg *a1=&tmpi->a1,*a2=&tmpi->a2; + CICArg *arg1=&tmpi->arg1,*arg2=&tmpi->arg2; Bool short_jmp; CCodeMisc *lb; if (tmpi->ic_flags & ICF_BY_VAL) { - if (tmpi->ic_flags&ICF_SWAP && !(a2->type&MDF_REG) && - (!(a2->type&MDF_IMM) ||a2->disp>63)|| - !(tmpi->ic_flags&ICF_SWAP) && a2->type&MDF_IMM && - a2->disp<64 || a2->type&MDF_STK) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,a2->type,a2->reg,a2->disp,ip2); + if (tmpi->ic_flags&ICF_SWAP && !(arg2->type&MDF_REG) && + (!(arg2->type&MDF_IMM) ||arg2->disp>63)|| + !(tmpi->ic_flags&ICF_SWAP) && arg2->type&MDF_IMM && + arg2->disp<64 || arg2->type&MDF_STK) { + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,arg2->type,arg2->reg,arg2->disp,rip2); t2=MDF_REG+RT_I64; r2=REG_RCX; d2=0; } else { - t2=a2->type; - if (t2&MDF_IMM && a2->disp<64) + t2=arg2->type; + if (t2&MDF_IMM && arg2->disp<64) r2=0; else - r2=a2->reg; - d2=a2->disp; + r2=arg2->reg; + d2=arg2->disp; } - if (!(tmpi->ic_flags&ICF_SWAP) && !(a1->type&MDF_REG) && - (!(a1->type&MDF_IMM) || a1->disp>63) || - tmpi->ic_flags&ICF_SWAP && a1->type&MDF_IMM && - a1->disp<64 || a1->type&MDF_STK) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,a1->type,a1->reg,a1->disp,ip2); + if (!(tmpi->ic_flags&ICF_SWAP) && !(arg1->type&MDF_REG) && + (!(arg1->type&MDF_IMM) || arg1->disp>63) || + tmpi->ic_flags&ICF_SWAP && arg1->type&MDF_IMM && + arg1->disp<64 || arg1->type&MDF_STK) { + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,arg1->type,arg1->reg,arg1->disp,rip2); t1=MDF_REG+RT_I64; r1=REG_RDX; d1=0; } else { - t1=a1->type; - if (t1&MDF_IMM && a1->disp<64) + t1=arg1->type; + if (t1&MDF_IMM && arg1->disp<64) r1=0; else - r1=a1->reg; - d1=a1->disp; + r1=arg1->reg; + d1=arg1->disp; } } else { t1=MDF_DISP+RT_I64; t2=MDF_DISP+RT_I64; d1=0; d2=0; - if (a2->type&MDF_REG) - r2=a2->reg; - else if (!(tmpi->ic_flags&ICF_SWAP) || !(a2->type&MDF_IMM) || - a2->disp>63) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,a2->type,a2->reg,a2->disp,ip2); + if (arg2->type&MDF_REG) + r2=arg2->reg; + else if (!(tmpi->ic_flags&ICF_SWAP) || !(arg2->type&MDF_IMM) || + arg2->disp>63) { + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,arg2->type,arg2->reg,arg2->disp,rip2); r2=REG_RCX; } else r2=0; - if (a1->type&MDF_REG) - r1=a1->reg; - else if (tmpi->ic_flags&ICF_SWAP || !(a1->type&MDF_IMM) || a1->disp>63) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,a1->type,a1->reg,a1->disp,ip2); + if (arg1->type&MDF_REG) + r1=arg1->reg; + else if (tmpi->ic_flags&ICF_SWAP || + !(arg1->type&MDF_IMM) || arg1->disp>63) { + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,arg1->type,arg1->reg,arg1->disp,rip2); r1=REG_RDX; } else r1=0; @@ -268,8 +271,8 @@ U0 ICBrBitOps(CIntermediateCode *tmpi,I64 ip, if (tmpi->ic_flags&ICF_LOCK && op!=0xA30F) ICU8(tmpi,OC_LOCK_PREFIX); if (tmpi->ic_flags&ICF_SWAP) { - if (a2->type&MDF_IMM && a2->disp<32) { - if (op==0xA30F && a2->disp<8) { + if (arg2->type&MDF_IMM && arg2->disp<32) { + if (op==0xA30F && arg2->disp<8) { t=t1&MDG_MASK+RT_U8; op_imm=0xF6; //TEST } else @@ -277,10 +280,10 @@ U0 ICBrBitOps(CIntermediateCode *tmpi,I64 ip, } else t=t1; i=ICModr1(r2,t,r1,d1); - SwapI64(&a1,&a2); + SwapI64(&arg1,&arg2); } else { - if (a1->type&MDF_IMM && a1->disp<32) { - if (op==0xA30F && a1->disp<8) { + if (arg1->type&MDF_IMM && arg1->disp<32) { + if (op==0xA30F && arg1->disp<8) { t=t2&MDG_MASK+RT_U8; op_imm=0xF6; //TEST } else @@ -292,26 +295,26 @@ U0 ICBrBitOps(CIntermediateCode *tmpi,I64 ip, ICRex(tmpi,i.u8[1]); if (op_imm==0xF6) {//TEST ICU16(tmpi,i.u8[2]<<8+op_imm); - ICModr2(tmpi,i,a2->disp,ip2+5); - ICU8(tmpi,1<disp); + ICModr2(tmpi,i,,arg2->disp,rip2+1); + ICU8(tmpi,1<disp); if (is==0x72820F) is=0x75850F; else is=0x74840F; - } else if (a1->type&MDF_IMM && a1->disp<64) { + } else if (arg1->type&MDF_IMM && arg1->disp<64) { ICU24(tmpi,i.u8[2]<<16+op_imm); - ICModr2(tmpi,i,a2->disp,ip2+5); - ICU8(tmpi,a1->disp); + ICModr2(tmpi,i,,arg2->disp,rip2+1); + ICU8(tmpi,arg1->disp); } else { ICU24(tmpi,i.u8[2]<<16+op); - ICModr2(tmpi,i,a2->disp,ip2+4); + ICModr2(tmpi,i,,arg2->disp,rip2); } - ip+=tmpi->ic_cnt; + rip+=tmpi->ic_cnt; lb=OptLabelFwd(tmpi->ic_data); short_jmp=ToBool(tmpi->ic_flags&ICF_SHORT_JMP); if (!buf && lb->addr!=INVALID_PTR) { - i=lb->addr-(ip+2); + i=lb->addr-(rip+2); if (lb->flags&CMF_POP_CMP) i+=8; if (MIN_I8<=i<=MAX_I8) @@ -320,13 +323,13 @@ U0 ICBrBitOps(CIntermediateCode *tmpi,I64 ip, if (short_jmp) { tmpi->ic_flags|=ICF_SHORT_JMP; - i=lb->addr-(ip+2); + i=lb->addr-(rip+2); if (lb->flags&CMF_POP_CMP) i+=8; ICU16(tmpi,i<<8+is.u8[2]); } else { tmpi->ic_flags&=~ICF_SHORT_JMP; - i=lb->addr-(ip+6); + i=lb->addr-(rip+6); if (lb->flags&CMF_POP_CMP) i+=8; ICU16(tmpi,is.u16[0]); @@ -334,107 +337,107 @@ U0 ICBrBitOps(CIntermediateCode *tmpi,I64 ip, } } -U0 ICQueInit(CIntermediateCode *tmpi,I64 ip2) +U0 ICQueInit(CIntermediateCode *tmpi,I64 rip2) { I64 r1; - if (tmpi->a1.type==MDF_REG+RT_I64) - r1=tmpi->a1.reg; + if (tmpi->arg1.type==MDF_REG+RT_I64) + r1=tmpi->arg1.reg; else { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); r1=REG_RAX; } - ICMov(tmpi,MDF_DISP+RT_I64,r1,0,MDF_REG+RT_I64,r1,0,ip2); - ICMov(tmpi,MDF_DISP+RT_I64,r1,sizeof(U8 *),MDF_REG+RT_I64,r1,0,ip2); + ICMov(tmpi,MDF_DISP+RT_I64,r1,0,MDF_REG+RT_I64,r1,0,rip2); + ICMov(tmpi,MDF_DISP+RT_I64,r1,sizeof(U8 *),MDF_REG+RT_I64,r1,0,rip2); } -U0 ICQueIns(CIntermediateCode *tmpi,I64 ip2) +U0 ICQueIns(CIntermediateCode *tmpi,I64 rip2) { I64 r1,r2; - if (tmpi->a2.type==MDF_REG+RT_I64 && tmpi->a2.reg!=REG_RDX) - r2=tmpi->a2.reg; + if (tmpi->arg2.type==MDF_REG+RT_I64 && tmpi->arg2.reg!=REG_RDX) + r2=tmpi->arg2.reg; else { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip2); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip2); r2=REG_RAX; } - if (tmpi->a1.type==MDF_REG+RT_I64) - r1=tmpi->a1.reg; + if (tmpi->arg1.type==MDF_REG+RT_I64) + r1=tmpi->arg1.reg; else { ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); r1=REG_RDX; } - ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0,MDF_DISP+RT_I64,r1,0,ip2); - ICMov(tmpi,MDF_DISP+RT_I64,r1,0,MDF_REG+RT_I64,r2,0,ip2); - ICMov(tmpi,MDF_DISP+RT_I64,r2,0,MDF_REG+RT_I64,REG_RBX,0,ip2); - ICMov(tmpi,MDF_DISP+RT_I64,r2,sizeof(U8 *),MDF_REG+RT_I64,r1,0,ip2); - ICMov(tmpi,MDF_DISP+RT_I64,REG_RBX,sizeof(U8 *),MDF_REG+RT_I64,r2,0,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0,MDF_DISP+RT_I64,r1,0,rip2); + ICMov(tmpi,MDF_DISP+RT_I64,r1,0,MDF_REG+RT_I64,r2,0,rip2); + ICMov(tmpi,MDF_DISP+RT_I64,r2,0,MDF_REG+RT_I64,REG_RBX,0,rip2); + ICMov(tmpi,MDF_DISP+RT_I64,r2,sizeof(U8 *),MDF_REG+RT_I64,r1,0,rip2); + ICMov(tmpi,MDF_DISP+RT_I64,REG_RBX,sizeof(U8 *),MDF_REG+RT_I64,r2,0,rip2); } -U0 ICQueInsRev(CIntermediateCode *tmpi,I64 ip2) +U0 ICQueInsRev(CIntermediateCode *tmpi,I64 rip2) { I64 r1,r2; - if (tmpi->a2.type==MDF_REG+RT_I64 && tmpi->a2.reg!=REG_RDX) - r2=tmpi->a2.reg; + if (tmpi->arg2.type==MDF_REG+RT_I64 && tmpi->arg2.reg!=REG_RDX) + r2=tmpi->arg2.reg; else { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip2); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip2); r2=REG_RAX; } - if (tmpi->a1.type==MDF_REG+RT_I64) - r1=tmpi->a1.reg; + if (tmpi->arg1.type==MDF_REG+RT_I64) + r1=tmpi->arg1.reg; else { ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); r1=REG_RDX; } - ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0,MDF_DISP+RT_I64,r1,sizeof(U8 *),ip2); - ICMov(tmpi,MDF_DISP+RT_I64,REG_RBX,0,MDF_REG+RT_I64,r2,0,ip2); - ICMov(tmpi,MDF_DISP+RT_I64,r2,0,MDF_REG+RT_I64,r1,0,ip2); - ICMov(tmpi,MDF_DISP+RT_I64,r2,sizeof(U8 *),MDF_REG+RT_I64,REG_RBX,0,ip2); - ICMov(tmpi,MDF_DISP+RT_I64,r1,sizeof(U8 *),MDF_REG+RT_I64,r2,0,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0,MDF_DISP+RT_I64,r1,sizeof(U8 *),rip2); + ICMov(tmpi,MDF_DISP+RT_I64,REG_RBX,0,MDF_REG+RT_I64,r2,0,rip2); + ICMov(tmpi,MDF_DISP+RT_I64,r2,0,MDF_REG+RT_I64,r1,0,rip2); + ICMov(tmpi,MDF_DISP+RT_I64,r2,sizeof(U8 *),MDF_REG+RT_I64,REG_RBX,0,rip2); + ICMov(tmpi,MDF_DISP+RT_I64,r1,sizeof(U8 *),MDF_REG+RT_I64,r2,0,rip2); } -U0 ICQueRem(CIntermediateCode *tmpi,I64 ip2) +U0 ICQueRem(CIntermediateCode *tmpi,I64 rip2) { I64 r1; - if (tmpi->a1.type==MDF_REG+RT_I64) - r1=tmpi->a1.reg; + if (tmpi->arg1.type==MDF_REG+RT_I64) + r1=tmpi->arg1.reg; else { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); r1=REG_RAX; } - ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0,MDF_DISP+RT_I64,r1,0,ip2); - ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,MDF_DISP+RT_I64,r1,sizeof(U8 *),ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0,MDF_DISP+RT_I64,r1,0,rip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,MDF_DISP+RT_I64,r1,sizeof(U8 *),rip2); ICU24(tmpi,0x1A8948); ICU32(tmpi,sizeof(U8 *)<<24+0x538948); } -U0 ICMinMax(CIntermediateCode *tmpi,I64 op,I64 ip2) +U0 ICMinMax(CIntermediateCode *tmpi,I64 op,I64 rip2) { I64 r1,i1=0x48; - if (tmpi->a2.type==MDF_REG+RT_I64 && tmpi->a2.reg!=REG_RAX) { - r1=tmpi->a2.reg; + if (tmpi->arg2.type==MDF_REG+RT_I64 && tmpi->arg2.reg!=REG_RAX) { + r1=tmpi->arg2.reg; if (r1>7) { i1++; r1&=7; } ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); } else { - if (tmpi->a1.reg==REG_RAX && tmpi->a1.type&MDG_REG_DISP_SIB) { + if (tmpi->arg1.reg==REG_RAX && tmpi->arg1.type&MDG_REG_DISP_SIB) { ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip2); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip2); r1=REG_RDX; ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip2); - if (tmpi->a1.type==MDF_REG+RT_I64) { - r1=tmpi->a1.reg; + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip2); + if (tmpi->arg1.type==MDF_REG+RT_I64) { + r1=tmpi->arg1.reg; if (r1>7) { i1++; r1&=7; @@ -442,7 +445,7 @@ U0 ICMinMax(CIntermediateCode *tmpi,I64 op,I64 ip2) } else { r1=REG_RDX; ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); } } } @@ -450,49 +453,49 @@ U0 ICMinMax(CIntermediateCode *tmpi,I64 op,I64 ip2) ICU32(tmpi,0xC0000F00+op<<16+r1<<24+i1); } -U0 ICSqr(CIntermediateCode *tmpi,I64 op,I64 ip2) +U0 ICSqr(CIntermediateCode *tmpi,I64 op,I64 rip2) { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); - ICSlashOp(tmpi,MDF_REG+RT_I64,REG_RAX,0,op,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); + ICSlashOp(tmpi,MDF_REG+RT_I64,REG_RAX,0,op,rip2); } -U0 ICModU64(CIntermediateCode *tmpi,I64 ip2) +U0 ICModU64(CIntermediateCode *tmpi,I64 rip2) { CICType t1; I64 r1,d1; ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip2); - if (tmpi->a1.reg!=REG_RAX && tmpi->a1.reg!=REG_RDX && - tmpi->a1.type&MDG_REG_DISP_SIB && - tmpi->a1.type.raw_type>=RT_I64) { - t1=tmpi->a1.type; - r1=tmpi->a1.reg; - d1=tmpi->a1.disp; + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip2); + if (tmpi->arg1.reg!=REG_RAX && tmpi->arg1.reg!=REG_RDX && + tmpi->arg1.type&MDG_REG_DISP_SIB && + tmpi->arg1.type.raw_type>=RT_I64) { + t1=tmpi->arg1.type; + r1=tmpi->arg1.reg; + d1=tmpi->arg1.disp; } else { t1=MDF_REG+RT_I64; r1=REG_RBX; d1=0; ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); } - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,MDF_DISP+RT_I64,REG_RCX,0,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,MDF_DISP+RT_I64,REG_RCX,0,rip2); ICZero(tmpi,REG_RDX); - ICSlashOp(tmpi,t1,r1,d1,SLASH_OP_DIV,ip2); - ICMov(tmpi,MDF_DISP+RT_I64,REG_RCX,0,MDF_REG+RT_I64,REG_RAX,0,ip2); + ICSlashOp(tmpi,t1,r1,d1,SLASH_OP_DIV,rip2); + ICMov(tmpi,MDF_DISP+RT_I64,REG_RCX,0,MDF_REG+RT_I64,REG_RAX,0,rip2); ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - MDF_REG+RT_I64,REG_RDX,0,ip2); + MDF_REG+RT_I64,REG_RDX,0,rip2); } -U0 ICSwap(CIntermediateCode *tmpi,I64 ip2) +U0 ICSwap(CIntermediateCode *tmpi,I64 rip2) { I64 r1,r2; - if (tmpi->a1.type&MDF_REG) - r1=tmpi->a1.reg; + if (tmpi->arg1.type&MDF_REG) + r1=tmpi->arg1.reg; else r1=REG_RAX; - if (tmpi->a2.type&MDF_REG) - r2=tmpi->a2.reg; + if (tmpi->arg2.type&MDF_REG) + r2=tmpi->arg2.reg; else r2=REG_RAX; if (r1==r2) { @@ -502,119 +505,119 @@ U0 ICSwap(CIntermediateCode *tmpi,I64 ip2) r2=REG_RAX; } ICMov(tmpi,MDF_REG+RT_I64,r2,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip2); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip2); ICMov(tmpi,MDF_REG+RT_I64,r1,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); switch (tmpi->ic_code) { case IC_SWAP_U8: - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,MDF_DISP+RT_U8,r1,0,ip2); - ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,MDF_DISP+RT_U8,r2,0,ip2); - ICMov(tmpi,MDF_DISP+RT_U8,r2,0,MDF_REG+RT_I64,REG_RCX,0,ip2); - ICMov(tmpi,MDF_DISP+RT_U8,r1,0,MDF_REG+RT_I64,REG_RDX,0,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,MDF_DISP+RT_U8,r1,0,rip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,MDF_DISP+RT_U8,r2,0,rip2); + ICMov(tmpi,MDF_DISP+RT_U8,r2,0,MDF_REG+RT_I64,REG_RCX,0,rip2); + ICMov(tmpi,MDF_DISP+RT_U8,r1,0,MDF_REG+RT_I64,REG_RDX,0,rip2); break; case IC_SWAP_U16: - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,MDF_DISP+RT_U16,r1,0,ip2); - ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,MDF_DISP+RT_U16,r2,0,ip2); - ICMov(tmpi,MDF_DISP+RT_U16,r2,0,MDF_REG+RT_I64,REG_RCX,0,ip2); - ICMov(tmpi,MDF_DISP+RT_U16,r1,0,MDF_REG+RT_I64,REG_RDX,0,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,MDF_DISP+RT_U16,r1,0,rip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,MDF_DISP+RT_U16,r2,0,rip2); + ICMov(tmpi,MDF_DISP+RT_U16,r2,0,MDF_REG+RT_I64,REG_RCX,0,rip2); + ICMov(tmpi,MDF_DISP+RT_U16,r1,0,MDF_REG+RT_I64,REG_RDX,0,rip2); break; case IC_SWAP_U32: - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,MDF_DISP+RT_U32,r1,0,ip2); - ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,MDF_DISP+RT_U32,r2,0,ip2); - ICMov(tmpi,MDF_DISP+RT_U32,r2,0,MDF_REG+RT_I64,REG_RCX,0,ip2); - ICMov(tmpi,MDF_DISP+RT_U32,r1,0,MDF_REG+RT_I64,REG_RDX,0,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,MDF_DISP+RT_U32,r1,0,rip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,MDF_DISP+RT_U32,r2,0,rip2); + ICMov(tmpi,MDF_DISP+RT_U32,r2,0,MDF_REG+RT_I64,REG_RCX,0,rip2); + ICMov(tmpi,MDF_DISP+RT_U32,r1,0,MDF_REG+RT_I64,REG_RDX,0,rip2); break; case IC_SWAP_I64: - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,MDF_DISP+RT_U64,r1,0,ip2); - ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,MDF_DISP+RT_U64,r2,0,ip2); - ICMov(tmpi,MDF_DISP+RT_U64,r2,0,MDF_REG+RT_I64,REG_RCX,0,ip2); - ICMov(tmpi,MDF_DISP+RT_U64,r1,0,MDF_REG+RT_I64,REG_RDX,0,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,MDF_DISP+RT_U64,r1,0,rip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,MDF_DISP+RT_U64,r2,0,rip2); + ICMov(tmpi,MDF_DISP+RT_U64,r2,0,MDF_REG+RT_I64,REG_RCX,0,rip2); + ICMov(tmpi,MDF_DISP+RT_U64,r1,0,MDF_REG+RT_I64,REG_RDX,0,rip2); break; } } -U0 ICAndEqu(CIntermediateCode *tmpi,I64 ip2) +U0 ICAndEqu(CIntermediateCode *tmpi,I64 rip2) { I64 i,bit; - if (tmpi->a2.type&MDF_IMM && !(tmpi->a1.type&MDF_STK) && + if (tmpi->arg2.type&MDF_IMM && !(tmpi->arg1.type&MDF_STK) && tmpi->ic_flags&ICF_RES_NOT_USED) { - i=~tmpi->a2.disp; + i=~tmpi->arg2.disp; bit=Bsf(i); if (0<=bit==Bsr(i)) { - tmpi->a2.disp=bit; - tmpi->a2.reg=0; - tmpi->a1.type=tmpi->a1.type&MDG_MASK+RT_I64; - ICBitOps(tmpi,&tmpi->a2,&tmpi->a1,tmpi,0xB30F,0x30BA0F,ip2); + tmpi->arg2.disp=bit; + tmpi->arg2.reg=0; + tmpi->arg1.type=tmpi->arg1.type&MDG_MASK+RT_I64; + ICBitOps(tmpi,&tmpi->arg2,&tmpi->arg1,tmpi,0xB30F,0x30BA0F,rip2); return; } } - ICAddSubEctEqu(tmpi,tmpi->a1_type_pointed_to, - tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,0x210425240423,ip2); + ICAddSubEctEqu(tmpi,tmpi->arg1_type_pointed_to, + tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,0x210425240423,rip2); } -U0 ICOrEqu(CIntermediateCode *tmpi,I64 ip2) +U0 ICOrEqu(CIntermediateCode *tmpi,I64 rip2) { I64 i,bit; - if (tmpi->a2.type&MDF_IMM && !(tmpi->a1.type&MDF_STK) && + if (tmpi->arg2.type&MDF_IMM && !(tmpi->arg1.type&MDF_STK) && tmpi->ic_flags&ICF_RES_NOT_USED) { - i=tmpi->a2.disp; + i=tmpi->arg2.disp; bit=Bsf(i); if (0<=bit==Bsr(i) && i>MAX_I8) { - tmpi->a2.disp=bit; - tmpi->a2.reg=0; - tmpi->a1.type=tmpi->a1.type&MDG_MASK+RT_I64; - ICBitOps(tmpi,&tmpi->a2,&tmpi->a1,tmpi,0xAB0F,0x28BA0F,ip2); + tmpi->arg2.disp=bit; + tmpi->arg2.reg=0; + tmpi->arg1.type=tmpi->arg1.type&MDG_MASK+RT_I64; + ICBitOps(tmpi,&tmpi->arg2,&tmpi->arg1,tmpi,0xAB0F,0x28BA0F,rip2); return; } } - ICAddSubEctEqu(tmpi,tmpi->a1_type_pointed_to, - tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,0x09010D0C010B,ip2); + ICAddSubEctEqu(tmpi,tmpi->arg1_type_pointed_to, + tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,0x09010D0C010B,rip2); } -U0 ICXorEqu(CIntermediateCode *tmpi,I64 ip2) +U0 ICXorEqu(CIntermediateCode *tmpi,I64 rip2) { I64 i,bit; - if (tmpi->a2.type&MDF_IMM && !(tmpi->a1.type&MDF_STK) && + if (tmpi->arg2.type&MDF_IMM && !(tmpi->arg1.type&MDF_STK) && tmpi->ic_flags&ICF_RES_NOT_USED) { - i=tmpi->a2.disp; + i=tmpi->arg2.disp; bit=Bsf(i); if (0<=bit==Bsr(i)) { - tmpi->a2.disp=bit; - tmpi->a2.reg=0; - tmpi->a1.type=tmpi->a1.type&MDG_MASK+RT_I64; - ICBitOps(tmpi,&tmpi->a2,&tmpi->a1,tmpi,0xBB0F,0x38BA0F,ip2); + tmpi->arg2.disp=bit; + tmpi->arg2.reg=0; + tmpi->arg1.type=tmpi->arg1.type&MDG_MASK+RT_I64; + ICBitOps(tmpi,&tmpi->arg2,&tmpi->arg1,tmpi,0xBB0F,0x38BA0F,rip2); return; } } - ICAddSubEctEqu(tmpi,tmpi->a1_type_pointed_to, - tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,0x310635340633,ip2); + ICAddSubEctEqu(tmpi,tmpi->arg1_type_pointed_to, + tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,0x310635340633,rip2); } -U0 ICSwitch(CIntermediateCode *tmpi,I64 ip, - Bool nobound,CCmpCtrl *cc,U8 *buf,I64 ip2) +U0 ICSwitch(CIntermediateCode *tmpi,I64 rip, + Bool nobound,CCmpCtrl *cc,U8 *buf,I64 rip2) { I64 i,j,cnt,min,max,begin,r; CCodeMisc *lb; Bool short_jmp; CAOTAbsAddr *tmpa; - if (!(tmpi->a1.type&MDF_REG) || tmpi->a1.reg&7==REG_RSP) + if (!(tmpi->arg1.type&MDF_REG) || tmpi->arg1.reg&7==REG_RSP) r=REG_RDX; else - r=tmpi->a1.reg; + r=tmpi->arg1.reg; if (nobound) ICMov(tmpi,MDF_REG+RT_I64,r,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); else { - if (tmpi->a2.type&MDF_IMM) { - j=tmpi->a2.disp; + if (tmpi->arg2.type&MDF_IMM) { + j=tmpi->arg2.disp; ICMov(tmpi,MDF_REG+RT_I64,r,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); if (MIN_I8<=j<=MAX_I8) { i=0xF88348+(r&7)<<16; if (r>7) i++; @@ -627,36 +630,36 @@ U0 ICSwitch(CIntermediateCode *tmpi,I64 ip, ICU32(tmpi,j); } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip2); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip2); i=0xC13B48+(r&7)<<19; if (r>7) i+=4; ICU24(tmpi,i); } } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip2); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip2); ICMov(tmpi,MDF_REG+RT_I64,r,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); i=0xC13B48+(r&7)<<19; if (r>7) i+=4; ICU24(tmpi,i); } - ip+=tmpi->ic_cnt; + rip+=tmpi->ic_cnt; lb=tmpi->ic_data(CCodeMisc *)->dft; short_jmp=ToBool(tmpi->ic_flags&ICF_SHORT_JMP); if (!buf && lb->addr!=INVALID_PTR) { - i=lb->addr-(ip+2); + i=lb->addr-(rip+2); if (MIN_I8<=i<=MAX_I8) short_jmp=TRUE; } if (short_jmp) { tmpi->ic_flags|=ICF_SHORT_JMP; - ICU16(tmpi,(lb->addr-(ip+2))<<8+0x73); + ICU16(tmpi,(lb->addr-(rip+2))<<8+0x73); } else { tmpi->ic_flags&=~ICF_SHORT_JMP; ICU16(tmpi,0x830F); - ICU32(tmpi,lb->addr-(ip+6)); + ICU32(tmpi,lb->addr-(rip+6)); } } @@ -730,8 +733,8 @@ U0 ICSwitch(CIntermediateCode *tmpi,I64 ip, tmpa->next=cc->aotc->abss; tmpa->type=AAT_ADD_U32; cc->aotc->abss=tmpa; - tmpa->ip=ip2+tmpi->ic_cnt; - ICU32(tmpi,lb->addr+cc->aotc->ip); + tmpa->rip=rip2+tmpi->ic_cnt; + ICU32(tmpi,lb->addr+cc->aotc->rip); } else ICU32(tmpi,lb->addr+buf); @@ -743,8 +746,8 @@ U0 ICSwitch(CIntermediateCode *tmpi,I64 ip, tmpa->next=cc->aotc->abss; tmpa->type=AAT_ADD_U32; cc->aotc->abss=tmpa; - tmpa->ip=ip2+tmpi->ic_cnt; - ICU32(tmpi,begin+cc->aotc->ip); + tmpa->rip=rip2+tmpi->ic_cnt; + ICU32(tmpi,begin+cc->aotc->rip); } else ICU32(tmpi,begin+buf); } else @@ -763,6 +766,6 @@ U0 ICLocalVarInit(CIntermediateCode *tmpi) ICU24(tmpi,0xC1C748); ICU32(tmpi,tmpi->ic_data); ICU16(tmpi,sys_var_init_val<<8+0xB0); - ICU16(tmpi,0xAAF3); + ICU24(tmpi,0xAA48F3); ICU16(tmpi,0x5F48); } diff --git a/Compiler/BackFA.HC b/Compiler/BackFA.HC index f1c60f9..26706d0 100644 --- a/Compiler/BackFA.HC +++ b/Compiler/BackFA.HC @@ -1,7 +1,7 @@ #define CN_A2 0 #define CN_A1 1 -#define CN_MAIN 2 -#define CN_R 3 +#define CN_INST 2 +#define CN_RES 3 U0 CmpNoteFloatOp(CCmpCtrl *cc,CIntermediateCode *tmpi, Bool dont_pushable,Bool dont_popable,I64 pos) @@ -18,11 +18,11 @@ U0 CmpNoteFloatOp(CCmpCtrl *cc,CIntermediateCode *tmpi, if (cc->last_float_op_ic!=tmpi && cc->dont_push_float) link=TRUE; break; - case CN_MAIN: + case CN_INST: if (cc->last_float_op_ic!=tmpi) { if (cc->dont_push_float) { if (intermediate_code_table[tmpi->ic_code].arg_cnt==IS_2_ARG && - cc->last_float_op_ic->r.reg!=REG_R8) + cc->last_float_op_ic->res.reg!=REG_R8) tmpi->ic_flags|=ICF_ALT_TEMPLATE; else tmpi->ic_flags&=~ICF_ALT_TEMPLATE; @@ -37,8 +37,8 @@ U0 CmpNoteFloatOp(CCmpCtrl *cc,CIntermediateCode *tmpi, link=TRUE; } break; - case CN_R: - if (cc->last_float_op_ic==tmpi && cc->last_float_op_pos==CN_MAIN) + case CN_RES: + if (cc->last_float_op_ic==tmpi && cc->last_float_op_pos==CN_INST) link=TRUE; break; } @@ -121,7 +121,7 @@ U0 ICCopyTemplate(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op, } U0 ICFCvt(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 r1, - CICType t2,I64 r2,I64 d2,Bool to_int,I64 pos,I64 ip) + CICType t2,I64 r2,I64 d2,Bool to_int,I64 pos,I64 rip) { I64 rsp_size=0,op1,op2; Bool dont_push_float,dont_pop_float; @@ -137,7 +137,7 @@ U0 ICFCvt(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 r1, CmpSetFloatOpPushPop(cc,tmpi,&dont_push_float,&dont_pop_float); if (!dont_push_float) { if (!(t2.raw_type>=RT_I64 && t2&MDG_DISP_SIB_RIP)) { - ICPush(tmpi,t2,r2,d2,ip); + ICPush(tmpi,t2,r2,d2,rip); t2=MDF_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; rsp_size=8; } else { @@ -146,7 +146,7 @@ U0 ICFCvt(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 r1, ICAddRSP(tmpi,-8); } } - ICSlashOp(tmpi,t2,r2,d2,op1,ip); + ICSlashOp(tmpi,t2,r2,d2,op1,rip); } else { if (!dont_pop_float) { rsp_size=8; @@ -161,13 +161,13 @@ U0 ICFCvt(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 r1, if (rsp_size) ICAddRSP(tmpi,rsp_size); } else { - ICSlashOp(tmpi,MDF_SIB+RT_I64,REG_RSP+REG_RSP<<8,0,op2,ip); - ICPop(tmpi,MDF_REG+RT_I64,r1,0,ip); + ICSlashOp(tmpi,MDF_SIB+RT_I64,REG_RSP+REG_RSP<<8,0,op2,rip); + ICPop(tmpi,MDF_REG+RT_I64,r1,0,rip); } } U0 ICFCvt2(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 r1, - CICType t2,I64 r2,I64 d2,Bool to_int,I64 ip) + CICType t2,I64 r2,I64 d2,Bool to_int,I64 rip) { I64 rsp_size=0,op1,op2; if (to_int) { @@ -178,43 +178,43 @@ U0 ICFCvt2(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 r1, op2=SLASH_OP_FSTP; } if (!(t2.raw_type>=RT_I64 && t2&MDG_DISP_SIB_RIP)) { - ICPush(tmpi,t2,r2,d2,ip); + ICPush(tmpi,t2,r2,d2,rip); t2=MDF_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; rsp_size=8; } else { rsp_size=8; ICAddRSP(tmpi,-8); } - ICSlashOp(tmpi,t2,r2,d2,op1,ip); - ICSlashOp(tmpi,MDF_SIB+RT_I64,REG_RSP+REG_RSP<<8,0,op2,ip); - ICPop(tmpi,MDF_REG+RT_I64,r1,0,ip); + ICSlashOp(tmpi,t2,r2,d2,op1,rip); + ICSlashOp(tmpi,MDF_SIB+RT_I64,REG_RSP+REG_RSP<<8,0,op2,rip); + ICPop(tmpi,MDF_REG+RT_I64,r1,0,rip); cc->last_dont_pushable=cc->last_dont_popable=FALSE; //TODO: improve this } -U0 ICFUnaryMinus(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf2,I64 ip) +U0 ICFUnaryMinus(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf2,I64 rip) { - CICArg *a1=&tmpi->a1; + CICArg *arg1=&tmpi->arg1; I64 rsp_size=0,builtin1=0,t1,r1,d1; Bool dont_push_float,dont_pop_float; if (cc->flags&CCF_AOT_COMPILE) - buf2=cc->aotc->ip; + buf2=cc->aotc->rip; CmpSetFloatOpPushPop(cc,tmpi,&dont_push_float,&dont_pop_float); if (!dont_push_float) { - if (a1->type.raw_type>=RT_I64 && a1->type&MDG_DISP_SIB_RIP) { - t1=a1->type; - r1=a1->reg; - d1=a1->disp; + if (arg1->type.raw_type>=RT_I64 && arg1->type&MDG_DISP_SIB_RIP) { + t1=arg1->type; + r1=arg1->reg; + d1=arg1->disp; } else { - if (a1->type&MDF_IMM) { - if (!(builtin1=ICBuiltInFloatConst(a1->disp(F64)))) { + if (arg1->type&MDF_IMM) { + if (!(builtin1=ICBuiltInFloatConst(arg1->disp(F64)))) { t1=MDF_RIP_DISP32+RT_I64; r1=REG_RIP; - d1=COCFloatConstFind(cc,a1->disp(F64))+buf2; + d1=COCFloatConstFind(cc,arg1->disp(F64))+buf2; } } else { - ICPush(tmpi,a1->type,a1->reg,a1->disp,ip); + ICPush(tmpi,arg1->type,arg1->reg,arg1->disp,rip); t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=0; rsp_size+=8; } @@ -222,48 +222,48 @@ U0 ICFUnaryMinus(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf2,I64 ip) if (builtin1) ICU16(tmpi,builtin1); else - ICSlashOp(tmpi,t1,r1,d1,SLASH_OP_FLD,ip); + ICSlashOp(tmpi,t1,r1,d1,SLASH_OP_FLD,rip); } if (!dont_pop_float && !rsp_size) { rsp_size=8; ICAddRSP(tmpi,-8); } ICU16(tmpi,0xE0D9); //FCHS - CmpNoteFloatOp(cc,tmpi,TRUE,TRUE,CN_MAIN); + CmpNoteFloatOp(cc,tmpi,TRUE,TRUE,CN_INST); if (dont_pop_float) { if (rsp_size) ICAddRSP(tmpi,rsp_size); } else { - ICSlashOp(tmpi,MDF_SIB+RT_I64,REG_RSP+REG_RSP<<8,0,SLASH_OP_FSTP,ip); - ICPop(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp,ip); + ICSlashOp(tmpi,MDF_SIB+RT_I64,REG_RSP+REG_RSP<<8,0,SLASH_OP_FSTP,rip); + ICPop(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp,rip); } } -U0 ICFMod(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip) +U0 ICFMod(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 rip) {//for MOD Bool dont_push_float,dont_pop_float; CmpSetFloatOpPushPop(cc,tmpi,&dont_push_float,&dont_pop_float); if (dont_push_float) { if (tmpi->ic_flags&ICF_ALT_TEMPLATE) ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); else ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); } //TODO: unpushable,unpop? Not sure - ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_MOD,FALSE,FALSE,FALSE,CN_MAIN); + ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_MOD,FALSE,FALSE,FALSE,CN_INST); if (!dont_pop_float) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } -U0 ICFPow(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf,I64 ip) +U0 ICFPow(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf,I64 rip) {//for POW I64 i; CAOTImportExport *tmpie; @@ -271,9 +271,9 @@ U0 ICFPow(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf,I64 ip) cc->htc.hash_table_lst,HTT_EXPORT_SYS_SYM); ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); if (cc->flags&CCF_AOT_COMPILE) { if (!tmpex) { tmpex=CAlloc(sizeof(CHashExport)); @@ -288,18 +288,18 @@ U0 ICFPow(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf,I64 ip) if (buf) { tmpie=CAlloc(sizeof(CAOTImportExport)); tmpie->type=IET_IMM_I64; - tmpie->ip=ip+tmpi->ic_cnt-8; + tmpie->rip=rip+tmpi->ic_cnt-8; tmpie->next=tmpex->ie_lst; tmpex->ie_lst=tmpie; } ICU16(tmpi,0xD3FF); } else { ICU8(tmpi,0xE8); - ICU32(tmpi,-(ip+tmpi->ic_cnt+4)); + ICU32(tmpi,-(rip+tmpi->ic_cnt+4)); if (buf) { tmpie=CAlloc(sizeof(CAOTImportExport)); tmpie->type=IET_REL_I32; - tmpie->ip=ip+tmpi->ic_cnt-4; + tmpie->rip=rip+tmpi->ic_cnt-4; tmpie->next=tmpex->ie_lst; tmpex->ie_lst=tmpie; } @@ -308,7 +308,7 @@ U0 ICFPow(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf,I64 ip) if (tmpex->type&HTF_UNRESOLVED) throw('Compiler'); else { - i=tmpex->val-(ip+tmpi->ic_cnt+5); + i=tmpex->val-(rip+tmpi->ic_cnt+5); if (!(MIN_I32<=i<=MAX_I32)) { throw('Compiler'); // ICU16(tmpi,0xBB48); @@ -321,7 +321,7 @@ U0 ICFPow(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf,I64 ip) } } } else { - i=tmpex->val-(ip+tmpi->ic_cnt+5); + i=tmpex->val-(rip+tmpi->ic_cnt+5); if (!(MIN_I32<=i<=MAX_I32)) { ICU16(tmpi,0xBB48); ICU64(tmpi,tmpex->val); @@ -332,81 +332,81 @@ U0 ICFPow(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf,I64 ip) } } tmpi->ic_flags&=~ICF_CODE_FINAL; - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } -U0 ICFOp(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,U8 *buf2,I64 ip) +U0 ICFOp(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,U8 *buf2,I64 rip) {//for ADD,SUB,DIV,MUL - CICArg *a1,*a2; + CICArg *arg1,*arg2; Bool dont_push_float,dont_pop_float,alt; I64 rsp_size=0,builtin1=0,builtin2=0,t1,r1,d1,t2,r2,d2; if (tmpi->ic_flags&ICF_ALT_TEMPLATE) { - a1=&tmpi->a2; - a2=&tmpi->a1; + arg1=&tmpi->arg2; + arg2=&tmpi->arg1; alt=TRUE; } else { - a1=&tmpi->a1; - a2=&tmpi->a2; + arg1=&tmpi->arg1; + arg2=&tmpi->arg2; alt=FALSE; } if (cc->flags&CCF_AOT_COMPILE) - buf2=cc->aotc->ip; + buf2=cc->aotc->rip; CmpSetFloatOpPushPop(cc,tmpi,&dont_push_float,&dont_pop_float); if (dont_push_float) { - if (a2->type.raw_type>=RT_I64 && a2->type&MDG_DISP_SIB_RIP) { - t2=a2->type; - r2=a2->reg; - d2=a2->disp; + if (arg2->type.raw_type>=RT_I64 && arg2->type&MDG_DISP_SIB_RIP) { + t2=arg2->type; + r2=arg2->reg; + d2=arg2->disp; } else { - if (a2->type&MDF_IMM) { - if (!(builtin2=ICBuiltInFloatConst(a2->disp(F64)))) { + if (arg2->type&MDF_IMM) { + if (!(builtin2=ICBuiltInFloatConst(arg2->disp(F64)))) { t2=MDF_RIP_DISP32+RT_I64; r2=REG_RIP; - d2=COCFloatConstFind(cc,a2->disp(F64))+buf2; + d2=COCFloatConstFind(cc,arg2->disp(F64))+buf2; } } else { - ICPush(tmpi,a2->type,a2->reg,a2->disp,ip); + ICPush(tmpi,arg2->type,arg2->reg,arg2->disp,rip); t2=MDF_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; rsp_size+=8; } } } else { if (alt) { - if (!(a2->type&MDF_STK)) { - if (a1->type.raw_type>=RT_I64 && a1->type&MDG_DISP_SIB_RIP) { - t1=a1->type; - r1=a1->reg; - d1=a1->disp; + if (!(arg2->type&MDF_STK)) { + if (arg1->type.raw_type>=RT_I64 && arg1->type&MDG_DISP_SIB_RIP) { + t1=arg1->type; + r1=arg1->reg; + d1=arg1->disp; } else { - if (a1->type&MDF_IMM) { - if (!(builtin1=ICBuiltInFloatConst(a1->disp(F64)))) { + if (arg1->type&MDF_IMM) { + if (!(builtin1=ICBuiltInFloatConst(arg1->disp(F64)))) { t1=MDF_RIP_DISP32+RT_I64; r1=REG_RIP; - d1=COCFloatConstFind(cc,a1->disp(F64))+buf2; + d1=COCFloatConstFind(cc,arg1->disp(F64))+buf2; } } else { - ICPush(tmpi,a1->type,a1->reg,a1->disp,ip); + ICPush(tmpi,arg1->type,arg1->reg,arg1->disp,rip); t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=0; rsp_size+=8; } } - if (a2->type.raw_type>=RT_I64 && a2->type&MDG_DISP_SIB_RIP) { - t2=a2->type; - r2=a2->reg; - d2=a2->disp; + if (arg2->type.raw_type>=RT_I64 && arg2->type&MDG_DISP_SIB_RIP) { + t2=arg2->type; + r2=arg2->reg; + d2=arg2->disp; } else { - if (a2->type&MDF_IMM) { - if (!(builtin2=ICBuiltInFloatConst(a2->disp(F64)))) { + if (arg2->type&MDF_IMM) { + if (!(builtin2=ICBuiltInFloatConst(arg2->disp(F64)))) { t2=MDF_RIP_DISP32+RT_I64; r2=REG_RIP; - d2=COCFloatConstFind(cc,a2->disp(F64))+buf2; + d2=COCFloatConstFind(cc,arg2->disp(F64))+buf2; } } else { - ICPush(tmpi,a2->type,a2->reg,a2->disp,ip); + ICPush(tmpi,arg2->type,arg2->reg,arg2->disp,rip); t2=MDF_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; rsp_size+=8; if (r1==REG_RSP+REG_RSP<<8) @@ -414,45 +414,47 @@ U0 ICFOp(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,U8 *buf2,I64 ip) } } } else { - ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,a1->type,a1->reg,a1->disp,ip); - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,a2->type,a2->reg,a2->disp,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,arg1->type, + arg1->reg,arg1->disp,rip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,arg2->type, + arg2->reg,arg2->disp,rip); ICU16(tmpi,0x5052); //PUSH EDX PUSH EAX rsp_size=16; t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=8; t2=MDF_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; } } else { - if (!(a1->type&MDF_STK)) { - if (a2->type.raw_type>=RT_I64 && a2->type&MDG_DISP_SIB_RIP) { - t2=a2->type; - r2=a2->reg; - d2=a2->disp; + if (!(arg1->type&MDF_STK)) { + if (arg2->type.raw_type>=RT_I64 && arg2->type&MDG_DISP_SIB_RIP) { + t2=arg2->type; + r2=arg2->reg; + d2=arg2->disp; } else { - if (a2->type&MDF_IMM) { - if (!(builtin2=ICBuiltInFloatConst(a2->disp(F64)))) { + if (arg2->type&MDF_IMM) { + if (!(builtin2=ICBuiltInFloatConst(arg2->disp(F64)))) { t2=MDF_RIP_DISP32+RT_I64; r2=REG_RIP; - d2=COCFloatConstFind(cc,a2->disp(F64))+buf2; + d2=COCFloatConstFind(cc,arg2->disp(F64))+buf2; } } else { - ICPush(tmpi,a2->type,a2->reg,a2->disp,ip); + ICPush(tmpi,arg2->type,arg2->reg,arg2->disp,rip); t2=MDF_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; rsp_size+=8; } } - if (a1->type.raw_type>=RT_I64 && a1->type&MDG_DISP_SIB_RIP) { - t1=a1->type; - r1=a1->reg; - d1=a1->disp; + if (arg1->type.raw_type>=RT_I64 && arg1->type&MDG_DISP_SIB_RIP) { + t1=arg1->type; + r1=arg1->reg; + d1=arg1->disp; } else { - if (a1->type&MDF_IMM) { - if (!(builtin1=ICBuiltInFloatConst(a1->disp(F64)))) { + if (arg1->type&MDF_IMM) { + if (!(builtin1=ICBuiltInFloatConst(arg1->disp(F64)))) { t1=MDF_RIP_DISP32+RT_I64; r1=REG_RIP; - d1=COCFloatConstFind(cc,a1->disp(F64))+buf2; + d1=COCFloatConstFind(cc,arg1->disp(F64))+buf2; } } else { - ICPush(tmpi,a1->type,a1->reg,a1->disp,ip); + ICPush(tmpi,arg1->type,arg1->reg,arg1->disp,rip); t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=0; rsp_size+=8; if (r2==REG_RSP+REG_RSP<<8) @@ -460,8 +462,10 @@ U0 ICFOp(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,U8 *buf2,I64 ip) } } } else { - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,a2->type,a2->reg,a2->disp,ip); - ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,a1->type,a1->reg,a1->disp,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,arg2->type, + arg2->reg,arg2->disp,rip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,arg1->type, + arg1->reg,arg1->disp,rip); ICU16(tmpi,0x5052); //PUSH EDX PUSH EAX rsp_size=16; t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=8; @@ -484,7 +488,7 @@ U0 ICFOp(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,U8 *buf2,I64 ip) if (builtin1) ICU16(tmpi,builtin1); else - ICSlashOp(tmpi,t1,r1,d1,SLASH_OP_FLD,ip); + ICSlashOp(tmpi,t1,r1,d1,SLASH_OP_FLD,rip); } if (alt) switch (op.u8[0]) { @@ -495,24 +499,24 @@ U0 ICFOp(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,U8 *buf2,I64 ip) ICU16(tmpi,builtin2); ICU16(tmpi,op.u16[2]); } else - ICSlashOp(tmpi,t2,r2,d2,op,ip); - CmpNoteFloatOp(cc,tmpi,TRUE,TRUE,CN_MAIN); + ICSlashOp(tmpi,t2,r2,d2,op,rip); + CmpNoteFloatOp(cc,tmpi,TRUE,TRUE,CN_INST); if (dont_pop_float) { if (rsp_size) ICAddRSP(tmpi,rsp_size); } else { if (rsp_size==8) - ICSlashOp(tmpi,MDF_SIB+RT_I64,REG_RSP+REG_RSP<<8,0,SLASH_OP_FSTP,ip); + ICSlashOp(tmpi,MDF_SIB+RT_I64,REG_RSP+REG_RSP<<8,0,SLASH_OP_FSTP,rip); else if (rsp_size>8) { ICSlashOp(tmpi,MDF_SIB+RT_I64,REG_RSP+REG_RSP<<8,rsp_size-8, - SLASH_OP_FSTP,ip); + SLASH_OP_FSTP,rip); ICAddRSP(tmpi,rsp_size-8); } - ICPop(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp,ip); + ICPop(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp,rip); } } -U0 ICFCmp(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,I64 ip) +U0 ICFCmp(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,I64 rip) { Bool dont_push_float,dont_pop_float; CmpSetFloatOpPushPop(cc,tmpi,&dont_push_float,&dont_pop_float); @@ -522,82 +526,82 @@ U0 ICFCmp(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,I64 ip) ICPopRegs(tmpi,1<a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); } else ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); if (tmpi->ic_flags&ICF_POP_CMP) ICPopRegs(tmpi,1<a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); } if (tmpi->ic_flags&ICF_PUSH_CMP) ICPushRegs(tmpi,1<r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICCopyTemplate(cc,tmpi,op,FALSE,TRUE,FALSE,CN_INST); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } -U0 ICFModEqu(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip) +U0 ICFModEqu(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 rip) { Bool dont_push_float,dont_pop_float; CmpSetFloatOpPushPop(cc,tmpi,&dont_push_float,&dont_pop_float); if (tmpi->ic_flags & ICF_BY_VAL) { if (dont_push_float) { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,ip); - if (tmpi->a1_type_pointed_to!=RT_F64) - ICFCvt2(cc,tmpi,REG_RAX,MDF_REG+RT_I64,REG_RAX,0,FALSE,ip); + tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,rip); + if (tmpi->arg1_type_pointed_to!=RT_F64) + ICFCvt2(cc,tmpi,REG_RAX,MDF_REG+RT_I64,REG_RAX,0,FALSE,rip); } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,ip); - if (tmpi->a1_type_pointed_to!=RT_F64) - ICFCvt2(cc,tmpi,REG_RDX,MDF_REG+RT_I64,REG_RDX,0,FALSE,ip); + tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,rip); + if (tmpi->arg1_type_pointed_to!=RT_F64) + ICFCvt2(cc,tmpi,REG_RDX,MDF_REG+RT_I64,REG_RDX,0,FALSE,rip); } //TODO: unpushable,unpop? Not sure - ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_MOD,FALSE,FALSE,FALSE,CN_MAIN); - if (tmpi->a1_type_pointed_to!=RT_F64) - ICFCvt2(cc,tmpi,REG_RAX,MDF_REG+RT_I64,REG_RAX,0,TRUE,ip); - ICMov(tmpi,tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,MDF_REG+RT_I64,REG_RAX,0,ip); - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,ip); + ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_MOD,FALSE,FALSE,FALSE,CN_INST); + if (tmpi->arg1_type_pointed_to!=RT_F64) + ICFCvt2(cc,tmpi,REG_RAX,MDF_REG+RT_I64,REG_RAX,0,TRUE,rip); + ICMov(tmpi,tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,MDF_REG+RT_I64,REG_RAX,0,rip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,rip); } else { if (dont_push_float) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,tmpi->a1.type, - tmpi->a1.reg,tmpi->a1.disp,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,tmpi->arg1.type, + tmpi->arg1.reg,tmpi->arg1.disp,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - MDF_DISP+tmpi->a1_type_pointed_to,REG_RCX,0,ip); - if (tmpi->a1_type_pointed_to!=RT_F64) - ICFCvt2(cc,tmpi,REG_RAX,MDF_REG+RT_I64,REG_RAX,0,FALSE,ip); + MDF_DISP+tmpi->arg1_type_pointed_to,REG_RCX,0,rip); + if (tmpi->arg1_type_pointed_to!=RT_F64) + ICFCvt2(cc,tmpi,REG_RAX,MDF_REG+RT_I64,REG_RAX,0,FALSE,rip); } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,tmpi->a1.type, - tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,tmpi->arg1.type, + tmpi->arg1.reg,tmpi->arg1.disp,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - MDF_DISP+tmpi->a1_type_pointed_to,REG_RCX,0,ip); - if (tmpi->a1_type_pointed_to!=RT_F64) - ICFCvt2(cc,tmpi,REG_RDX,MDF_REG+RT_I64,REG_RDX,0,FALSE,ip); + MDF_DISP+tmpi->arg1_type_pointed_to,REG_RCX,0,rip); + if (tmpi->arg1_type_pointed_to!=RT_F64) + ICFCvt2(cc,tmpi,REG_RDX,MDF_REG+RT_I64,REG_RDX,0,FALSE,rip); } //TODO: unpushable,unpop? Not sure - ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_MOD,FALSE,FALSE,FALSE,CN_MAIN); - if (tmpi->a1_type_pointed_to!=RT_F64) - ICFCvt2(cc,tmpi,REG_RAX,MDF_REG+RT_I64,REG_RAX,0,TRUE,ip); - ICMov(tmpi,MDF_DISP+tmpi->a1_type_pointed_to,REG_RCX,0, - MDF_REG+RT_I64,REG_RAX,0,ip); - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_MOD,FALSE,FALSE,FALSE,CN_INST); + if (tmpi->arg1_type_pointed_to!=RT_F64) + ICFCvt2(cc,tmpi,REG_RAX,MDF_REG+RT_I64,REG_RAX,0,TRUE,rip); + ICMov(tmpi,MDF_DISP+tmpi->arg1_type_pointed_to,REG_RCX,0, + MDF_REG+RT_I64,REG_RAX,0,rip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } } diff --git a/Compiler/BackFB.HC b/Compiler/BackFB.HC index 59cbff9..a8a6a9b 100644 --- a/Compiler/BackFB.HC +++ b/Compiler/BackFB.HC @@ -1,13 +1,13 @@ -U0 ICFOpEqu(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,U8 *buf2,I64 ip) +U0 ICFOpEqu(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,U8 *buf2,I64 rip) {//for ADD,SUB,DIV,MUL - CICArg *a1=&tmpi->a1, - *a2=&tmpi->a2; + CICArg *arg1=&tmpi->arg1, + *arg2=&tmpi->arg2; Bool dont_push_float,dont_pop_float,p1_mem; I64 rsp_size=0,builtin2=0, t1,r1,d1,t2,r2,d2; if (cc->flags&CCF_AOT_COMPILE) - buf2=cc->aotc->ip; + buf2=cc->aotc->rip; CmpSetFloatOpPushPop(cc,tmpi,&dont_push_float,&dont_pop_float); if (dont_pop_float) @@ -16,63 +16,66 @@ U0 ICFOpEqu(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,U8 *buf2,I64 ip) if (tmpi->ic_flags & ICF_BY_VAL) { p1_mem=FALSE; if (dont_push_float) { - if (tmpi->a1_type_pointed_to!=RT_F64) { + if (tmpi->arg1_type_pointed_to!=RT_F64) { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - a1->type&MDG_MASK+tmpi->a1_type_pointed_to,a1->reg,a1->disp,ip); - ICFCvt2(cc,tmpi,REG_RAX,MDF_REG+RT_I64,REG_RAX,0,FALSE,ip); - ICPush(tmpi,MDF_REG+RT_I64,REG_RAX,0,ip); + arg1->type&MDG_MASK+tmpi->arg1_type_pointed_to, + arg1->reg,arg1->disp,rip); + ICFCvt2(cc,tmpi,REG_RAX,MDF_REG+RT_I64,REG_RAX,0,FALSE,rip); + ICPush(tmpi,MDF_REG+RT_I64,REG_RAX,0,rip); t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=0; rsp_size+=8; } else { - if (tmpi->a1_type_pointed_to>=RT_I64 && a1->type&MDG_DISP_SIB_RIP) { - t1=a1->type&MDG_MASK+tmpi->a1_type_pointed_to; - r1=a1->reg; - d1=a1->disp; + if (tmpi->arg1_type_pointed_to>=RT_I64 && arg1->type&MDG_DISP_SIB_RIP) { + t1=arg1->type&MDG_MASK+tmpi->arg1_type_pointed_to; + r1=arg1->reg; + d1=arg1->disp; p1_mem=TRUE; } else { - ICPush(tmpi,a1->type&MDG_MASK+tmpi->a1_type_pointed_to, - a1->reg,a1->disp,ip); + ICPush(tmpi,arg1->type&MDG_MASK+tmpi->arg1_type_pointed_to, + arg1->reg,arg1->disp,rip); t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=0; rsp_size+=8; } } } else { - if (tmpi->a1_type_pointed_to!=RT_F64 || a1->type&MDF_STK) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,a2->type,a2->reg,a2->disp,ip); + if (tmpi->arg1_type_pointed_to!=RT_F64 || arg1->type&MDF_STK) { + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,arg2->type, + arg2->reg,arg2->disp,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - a1->type&MDG_MASK+tmpi->a1_type_pointed_to,a1->reg,a1->disp,ip); - if (tmpi->a1_type_pointed_to!=RT_F64) - ICFCvt2(cc,tmpi,REG_RDX,MDF_REG+RT_I64,REG_RDX,0,FALSE,ip); + arg1->type&MDG_MASK+tmpi->arg1_type_pointed_to, + arg1->reg,arg1->disp,rip); + if (tmpi->arg1_type_pointed_to!=RT_F64) + ICFCvt2(cc,tmpi,REG_RDX,MDF_REG+RT_I64,REG_RDX,0,FALSE,rip); ICU16(tmpi,0x5052); //PUSH EDX PUSH EAX rsp_size=16; t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=8; t2=MDF_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; } else { - if (a2->type.raw_type>=RT_I64 && a2->type&MDG_DISP_SIB_RIP) { - t2=a2->type; - r2=a2->reg; - d2=a2->disp; + if (arg2->type.raw_type>=RT_I64 && arg2->type&MDG_DISP_SIB_RIP) { + t2=arg2->type; + r2=arg2->reg; + d2=arg2->disp; } else { - if (a2->type&MDF_IMM) { - if (!(builtin2=ICBuiltInFloatConst(a2->disp(F64)))) { + if (arg2->type&MDF_IMM) { + if (!(builtin2=ICBuiltInFloatConst(arg2->disp(F64)))) { t2=MDF_RIP_DISP32+RT_I64; r2=REG_RIP; - d2=COCFloatConstFind(cc,a2->disp(F64))+buf2; + d2=COCFloatConstFind(cc,arg2->disp(F64))+buf2; } } else { - ICPush(tmpi,a2->type,a2->reg,a2->disp,ip); + ICPush(tmpi,arg2->type,arg2->reg,arg2->disp,rip); t2=MDF_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; rsp_size+=8; } } - if (tmpi->a1_type_pointed_to>=RT_I64 && a1->type&MDG_DISP_SIB_RIP) { - t1=a1->type&MDG_MASK+tmpi->a1_type_pointed_to; - r1=a1->reg; - d1=a1->disp; + if (tmpi->arg1_type_pointed_to>=RT_I64 && arg1->type&MDG_DISP_SIB_RIP) { + t1=arg1->type&MDG_MASK+tmpi->arg1_type_pointed_to; + r1=arg1->reg; + d1=arg1->disp; p1_mem=TRUE; } else { - ICPush(tmpi,a1->type&MDG_MASK+tmpi->a1_type_pointed_to, - a1->reg,a1->disp,ip); + ICPush(tmpi,arg1->type&MDG_MASK+tmpi->arg1_type_pointed_to, + arg1->reg,arg1->disp,rip); t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=0; rsp_size+=8; if (r2==REG_RSP+REG_RSP<<8) @@ -80,7 +83,7 @@ U0 ICFOpEqu(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,U8 *buf2,I64 ip) } } } - if (!rsp_size && !(p1_mem && tmpi->a1_type_pointed_to==RT_F64)) { + if (!rsp_size && !(p1_mem && tmpi->arg1_type_pointed_to==RT_F64)) { rsp_size=8; ICAddRSP(tmpi,-8); } @@ -88,93 +91,97 @@ U0 ICFOpEqu(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,U8 *buf2,I64 ip) if (builtin2) ICU16(tmpi,builtin2); else - ICSlashOp(tmpi,t2,r2,d2,SLASH_OP_FLD,ip); + ICSlashOp(tmpi,t2,r2,d2,SLASH_OP_FLD,rip); } switch (op.u8[0]) { case 4: op=SLASH_OP_FSUBR; break; case 6: op=SLASH_OP_FDIVR; break; } - ICSlashOp(tmpi,t1,r1,d1,op,ip); - CmpNoteFloatOp(cc,tmpi,TRUE,FALSE,CN_MAIN); - if (p1_mem && tmpi->a1_type_pointed_to==RT_F64) { - ICSlashOp(tmpi,t1,r1,d1,SLASH_OP_FSTP,ip); + ICSlashOp(tmpi,t1,r1,d1,op,rip); + CmpNoteFloatOp(cc,tmpi,TRUE,FALSE,CN_INST); + if (p1_mem && tmpi->arg1_type_pointed_to==RT_F64) { + ICSlashOp(tmpi,t1,r1,d1,SLASH_OP_FSTP,rip); if (rsp_size) ICAddRSP(tmpi,rsp_size); } else { if (rsp_size==8) - ICSlashOp(tmpi,MDF_SIB+RT_I64,REG_RSP+REG_RSP<<8,0,SLASH_OP_FSTP,ip); + ICSlashOp(tmpi,MDF_SIB+RT_I64,REG_RSP+REG_RSP<<8,0,SLASH_OP_FSTP,rip); else if (rsp_size>8) { ICSlashOp(tmpi,MDF_SIB+RT_I64,REG_RSP+REG_RSP<<8,rsp_size-8, - SLASH_OP_FSTP,ip); + SLASH_OP_FSTP,rip); ICAddRSP(tmpi,rsp_size-8); } - if (tmpi->a1_type_pointed_to!=RT_F64) { - ICPop(tmpi,MDF_REG+RT_I64,REG_RAX,0,ip); - ICFCvt2(cc,tmpi,REG_RAX,MDF_REG+RT_I64,REG_RAX,0,TRUE,ip); - ICMov(tmpi,a1->type&MDG_MASK+tmpi->a1_type_pointed_to,a1->reg, - a1->disp,MDF_REG+RT_I64,REG_RAX,0,ip); + if (tmpi->arg1_type_pointed_to!=RT_F64) { + ICPop(tmpi,MDF_REG+RT_I64,REG_RAX,0,rip); + ICFCvt2(cc,tmpi,REG_RAX,MDF_REG+RT_I64,REG_RAX,0,TRUE,rip); + ICMov(tmpi,arg1->type&MDG_MASK+tmpi->arg1_type_pointed_to,arg1->reg, + arg1->disp,MDF_REG+RT_I64,REG_RAX,0,rip); } else - ICPop(tmpi,a1->type&MDG_MASK+tmpi->a1_type_pointed_to, - a1->reg,a1->disp,ip); + ICPop(tmpi,arg1->type&MDG_MASK+tmpi->arg1_type_pointed_to, + arg1->reg,arg1->disp,rip); } - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - a1->type&MDG_MASK+tmpi->a1_type_pointed_to,a1->reg,a1->disp,ip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + arg1->type&MDG_MASK+tmpi->arg1_type_pointed_to, + arg1->reg,arg1->disp,rip); } else { - if (tmpi->a1_type_pointed_to>=RT_I64) + if (tmpi->arg1_type_pointed_to>=RT_I64) p1_mem=TRUE; else p1_mem=FALSE; if (dont_push_float) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,a1->type,a1->reg,a1->disp,ip); - if (tmpi->a1_type_pointed_to!=RT_F64) { + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,arg1->type,arg1->reg,arg1->disp,rip); + if (tmpi->arg1_type_pointed_to!=RT_F64) { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - MDF_DISP+tmpi->a1_type_pointed_to,REG_RCX,0,ip); - ICFCvt2(cc,tmpi,REG_RAX,MDF_REG+RT_I64,REG_RAX,0,FALSE,ip); - ICPush(tmpi,MDF_REG+RT_I64,REG_RAX,0,ip); + MDF_DISP+tmpi->arg1_type_pointed_to,REG_RCX,0,rip); + ICFCvt2(cc,tmpi,REG_RAX,MDF_REG+RT_I64,REG_RAX,0,FALSE,rip); + ICPush(tmpi,MDF_REG+RT_I64,REG_RAX,0,rip); } else - ICPush(tmpi,MDF_DISP+tmpi->a1_type_pointed_to,REG_RCX,0,ip); + ICPush(tmpi,MDF_DISP+tmpi->arg1_type_pointed_to,REG_RCX,0,rip); t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=0; rsp_size+=8; } else { - if (tmpi->a1_type_pointed_to!=RT_F64 || a1->type&MDF_STK) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,a2->type,a2->reg,a2->disp,ip); - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,a1->type,a1->reg,a1->disp,ip); + if (tmpi->arg1_type_pointed_to!=RT_F64 || arg1->type&MDF_STK) { + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,arg2->type, + arg2->reg,arg2->disp,rip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,arg1->type, + arg1->reg,arg1->disp,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - MDF_DISP+tmpi->a1_type_pointed_to,REG_RCX,0,ip); - if (tmpi->a1_type_pointed_to!=RT_F64) - ICFCvt2(cc,tmpi,REG_RDX,MDF_REG+RT_I64,REG_RDX,0,FALSE,ip); + MDF_DISP+tmpi->arg1_type_pointed_to,REG_RCX,0,rip); + if (tmpi->arg1_type_pointed_to!=RT_F64) + ICFCvt2(cc,tmpi,REG_RDX,MDF_REG+RT_I64,REG_RDX,0,FALSE,rip); ICU16(tmpi,0x5052); //PUSH EDX PUSH EAX rsp_size=16; t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=8; t2=MDF_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; } else { - if (a2->type.raw_type>=RT_I64 && a2->type&MDG_DISP_SIB_RIP) { - t2=a2->type; - r2=a2->reg; - d2=a2->disp; + if (arg2->type.raw_type>=RT_I64 && arg2->type&MDG_DISP_SIB_RIP) { + t2=arg2->type; + r2=arg2->reg; + d2=arg2->disp; } else { - if (a2->type&MDF_IMM) { - if (!(builtin2=ICBuiltInFloatConst(a2->disp(F64)))) { + if (arg2->type&MDF_IMM) { + if (!(builtin2=ICBuiltInFloatConst(arg2->disp(F64)))) { t2=MDF_RIP_DISP32+RT_I64; r2=REG_RIP; - d2=COCFloatConstFind(cc,a2->disp(F64))+buf2; + d2=COCFloatConstFind(cc,arg2->disp(F64))+buf2; } } else { - ICPush(tmpi,a2->type,a2->reg,a2->disp,ip); + ICPush(tmpi,arg2->type,arg2->reg,arg2->disp,rip); t2=MDF_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; rsp_size+=8; } } - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,a1->type,a1->reg,a1->disp,ip); - ICPush(tmpi,MDF_DISP+tmpi->a1_type_pointed_to,REG_RCX,0,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,arg1->type, + arg1->reg,arg1->disp,rip); + ICPush(tmpi,MDF_DISP+tmpi->arg1_type_pointed_to,REG_RCX,0,rip); t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=0; rsp_size+=8; if (r2==REG_RSP+REG_RSP<<8) d2+=8; } } - if (!rsp_size && !(p1_mem && tmpi->a1_type_pointed_to==RT_F64)) { + if (!rsp_size && !(p1_mem && tmpi->arg1_type_pointed_to==RT_F64)) { rsp_size=8; ICAddRSP(tmpi,-8); } @@ -182,61 +189,61 @@ U0 ICFOpEqu(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,U8 *buf2,I64 ip) if (builtin2) ICU16(tmpi,builtin2); else - ICSlashOp(tmpi,t2,r2,d2,SLASH_OP_FLD,ip); + ICSlashOp(tmpi,t2,r2,d2,SLASH_OP_FLD,rip); } switch (op.u8[0]) { case 4: op=SLASH_OP_FSUBR; break; case 6: op=SLASH_OP_FDIVR; break; } - ICSlashOp(tmpi,t1,r1,d1,op,ip); - CmpNoteFloatOp(cc,tmpi,TRUE,FALSE,CN_MAIN); - if (p1_mem && tmpi->a1_type_pointed_to==RT_F64) { - ICSlashOp(tmpi,MDF_DISP+tmpi->a1_type_pointed_to, - REG_RCX,0,SLASH_OP_FSTP,ip); + ICSlashOp(tmpi,t1,r1,d1,op,rip); + CmpNoteFloatOp(cc,tmpi,TRUE,FALSE,CN_INST); + if (p1_mem && tmpi->arg1_type_pointed_to==RT_F64) { + ICSlashOp(tmpi,MDF_DISP+tmpi->arg1_type_pointed_to, + REG_RCX,0,SLASH_OP_FSTP,rip); if (rsp_size) ICAddRSP(tmpi,rsp_size); } else { if (rsp_size==8) - ICSlashOp(tmpi,MDF_SIB+RT_I64,REG_RSP+REG_RSP<<8,0,SLASH_OP_FSTP,ip); + ICSlashOp(tmpi,MDF_SIB+RT_I64,REG_RSP+REG_RSP<<8,0,SLASH_OP_FSTP,rip); else if (rsp_size>8) { ICSlashOp(tmpi,MDF_SIB+RT_I64,REG_RSP+REG_RSP<<8,rsp_size-8, - SLASH_OP_FSTP,ip); + SLASH_OP_FSTP,rip); ICAddRSP(tmpi,rsp_size-8); } - ICPop(tmpi,MDF_REG+RT_I64,REG_RAX,0,ip); - if (tmpi->a1_type_pointed_to!=RT_F64) - ICFCvt2(cc,tmpi,REG_RAX,MDF_REG+RT_I64,REG_RAX,0,TRUE,ip); - ICMov(tmpi,MDF_DISP+tmpi->a1_type_pointed_to,REG_RCX,0, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICPop(tmpi,MDF_REG+RT_I64,REG_RAX,0,rip); + if (tmpi->arg1_type_pointed_to!=RT_F64) + ICFCvt2(cc,tmpi,REG_RAX,MDF_REG+RT_I64,REG_RAX,0,TRUE,rip); + ICMov(tmpi,MDF_DISP+tmpi->arg1_type_pointed_to,REG_RCX,0, + MDF_REG+RT_I64,REG_RAX,0,rip); } - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } } -U0 ICFCmpAndBranch(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip, - I64 us,I64 not_us,U8 *buf,I64 ip2) +U0 ICFCmpAndBranch(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 rip, + I64 us,I64 not_us,U8 *buf,I64 rip2) { - CICArg *a1,*a2; + CICArg *arg1,*arg2; Bool dont_push_float,dont_pop_float,alt,short_jmp; I64 i,rsp_size=0,builtin1=0,builtin2=0,t1,r1,d1,t2,r2,d2; CCodeMisc *lb; U8 *buf2; if (tmpi->ic_flags&ICF_ALT_TEMPLATE) { - a1=&tmpi->a2; - a2=&tmpi->a1; + arg1=&tmpi->arg2; + arg2=&tmpi->arg1; alt=TRUE; } else { - a1=&tmpi->a1; - a2=&tmpi->a2; + arg1=&tmpi->arg1; + arg2=&tmpi->arg2; alt=FALSE; } if (cc->flags&CCF_AOT_COMPILE) - buf2=cc->aotc->ip; + buf2=cc->aotc->rip; else buf2=buf; @@ -246,20 +253,20 @@ U0 ICFCmpAndBranch(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip, t2=MDF_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; rsp_size+=8; } else { - if (a2->type.raw_type>=RT_I64 && a2->type&MDG_DISP_SIB_RIP) { - t2=a2->type; - r2=a2->reg; - d2=a2->disp; + if (arg2->type.raw_type>=RT_I64 && arg2->type&MDG_DISP_SIB_RIP) { + t2=arg2->type; + r2=arg2->reg; + d2=arg2->disp; } else { - if (a2->type&MDF_IMM) { - if (!(builtin2=ICBuiltInFloatConst(a2->disp(F64))) || + if (arg2->type&MDF_IMM) { + if (!(builtin2=ICBuiltInFloatConst(arg2->disp(F64))) || tmpi->ic_flags&ICF_PUSH_CMP) { t2=MDF_RIP_DISP32+RT_I64; r2=REG_RIP; - d2=COCFloatConstFind(cc,a2->disp(F64))+buf2; + d2=COCFloatConstFind(cc,arg2->disp(F64))+buf2; } } else { - ICPush(tmpi,a2->type,a2->reg,a2->disp,ip2); + ICPush(tmpi,arg2->type,arg2->reg,arg2->disp,rip2); t2=MDF_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; rsp_size+=8; } @@ -267,43 +274,43 @@ U0 ICFCmpAndBranch(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip, } } else { if (alt) { - if (!(a2->type&MDF_STK)) { + if (!(arg2->type&MDF_STK)) { if (tmpi->ic_flags&ICF_POP_CMP) { t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=0; rsp_size+=8; } else { - if (a1->type.raw_type>=RT_I64 && a1->type&MDG_DISP_SIB_RIP) { - t1=a1->type; - r1=a1->reg; - d1=a1->disp; + if (arg1->type.raw_type>=RT_I64 && arg1->type&MDG_DISP_SIB_RIP) { + t1=arg1->type; + r1=arg1->reg; + d1=arg1->disp; } else { - if (a1->type&MDF_IMM) { - if (!(builtin1=ICBuiltInFloatConst(a1->disp(F64)))) { + if (arg1->type&MDF_IMM) { + if (!(builtin1=ICBuiltInFloatConst(arg1->disp(F64)))) { t1=MDF_RIP_DISP32+RT_I64; r1=REG_RIP; - d1=COCFloatConstFind(cc,a1->disp(F64))+buf2; + d1=COCFloatConstFind(cc,arg1->disp(F64))+buf2; } } else { - ICPush(tmpi,a1->type,a1->reg,a1->disp,ip2); + ICPush(tmpi,arg1->type,arg1->reg,arg1->disp,rip2); t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=0; rsp_size+=8; } } } - if (a2->type.raw_type>=RT_I64 && a2->type&MDG_DISP_SIB_RIP) { - t2=a2->type; - r2=a2->reg; - d2=a2->disp; + if (arg2->type.raw_type>=RT_I64 && arg2->type&MDG_DISP_SIB_RIP) { + t2=arg2->type; + r2=arg2->reg; + d2=arg2->disp; } else { - if (a2->type&MDF_IMM) { - if (!(builtin2=ICBuiltInFloatConst(a2->disp(F64))) || + if (arg2->type&MDF_IMM) { + if (!(builtin2=ICBuiltInFloatConst(arg2->disp(F64))) || tmpi->ic_flags&ICF_PUSH_CMP) { t2=MDF_RIP_DISP32+RT_I64; r2=REG_RIP; - d2=COCFloatConstFind(cc,a2->disp(F64))+buf2; + d2=COCFloatConstFind(cc,arg2->disp(F64))+buf2; } } else { - ICPush(tmpi,a2->type,a2->reg,a2->disp,ip2); + ICPush(tmpi,arg2->type,arg2->reg,arg2->disp,rip2); t2=MDF_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; rsp_size+=8; if (r1==REG_RSP+REG_RSP<<8) @@ -314,29 +321,31 @@ U0 ICFCmpAndBranch(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip, if (tmpi->ic_flags&ICF_POP_CMP) ICPopRegs(tmpi,1<type,a1->reg,a1->disp,ip2); - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,a2->type,a2->reg,a2->disp,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,arg1->type, + arg1->reg,arg1->disp,rip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,arg2->type, + arg2->reg,arg2->disp,rip2); ICU16(tmpi,0x5052); //PUSH EDX PUSH EAX rsp_size=16; t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=8; t2=MDF_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; } } else { - if (!(a1->type&MDF_STK)) { - if (a2->type.raw_type>=RT_I64 && a2->type&MDG_DISP_SIB_RIP) { - t2=a2->type; - r2=a2->reg; - d2=a2->disp; + if (!(arg1->type&MDF_STK)) { + if (arg2->type.raw_type>=RT_I64 && arg2->type&MDG_DISP_SIB_RIP) { + t2=arg2->type; + r2=arg2->reg; + d2=arg2->disp; } else { - if (a2->type&MDF_IMM) { - if (!(builtin2=ICBuiltInFloatConst(a2->disp(F64))) || + if (arg2->type&MDF_IMM) { + if (!(builtin2=ICBuiltInFloatConst(arg2->disp(F64))) || tmpi->ic_flags&ICF_PUSH_CMP) { t2=MDF_RIP_DISP32+RT_I64; r2=REG_RIP; - d2=COCFloatConstFind(cc,a2->disp(F64))+buf2; + d2=COCFloatConstFind(cc,arg2->disp(F64))+buf2; } } else { - ICPush(tmpi,a2->type,a2->reg,a2->disp,ip2); + ICPush(tmpi,arg2->type,arg2->reg,arg2->disp,rip2); t2=MDF_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; rsp_size+=8; } @@ -347,19 +356,19 @@ U0 ICFCmpAndBranch(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip, if (r2==REG_RSP+REG_RSP<<8) d1+=8; } else { - if (a1->type.raw_type>=RT_I64 && a1->type&MDG_DISP_SIB_RIP) { - t1=a1->type; - r1=a1->reg; - d1=a1->disp; + if (arg1->type.raw_type>=RT_I64 && arg1->type&MDG_DISP_SIB_RIP) { + t1=arg1->type; + r1=arg1->reg; + d1=arg1->disp; } else { - if (a1->type&MDF_IMM) { - if (!(builtin1=ICBuiltInFloatConst(a1->disp(F64)))) { + if (arg1->type&MDF_IMM) { + if (!(builtin1=ICBuiltInFloatConst(arg1->disp(F64)))) { t1=MDF_RIP_DISP32+RT_I64; r1=REG_RIP; - d1=COCFloatConstFind(cc,a1->disp(F64))+buf2; + d1=COCFloatConstFind(cc,arg1->disp(F64))+buf2; } } else { - ICPush(tmpi,a1->type,a1->reg,a1->disp,ip2); + ICPush(tmpi,arg1->type,arg1->reg,arg1->disp,rip2); t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=0; rsp_size+=8; if (r2==REG_RSP+REG_RSP<<8) @@ -368,11 +377,13 @@ U0 ICFCmpAndBranch(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip, } } } else { - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,a2->type,a2->reg,a2->disp,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,arg2->type, + arg2->reg,arg2->disp,rip2); if (tmpi->ic_flags&ICF_POP_CMP) ICPopRegs(tmpi,1<type,a1->reg,a1->disp,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,arg1->type, + arg1->reg,arg1->disp,rip2); ICU16(tmpi,0x5052); //PUSH EDX PUSH EAX rsp_size=16; t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=8; @@ -384,14 +395,14 @@ U0 ICFCmpAndBranch(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip, if (builtin1) ICU16(tmpi,builtin1); else - ICSlashOp(tmpi,t1,r1,d1,SLASH_OP_FLD,ip2); + ICSlashOp(tmpi,t1,r1,d1,SLASH_OP_FLD,rip2); } if (!alt) us=not_us; if (builtin2) ICU16(tmpi,builtin2); else - ICSlashOp(tmpi,t2,r2,d2,SLASH_OP_FLD,ip2); + ICSlashOp(tmpi,t2,r2,d2,SLASH_OP_FLD,rip2); if (tmpi->ic_flags&ICF_PUSH_CMP) { t2=MDF_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; if (!rsp_size) { @@ -402,17 +413,17 @@ U0 ICFCmpAndBranch(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip, if (alt) { ICU16(tmpi,0xF1DF); //FCOMIP - ICSlashOp(tmpi,t2,r2,d2,SLASH_OP_FSTP,ip2); + ICSlashOp(tmpi,t2,r2,d2,SLASH_OP_FSTP,rip2); } else { ICU16(tmpi,0xF1DB); //FCOMI - ICSlashOp(tmpi,t2,r2,d2,SLASH_OP_FSTP,ip2); + ICSlashOp(tmpi,t2,r2,d2,SLASH_OP_FSTP,rip2); ICU32(tmpi,0xF7D9C0DD); //FFREE,FINCSTP } } else { ICU16(tmpi,0xF1DF); //FCOMIP ICU32(tmpi,0xF7D9C0DD); //FFREE,FINCSTP } - CmpNoteFloatOp(cc,tmpi,TRUE,FALSE,CN_MAIN); + CmpNoteFloatOp(cc,tmpi,TRUE,FALSE,CN_INST); if (tmpi->ic_flags&ICF_PUSH_CMP) { if (r2.u8[0]==REG_RSP) { @@ -426,7 +437,7 @@ U0 ICFCmpAndBranch(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip, ICU8(tmpi,0x5B); //POP RBX (Dont change flags) rsp_size-=8; } - ICPush(tmpi,t2,r2,d2,ip2); + ICPush(tmpi,t2,r2,d2,rip2); } } else { while (rsp_size) { @@ -435,11 +446,11 @@ U0 ICFCmpAndBranch(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip, } } - ip+=tmpi->ic_cnt; + rip+=tmpi->ic_cnt; lb=OptLabelFwd(tmpi->ic_data); short_jmp=ToBool(tmpi->ic_flags&ICF_SHORT_JMP); if (!buf && lb->addr!=INVALID_PTR) { - i=lb->addr-(ip+2); + i=lb->addr-(rip+2); if (lb->flags&CMF_POP_CMP) { if(tmpi->ic_flags&ICF_PUSH_CMP) i+=4; @@ -452,7 +463,7 @@ U0 ICFCmpAndBranch(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip, if (short_jmp) { tmpi->ic_flags|=ICF_SHORT_JMP; - i=lb->addr-(ip+2); + i=lb->addr-(rip+2); if (lb->flags&CMF_POP_CMP) { if(tmpi->ic_flags&ICF_PUSH_CMP) i+=4; @@ -462,7 +473,7 @@ U0 ICFCmpAndBranch(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip, ICU16(tmpi,i<<8+us.u8[2]); } else { tmpi->ic_flags&=~ICF_SHORT_JMP; - i=lb->addr-(ip+6); + i=lb->addr-(rip+6); if (lb->flags&CMF_POP_CMP) { if(tmpi->ic_flags&ICF_PUSH_CMP) i+=4; @@ -474,147 +485,147 @@ U0 ICFCmpAndBranch(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip, } } -U0 ICFMul(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf,I64 ip) +U0 ICFMul(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf,I64 rip) { - if (tmpi->a1.type&MDF_IMM && tmpi->a1.type&RTG_MASK==RT_F64 && - tmpi->a1.disp(F64)==1.0) { - CmpNoteFloatOp(cc,tmpi,FALSE,FALSE,CN_MAIN); - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); - } else if (tmpi->a2.type&MDF_IMM && - tmpi->a2.type&RTG_MASK==RT_F64&& tmpi->a2.disp(F64)==1.0) { - CmpNoteFloatOp(cc,tmpi,FALSE,FALSE,CN_MAIN); - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + if (tmpi->arg1.type&MDF_IMM && tmpi->arg1.type&RTG_MASK==RT_F64 && + tmpi->arg1.disp(F64)==1.0) { + CmpNoteFloatOp(cc,tmpi,FALSE,FALSE,CN_INST); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); + } else if (tmpi->arg2.type&MDF_IMM && + tmpi->arg2.type&RTG_MASK==RT_F64&& tmpi->arg2.disp(F64)==1.0) { + CmpNoteFloatOp(cc,tmpi,FALSE,FALSE,CN_INST); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); } else - ICFOp(cc,tmpi,SLASH_OP_FMUL,buf,ip); + ICFOp(cc,tmpi,SLASH_OP_FMUL,buf,rip); } -U0 ICFDiv(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf,I64 ip) +U0 ICFDiv(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf,I64 rip) { - if (tmpi->a2.type&MDF_IMM && tmpi->a2.type&RTG_MASK==RT_F64 && - tmpi->a2.disp(F64)==1.0) { - CmpNoteFloatOp(cc,tmpi,FALSE,FALSE,CN_MAIN); - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + if (tmpi->arg2.type&MDF_IMM && tmpi->arg2.type&RTG_MASK==RT_F64 && + tmpi->arg2.disp(F64)==1.0) { + CmpNoteFloatOp(cc,tmpi,FALSE,FALSE,CN_INST); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); } else - ICFOp(cc,tmpi,SLASH_OP_FDIV,buf,ip); + ICFOp(cc,tmpi,SLASH_OP_FDIV,buf,rip); } -U0 ICFAdd(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf,I64 ip) +U0 ICFAdd(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf,I64 rip) { Bool dont_push_float,dont_pop_float; CmpSetFloatOpPushPop(cc,tmpi,&dont_push_float,&dont_pop_float); - if (tmpi->a1.type&MDF_IMM && !tmpi->a1.disp) { + if (tmpi->arg1.type&MDF_IMM && !tmpi->arg1.disp) { if (dont_push_float) { - ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_FSTP,FALSE,TRUE,TRUE,CN_MAIN); - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_FSTP,FALSE,TRUE,TRUE,CN_INST); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } else if (dont_pop_float) { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); - ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_FLD,FALSE,TRUE,TRUE,CN_MAIN); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); + ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_FLD,FALSE,TRUE,TRUE,CN_INST); } else { - CmpNoteFloatOp(cc,tmpi,TRUE,TRUE,CN_MAIN); - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + CmpNoteFloatOp(cc,tmpi,TRUE,TRUE,CN_INST); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); } - } else if (tmpi->a2.type&MDF_IMM && !tmpi->a2.disp) { + } else if (tmpi->arg2.type&MDF_IMM && !tmpi->arg2.disp) { if (dont_push_float) { - ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_FSTP,FALSE,TRUE,TRUE,CN_MAIN); - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_FSTP,FALSE,TRUE,TRUE,CN_INST); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } else if (dont_pop_float) { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); - ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_FLD,FALSE,TRUE,TRUE,CN_MAIN); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); + ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_FLD,FALSE,TRUE,TRUE,CN_INST); } else { - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); - CmpNoteFloatOp(cc,tmpi,TRUE,TRUE,CN_MAIN); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); + CmpNoteFloatOp(cc,tmpi,TRUE,TRUE,CN_INST); } } else - ICFOp(cc,tmpi,SLASH_OP_FADD,buf,ip); + ICFOp(cc,tmpi,SLASH_OP_FADD,buf,rip); } -U0 ICFSub(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf,I64 ip) +U0 ICFSub(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf,I64 rip) { Bool dont_push_float,dont_pop_float; - if (tmpi->a2.type&MDF_IMM && !tmpi->a2.disp) { + if (tmpi->arg2.type&MDF_IMM && !tmpi->arg2.disp) { CmpSetFloatOpPushPop(cc,tmpi,&dont_push_float,&dont_pop_float); if (dont_push_float) { - ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_FSTP,FALSE,TRUE,TRUE,CN_MAIN); - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_FSTP,FALSE,TRUE,TRUE,CN_INST); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } else if (dont_pop_float) { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); - ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_FLD,FALSE,TRUE,TRUE,CN_MAIN); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); + ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_FLD,FALSE,TRUE,TRUE,CN_INST); } else { - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); - CmpNoteFloatOp(cc,tmpi,TRUE,TRUE,CN_MAIN); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); + CmpNoteFloatOp(cc,tmpi,TRUE,TRUE,CN_INST); } } else - ICFOp(cc,tmpi,SLASH_OP_FSUB,buf,ip); + ICFOp(cc,tmpi,SLASH_OP_FSUB,buf,rip); } -U0 ICFPreIncDec(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,I64 ip) +U0 ICFPreIncDec(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,I64 rip) { if (tmpi->ic_flags & ICF_BY_VAL) { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type&MDG_MASK+RT_I64,tmpi->a1.reg,tmpi->a1.disp,ip); - ICCopyTemplate(cc,tmpi,op,FALSE,TRUE,TRUE,CN_MAIN); - ICMov(tmpi,tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + tmpi->arg1.type&MDG_MASK+RT_I64,tmpi->arg1.reg,tmpi->arg1.disp,rip); + ICCopyTemplate(cc,tmpi,op,FALSE,TRUE,TRUE,CN_INST); + ICMov(tmpi,tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,MDF_DISP+RT_I64,REG_RCX,0,ip); - ICCopyTemplate(cc,tmpi,op,FALSE,TRUE,TRUE,CN_MAIN); - ICMov(tmpi,MDF_DISP+RT_I64,REG_RCX,0,MDF_REG+RT_I64,REG_RAX,0,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,MDF_DISP+RT_I64,REG_RCX,0,rip); + ICCopyTemplate(cc,tmpi,op,FALSE,TRUE,TRUE,CN_INST); + ICMov(tmpi,MDF_DISP+RT_I64,REG_RCX,0,MDF_REG+RT_I64,REG_RAX,0,rip); } - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } -U0 ICFPostIncDec(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,I64 ip) +U0 ICFPostIncDec(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,I64 rip) { if (tmpi->ic_flags & ICF_BY_VAL) { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type&MDG_MASK+RT_I64,tmpi->a1.reg,tmpi->a1.disp,ip); - if (tmpi->r.type.mode) - ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,MDF_REG+RT_I64,REG_RAX,0,ip); - ICCopyTemplate(cc,tmpi,op,FALSE,TRUE,TRUE,CN_MAIN); - ICMov(tmpi,tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + tmpi->arg1.type&MDG_MASK+RT_I64,tmpi->arg1.reg,tmpi->arg1.disp,rip); + if (tmpi->res.type.mode) + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,MDF_REG+RT_I64,REG_RAX,0,rip); + ICCopyTemplate(cc,tmpi,op,FALSE,TRUE,TRUE,CN_INST); + ICMov(tmpi,tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,MDF_DISP+RT_I64,REG_RCX,0,ip); - if (tmpi->r.type.mode) - ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,MDF_REG+RT_I64,REG_RAX,0,ip); - ICCopyTemplate(cc,tmpi,op,FALSE,TRUE,TRUE,CN_MAIN); - ICMov(tmpi,MDF_DISP+RT_I64,REG_RCX,0,MDF_REG+RT_I64,REG_RAX,0,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,MDF_DISP+RT_I64,REG_RCX,0,rip); + if (tmpi->res.type.mode) + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,MDF_REG+RT_I64,REG_RAX,0,rip); + ICCopyTemplate(cc,tmpi,op,FALSE,TRUE,TRUE,CN_INST); + ICMov(tmpi,MDF_DISP+RT_I64,REG_RCX,0,MDF_REG+RT_I64,REG_RAX,0,rip); } - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RDX,0,ip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RDX,0,rip); } -U0 ICFTemplateFun(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,I64 ip) +U0 ICFTemplateFun(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,I64 rip) { Bool dont_push_float,dont_pop_float; CmpSetFloatOpPushPop(cc,tmpi,&dont_push_float,&dont_pop_float); if (!dont_push_float) ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); - ICCopyTemplate(cc,tmpi,op,FALSE,TRUE,TRUE,CN_MAIN); - if (tmpi->r.type.mode && !(tmpi->ic_flags & ICF_R_TO_F64) && - !(tmpi->ic_flags & ICF_R_TO_INT)) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICCopyTemplate(cc,tmpi,op,FALSE,TRUE,TRUE,CN_INST); + if (tmpi->res.type.mode && !(tmpi->ic_flags & ICF_RES_TO_F64) && + !(tmpi->ic_flags & ICF_RES_TO_INT)) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } diff --git a/Compiler/BackLib.HC b/Compiler/BackLib.HC index 8d22415..5765c77 100644 --- a/Compiler/BackLib.HC +++ b/Compiler/BackLib.HC @@ -121,7 +121,7 @@ U0 ICAddRSP(CIntermediateCode *tmpi,I64 i,Bool optimize=TRUE) } extern U0 ICMov(CIntermediateCode *tmpi, - CICType t1,I64 r1,I64 d1,CICType t2,I64 r2,I64 d2,I64 ip); + CICType t1,I64 r1,I64 d1,CICType t2,I64 r2,I64 d2,I64 rip); #define MODR_REG 0 #define MODR_INDIRECT_REG 1 @@ -131,6 +131,7 @@ extern U0 ICMov(CIntermediateCode *tmpi, #define MODR_SIB_D8_INDIRECT_REG 5 #define MODR_SIB_D32_INDIRECT_REG 6 #define MODR_RIP_REL 7 +#define MODR_RIP_REL_IMM_U32 8 I64 ICModr1(I64 r,CICType t2,I64 r2,I64 d2) {//res.u8[0] is type @@ -210,8 +211,8 @@ I64 ICModr1(I64 r,CICType t2,I64 r2,I64 d2) return res; } -U0 ICModr2(CIntermediateCode *tmpi,I64 i,I64 d,I64 ip=0) -{//t=0 means no SIB +U0 ICModr2(CIntermediateCode *tmpi,I64 i,CICType t=0,I64 d,I64 rip=0) +{ switch [i.u8[0]] { case MODR_REG: break; @@ -234,42 +235,58 @@ U0 ICModr2(CIntermediateCode *tmpi,I64 i,I64 d,I64 ip=0) ICU8(tmpi,i.u8[3]); ICU32(tmpi,d); break; + case MODR_RIP_REL_IMM_U32: + switch (t.raw_type) { + case RT_I8: + case RT_U8: + d--; + break; + case RT_I16: + case RT_U16: + d-=2; + break; + default: + d-=4; + } case MODR_RIP_REL: - ICU32(tmpi,d-(ip+tmpi->ic_cnt)); + ICU32(tmpi,d-(rip+4+tmpi->ic_cnt)); tmpi->ic_flags&=~ICF_CODE_FINAL; break; } } -#define SLASH_OP_INC 0x0003000000FFFE00 -#define SLASH_OP_DEC 0x052B000000FFFE01 -#define SLASH_OP_NOT 0x0000000000F7F602 -#define SLASH_OP_NEG 0x0000000000F7F603 -#define SLASH_OP_MUL 0x0000000000F7F604 -#define SLASH_OP_IMUL 0x0000000000F7F605 -#define SLASH_OP_DIV 0x0000000000F7F606 -#define SLASH_OP_MOV 0x0000000000898800 -#define SLASH_OP_PUSH 0x0000000000FFFF06 -#define SLASH_OP_POP 0x00000000008F8F00 -#define SLASH_OP_FADD 0x0000C1DE01DCDC00 -#define SLASH_OP_FSUB 0x0000E9DE01DCDC04 -#define SLASH_OP_FSUBR 0x0000E1DE01DCDC05 -#define SLASH_OP_FMUL 0x0000C9DE01DCDC01 -#define SLASH_OP_FDIV 0x0000F9DE01DCDC06 -#define SLASH_OP_FDIVR 0x0000F1DE01DCDC07 -#define SLASH_OP_FLD 0x0000000001DDDD00 -#define SLASH_OP_FSTP 0x0000000001DDDD03 -#define SLASH_OP_FISTTP 0x0000000001DDDD01 -#define SLASH_OP_FILD 0x0000000001DFDF05 +#define SLASH_OP_INC 0x0003000000FFFE00 +#define SLASH_OP_DEC 0x052B000000FFFE01 +#define SLASH_OP_NOT 0x0000000000F7F602 +#define SLASH_OP_NEG 0x0000000000F7F603 +#define SLASH_OP_IMM_U8 0x0000000000838000 +#define SLASH_OP_IMM_U32 0x0000000000818300 +#define SLASH_OP_MUL 0x0000000000F7F604 +#define SLASH_OP_IMUL 0x0000000000F7F605 +#define SLASH_OP_DIV 0x0000000000F7F606 +#define SLASH_OP_MOV 0x0000000000898800 +#define SLASH_OP_MOV_IMM 0x0000000000C7C600 +#define SLASH_OP_PUSH 0x0000000000FFFF06 +#define SLASH_OP_POP 0x00000000008F8F00 +#define SLASH_OP_FADD 0x0000C1DE01DCDC00 +#define SLASH_OP_FSUB 0x0000E9DE01DCDC04 +#define SLASH_OP_FSUBR 0x0000E1DE01DCDC05 +#define SLASH_OP_FMUL 0x0000C9DE01DCDC01 +#define SLASH_OP_FDIV 0x0000F9DE01DCDC06 +#define SLASH_OP_FDIVR 0x0000F1DE01DCDC07 +#define SLASH_OP_FLD 0x0000000001DDDD00 +#define SLASH_OP_FSTP 0x0000000001DDDD03 +#define SLASH_OP_FISTTP 0x0000000001DDDD01 +#define SLASH_OP_FILD 0x0000000001DFDF05 -U0 ICSlashOp(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1,I64 op,I64 ip) +U0 ICSlashOp(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1,I64 op,I64 rip) { I64 i; if (t1&MDF_REG && !op.u8[3]) t1=t1&(MDG_MASK|RTF_UNSIGNED)+RT_I64; //Set to 64 bit,preserving unsigned i=ICModr1(op.u8[0],t1,r1,d1); - - if (tmpi->ic_flags&ICF_LOCK && op!=SLASH_OP_MOV && !(t1&MDF_REG)) + if (tmpi->ic_flags&ICF_LOCK && !(t1&MDF_REG) && + op&~7!=SLASH_OP_MOV && op!=SLASH_OP_MOV_IMM) ICU8(tmpi,OC_LOCK_PREFIX); switch (t1.raw_type) { case RT_I8: @@ -287,10 +304,12 @@ U0 ICSlashOp(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1,I64 op,I64 ip) ICRex(tmpi,i.u8[1]); ICU16(tmpi,i.u8[2]<<8+op.u8[2]); } - ICModr2(tmpi,i,d1,ip+4); + if (i.u8[0]==MODR_RIP_REL&& (op==SLASH_OP_MOV_IMM || op&~7==SLASH_OP_IMM_U32)) + i.u8[0]=MODR_RIP_REL_IMM_U32; + ICModr2(tmpi,i,t1,d1,rip); } -U0 ICPush(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1,I64 ip) +U0 ICPush(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1,I64 rip) { switch (Bsr(t1)) { case MDf_REG: @@ -306,7 +325,7 @@ U0 ICPush(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1,I64 ip) ICU8(tmpi,0x68); ICU32(tmpi,d1); } else { - ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0,t1,r1,d1,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0,t1,r1,d1,rip); ICU8(tmpi,0x50+REG_RBX); } return; @@ -319,12 +338,12 @@ U0 ICPush(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1,I64 ip) case RT_I64: case RT_U64: case RT_F64: - ICSlashOp(tmpi,t1,r1,d1,SLASH_OP_PUSH,ip); + ICSlashOp(tmpi,t1,r1,d1,SLASH_OP_PUSH,rip); return; } break; } - ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0,t1,r1,d1,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0,t1,r1,d1,rip); ICU16(tmpi,0x5048+REG_RBX<<8); } @@ -341,7 +360,7 @@ U0 ICPushRegs(CIntermediateCode *tmpi,I64 mask) } } -U0 ICPop(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1,I64 ip) +U0 ICPop(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1,I64 rip) { switch (Bsr(t1)) { case MDf_REG: @@ -355,14 +374,14 @@ U0 ICPop(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1,I64 ip) case MDf_SIB: if (t1.raw_typeic_cnt; @@ -485,7 +504,7 @@ U0 ICMov(CIntermediateCode *tmpi, ICU64(tmpi,d2); } } else if (t2&MDF_STK) - ICPop(tmpi,t1,r1,d1,ip); + ICPop(tmpi,t1,r1,d1,rip); else { if (r1==r2 && t2&MDF_REG) goto move_done; @@ -515,16 +534,16 @@ U0 ICMov(CIntermediateCode *tmpi, default: ICU16(tmpi,i.u8[2]<<8+0x8B); } - ICModr2(tmpi,i,d2,ip+4); + ICModr2(tmpi,i,,d2,rip); } break; case MDf_STK: if (tmpi->ic_flags&ICF_PUSH_CMP) ICPopRegs(tmpi,1<ic_flags&ICF_PUSH_CMP) ICPushRegs(tmpi,1<ic_cnt+4); - switch (t1.raw_type) { - case RT_I8: - case RT_U8: - i--; - break; - case RT_I16: - case RT_U16: - i-=2; - break; - default: - i-=4; - } - ICU32(tmpi,i); - tmpi->ic_flags&=~ICF_CODE_FINAL; - } - + ICSlashOp(tmpi,t1,r1,d1,SLASH_OP_MOV_IMM,rip); switch (t1.raw_type) { case RT_I8: case RT_U8: @@ -582,10 +566,10 @@ U0 ICMov(CIntermediateCode *tmpi, } } else { if (t2&MDF_REG) - ICSlashOp(tmpi,t1,r1,d1,r2+SLASH_OP_MOV,ip); + ICSlashOp(tmpi,t1,r1,d1,r2+SLASH_OP_MOV,rip); else { - ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0,t2,r2,d2,ip); - ICMov(tmpi,t1,r1,d1,MDF_REG+RT_I64,REG_RBX,0,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0,t2,r2,d2,rip); + ICMov(tmpi,t1,r1,d1,MDF_REG+RT_I64,REG_RBX,0,rip); } } break; @@ -675,7 +659,7 @@ move_redundant: } U0 ICLea(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, - CICType t2,I64 r2,I64 d2,CCmpCtrl *cc,U8 *buf,I64 ip) + CICType t2,I64 r2,I64 d2,CCmpCtrl *cc,U8 *buf,I64 rip) { I64 i; CAOTAbsAddr *tmpa; @@ -684,7 +668,7 @@ U0 ICLea(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, i=ICModr1(r1,t2,r2,d2); i.u8[1]|=0x48; ICU24(tmpi,i.u8[2]<<16+0x8D00+i.u8[1]); - ICModr2(tmpi,i,d2,ip+4); + ICModr2(tmpi,i,,d2,rip); break; case MDf_STK: if (t2&MDF_RIP_DISP32) { @@ -695,30 +679,30 @@ U0 ICLea(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, tmpa->next=cc->aotc->abss; tmpa->type=AAT_ADD_U32; cc->aotc->abss=tmpa; - tmpa->ip=ip+tmpi->ic_cnt-4; + tmpa->rip=rip+tmpi->ic_cnt-4; } tmpi->ic_flags&=~ICF_CODE_FINAL; break; } // Fall thru default: - ICLea(tmpi,MDF_REG+RT_I64,REG_RCX,0,t2,r2,d2,cc,buf,ip); - ICMov(tmpi,t1,r1,d1,MDF_REG+RT_I64,REG_RCX,0,ip); + ICLea(tmpi,MDF_REG+RT_I64,REG_RCX,0,t2,r2,d2,cc,buf,rip); + ICMov(tmpi,t1,r1,d1,MDF_REG+RT_I64,REG_RCX,0,rip); } } -U0 ICDeref(CIntermediateCode *tmpi,I64 ip) +U0 ICDeref(CIntermediateCode *tmpi,I64 rip) { CICType t; - t=tmpi->r.type.raw_type; - if (t>tmpi->a1_type_pointed_to) - t=tmpi->a1_type_pointed_to; - if (tmpi->a1.type&MDF_REG) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_DISP+t,tmpi->a1.reg,tmpi->a1.disp,ip); + t=tmpi->res.type.raw_type; + if (t>tmpi->arg1_type_pointed_to) + t=tmpi->arg1_type_pointed_to; + if (tmpi->arg1.type&MDF_REG) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_DISP+t,tmpi->arg1.reg,tmpi->arg1.disp,rip); else { ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_DISP+t,REG_RCX,0,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_DISP+t,REG_RCX,0,rip); } } diff --git a/Compiler/CExcept.HC b/Compiler/CExcept.HC index 6d1c14d..20b7e6c 100644 --- a/Compiler/CExcept.HC +++ b/Compiler/CExcept.HC @@ -11,7 +11,7 @@ U0 LexPutToken(CCmpCtrl *cc) "FLOAT:%e",cc->cur_f64; else if (cc->token=='\n') ""; - else if (Bt(chars_bmp_displayable,cc->token)) + else if (Bt(char_bmp_displayable,cc->token)) '' cc->token; else { "T:%X",cc->token; @@ -187,38 +187,38 @@ U0 ICPut(CCmpCtrl *cc,CIntermediateCode *tmpi) if (opcode>=IC_END_EXP && opcode!=IC_NOP2) { "%15ts %016X ",intermediate_code_table[opcode].name,tmpi->ic_data; if (cc->pass) { - if (tmpi->r.type.mode) { - "$$PURPLE$$R:$$FG$$"; - ICArgPut(&tmpi->r,0); + if (tmpi->res.type.mode) { + "$$PURPLE$$RES:$$FG$$"; + ICArgPut(&tmpi->res,0); } - if (tmpi->a1.type.mode) { - "$$PURPLE$$A1:$$FG$$"; + if (tmpi->arg1.type.mode) { + "$$PURPLE$$ARG1:$$FG$$"; if (intermediate_code_table[tmpi->ic_code].type==IST_DEREF || intermediate_code_table[tmpi->ic_code].type==IST_ASSIGN) - ICArgPut(&tmpi->a1,tmpi->a1_type_pointed_to); + ICArgPut(&tmpi->arg1,tmpi->arg1_type_pointed_to); else - ICArgPut(&tmpi->a1,0); + ICArgPut(&tmpi->arg1,0); } - if (tmpi->a2.type.mode) { - "$$PURPLE$$A2:$$FG$$"; - ICArgPut(&tmpi->a2,0); + if (tmpi->arg2.type.mode) { + "$$PURPLE$$ARG2:$$FG$$"; + ICArgPut(&tmpi->arg2,0); } "$$PURPLE$$:$$FG$$"; } ICClassPut(tmpi->ic_class); if (tmpi->ic_flags & ICF_LOCK) "$$BROWN$$lock$$FG$$ "; - if (tmpi->ic_flags & ICF_A2_TO_F64) + if (tmpi->ic_flags & ICF_ARG2_TO_F64) "$$LTBLUE$$a2d$$FG$$ "; - if (tmpi->ic_flags & ICF_A2_TO_INT) + if (tmpi->ic_flags & ICF_ARG2_TO_INT) "$$GREEN$$a2i$$FG$$ "; - if (tmpi->ic_flags & ICF_A1_TO_F64) + if (tmpi->ic_flags & ICF_ARG1_TO_F64) "$$LTBLUE$$a1d$$FG$$ "; - if (tmpi->ic_flags & ICF_A1_TO_INT) + if (tmpi->ic_flags & ICF_ARG1_TO_INT) "$$GREEN$$a1i$$FG$$ "; - if (tmpi->ic_flags & ICF_R_TO_F64) + if (tmpi->ic_flags & ICF_RES_TO_F64) "$$LTBLUE$$rd$$FG$$ "; - if (tmpi->ic_flags & ICF_R_TO_INT) + if (tmpi->ic_flags & ICF_RES_TO_INT) "$$GREEN$$ri$$FG$$ "; if (tmpi->ic_flags & ICF_USE_F64) "[F64] "; diff --git a/Compiler/CExts.HC b/Compiler/CExts.HC index 7322bc5..13d2781 100644 --- a/Compiler/CExts.HC +++ b/Compiler/CExts.HC @@ -38,7 +38,7 @@ extern I64 PrsUnaryTerm( CCmpCtrl *cc,CPrsStk *ps,CMemberLst **_local_var,CArrayDim **_tmpad, I64 *max_prec,I64 *unary_pre_prec,I64 *paren_prec); extern U0 PrsVarInit2(CCmpCtrl *cc,U8 **_dst,CHashClass *tmpc, - CArrayDim *tmpad,U8 *data_addr_ip,U8 **_base,Bool data_heap,I64 pass); + CArrayDim *tmpad,U8 *data_addr_rip,U8 **_base,Bool data_heap,I64 pass); _extern CMP_TEMPLATES U32 cmp_templates[1]; _extern CMP_TEMPLATES_DONT_POP U32 cmp_templates_dont_pop[1]; _extern CMP_TEMPLATES_DONT_PUSH2 U32 cmp_templates_dont_push2[1]; diff --git a/Compiler/CHash.HC b/Compiler/CHash.HC index d4dde42..7c2ae81 100644 --- a/Compiler/CHash.HC +++ b/Compiler/CHash.HC @@ -21,7 +21,7 @@ I64 HashEntrySize(CHashSrcSym *tmph) if (StrCmp(tmph->str,KERNEL_MODULE_NAME)) return MSize(tmph(CHashGeneric *)->user_data0); else { - bfh=sys_boot_base-sizeof(CBinFile); + bfh=mem_boot_base-sizeof(CBinFile); return bfh->file_size; } case HTt_WORD: diff --git a/Compiler/CMain.HC b/Compiler/CMain.HC index f05fe24..9b9b680 100644 --- a/Compiler/CMain.HC +++ b/Compiler/CMain.HC @@ -14,7 +14,7 @@ U8 *LexStmt2Bin(CCmpCtrl *cc,I64 *_type,I64 cmp_flags=0) ICAdd(cc,IC_RET,0,0); if (res=COCCompile(cc,&size,NULL,_type)) { if (cc->flags&CCF_AOT_COMPILE) { - j=cc->aotc->ip; + j=cc->aotc->rip; k=(size+7)>>3; for (i=0;itype=IET_MAIN; - tmpie->ip=buf; + tmpie->rip=buf; QueIns(tmpie,res->last_ie); } if (cmp_flags&CMPF_ASM_BLK) @@ -173,7 +173,7 @@ CAOT *CmpBuf(U8 *buf,U8 *map_name=NULL, U0 CmpFixUpJITAsm(CCmpCtrl *cc,CAOT *tmpaot) { - I64 i,ip2=tmpaot->buf+tmpaot->ip,*str=NULL; + I64 i,rip2=tmpaot->buf+tmpaot->rip,*str=NULL; U8 *ptr; CCodeMisc *g_lb; CAOTAbsAddr *tmpa,*tmpa1; @@ -183,16 +183,16 @@ U0 CmpFixUpJITAsm(CCmpCtrl *cc,CAOT *tmpaot) tmpa=tmpaot->abss; while (tmpa) { tmpa1=tmpa->next; - ptr=ip2+tmpa->ip; + ptr=rip2+tmpa->rip; switch [tmpa->type] { - case AAT_ADD_U8: *ptr(U8 *) +=ip2; break; - case AAT_SUB_U8: *ptr(U8 *) -=ip2; break; - case AAT_ADD_U16: *ptr(U16 *)+=ip2; break; - case AAT_SUB_U16: *ptr(U16 *)-=ip2; break; - case AAT_ADD_U32: *ptr(U32 *)+=ip2; break; - case AAT_SUB_U32: *ptr(U32 *)-=ip2; break; - case AAT_ADD_U64: *ptr(I64 *)+=ip2; break; - case AAT_SUB_U64: *ptr(I64 *)-=ip2; break; + case AAT_ADD_U8: *ptr(U8 *) +=rip2; break; + case AAT_SUB_U8: *ptr(U8 *) -=rip2; break; + case AAT_ADD_U16: *ptr(U16 *)+=rip2; break; + case AAT_SUB_U16: *ptr(U16 *)-=rip2; break; + case AAT_ADD_U32: *ptr(U32 *)+=rip2; break; + case AAT_SUB_U32: *ptr(U32 *)-=rip2; break; + case AAT_ADD_U64: *ptr(I64 *)+=rip2; break; + case AAT_SUB_U64: *ptr(I64 *)-=rip2; break; } Free(tmpa); tmpa=tmpa1; @@ -214,9 +214,9 @@ U0 CmpFixUpJITAsm(CCmpCtrl *cc,CAOT *tmpaot) str=NULL; tmpex->type=HTT_EXPORT_SYS_SYM|HTF_IMM; if (tmpie->type==IET_IMM32_EXPORT||tmpie->type==IET_IMM64_EXPORT) - tmpex->val=tmpie->ip; + tmpex->val=tmpie->rip; else - tmpex->val=tmpie->ip+ip2; + tmpex->val=tmpie->rip+rip2; tmpex->src_link=tmpie->src_link; tmpie->src_link=NULL; HashAdd(tmpex,Fs->hash_table); @@ -249,7 +249,7 @@ U0 CmpFixUpJITAsm(CCmpCtrl *cc,CAOT *tmpaot) } } if (tmpex || g_lb) { - ptr=tmpie->ip+ip2; + ptr=tmpie->rip+rip2; switch [tmpie->type] { case IET_REL_I0: case IET_IMM_U0: @@ -294,7 +294,7 @@ U0 CmpFixUpJITAsm(CCmpCtrl *cc,CAOT *tmpaot) } Free(str); if (!cc->aot_depth && Bt(&cc->opts,OPTf_TRACE)) - Un(ip2,tmpaot->aot_U8s,64); + Un(rip2,tmpaot->aot_U8s,64); QueRem(tmpaot); Free(tmpaot); } @@ -302,7 +302,7 @@ U0 CmpFixUpJITAsm(CCmpCtrl *cc,CAOT *tmpaot) U0 CmpFixUpAOTAsm(CCmpCtrl *cc,CAOT *tmpaot) { CAOTCtrl *aotc=cc->aotc; - I64 i,ip2=tmpaot->ip+cc->aotc->ip; + I64 i,rip2=tmpaot->rip+cc->aotc->rip; U8 *ptr; CCodeMisc *g_lb=NULL; CAOTAbsAddr *tmpa,*tmpa1; @@ -312,19 +312,19 @@ U0 CmpFixUpAOTAsm(CCmpCtrl *cc,CAOT *tmpaot) while (tmpa) { tmpa1=tmpa->next; tmpa->next=aotc->abss; - ptr=tmpaot->buf+tmpaot->ip+tmpa->ip; + ptr=tmpaot->buf+tmpaot->rip+tmpa->rip; switch [tmpa->type] { - case AAT_ADD_U8: *ptr(U8 *)+=ip2; break; - case AAT_SUB_U8: *ptr(U8 *)-=ip2; break; - case AAT_ADD_U16: *ptr(U16 *)+=ip2; break; - case AAT_SUB_U16: *ptr(U16 *)-=ip2; break; - case AAT_ADD_U32: *ptr(U32 *)+=ip2; break; - case AAT_SUB_U32: *ptr(U32 *)-=ip2; break; - case AAT_ADD_U64: *ptr(I64 *)+=ip2; break; - case AAT_SUB_U64: *ptr(I64 *)-=ip2; break; + case AAT_ADD_U8: *ptr(U8 *)+=rip2; break; + case AAT_SUB_U8: *ptr(U8 *)-=rip2; break; + case AAT_ADD_U16: *ptr(U16 *)+=rip2; break; + case AAT_SUB_U16: *ptr(U16 *)-=rip2; break; + case AAT_ADD_U32: *ptr(U32 *)+=rip2; break; + case AAT_SUB_U32: *ptr(U32 *)-=rip2; break; + case AAT_ADD_U64: *ptr(I64 *)+=rip2; break; + case AAT_SUB_U64: *ptr(I64 *)-=rip2; break; } aotc->abss=tmpa; - tmpa->ip+=ip2; + tmpa->rip+=rip2; tmpa=tmpa1; } @@ -347,7 +347,7 @@ U0 CmpFixUpAOTAsm(CCmpCtrl *cc,CAOT *tmpaot) } else g_lb=NULL; - ptr=tmpaot->buf+tmpaot->ip+tmpie->ip; + ptr=tmpaot->buf+tmpaot->rip+tmpie->rip; if (g_lb) { i=g_lb->addr+tmpaot->buf; switch [tmpie->type] { @@ -401,12 +401,12 @@ U0 CmpFixUpAOTAsm(CCmpCtrl *cc,CAOT *tmpaot) case IET_IMM_I64: case IET_REL_I0: break; - case IET_REL_I8: *ptr(U8 *) -=ip2; break; - case IET_REL_I16: *ptr(U16 *)-=ip2; break; - case IET_REL_I32: *ptr(U32 *)-=ip2; break; - case IET_REL_I64: *ptr(I64 *)-=ip2; break; + case IET_REL_I8: *ptr(U8 *) -=rip2; break; + case IET_REL_I16: *ptr(U16 *)-=rip2; break; + case IET_REL_I32: *ptr(U32 *)-=rip2; break; + case IET_REL_I64: *ptr(I64 *)-=rip2; break; end: - tmpie->ip+=ip2; + tmpie->rip+=rip2; break; } tmpie->aot=NULL; @@ -452,7 +452,7 @@ I64 Cmp(U8 *filename,U8 *map_name=NULL,U8 *out_name=NULL,U8 mapfile_drv_let=0) while (tmpa) { tmpa1=tmpa->next; if (!(tmpa->type&IEF_IMM_NOT_REL)) - *ptr(U32 *)++ =tmpa->ip; + *ptr(U32 *)++ =tmpa->rip; Free(tmpa); tmpa=tmpa1; } @@ -480,7 +480,7 @@ I64 Cmp(U8 *filename,U8 *map_name=NULL,U8 *out_name=NULL,U8 mapfile_drv_let=0) tmphgr=tmphg->references; while (tmphgr) { tmphgr1=tmphgr->next; - *ptr(U32 *)++=tmphgr->ip; + *ptr(U32 *)++=tmphgr->rip; Free(tmphgr); tmphgr=tmphgr1; } @@ -496,7 +496,7 @@ I64 Cmp(U8 *filename,U8 *map_name=NULL,U8 *out_name=NULL,U8 mapfile_drv_let=0) if (!tmpie->type || IET_REL32_EXPORT<=tmpie->type<=IET_IMM64_EXPORT) { QueRem(tmpie); *ptr++=tmpie->type; - *ptr(U32 *)++=tmpie->ip; + *ptr(U32 *)++=tmpie->rip; if (tmpie->str) { i=StrLen(tmpie->str); MemCpy(ptr,tmpie->str,i+1); @@ -517,8 +517,8 @@ I64 Cmp(U8 *filename,U8 *map_name=NULL,U8 *out_name=NULL,U8 mapfile_drv_let=0) QueRem(tmpie); *ptr++=tmpie->type; if (tmpie->aot) - tmpie->ip+=tmpie->aot->ip2; - *ptr(U32 *)++=tmpie->ip; + tmpie->rip+=tmpie->aot->rip2; + *ptr(U32 *)++=tmpie->rip; if (tmpie->str) { i=StrLen(tmpie->str); MemCpy(ptr,tmpie->str,i+1); diff --git a/Compiler/CMisc.HC b/Compiler/CMisc.HC index 92e03ee..bcaa34c 100644 --- a/Compiler/CMisc.HC +++ b/Compiler/CMisc.HC @@ -151,7 +151,7 @@ U8 *CmdLinePmt() res=MAlloc(i+1+2); MemCpy(res,st,i+1); i--; - while (i>=0 && Bt(chars_bmp_white_space,res[i])) + while (i>=0 && Bt(char_bmp_white_space,res[i])) i--; i++; if (i>0 && res[i-1]==';') diff --git a/Compiler/Compiler.BIN b/Compiler/Compiler.BIN index 325fbb2..f7a5d98 100644 Binary files a/Compiler/Compiler.BIN and b/Compiler/Compiler.BIN differ diff --git a/Compiler/Compiler.MAP b/Compiler/Compiler.MAP index 4412671..95dcd75 100644 --- a/Compiler/Compiler.MAP +++ b/Compiler/Compiler.MAP @@ -7,8 +7,8 @@ $LK,"CmpRawTypePointed",A="FL:::/Compiler/OptLib.HC.Z,517",BI=6$ $LK,"OptFixupBinaryOp1",A="FL:::/Compiler/OptLib.HC.Z,96",BI=7$ $LK,"OptFixupBinaryOp2",A="FL:::/Compiler/OptLib.HC.Z,182",BI=8$ $LK,"COCInit",A="FL:::/Compiler/PrsLib.HC.Z,99",BI=9$ -$LK,"IsLexExpression2Bin",A="FL:::/Compiler/PrsExp.HC.Z,1128",BI=10$ -$LK,"CSubSwitch",A="FL:::/Compiler/PrsStmt.HC.Z,574"$ +$LK,"IsLexExpression2Bin",A="FL:::/Compiler/PrsExp.HC.Z,1129",BI=10$ +$LK,"CSubSwitch",A="FL:::/Compiler/PrsStmt.HC.Z,566"$ $LK,"LexFilePop",A="FL:::/Compiler/Lex.HC.Z,11",BI=11$ $LK,"ExePutS",A="FL:::/Compiler/CMain.HC.Z,571",BI=12$ $LK,"PrsStaticInit",A="FL:::/Compiler/PrsVar.HC.Z,215",BI=13$ @@ -21,163 +21,163 @@ $LK,"ICU8",A="FL:::/Compiler/BackLib.HC.Z,17",BI=18$ $LK,"AsmStoreNum",A="FL:::/Compiler/Asm.HC.Z,268",BI=19$ $LK,"OptPass012",A="FL:::/Compiler/OptPass012.HC.Z,23",BI=20$ $LK,"MemberLstSize",A="FL:::/Compiler/LexLib.HC.Z,221",BI=21$ -$LK,"ICQueIns",A="FL:::/Compiler/BackC.HC.Z,351",BI=22$ +$LK,"ICQueIns",A="FL:::/Compiler/BackC.HC.Z,354",BI=22$ $LK,"ICAndBranch",A="FL:::/Compiler/BackC.HC.Z,1",BI=23$ -$LK,"U",A="FL:::/Compiler/UAsm.HC.Z,645",BI=24$ -$LK,"ICQueRem",A="FL:::/Compiler/BackC.HC.Z,399",BI=25$ -$LK,"CN_R",A="FL:::/Compiler/BackFA.HC.Z,4"$ +$LK,"U",A="FL:::/Compiler/UAsm.HC.Z,653",BI=24$ +$LK,"ICQueRem",A="FL:::/Compiler/BackC.HC.Z,402",BI=25$ $LK,"LastFun",A="FL:::/Compiler/CMisc.HC.Z,48"$ $LK,"OptLead1",A="FL:::/Compiler/OptLib.HC.Z,73",BI=26$ $LK,"CmpNoteFloatOp",A="FL:::/Compiler/BackFA.HC.Z,6",BI=27$ -$LK,"AOTGlblsResolve",A="FL:::/Compiler/AsmResolve.HC.Z,76",BI=28$ +$LK,"AOTGlblsResolve",A="FL:::/Compiler/AsmResolve.HC.Z,77",BI=28$ $LK,"ExePutS2",A="FL:::/Compiler/CMain.HC.Z,631",BI=29$ $LK,"HashEntrySize",A="FL:::/Compiler/CHash.HC.Z,1",BI=30$ $LK,"COCPush",A="FL:::/Compiler/PrsLib.HC.Z,107",BI=31$ -$LK,"SLASH_OP_DEC",A="FL:::/Compiler/BackLib.HC.Z,245"$ +$LK,"SLASH_OP_DEC",A="FL:::/Compiler/BackLib.HC.Z,259"$ $LK,"MODR_SIB_D32_INDIRECT_REG",A="FL:::/Compiler/BackLib.HC.Z,132"$ -$LK,"ICPushRegs",A="FL:::/Compiler/BackLib.HC.Z,331",BI=32$ +$LK,"ICPushRegs",A="FL:::/Compiler/BackLib.HC.Z,350",BI=32$ $LK,"PE_POP_HIGHER",A="FL:::/Compiler/PrsExp.HC.Z,10"$ -$LK,"SLASH_OP_FLD",A="FL:::/Compiler/BackLib.HC.Z,260"$ +$LK,"SLASH_OP_FLD",A="FL:::/Compiler/BackLib.HC.Z,277"$ $LK,"ICU32",A="FL:::/Compiler/BackLib.HC.Z,47",BI=33$ $LK,"ICU24",A="FL:::/Compiler/BackLib.HC.Z,41",BI=34$ $LK,"ICU16",A="FL:::/Compiler/BackLib.HC.Z,35",BI=35$ -$LK,"SLASH_OP_DIV",A="FL:::/Compiler/BackLib.HC.Z,250"$ +$LK,"SLASH_OP_DIV",A="FL:::/Compiler/BackLib.HC.Z,266"$ $LK,"CmpFillTables",A="FL:::/Compiler/CInit.HC.Z,239",BI=36$ $LK,"AOTStoreCodeU32",A="FL:::/Compiler/AsmLib.HC.Z,30",BI=37$ $LK,"ICU64",A="FL:::/Compiler/BackLib.HC.Z,53",BI=38$ -$LK,"SLASH_OP_INC",A="FL:::/Compiler/BackLib.HC.Z,244"$ +$LK,"SLASH_OP_INC",A="FL:::/Compiler/BackLib.HC.Z,258"$ $LK,"AOTStoreCodeU64",A="FL:::/Compiler/AsmLib.HC.Z,68",BI=39$ $LK,"LexPopNoRestore",A="FL:::/Compiler/LexLib.HC.Z,38",BI=40$ $LK,"ExePrint",A="FL:::/Compiler/CMain.HC.Z,605",BI=41$ -$LK,"SLASH_OP_NEG",A="FL:::/Compiler/BackLib.HC.Z,247"$ +$LK,"SLASH_OP_NEG",A="FL:::/Compiler/BackLib.HC.Z,261"$ $LK,"PrsVarLst",A="FL:::/Compiler/PrsVar.HC.Z,416",BI=42$ -$LK,"PrsAsmDefine",A="FL:::/Compiler/Asm.HC.Z,813",BI=43$ +$LK,"PrsAsmDefine",A="FL:::/Compiler/Asm.HC.Z,814",BI=43$ $LK,"PrsAddOp",A="FL:::/Compiler/PrsExp.HC.Z,15",BI=44$ $LK,"LexWarn",A="FL:::/Compiler/CExcept.HC.Z,65",BI=45$ $LK,"PE_POP_ALL1",A="FL:::/Compiler/PrsExp.HC.Z,12"$ $LK,"PE_POP_ALL2",A="FL:::/Compiler/PrsExp.HC.Z,13"$ $LK,"COCAppend",A="FL:::/Compiler/PrsLib.HC.Z,126",BI=46$ $LK,"LexFilePush",A="FL:::/Compiler/Lex.HC.Z,1",BI=47$ -$LK,"CN_MAIN",A="FL:::/Compiler/BackFA.HC.Z,3"$ -$LK,"PrsUnaryModifier",A="FL:::/Compiler/PrsExp.HC.Z,954",BI=48$ +$LK,"PrsUnaryModifier",A="FL:::/Compiler/PrsExp.HC.Z,955",BI=48$ $LK,"OptFixupUnaryOp",A="FL:::/Compiler/OptLib.HC.Z,196",BI=49$ $LK,"LexPush",A="FL:::/Compiler/LexLib.HC.Z,12",BI=50$ -$LK,"SLASH_OP_MOV",A="FL:::/Compiler/BackLib.HC.Z,251"$ -$LK,"ICPopRegs",A="FL:::/Compiler/BackLib.HC.Z,372",BI=51$ -$LK,"SLASH_OP_MUL",A="FL:::/Compiler/BackLib.HC.Z,248"$ -$LK,"SLASH_OP_NOT",A="FL:::/Compiler/BackLib.HC.Z,246"$ +$LK,"SLASH_OP_MOV",A="FL:::/Compiler/BackLib.HC.Z,267"$ +$LK,"ICPopRegs",A="FL:::/Compiler/BackLib.HC.Z,391",BI=51$ +$LK,"SLASH_OP_MUL",A="FL:::/Compiler/BackLib.HC.Z,264"$ +$LK,"SLASH_OP_NOT",A="FL:::/Compiler/BackLib.HC.Z,260"$ $LK,"NUM_INTERNAL_TYPES",A="FL:::/Compiler/CInit.HC.Z,1"$ -$LK,"SLASH_OP_POP",A="FL:::/Compiler/BackLib.HC.Z,253"$ +$LK,"SLASH_OP_POP",A="FL:::/Compiler/BackLib.HC.Z,270"$ $LK,"ICFOp",A="FL:::/Compiler/BackFA.HC.Z,339",BI=52$ $LK,"CN_A1",A="FL:::/Compiler/BackFA.HC.Z,2"$ $LK,"CN_A2",A="FL:::/Compiler/BackFA.HC.Z,1"$ -$LK,"LexExpressionF64",A="FL:::/Compiler/PrsExp.HC.Z,1147",BI=53$ +$LK,"LexExpressionF64",A="FL:::/Compiler/PrsExp.HC.Z,1148",BI=53$ $LK,"ICAdd",A="FL:::/Compiler/PrsLib.HC.Z,79",BI=54$ $LK,"CmpRawType",A="FL:::/Compiler/OptLib.HC.Z,508",BI=55$ $LK,"ICFOpEqu",A="FL:::/Compiler/BackFB.HC.Z,1",BI=56$ -$LK,"LexExpressionI64",A="FL:::/Compiler/PrsExp.HC.Z,1133",BI=57$ -$LK,"ICQueInsRev",A="FL:::/Compiler/BackC.HC.Z,375",BI=58$ -$LK,"LexExpression",A="FL:::/Compiler/PrsExp.HC.Z,1161",BI=59$ +$LK,"LexExpressionI64",A="FL:::/Compiler/PrsExp.HC.Z,1134",BI=57$ +$LK,"ICQueInsRev",A="FL:::/Compiler/BackC.HC.Z,378",BI=58$ +$LK,"LexExpression",A="FL:::/Compiler/PrsExp.HC.Z,1162",BI=59$ $LK,"PrsExpression",A="FL:::/Compiler/PrsExp.HC.Z,264",BI=60$ $LK,"PrsClassNew",A="FL:::/Compiler/PrsLib.HC.Z,40",BI=61$ -$LK,"LexInStr",A="FL:::/Compiler/Lex.HC.Z,373",BI=62$ +$LK,"LexInStr",A="FL:::/Compiler/Lex.HC.Z,367",BI=62$ $LK,"internal_types_table",A="FL:::/Compiler/CInit.HC.Z,6"$ +$LK,"CN_INST",A="FL:::/Compiler/BackFA.HC.Z,3"$ $LK,"OptPass3",A="FL:::/Compiler/OptPass3.HC.Z,1",BI=63$ -$LK,"OptPass4",A="FL:::/Compiler/OptPass4.HC.Z,132",BI=64$ +$LK,"OptPass4",A="FL:::/Compiler/OptPass4.HC.Z,133",BI=64$ $LK,"OptPass5",A="FL:::/Compiler/OptPass5.HC.Z,1",BI=65$ $LK,"OptPass6",A="FL:::/Compiler/OptPass6.HC.Z,96",BI=66$ $LK,"MODR_REG",A="FL:::/Compiler/BackLib.HC.Z,126"$ $LK,"Echo",A="FL:::/Compiler/CMisc.HC.Z,63",BI=67$ $LK,"PrsGlblVarLst",A="FL:::/Compiler/PrsStmt.HC.Z,209",BI=68$ -$LK,"ICQueInit",A="FL:::/Compiler/BackC.HC.Z,337",BI=69$ +$LK,"ICQueInit",A="FL:::/Compiler/BackC.HC.Z,340",BI=69$ $LK,"ICCmp",A="FL:::/Compiler/BackB.HC.Z,102",BI=70$ $LK,"ICAddRSP",A="FL:::/Compiler/BackLib.HC.Z,59",BI=71$ -$LK,"ICDiv",A="FL:::/Compiler/BackA.HC.Z,391",BI=72$ -$LK,"ICDeref",A="FL:::/Compiler/BackLib.HC.Z,709",BI=73$ -$LK,"ICLea",A="FL:::/Compiler/BackLib.HC.Z,677",BI=74$ +$LK,"ICDiv",A="FL:::/Compiler/BackA.HC.Z,355",BI=72$ +$LK,"ICDeref",A="FL:::/Compiler/BackLib.HC.Z,693",BI=73$ +$LK,"ICLea",A="FL:::/Compiler/BackLib.HC.Z,661",BI=74$ $LK,"CmpBuf",A="FL:::/Compiler/CMain.HC.Z,157",BI=75$ $LK,"CMP_TEMPLATES_DONT_PUSH_POP",A="FL:::/Compiler/Templates.HC.Z,385"$ $LK,"ICAddEct",A="FL:::/Compiler/BackA.HC.Z,1",BI=76$ $LK,"ICToF64",A="FL:::/Compiler/BackB.HC.Z,283",BI=77$ -$LK,"PrsBinFile",A="FL:::/Compiler/Asm.HC.Z,887",BI=78$ +$LK,"PrsBinFile",A="FL:::/Compiler/Asm.HC.Z,888",BI=78$ $LK,"HashTableSize2",A="FL:::/Compiler/CHash.HC.Z,72",BI=79$ $LK,"HashEntrySize2",A="FL:::/Compiler/CHash.HC.Z,33",BI=80$ -$LK,"Ui",A="FL:::/Compiler/UAsm.HC.Z,238",BI=81$ -$LK,"ICSlashOp",A="FL:::/Compiler/BackLib.HC.Z,265",BI=82$ +$LK,"Ui",A="FL:::/Compiler/UAsm.HC.Z,245",BI=81$ +$LK,"ICSlashOp",A="FL:::/Compiler/BackLib.HC.Z,282",BI=82$ $LK,"OptBrZero",A="FL:::/Compiler/OptLib.HC.Z,230",BI=83$ -$LK,"Un",A="FL:::/Compiler/UAsm.HC.Z,660",BI=84$ +$LK,"Un",A="FL:::/Compiler/UAsm.HC.Z,668",BI=84$ $LK,"PrsSizeOf",A="FL:::/Compiler/PrsExp.HC.Z,298",BI=85$ $LK,"ICToI64",A="FL:::/Compiler/BackB.HC.Z,277",BI=86$ -$LK,"ICMod",A="FL:::/Compiler/BackA.HC.Z,461",BI=87$ +$LK,"ICMod",A="FL:::/Compiler/BackA.HC.Z,425",BI=87$ $LK,"OptSetNOP1",A="FL:::/Compiler/OptLib.HC.Z,17",BI=88$ $LK,"OptPass789A",A="FL:::/Compiler/OptPass789A.HC.Z,1",BI=89$ $LK,"OptSetNOP2",A="FL:::/Compiler/OptLib.HC.Z,25",BI=90$ $LK,"FBO1_F64",A="FL:::/Compiler/OptLib.HC.Z,94"$ -$LK,"ICXorEqu",A="FL:::/Compiler/BackC.HC.Z,578",BI=91$ +$LK,"ICXorEqu",A="FL:::/Compiler/BackC.HC.Z,581",BI=91$ $LK,"ICToUpper",A="FL:::/Compiler/BackB.HC.Z,266",BI=92$ $LK,"AsmLexExpression",A="FL:::/Compiler/AsmLib.HC.Z,127",BI=93$ -$LK,"ICMov",A="FL:::/Compiler/BackLib.HC.Z,426",BI=94$ +$LK,"ICMov",A="FL:::/Compiler/BackLib.HC.Z,445",BI=94$ $LK,"ICNot",A="FL:::/Compiler/BackB.HC.Z,10",BI=95$ -$LK,"ICMul",A="FL:::/Compiler/BackA.HC.Z,263",BI=96$ +$LK,"ICMul",A="FL:::/Compiler/BackA.HC.Z,224",BI=96$ $LK,"ICRex",A="FL:::/Compiler/BackLib.HC.Z,22",BI=97$ -$LK,"ICPop",A="FL:::/Compiler/BackLib.HC.Z,344",BI=98$ -$LK,"SLASH_OP_FADD",A="FL:::/Compiler/BackLib.HC.Z,254"$ +$LK,"ICPop",A="FL:::/Compiler/BackLib.HC.Z,363",BI=98$ +$LK,"SLASH_OP_FADD",A="FL:::/Compiler/BackLib.HC.Z,271"$ $LK,"MODR_RIP_REL",A="FL:::/Compiler/BackLib.HC.Z,133"$ $LK,"LexStmt2Bin",A="FL:::/Compiler/CMain.HC.Z,1",BI=99$ -$LK,"ICSub",A="FL:::/Compiler/BackA.HC.Z,205",BI=100$ +$LK,"ICSub",A="FL:::/Compiler/BackA.HC.Z,166",BI=100$ $LK,"COCFloatConstFind",A="FL:::/Compiler/PrsLib.HC.Z,164",BI=101$ $LK,"ICPut",A="FL:::/Compiler/CExcept.HC.Z,184",BI=102$ $LK,"PrsArrayDims",A="FL:::/Compiler/PrsVar.HC.Z,247",BI=103$ -$LK,"ICSqr",A="FL:::/Compiler/BackC.HC.Z,453",BI=104$ +$LK,"ICSqr",A="FL:::/Compiler/BackC.HC.Z,456",BI=104$ $LK,"FBO1_NOT_CONST",A="FL:::/Compiler/OptLib.HC.Z,92"$ $LK,"CMP_TEMPLATES_DONT_POP",A="FL:::/Compiler/Templates.HC.Z,173"$ $LK,"PrsClass",A="FL:::/Compiler/PrsStmt.HC.Z,1",BI=105$ +$LK,"SLASH_OP_MOV_IMM",A="FL:::/Compiler/BackLib.HC.Z,268"$ $LK,"MemberMetaData",A="FL:::/Compiler/LexLib.HC.Z,45",BI=106$ -$LK,"ICSwitch",A="FL:::/Compiler/BackC.HC.Z,599",BI=107$ +$LK,"ICSwitch",A="FL:::/Compiler/BackC.HC.Z,602",BI=107$ $LK,"OptBrNotZero",A="FL:::/Compiler/OptLib.HC.Z,357",BI=108$ $LK,"LexPutToken",A="FL:::/Compiler/CExcept.HC.Z,1",BI=109$ -$LK,"SLASH_OP_FDIV",A="FL:::/Compiler/BackLib.HC.Z,258"$ +$LK,"SLASH_OP_FDIV",A="FL:::/Compiler/BackLib.HC.Z,275"$ $LK,"AsmHashLoad",A="FL:::/Compiler/AsmInit.HC.Z,50",BI=110$ -$LK,"UAsmHashLoad",A="FL:::/Compiler/UAsm.HC.Z,188",BI=111$ +$LK,"UAsmHashLoad",A="FL:::/Compiler/UAsm.HC.Z,195",BI=111$ $LK,"UnusedExternWarning",A="FL:::/Compiler/CExcept.HC.Z,104",BI=112$ -$LK,"SLASH_OP_FILD",A="FL:::/Compiler/BackLib.HC.Z,263"$ +$LK,"SLASH_OP_FILD",A="FL:::/Compiler/BackLib.HC.Z,280"$ $LK,"ICXorXor",A="FL:::/Compiler/BackB.HC.Z,75",BI=113$ -$LK,"PrsTryBlk",A="FL:::/Compiler/PrsStmt.HC.Z,850",BI=114$ +$LK,"PrsTryBlk",A="FL:::/Compiler/PrsStmt.HC.Z,842",BI=114$ $LK,"CInit",A="FL:::/Compiler/CMain.HC.Z,691",BI=115$ $LK,"MemberMetaFind",A="FL:::/Compiler/LexLib.HC.Z,56",BI=116$ $LK,"ExePrint2",A="FL:::/Compiler/CMain.HC.Z,648",BI=117$ $LK,"FBO1_INT",A="FL:::/Compiler/OptLib.HC.Z,93"$ $LK,"PE_DO_UNARY_OP",A="FL:::/Compiler/PrsExp.HC.Z,8"$ $LK,"PrsVarInit",A="FL:::/Compiler/PrsVar.HC.Z,1",BI=118$ -$LK,"ICOrEqu",A="FL:::/Compiler/BackC.HC.Z,557",BI=119$ -$LK,"ICModr1",A="FL:::/Compiler/BackLib.HC.Z,135",BI=120$ -$LK,"ICModr2",A="FL:::/Compiler/BackLib.HC.Z,213",BI=121$ -$LK,"SLASH_OP_FMUL",A="FL:::/Compiler/BackLib.HC.Z,257"$ +$LK,"ICOrEqu",A="FL:::/Compiler/BackC.HC.Z,560",BI=119$ +$LK,"ICModr1",A="FL:::/Compiler/BackLib.HC.Z,136",BI=120$ +$LK,"ICModr2",A="FL:::/Compiler/BackLib.HC.Z,214",BI=121$ +$LK,"SLASH_OP_FMUL",A="FL:::/Compiler/BackLib.HC.Z,274"$ $LK,"ICPreIncDec",A="FL:::/Compiler/BackB.HC.Z,304",BI=122$ $LK,"PrsUnaryTerm",A="FL:::/Compiler/PrsExp.HC.Z,588",BI=123$ $LK,"MemberLstDel",A="FL:::/Compiler/LexLib.HC.Z,183",BI=124$ -$LK,"SLASH_OP_FSUB",A="FL:::/Compiler/BackLib.HC.Z,255"$ +$LK,"SLASH_OP_FSUB",A="FL:::/Compiler/BackLib.HC.Z,272"$ $LK,"ICAndAnd",A="FL:::/Compiler/BackB.HC.Z,30",BI=125$ $LK,"InstEntriesCompare",A="FL:::/Compiler/UAsm.HC.Z,1",BI=126$ -$LK,"SLASH_OP_IMUL",A="FL:::/Compiler/BackLib.HC.Z,249"$ +$LK,"SLASH_OP_IMUL",A="FL:::/Compiler/BackLib.HC.Z,265"$ $LK,"MemberLstCmp",A="FL:::/Compiler/LexLib.HC.Z,157",BI=127$ -$LK,"SLASH_OP_FSTP",A="FL:::/Compiler/BackLib.HC.Z,261"$ +$LK,"SLASH_OP_FSTP",A="FL:::/Compiler/BackLib.HC.Z,278"$ $LK,"COCDel",A="FL:::/Compiler/PrsLib.HC.Z,186",BI=128$ $LK,"PE_UNARY_TERM1",A="FL:::/Compiler/PrsExp.HC.Z,1"$ -$LK,"ICFAdd",A="FL:::/Compiler/BackFB.HC.Z,504",BI=129$ +$LK,"ICFAdd",A="FL:::/Compiler/BackFB.HC.Z,515",BI=129$ $LK,"PE_UNARY_TERM2",A="FL:::/Compiler/PrsExp.HC.Z,2"$ $LK,"CmdLinePmt",A="FL:::/Compiler/CMisc.HC.Z,127",BI=130$ $LK,"AsmMakeArgMask",A="FL:::/Compiler/Asm.HC.Z,177",BI=131$ $LK,"COCHeaderPut",A="FL:::/Compiler/PrsLib.HC.Z,229",BI=132$ $LK,"PrsGlblInit",A="FL:::/Compiler/PrsVar.HC.Z,206",BI=133$ -$LK,"ICAndEqu",A="FL:::/Compiler/BackC.HC.Z,536",BI=134$ +$LK,"ICAndEqu",A="FL:::/Compiler/BackC.HC.Z,539",BI=134$ $LK,"LexD2I32",A="FL:::/Compiler/CMisc.HC.Z,91",BI=135$ $LK,"MemberLstNew",A="FL:::/Compiler/LexLib.HC.Z,150",BI=136$ $LK,"LexD3I32",A="FL:::/Compiler/CMisc.HC.Z,107",BI=137$ $LK,"OptClassFwd",A="FL:::/Compiler/OptLib.HC.Z,9",BI=138$ -$LK,"ICFCmp",A="FL:::/Compiler/BackFA.HC.Z,515",BI=139$ -$LK,"PrsSwitch",A="FL:::/Compiler/PrsStmt.HC.Z,586",BI=140$ -$LK,"ICFDiv",A="FL:::/Compiler/BackFB.HC.Z,493",BI=141$ +$LK,"ICFCmp",A="FL:::/Compiler/BackFA.HC.Z,519",BI=139$ +$LK,"PrsSwitch",A="FL:::/Compiler/PrsStmt.HC.Z,578",BI=140$ +$LK,"ICFDiv",A="FL:::/Compiler/BackFB.HC.Z,504",BI=141$ $LK,"AOTStoreCodeU8At",A="FL:::/Compiler/AsmLib.HC.Z,106",BI=142$ $LK,"PE_PUSH_LOWER",A="FL:::/Compiler/PrsExp.HC.Z,11"$ $LK,"OptPass6Lag",A="FL:::/Compiler/OptPass6.HC.Z,28",BI=143$ @@ -189,33 +189,33 @@ $LK,"ICFCvt",A="FL:::/Compiler/BackFA.HC.Z,123",BI=147$ $LK,"StreamDir",A="FL:::/Compiler/CMisc.HC.Z,82",BI=148$ $LK,"PrsOffsetOf",A="FL:::/Compiler/PrsExp.HC.Z,348",BI=149$ $LK,"GetOption",A="FL:::/Compiler/CMisc.HC.Z,6",BI=150$ -$LK,"PrsDoWhile",A="FL:::/Compiler/PrsStmt.HC.Z,514",BI=151$ -$LK,"ICShift",A="FL:::/Compiler/BackA.HC.Z,609",BI=152$ +$LK,"PrsDoWhile",A="FL:::/Compiler/PrsStmt.HC.Z,506",BI=151$ +$LK,"ICShift",A="FL:::/Compiler/BackA.HC.Z,573",BI=152$ $LK,"ICFMod",A="FL:::/Compiler/BackFA.HC.Z,242",BI=153$ $LK,"COCPop",A="FL:::/Compiler/PrsLib.HC.Z,121",BI=154$ $LK,"PrsExpression2",A="FL:::/Compiler/PrsExp.HC.Z,65",BI=155$ -$LK,"SLASH_OP_PUSH",A="FL:::/Compiler/BackLib.HC.Z,252"$ +$LK,"SLASH_OP_PUSH",A="FL:::/Compiler/BackLib.HC.Z,269"$ $LK,"PE_DEREFERENCE",A="FL:::/Compiler/PrsExp.HC.Z,5"$ $LK,"LexPopRestore",A="FL:::/Compiler/LexLib.HC.Z,23",BI=156$ $LK,"ICUnaries",A="FL:::/Compiler/BackB.HC.Z,1",BI=157$ -$LK,"ICFMul",A="FL:::/Compiler/BackFB.HC.Z,477",BI=158$ -$LK,"ICShiftEqu",A="FL:::/Compiler/BackA.HC.Z,639",BI=159$ -$LK,"LexExpression2Bin",A="FL:::/Compiler/PrsExp.HC.Z,1110",BI=160$ +$LK,"ICFMul",A="FL:::/Compiler/BackFB.HC.Z,488",BI=158$ +$LK,"ICShiftEqu",A="FL:::/Compiler/BackA.HC.Z,603",BI=159$ +$LK,"LexExpression2Bin",A="FL:::/Compiler/PrsExp.HC.Z,1111",BI=160$ $LK,"ICFPow",A="FL:::/Compiler/BackFA.HC.Z,266",BI=161$ $LK,"MapFileWrite",A="FL:::/Compiler/CHash.HC.Z,90",BI=162$ -$LK,"ICFSub",A="FL:::/Compiler/BackFB.HC.Z,540",BI=163$ -$LK,"ICFModEqu",A="FL:::/Compiler/BackFA.HC.Z,545",BI=164$ +$LK,"ICFSub",A="FL:::/Compiler/BackFB.HC.Z,551",BI=163$ +$LK,"ICFModEqu",A="FL:::/Compiler/BackFA.HC.Z,549",BI=164$ $LK,"CmpF1PushPop",A="FL:::/Compiler/OptLib.HC.Z,535",BI=165$ $LK,"OptFree",A="FL:::/Compiler/OptLib.HC.Z,33",BI=166$ $LK,"CMP_TEMPLATES_DONT_PUSH2",A="FL:::/Compiler/Templates.HC.Z,447"$ $LK,"CInternalType",A="FL:::/Compiler/CInit.HC.Z,3"$ $LK,"LexDollar",A="FL:::/Compiler/Lex.HC.Z,93",BI=167$ -$LK,"AsmUnresolvedAdd",A="FL:::/Compiler/AsmResolve.HC.Z,188",BI=168$ +$LK,"AsmUnresolvedAdd",A="FL:::/Compiler/AsmResolve.HC.Z,189",BI=168$ $LK,"AOTStoreCodeU8",A="FL:::/Compiler/AsmLib.HC.Z,1",BI=169$ $LK,"ICBitOps",A="FL:::/Compiler/BackB.HC.Z,202",BI=170$ $LK,"lex_zeros",A="FL:::/Compiler/Lex.HC.Z,91"$ $LK,"ClassMemberLstDel",A="FL:::/Compiler/LexLib.HC.Z,209",BI=171$ -$LK,"CSwitchCase",A="FL:::/Compiler/PrsStmt.HC.Z,579"$ +$LK,"CSwitchCase",A="FL:::/Compiler/PrsStmt.HC.Z,571"$ $LK,"AsmResolve",A="FL:::/Compiler/AsmResolve.HC.Z,1",BI=172$ $LK,"PrsAsmInst",A="FL:::/Compiler/Asm.HC.Z,395",BI=173$ $LK,"COCCompile",A="FL:::/Compiler/PrsLib.HC.Z,249",BI=174$ @@ -224,19 +224,20 @@ $LK,"Cmp",A="FL:::/Compiler/CMain.HC.Z,419",BI=176$ $LK,"PrsPush2",A="FL:::/Compiler/PrsLib.HC.Z,11",BI=177$ $LK,"ICArgPut",A="FL:::/Compiler/CExcept.HC.Z,141",BI=178$ $LK,"UndefinedExtern",A="FL:::/Compiler/CExcept.HC.Z,98",BI=179$ +$LK,"CN_RES",A="FL:::/Compiler/BackFA.HC.Z,4"$ $LK,"OptIC4",A="FL:::/Compiler/OptPass4.HC.Z,1",BI=180$ $LK,"OptIC6",A="FL:::/Compiler/OptPass6.HC.Z,1",BI=181$ $LK,"ICCmpAndBranch",A="FL:::/Compiler/BackB.HC.Z,468",BI=182$ -$LK,"ICDivEqu",A="FL:::/Compiler/BackA.HC.Z,408",BI=183$ -$LK,"PrsWhile",A="FL:::/Compiler/PrsStmt.HC.Z,494",BI=184$ -$LK,"ICFCmpAndBranch",A="FL:::/Compiler/BackFB.HC.Z,219",BI=185$ -$LK,"Lex",A="FL:::/Compiler/Lex.HC.Z,447",BI=186$ -$LK,"ICTestAndBranch",A="FL:::/Compiler/BackB.HC.Z,634",BI=187$ +$LK,"ICDivEqu",A="FL:::/Compiler/BackA.HC.Z,372",BI=183$ +$LK,"PrsWhile",A="FL:::/Compiler/PrsStmt.HC.Z,486",BI=184$ +$LK,"ICFCmpAndBranch",A="FL:::/Compiler/BackFB.HC.Z,226",BI=185$ +$LK,"Lex",A="FL:::/Compiler/Lex.HC.Z,441",BI=186$ +$LK,"ICTestAndBranch",A="FL:::/Compiler/BackB.HC.Z,640",BI=187$ $LK,"uasm",A="FL:::/Compiler/Compiler.PRJ.Z,21"$ $LK,"MODR_INDIRECT_REG",A="FL:::/Compiler/BackLib.HC.Z,127"$ $LK,"PE_MAYBE_MODIFIERS",A="FL:::/Compiler/PrsExp.HC.Z,3"$ $LK,"PE_UNARY_MODIFIERS",A="FL:::/Compiler/PrsExp.HC.Z,4"$ -$LK,"AOTLocalsResolve",A="FL:::/Compiler/AsmResolve.HC.Z,42",BI=188$ +$LK,"AOTLocalsResolve",A="FL:::/Compiler/AsmResolve.HC.Z,43",BI=188$ $LK,"PE_DO_BINARY_OP",A="FL:::/Compiler/PrsExp.HC.Z,9"$ $LK,"CmpFixUpAOTAsm",A="FL:::/Compiler/CMain.HC.Z,302",BI=189$ $LK,"OptLabelFwd",A="FL:::/Compiler/OptLib.HC.Z,1",BI=190$ @@ -248,61 +249,62 @@ $LK,"CmpJoin",A="FL:::/Compiler/CMain.HC.Z,35",BI=194$ $LK,"PrsPop2",A="FL:::/Compiler/PrsLib.HC.Z,16",BI=195$ $LK,"CMP_TEMPLATES",A="FL:::/Compiler/Templates.HC.Z,4"$ $LK,"MODR_D8_INDIRECT_REG",A="FL:::/Compiler/BackLib.HC.Z,128"$ -$LK,"PrsAsmBlk",A="FL:::/Compiler/Asm.HC.Z,903",BI=196$ +$LK,"PrsAsmBlk",A="FL:::/Compiler/Asm.HC.Z,904",BI=196$ $LK,"PrsAsmArg",A="FL:::/Compiler/Asm.HC.Z,35",BI=197$ -$LK,"LexFirstRem",A="FL:::/Compiler/Lex.HC.Z,277",BI=198$ +$LK,"LexFirstRem",A="FL:::/Compiler/Lex.HC.Z,271",BI=198$ $LK,"MemberClassBaseFind",A="FL:::/Compiler/LexLib.HC.Z,87",BI=199$ $LK,"MemberFind",A="FL:::/Compiler/LexLib.HC.Z,67",BI=200$ $LK,"cmp",A="FL:::/Compiler/Compiler.PRJ.Z,16"$ $LK,"OptLag",A="FL:::/Compiler/OptLib.HC.Z,40",BI=201$ $LK,"ICPostIncDec",A="FL:::/Compiler/BackB.HC.Z,345",BI=202$ -$LK,"ICFPostIncDec",A="FL:::/Compiler/BackFB.HC.Z,582",BI=203$ -$LK,"ICTest",A="FL:::/Compiler/BackLib.HC.Z,394",BI=204$ -$LK,"ICModU64",A="FL:::/Compiler/BackC.HC.Z,460",BI=205$ +$LK,"ICFPostIncDec",A="FL:::/Compiler/BackFB.HC.Z,593",BI=203$ +$LK,"ICTest",A="FL:::/Compiler/BackLib.HC.Z,413",BI=204$ +$LK,"ICModU64",A="FL:::/Compiler/BackC.HC.Z,463",BI=205$ $LK,"PrsAsmImm",A="FL:::/Compiler/Asm.HC.Z,1",BI=206$ $LK,"LexExtStr",A="FL:::/Compiler/LexLib.HC.Z,248",BI=207$ -$LK,"ICAddSubEctEqu",A="FL:::/Compiler/BackA.HC.Z,478",BI=208$ +$LK,"ICAddSubEctEqu",A="FL:::/Compiler/BackA.HC.Z,442",BI=208$ $LK,"ICAddSubEctImm",A="FL:::/Compiler/BackA.HC.Z,56",BI=209$ -$LK,"ICPush",A="FL:::/Compiler/BackLib.HC.Z,293",BI=210$ -$LK,"ICSwap",A="FL:::/Compiler/BackC.HC.Z,487",BI=211$ +$LK,"ICPush",A="FL:::/Compiler/BackLib.HC.Z,312",BI=210$ +$LK,"ICSwap",A="FL:::/Compiler/BackC.HC.Z,490",BI=211$ $LK,"CMP_TEMPLATES_DONT_PUSH",A="FL:::/Compiler/Templates.HC.Z,260"$ $LK,"intermediate_code_table",A="FL:::/Compiler/CInit.HC.Z,16"$ -$LK,"ICZero",A="FL:::/Compiler/BackLib.HC.Z,385",BI=212$ +$LK,"ICZero",A="FL:::/Compiler/BackLib.HC.Z,404",BI=212$ $LK,"CmpCtrlDel",A="FL:::/Compiler/Lex.HC.Z,58",BI=213$ $LK,"ICClassPut",A="FL:::/Compiler/CExcept.HC.Z,117",BI=214$ $LK,"ICAssign",A="FL:::/Compiler/BackC.HC.Z,159",BI=215$ -$LK,"ICFTemplateFun",A="FL:::/Compiler/BackFB.HC.Z,606",BI=216$ +$LK,"ICFTemplateFun",A="FL:::/Compiler/BackFB.HC.Z,617",BI=216$ $LK,"RunFile",A="FL:::/Compiler/CMain.HC.Z,625",BI=217$ $LK,"MemberAdd",A="FL:::/Compiler/LexLib.HC.Z,103",BI=218$ $LK,"PrsPush",A="FL:::/Compiler/PrsLib.HC.Z,1",BI=219$ -$LK,"SLASH_OP_FDIVR",A="FL:::/Compiler/BackLib.HC.Z,259"$ -$LK,"SLASH_OP_FISTTP",A="FL:::/Compiler/BackLib.HC.Z,262"$ +$LK,"SLASH_OP_FDIVR",A="FL:::/Compiler/BackLib.HC.Z,276"$ +$LK,"SLASH_OP_FISTTP",A="FL:::/Compiler/BackLib.HC.Z,279"$ $LK,"CmpCtrlSize",A="FL:::/Compiler/Lex.HC.Z,70",BI=220$ -$LK,"ICLocalVarInit",A="FL:::/Compiler/BackC.HC.Z,758",BI=221$ -$LK,"PrsFor",A="FL:::/Compiler/PrsStmt.HC.Z,537",BI=222$ +$LK,"ICLocalVarInit",A="FL:::/Compiler/BackC.HC.Z,761",BI=221$ +$LK,"PrsFor",A="FL:::/Compiler/PrsStmt.HC.Z,529",BI=222$ $LK,"PassTrace",A="FL:::/Compiler/CMisc.HC.Z,50",BI=223$ $LK,"PrsPopDeref",A="FL:::/Compiler/PrsLib.HC.Z,21",BI=224$ $LK,"ICCopyTemplate",A="FL:::/Compiler/BackFA.HC.Z,77",BI=225$ -$LK,"PrsStmt",A="FL:::/Compiler/PrsStmt.HC.Z,912",BI=226$ +$LK,"PrsStmt",A="FL:::/Compiler/PrsStmt.HC.Z,904",BI=226$ $LK,"PrsFun",A="FL:::/Compiler/PrsStmt.HC.Z,140",BI=227$ -$LK,"LexIncludeStr",A="FL:::/Compiler/Lex.HC.Z,299",BI=228$ +$LK,"LexIncludeStr",A="FL:::/Compiler/Lex.HC.Z,293",BI=228$ $LK,"PrsType",A="FL:::/Compiler/PrsVar.HC.Z,287",BI=229$ $LK,"CmpCtrlNew",A="FL:::/Compiler/Lex.HC.Z,28",BI=230$ $LK,"MODR_SIB_D8_INDIRECT_REG",A="FL:::/Compiler/BackLib.HC.Z,131"$ -$LK,"cmp_type_flags_src_code",A="FL:::/Compiler/Lex.HC.Z,328"$ +$LK,"cmp_type_flags_src_code",A="FL:::/Compiler/Lex.HC.Z,322"$ $LK,"PrsVarInit2",A="FL:::/Compiler/PrsVar.HC.Z,123",BI=231$ $LK,"PrsPop",A="FL:::/Compiler/PrsLib.HC.Z,6",BI=232$ $LK,"asm_seg_prefixes",A="FL:::/Compiler/Asm.HC.Z,393"$ -$LK,"ICMinMax",A="FL:::/Compiler/BackC.HC.Z,415",BI=233$ +$LK,"ICMinMax",A="FL:::/Compiler/BackC.HC.Z,418",BI=233$ $LK,"CmpLoadDefines",A="FL:::/Compiler/CInit.HC.Z,204",BI=234$ -$LK,"PrsIf",A="FL:::/Compiler/PrsStmt.HC.Z,467",BI=235$ -$LK,"ICBuiltInFloatConst",A="FL:::/Compiler/BackLib.HC.Z,404",BI=236$ +$LK,"PrsIf",A="FL:::/Compiler/PrsStmt.HC.Z,459",BI=235$ +$LK,"ICBuiltInFloatConst",A="FL:::/Compiler/BackLib.HC.Z,423",BI=236$ $LK,"ICFUnaryMinus",A="FL:::/Compiler/BackFA.HC.Z,194",BI=237$ -$LK,"LexDocRead",A="FL:::/Compiler/Lex.HC.Z,311",BI=238$ +$LK,"LexDocRead",A="FL:::/Compiler/Lex.HC.Z,305",BI=238$ $LK,"CmpFixUpJITAsm",A="FL:::/Compiler/CMain.HC.Z,174",BI=239$ $LK,"COCPopNoFree",A="FL:::/Compiler/PrsLib.HC.Z,114",BI=240$ $LK,"ParenWarning",A="FL:::/Compiler/CExcept.HC.Z,110",BI=241$ $LK,"PrsFunCall",A="FL:::/Compiler/PrsExp.HC.Z,378",BI=242$ +$LK,"SLASH_OP_IMM_U32",A="FL:::/Compiler/BackLib.HC.Z,263"$ $LK,"ICDerefPostIncDec",A="FL:::/Compiler/BackB.HC.Z,384",BI=243$ $LK,"Option",A="FL:::/Compiler/CMisc.HC.Z,1",BI=244$ $LK,"ExeFile2",A="FL:::/Compiler/CMain.HC.Z,657",BI=245$ @@ -311,14 +313,15 @@ $LK,"PE_CHECK_BINARY_OPS1",A="FL:::/Compiler/PrsExp.HC.Z,6"$ $LK,"PE_CHECK_BINARY_OPS2",A="FL:::/Compiler/PrsExp.HC.Z,7"$ $LK,"LexBackupLastChar",A="FL:::/Compiler/LexLib.HC.Z,1",BI=246$ $LK,"Trace",A="FL:::/Compiler/CMisc.HC.Z,58",BI=247$ -$LK,"ICBrBitOps",A="FL:::/Compiler/BackC.HC.Z,206",BI=248$ +$LK,"ICBrBitOps",A="FL:::/Compiler/BackC.HC.Z,208",BI=248$ $LK,"MODR_D32_INDIRECT_REG",A="FL:::/Compiler/BackLib.HC.Z,129"$ $LK,"LexGetChar",A="FL:::/Compiler/Lex.HC.Z,107",BI=249$ -$LK,"LexSkipEol",A="FL:::/Compiler/Lex.HC.Z,270",BI=250$ -$LK,"ICFlagBranch",A="FL:::/Compiler/BackB.HC.Z,682",BI=251$ -$LK,"SLASH_OP_FSUBR",A="FL:::/Compiler/BackLib.HC.Z,256"$ -$LK,"ICFPreIncDec",A="FL:::/Compiler/BackFB.HC.Z,562",BI=252$ +$LK,"LexSkipEol",A="FL:::/Compiler/Lex.HC.Z,264",BI=250$ +$LK,"ICFlagBranch",A="FL:::/Compiler/BackB.HC.Z,688",BI=251$ +$LK,"SLASH_OP_FSUBR",A="FL:::/Compiler/BackLib.HC.Z,273"$ +$LK,"ICFPreIncDec",A="FL:::/Compiler/BackFB.HC.Z,573",BI=252$ $LK,"MODR_SIB_INDIRECT_REG",A="FL:::/Compiler/BackLib.HC.Z,130"$ +$LK,"SLASH_OP_IMM_U8",A="FL:::/Compiler/BackLib.HC.Z,262"$ $LK,"ExeFile",A="FL:::/Compiler/CMain.HC.Z,614",BI=253$ $LK,"COCMiscNew",A="FL:::/Compiler/PrsLib.HC.Z,143",BI=254$ $LK,"cmp_templates_dont_pop",A="FL:::/Compiler/CExts.HC.Z,43"$ @@ -332,99 +335,94 @@ $LK,"PrsFunJoin",A="FL:::/Compiler/PrsStmt.HC.Z,62",BI=261$ $LK,"OptFixSizeOf",A="FL:::/Compiler/OptLib.HC.Z,484",BI=262$ $LK,"cmp_templates_dont_push",A="FL:::/Compiler/CExts.HC.Z,45"$ $LK,"cmp_templates_dont_push_pop",A="FL:::/Compiler/CExts.HC.Z,46"$ -$LK,"LexAttachDoc",A="FL:::/Compiler/Lex.HC.Z,331",BI=263$ -$LK,"PrsStreamBlk",A="FL:::/Compiler/PrsStmt.HC.Z,813",BI=264$ +$LK,"LexAttachDoc",A="FL:::/Compiler/Lex.HC.Z,325",BI=263$ +$LK,"PrsStreamBlk",A="FL:::/Compiler/PrsStmt.HC.Z,805",BI=264$ +$LK,"MODR_RIP_REL_IMM_U32",A="FL:::/Compiler/BackLib.HC.Z,134"$ $LK,"cmp_templates_dont_push2",A="FL:::/Compiler/CExts.HC.Z,44"$ $LK,"InstEntryFind",A="FL:::/Compiler/UAsm.HC.Z,66",BI=265$ $LK,"PrsDotDotDot",A="FL:::/Compiler/PrsVar.HC.Z,381",BI=266$ -$LK,"ICMulEqu",A="FL:::/Compiler/BackA.HC.Z,322",BI=267$ +$LK,"ICMulEqu",A="FL:::/Compiler/BackA.HC.Z,285",BI=267$ $LK,"AsmPrsInsFlags",A="FL:::/Compiler/AsmInit.HC.Z,1",BI=268$ -$LK,"PrsNoWarn",A="FL:::/Compiler/PrsStmt.HC.Z,799",BI=269$ -H2@2#2#;#A#\#a#Œ#Ž#Ã#­#Ó#Ú#ë#þ#¨­Ó÷c÷c dd d,dLd.d[dadad‹d’d½dËdËdøde2e eAemeZe„e‹e¶e¶e½eáe÷e÷e÷efH>L7ÿ7ÿQÿ[ÿ_ÿcÿhÿjÿ‚ÿšÿšÿ¤ÿp©ÁGGqsz€†ˆŽ”ª½ÌÑÓØâ÷  EW(NåNåbåƒå‡å‡å�å8åå'å,å7å@åGåIåNåd`µÙÙ$Ù(Ù5Ù7ÙDÙFÙRÙRÙ_ÙaÙnÙpÙ|Ù|Ù—Ù¥Ù¥Ù°Ù·ÙÆÙÑÙ×ÙÜÙÞÙêÙñÙÚ ÚÚÚÚ$ÚTÚzÚŠÚšÚªÚ¬Ú¼ÚÌÚÜÚÜÚáÚôÚûÚÛÛÛÛ Û Û+Û1Û7Û=ÛAÛAÛAÛnÛuÛ‹Û—Û�Û£Û©Û«Û«Û¹ÛD¶Ã¾Û¾ÛÔÛ×ÛÚÛçÛíÛúÛýÛÜÜÜÜ ,cj‹‹‹(‹3‹>‹D‹J‹ - hl––¤¹¿ P z7z7ˆ7—7³7¹7Ë7Ë7Ö7ß7å7ì7ò7 ”;\�L�L—L›L´LÎLëL MM&MJMaMaM€M�M˜M¥M¬MÞMïMóMûMûMNN"N&N Œ×ö.6:HNTT€–ª¸ÏÕáæô  ) + 2 2 8 8 H |1’"’"¨"±"¼"Ö"Ö"Ù"è"î"÷"ù"ÿ"# -###!#$#$#.#0 'X‰X‰f‰†‰Œ‰’‰’‰˜‰„“°ø¡ø¡ ¢¢¢¢B¢U¢\¢m¢’¢�¢¨¢ª¢µ¢Ú¢å¢ð¢ò¢ù¢££££@£("ÇáÇáÖáíáâââ gágáváŒá’á ˆ€´€´¥´¬´Ã´Ï´Ú´ì´ý´î´ì´µ8µDµKµQµ]µgµnµuµyµ{µ�µ�µ—µžµ¥µ©µ©µ³µ¸µÃµÕµæµ×µÕµ¶'¶3¶:¶@¶L¶V¶]¶d¶h¶j¶p¶|¶†¶�¶”¶˜¶˜¶¥¶³¶Ã¶Õ¶æ¶×¶Õ¶·'·3·:·@·L·V·]·d·h·j·p·|·†·�·”·˜·˜·¢·²·Ä·Õ·Æ·Ä·õ·ü·¸¸¸ ¸&¸*¸,¸2¸>¸H¸O¸V¸Z¸Z¸d¸r¸{¸”¸ ¸¤¸¤¸§¸°¸&¹Ôo„o„Œ„Zª”„£„Ƅфã„ê„û„…… -………H…H…]…_…_…k…s…w…„…„…�…˜…œ…©…©…©…Å…Ð…á…á…æ…þ… †††#†(†(†-†E†T†Y†_†j†o†o†}†††’†š†¢†ª†­†³†¸†Á†Ó†܆í†ý†ý†‡ -‡‡‡‡‡ ‡ ‡ ‡&‡)‡0‡;‡P‡u‡Œ‡™‡¡‡©‡µ‡Á‡LJ·ׇÛ‡Þ‡ê‡ð‡÷‡ü‡ü‡ -ˆˆˆ'ˆ'ˆ/ˆ7ˆ@ˆOˆTˆTˆ[ˆfˆlˆtˆzˆ…ˆŠˆŠˆ™ˆ¤ˆ¶ˆ¼ˆĈʈψÚˆìˆòˆúˆ‰‰‰‰ ‰*‰0‰2‰B‰H‰H‰m‰”‰™‰™‰­‰³‰ɉÚ‰à‰å‰þ‰ŠŠŠ$Š*Š/Š/ŠCŠIŠ_ŠpŠvŠ{Š”ŠšŠªŠ²ŠºŠÀŠÅŠÅŠÛŠáŠ÷Š‹‹‹"‹(‹9‹A‹I‹O‹V‹[‹[‹q‹w‹�‹ž‹¤‹¦‹µ‹»‹Å‹Í‹Õ‹Û‹â‹â‹â‹ô‹ý‹ŒŒŒ#Œ#Œ1Œ9ŒJŒ]ŒdŒjŒrŒxŒˆŒŽŒ–ŒœŒœŒœŒ¡Œ¡Œ¡Œ¡Œ¡ŒÀŒÌŒÑŒÑŒàŒéŒôŒýŒ����.�4�J�[�a�f�x�~�ƒ�œ�º�º�¿�¿�Ë�Ó�Ö�Ü�â�ç�ç� ŽŽŽ+Ž1Ž7Ž7ŽHŽfŽfŽkŽkŽwŽŽ‚މŽ�ޔޔ޴޼ŽÌŽÒŽÙŽ÷Ž��&�.�1�8�>�V�^�v�~���ˆ�Ž�Ž�Ž�­�½�É�Ñ�Ô�Û�á�ñ�� �'�/�2�9�?�W�c�~�†�‰���–�–�–�–�›�›�¤�´�Ê�Ð�è�û�‘‘‘‘#‘?‘E‘Q‘Y‘\‘c‘i‘’‘š‘ª‘°‘·‘·‘·‘¼‘¼‘őݑó‘ù‘’$’*’/’Z’`’s’ª’¼’Ù’á’ç’ì’ì’“““)“)“.“.“H“T“`“k“k“p“p“Š“–“¢“­“­“²“²“È“ΓÚ“à“å“÷“ý“”””)”/”5”<”O”Z”c”o”w”z”€”†”‹”Ÿ”®”¶”Δ֔ٔߔå”ý”•%•?•G•J•P•V•V•g•p•|•„•‡•Ž•”•™•«•º••Ú•â•å•ì•ò• -––1–K–S–V–]–c–c–s–|–ˆ–�–“–™–Ÿ–¤–¸–Ç–Ï–é–ñ–ô–ú–—— —B—^—f—i—o—u—u—†—�—›—£—¦—­—³—¸—Ê—Ù—á—ü—˜˜˜˜,˜4˜V˜s˜{˜~˜…˜‹˜‹˜‹˜‹˜‹˜�˜�˜¦˜¬˜¸˜¾˜ØÕ˜Û˜à˜î˜ú˜™™™™!™'™,™>™M™U™m™u™x™™…™�™¥™Ä™Þ™æ™é™ð™ö™ö™ö™ššš$š'š.š4šKšZšfš�š‰šŒš“š™š±š½šßšüš››››››››››,›G›M›X›]›]›p›†›Œ›—›™›™›¬›Ï›Õ›à›à›ò›û› œœ#œ3œ3œ8œ8œKœaœgœuœ„œ‰œ‰œœœ²œ¸œÆœÕœÚœÚœðœöœ�+�+�U�[�`�l�u�„�„�‰�‰�Ÿ�¥�Â�Ú�Ú�ž -žžž$ž3ž3ž8ž8žNžTžqž‰ž‰ž³ž¹ž¾žÊžÓžâžâžçžçžýžŸ Ÿ8Ÿ8ŸbŸhŸjŸvŸŸŠŸŠŸŠŸŠŸ�Ÿ�Ÿ¦Ÿ·Ÿ¹ŸËŸØŸØŸØŸèŸøŸýŸ! - . 3 H e u ™ © ¯ ¯ ¯ ´ ¹ Πá  ¡/¡5¡7¡<¡M¡\¡Ž¡–¡œ¡ž¡£¡ª¡ª¡³¡Å¡Ø¡á¡ð¡ð¡õ¡ú¡ ¢¢¢ ¢(¢3¢3¢T¢[¢a¢i¢t¢z¢Š¢�¢˜¢£¢©¢©¢®¢³¢º¢Á¢È¢Ï¢Ø¢ç¢ç¢ç¢ì¢ì¢ì¢þ¢£££ £(£0£6£6£6£;£;£F£W£Z£f£o£{£‚£ˆ£�£�£˜£©£¬£¸£Á£Í£Ô£Ú£ߣߣߣߣä£é£é£ô£ø£ø£¤ ¤¤¤¤¤3¤:¤@¤O¤Z¤e¤k¤w¤{¤{¤‡¤�¤“¤“¤ž¤ ¤¶¤½¤äˤÖ¤á¤ç¤ñ¤ô¤ø¤ø¤¥¥ -¥ ¥¥¥$¥'¥'¥2¥4¥R¥Y¥d¥o¥r¥x¥}¥}¥ˆ¥Œ¥Œ¥˜¥¡¥¤¥¤¥¯¥±¥Ç¥Î¥Ô¥ã¥î¥ù¥ÿ¥ ¦¦¦¦$¦'¦'¦2¦4¦J¦Q¦W¦_¦j¦u¦{¦…¦ˆ¦Œ¦Œ¦”¦›¦ž¦ ¦«¦¯¦¸¦»¦»¦ƦȦæ¦í¦ø¦§§ §§§#§'§'§3§<§?§?§J§L§b§i§o§�§Œ§—§�§¢§¢§­§²§²§½§§§ͧЧÔ§Û§à§å§ê§ê§þ§¨¨¨¨%¨-¨1¨E¨L¨P¨P¨]¨i¨q¨w¨‡¨‹¨œ¨®¨¹¨½¨½¨ʨÒ¨Ú¨à¨à¨à¨à¨à¨â¨â¨ð¨÷¨©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©© © ©7©?©K©K©l©{©“©•©¡©®©®©Ñ©Þ©é©ò©û©ª ª ªªªª,ªJªVªVªƒ¬xÝ÷R5R5d5f5j5s55‹5 5 5Ï5Ó5Ø5ä5÷566666$6l_vÇÇÝìñ€ó€€€%€:€'€I€O€h€�€š€³€Ì€Ö€„žpp%p-p3p:pApCpFpMpTpTpepipopop„pŽpŽp–p¯pÒpópøpqq*q5q:qJqMqaqgqlqrqtqzq}qƒqˆq‹q“qœq¬qÏqÝqõqúqþq#r6r;rIrarfrjr�rŸrÂrÕrÚràrårèrêrðrörürsssss"s0sHsMsQsvs†s©s¼sÁsÑsôstt t#tHt[t[tvtvtvt„tœtžtžtžt¬tÄtÆtÆtÔtìtìtþtþtuu*uJuduluwuŠuŽuŽuŽu•u›uµu½uÈuãuåuëuv vv&v1v1vKvH…“¨†¨†¿†Õ†å†ì†‡‡0‡4‡w‡L�žç�ç�û�‚‚ -‚-‚/‚H‚a‚l‚w‚‚4IRŽØŽØ—ؚؗبضعؾØì=ýý?ýBý`ýwýˆýˆý£ý©ý®ý®ýÉýÏýÔýÔýÝýëýþ þ%þ,þ2þ4þQþaþfþmþsþuþuþˆþŽþŽþŽþžþ“þ¯þ¿þÑþÖþÖþÖþÝþäþëþÿÿ#ÿ#ÿ5ÿÌL»¸¦¸¦Ò¦Ý¦è¦ñ¦ù¦ü¦§§§#§'§-§;§X§e§t§y§…§Š§‘§�§¢§¥§¯§§§¿§È§Ù§×§Ï§ç§ð§ö§ö§¨¨¨$¨-¨4¨8¨=¨T¨l¨u¨ƒ¨Ÿ¨«¨«¨Ã¨Ô¨Ô¨Û¨ô¨©©©"©6©?©F©J©U©Z©a©~©«©²©¶©¸©Ã©Ï©Ó©è©ê©û©ªªª)ª8ªQªQªTª\ªaªãªPw‡'O'OCOTOgO~O›O¶O¼OÅOÓOÙOÜOèOŒ ¨b¨b¸bÜbÜbêbêbêbêbóbóbúbc*c2c2c=c=cKc[c[cicococ‡c‡c�c³c (kqP‹P‹^‹j‹z‹�‹‡‹ @KW¿ë¿ëÍëÕëÜëûëìì ì ìì!$/4oâoâ|â‘â–âœâ"$).?â?âLâaâfâlâ#$#(âââ4â9â?â$€ïK**4DZbl‡Œœ²ºÄßäú   " , 6 @ J T ^ h r | ’ œ ¦ ° º Ä Î Ø â ø  " , 6 @ J T ^ h r | † � š ¤ ® ¸ Â Ì Ö à ê ô þ !!!&!0!:!D!N!\!%¤Cø�ø�žž*ž;žMžOžVž\žlžwž�žŒž£ž¦ž¨žºžÀžÐžÚžäžëžöž ŸŸŸ)Ÿ)Ÿ)Ÿ=Ÿ&$5:ŸâŸâ­âÂâÇâÍâ'¤Di@Ÿ@ŸVŸ]ŸrŸƒŸ•Ÿ—ŸžŸ¤Ÿ´Ÿ¿ŸÉŸÔŸëŸîŸðŸ    # - 4 ? S [ [ q q q † ((&,ò/ò/00000)0]e'N'N=NPN_NeNhNpN*  ßn%n%�%˜%ž%«%²%Î%Ô%Ô%Ô%á%ã%î%ø%ÿ%&& &)&/&@&@&K&U&U&g&m&}&ƒ&ˆ&�&�&°&¶&È&Û&á&ä&ê&ê&ì&ò&ø&ú&ú&ú& ''''/'9'9'M'V'\'b'x'}'…'›'Ÿ'Ÿ'§'­'³'½'Ä'Ë'Ô'æ'æ' ((((-(@(F(J(P(V(\(\(^(b(h(n(t(y(y(y(y(¤(µ(µ(Ì(Ù(Ý(å(÷())) )$)*)*)<)M)b)v)~)�)“)¤)¨)®)Ç)É)Ï)Ü)Þ)ê)***<*G*M*S*Y*b*h*z*‹*“*—*¨*¬*²*Ë*Í*Ó*à*â*î* ++++'+-+J+=+d+m+s+s+ˆ+�+�+”+ž+³+¸+¸+¸+Õ+×+ô+ö+,,!,%,,,O,U,[,g,~,…,‹,–,›,›,¢,¦,°,¾,À,È,Í,Õ,à,æ,õ,ú,-- --!-8-H-U-`-|-~-š-š-¡-¶-»-Ä-Ñ-Ö-Ü-á-á-è-ì-ö-..... .,.3.7.?.G.O.a.o.t.€.€.ˆ.ˆ.«.«.¹.¿.Ä.È.Í.Í.Í.Í.Ó.Õ.Õ.ø.þ./ /!/#/#/#/./././3/\0+4-vfÊfʀʄʜʤʬʶʺÊÁÊÇÊÛÊãÊèÊëÊöÊË ËË Ë!Ë7Ë>ËEËPË[Ë]ËhËsËuË�ËŠËŠË Ë«ËÃËÉËÒËãËéËòËÌ -Ì -ÌÌÌ!Ì&Ì8ÌCÌGÌUÌWÌ[ÌjÌjÌjÌ{Ì{̘̀̒ÌÍ,Ô@–æ–æ¬æ³æ¶æÚæÚæ÷æ -çç0ç5ç5çSçaçtç‡ç�ç�ç‘ç‘ç‘ç¤ç¦ç¦ç¦ç­çÀçÓçÓçÓçæçñçèè è#è*è?èRèYèYè\è�è-LAP$$$!$-$H$M$m$o$Š$¥$¥$­$´$Û$.P~ŽØ‹Ø‹æ‹ó‹ŒŒŒ,Œ9ŒGŒYŒdŒrŒxŒ~Œ/4 -77(747E7W7`7n7t70|ºU– – ¸ ¿ Í Ø þ þ     < C C R a } ˆ ˆ • � ® · Õ à â û    . 7 B G M T | � � ˜ ˜ Ÿ ® Å Å Ô Ý ñ ø ÿ CLSXco~’—Ÿ«½½Ùàèø -(.BGWk}‚’¥­Áßöú9KQ\hxˆŽ——©­¹Ðìþ+;MSSXZZ__ntzz~÷1ŒÄãÜÜ2Ü>ÜBÜFÜMÜTÜcÜnÜtÜyÜ{܇܎ܖܜܢܦܦܼܵÜÄÜÊÜÐÜÒÜÒÜÞÜ28 */*/8/>/J/U/f/p/w/}/3@t€ í í-í8í?í^íkíkínípíví4ÌSÇ Ç í  - - - - +$LK,"PrsNoWarn",A="FL:::/Compiler/PrsStmt.HC.Z,791",BI=269$ +H2@2#2#;#A#\#a#Œ#Ž#Ã#­#Ó#Ú#ë#þ#¨­ÓŸ`Ÿ`µ`½`È`Ô`ô`Ö`a a a3a:aeasasa aÂaÚaÇaéabb,b3b^b^beb‰bŸbŸbŸb©bH>L�ý�ý©ý³ý·ý»ýÀýÂýÚýòýòýüýp©ÁŸŸÉËÒØÞàæì$)+0:Oex�¯(åå2åSåWåWå_å8îäîä÷äüäåååååd`µÖØÖØôØøØÙÙÙÙ"Ù"Ù/Ù1Ù>Ù@ÙLÙLÙgÙuÙuـهٖ١٧٬ٮٺÙÁÙÐÙÛÙáÙæÙèÙôÙ$ÚJÚZÚjÚzÚ|ڌڜڬڬڱÚÄÚËÚÒÚÒÚÒÚÒÚÙÚïÚûÚÛÛ ÛÛÛÛ>ÛEÛ[ÛgÛmÛsÛyÛ{Û{Û‰ÛD¶ÃŽÛŽÛ¤Û§ÛªÛ·Û½ÛÊÛÍÛÐÛÖÛØÛâÛ ,cjàŠàŠîŠøŠ‹‹‹‹ + imfft‰� P ‚7‚7�7Ÿ7»7Á7Ó7Ó7Þ7ç7í7ô7ú7 ”;\÷K÷KÿKLL6LSLtL}LŽL²LÉLÉLèL÷LM MMFMWM[McMcMvM†MŠMŽM Œ×öÞÞþ +$$PfzˆŸ¥±¶Äàéùû     |1’"’"¨"±"¼"Ö"Ö"Ù"è"î"÷"ù"ÿ"# +###!#$#$#.#0 '(‰(‰6‰V‰\‰b‰b‰h‰„“°È¡È¡Ü¡ã¡ê¡î¡¢%¢,¢=¢b¢m¢x¢z¢…¢ª¢µ¢À¢Â¢É¢Ò¢Ô¢ß¢æ¢£("·à·àÆàÝàøàøàþà WàWàfà|à‚à ˆP´P´u´|´“´Ÿ´ª´¼´Í´¾´¼´í´µµµ!µ-µ7µ>µEµIµKµQµ]µgµnµuµyµyµƒµˆµ“µ¥µ¶µ§µ¥µÖµ÷µ¶ +¶¶¶&¶-¶4¶8¶:¶@¶L¶V¶]¶d¶h¶h¶u¶ƒ¶“¶¥¶¶¶§¶¥¶Ö¶÷¶· +···&·-·4·8·:·@·L·V·]·d·h·h·r·‚·”·¥·–·”·Å·Ì·Ò·Þ·è·ï·ö·ú·ü·¸¸¸ ¸&¸*¸*¸4¸B¸K¸d¸p¸t¸t¸w¸€¸ö¸ÔoƒoƒŒƒZ©”ƒ£ƒƃуãƒêƒûƒ„„ +„„„H„H„]„_„_„k„s„w„„„„„�„˜„œ„©„©„©„Å„Єá„á„æ„þ„ ………#…(…(…-…E…T…Y…_…j…o…o…}…†…’…š…¢…ª…­…³…¸…Á…Ó…Ü…í…ý…ý…† +††††† † † †&†)†0†;†P†u†Œ†™†¡†©†µ†Á†džΆ׆Û†Þ†ê†ð†÷†ü†ü† +‡‡‡'‡'‡/‡7‡@‡O‡T‡T‡[‡f‡l‡t‡z‡…‡ЇЇ™‡¤‡¶‡¼‡ćʇχÚ‡ì‡ò‡ú‡ˆˆˆˆ ˆ*ˆ0ˆ2ˆBˆHˆHˆmˆ”ˆ™ˆ™ˆ­ˆ³ˆɈÚˆàˆåˆþˆ‰‰‰$‰*‰/‰/‰C‰I‰_‰p‰v‰{‰”‰š‰ª‰²‰º‰À‰ʼnʼnÛ‰á‰÷‰ŠŠŠ"Š(Š9ŠAŠIŠOŠVŠ[Š[ŠqŠwŠ�ŠžŠ¤Š¦ŠµŠ»ŠÅŠÍŠÕŠÛŠâŠâŠâŠôŠýŠ‹‹‹#‹#‹1‹9‹J‹]‹d‹j‹r‹x‹ˆ‹Ž‹–‹œ‹œ‹œ‹¡‹¡‹¡‹¡‹¡‹À‹Ì‹Ñ‹Ñ‹à‹é‹ô‹ý‹ŒŒŒŒ.Œ4ŒJŒ[ŒaŒfŒxŒ~ŒƒŒœŒºŒºŒ¿Œ¿ŒËŒÓŒÖŒÜŒâŒçŒçŒ ���+�1�7�7�H�f�f�k�k�w��‚�‰���”�”�´�¼�Ì�Ò�Ù�÷�ŽŽ&Ž.Ž1Ž8Ž>ŽVŽ^ŽvŽ~Ž�ŽˆŽŽŽŽŽŽŽ­Ž½ŽÉŽÑŽÔŽÛŽáŽñŽ� �'�/�2�9�?�W�c�~�†�‰���–�–�–�–�›�›�¤�´�Ê�Ð�è�û�����#�?�E�Q�Y�\�c�i�’�š�ª�°�·�·�·�¼�¼�Å�Ý�ó�ù�‘$‘*‘/‘Z‘`‘s‘ª‘¼‘Ù‘á‘ç‘ì‘ì‘’’’)’)’.’.’H’T’`’k’k’p’p’Š’–’¢’­’­’²’²’È’Î’Ú’à’å’÷’ý’“““)“/“5“<“O“Z“c“o“w“z“€“†“‹“Ÿ“®“¶“ΓÖ“Ù“ß“å“ý“”%”?”G”J”P”V”V”g”p”|”„”‡”Ž”””™”«”º””Ú”â”å”ì”ò” +••1•K•S•V•]•c•c•s•|•ˆ•�•“•™•Ÿ•¤•¸•Ǖϕé•ñ•ô•ú•–– –B–^–f–i–o–u–u–†–�–›–£–¦–­–³–¸–Ê–Ù–á–ü–————,—4—V—s—{—~—…—‹—‹—‹—‹—‹—�—�—¦—¬—¸—¾—×Õ—Û—à—î—ú—˜˜˜˜!˜'˜,˜>˜M˜U˜m˜u˜x˜˜…˜�˜¥˜ĘÞ˜æ˜é˜ð˜ö˜ö˜ö˜™™™$™'™.™4™K™Z™f™�™‰™Œ™“™™™±™½™ß™ü™šššššššššš,šGšMšXš]š]špš†šŒš—š™š™š¬šÏšÕšàšàšòšûš ››#›3›3›8›8›K›a›g›u›„›‰›‰›œ›²›¸›Æ›Õ›Ú›Ú›ð›ö›œ+œ+œUœ[œ`œlœuœ„œ„œ‰œ‰œŸœ¥œœÚœÚœ� +���$�3�3�8�8�N�T�q�‰�‰�³�¹�¾�Ê�Ó�â�â�ç�ç�ý�ž ž8ž8žbžhžjžvžžŠžŠžŠžŠž�ž�ž¦ž·ž¹žËžØžØžØžèžøžýž!Ÿ-Ÿ.Ÿ3ŸHŸeŸuŸ™Ÿ©Ÿ¯Ÿ¯Ÿ¯Ÿ´Ÿ¹ŸΟ០ / 5 7 < M \ Ž – œ ž £ ª ª ³ Å Ø á ð ð õ ú  ¡¡¡ ¡(¡3¡3¡T¡[¡a¡i¡t¡z¡Š¡�¡˜¡£¡©¡©¡®¡³¡º¡Á¡È¡Ï¡Ø¡ç¡ç¡ç¡ì¡ì¡ì¡þ¡¢¢¢ ¢(¢0¢6¢6¢6¢;¢;¢F¢W¢Z¢f¢o¢{¢‚¢ˆ¢�¢�¢˜¢©¢¬¢¸¢Á¢Í¢Ô¢Ú¢ߢߢߢߢä¢é¢é¢ô¢ø¢ø¢£ £££££3£:£@£O£Z£e£k£w£{£{£‡£�£“£“£ž£ £¶£½£ãË£Ö£á£ç£ñ£ô£ø£ø£¤¤ +¤ ¤¤¤$¤'¤'¤2¤4¤R¤Y¤d¤o¤r¤x¤}¤}¤ˆ¤Œ¤Œ¤˜¤¡¤¤¤¤¤¯¤±¤ǤΤÔ¤ã¤î¤ù¤ÿ¤ ¥¥¥¥$¥'¥'¥2¥4¥J¥Q¥W¥_¥j¥u¥{¥…¥ˆ¥Œ¥Œ¥”¥›¥ž¥ ¥«¥¯¥¸¥»¥»¥Æ¥È¥æ¥í¥ø¥¦¦ ¦¦¦#¦'¦'¦3¦<¦?¦?¦J¦L¦b¦i¦o¦�¦Œ¦—¦�¦¢¦¢¦­¦²¦²¦½¦¦¦ͦЦÔ¦Û¦à¦å¦ê¦ê¦þ¦§§§§%§-§1§E§L§P§P§]§i§q§w§‡§‹§œ§®§¹§½§½§ʧÒ§Ú§à§à§à§à§à§â§â§ð§÷§¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨ ¨7¨?¨K¨K¨l¨{¨“¨•¨¡¨®¨®¨ѨÞ¨é¨ò¨û¨© © ©©©©,©J©V©V©�«xÝ÷Z5Z5l5n5r5{5‡5“5¨5¨5×5Û5à5ì5ÿ5 6 666"6,6lbyg|g|}|Œ|‘|¦|“|µ|¸|¸|Å|Ú|Ç|é|ï|}!}:}S}l}v}„ž§l§lÅlÍlÓlÚlálãlælílôlôlm mmm$m.m.m6mOmrm“m˜m¹m¾mÊmÕmÚmêmímnn nnnnn#n(n+n3nq>q>qLqdqfqfqtqŒqŒq�q�q¦q³qÉqéqr rr)r-r-r-r4r:rTr\rgr‚r„rŠr¤r¬r·rÅrÐrÐrêrH�›x†x†�†¥†µ†¼†Ó†î†‡‡G‡L’¡‡~‡~›~¨~¾~ª~Í~Ï~è~  4IR^Ø^ØgØgØjØx؆؉؎Øì=oûoû—ûšû¸ûÏûàûàûûûüüü!ü'ü,ü,ü5üCü`üxü}ü„üŠüŒü©ü¹ü¾üÅüËüÍüÍüàüæüæüæüöüëüýý)ý.ý.ý.ý5ý<ýCýXý_ý{ý{ý�ýÌM¼ˆ¦ˆ¦¢¦­¦¸¦Á¦É¦Ì¦Ó¦×¦à¦ó¦÷¦ý¦ §(§5§D§I§U§Z§a§m§r§u§§w§�§˜§©§§§Ÿ§·§À§Æ§Æ§Ô§×§ë§ô§ý§¨¨ ¨$¨<¨E¨S¨o¨{¨{¨“¨¤¨¤¨«¨Ä¨Ð¨Ø¨ë¨ò¨©©©©%©*©1©N©{©‚©†©ˆ©“©Ÿ©£©¸©º©Ë©Õ©à©ê©ù©ª!ª!ª$ª,ª1ª³ªPw‡�N�N«N¼NÏNæNOO$O-O;OAODOPOŒ xbxbˆb¬b¬bºbºbºbºbÃbÃbÊbåbúbcc c cc+c+c9c?c?cWcWc]cƒc (kq ‹ ‹.‹:‹J‹Q‹W‹ @^j7ë7ëEëMëTësë€ë€ëƒë…ë‹ë!$/4_á_álá�á†áŒá"$)./á/á<áQáVá\á#$#(ÿàÿàá$á)á/á$€ïK**4DZbl‡Œœ²ºÄßäú   " , 6 @ J T ^ h r | ’ œ ¦ ° º Ä Î Ø â ø  " , 6 @ J T ^ h r | † � š ¤ ® ¸ Â Ì Ö à ê ô þ !!!&!0!:!D!N!\!%¤CÈ�È�Þ�å�ú� žž ž&ž,ž<žGžQž\žsžvžxžŠž�ž žªž´ž»žÆžÛžãžãžùžùžùž Ÿ&$5:�á�á�á²á·á½á'¤DiŸŸ&Ÿ-Ÿ4ŸBŸSŸeŸgŸnŸtŸ„Ÿ�Ÿ™Ÿ¤Ÿ»Ÿ¾ŸÀŸÒŸÙŸéŸóŸýŸ  # + + A A A V ((&,ú/ú/000 0%0)0]e�M�M¥M¸MÇMÍMÐMØM*ä Õ>%>%`%h%n%{%‚%ž%¤%¤%¯%¹%¹%Æ%Ï%Þ%é%ï%ù%ÿ%&&&%&%&7&=&M&S&X&_&_&€&†&˜&«&±&´&º&º&¼&Â&È&Ê&Ê&Ê&Û&å&ê&ê&ÿ& ' ''&','2'H'M'U'k'o'o'w'}'ƒ'�'”'›'¤'¶'¶'Û'ß'å'ë'ý'((( (&(,(,(.(2(8(>(D(I(I(I(I(t(…(…(œ(©(­(µ(Ç(ç(ç(í(ð(ô(ú(ú( ))2)F)N)_)c)i)v)x)„)¢)¨)³)Ö)á)ç)í)ó)ü)**%*-*1*7*D*F*R*p*v*|*‚*‹*‘*®*¡*È*Ñ*×*×*ì*ñ*ñ*ø*+++++9+;+X+Z+w+}+…+‰+�+³+¹+¿+Ë+â+é+ï+ú+ÿ+ÿ+, +,,",$,,,1,9,D,J,Y,^,d,i,q,v,…,œ,¬,¹,Ä,à,â,þ,þ,-- -(-5-:-@-E-E-L-P-Z-h-j-r-v-z-„-�-—-›-£-«-³-Å-Ó-Ø-ä-ä-ì-ì-...#.(.,.1.1.1.1.7.9.9.\.b.h.o.….‡.‡.‡.’.’.’.—.À/+4.w6Ê6ÊPÊTÊlÊtÊ|Ê†ÊŠÊ‘Ê—Ê«Ê³Ê¸Ê»ÊÆÊÑÊÙÊäÊïÊñÊËËË Ë+Ë-Ë8ËCËEËQËZËZËpË{˓˙ˢ˳˹ËÂËÔËÚËÚËâËæËñËöËÌÌÌ%Ì'Ì+Ì:Ì:Ì:ÌKÌKÌPÌbÌhÌÖÌ,Ô@fæfæ|æƒæ†æªæªæÇæÚæíæççç#ç1çDçWç_ç_çaçaçaçtçvçvçvç}ç�ç£ç£ç£ç¶çÁçÔçêçïçóçúçè"è)è)è,èQè-LAP$$$!$-$H$M$m$o$Š$¥$¥$­$´$Û$.P~ލ‹¨‹¶‹Ã‹Ñ‹ã‹î‹ü‹ ŒŒ)Œ4ŒBŒHŒNŒ/4 +"7"707<7M7_7h7v7|70|»Vf f ˆ � � ¨ Î Î × Ù Ù à    " 1 M X X e m ~ ‡ ¥ ° ² Ë Ñ Ü ì þ     $ L Q _ h h o ~ • • ¤ ­ Á È Ï Ô ß å í #(3?Nbgo{��©°¸ÈÚàééøþ';MRbu}‘¯ÆÊÖí !,8HX^ggy}‰ ¼ÎÔßëû ##(**//>DJJNÇ1ŒÄãæÛæÛÜÜÜÜÜ$Ü3Ü>ÜDÜIÜKÜWÜ^ÜfÜlÜrÜvÜv܅܌ܔܚܠܢܢܮÜ28 2/2/@/F/R/]/n/x//…/3@‡“—ì—ì¥ì°ì·ìÖìãìãìæìèìîì4ÜS  EX_fmsu|ƒ††˜˜ªµÉÑÚâçí  ( - F ^ b b g p z Ž – Ÿ § ¬ ³ Å Õ ê ì   -$ -+ -. -. -@ -@ -R -] -q -y -‚ -Š -� -• -« -» -Ð -Õ -î -  -  -   " 6 > G O T [ m } ’ ” ­ Å É É Ý å î ö û   ' < A Z r v ‰ ‰ ‰ Ž ° Ò Ý ã û   # 7 ? H P R X j z � ‘ ª  Æ Æ Ú â ë ó ø ÿ %:?Xpt‡‡‡Œ®ÐÛáù#-8JZqˆŸ¶¶Éäää##,6C]kr…‡¦µ®ÍÝ÷÷5D{ˆ.BKQccgjr6\ObhŠhŠˆŠ—Š Š©Š­Š±Š½ŠÂŠÇŠÇŠØŠÜŠäŠüŠÿŠ ‹70üöäöäÿäå åååå8tÚ‡‡©°·ÂØØêJ$Yp�•™ž³ËÐØÜîá !%%*;ƒ]’°»ÁÕíò $+=Mce~–šš¯ÇÌÔØçÚ----@FPWj……¡±¿¿Óáï;JCbryа¡ÖØMR]cn�ª—¹Ðáü*L�n�®¹¿Óëð ");Kac|”˜˜ºÓçëúúú $7RRRn~ŒŒ ®Ç¼Úíò   8 H Y w w ™ ™   à à à ã 9DmzÆÆÖêóù  :lwŽ×€×€í€ü€���%�(�(�5�J�7�Y�_�x�‘�ª�Ã�Ü�æ�;<‰”vv†— ¦ªµ<”)FïFïNïRï^ïoïqï�ïŒïžï©ï´ïÃïÔïÛïôïøï ð ððð-ð6ðDðXðtðyð–ð=d(=˜‰˜‰¤‰¸‰»‰Ï‰×‰Û‰å‰ï‰÷‰ú‰Š>4u¾8G8G^GaGeGrG{G†G–GžG¨GÐGÐGàGåGåGõGúGúG -HHH H$H$H4H9H9HIHNHNH^HcHcHsHxHxHˆH�H�H�H�H™H²HÀH×HêHìHòHôH÷HI I II#I#I.I>IKIcIkIqIqI…I…IŽI‘IQJ?Ä n‡¬‡¬¤¬¬¬¯¬½¬ˬà¬é¬­­/­:­K­O­a­d­o­x­„­—­È­½­£­Ø­ï­®®®>®S®w®‹®�®®®”®É®Ì®Ñ®Ô®Ô®Û®ñ®ø®¯ -¯¯&¯9¯9¯Q¯U¯‚¯‚¯š¯Ÿ¯Ÿ¯¯¯³¯įί߯é¯ü¯°°°°&°0°A°K°^°j°o°o°o°‘°¢°§°´°ɰɰΰذç°ì°ò°÷°÷°ü°±±± ±%±%±+±1±6±6±>±Q±]±j±v±…±�±•±ž±µ±ɱÚ±ç±ì±²².²;²C²R²\²b²k²t²t²y²y²y²y²y²‰²‰²‰²¡²·²¿²Ú²ë²ø²ú²³ ³ ³ ³³%³*³*³1³?³D³\³h³z³†³Œ³”³š³£³ɳÕ³Û³á³ð³ø³´-´>´K´M´[´[´`´`´g´u´z´�´™´¥´«´±´º´¿´¿´¿´¿´¿´×´Ü´Ü´Ü´Ü´Ü´í´í´í´í´í´í´í´í´í´í´µµ#µ>µOµ\µ^µkµ{µ€µ€µ€µ‰µ£µ¯µ´µÖµâµâµçµçµçµçµçµçµçµçµüµ¶¶¶¶¶¶¶)¶;¶S¶h¶‰¶ª¶µ¶ƶ˶˶˶Ô¶ú¶···;·T·\·d·r·œ·¥·«·Ì·å·å·å·å·å·¸@¸I¸O¸U¸Z¸c¸l¸q¸q¸q¸q¸€¸”¸²¸¸ȸ͸͸à¸ô¸¹-¹3¹3¹8¹8¹G¹[¹y¹‰¹�¹”¹”¹§¹»¹á¹ô¹ú¹ú¹ÿ¹ÿ¹ÿ¹º-º5ºPºaºnºpºº�º�º�º�º�º•º•º•º•º•º•º•º•º•º•º•º•º•º•º•º•º¤º³º¾ºÀºÀºɺ˺˺ߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺáºáºøº» » »»»%»A»Y»h»t»Š»¤»§»±»½»ã»¼#¼G¼I¼\¼мb¼¥¼¥¼¨¼¸¼À¼Û¼ì¼ï¼ ½½#½;½;½f½i½x½Œ½­½Á½ݽɽù½¾,¾a¾_¾T¾I¾:¾o¾o¾o¾r¾w¾z¾”¾¢¾оò¾ò¾¿ ¿/¿C¿d¿x¿”¿€¿°¿°¿οÀÀö¿ë¿Ü¿ÀÀÀÀÀÀ À0ÀQÀ]À°Ã@À„°7È7ÈMÈQÈ\ÈcÈnȂȂÈ�ȞȥȲȾÈËÈÏÈàÈàÈéÈîÈöÈÉÉ#É.ÉAÉAÉYÉYÉtɠɠɴɶɶÉÀÉÈÉÈÉÒÉÚÉÚÉÚÉëÉëÉëÉñÉùÉÿÉÊÊ -ÊÊÊÊ!Ê!Ê7ÊGÊQÊ`ÊeÊmÊmÊrÊrÊyÊ�ÊŸÊ©Ê±Ê·ÊÆÊËÊÓÊÙÊÙÊÞÊåÊðÊ$Ë3Ë=ËEËKË`ËfËkËkËkËkËkËkËkËkËkËv˄˔˚ˢ˱˶ËÃËËËÐËÐËÐËØËáËêË÷ËÿË ÌÌJÌRÌaÌkÌ…Ì‹Ì�Ì�̗̪̲ÌÇÌÏÌ×ÌìÌîÌùÌÍÍÍÍ/Í7Í>ÍDÍJÍNÍWÍ\Í€ÍŒÍ”Í©ÍµÍºÍÆÍÑÍÖÍÖÍÖÍìÍ ÎÎÎ'Î/Î7ÎLÎQÎ\ÎdÎyÎ~Î~΢ήζÎËÎ×ÎÜÎèÎóÎøÎøÎøÎøÎøÎøÎÏÏÏÏÏÏÏÏÏÏÏÏÏÏ Ï.Ï>ÏDÏLÏ[Ï`ÏhÏpÏrÏzωÏ�Ï—ÏŸÏ¡Ï©ÏÆÏÏÏ×ÏßÏæÏúÏÐ ÐÐÐ(Ð0Ð>ÐCÐHÐZЎЖХЯÐÉÐÑÐÖÐÖÐÖÐßÐèÐëÐõÐÑÑÑ)Ñ;Ñ;Ñ;ÑFÑKÑhÑmÑmÑvÑ{Ñ{Ñ{Ñ{Ñ{Ñ{Ñ{Ñ{Ñ{Ñ{Ñ{Ñ{Ñ{Ñ{Ñ{Ñ{цђѪѽÑÅÑÔÑÙÑáÑèÑõÑþÑÒÒÒÒÒ#Ò+ÒIÒQÒTÒVÒfÒpÒpÒpÒrÒ‡Ò˜Ò›ÒžÒ¦Ò«Ò«Ò´Ò¹ÒÁÒÈÒÕÒêÒñÒÓÓ+ÓDÓYÓnÓuÓuÓzÓzÓzÓzÓzÓzÓzÓ‚Ó�Ó™Ó¨Ó­Ó­ÓµÓ½ÓÊÓÏÓÏÓÏÓÓÓØÓØÓèÓíÓíÓíÓùÓÔÔÔÔ,Ô;ÔCÔTÔ\ÔԅԌԎԔԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛÔ�Ô�Ô¸ÔÂÔÐÔÐÔÕÔàÔçÔÕÕÕÕÕ Õ=ÕKÕA×Ax[G×G×]×d×k×v×}׎טןש׼×Ä×Ä×ß×ù×ÿ×ØØØØ&Ø-Ø0Ø5Ø@ØJØ\ØbØxØØ‡Ø�ؤؤؤزØÙØâØêØüØÙÙÙÙÙ+Ù1ÙGÙNÙVÙ]Ùrككييي٘ٿÙÌÙÕÙÝÙïÙ÷Ù÷Ù÷ÙÚ Ú ÚÚÚ5ÚAÚ†ÚBt`¹—Ý—Ý¯Ý¿ÝÆÝÍÝØÝëÝîÝöÝýÝÞÞÞ)Þ4Þ7ÞBÞXÞcÞnÞyÞ„Þ‹ÞžÞªÞÇÞÐÞØÞøÞûÞßßßß#ß2ß8ß@ß@ßLßZßißq߀߈߫߱߷߹߿ßÅßÅßÅßêßïß àààà#à'à2àLàXàhà{à—à¬à´à¾àÝàñàñàeáC ?C11‰1‘1–1DÑÒÿZÿZ [+[<[+[V[d[d[t[}[„[ˆ[‘[‘[™[�[½[Ë[×[Ý[è[ \ \\(\.\5\:\:\M\X\i\t\\†\�\�\�\¯\´\´\Â\Ç\Ç\Ø\Ø\ë\ð\]]]%]9]9]>]>]L]Q]Q]V]]]e]l]n]v]}]}]Œ]’]Ÿ]¦]®]Ò]Ò]Ú]é]ô]û]ý]^ ^%^*^*^*^=^B^Q^X^a^v^Š^Š^�^�^—^­^²^Æ^Í^Ò^Ò^Þ^í^ÿ^_)_4_N_`_r_�_ _«_°_¿_Ó_Ú_á_ô_ö_```'`5`E`L`c`j`v`‡`ž` `¬`·`¹`¹`Ä`Ø`å`í`ï`aaa-a;a]adapaŽaŽaŽa–a¡a¥a­a±a¹aÀaÐaÛaùaþabbb#b(b(b7bDbRb]bhbvb|b‚bˆb‘b—b¦b¾bÆbÒbàb÷bùbc ccc9c?cEcKcTcecŒc”cžc¬cÄcËc×cæcûcûcd d d%d%d%d%d/eEDQ^GG[h~j��§¿ÇFœfÉ¿U¿UáUëUV"V-VFVKVOVWV`VoVvVV„V™VªVÉVÑVÓVòVúV WWW!W(W0W6W8WIWNWdWPWsWyWyW�WŠW™W¸W¿WÁWàWçWçWçWþWXXX%X;X0XSXXXiXnX„XpX“X™X X¨X®X°XÁXÆXÜXÈXëXñXñXùXYY Y Y$YTY]YiYmY{Y‘Y†Y©Y©Y»YG ;zÏâÏâîâ÷âúâ ã"ã$ã-ã2ãSãqã€ãžã²ãÊãÑã÷ãä$äAäRäiämämäqävä{ä…äˆä’ä—ä°ä³ä³ä³ä³ä¸ä¾äÚäèäôäýäåå"å>åIåUå^årårå�å†å†å”åHP‡—�C�C°C�CÒC¿CáCðCøCDDDDD=DCDIPÅÕgügü{ü€ü�ü�ü–üÃüÙüÅüöüèüýýJŒ¥Äßúßúû>û>ûQûUûwû‹û�û�û—ûŸû§û¼ûÈûÙûÞûïûüü -ü -ü -ü&üDüDüaüKP�­·=·=à=â=ð=ö=> >/>>>L>W>Z>j>Lè7Ÿ0Ÿ0Ê0Í0Ð0Ö0Û0ò0 1 1D1`1c1‚1œ1®1»1Ñ1ä1é1ô1ü1ü12222+212P2o2q2†2Œ2«2Ê2Ò2Ý2Ý2ç2ç2ù273O3a3M$ g]g]’]{]œ]¤]NLw†ÍÍÍ-Í>ÍOÍVÍ^ÍnÍyÍŠÍ�ÍÂÍOTHY`e`erete}e†e”e™e¢e¥eªe¸eÂeÅeÏeP¨!G¸c¸cÈcÑcäcñcýc dd!d8d8dGdRd[dbdkd‚d™džd°d¿dËdÝdÝdæd e e ee e:eFeIe`eQhî„PpPpiptp„pÍpÔpèpïp÷pÿpqqqq"q*q1q8qWqoqxqxq­q×qàqrr9rcror‘r“ršr¡r¡rÄràrs#sJsfs�s©sÐsìst/tVtVtetrtwtwt†t“t˜t˜tŸtªt¼tÔtìtuuuu u uu u u u0u>uQufu¢u©u©u©u±uÎuÜuúuv vv'vAv]v]v]vov}v™v·v·v·vÂvÅvôvöv ww$w-w/wwKwMwZwZw~w€w‡w˜w¡w£w±w³wÁwÃwÑwÑwñwñwñwñwxExkxsxwxxƒx‘xŸx¡x©x­x±x¹xÇxÕxÕxïxúxy$yDy]yhyryyy’yžy¥y¾y¾yÐyÕy×yÝyîyÿyzz&z/z1z?zAzOzQz_z_z_zƒzƒz¢z©z°z³z¿zÂzÐzÔzâzæzôzøzøz{{{+{>{E{`{€{“{¢{¤{³{µ{Ä{Î{Î{Ü{å{û{|'|,|U|…|Š|˜|š|¨|±|Ë|Í|Ï|Ö|ç|ð|ò|}}}} } }@}@}@}@}@}_}_}_}j}†}«}Ä}É}É}É}ë}ð}ð}ð}~~~~4~9~9~@~B~B~J~L~L~S~S~V~[~z~�~µ~Ñ~å~ê~ê~#,FHHMHnppxs³³³ÒÒÒóøøø€ € € €?€D€D€D€c€h€h€ƒ€‘€“€¢€«€Å€Ç€Ç€Ì€Ç€í€ï€ï€÷€ò€2�2�2�=�=�g�g�‘�©�Á�Ì�â�ö�‚'‚?‚]‚_‚p‚�‚¤‚«‚£†R| $÷è÷èé#é9éSékévé’é’é’éŸéºé¼é¼é¼éÉéäéæéæéôéêêê,ê>êSædÞÜÞÜøÜÝ!Ý!Ý'Ý/Ý7Ý?ÝGÝMÝZÝZÝtÝyÝyÝ݄݄݊Ý�Ý�ݕݚݚݲÝÅÝËÝÐÝÐÝÙÝùÝùÝùÝÞÞÞ Þ Þ ÞÞÞÞÞÞ Þ Þ'Þ)Þ)Þ/Þ/Þ6Þ6Þ>ÞDÞJÞRÞRÞRÞRÞ^ÞfÞnÞvÞ~Þ†ÞŽÞ”Þ¬Þ»ÞÅÞÈÞÈÞÒÞØÞÞÞÞÞâÞêÞñÞõÞýÞß ßßß"ß*ß.ß4ß?ßEßRß^ßdßlßpßwß߇ߋߑߙߠߨ߰ߴߺßÅßÊßàßñßößùßžàTL”£x‡x‡‘‡“‡š‡°‡À‡Æ‡Þ‡ö‡ù‡ ˆSˆUÔ*[–ð–ðªð¿ðÎðÒðàðéðøðøðñññ(ñ/ñ?ñVñmñsñxñ|ñ�ñ�ñ¥ñ§ñ±ñÕñàñâñûñÿñ òòòò(ò0òCò­òV$']']R];]\]d]WPÍÝ·F·FØFÅFúFçF GG G+G-G8GCGCGeGkGX,n×n×w×}ׅ׎חל×Y�בבø‘ ’’(’[’h’z’š’ª’ª’·’·’¾’Ñ’Ï’ß’ß’ê’ô’ú’““““0“7“:“O“T“_“j“„“ž“¯“µ“»““à“È“é“ï“õ“ý“””&”,”2”:”:”A”_”G”h”n”t”|”œ”„”¥”«”±”¹”¹”¹”ϔϔϔϔڔä”í” ••*•/•@•T•Y•Y•d•l•w•€•Œ• •°•ŕڕ÷•ü•ü•–––'–7–F–c–x–�–˜–�–�–¨–¾–Ó–ß–ð–õ–———%——=—B—B—Q—V—V—e—j—j—{—€—€—‘—–—–—©—¸—½—½—Зß—ä—ò—ä—˜ ˜˜ ˜-˜2˜@˜2˜T˜Y˜g˜Y˜{˜€˜€˜�˜¢˜Ęɘטɘë˜ð˜ð˜ ™™4™9™G™9™[™`™`™}™‚™¤™©™·™©™Ë™ЙЙí™ò™šš'šš;š@š@š[š`š`š{š€š€š›š š š»šÀšÀšÛšàšàšûš››› › ›;›@›@›Q›V›V›g›l›l›x›ƒ›˜›�›�›©››Ç›í›ô›þ›œœœ3œ>œCœTœ_œgœlœlœpœtœ{œ…œ�œ�œ¢œ§œ§œ§œ«œÄœÍœÍœóœøœøœ���7�D�O�Z�e�w�ƒ�Œ�‘�‘�‘�¢�¿�Ê�Ô�ß�ä�ï�÷�ü�ü�žžž#ž3žKžcžwž|ž|ž‡žšž¤ž¯žОÜžížòžŸŸ Ÿ ŸŸ'Ÿ/Ÿ4Ÿ?ŸOŸ^Ÿ{Ÿ�Ÿ¥Ÿ°ŸµŸÀŸÈŸÍŸØŸèŸ÷Ÿ ) > > > > C H H T e e Š Œ © © ³ Ç Ñ Ó ß ç ¡¡ ¡*¡M¡^¡o¡€¡‹¡£¡³¡¸¡¸¡áȡȡСÛ¡à¡à¡è¡ó¡ø¡ø¡¢!¢ -¢¢9¢>¢>¢F¢g¢P¢N¢¢„¢˜¢„¢°¢µ¢µ¢¢Ç¢Ç¢Ï¢Ô¢Ô¢æ¢ø¢ý¢ý¢£ý¢)£.£.£6£;£;£N£S£S£f£k£k£…£•£š£š£´£Ä£É£É£ã£ó£ø£ø£¤"¤'¤>¤'¤V¤[¤[¤f¤k¤§¤•¤ƒ¤k¤¿¤Ĥ¥î¤ܤĤ¥¥¥,¥<¥A¥A¥P¥`¥e¥e¥t¥‚¥‡¥¯¥�¥‡¥Ç¥Ì¥ô¥â¥Ì¥ ¦¦9¦'¦¦Q¦V¦V¦s¦]¦�¦­¦²¦²¦ͦ¹¦÷¦§ § §§§§)§.§.§A§Q§V§V§i§y§~§~§‘§¡§¦§¦§¹§ɧΧΧÖ§Û§Û§ã§è§è§ð§õ§õ§ý§¨¨¨¨¨-¨2¨€¨n¨\¨J¨2¨�¨’¨à¨Ψ¼¨ª¨’¨í¨ò¨ò¨©©!©!©2©M©R©R©c©q©v©v©~©ƒ©ƒ©‹©�©�©˜©�©�©Õ©é±©¤©ô©ªªªLª:ª(ªªkª†ª‹ªÀª®ª£ª‹ªتݪ««õªݪ*«/«I«3«/«a«f«ƒ«m«f«›« « «¬«Å«Õ«æ«æ« ¬ ¬#¬)¬)¬F¬S¬„¬µ¬£¬جà¬à¬à¬ì¬ñ¬ñ¬­­­­)­3­8­8­R­W­W­_­d­x­d­‡­’­—­«­—­º­Å­Ê­Ê­Õ­æ­ë­ë­ö­®®®®®®6®A®F®Q®F®`®e®y®e®ˆ®�®˜®�®§®¬®À®¬®Ï®Ô®Ô®è®Ô®÷®÷®÷®ü®¯ü®¯ ¯ ¯,¯ ¯?¯D¯D¯P¯D¯c¯h¯h¯t¯h¯‡¯Œ¯ ¯Œ¯¯¯»¯ƯѯÖ¯ê¯Ö¯ù¯°°° °4° °K°C°T°Y°Y°a°f°f°o°t°t°}°‚°‚°‹°�°�°›° ° °«°°°°°»°À°À°˰ааÛ°à°à°ë°ð°ð°û°±±±#±.±9±D±I±I±S±X±X±b±g±g±q±v±v±€±…±…±�±’±’±Ÿ±¤±¤±±±¶±¶±¶±¶±¶±¾±ññ˱ббرݱݱå±ê±ê±ò±÷± ²÷±²+²0²0²7²B²b²g²}²ˆ²¡²�²°²»²Ʋ˲˲Ò²ݲý²³³#³<³(³K³V³a³f³f³m³x³˜³�³³³¾³׳óæ³ñ³ü³´´´´+´K´P´f´q´Š´v´­´™´¼´Ç´Ì´Ì´ç´Ó´ö´µµ1µ<µUµAµxµdµ‡µ’µ—µ—µ²µžµÁµáµæµüµ¶ ¶ ¶C¶/¶R¶]¶b¶b¶q¶v¶v¶…¶жжж�¶•¶•¶•¶Ÿ¶¡¶¡¶«¶²¶Õ¶×¶×¶á¶á¶á¶á¶á¶ã¶ã¶ú¶· · ···$·/·:·E·?·`·}·r·•·•·£·�·É·¾·á·á·á·ê·ñ·¸ ¸¸*¸*¸I¸T¸k¸‹¸‹¸‹¸¬¸¼¸Ѹã¸ó¸ó¸¹ ¹.¹@¹@¹D¹I¹P¹`¹¹¹ƒ¹š¹¡¹¦¹¦¹ª¹µ¹Á¹Ϲü¹ºº$ºWºcºhº~º–º¢º³º¸ºɺ躻?»B»R»T»T»X»w»‚»‚»…»–»Ç»ê»ê»í»¾Z, ž×ž×¬×²×¶×¿×È×Î×[`BVç‰ç‰ý‰ ŠŠŠ%Š>ŠBŠHŠ^Š{Š}Š}Š®ŠœŠ}ŠÍŠ׊\8 -·\·\Ø\Å\ç\ò\ý\]] ]%]]\’@¡@¡N¡P¡[¡c¡n¡y¡„¡†¡œ¡œ¡®¡º¡Ã¡Æ¡õ¡^øª¤çîçî ïïïJïJïUïbï€ïˆïµïºïãïð ð%ð)ðLðrðwð ð½ðãðúðñññ%ñ*ñ;ñCñbñhñlñ…ñ�ñ¬ñ±ñÂñÊñéñîñöñüñòòòò#òAòFòSòXòXòeò}òŒò™ò¹ò¹òÐòÕòÕòìòîòîòóóóóóó4ó6ó6óMóMóbógógóvóvó¯óÈóÈóÛóàóàóàóàóô'ôCôCôCôPôgôiôiôiôvô�ô�ô�ôœô³ô³ôÊôÌôçôõõõõ õ õ õõõõõõ õ$õ$õ@õ@õ@õHõMõMõMõUõZõZõbõbõdõŽõ�õ°õÐõÐõÐõÐõÐõêõíõö ö öö'ö)ö5ö5ö=öOöOö[önö…ö�ö·öÉöåö÷&÷:÷X÷}÷�÷¯÷Õ÷î÷ý÷ø/ø4ø4øhømømø€ø€øŒøžø£ø£ø·øÕøúø ù,ùRùsù‚ù°ùÂùÌùîùðùðùðùüùüùüùúJúLúLú[ú[ú`ú`ú`ú`ú`úwú|ú�úÞú_\ -RRR/RKRXRoR‚R�R¢R�R±R¹RÄRÚRÐRòRøR`øA?=?=]=`=g=n=u=y={=‚=‰=�=‘=¤=Ì=ç=Ô=ÿ=>(>(>4><>K>…>Š>·>¿>Ä>Í>Ù>á>è> -??2?4?V?b?„?Š?‘?‘?—?š?ž?¯?Ò?ä?a$—á—á¦áÁáÁáÇáb|Xsìì1ì]ì]ì|ìŒìŽìŽìŽìŽì•ì�ì¸ìÑìÓìÓìÓìÛìöìøìøìíííc”"÷5÷56#6/646D6J6_6s6ƒ6‘6Ÿ6¶6¾6È6×6ß6ì6ô6÷6÷6÷6ù6777#7&787dôÍ':':P:]:`:i:o:†:�:´:¿:õ:;; ;*;D;V;c;y;�;¦;«;½;Â;Å;å;< <<<:<Z<b<j<l<Œ<”<™<ž<©<©<´<´<À<À<Ò<=+=+=;=ed¤¹0�0�@�G�S�Y�a�o�‚�Ž�¨�µ�µ�¸�Æ�Ö�ð�ô�ü�f(¸þr*r*ˆ*�*¡*Ð*à*ç*÷*+ -++8+b+s+�+�+ˆ+˜+¤+´+½+Ô+Ô+ê+ê+,,,,,,,,B,B,X,X,n,n,„,„,›,›,²,²,É,É,à,à,÷,÷,--%-%-<-D-O-`-k-|--�-˜-Ÿ-à.g¬÷N N h n u } … ˆ “ ¥ ¥ ¼ à Æ È Ô å å è ð      $ ( 0 > P c f µ h(ÅË„„>„+„M„_„g„i= R RBRWR\RdRlRtR�R‡R�R–R›RºRÓRØRÞRàRâRïRïRôRýRSSSS S(S0S=SCSNSUSeSpSS S§S²S»SÌSÐSØSØSìSüSTTmTj8-7"0"060:0?0J0U0X0\0d0kˆWõ׊׊ñŠ ‹‹‹‹ ‹E‹J‹U‹s‹]‹‚‹•‹§‹°‹¸‹‹à‹ò‹û‹Œ Œ(ŒŒ7ŒIŒSŒ[ŒsŒ]Œ˜Œ‚Œ§Œ¹ŒÃŒËŒËŒÔŒÜŒòŒ ��,�0�0�7�<�Z�\�a�l�‚�‚�‚�†�’�³�½�Ç�Ð�ñ�û�ŽŽŽ$Ž2Ž@ŽCŽ\Ž`Ž{ŽŽžŽ¢Ž½ŽÁŽÁŽÁŽÇŽÕŽߎøŽþŽ ��� �%�>�I�W�a�z�}�…�‘�“�›�ž�·�¹�Å�Ç�Ï�Õ�î���'�,�A�Q�j�{�{�†�‘�©�µ�Ê�Ï�ä�ô� ‘‘‘$‘/‘7‘E‘L‘^‘leãžàžà¸àÁàáàáàçàïà÷àÿàá ááá(á-á-á3á8á8á>áCáCáIáNáNáfáyáá„á„á�á­á­á­á´á¶á¶á½á¿á¿áÅáÅáÌáÎáÎáÔáÔáÛáÝáÝáãáãáêáêáòáøáþáââââââ"â*â2â:âBâHâ`âoâyâ|â|â†âŒâ’â’â–âžâ¥â­âµâ¹â¿âÇâÎâÖâÞâââèâóâùâããã ã$ã+ã3ã;ã?ãEãMãTã\ãdãhãnãyã~ã”ã¥ãªã­ãRäm`b!b!k!r!†!š!Ÿ!½!Â!à!â!"""-"6"8"L"\"�"n�2Òh•h•~•�• •±••ӕæ•î•ü•–%–+–8–M–M–`–q–w–Œ–§–§–³–»–Öɖޖæ–ê–ò–—— — — —5—<—D—L—R—u—ˆ—”—˜—¢—»—Á—×Зҗä—ä—ë—󗘘6˜D˜W˜[˜e˜i˜u˜y˜…˜‰˜•˜™˜™˜¯˜Â˜È˜Ì˜Ö˜Ú˜é˜í˜ü˜™™™™™™.™<™I™Q™h™x™†™‘™§™´™Ã™Ë™Ø™ó™šššššš%š4š<šBšWšfš{šŒšœš¢š¢š¢š´šºšÆšÌšÙšôš›››#›5›C›e›ïœoÔ¼í`n`nrnƒnŽn™n²nÄnÜnánðn÷no oo o"o%o*o,o2oLofo|o”o™o¨o¯o¼oÓoñoøoúoýop%pCpOpp$hm&& &4&;&U&qxKeÏTÏT÷TãTU!U U0U5Uü>ü\ügürü˜ü˜üšü§ü²ü¸üÉüØüçüôüôüúüÿüýý-ý8ý<ýNý[ýcýnýjý…ý“ý“ý“ýžý¹ý¤ýÁýÔýÖýòýÞýúýþþ -þ&þ&þ-þ3þ<þCþFþhþ|þoþ„þŠþ“þ“þ“þ¦þ«þ«þ³þ³þ¾þÓþÜþÜþÜþÜþøþÿÿÿÿ/ÿ5ÿ:ÿ:ÿFÿcÿƒÿˆÿ�ÿ�ÿ™ÿ¶ÿÅÿÔÿÜÿáÿçÿìÿìÿóÿúÿ:<Ynntt�ŠŠ¨¾ÉÎÛæï÷..@Fu~~€‡ŒŒ™¤ª³³ÆÓåðþ 6?JOV^q†‹’Ÿ¦¸ÍÔÚããì  0>>DKTTgy||�•�©ÆÍÚÜã÷000==R]o|‡• ¯¶¶Ïâäó ---3<<IOaanq|Ž• ¥­´¿ÄÙÛõ - - - *8JJPW`e‰’’˜¡¡ÀÀÍÐÙâêõ %(1:BM_epp}€‰’”¶ÉÞäï“ |t·ÐJ4J4\4e4h4q4z4Œ4Œ4¸4¼4Á4Ä4Í4Ü4â4å4í4ð4õ4ÿ4}`2ÿRÿR'SS6S[SGSjSoSvS~S…S�S˜S£S¹S®SÑSÙS~À-ègèghh h h*h*h4hFhShVhXhahnhnh|h�h�h´hÁhÁhÑhÞhÞhiii#iEiZi|i…i’i’iµi¿i¿iòi%j+j+j+j=jt�¶R3R3f3‡3™3­3´3À3Ú3ã3é3ü344444 444:4<4<4D4€¸ºäŽŽŽŽ&Ž*Ž7Ž:ŽTŽTŽTŽZŽ^ŽfŽqŽ…Ž‘Ž“Ž“ŽœŽžŽžŽ§Ž©Ž©Ž²Ž´Ž´Ž½Ž½ŽÆŽÌŽÏŽÙŽêŽðŽüŽüŽd��œøO*O*m*~*–*�*¹*®*Ñ*ñ*Ý*+++7+#+O+l+s+�+„+§+Ç+³+Ö+ç+ý+é+,",",:,:,D,‚¨¥44#434>4h4˜4©4º4Ì4Ó4Ú4î4õ4õ455!595H5U5X5q5t5y5�5 5°5´5»5ñ5ƒx± X±X±n±u±|±›±ª±¹±È±×±æ±ð±ð±õ±ü±²²#²>²X²X²n²€²„²’²™²ž²ž²¥²·²À²Â²Ð²â²â²â²ô²ÿ²³³)³.³>³C³S³_³d³q³v³†³‹³›³�³­³¯³¿³Á³Ò³Û³Û³Ý³í³ô³´´ ´1´C´U´e´e´e´h´{´„\åøh�h�ƒ�Š�����²�¹�Ã�Ñ�Ô�Ö�à�ò�ò�ù�/�…0ÎÖ––®î⸶ -†`,ç‡ç‡ý‡ˆˆ ˆ/ˆHˆLˆRˆhˆ…ˆ‡ˆ‡ˆ¸ˆ¦ˆ‡ˆ׈ሇL[j�2�2�2¯2µ2½2Ï2Õ2Þ2ð2ö2ù253ˆ(–œ"3"303?3C3F3L3‰\k~7373E3W3]3e3w3}3†3˜3ž3§3¹3¿3Â34Š, F×F×T×[×c×h×n׋„ 5GNUdi‹‹�²Ç´Öåç   4*LVŒ`J÷i÷ijj#jHjVjXjfjsjyj„j›jªjµj¹jÄjÐj×jãjújk$k;kEkSkekgkuk‡k‡k�k¡k§k·k·kÏkÏkôkôkùkùklll'lp>pCpGpWp`prpxpzpzpˆpŽp—p¨p±p½pÍpÍpÍpÒpêpêpùpüpq.q9qbqtqq‘q•qšq¡q³qÃqÞqåqéqïq÷qrs�8í÷¯)¯)É)Þ)ô)**-*E*E*O*Ž`j~ˆ ˆ ¨ ¯ · Â Ì × ß î ø û  ¡"¡2¡2¡@¡�_ŸÛŸÛÁÛÈÛÏÛÔÛëÛýÛÜ Ü Ü$Ü0Ü8Ü;Ü=ÜGÜQÜQÜUÜ]ÜeÜmÜw܀܈܋ܔܯÜÀÜÇÜÊÜÏÜÞÜäÜìÜìÜóÜöÜûÜ -ÝÝÝÝ&Ý)Ý.Ý=ÝHÝPÝPÝ[ÝoÝvÝ}Ý”Ý�83=&Ø&Ø/Ø/Ø=ØAØOØRØWØ‘8>H^Ø^ØgØgØuØy؀؃؈ؒDDQ—1—1±1Ä1Î1Õ1á1ù12222=2“Ä{¨ßß   %++=DZm|‚„‹‘››¯±¸¾ÈÈÈßñø  22D”0RZ?2?2H2n22…2…2�2•„\y®ò®òÀòÕòßòèòêòñòó óóóó!ó2ó5ó5óYódófóó†óŠó™ó¬óÿó–  -Ž0Ž0—0´0¹0—hOgOgegpg{g‰g”g�g®g·gÈgÎgÚgñgñghh!h*h;hAh�h˜„a~§M§M×MÝMæMòMúMNNNNNN2N\NaN…N�N�N§N¿NãNOO™lò  18?ac…š‡¼©ËËÝäš y}¸‹¸‹Á‹Í‹Ò‹›(A†è†è¨è°è¶è¾èÀèÀèÑèÑèÑèÙèáèóèéóèééé3é5é5é@éFé`éeéeéeézé|é‰é‹é˜éšé§é¯é·é¾éÒéßéáéòéÿéÿéÿéêê-ê3ê;ê=êJêJê_ê_ê_êjêtêŒê‘ê‘ê‘êŸê¥êªê²ê½êÏêÚêßêßêæêêêøêüêë ë*ë7ë>ëGëcëhëhëhëhëpë{ë‰ë‰ë©ë©ë©ë°ë¾ëÍëàëóëõëõëõëììììì!ì3ì=ìYìƒì‰ì‰ì�ì¢ìÆìÍìÙì÷ì -ííí í í í í+í5íCíeípí�í—í—í¥íÃíóíîî.îAîFîFîFîNîYîkîvî{î{î{î�î·î½î½î½îÈîÒîÞîéîëîëîëîðîüîüîFïœH%‚/‚/�/—/¢/¯/º/Â/Â/Ú/ä/ê/ð/�0 �Q�Q¶Q£QÅQáQ×QùQRžLÝìŸ(Ÿ(¹(Î(ä()ò()")M)n)[)†)ž)ž)¨)Ÿð·OOLOUOaOiOtO“O“O�OŸOºO¢OÉOÉO×OáOèOP -P$P+P+PGPGPnPsP’P«PÈPËPÓPÚPúPüPQQQ9Q9QVQVQ}Q�Q TVgþþ!'->LZlpv„‡‘¡0 -R>3_K‚n‘�¢®¾ÅÒÝéôü &-1<ALenz“šžž£¼ÁÚï       4 I T ^ i k v ~ ~ Ž ƒ ¦ Æ ¢àZŽÐeÐeêeøeýe -ff!f\U\i\n\y\€\£\£\£\µ\«<ÑÜ55 555$5,545;5K5K5P5¬°)@£@£c£p£u£y£‚£‘£�£¨£³£»£Æ£Î£Ñ£Ý£å£ÿ£%¤ ¤5¤>¤s¤_¤ƒ¤ƒ¤›¤¦¤Â¤É¤í¤&¥&¥&¥&¥‡¥­”‹,.¹.¹K¹R¹Z¹e¹|¹†¹†¹�¹§¹Â¹Ø¹æ¹ê¹ -ºº2º9º=ºVº`ºqº~º~º…ºŒº‘º–º›º¢º©ºÃºÊºÚºÞºÞºèºþº»»»&»9»9»?»J»Q»Y»d»k»s»~»…»…»�»®»²»Ê»»»å»å»ë»ò»¼ ¼¼ ¼$¼&¼8¼8¼8¼J¼R¼x¼†¼†¼Š¼Ÿ¼§¼·¼Â¼×¼Ü¼ê¼ù¼½½½ ½%½-½1½@½B½Q½S½b½d½s½z½~½’½œ½ª½±½µ½Å½Ð½Õ½ó½ý½ ¾¾¾ ¾.¾5¾9¾C¾W¾_¾j¾n¾n¾n¾y¾„¾”¾ ¾¶¾¾¾É¾Ø¾à¾ë¾ð¾ø¾¿¿¿¿#¿7¿?¿J¿J¿J¿J¿g¿„¿�¿˜¿¨¿¸¿Ö¿Ú¿ Àþ¿ï¿ÀÀ#À*À9ÀHÀRÀ`ÀgÀkÀmÀ|À†À”À›ÀŸÀŸÀ¡À³À³ÀÅÀÅÀÅÀ×ÀéÀñÀ Á5ÁCÁGÁeÁlÁsÁ~Á”Á™Á Á³Á½ÁËÁÒÁÖÁØÁëÁõÁ -ÂÂÂÂÂÂ'Â6Â@ÂNÂYÂ]Â]ÂbÂjÂnÂ}ÂÂŽÂ�Ÿ¡°·»ÂÏÂÙÂçÂîÂòÂà ÃÃ0Ã:ÃHÃOÃSÃ]ÃkÃrÃvÀÔÜçëëëöýÃËÃåÃõÃÄÄÄ%Ä5ÄAÄWÄ_ÄjÄyÄ�ČđęĤİĴĿÄÄÄØÄàÄëÄëÄëÄëÄÿÄÅ$Å1Å5ÅIÅZÅoÅ|ŀŎţųÅÊÅãÅüÅþÅ ÆÆÆÆ7ÆHÆ_ÆxƆƑÆ�ƥƧƲƺƺƺÆ×ÆåÆóÆ -Ç!Ç0Ç=Ç]ÇdÇdÇtLjǢǢǦǼÇËÇæÇñÇÈÈÈ5È5ÈHÈcÈlȃÈ�ȬȹÈÙÈçÈýÈÉ)ÉAÉAÉYÉYÉeɀɘɡɡɡɭɾÉÖÉßÉßÉæÉïÉõÉÊ`Ê®<ùD0�0�U�a�l�v�|�†�Œ�–�¤�®�À�Ê�Ð�Ú�à�ê�ñ�ý�‘ ‘7‘F‘I‘K‘U‘g‘q‘ƒ‘�‘¢‘¢‘¥‘¯‘đɑّä‘é‘ý‘ÿ‘’3’3’=’R’`’i’q’’�’ ’±’¾’¾’Ë’Ë’Ó’á’(“¯$› ¯P¯PÃPËPÖPÜP°l£:÷F÷FG(G8GXGjG‚G�G�GÇGÏGÓGÖGÚGßGéGìGóGùGHH -HHH*H1H8H:H>HGHQHTH_HkHnHHŠH�H—H H¹HÊHÓHÜHäHïHúHII(I4IBIDIKIRIWI[IhIoI’I IªI´I½IÖIçIðIùIJ -JJJJJ*J1J?JIJ^JhJqJŠJ›J¤J­JµJ¾JÄJÈJÍJÓJÝJçJKKK K'K/K7KDKLKkK^K€K‰K¤K¸KËKÒKÛKäKëKôKýKL LL/L3L�L±  °ˆ°ˆ¾ˆàˆæˆ²¸�·z'z'ˆ'�'È'Ê'ÿ'*(*(:(?(?(S(X(X(t(y(y(™(ž(ž(²(·(·(Ô(Ô(â(),)L)^)p)‚)’)’)’)’)™)r*³$bgÊ%Ê%Î%æ%ø%&´ƒ·Ã·ÃÉÃØÃØÃÛÃäÃðÃðÃÄÄ.Ä5Ä9ÄIÄiÄ{Ä�Ä�Ä™Ä�ģĬÄÂÄÆÄãÄÅÅÅ(Å:ÅFÅHÅTÅ\Å`ÅfÅoÅoÅoÅ�ŌŒŨůŷÅÍÅÔÅÔÅÔÅâÅ ÆÆÆ,Æ4Æ=ÆHÆNÆdÆkÆsÆzÆ�ƠƠƧƧƧƵÆÜÆéÆòÆúÆ ÇÇÇÇ(Ç/Ç=ÇAÇMÇeÇmÇsǂNjÇ�ǗǠǠǮǶǼÇÙÇâÇêÇðÇöÇöÇöÇýÇÈÈÈ!È'È'È)È3ȵx‡Ú‡Ú•ÚªÚ±Ú¼ÚÒÚüÚÛ Û7Û=ÛLÛUÛ]ÛeÛgÛmÛsÛ‚ÛŠÛ�Û’Û˜Û¶¤Ôyff*f2fBfJfnf…f‰f‘f™fŸf¨f´f¼f¼fÄfôf3ggVg[gcgsgug£g©g²g¹gÁgÉgÕgÝgågøghhh/h6h8hBhQhqhxhzhšh¡h¡h¡hªh±hÊhÐhØhØhÝháhíhöhÿh i.i'K'a'�'›'©'µ'¼'¼'Ï'Ó'Ó'Ó'Ú'ß'ù'((((4(6(;(U(c(o(v(v(ƒ(�(�(Ÿ(º¤ ¿¤XJXJuJ„J„J„J¡J¡J²J²J¸JºJºJÀJÂJÂJÈJÊJÊJÑJÕJÚJÚJÚJÚJÚJÚJâJúJúJKK$K1KIKKKjKlK‹K�K¯K´KºKºKÓKÖKýK -L"LBLBLKLPLnL\LtLƒLˆL�L˜L«L³L»LÀLÀLÀLÉLâLèLèLMM,MEMGMOMUM]MbMbMhMhMqM‚M„M™M›M£M©M±M¶M¶M¶M¶MÄMÛMÝMñMñMùMÿMN NNN&N,N2N4N4N4N\@\I\X\`\e\k\k\s\|\Š\•\š\ \¨\­\­\­\­\­\­\­\­\­\­\Æ\Ì\Õ\Û\ã\è\í\ö\] -]]]]]]%]*]*].]3]3]<]J]V]_]e]e]n]„]„]Š]“]©]©]²]´]º]Ã]Ù]Ù]â]â]â]ë]ð]ð]ø]ý]ý]^(^4^9^?^I^Q^V^V^V^j^s^y^‹^•^•^�^�^¥^§^§^À^Ê^Ó^Õ^Õ^Õ^Û^ß^á^á^á^á^æ^ì^ò^ö^mb»Ìz© m mAmLmbm~m‹m¢mµmÀmÖmÂmåmímímümümnn&n;nJnUnhnnnnnnnsnxn‡n’n¬n®n³nÂnÍnÚnänänòn¼”*Kˆ¥ˆ¥ ¥§¥®¥±¥º¥½¥À¥Ä¥É¥ë¥Ø¥û¥¦ ¦¦¦ ¦)¦2¦8¦;¦L¦j¦{¦†¦¸¦½à.¢CC%C0CACDCHCQCXCfCuC‹CœC­C¿CÑCàCïCDDDD!D%D*D.D;DBDPDdDmDsD�DšDœD DªDªD¯D¯D¯D´D´DÃDÌDÔDêDêDêDïDïDEEE#E#E&E+E+EJEVEcEeEeEiEkEkEŠE–E¢E¤E¤E§E©E©E¶E¸E¸E»E»EÄEÊEÏEëEëEëEëEëEëEëEëEëEëEëEëEíEþEF F.F.F2F2F:FSFWF\F÷F¾,××,×3×;×@×F׿l3JßSßSõSTûSTCT/TRTWT^T^TdTgTkTsT‹T–T¬T¡TÄTÎTÀPQaâ$â$ð$þ$%%&%+%H%N%U%\%j%v%ˆ%Ä%ÁD+ÞåÞåòåææ)æ/æ5æZæ`æfælælætæÂô#œ?7?7G7V7Z7g7t7ˆ7—7´7Á7Ó7õ78+8G8Y8q8ˆ8“8´8Ò8á8ü89"9;9;9V99™9´9Æ9Õ9ä9ä9ï9::&:6:C:O:^:{:{:ƒ:ƒ:ƒ:”:¡:¨:Ç:Ð:á:å:í:ø:;(;1;A;I;N;r;‚;’;�;±;¶;¾;ä;æ;ñ;$<><><V<e<m<|<…<�<Ÿ<Á<É<Ñ<Ü<Þ<î<==6=N=`=w=€=‰=›=©=­=±=à èˆèˆñˆ‰‰Ä\‡ZÆÍÆÍàÍçÍôÍÿÍÎ -ÎÎ"Î:Î@Î^ÎtÎ΅ΧΧηÎÌÎÎÎÑÎÝÎåÎíÎõÎÏ ÏÏÏÏ Ï2Ï8Ï=Ï=ÏTÏTÏrÏrÏ…Ï’Ï—Ï—Ï®Ï·ÏÆÏÜÏçÏõÏÐÐÐ/Ð5Ð?ÐKÐXÐZÐZÐbÐgÐgÐoÐtÐtÐ|Ð�Ð�ЉЎЎДЙЙРХХЬббмÐÁÐÁÐÌÐÑÐÑÐÜÐáÐáÐìÐìÐÑÑÑÑ"Ñ%Ñ9ÑFÑUÑ\Ñ_ÑqÑsÑyÑ�њѩѩѩѩѳÑÍÑâÑôÑÒÒ Ò%Ò*Ò5ÒGÒXÒgÒmÒ~Ò‰Ò“Ò£Ò²Ò¸ÒÃÒÉÒÞÒäÒõÒÓÓÓÓ&Ó9ÓEÓMÓ]ÓdÓjÓ{Ó†Ó‹Ó¨Ó½ÓËÓÛÓçÓùÓÔÔÔ'Ô/Ô4Ô;Ô?ÔMÔWÔ]ÔgÔmÔxÔ~Ô€Ô�ÔšÔ¤Ô½ÔËÔËÔÑÔØÔ×ÅD#°(­(­G­i­q­q­­’­¬­¯­¸­Ô­Ô­Ô­Ü­Þ­Þ­æ­è­è­ð­ò­ò­ú­ú­® ®®®®&®*®/®5®:®:®:®:®B®K®Q®V®V®[®h®�® ®£®¹®Ø®Ø®Ø®à®â®â®â®ê®ì®ì®ì®ô®ö®ö®ö®þ®¯¯ ¯ ¯¯¯¯¯¯¯(¯:¯H¯V¯`¯`¯`¯p¯p¯w¯{¯�¯™¯§¯º¯Ç¯ð¯ó¯ü¯°° °(°3°3°>°D°I°I°I°P°V°k°s°y°„°›°²°¾°Ä°É°É°Ð°Û°Û°à°ò°ø°ø°ø°ø°T±Æd*DD2D4K4w4|4‰4©4®4½4é4ñ4ö4 575?5D5D5W5j5~5‚5¤5µ5º5º5æ5æ5æ5æ5æ5ú566666J6O6X6e6m6ˆ6Ÿ6­6¸6Ô6Ô6Ô6á6ø6ú6ú6ú677 7 7-7D7D7T7Y7€7—7©7Å7Å7Å7Ò7é7ë7ë7ë7ø788885858E8M8R8r8‰8›8·8·8·8Ä8Û8Ý8Ý8ê89999%9G9e9j9x9†9�9’9’9’9¯9·9¹9¹9á9':Ò¤%J?ê?êYê…ê…ê¤ê´ê¹ê¹êÈêÚêôêüêëë#ë+ë+ë+ë-ë-ë-ë-ëIëIëIëIë`ëbëbëbëbë}ëˆë½ëÓÐç……•…¡…¦…¦…²…·…¼…Ç…Ì…Ì…Ì…†î…†7†7†P†i†‚†›† † †¹†Ò†ë†‡ ‡ ‡"‡;‡T‡m‡o‡o‡ˆ‡¡‡º‡Ó‡Ó‡Ó‡å‡Ô0�‰wíwí…í‹í�í®íÏíÏíÕíÕ<:E99#9.9<9H9T9]9f9o9u9z9ÖluŒª&ª&¸&Â&É&à&à&å&ç&ó&ý& '('*':':'?'A'H'z'×ÈŸÍOvOvcv�v‚vnv­vßvÅv¸v -www(w7wNwkwÄw¬w˜wÊwÕwxxx-x5xZxOx;xmx†xrx©x•xÀxÇxóxóxóxóxûxØL^mï/ï/ 0 0&0H0H0Z0g0w0m0�0™0Ù$qv÷N÷N OOO$OÚÈg•b1b1†1Š1©1Ë1×1Þ1é1÷12 2 22242?2O2[2b2m2~2€2‘2“2•2•2•2�2�2§2§2¯2·2¿2Ç2Ë2Ö2"3Û XˆXˆfˆ}ˆƒˆÜ`FZz9z9Š9‘9“9˜9§9­9Â9Â9Ð9Ð9Ü9å9è9ö9:: :Ý<ö_‘_‘h‘s‘~‘‰‘”‘ž‘¼‘Ç‘בÞ =�h�h§h¹h¿hËhÖhähðhii"i4i:i@iFiYi_ihini€i†i‘i™i§i´iñiß,29111.1G1[1^1d1à4‰‰&‰0‰9‰@‰G‰Q‰Q‰W‰áÄMz§ÿ§ÿÓÿÖÿÛÿèÿíÿÿÿ   8^gry’¸½Öü!GIbˆˆˆ ºÉÛâ �Ï/x/xMxPxVxjxrxƒx�x–x›x›x¨x±x·xÇxÕx×xöx -yyy-y-y;yNyYy]ynynynysysyyŽy¡y§y¬yÀyÆyÎyàyæyèy÷yz -zzzz!z(z4z;z=zBzJzLzQz]z_zdzlznzsz{z}z‚zŠzŒz‘z™z™z™z©z©z©zÀzÆzÌz×zÜzõzûz{{{{"{;{F{Q{W{d{i{n{n{ƒ{‹{•{�{¥{Æ{Ñ{Ü{è{â{ñ{ú{ÿ{|| |)|5|;|G|K|P|U|`|k|v|x|~|‹|�|•|®|¹|Ä|Ä|Ê|×|Ù|Þ|ç|} }}})})}-}2}2}C}E}E}X}Z}Z}m}o}o}‚}„}„}—}™}™}«}«}±}¶}¶}Í}á}Ö}î}ö}ý}~ ~~)~ ~9~9~;~S~V~X~g~y~‰~•~¬~Æ~Ë~ß~ï~$6AIQUcinntˆ˜��£©®®®´ÃÖãçììðõõú€€+€A€M€M€S€`€b€o€{€Š€�€�€ª€¶€¶€¶€¶€º€¿€Ѐâ€í€õ€ý€ÿ€��$�3�9�F�F�]�m�m�������˜�¤�»�»�Á�Î�Ð�â�â�í�í�í�í�í�i„ã ŒÐ'W'WEWSWjWoW”WšWŸW¥W³WºWÉWÎWÚWìWìW -XX(X/XIXfXrX�X¥XÁXÊXÙXáXîX÷XüX YY:Y?YGY`YrY‚YˆY“YœY¢YèYÒYÃYøY3ZZZCZFZkZúZä<+6ÐDÐDñD÷DEE+E3EMEYEå„ |¶ ¶ Ø ã ê ò õ õ !!!!!!!'!-!3!:!@!Q!Q!S!\!h!n!“!—!š!ª!²!·!·!¾!Ç!Ø!Þ!ç!ò!"" """"")"1"7"9"G"^"a"p"}"Š"Š"Š"Š"�"¢"«"¼"Ý"î"# ## #&#&#/#6#B#R#]#]#]#q#…#•#˜#S$æ„9ò7ò788$8(8>8k8�8’8›8©8»8Ô8Ô8æ899 99çX{ÍŽŽ¹ÃÖáó '=EXm}‡‰™©²¸½ÄÊÐÖáìïö2GTW_cu„‹“®ËÏØßñù !8FLPR___ax~~�è  -ˆˆˆˆ‘ˆ¥ˆªˆé¤ŸÄ‚‚›‚¡‚³‚¸‚¾‚Á‚łłè‚킃ƒ)ƒBƒ.ƒQƒgƒSƒvƒ~ƒƒƒ‰ƒŒƒ�ƒ’ƒ«ƒ—ƒºƒºƒºƒÕƒ„„ê˜Ìîââëææúõ ""11@@OO^^m�|‹‹š©¸#ëxÓí/e/eMe_eeeqeˆeˆeše e«e»eÇeÐeÖeÜeçeõefff+f+f[fìd”©'î'î+î>î>îXî_îkîkî‚î‚î™î™î°î°îÇîÇîÞîàîàîäîíÌÂñWWy€‹¡¡³¾ÒÖÛßáçù5DHHH[pp|‚Œ—¥¬»½ÖððîP7G`E`EvE‚EŠEŽEŸE­E³E¿EÇEÒEØEÛEåEï ®-o>o>‰>”>˜>¡>¨>¯>Å>Ö>ç>ù> ??)?:?I?I?P?T?]?j?q?z?�?…?¥?¥?¥?¥?¥?±?µ?¸?À?Î?Ö?ã?ë?ó?@@@@!@'@6@M@O@Z@g@r@u@{@w@�@¦@¨@¶@¸@Ã@É@É@Ñ@Ñ@ã@ê@AAAAAA+A6A;A;A>ACACAbApA}AAAƒA…A…A¤A²A¾AÀAÀAÃAÅAÅAÒAÔAÔA×A×A×A×A×AàAæAêAöAB#B1B8BCð(rxˆ‹ˆ‹–‹�‹­‹°‹¶‹ñ(ntZ&Z&c&m&~&‰&‰&§&òTzKôô$ô*ô-ô6ô@ôXôhôqôwôzô~ô€ô˜ô¨ôµô»ô¿ôÅôÇôÊôÎôÎôñôõôûôûôõ)õ>õQõdõjõqõ|õ†õŠõ�õ”õšõžõ¤õµõ»õÀõÅõÒõÔõæõèõïõüõþõööööö4ö?öKöböböwöƒö öÄöÞöãöúöÿö ÷$÷)÷/÷@÷U÷[÷k÷x÷Œ÷“÷Ÿ÷·÷Ã÷Ã÷Ã÷É÷Ì÷Ï÷è÷î÷øø øøøø*ø7ø7ø=øKøbøhøkønøuø~ø…ø…øŠø—ø¤ø¤øªø¸øÏøÕøØøÛøâøâøóøúøùùùù%ù,ù2ù9ùDùXùXùrùwù~ù†ù�ù�ù¡ùªùÂùÇùÎùðùûùú ú"ú6ú6úQúQúkúyú€ú‡ú©ú¼úàúâúìúûûû'û3ûDûcûgû<üóÀ€¬ÿaÿabb b/b:bFbgbHbvb{b{b bÑb´b§bôbùb"c'c3cTc5ccchc�cˆc«cÁcÁcçcçcócô ^0^0m0†0Œ0õ4‘š7P7POPrPP…P‹PŽP®Pö8 â.â.ð.÷./ -/////#/÷ :>g1g1q1y1~1øÎPÿxÿxy-y8yNykyzyžyÌyÒyØyàyâyêyÿyz zz/zLz[zz­z³z¹zÁzÆzÎzãzæzñzýz{{{{{&{6{N{\{Š{�{•{�{­{Ó{|| | ||(|3|P|h|t|||Š|Š|�|¢|¹|»|Ø|ð|ü|}}}}*}7}A}X}o}ˆ}š}§}É}à}÷}~~~5~5~>~J~`~y~Œ~—~ª~®~®~®~µ~º~Í~Ø~ò~ô~ù~ $..@ù˜k �:�:¦:²:²:È:Ó:Õ:õ:õ:õ:ü:; -;;;;;;4;4;j;v;ˆ;˜;¯;´;·;¼;¼;¼;Ø;ß;ì;ó;û;<<<(<0<5<5<Q<^<f<k<k<‡<“<œ<¤<¬<¸<Î<Ù<ü<=====7=Q=[=g=o=t=t=“=Ÿ=±=¶=Ò=Þ=í=ò=>>>>>>>>>>:>F>X>Z>]>b>b>b>l>t>{>ƒ>Œ>—>�>ª>¸>¸>Â>Ë>Ó>???$?>?C?C?V?^?^?`?`?`?e?e?l?r?v?}?�?�?�?�?�?�?µ?¾?¾?Â?ÝCú(àCàCîC÷CD Dû�ªÊ÷n÷noo)o?oTobomo|o‚o‚o‚o‡oŒošo¥o¾oÀoÅoÓoÞoëoòopü\2Eg-g-�-¦-ˆ-µ-Ñ-Ç-é-þ-ë- .&.8.Q.Q.X.z.z.„.ý8fpwNwN�NžN²NÁNÇNÍNÐNðNþ0�—€Œ€Œ”Œ Œ®Œ±ŒÉŒÌŒÔŒÿ0S[¾Ø¾ØÒØÚØçØñØÙP>NŠŠ Š Š#Š7Š?ŠCŠMŠWŠ_ŠbŠhŠT¡²ßPßPùP QQQ&Q;Q=QOQYQmQmQsQvQÊQ<˜£ØŒØŒìŒóŒÿŒ �� �#�'�/� 26vævæ„æ�æH!/§]§]»]Ç]Ý]É]ì]î]õ]^ ^^D>‹oToT‘TœT¡T©TÃTÊTÌTÌTèTîTðTûTUUUUU&U/U7U>UEUIUPUXU^UcUkU‚U†UœU¯UµUÉUÎUÛUÛUïUúUV -VV!VDVJVNVSVXV[VeVjVvVV“VšV¬VÀVÇVÇVÎVÑV#WläûVäVäjä€äŽä™ä�ä¤ä¨ä±äÀäÂäÂäÖäØäáäçäçäçäçäïä´KtðEðEF'F,F3F=F=FEFXF\FaFvFxF{FF†FšFžF¦F²F¹F½FÅFÇFÏFÝFåFçFêFG GG!G%G3G -Q¯s¯s¿sËs×sçsÿstt$t,t3tLtyt“t t­t½tÃtÅtÖtøtÿtuuu1uC4CUCUCUC~C~CŠC Ð1(“(“<“<“b“b“‚“†“‹“‹“‹“—“œ“¬“±“±“±“¶“¶“ϓ֓å“ó“ü“ ”””””””%”,”3”:”A”H”O”O”Q”Q”W”\”c• D ,ss%s/s9sIsNsWscseswswsys©s \ No newline at end of file +! +! +5 += +F +N +S +Y +o + +” +™ +² +Ê +Î +á +á +á +ó +æ +  * 5 ; S k p { � —   ¨ ª °  Ò ç é     2 : C K P W m } ’ — ° È Ì ß ß ß ñ ä   ( 3 9 Q i i i u { … � ¢ ² É à ÷ !<<<]m{{„Ž›µÃÊÝßþ %5OOh5D|‰îîþ!337:B6\Ob8Š8ŠXŠgŠpŠyŠ}Š�Š�ВЗЗЍЬдŠÌŠÏŠÛŠ70üÆäÆäÏäÔäÝäääæäëä8�áßß00B[[fju¢‰|±ÈÙíñö #(04F9ey}}‚ “Ûµê-EJ^fow|ƒ•¥»½Öîòò $,0?2^rv…………˜ž¨¯ÂÝÝù +9G\ot“¢›ºÊÑâù.0\\\tg¥ªµ»Æèï(9Thlq�‚±¤ÙÆè+CH\dmuz�“£¹»Ôìððð+?CRRReku|�ªªªÆÖääø 2EJixq� ±ÏÏññø;9Dn{––¦ºÃÉÛÛßâê:lz‘w}w}�}œ}¡}¶}£}Å}È}È}Õ}ê}×}ù}ÿ}~1~J~c~|~†~;<Š•FFVgpvz…<”)ïïï"ï.ï?ïAïQï\ïnïyï„ï“ï¤ï«ïÄïÈïÙïÙïãïêïýïðð(ðDðIðfð=d(=h‰h‰t‰ˆ‰‹‰Ÿ‰§‰«‰µ‰¿‰Ç‰Ê‰Ð‰>4o¸GG.G1G5GBGKGVGfGnGxG G G°GµGµGÅGÊGÊGÚGßGßGïGôGôGH H HHHH.H3H3HCHHHHHXH]H]H]H`HiH‚H�H§HºH¼HÂHÄHÇHØHÝHÝHãHóHóHþHII3I;IAIAIUIUI^IaI!J?Ä n‡«‡«¤«¬«¯«½«Ë«à«é«¬¬/¬:¬K¬O¬a¬d¬o¬x¬„¬—¬Ȭ½¬£¬جשּׂ­­>­S­w­‹­�­®­”­É­Ì­Ñ­Ô­Ô­Û­ñ­ø­® +®®&®9®9®Q®U®‚®‚®š®Ÿ®Ÿ®¯®³®Ä®ήß®é®ü®¯¯¯¯&¯0¯A¯K¯^¯j¯o¯o¯o¯‘¯¢¯§¯´¯ɯɯίدç¯ì¯ò¯÷¯÷¯ü¯°°° °%°%°+°1°6°6°>°Q°]°j°v°…°�°•°ž°µ°ɰÚ°ç°ì°±±.±;±C±R±\±b±k±t±t±y±y±y±y±y±‰±‰±‰±¡±·±¿±Ú±ë±ø±ú±² ² ² ²²%²*²*²1²?²D²\²h²z²†²Œ²”²š²£²ɲÕ²Û²á²ð²ø²³-³>³K³M³[³[³`³`³g³u³z³�³™³¥³«³±³º³¿³¿³¿³¿³¿³׳ܳܳܳܳܳí³í³í³í³í³í³í³í³í³í³´´#´>´O´\´^´k´{´€´€´€´‰´£´¯´´´Ö´â´â´ç´ç´ç´ç´ç´ç´ç´ç´ü´µµµµµµµ)µ;µSµhµ‰µªµµµƵ˵˵˵Ôµúµ¶¶¶;¶T¶\¶d¶r¶œ¶¥¶«¶̶å¶å¶å¶å¶å¶·@·I·O·U·Z·c·l·q·q·q·q·€·”·²··È·Í·Í·à·ô·¸-¸3¸3¸8¸8¸G¸[¸y¸‰¸�¸”¸”¸§¸»¸á¸ô¸ú¸ú¸ÿ¸ÿ¸ÿ¸¹-¹5¹P¹a¹n¹p¹¹�¹�¹�¹�¹�¹•¹•¹•¹•¹•¹•¹•¹•¹•¹•¹•¹•¹•¹•¹•¹•¹¤¹³¹¾¹À¹À¹ɹ˹˹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹á¹á¹ø¹º º ººº%ºAºYºhºtºŠº¤º§º±º½ºãº»#»G»I»\»Š»b»¥»¥»¨»¸»À»Û»ì»ï» ¼¼#¼;¼;¼f¼i¼x¼Œ¼­¼Á¼ݼɼù¼½,½a½_½T½I½:½o½o½o½r½w½z½”½¢½нò½ò½¾ ¾/¾C¾d¾x¾”¾€¾°¾°¾ξ¿¿ö¾ë¾ܾ¿¿¿¿¿¿ ¿0¿Q¿]¿®Â@Ä…²/Ç/ÇEÇIÇTÇ[ÇfÇzÇzÇ…Ç–Ç�ǪǶÇÃÇÇÇØÇØÇáÇæÇîÇþÇ ÈÈ&È9È9ÈQÈQÈlȘȘȬȮȮȸÈÀÈÀÈÊÈÒÈÒÈÒÈãÈãÈãÈéÈñÈ÷ÈüÈüÈÉ +ÉÉÉÉÉ/É?ÉIÉXÉ]ÉeÉeÉjÉjÉqɇɗɡɩɯɾÉÃÉËÉÑÉÑÉÖÉÝÉèÉÊ+Ê5Ê=ÊCÊXÊ^ÊcÊcÊcÊcÊcÊcÊcÊcÊcÊnÊ|ʌʒʚʩʮʻÊÃÊÈÊÈÊÈÊÐÊÙÊâÊïÊ÷ÊËËBËJËYËcË}˃ˈˈË�ˢ˪˿ËÇËÏËäËæËñËùËÌÌÌ'Ì/Ì6Ì<ÌBÌFÌOÌTÌx̡̭̲̄̌̾ÌÉÌÎÌÎÌÎÌäÌÍÍÍ Í'Í/ÍDÍIÍTÍ\ÍqÍvÍv͚ͦͮÍÃÍÏÍÔÍàÍëÍðÍðÍðÍðÍðÍðÍûÍûÍûÍûÍûÍûÍûÍûÍûÍûÍûÍûÍÎÎÎ&Î6Î<ÎDÎSÎXÎ`ÎhÎjÎrÎ�·Î�ΗΙΡξÎÇÎÏÎ×ÎÞÎòÎûÎÏ ÏÏ Ï(Ï6Ï;Ï@ÏRφώÏ�ϧÏÁÏÉÏÎÏÎÏÎÏ×ÏàÏãÏíÏûÏ ÐÐ!Ð3Ð3Ð3Ð>ÐCÐ`ÐeÐeÐnÐsÐsÐsÐsÐsÐsÐsÐsÐsÐsÐsÐsÐsÐsÐsÐsÐ~ЊТенÐÌÐÑÐÙÐàÐíÐöÐÿÐÑÑÑÑÑ#ÑAÑIÑLÑNÑ^ÑhÑhÑhÑjÑÑ�ѓіўѣѣѬѱѹÑÀÑÍÑâÑéÑúÑÒ#Ò<ÒQÒfÒmÒmÒrÒrÒrÒrÒrÒrÒrÒzÒ…Ò‘Ò Ò¥Ò¥Ò­ÒµÒÂÒÇÒÇÒÇÒËÒÐÒÐÒàÒåÒåÒåÒñÒøÒþÒÓ Ó$Ó3Ó;ÓLÓTÓwÓ}ӄӆӌӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӕӕӰӺÓÈÓÈÓÍÓØÓßÓûÓÔÔÔ ÔÔ5ÔCÔ7ÖAx[7Ö7ÖMÖTÖ[ÖfÖmÖ~ÖˆÖ�Ö™Ö¬Ö´Ö´ÖÏÖéÖïÖøÖÿÖ× ××× ×%×0×:×L×R×h×o×w×�×”×”×”×¢×É×Ò×Ú×ì×ô×ô×ô×ÿ× ØØ!Ø7Ø>ØFØMØbØsØsØzØzØz؈دؼØÅØÍØߨçØçØçØõØýØýØÙ Ù%Ù1ÙvÙBx`º‡Ü‡ÜŸÜ¯Ü¶Ü½ÜÈÜÛÜÞÜæÜíÜðÜÝÝÝ$Ý'Ý2ÝHÝSÝ^ÝiÝtÝ{ݎݚݷÝÀÝÈÝèÝëÝñÝöÝÞ ÞÞ"Þ(Þ0Þ0Þ<ÞJÞYÞaÞpÞxÞ›Þ¡Þ§Þ©Þ¯ÞµÞµÞµÞÚÞßÞüÞÿÞÿÞßßß"ß<ßHßXßk߇ߜߤ߮ßÍßáßáßUàC ?Cç0ç0ñ0ù0þ0DôÑÊgZgZˆZ“Z¤Z“Z¾ZÌZÌZÜZåZìZðZùZùZ[[%[3[?[E[P[t[t[…[�[–[�[¢[¢[µ[À[Ñ[Ü[ç[î[ø[\\\\\*\/\/\@\@\S\X\i\o\x\�\¡\¡\¦\¦\´\¹\¹\¾\Å\Í\Ô\Ö\Þ\å\å\ô\ú\]]]:]:]B]Q]\]c]e]y]ˆ]�]’]’]’]¥]ª]¹]À]É]Þ]ò]ò]÷]÷]ÿ]^^.^5^:^:^F^U^g^v^‘^œ^¶^È^Ú^é^___'_;_B_I_\_^_l__�_�_�_­_´_Ë_Ò_Þ_ë_ë_ö_ +`` `!`5`G`N`_`m`�`–`¢`À`À`À`È`Ó`×`ß`ã`ë`ò`a a+a0a9aDaMaUaZaZaiava„a�aša¨a®a´aºaÃaÉaØaðaðab bbb8b>bDbJbSbdb‹b“b�b«bÃbÊbÖbåbúbúbc cc$c$c$c$c.dEDTaç{ç{û{|| +|-|/|G|_|g|FœfÉgRgR‰R“R»RÊRÕRîRóR÷RÿRSSS'S,SASRSqSyS{SšS¢S±S¸SÄSÉSÐSØSÞSàSñSöS TøST!T!T)T2TAT`TgTiTˆT�T�T�T¦T¯T»T¿TÍTãTØTûTUUU,UU;UAUHUPUVUXUiUnU„UpU“U™U™U¡UªUªU´U´UÌUüUVVV#V9V.VQVQVcVG ;z¿á¿áÞáçáêáüáâââ"âCâaâpâŽâ¢âºâÁâçâãã1ãBãYã]ã]ãaãfãkãuãxã‚ã‡ã ã£ã£ã£ã£ã¨ã®ãÊãØãäãíãä ää.ä9äEäNäbäbäqävävä„äHPcs?@?@`@M@‚@o@‘@ @¨@³@µ@À@Ë@Ë@í@ó@IPµÅ¿ú¿úÓúØúçúçúîúû1ûûNû@ûfûnûJŒ•´?ù?ùrùžùžù±ùµù×ùçùìùìùóùûùúú$ú5ú:úKú_údúfúfúfú‚ú ú ú½úKP�­ = =H=J=X=^=y=ˆ=—=¦=´=¿=Â=Ò=Lè7÷.÷."/%/(/./3/J/a/x/œ/¸/»/Ú/ô/00)0:0?0J0R0R0\0\0g0l0�0‡0¦0Å0Ç0Ü0â01 1(13131=1=1O1�1¥1·1M$ ZZ:Z#ZDZLZNLx‡ÖÌÖÌèÌýÌÍ Í&Í.Í>ÍIÍZÍ`Í’ÍOTHY0e0eBeDeMeVedeiereuezeˆe’e•eŸeP¨!Gˆcˆc˜c¡c´cÁcÍcÙcåcñcddd"d+d2d;dRdidnd€d�d›d­d­d¶dÙdÙdÛdîdðd +eee0eQlõŒ p p9pDpTp�p¤p¸p¿pÇpÏpØpàpèpêpòpúpqq'q?qHqHq}q§q°qÒqìq r3r?rarcrjrqrqr”r°r×rórs6s]sys s¼sãsÿs&t&t5tBtGtGtVtcththtotztŒt¤t¼tÔtÖtÖtÖtÝtÝtêtïtïtïtuu!u6uruyuyuyu�užu¬uÊuÓuÜuéu÷uv-v-v-v?vMviv‡v‡v‡v’v•vÄvÆvÝvãvôvývÿv wwww*w*wNwPwWwhwqwsw�wƒw‘w“w¡w¡wÁwÁwÁwÁwáwx;xCxGxOxSxaxoxqxyx}x�x‰x—x¥x¥x¿xÊxàxôxy-y8yByIybynyuyŽyŽy y¥y§y­y¾yÏyÞyåyöyÿyzzz z!z/z/z/zSzSzrzyz€zƒz�z’z z¤z²z¶zÄzÈzÈzázèzízûz{{0{P{c{r{t{ƒ{…{”{ž{ž{¬{µ{Ë{Ò{÷{ü{%|U|Z|h|j|x|�|›|�|Ÿ|¦|·|À|Â|Ð|Ò|à|â|ð|ð|}}}}}/}/}/}:}V}{}”}™}™}™}»}À}À}À}à}å}å}å}~ ~ ~~~~~~~#~#~&~+~J~`~…~¡~µ~º~º~Õ~â~ä~ó~ü~>@@HCƒƒƒ¢¢¢ÃÈÈÈêïï€€3€8€8€S€a€c€r€{€•€—€—€œ€—€½€¿€¿€Ç€Â€��� � �7�7�a�y�‘�œ�²�Æ�ß�÷�‚-‚/‚@‚]‚t‚{‚s†R„7/è/èMè[èqè‹è™è·èÂèÞèÞèÞèëèééééé0é2é2é@éMéhéhé�é‘é¥é·éSæd®Ü®ÜÈÜÑÜñÜñÜ÷ÜÿÜÝÝÝÝ*Ý*ÝDÝIÝIÝOÝTÝTÝZÝ_Ý_ÝeÝjÝj݂ݕݛݠݠݩÝÉÝÉÝÉÝÐÝÒÝÒÝÙÝÛÝÛÝáÝáÝèÝêÝêÝðÝðÝ÷ÝùÝùÝÿÝÿÝÞÞÞÞÞ"Þ"Þ"Þ"Þ.Þ6Þ>ÞFÞNÞVÞ^ÞdÞ|Þ‹Þ•Þ˜Þ˜Þ¢Þ¨Þ®Þ®Þ²ÞºÞÁÞÅÞÍÞÕÞÛÞãÞêÞòÞúÞþÞßßß"ß.ß4ß<ß@ßGßOßWß[ßaßißpßx߀߄ߊߕߚ߰ßÁ߯ßÉßnàTLœ«H‡H‡a‡c‡j‡€‡�‡–‡®‡Æ‡É‡Û‡#ˆUÔ*[fðfðzð�ðžð¢ð°ð¹ðÈðÈð×ðâðíðøðÿðñ&ñ=ñCñHñLñ_ñ_ñuñwñ�ñ¥ñ°ñ²ñËñÏñÝñâñâñéñøñòò}òV$ÏYÏYúYãYZ ZWP©¹gCgCˆCuCªC—C¹CÈCÐCÛCÝCèCóCóCDDX,>×>×G×M×U×^×g×l×Y�wŽwŽ˜Ž­Ž»ŽÈŽûŽ��:�J�J�W�W�^�q�o���Š�”�š� �£�±�¸�Ð�×�Ú�ï�ô�ÿ� +�$�>�O�U�[�b�y�h�‰���•���½�¥�Æ�Ì�Ò�Ú�Ú�á�ø�ç�‘‘‘‘<‘$‘E‘K‘Q‘Y‘Y‘Y‘o‘o‘o‘o‘z‘„‘�‘­‘¹‘ʑϑà‘ô‘ù‘ù‘’ ’’ ’,’@’P’e’z’—’œ’œ’§’¯’¼’Ç’×’æ’““-“8“=“=“H“^“s““�“•“¦“º“º“Å“º“Ý“â“â“ñ“ö“ö“” +” +”” ” ”1”6”6”I”X”]”]”p””„”’”„”¦”«”¹”«”͔Ҕà”Ò”ô”ù”•ù”• • •=•B•d•i•w•i•‹•�•�•­•²•Ô•Ù•ç•Ù•û•–––"–D–I–W–I–k–p–p–�–’–´–¹–Ç–¹–Û–à–à–û–——— — —;—@—@—[—`—`—{—€—€—›— — —»—À—À—Û—à—à—ñ—ö—ö—˜ ˜ ˜˜#˜8˜=˜=˜I˜b˜g˜�˜”˜ž˜£˜´˜¾˜Ó˜Þ˜ã˜ô˜ÿ˜™ ™ ™™™™%™/™/™B™G™G™G™K™d™m™m™“™˜™˜™ ™´™½™×™ä™ï™ú™šš#š,š1š1š1šBš_šjštšš„š�š—šœšœš§š¯š¸šÚÓšëš››››'›:›D›O›p›|›�›’›£›§›¬›¬›¼›Ç›Ï›Ô›ß›ï›þ›œ0œEœPœUœ`œhœmœxœˆœ—œ´œÉœÞœÞœÞœÞœãœèœèœôœ��*�,�I�I�S�g�q�s��‡�¤�µ�¿�Ê�í�þ�ž ž+žCžSžXžXžcžhžhžpž{ž€ž€žˆž“ž˜ž˜ž žÁžªž¨žÙžÞžÞžæžŸðžîž Ÿ$Ÿ8Ÿ$ŸPŸUŸUŸbŸgŸgŸoŸtŸtŸ†Ÿ˜Ÿ�Ÿ�Ÿ±Ÿ�ŸÉŸΟΟÖŸÛŸÛŸîŸóŸóŸ     % 5 : : T d i i ƒ “ ˜ ˜ ²  Ç Þ Ç ö û û ¡ ¡G¡5¡#¡ ¡_¡d¡ ¡Ž¡|¡d¡¸¡½¡½¡Ì¡Ü¡á¡á¡ð¡¢¢¢¢"¢'¢O¢=¢'¢g¢l¢”¢‚¢l¢¬¢±¢Ù¢Ç¢±¢ñ¢ö¢ö¢£ý¢=£M£R£R£m£Y£—£§£¬£¬£¸£½£½£É£ΣΣá£ñ£ö£ö£ ¤¤¤¤1¤A¤F¤F¤Y¤i¤n¤n¤v¤{¤{¤ƒ¤ˆ¤ˆ¤�¤•¤•¤�¤¢¤¢¤µ¤º¤º¤ͤÒ¤ ¥¥ü¤ê¤Ò¤-¥2¥€¥n¥\¥J¥2¥�¥’¥’¥¡¥¼¥Á¥Á¥Ò¥í¥ò¥ò¥¦¦¦¦¦#¦#¦+¦0¦0¦8¦=¦=¦u¦c¦Q¦D¦”¦¯¦´¦´¦ì¦Ú¦Ȧ»¦ §&§+§`§N§C§+§x§}§²§ §•§}§ʧϧé§Ó§ϧ¨¨#¨ ¨¨;¨@¨@¨L¨e¨u¨†¨†¨«¨­¨èɨɨæ¨ó¨$©U©C©x©€©€©€©Œ©‘©‘©¤©¯©¹©¾©É©Ó©Ø©Ø©ò©÷©÷©ÿ©ªªª'ª2ª7ªKª7ªZªeªjªjªuª†ª‹ª‹ª–ª¡ª¦ª¦ª·ª¼ª¼ªÖªáªæªñªæª««««(«-«8«-«G«L«`«L«o«t«t«ˆ«t«—«—«—«œ«¨«œ«»«À«À«Ì«À«ß«ä«ä«ð«ä«¬¬¬¬¬'¬,¬@¬,¬O¬[¬f¬q¬v¬Ьv¬™¬¥¬°¬»¬À¬Ô¬À¬ë¬ã¬ô¬ù¬ù¬­­­­­­­"­"­+­0­0­;­@­@­K­P­P­[­`­`­k­p­p­{­€­€­‹­�­�­›­ ­´­ ­íέÙ­ä­é­é­ó­ø­ø­®®®®®® ®%®%®-®2®2®?®D®D®Q®V®V®V®V®V®^®c®c®k®p®p®x®}®}®…®Š®Š®’®—®«®—®º®Ë®ЮЮ׮⮯¯¯(¯A¯-¯P¯[¯f¯k¯k¯r¯}¯�¯¢¯¸¯ïܯȯë¯ö¯°°° °°8°=°S°^°w°c°†°‘°œ°¡°¡°¼°¨°˰ë°ð°±±*±±M±9±\±g±l±l±‡±s±–±¶±»±ѱܱõ±á±²²'²2²7²7²R²>²a²�²†²œ²§²À²¬²ã²ϲò²ý²³³³³³%³*³*³*³0³5³5³5³?³A³A³K³R³u³w³w³�³�³�³�³�³ƒ³ƒ³š³¡³¬³¬³·³½³ijϳÚ³å³ß³´´´5´5´C´=´i´^´�´�´�´Š´‘´¤´©´·´Ê´Ê´é´ô´ µ+µ+µ+µLµ\µqµƒµ“µ“µ¸µ¿µεàµàµäµéµðµ¶ ¶ ¶#¶:¶A¶F¶F¶J¶U¶a¶o¶œ¶¥¶¶¶Ķ÷¶···6·B·S·X·i·ˆ·¶·ß·â·ò·ô·ô·ø·¸"¸"¸%¸6¸g¸ЏЏ�¸²ºZ, n×n×|ׂ׆×�טמ×[`EY‡†‡†�†«†²†¶†ņÞ†â†è†þ†‡‡‡N‡<‡‡m‡w‡\8 +_Y_Y€YmY�YšY¥Y°Y»YÇYÍY]\’¡¡¡ ¡+¡3¡>¡I¡T¡V¡l¡l¡~¡Š¡“¡–¡Å¡^l½”_î_î„î‰î–îÂîÂîÍîÚîøîï-ï2ï[ï{ï—ï�ï¡ïÄïêïïïð5ð[ðrðxð|ð•ð�ð¢ð³ð»ðÚðàðäðýðñ$ñ)ñ:ñBñañfñnñtñxñ|ñŽñ–ñ›ñ¹ñ¾ñËñÐñÐñÝñõñòò1ò1òHòMòMòdòfòfòzò|ò|ò“ò•ò•ò¬ò®ò®òÅòÅò×òÜòÜòëòëò$ó=ó=óPóUóUóUóUóxó”ó°ó°ó°ó¸ó½ó½ó½óÅóÊóÊóÒóÒóÔóþóô ô@ô@ô@ô@ô@ôZô]ôrôyô{ô„ô—ô™ô¥ô¥ô­ô¿ô¿ôËôÞôõôÿô'õ9õUõuõ–õ®õÍõóõö öEö]ölöƒöŸö¤ö¤öØöÝöÝöðöðöüö÷÷÷+÷J÷p÷÷�÷Â÷â÷ñ÷ ø2ø<ø^ø`ø`ø`øløløløŠøºø¼ø¼øËøËøÐøÐøÐøÐøÐøçøìøÿø>ù_\ +¯N¯NÁN×NóNOO,O7OLO9O[OcOnO„OzOœO¢O`àï9ï9 ::::%:):+:2:9:=:A:T:|:—:„:¯:´:Ø:Ø:ä:ì:û:5;:;g;o;t;};‰;‘;˜;º;À;â;ä;<%<<4<:<A<A<G<J<N<_<_<‚<”<a$‡à‡à–à±à±à·àb|k†�ë�ë©ëÕëÕëôëììììì ìì0ìIìKìKìKìSìnìpìpìzìzì’ìc”"_5_5�5‹5—5œ5¬5²5Ç5Û5ë5ù566&606?6G6T6\6_6_6_6a6p6z6ƒ6‹6Ž6 6dô¦ßß6ß6777!7'7>7U7l7w7­7Í7Ò7×7â7ü78818C8Z8_8q8v8y8™8¹8Á8É8Î8î8999 9@9H9M9R9]9]9h9h9t9t9†9Æ9ß9ß9ï9ed¤¹����#�)�1�?�R�^�x�…�…�ˆ�–�¦�À�Ä�Ì�f(¸þr*r*ˆ*�*¡*Ð*à*ç*÷*+ +++8+b+s+�+�+ˆ+˜+¤+´+½+Ô+Ô+ê+ê+,,,,,,,,B,B,X,X,n,n,„,„,›,›,²,²,É,É,à,à,÷,÷,--%-%-<-D-O-`-k-|--�-˜-Ÿ-æ.g¬÷  8 > E M U X c u u Œ “ – ˜ ¤ µ µ ¸ À Ö Ù ç ê í ô ø    3 6 … h(Èη€·€Þ€Ë€í€ÿ€�i=‡Q‡QªQ¿QÄQÌQÔQÜQéQïQøQþQR"R;R@RFRHRJRWRWR\ReRmRvR~R€RˆR�R˜R¥R«R¶R½RÍRØRçRSSS#S4S8S@S@STSdSlSoSÕSj8-7*0*0>0B0G0R0]0`0d0l0kˆZøw‡w‡‘‡¬‡²‡¹‡¹‡À‡å‡ê‡õ‡ˆý‡"ˆ5ˆGˆPˆXˆbˆ€ˆ’ˆ›ˆ£ˆ­ˆȈ²ˆ׈éˆóˆûˆ‰ýˆ8‰"‰G‰Y‰c‰k‰k‰t‰|‰’‰«‰½‰̉ЉЉ׉܉ú‰ü‰Š Š"Š"Š"Š&Š2ŠSŠ]ŠgŠpБЛХЧЧŠÄŠÒŠàŠãŠüŠ‹‹ ‹>‹B‹]‹a‹a‹a‹g‹u‹‹˜‹ž‹©‹µ‹·‹¿‹Å‹Þ‹é‹÷‹ŒŒŒ%Œ1Œ3Œ;Œ>ŒWŒYŒeŒgŒoŒuŒŽŒ¦Œ²ŒÇŒÌŒáŒñŒ +���&�1�I�U�j�o�„�”�­�¾�¾�Ä�Ï�×�å�ì�þ�leãnànàˆà‘à±à±à·à¿àÇàÏà×àÝàêàêàøàýàýàááááááááá6áIáOáTáTá]á}á}á}á„á†á†á�á�á�á•á•áœážážá¤á¤á«á­á­á³á³áºáºáÂáÈáÎáÖáÖáÖáÖáâáêáòáúáâ +âââ0â?âIâLâLâVâ\âbâbâfânâuâ}â…â‰â�â—âžâ¦â®â²â¸âÃâÉâÖâââèâðâôâûâã ãããã$ã,ã4ã8ã>ãIãNãdãuãzã}ã"äm`b!b!k!r!†!š!Ÿ!½!Â!à!â!"""-"6"8"L"\"�"n�2Ò8•8•N•_•p•�•’•£•¶•¾•Ì•ê•õ•û•–––0–A–G–\–w–w–ƒ–‹–“–™–®–¶–º––Ж֖ۖۖ𖗠———"—E—X—d—h—r—‹—‘—“— —¢—´—´—»—×՗՗˜˜'˜+˜5˜9˜E˜I˜U˜Y˜e˜i˜i˜˜’˜˜˜œ˜¦˜ª˜¹˜½˜Ì˜Ð˜ã˜ç˜ç˜ç˜ç˜þ˜ ™™!™8™H™V™a™w™„™“™›™¨™Ã™Ó™ã™è™è™è™è™õ™š šš'š6šKš\šlšršršrš„šŠš–šœš©šÄšÔšàšæšóš››5›¿œoÔÃô0n0nBnSn^nin‚n”n¬n±nÀnÇnÔnÛnénðnònõnúnünoo6oLodoioxooŒo£oÁoÈoÊoÍoÒoõop pp$hm&& &4&;&U&qxKewQwQŸQ‹Q®QÉQµQØQÝQäQìQóQþQ RRR$R/RER:R]ReRrJ‡otot‹t’tªtÂtÌt×t×tÜtçtótþt uu,u3u9uNucucuwuu�uœu«u¸uÉuÚuèuöuýuvv-v-vAvNv_vovxv‰v‰v�v�v®v»vËv-ws8³½7Q7Q;Q@QEQVQdQmQrQwQyQt88Br0r0†0Š0�0š0¤0§0«0³0u0ˆ�WOWOmO€O�O“O–OžOvÜt††¨³¾Ç×éïõû%25=OUZ}�”š±·ÇÍÙçìú!*:<CHPo}‰£ÂÉÓâèîôú1EQhs‚�Ÿ¬¼Êáíò.ENT_dj�Œ™  ®½¿ÍÜîîö$Xw`0D‡…‡…�…¯…¶…º…É…è…ì…ò…†%†'†'†X†F†'†w†�†xDˆÕ‡ä‡ä™ä¡ä¬ä²ä¸ä¼äÀäìäìäóäöäûä åå8å<åAåAåHåKåPå\åmåqå‚å”å˜åšå¬å°åÌåÐåÕåÕåéåìåúåæ æ1æ<æ@æEæ{æ”æŸæ£æ´æ¿æÃæÅæÐæÔæÔæèæìæîæîæùæýæççççç;çy¼Ö?ç?çSçiçiçiçnçnçuçzçzç�ç†ç†ç“ç˜ç˜ç¥ç¬ç®ç®ç»çÂçÄçÄçàçàçàçãçåçåçåçéçëçëçïçïçïç èèè)èz°0X¿Z¿Z×ZßZêZN[4[)[[øZT[f[V[†[†[�[‘[Ï[Ô[à[õ[â[\ +\\5\$\\L\N\j\j\q\›\›\›\§\{ÈLºüü,ü7üBühühüjüwü‚üˆü™ü¨ü·üÄüÄüÊüÏüÔüêüýüý ýý+ý3ý>ý:ýUýcýcýcýný‰ýtý‘ý¤ý¦ýÂý®ýÊýØýØýÚýöýöýýýþ þþþ8þLþ?þTþZþcþcþcþvþ{þ{þƒþƒþŽþ£þ¬þ¬þ¬þ¬þÈþßþåþêþêþÿþÿ +ÿ +ÿÿ3ÿSÿXÿ]ÿ]ÿiÿ†ÿ•ÿ¤ÿ¬ÿ±ÿ·ÿ¼ÿ¼ÿÃÿÊÿíÿ + )>>DDQZZxŽ™ž«¶¿Ç×îîþþENNPW\\itzƒƒ–£µÀÎ×Ü &.AV[bovˆ�¤ª³³¼ÖÝâð$$7ILL]emy–�ª¬³ÇÖÖÖ  "-?LWep††Ÿ²´ÃØÚèýý   11>AL^epu}„�”©«ÅÚÚÚÜãéú '05Ybbhqq��� ©²ºÅ×Ýèèõø +/5@@MPYbd†™®´¿Ñ×ßßßßêc |t·ÐR4R4d4m4p4y4‚4”4”4À4Ä4É4Ì4Õ4ä4ê4í4õ4ø4ý45}`2§O§OÏO»OÞOPïOPPP&P-P8P@PKPaPVPyP�P~À-¸g¸gÖgægðgðgúgúghh#h&h(h1h>h>hLh`h`h„h‘h‘h¡h®h®hÑhÞhÞhóhi*iLiUibibi…i�i�iÂiõiûiûiûi jt�¶Z3Z3n3�3¡3µ3¼3È3â3ë3ñ34 4 4!4!4$4'4<4B4D4D4L4€¸ºäÐ�Ð�è�ê�ö�ú�Ž +Ž$Ž$Ž$Ž*Ž.Ž6ŽAŽUŽaŽcŽcŽlŽnŽnŽwŽyŽyނބބŽ�Ž�Ž–ŽœŽŸŽ©ŽºŽÀŽÌŽÌŽ4��œ&§(§(Å(Ö(î(õ())))I)5)X)i)n)�){)§)Ä)Ë)ç)Ü)ÿ) * *.*?*U*A*m*z*z*’*’*œ*‚¨¥33‹3›3¦3Ð344"444;4B4V4]4]4l4z4‰4¡4°4½4À4Ù4Ü4á4ø4555#5Y5ƒx± (±(±>±E±L±k±z±‰±˜±§±¶±À±À±Å±Ì±ß±î±ó±²(²(²>²P²T²b²i²n²n²u²‡²�²’² ²²²²²²²Ä²Ï²á²ì²ù²þ²³³#³/³4³A³F³V³[³k³m³}³³�³‘³¢³«³«³­³½³Ä³Ô³Ô³ï³´´%´5´5´5´8´K´„\åø8�8�S�Z�_�m�‚�‰�“�¡�¤�¦�°�Â�Â�É�ÿ�…0ÎÖff~¾²ˆ†ÒÚ†`/‡„‡„�„¯„¶„À„Ï„è„ì„ò„…%…'…'…X…F…'…w…�…‡L[j÷1÷1222%272=2F2X2^2a2�2ˆ(–œ*3*383G3K3N3T3‰\k~Ÿ2Ÿ2­2¿2Å2Í2ß2å2î2333!3'3*3x3Š, ××$×+×3×8×>׋„$oo�Ÿ¦­¼Áããè +  .=?aaapŒ‚¤®Œ`B÷h÷hii#iHiViXifisiyi„i›iªiµi¹iÄiÐi×iãiúij$j;jEjSjejgjuj‡j‡j�j¡j§j·j·jÏjÏjôjôjùjùjkkk'ko>oCoGoWo`oroxozozoˆoŽo—o¨o±o½oÍoÍoÍoÒoêoêoùoüop.p9pbptpp‘p•pšp¡p³pÃpÞpåpépïp÷pqr�8ø((!(6(L(m(Z(…(�(�(§(Ž`j~X X x  ‡ ’ œ § ¯ ¾ È Ë ð ò ¡¡¡�_�Ú�Ú±Ú¸Ú¿ÚÄÚÛÚíÚ÷ÚýÚÛÛ Û(Û+Û-Û7ÛAÛAÛEÛMÛUÛ]ÛgÛpÛxÛ{Û„ÛŸÛ°Û·ÛºÛ¿ÛÎÛÔÛÜÛÜÛãÛæÛëÛúÛÜÜÜÜÜÜ-Ü8Ü@Ü@ÜKÜ_ÜfÜmÜ„Ü�83=ö×ö×ÿ×ÿ× ØØ Ø"Ø'Ø‘8>H.Ø.Ø7Ø7ØEØIØPØSØXØ’DDQÿ0ÿ01,161=1I1a1j1n1€1†1¥1“Ä{¨77adkpvx}ƒƒ•œ²ÅÔÚÜãéóó    7IP_awŠŠœ”0RZ§1§1°1Ö1ç1í1í1õ1•„\y~ò~ò�ò¥ò¯ò¸òºòÁòÑòÜòÞòèòèòñòóóó)ó4ó6óOóVóZóió|óÏó–  +ö/ö/ÿ/0!0—húOfOfefpf{f‰f”f�f®f·fÈfÎfÚfñfñfgg!g*g;gAg�g˜„=ZOJOJJ…JŽJšJ¢J©J­J¶J¶J»JÂJÚJK K-K5K7KOKgK‹KªK¼K™lò __w‰�—¹»Ýòß##5<^^fš y}ˆ‹ˆ‹‘‹�‹¢‹›(AVèVèxè€è†èŽè�è�è¡è¡è¡è©è±èÃèÒèÃèçèéèéèééééé0é5é5é5éJéLéYé[éhéjéwéé‡éŽé¢é¯é±éÂéÏéÏéÏéØéêéýéê ê êêê/ê/ê/ê:êDê\êaêaêaêoêuêzê‚ê�êŸêªê¯ê¯ê¶êºêÈêÌêÕêÜêúêëëë3ë8ë8ë8ë8ë@ëKëYëYëyëyëyë€ëŽë�ë°ëÃëÅëÅëÅëØëØëßëæëëëñëì ì)ìSìYìYìmìrì–ì�ì©ìÇìÚìåìììðìðìðìðìûìíí5í@í]ígígíuí“íÃíÖíçíþíîîîîî)î;îFîKîKîKî]î‡î�î�î�î˜î¢î®î¹î»î»î»îÀîÌîÌîïœH%Š/Š/˜/Ÿ/ª/·/Â/Ê/Ê/â/ì/ò/ø/�0 7N7N^NKNmN‰NN¡N©NžLè÷÷&÷&'&'<']'J'u'z'¥'Æ'³'Þ'ö'ö'(Ÿð[“¿K¿KôKýK LLL;L;LELGLbLJLqLqLL‰L�L°L²LÌLÓLÓLïLïLMM:MSMpMsM{M‚M¢M¤M¾MÅMÅMáMáMþMþM%N7N TWhÎÎäñ÷ý*<@FTWa¡0 +Rgg–‹·£ÚÆéõú*5ALTYej~…‰”™¤½ÆÒ×ëòööû2GY^iqqqsŒ¡¬¶ÁÃÎÖÖæÛþ¢àZŽ e eºeÈeÍeÚeèeñe ff?fHfXfsf~fŽf�f’fœf¨f¬f¹fÅf×fßf÷fûfûfûfûfgg8g8g?gBgJgVg_gµg£d'<Ÿ*Ÿ*½*Õ*æ*í* +þ*!+A+-+P+a+w+c+�+œ+œ+´+´+¾+¤ü%`¯¯ÇÙä÷ë AVC‹qeš···Éææ2&di|p¤’³ÔìÙû/>[[[mŠŠ«²ÔÔÜ¥(fåfåtå—å�å¢å¢å¨å¦(!'ž×ž×§×µ×»×½×Â×§D]j : :::A:J:V:k:s:y::�:�:‘:¨„½Ú¸ª¸ªëª÷ªûª« ««««"«&«.«3«7«H«Y«[«_«p«�«�«£«««¶«¶«¶«È«©€ÀœÀœÙœàœçœîœôœ���$�;�>�@�[�e�o�v���“�›�›�±�±�Ã�ª Ê gVgV�VªV²V½VÍVÖVÚVõV W$W*W2W5WJWOWaWƒW‰W‘W–WœWŸWµW¾WÀWâWêWÿWXX5X;X@X@X@XMX^XiXvX‚X•X¢X¯XÆXÛXåXçXþXYYY%YHYHYHYZY«<ÑÜ +5 +555$5,545<5C5S5S5X5¬´*££3£@£E£I£R£a£m£x£ƒ£‹£–£ž£¡£­£µ£Ï£õ£ï£¤¤C¤/¤S¤S¤k¤v¤’¤™¤½¤Ä¤ö¤ö¤ö¤ö¤W¥­˜‹-þ¸þ¸¹"¹*¹5¹L¹V¹V¹m¹w¹’¹¨¹¶¹º¹Ú¹î¹º º º&º0ºAºNºNºUº\ºaºfºkºrºyº“ºšºªº®º®º¸ºÎºÒºÒºãºöº » »»»!»)»4»;»C»N»U»U»`»~»‚»š»‹»µ»µ»»»Â»Ñ»Û»é»ð»ô»ö»¼¼¼¼"¼H¼V¼V¼Z¼o¼w¼‡¼’¼§¼¬¼º¼É¼Ó¼á¼ì¼ð¼õ¼ý¼½½½!½#½2½4½C½J½N½b½l½z½�½…½•½ ½¥½Ã½Í½Û½â½æ½ð½þ½¾ ¾¾'¾/¾:¾>¾>¾>¾I¾T¾d¾p¾†¾Ž¾™¾¨¾°¾»¾À¾È¾Ó¾ß¾ã¾î¾ó¾¿¿¿¿¿¿7¿T¿`¿h¿x¿ˆ¿¦¿ª¿Ù¿Î¿¿¿é¿é¿ó¿ú¿ ÀÀ"À0À7À;À=ÀLÀVÀdÀkÀoÀoÀqÀƒÀƒÀ•À•À•À›À§À¹ÀÁÀÙÀÁÁÁ5Á<ÁCÁNÁdÁiÁpÁƒÁ�Á›Á¢Á¦Á¨Á»ÁÅÁÓÁÚÁÞÁÞÁÞÁÞÁìÁ÷ÁÂÂÂ)Â-Â-Â2Â:Â>ÂMÂOÂ^Â`ÂoÂq€‡‹Ÿ©·¾ÂÂÂÒÂÝÂâÂà +Ãà Ã#Ã-Ã;ÃBÃFÃPÃdÃlÃwÃ{Ã{Ã{ÆÃ�ÛõÃÅÃÐÃåÃêÃõÃÄÄ'Ä/Ä:ÄIÄQÄ\ÄaÄiÄtĀĄÄ�ĔĨİĻĻĻĻÄÏÄßÄôÄÅÅÅ*Å?ÅLÅPÅ^ÅsŃŚųÅÌÅÎÅÙÅáÅáÅêÅÆÆ/ÆHÆVÆaÆmÆuÆwƂƊƊƊƧƵÆÃÆÚÆñÆÇ Ç-Ç4Ç4ÇDÇXÇrÇrÇvnjǛǶÇÁÇØÇàÇàÇÈÈÈ3È<ÈSÈmÈ|ȉȩȷÈÍÈéÈùÈÉÉ)É)É5ÉPÉhÉqÉqÉqÉ}ɎɦɯɯɶɿÉÅÉÑÉ0Ê®<ùD��%�1�<�F�L�V�\�f�t�~���š� �ª�°�º�Á�Í�Ó�Ü�‘‘‘‘%‘7‘A‘S‘]‘r‘r‘u‘‘”‘™‘©‘´‘¹‘͑ϑà‘’’ ’"’0’9’A’O’`’p’�’Ž’Ž’›’›’£’±’ø’¯$› PP+P3P>PDP°l£:_F_FxF�F FÀFÒFêFGG/G7G;G>GBGGGQGTG[GaGhGnGrGwG�G’G™G G¢G¦G¯G¹G¼GÇGÓGÖGçGòGøGÿGH!H2H;HDHLHWHbHnHH�HœHªH¬H³HºH¿HÃHÐH×HúHIII%I>IOIXIaIiIrIxI|I�I…I’I™I§I±IÆIÐIÙIòIJ JJJ&J,J0J5J;JEJOJnJ|J‚J‡J�J—JŸJ¬J´JÓJÆJèJñJ K K3K:KCKLKSK\KeKnK‡KwK—K›KõK±  €ˆ€ˆŽˆ°ˆ¶ˆ²¸�·z'z'ˆ'�'È'Ê'ÿ'*(*(:(?(?(S(X(X(t(y(y(™(ž(ž(²(·(·(Ô(Ô(â(),)L)^)p)‚)’)’)’)’)™)r*³$bgÊ%Ê%Î%æ%ø%&´„¯Â¯ÂÁÂÐÂÐÂÓÂÜÂèÂèÂþÂÃ&Ã-Ã1ÃAÃaÃsÃyÈÑÕÛäúþÃÛÃùà ÄÄ Ä2Ä>Ä@ÄLÄTÄXÄ^ÄgÄgÄgÄyĄĊĠħįÄÅÄÌÄÌÄÌÄÚÄÅ +ÅÅ$Å,Å5Å@ÅFÅ\ÅcÅkÅrŇŘŘşşşŭÅÔÅáÅêÅòÅÆ ÆÆÆ Æ'Æ5Æ9ÆEÆ]ÆeÆkÆzƃƇÆ�ƘƘƦƮƴÆÑÆÚÆâÆèÆîÆîÆîÆõÆüÆ ÇÇÇ Ç Ç!Ç+ǵxwÙwمٚ١٬ÙÂÙìÙÚÚ'Ú-Ú<ÚEÚMÚUÚWÚ]ÚcÚrÚzÚ€Ú‚ÚˆÚ¶¼Ô¯b¯bÒbÚbêbòbc-c1c9cAcGcPc\cdcdclcœcÛc¶cþcd dd2ddKdQdZdadidqd}d…d�d d¨d­d·d×dÞdàdêdùde e"eBeIeIeIeReYerexe€e€e…e‰e•eže§e³eÖeùeäeff1f>fRfhflf‹f™fºf¥fÓfÙfðfÛf g g g(g5gIg_gggkgvg~gŽg¥g�g¾gÁgÉgÙgðgÛg hhhhh$hUh]h]h]h]hfhrhˆh¡h´h»hÇhÎhÎháhåhåhåhìhñhi iiii8i:i?iRiYieililiyiƒiƒiˆi«i«i½i·àt¨÷@÷@ A*AA_AEA9AnA}A…A�A’A�A¨A¨A­AâAçAB4B!BVBCBjBeB†B•B�B¨BªBµBÀBÀBÅBæBèB C CCC7C9C[C[C[CcC¸\æù_e_eue‡e�e˜e¦e²eÉeÉeÛeáeìeüeff"fNf¹$âç??]pw~…‰‹’™��¥¾ÈÈÜçõ  +  # ' 0 4 9 ? \ \ j � † Ÿ ° ´ ´ ´ ¹ Ä Î Õ è ì ñ      # 5 E \ ^ w Š Ž Ž Ž ¢ ¦ ¯ ³ ¸ ¾ Û Û é !!!/!3!E!E!E!J!Y![!}!}!Ÿ!ª!°!Æ!×!Ü!ç!û!ÿ!" """-"-";"R"T"m"~"‚"‚"‰"œ" "²"·"Ë"Ó"Ü"à"å"ì"##)#.#G#Z#^#p#p#p#p#‚#u#—#¦#¨#Ê#Õ#Û#ñ#$$$ $$5$5$5$D$D$W$n$y$Š$�$•$Ÿ$¡$­$­$´$¿$Ô$Ö$á$ö$%%%%+%2%9%C%K%O%S%U%Z%b%f%x%z%%‡%‹%�%�%–%£%¹%Ù%ó%& &&&'&+&+&+&2&7&Q&_&k&r&r&Œ&Ž&“&­&»&Ç&Î&Î&Û&å&å&÷&º¤ ¹ž(J(JEJTJTJTJqJqJ‚J‚JˆJŠJŠJ�J’J’J˜JšJšJ¡J¥JªJªJªJªJªJªJ²JÊJÊJßJêJôJKKK:KL,LDLSLXL_LhL{LƒL‹L�L�L�L™L²L¸L¸LÑLßLüLMM M%M-M2M2M8M8MAMRMTMiMkMsMyM�M†M†M†M†M”M«M­MÁMÁMÉMÏM×MÜMåMíMöMüMNNNN N NN1N5N7NCNEN`NfNnNsN|N‡N‹N‘N•NžN¡N¡N¯NÀNÂNêNO OOO#O(O(O-O/O7O7OROdOiOuO{O~O•O—OšOªO®OµO¾OÍOÛOáOéOîOöOûOûOPPP4P9PCPkPvP�PŒP—P¢P­P¸PÃPÎPÎPÎPÖPßPøPQ#QQDQFQIQTQVQVQ\QbQbQjQsQyQ…Q…QŒQ�Q®Q¹QÁQÉQÎQÎQÕQÙQÞQðQõQÿQ R RR=R=RFRTReRqRxR†R•R«R±R¶R¶R»RÑRÝRåRõRÿRSSS S(S(S2S@SLScSyS�S–S˜S¯S´S´SÔSÔSæSìSõSûSTTTT.T4T6TATSTiTiT}T�TŸT¤T°T¶T¹TÐTÒTÕTåTïTòTòTUU*U/U;UAUDU[U]U`UpUtU|UŠU�U”U”UšU¢U§U§U­U­U»UÁUÇUÑUÛUéUþUVV V VVVV!V&V&V,V4V9V9V>VIVNVSV^VcV‰V‹V�V•VšVŸV¤V©V®V®V³V¸VÔVÞVòVW WWW"W(W.W8WBWPWeWhWjWtWƒWˆWˆWˆW�W•WžWžW£W£W©W±W¶W¶W»WÆWËWÐWÕWäWäWõWûWûW XXX X)X7XLXOXQX[XjXoXoXoXwX|X…XŠXŠX�X˜X�X�X¢X­X²X·X¼XËXËXÜXâXâXðXöXüXYYY3Y6Y8YBYQYVYVYVY^YcYlYqYqYwYY„Y„Y‘Y—Y—Y¥Y«Y±Y»YÅYÓYèYëYíY÷YZ Z Z ZZZ!Z&Z&Z,Z4Z9Z9ZFZLZLZZZ`ZfZpZzZˆZ�Z Z¢Z¬Z»ZÀZÀZÀZÈZÍZÖZÛZÛZåZíZòZòZòZøZ[[[![!['[1[7[<[<[E[S[\[j[o[o[x[†[’[£[°[·[¿[É[×[×[Ü[Ü[ç[ç[ç[ë[ð[ð[÷[û[\\\\\(\0\5\;\;\C\L\Z\e\j\p\x\}\}\}\}\}\}\}\}\}\}\–\œ\¥\«\³\¸\½\Æ\Ñ\Ú\â\ç\ç\ç\í\õ\ú\ú\þ\]] ]]&]/]5]5]>]T]T]Z]c]y]y]‚]„]Š]“]©]©]²]²]²]»]À]À]È]Í]Í]ê]ø]^ ^^^!^&^&^&^:^C^I^[^e^e^m^m^u^w^w^�^š^£^¥^¥^¥^«^¯^±^±^±^±^¶^¼^Â^Æ^=b»Ì€¯¿i¿iáiìijj+jBjWjbjxjdj‡j�j�jžjžj¦j²jÈjÝjìj÷j +kkkkkk)k4kNkPkUkdkok|k†k†k”k¼”+LX¥X¥p¥w¥~¥�¥Š¥�¥�¥”¥™¥»¥¨¥Ë¥Ó¥Û¥Þ¥à¥ð¥ù¥¦¦ ¦¦:¦K¦V¦ˆ¦½à.¢oBoB�B˜B©B¬B°B¹BÀBÎBÝBóBCC'C9CHCWChCwCwC…C‰C�C’C–C£CªC¸CÌCÕCÛCéCDDDDDDDDDD+D4DQTQIQlQvQÀPQaâ$â$ð$þ$%%&%+%H%N%U%\%j%v%ˆ%Ä%ÁD+®å®åÂåÐåÖåùåÿåæ*æ0æ6æ<æ<æDæÂô#œ§6§6¯6¾6Â6Ï6Ü6ð6ÿ67)7;7]7…7“7¯7Á7Ù7ð7û78:8I8d8o8Š8£8£8¾8ç899.9=9L9L9W9j9{9Ž9ž9«9·9Æ9ã9ã9ë9ë9ë9ü9 ::/:8:I:M:U:`:x:�:™:©:±:¶:Ú:ê:ú:;;;&;L;N;Y;Œ;¦;¦;¾;Í;Õ;ä;í;õ;<)<1<9<D<F<V<n<†<ž<¶<È<ß<è<ñ<====à ¸ˆ¸ˆÁˆàˆåˆÄ\ˆ[–͖ͰͷÍÄÍÏÍÔÍÚÍìÍòÍ +ÎÎ.ÎDÎOÎUÎwÎw·ΜΞΡέενÎÅÎÓÎÙÎâÎîÎîÎðÎÏÏ Ï Ï$Ï$ÏBÏBÏUÏbÏgÏgÏ~χϖϬϷÏÅÏÐÏàÏíÏÿÏÐÐÐ(Ð*Ð*Ð2Ð7Ð7Ð?ÐDÐDÐLÐQÐQÐYÐ^Ð^ÐdÐiÐiÐpÐuÐuÐ|Ð�Ð�ЌББМССЬббммÐ×ÐÞÐäÐçÐòÐõÐ ÑÑ%Ñ,Ñ/ÑAÑCÑIÑ]ÑjÑyÑyÑyÑyуÑ�ѲÑÄÑÕÑÞÑïÑõÑúÑÒÒ(Ò7Ò=ÒNÒYÒcÒsÒ‚ÒˆÒ“Ò™Ò®Ò´ÒÅÒÐÒÖÒæÒæÒöÒ ÓÓÓ-Ó4Ó:ÓKÓVÓ[ÓxÓ�Ó›Ó«Ó·ÓÉÓÔÓãÓåÓ÷ÓÿÓÔ ÔÔÔ'Ô-Ô7Ô=ÔHÔNÔPÔ]ÔjÔtÔ�Ô›Ô›Ô¡Ô¨ÔìÖÅD#°ø¬ø¬­9­A­A­O­b­|­­ˆ­¤­¤­¤­¬­®­®­¶­¸­¸­À­Â­Â­Ê­Ê­Ó­Ù­Þ­Þ­ç­ö­ú­ÿ­® +® +® +® +®®®!®&®&®+®8®Q®p®s®‰®¨®¨®¨®°®²®²®²®º®¼®¼®¼®Ä®Æ®Æ®Æ®Î®Ð®Ð®Û®Û®á®æ®æ®æ®æ®í®ø® +¯¯&¯0¯0¯0¯@¯@¯G¯K¯Q¯i¯w¯Š¯—¯À¯Ã¯Ì¯Ó¯ç¯ï¯ø¯°°°°°°° °&°;°C°I°T°k°‚°Ž°”°™°™° °«°«°°°Â°È°È°È°È°$±Æd$àCàCD DDDD,D.D;D=DHD\DdDtDyDD‡DŠDœDÇLWf"1"161:1?1J1J1T1Z1Z1^1f1È\CVº0º0Ð0Ð0Ô0Ù0ì0ï0ô0ô0þ011111É8(2Æ×Æ×Ï×Ï×Ý×á×è×ë×ð×ʨY§\§\¿\Ç\Ò\å\Ù\]{]a]V]<]%]�]–]†]¶]»]Ø]Ý]ò]ß]^^^^8^c^F^z^˜^˜^˜^¤^ËlQhß,ß,ù,"--1-Q-m-c-…-�-Š-¬-Å-å-÷-...9.9.C.Ì4�¦OíOícíhíníríví•í�íÍxÏé��2� �A�K�R�h�m�r�v�x�~�„�š�‡�©�Â�Ê�Ü�ÿ�õ�‚‚Δ"ȫȫ֫è«ì«ô«ü«¬¬¬%¬0¬5¬K¬R¬Y¬d¬o¬q¬|¬‡¬‰¬•¬ ¬«¬´¬¼¬¼¬À¬÷¬Ï€ø2626P6T6X6`6n6q6t6Š6�6’6¤6¨6¬6´6¼6È6Ý6î6õ6ü6ü6 77к< D DODZDDaD™DÏDÔDÔD×DáDùDE +EE4EUEgEtE�EŸE¤E¾EÈEÊEÏEæE F F,FGFcFYF}FƒFƒFŒF¬F¸F»F½FØFÂFçFçFùFùFGGŽ\ŽgŽwŽÞ 5�g�g§g¹g¿gËgÖgägðghh"h4h:h@hFhYh_hhhnh€h†h‘h™h§h´hñhß,29w0w0…0–0¯0Ã0Æ0Ì0à4èˆèˆöˆ‰ ‰‰‰!‰!‰'‰áÄMzÿýÿý+þ.þ3þ@þEþWþYþ]þaþdþwþ�þ¶þ¿þÊþÑþêþÿÿ.ÿTÿYÿ`ÿyÿŸÿ¡ÿºÿàÿàÿàÿøÿ!3â ˆÇ/w/wMwPwVwjwrwƒw�w–w›w›w¨w±w·wÇwÕw×wöw +xxx-x-x;xNxYx]xnxnxnxsxsxxŽx¡x§x¬xÀxÆxÎxàxæxèx÷xy +yyyy!y(y4y;y=yByJyLyQy]y_ydylynysy{y}y‚yŠyŒy‘y™y™y™y©y©y©yÀyÆyÌy×yÜyõyûyzzzz"z;zFzQzWzdziznznzƒz‹z•z�z¥zÆzÑzÜzèzâzñzúzÿz{{ {){5{;{G{K{P{U{`{k{v{x{~{‹{�{•{®{¹{Ä{Ä{Ê{×{Ù{Þ{ç{| |||)|)|-|2|2|C|E|E|X|Z|Z|m|o|o|‚|„|„|—|™|™|«|«|±|¶|¶|Í|á|Ö|î|ö|ý|} }})} }9}9};}S}V}X}g}y}‰}•}¬}Æ}Ë}ß}ï}~~~~$~6~A~I~Q~U~c~i~n~n~t~ˆ~˜~�~�~£~©~®~®~®~´~Ã~Ö~ã~ç~ì~ì~ð~õ~õ~ú~+AMMS`bo{Š��ª¶¶¶¶º¿Ðâíõýÿ€€$€3€9€F€F€]€m€m€�€�€�€˜€¤€»€»€Á€΀Ѐâ€â€í€í€í€í€í€iƒã ŒÐ�V�V­V»VÒV×VüVWW WW"W1W6WBWTWTWrW}W�W—W±WÎWÚWõW X)X2XAXIXVX_XdXtX‚X¢X§X¯XÈXÚXêXðXûXY +YPY:Y+Y`Y›Y…YvY«Y®YÓYbZä<%0 D DÁDÇDÐDâDûDEE)Eå„ |† † ¨ ³ º  Å Å Õ à à ã ê ñ ÷ ý ! +!!!!!!#!,!8!>!c!g!j!z!‚!‡!‡!Ž!—!¨!®!·!Â!Ó!Ó!Ü!á!ë!ò!ù!"" ""."1"@"M"Z"Z"Z"Z"`"r"{"Œ"­"¾"Ö"Ý"ç"ï"ö"ö"ÿ"##"#-#-#-#A#U#e#h##$æ„9ú7ú78%8,808F8s8‰8š8£8±8Ã8Ü8Ü8î8999 9çX{Í^^‰“¦±ÃÑ×èï÷ (=MWYiy‚ˆ�”𠦱¼¿Æàè$'/3ET[c~›Ÿ¨¯ÁÉÐÔÝßñ "///1HNN`è  +XˆXˆaˆuˆzˆé¤¢Ç  ;ASX^aeeˆ�º¦ÉâÎñ€ó€€#€)€,€0€2€K€7€Z€Z€Z€u€¤€°€ê˜Ìîââëææúõ ""11@@OO^^m�|‹‹š©¸#ëxËå/d/dMd_dedqdˆdˆdšd d«d»dÇdÐdÖdÜdçdõdeee+e+e[eìd§¼ŸíŸí£í¶í¶íÐí×íãíãíúíúíîî(î(î?î?îVîXîXî\îíÌÂñ¯¯ÑØãùù *.379?Q]rt�œ   ³ÈÈÔÚäïý.HHZîP1A0E0EFEREZE^EoE}EƒE�E—E¢E¨E«EµEï ®-×=×=ñ=ü=> >>>->>>O>a>s>‚>‘>¢>±>±>¸>¼>Å>Ò>Ù>â>é>í> ? ? ? ? ??? ?(?6?>?K?S?[?l?w?|?|?‰?�?ž?µ?·?Â?Ï?Ú?Ý?ã?ß?÷?@@@ @+@1@1@9@9@K@R@h@h@h@m@m@…@“@ž@£@£@¦@«@«@Ê@Ø@å@ç@ç@ë@í@í@ AA&A(A(A+A-A-A:AøEøNøUøUøZøgøtøtøzøˆøŸø¥ø¨ø«ø²ø²øÃøÊø×øäøäøëøõøüøù ùù(ù(ùBùGùNùVù]ùmùqùzù’ù—ùžùÀùËùÑùÙùòùúú!ú!ú;úIúPúWúyúŒú°ú²ú¼úÞúÞúÞú÷úûû3û7û üóÀ€¬§^§^¿^Ã^È^×^â^î^_ð^_#_#_H_y_\_O_œ_¡_Ê_Ï_Û_ü_Ý_ ``)`0`S`i`i`�`�`›`ô Æ/Æ/Õ/î/ô/õ4‘šŸOŸO·OÚOçOíOóOöOPö8 ê.ê.ø.ÿ. +/// /%/%/+/÷ :>Ï0Ï0Ù0á0æ0øÐSŸuŸu½uÍuØuîu vv>vlvrvxv€v‚vŠvŸv¢v­v¹vÏvìvûv wMwSwYwawfwnwƒw†w‘w�w¢w¨w®w¶w¾wÆwÖwîwüw*x0x5x=xMxOxsx¡x§x¬x¬x½xÈxÓxðxyyy*y*y/yByYy[yxy�yœy¤y²y²y·yÊy×yáyøyz*z>*>,>/>4>4>4>>>F>M>U>^>i>o>|>Š>Š>”>�>¥>Ú>à>ç>ö>???(?0?0?2?2?7?7?>?D?H?O?S?S?S?S?b?b?‡?�?�?”?¯Cú(°C°C¾CÇCÕCÛCû�°Ð—k—kµk½kÉkßkôkl ll"l"l"l'l,l:lEl^l`lelsl~l‹l’l lü\=P¿+¿+Ù+þ+à+ ,), ,A,V,C,e,~,�,©,©,°,Ò,Ò,Ü,ý8fpßMßM÷MNN)N/N5N8NXNþ0�—PŒPŒdŒpŒ~Œ�Œ™ŒœŒ¤Œÿ0S[ŽØŽØ¢ØªØ·ØÁØÔØP>NЉЉ܉ð‰ó‰ŠŠŠŠ'Š/Š2Š8ŠT¡²GPGPaPtPwP�PŽP£P¥P·PÁPÕPÕPÛPÞP2Q<˜£¨Œ¨Œ¼ŒÃŒÏŒÛŒëŒðŒóŒ÷ŒÿŒ 26FæFæTæ`æH!/OZOZcZoZ…ZqZ”Z–Z�Z¨Z´Z¼ZD>‹×S×SùST TT+T2T4T4TPTVTXTcTjTjTnT}T†TŽT—TŸT¦T­T±T¸TÀTÆTËTÓTêTîTUUU1U6UCUCUWUbUiUrU€U‰U¬U²U¶U»UÀUÃUÍUÒUÞUçUûUVV(V/V/V6V9V‹Vläû&ä&ä:äPä^äiämätäxä�ä�ä’ä’ä¦ä¨ä±ä·ä·ä·ä·ä¿ä´EnÀEÀEæE÷EüEF F FF(F,F1FFFHFKFOFVFjFnFvF‚F‰F�F•F—FŸF­FµF·FºFÓFÛFãFñFõFG %I¯r¯r¿rËr×rçrÿrss$s,s3sLsys“s s­s½sÃsÅsÖsøsÿsttt1t!>>B>0>Q>W>f>{>}>ˆ>�>�>±>¶>¿>Ë>Ó>ñ>Þ>&? ??5?R?=?r?Š?w?¬?™?Í?»?Ü?î?ä?@@@ @.@.@:@ Ð1ø’ø’ “ “2“2“R“V“[“[“[“g“l“|“�“�“�“†“†“Ÿ“¦“µ“Ó̓ܓå“ç“ç“ç“ç“î“õ“ü“” +””” ” ”!”!”'”,”3• D$rr%r/r9rIrNrWrcrerwrwryr©r \ No newline at end of file diff --git a/Compiler/CompilerB.HH b/Compiler/CompilerB.HH index 2138d95..989e1f4 100644 --- a/Compiler/CompilerB.HH +++ b/Compiler/CompilerB.HH @@ -67,10 +67,10 @@ extern I64 Cmp(U8 *filename, U8 *map_name=NULL,U8 *out_name=NULL,U8 mapfile_drv_let=0); #help_index "Debugging/Unassemble" -public extern U8 *U(U8 *ip,I64 cnt=20,I64 seg_size=64); -public extern U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64, +public extern U8 *U(U8 *rip,I64 cnt=20,I64 seg_size=64); +public extern U0 Ui(U8 *buf,U8 **_rip,I64 seg_size=64, I64 *_jmp_dst=NULL,Bool just_ins=FALSE); -public extern I64 Un(U8 *ip,I64 cnt=0x80,I64 seg_size=64); +public extern I64 Un(U8 *rip,I64 cnt=0x80,I64 seg_size=64); extern CUAsmGlbls uasm; #help_index "Hash/System" diff --git a/Compiler/Lex.HC b/Compiler/Lex.HC index 2dcf9eb..7e0f17c 100644 --- a/Compiler/Lex.HC +++ b/Compiler/Lex.HC @@ -39,9 +39,9 @@ CCmpCtrl *CmpCtrlNew(U8 *buf=NULL,I64 flags=0,U8 *filename=NULL) cc->htc.define_hash_table=cc->htc.hash_table_lst= cc->htc.glbl_hash_table=cc->htc.local_hash_table=Fs->hash_table; if (flags&CCF_KEEP_AT_SIGN) - cc->chars_bmp_alpha_numeric=chars_bmp_alpha_numeric_no_at; + cc->char_bmp_alpha_numeric=char_bmp_alpha_numeric_no_at; else - cc->chars_bmp_alpha_numeric=chars_bmp_alpha_numeric; + cc->char_bmp_alpha_numeric=char_bmp_alpha_numeric; tmpf=LexFilePush(cc); QueInit(&cc->next_stream_blk); if (filename) @@ -155,11 +155,6 @@ lgc_start2: tmpf->line_num=doc_e->y+1; cc->last_U16='\t'; goto lgc_done; - case DOCT_PAGE_BREAK: - tmpf->buf_ptr=cc->cur_buf_ptr=&lex_zeros; - tmpf->line_num=doc_e->y+2; //TODO: should be a page down - cc->last_U16=CH_FORM_FEED; - goto lgc_done; case DOCT_INS_BIN: tmpf->buf_ptr=cc->cur_buf_ptr=&lex_zeros; tmpf->line_num=doc_e->y+1; @@ -245,7 +240,6 @@ lgc_start2: } break; case CH_CURSOR: - case CH_FORM_FEED: goto lgc_start1; case '\n': tmpf=cc->lex_include_stk; @@ -261,7 +255,7 @@ lgc_done: if (cc->last_U16==CH_SHIFT_SPACE) cc->last_U16=CH_SPACE; if (cc->opts & OPTF_ECHO && - cc->last_U16<256 && Bt(chars_bmp_printable,cc->last_U16)) + cc->last_U16<256 && Bt(char_bmp_printable,cc->last_U16)) '' cc->last_U16; } return cc->last_U16; @@ -271,7 +265,7 @@ U0 LexSkipEol(CCmpCtrl *cc) {//$LK,"LexGetChar",A="MN:LexGetChar"$ to NULL until end-of-line. I64 ch; do ch=$WW,0$LexGetChar(cc); - while (Bt(chars_bmp_non_eol,ch)); + while (Bt(char_bmp_non_eol,ch)); } U8 *LexFirstRem(CCmpCtrl *cc,U8 *marker,I64 _len=NULL) @@ -413,7 +407,7 @@ I64 LexInStr(CCmpCtrl *cc,U8 *buf,I64 size,Bool *done) j=0; for (k=0;k<2;k++) { ch=ToUpper(LexGetChar(cc)); - if (Bt(chars_bmp_hex_numeric,ch)) { + if (Bt(char_bmp_hex_numeric,ch)) { if (ch<='9') j=j<<4+ch-'0'; else @@ -482,7 +476,7 @@ lex_ident: LexExcept(cc,"Ident limited to STR_LEN chars at "); else if (!(ch=LexGetChar(cc))) break; - else if (Bt(cc->chars_bmp_alpha_numeric,ch)) + else if (Bt(cc->char_bmp_alpha_numeric,ch)) buf[i++]=ch; else if (ch==TK_SUPERSCRIPT) buf[i++]='>'; @@ -526,7 +520,7 @@ lex_ident: if (ch=='X') { while (TRUE) { ch=ToUpper(LexGetChar(cc)); - if (Bt(chars_bmp_hex_numeric,ch)) { + if (Bt(char_bmp_hex_numeric,ch)) { if (ch<='9') i=i<<4+ch-'0'; else @@ -554,7 +548,7 @@ lex_ident: } } while (TRUE) { - if (Bt(chars_bmp_dec_numeric,ch)) + if (Bt(char_bmp_dec_numeric,ch)) i=i*10+ch-'0'; else { if (ch=='.' || ch=='e' || ch=='E') break; @@ -576,7 +570,7 @@ lex_is_int: lex_float_start: k=0; while (TRUE) { - if (Bt(chars_bmp_dec_numeric,ch)) { + if (Bt(char_bmp_dec_numeric,ch)) { i=i*10+ch-'0'; k++; } else { @@ -597,7 +591,7 @@ lex_float_start: } j=0; while (TRUE) { - if (Bt(chars_bmp_dec_numeric,ch)) + if (Bt(char_bmp_dec_numeric,ch)) j=j*10+ch-'0'; else { if (neg_e) @@ -660,7 +654,7 @@ lex_float_start: i=0; for (l=0;l<2;l++) { ch=ToUpper(LexGetChar(cc)); - if (Bt(chars_bmp_hex_numeric,ch)) { + if (Bt(char_bmp_hex_numeric,ch)) { if (ch<='9') i=i<<4+ch-'0'; else @@ -723,7 +717,7 @@ lex_float_start: HashSrcFileSet(cc,tmph); do ch=LexGetChar(cc); //skip space between define name and start - while (Bt(chars_bmp_non_eol_white_space,ch)); + while (Bt(char_bmp_non_eol_white_space,ch)); i=j=0; buf2=NULL; @@ -749,7 +743,7 @@ lex_float_start: ch=LexGetChar(cc); if (ch=='/') { do ch=LexGetChar(cc); - while (Bt(chars_bmp_non_eol,ch)); + while (Bt(char_bmp_non_eol,ch)); break; } else { buf[j++]='/'; @@ -757,7 +751,7 @@ lex_float_start: } } else if (ch=='\\') break; - else if (Bt(chars_bmp_non_eol,ch)) + else if (Bt(char_bmp_non_eol,ch)) buf[j++]=ch; else break; diff --git a/Compiler/OptLib.HC b/Compiler/OptLib.HC index 2e4a04c..87f7af8 100644 --- a/Compiler/OptLib.HC +++ b/Compiler/OptLib.HC @@ -18,16 +18,16 @@ U0 OptSetNOP1(CIntermediateCode *tmpi) { tmpi->ic_code=IC_NOP1; tmpi->ic_flags=0; - tmpi->a1.type=MDF_NULL+tmpi->a1.type.raw_type; - tmpi->r.type =MDF_NULL+tmpi->r.type.raw_type; + tmpi->arg1.type=MDF_NULL+tmpi->arg1.type.raw_type; + tmpi->res.type =MDF_NULL+tmpi->res.type.raw_type; } U0 OptSetNOP2(CIntermediateCode *tmpi,I64 stk_delta=1) { tmpi->ic_code=IC_NOP2; tmpi->ic_data=stk_delta; - tmpi->a1.type=MDF_NULL+tmpi->a1.type.raw_type; - tmpi->r.type =MDF_NULL+tmpi->r.type.raw_type; + tmpi->arg1.type=MDF_NULL+tmpi->arg1.type.raw_type; + tmpi->res.type =MDF_NULL+tmpi->res.type.raw_type; } CIntermediateCode *OptFree(CIntermediateCode *tmpi) @@ -100,17 +100,17 @@ Bool OptFixupBinaryOp1(CIntermediateCode *tmpi, CIntermediateCode *tmpii; CHashClass *tmpc=tmpi->ic_class,*tmpc1,*tmpc2; - if (tmpi1->ic_flags&ICF_R_TO_INT) + if (tmpi1->ic_flags&ICF_RES_TO_INT) tmpc1=cmp.internal_types[RT_I64]; - else if (tmpi1->ic_flags&ICF_R_TO_F64) + else if (tmpi1->ic_flags&ICF_RES_TO_F64) tmpc1=cmp.internal_types[RT_F64]; else { tmpc1=OptClassFwd(tmpi1->ic_class); } - if (tmpi2->ic_flags&ICF_R_TO_INT) + if (tmpi2->ic_flags&ICF_RES_TO_INT) tmpc2=cmp.internal_types[RT_I64]; - else if (tmpi2->ic_flags&ICF_R_TO_F64) + else if (tmpi2->ic_flags&ICF_RES_TO_F64) tmpc2=cmp.internal_types[RT_F64]; else { tmpc2=OptClassFwd(tmpi2->ic_class); @@ -126,18 +126,18 @@ Bool OptFixupBinaryOp1(CIntermediateCode *tmpi, tmpi1->ic_data(F64)=tmpi1->ic_data; tmpi1->ic_class=cmp.internal_types[RT_F64]; tmpi1->ic_code=IC_IMM_F64; - tmpi1->ic_flags&=~ICF_R_TO_F64; + tmpi1->ic_flags&=~ICF_RES_TO_F64; } else if (tmpc1->raw_type!=RT_F64) - tmpi1->ic_flags|=ICF_R_TO_F64; + tmpi1->ic_flags|=ICF_RES_TO_F64; if (tmpi2->ic_code==IC_IMM_I64) { tmpi2->ic_data(F64)=tmpi2->ic_data; tmpi2->ic_class=cmp.internal_types[RT_F64]; tmpi2->ic_code=IC_IMM_F64; - tmpi2->ic_flags&=~ICF_R_TO_F64; + tmpi2->ic_flags&=~ICF_RES_TO_F64; } else if (tmpc2->raw_type!=RT_F64) - tmpi2->ic_flags|=ICF_R_TO_F64; + tmpi2->ic_flags|=ICF_RES_TO_F64; if (IC_LESS<=tmpi->ic_code<=IC_GREATER_EQU && (tmpii=OptLead1(tmpi)) && tmpii->ic_code!=IC_PUSH_CMP && tmpii->ic_code!=IC_AND_AND) { //We are looking for float comparisons to zero to convert to int. @@ -149,7 +149,7 @@ Bool OptFixupBinaryOp1(CIntermediateCode *tmpi, tmpi1->ic_code==IC_DEREF && tmpc1==cmp.internal_types[RT_F64]) { tmpi2->ic_code==IC_IMM_I64; fb_here1: - tmpi1->ic_flags&=~ICF_R_TO_F64; + tmpi1->ic_flags&=~ICF_RES_TO_F64; tmpi->ic_class=tmpi1->ic_class=tmpi2->ic_class= cmp.internal_types[RT_I64]; *is_unsigned=FALSE; @@ -183,9 +183,9 @@ Bool OptFixupBinaryOp2(CIntermediateCode **tmpi1,CIntermediateCode **tmpi2) { CIntermediateCode *tmpii1=*tmpi1, *tmpii2=*tmpi2; - if (tmpii1->ic_code==IC_IMM_I64 && !(tmpii1->ic_flags & ICF_R_TO_F64)) + if (tmpii1->ic_code==IC_IMM_I64 && !(tmpii1->ic_flags & ICF_RES_TO_F64)) return TRUE; - if (tmpii2->ic_code==IC_IMM_I64 && !(tmpii2->ic_flags & ICF_R_TO_F64)) { + if (tmpii2->ic_code==IC_IMM_I64 && !(tmpii2->ic_flags & ICF_RES_TO_F64)) { *tmpi1=tmpii2; *tmpi2=tmpii1; return TRUE; @@ -205,10 +205,10 @@ Bool OptFixupUnaryOp(CIntermediateCode *tmpi, CIntermediateCode *tmpi1, tmpi1->ic_data(F64)=tmpi1->ic_data; tmpi1->ic_class=cmp.internal_types[RT_F64]; tmpi1->ic_code=IC_IMM_F64; - tmpi1->ic_flags&=~ICF_R_TO_F64; + tmpi1->ic_flags&=~ICF_RES_TO_F64; } else if (tmpc1->raw_type!=RT_F64) - tmpi1->ic_flags|=ICF_R_TO_F64; + tmpi1->ic_flags|=ICF_RES_TO_F64; if (tmpi1->ic_code==IC_IMM_F64) { tmpi->ic_flags|=tmpi1->ic_flags; OptSetNOP1(tmpi1); @@ -236,8 +236,8 @@ CIntermediateCode *OptBrZero(CCmpCtrl *cc,CIntermediateCode *tmpi) tmpi->ic_code=IC_BR_NOT_ZERO; tmpi->ic_class=tmpii->ic_class; tmpi->ic_flags|=tmpii->ic_flags; - tmpi->t.a1c=tmpii->t.a1c; - tmpi->t.a1t=tmpii->t.a1t; + tmpi->t.arg1_class=tmpii->t.arg1_class; + tmpi->t.arg1_tree=tmpii->t.arg1_tree; OptFree(tmpii); return OptBrNotZero(cc,tmpi); case IC_EQU_EQU...IC_LESS_EQU: @@ -253,7 +253,7 @@ CIntermediateCode *OptBrZero(CCmpCtrl *cc,CIntermediateCode *tmpi) tmpi->ic_code=IC_BR_AND_ZERO; break; case IC_MM_: - if (cc->pass==2 && !(tmpii->ic_flags&ICF_R_TO_F64) && + if (cc->pass==2 && !(tmpii->ic_flags&ICF_RES_TO_F64) && tmpii->ic_class->raw_type!=RT_F64) tmpi->ic_code=IC_BR_MM_ZERO; break; @@ -293,10 +293,10 @@ CIntermediateCode *OptBrZero(CCmpCtrl *cc,CIntermediateCode *tmpi) if (tmpi->ic_code!=IC_BR_ZERO) { tmpi->ic_class=tmpii->ic_class; tmpi->ic_flags|=tmpii->ic_flags; - tmpi->t.a1c=tmpii->t.a1c; - tmpi->t.a2c=tmpii->t.a2c; - tmpi->t.a1t=tmpii->t.a1t; - tmpi->t.a2t=tmpii->t.a2t; + tmpi->t.arg1_class=tmpii->t.arg1_class; + tmpi->t.arg2_class=tmpii->t.arg2_class; + tmpi->t.arg1_tree=tmpii->t.arg1_tree; + tmpi->t.arg2_tree=tmpii->t.arg2_tree; OptFree(tmpii); if (tmpi->ic_flags&ICF_PUSH_CMP && @@ -307,21 +307,21 @@ CIntermediateCode *OptBrZero(CCmpCtrl *cc,CIntermediateCode *tmpi) tmpii=tmpi->next; //IC_PUSH_CMP inst while (tmpii->ic_code!=IC_PUSH_CMP) tmpii=tmpii->next; - tmpii->t.a1t=tmpi; + tmpii->t.arg1_tree=tmpi; OptSetNOP1(tmpii); } lb_true=tmpi->ic_data; if (tmpi->ic_code==IC_BR_AND_AND_ZERO) { - tmpii=tmpi->t.a1t->next; + tmpii=tmpi->t.arg1_tree->next; tmpii->ic_data=lb_true; - tmpii->t.a1t=tmpi->t.a1t; - tmpii->t.a1c=tmpi->t.a1c; + tmpii->t.arg1_tree=tmpi->t.arg1_tree; + tmpii->t.arg1_class=tmpi->t.arg1_class; tmpii->ic_code=IC_BR_ZERO; OptBrZero(cc,tmpii); - tmpii=tmpi->t.a2t->next; - tmpii->t.a1t=tmpi->t.a2t; - tmpii->t.a1c=tmpi->t.a2c; + tmpii=tmpi->t.arg2_tree->next; + tmpii->t.arg1_tree=tmpi->t.arg2_tree; + tmpii->t.arg1_class=tmpi->t.arg2_class; tmpii->ic_data=lb_true; tmpii->ic_code=IC_BR_ZERO; tmpii=OptBrZero(cc,tmpii); @@ -331,22 +331,22 @@ CIntermediateCode *OptBrZero(CCmpCtrl *cc,CIntermediateCode *tmpi) tmpi->ic_code=IC_LABEL; tmpi->ic_flags=0; tmpi->ic_data=lb_false; - tmpii=tmpi->t.a1t->next; - tmpii->t.a1t=tmpi->t.a1t; - tmpii->t.a1c=tmpi->t.a1c; + tmpii=tmpi->t.arg1_tree->next; + tmpii->t.arg1_tree=tmpi->t.arg1_tree; + tmpii->t.arg1_class=tmpi->t.arg1_class; tmpii->ic_data=lb_false; tmpii->ic_code=IC_BR_NOT_ZERO; OptBrNotZero(cc,tmpii); - tmpii=tmpi->t.a2t->next; - tmpii->t.a1t=tmpi->t.a2t; - tmpii->t.a1c=tmpi->t.a2c; + tmpii=tmpi->t.arg2_tree->next; + tmpii->t.arg1_tree=tmpi->t.arg2_tree; + tmpii->t.arg1_class=tmpi->t.arg2_class; tmpii->ic_data=lb_true; tmpii->ic_code=IC_BR_ZERO; tmpii=OptBrZero(cc,tmpii); } else tmpii=tmpi; - if (tmpi->ic_flags&ICF_POP_CMP && tmpi->t.a1t->ic_code==IC_NOP1) { - tmpi->t.a1t=tmpi->t.a1t->t.a1t; + if (tmpi->ic_flags&ICF_POP_CMP && tmpi->t.arg1_tree->ic_code==IC_NOP1) { + tmpi->t.arg1_tree=tmpi->t.arg1_tree->t.arg1_tree; tmpi->ic_flags&=~ICF_POP_CMP; } return tmpii; @@ -363,8 +363,8 @@ CIntermediateCode *OptBrNotZero(CCmpCtrl *cc,CIntermediateCode *tmpi) tmpi->ic_code=IC_BR_ZERO; tmpi->ic_class=tmpii->ic_class; tmpi->ic_flags|=tmpii->ic_flags; - tmpi->t.a1c=tmpii->t.a1c; - tmpi->t.a1t=tmpii->t.a1t; + tmpi->t.arg1_class=tmpii->t.arg1_class; + tmpi->t.arg1_tree=tmpii->t.arg1_tree; OptFree(tmpii); return OptBrZero(cc,tmpi); case IC_EQU_EQU...IC_LESS_EQU: @@ -380,7 +380,7 @@ CIntermediateCode *OptBrNotZero(CCmpCtrl *cc,CIntermediateCode *tmpi) tmpi->ic_code=IC_BR_AND_NOT_ZERO; break; case IC_MM_: - if (cc->pass==2 && !(tmpii->ic_flags&ICF_R_TO_F64) && + if (cc->pass==2 && !(tmpii->ic_flags&ICF_RES_TO_F64) && tmpii->ic_class->raw_type!=RT_F64) tmpi->ic_code=IC_BR_MM_NOT_ZERO; break; @@ -420,10 +420,10 @@ CIntermediateCode *OptBrNotZero(CCmpCtrl *cc,CIntermediateCode *tmpi) if (tmpi->ic_code!=IC_BR_NOT_ZERO) { tmpi->ic_class=tmpii->ic_class; tmpi->ic_flags|=tmpii->ic_flags; - tmpi->t.a1c=tmpii->t.a1c; - tmpi->t.a2c=tmpii->t.a2c; - tmpi->t.a1t=tmpii->t.a1t; - tmpi->t.a2t=tmpii->t.a2t; + tmpi->t.arg1_class=tmpii->t.arg1_class; + tmpi->t.arg2_class=tmpii->t.arg2_class; + tmpi->t.arg1_tree=tmpii->t.arg1_tree; + tmpi->t.arg2_tree=tmpii->t.arg2_tree; OptFree(tmpii); if (tmpi->ic_flags&ICF_PUSH_CMP && @@ -434,21 +434,21 @@ CIntermediateCode *OptBrNotZero(CCmpCtrl *cc,CIntermediateCode *tmpi) tmpii=tmpi->next; //IC_PUSH_CMP inst while (tmpii->ic_code!=IC_PUSH_CMP) tmpii=tmpii->next; - tmpii->t.a1t=tmpi; + tmpii->t.arg1_tree=tmpi; OptSetNOP1(tmpii); } lb_true=tmpi->ic_data; if (tmpi->ic_code==IC_BR_OR_OR_NOT_ZERO) { - tmpii=tmpi->t.a1t->next; - tmpii->t.a1t=tmpi->t.a1t; - tmpii->t.a1c=tmpi->t.a1c; + tmpii=tmpi->t.arg1_tree->next; + tmpii->t.arg1_tree=tmpi->t.arg1_tree; + tmpii->t.arg1_class=tmpi->t.arg1_class; tmpii->ic_data=lb_true; tmpii->ic_code=IC_BR_NOT_ZERO; OptBrNotZero(cc,tmpii); - tmpii=tmpi->t.a2t->next; - tmpii->t.a1t=tmpi->t.a2t; - tmpii->t.a1c=tmpi->t.a2c; + tmpii=tmpi->t.arg2_tree->next; + tmpii->t.arg1_tree=tmpi->t.arg2_tree; + tmpii->t.arg1_class=tmpi->t.arg2_class; tmpii->ic_data=lb_true; tmpii->ic_code=IC_BR_NOT_ZERO; tmpii=OptBrNotZero(cc,tmpii); @@ -458,22 +458,22 @@ CIntermediateCode *OptBrNotZero(CCmpCtrl *cc,CIntermediateCode *tmpi) tmpi->ic_code=IC_LABEL; tmpi->ic_flags=0; tmpi->ic_data=lb_false; - tmpii=tmpi->t.a1t->next; - tmpii->t.a1t=tmpi->t.a1t; - tmpii->t.a1c=tmpi->t.a1c; + tmpii=tmpi->t.arg1_tree->next; + tmpii->t.arg1_tree=tmpi->t.arg1_tree; + tmpii->t.arg1_class=tmpi->t.arg1_class; tmpii->ic_data=lb_false; tmpii->ic_code=IC_BR_ZERO; OptBrZero(cc,tmpii); - tmpii=tmpi->t.a2t->next; - tmpii->t.a1t=tmpi->t.a2t; - tmpii->t.a1c=tmpi->t.a2c; + tmpii=tmpi->t.arg2_tree->next; + tmpii->t.arg1_tree=tmpi->t.arg2_tree; + tmpii->t.arg1_class=tmpi->t.arg2_class; tmpii->ic_data=lb_true; tmpii->ic_code=IC_BR_NOT_ZERO; tmpii=OptBrNotZero(cc,tmpii); } else tmpii=tmpi; - if (tmpi->ic_flags&ICF_POP_CMP && tmpi->t.a1t->ic_code==IC_NOP1) { - tmpi->t.a1t=tmpi->t.a1t->t.a1t; + if (tmpi->ic_flags&ICF_POP_CMP && tmpi->t.arg1_tree->ic_code==IC_NOP1) { + tmpi->t.arg1_tree=tmpi->t.arg1_tree->t.arg1_tree; tmpi->ic_flags&=~ICF_POP_CMP; } return tmpii; @@ -484,21 +484,21 @@ CIntermediateCode *OptBrNotZero(CCmpCtrl *cc,CIntermediateCode *tmpi) U0 OptFixSizeOf(CIntermediateCode *tmpi1, CIntermediateCode *tmpi_push,CHashClass *tmpcc) { - if (tmpi1->ic_code==IC_MUL && tmpi1->t.a2t->ic_code==IC_SIZEOF) { - tmpi1->t.a2t->ic_code=IC_IMM_I64; - tmpi1->t.a2t->ic_class=tmpcc; + if (tmpi1->ic_code==IC_MUL && tmpi1->t.arg2_tree->ic_code==IC_SIZEOF) { + tmpi1->t.arg2_tree->ic_code=IC_IMM_I64; + tmpi1->t.arg2_tree->ic_class=tmpcc; tmpi_push->ic_class=tmpcc; if (tmpcc->ptr_stars_cnt) { tmpcc--; if (tmpcc->size==1) goto here; - tmpi1->t.a2t->ic_data=tmpcc->size; + tmpi1->t.arg2_tree->ic_data=tmpcc->size; } else { here: if (tmpi_push==tmpi1) - tmpi1->t.a2t->ic_data=1; + tmpi1->t.arg2_tree->ic_data=1; else { - OptSetNOP1(tmpi1->t.a2t); + OptSetNOP1(tmpi1->t.arg2_tree); OptSetNOP1(tmpi1); } } @@ -528,14 +528,14 @@ I64 CmpRawTypePointed(CHashClass *tmpc) U0 CmpMinTypePointed(CIntermediateCode *tmpi,I64 pt1) { I64 pt; - if ((pt=tmpi->a1_type_pointed_to) && pt!=RT_F64 && 0a1_type_pointed_to=pt; + if ((pt=tmpi->arg1_type_pointed_to) && pt!=RT_F64 && 0arg1_type_pointed_to=pt; } U0 CmpF1PushPop(CIntermediateCode *tmpi,CIntermediateCode *tmpi2) { if (intermediate_code_table[tmpi2->ic_code].fpop|| - tmpi2->ic_flags&ICF_R_TO_F64) + tmpi2->ic_flags&ICF_RES_TO_F64) Bts(&tmpi->ic_flags,ICf_DONT_PUSH_FLOAT0); } @@ -543,13 +543,13 @@ U0 CmpF2PushPop(CIntermediateCode *tmpi, CIntermediateCode *tmpi1,CIntermediateCode *tmpi2) { if ((tmpi2->ic_code==IC_MOV || tmpi2->ic_code==IC_IMM_F64) && - !(tmpi2->ic_flags&ICF_R_TO_F64) && + !(tmpi2->ic_flags&ICF_RES_TO_F64) && (intermediate_code_table[tmpi1->ic_code].fpop || - tmpi1->ic_flags&ICF_R_TO_F64)) + tmpi1->ic_flags&ICF_RES_TO_F64)) Bts(&tmpi->ic_flags,ICf_DONT_PUSH_FLOAT0); else if ((intermediate_code_table[tmpi2->ic_code].fpop || - tmpi2->ic_flags&ICF_R_TO_F64)&& - !(tmpi1->ic_flags&ICF_R_TO_F64)) + tmpi2->ic_flags&ICF_RES_TO_F64)&& + !(tmpi1->ic_flags&ICF_RES_TO_F64)) Bts(&tmpi->ic_flags,ICf_DONT_PUSH_FLOAT0); } diff --git a/Compiler/OptPass012.HC b/Compiler/OptPass012.HC index f7ce8b8..2d5cf57 100644 --- a/Compiler/OptPass012.HC +++ b/Compiler/OptPass012.HC @@ -43,8 +43,8 @@ args. tmpc=tmpi->ic_class; tmpi->ic_class2=tmpc; tmpi_push=tmpi; - MemSet(&tmpi->a1,0,3*sizeof(CICArg)); - tmpi->a1_type_pointed_to=0; + MemSet(&tmpi->arg1,0,3*sizeof(CICArg)); + tmpi->arg1_type_pointed_to=0; switch [intermediate_code_table[code].arg_cnt] { case IS_V_ARG: ps->ptr-=tmpi->ic_data>>2; @@ -52,13 +52,13 @@ args. case IS_2_ARG: tmpi2=PrsPop(ps); tmpc2=tmpi2->ic_class; - tmpi->t.a2t=tmpi2; - tmpi->t.a2c=PrsPop(ps); + tmpi->t.arg2_tree=tmpi2; + tmpi->t.arg2_class=PrsPop(ps); case IS_1_ARG: tmpi1=PrsPop(ps); tmpc1=tmpi1->ic_class; - tmpi->t.a1t=tmpi1; - tmpi->t.a1c=PrsPop(ps); + tmpi->t.arg1_tree=tmpi1; + tmpi->t.arg1_class=PrsPop(ps); break; case IS_0_ARG: //nobound switch break; @@ -67,19 +67,19 @@ args. cc->flags|=CCF_NOT_CONST; switch [code] { case IC_IMM_F64: - tmpi->ic_flags&=~ICF_R_TO_F64; - if (cc->pass==2 && tmpi->ic_flags&ICF_R_TO_INT) { + tmpi->ic_flags&=~ICF_RES_TO_F64; + if (cc->pass==2 && tmpi->ic_flags&ICF_RES_TO_INT) { tmpi->ic_data=ToI64(tmpi->ic_data(F64)); - tmpi->ic_flags&=~ICF_R_TO_INT; + tmpi->ic_flags&=~ICF_RES_TO_INT; tmpi->ic_code=IC_IMM_I64; tmpi->ic_class=cmp.internal_types[RT_I64]; } break; case IC_IMM_I64: - tmpi->ic_flags&=~ICF_R_TO_INT; - if (cc->pass==2 && tmpi->ic_flags&ICF_R_TO_F64) { + tmpi->ic_flags&=~ICF_RES_TO_INT; + if (cc->pass==2 && tmpi->ic_flags&ICF_RES_TO_F64) { tmpi->ic_data(F64)=ToF64(tmpi->ic_data); - tmpi->ic_flags&=~ICF_R_TO_F64; + tmpi->ic_flags&=~ICF_RES_TO_F64; tmpi->ic_code=IC_IMM_F64; tmpi->ic_class=cmp.internal_types[RT_F64]; } @@ -299,9 +299,9 @@ args. case IC_POWER: tmpc=tmpi->ic_class=cmp.internal_types[RT_F64]; if (tmpc1->raw_type!=RT_F64) - tmpi1->ic_flags|=ICF_R_TO_F64; + tmpi1->ic_flags|=ICF_RES_TO_F64; if (tmpc2->raw_type!=RT_F64) - tmpi2->ic_flags|=ICF_R_TO_F64; + tmpi2->ic_flags|=ICF_RES_TO_F64; tmpi_push->ic_class2=cmp.internal_types[RT_F64]; break; start: @@ -332,7 +332,7 @@ args. default: if (Bsf(i)==Bsr(i)) { tmpi->ic_flags|=tmpi1->ic_flags; - tmpi->t.a1c=tmpi->t.a2c; + tmpi->t.arg1_class=tmpi->t.arg2_class; tmpi->ic_data=Bsf(i); tmpi->ic_code=IC_SHL_CONST; OptSetNOP1(tmpi1); @@ -356,16 +356,16 @@ args. tmpi->ic_code=IC_SHL_CONST; OptSetNOP1(tmpi2); } else if (tmpi1->ic_code==IC_MUL && cc->pass==2) { - if (tmpi1->t.a1t->ic_code==IC_IMM_I64) { + if (tmpi1->t.arg1_tree->ic_code==IC_IMM_I64) { tmpi1->ic_flags|=tmpi->ic_flags; - tmpi1->t.a1t->ic_data*=tmpi2->ic_data; + tmpi1->t.arg1_tree->ic_data*=tmpi2->ic_data; tmpi1->ic_class2=tmpi->ic_class2; tmpi_push=tmpi1; OptSetNOP1(tmpi2); OptSetNOP1(tmpi); - } else if (tmpi1->t.a2t->ic_code==IC_IMM_I64) { + } else if (tmpi1->t.arg2_tree->ic_code==IC_IMM_I64) { tmpi1->ic_flags|=tmpi->ic_flags; - tmpi1->t.a2t->ic_data*=tmpi2->ic_data; + tmpi1->t.arg2_tree->ic_data*=tmpi2->ic_data; tmpi1->ic_class2=tmpi->ic_class2; tmpi_push=tmpi1; OptSetNOP1(tmpi2); @@ -381,16 +381,16 @@ args. OptSetNOP1(tmpi2); OptSetNOP1(tmpi); } else if (tmpi1->ic_code==IC_MUL) { - if (tmpi1->t.a1t->ic_code==IC_IMM_F64) { + if (tmpi1->t.arg1_tree->ic_code==IC_IMM_F64) { tmpi1->ic_flags|=tmpi->ic_flags|tmpi2->ic_flags; - tmpi1->t.a1t->ic_data(F64)*=tmpi2->ic_data(F64); + tmpi1->t.arg1_tree->ic_data(F64)*=tmpi2->ic_data(F64); tmpi1->ic_class2=tmpi->ic_class2; tmpi_push=tmpi1; OptSetNOP1(tmpi2); OptSetNOP1(tmpi); - } else if (tmpi1->t.a2t->ic_code==IC_IMM_F64) { + } else if (tmpi1->t.arg2_tree->ic_code==IC_IMM_F64) { tmpi1->ic_flags|=tmpi->ic_flags|tmpi2->ic_flags; - tmpi1->t.a2t->ic_data(F64)*=tmpi2->ic_data(F64); + tmpi1->t.arg2_tree->ic_data(F64)*=tmpi2->ic_data(F64); tmpi1->ic_class2=tmpi->ic_class2; tmpi_push=tmpi1; OptSetNOP1(tmpi2); @@ -509,19 +509,19 @@ args. OptSetNOP1(tmpi); } else if (tmpi2->ic_code==IC_ADD|| tmpi2->ic_code==IC_SUB) { - if (tmpi2->t.a1t->ic_code==IC_IMM_I64) { + if (tmpi2->t.arg1_tree->ic_code==IC_IMM_I64) { tmpi2->ic_flags|=tmpi->ic_flags; - tmpi2->t.a1t->ic_data+=tmpi1->ic_data; + tmpi2->t.arg1_tree->ic_data+=tmpi1->ic_data; tmpi2->ic_class2=tmpi->ic_class2; tmpi_push=tmpi2; OptSetNOP1(tmpi1); OptSetNOP1(tmpi); - } else if (tmpi2->t.a2t->ic_code==IC_IMM_I64) { + } else if (tmpi2->t.arg2_tree->ic_code==IC_IMM_I64) { tmpi2->ic_flags|=tmpi->ic_flags; if (tmpi2->ic_code==IC_ADD) - tmpi2->t.a2t->ic_data+=tmpi1->ic_data; + tmpi2->t.arg2_tree->ic_data+=tmpi1->ic_data; else - tmpi2->t.a2t->ic_data-=tmpi1->ic_data; + tmpi2->t.arg2_tree->ic_data-=tmpi1->ic_data; tmpi2->ic_class2=tmpi->ic_class2; tmpi_push=tmpi2; OptSetNOP1(tmpi1); @@ -537,19 +537,19 @@ args. OptSetNOP1(tmpi); } else if (tmpi1->ic_code==IC_ADD || tmpi1->ic_code==IC_SUB) { - if (tmpi1->t.a1t->ic_code==IC_IMM_I64) { + if (tmpi1->t.arg1_tree->ic_code==IC_IMM_I64) { tmpi1->ic_flags|=tmpi->ic_flags; - tmpi1->t.a1t->ic_data+=tmpi2->ic_data; + tmpi1->t.arg1_tree->ic_data+=tmpi2->ic_data; tmpi1->ic_class2=tmpi->ic_class2; tmpi_push=tmpi1; OptSetNOP1(tmpi2); OptSetNOP1(tmpi); - } else if (tmpi1->t.a2t->ic_code==IC_IMM_I64) { + } else if (tmpi1->t.arg2_tree->ic_code==IC_IMM_I64) { tmpi1->ic_flags|=tmpi->ic_flags; if (tmpi1->ic_code==IC_ADD) - tmpi1->t.a2t->ic_data+=tmpi2->ic_data; + tmpi1->t.arg2_tree->ic_data+=tmpi2->ic_data; else - tmpi1->t.a2t->ic_data-=tmpi2->ic_data; + tmpi1->t.arg2_tree->ic_data-=tmpi2->ic_data; tmpi1->ic_class2=tmpi->ic_class2; tmpi_push=tmpi1; OptSetNOP1(tmpi2); @@ -565,19 +565,19 @@ args. OptSetNOP1(tmpi); } else if (tmpi2->ic_code==IC_ADD|| tmpi2->ic_code==IC_SUB) { - if (tmpi2->t.a1t->ic_code==IC_IMM_F64) { + if (tmpi2->t.arg1_tree->ic_code==IC_IMM_F64) { tmpi2->ic_flags|=tmpi->ic_flags; - tmpi2->t.a1t->ic_data(F64)+=tmpi1->ic_data(F64); + tmpi2->t.arg1_tree->ic_data(F64)+=tmpi1->ic_data(F64); tmpi2->ic_class2=tmpi->ic_class2; tmpi_push=tmpi2; OptSetNOP1(tmpi1); OptSetNOP1(tmpi); - } else if (tmpi2->t.a2t->ic_code==IC_IMM_F64) { + } else if (tmpi2->t.arg2_tree->ic_code==IC_IMM_F64) { tmpi2->ic_flags|=tmpi->ic_flags; if (tmpi2->ic_code==IC_ADD) - tmpi2->t.a2t->ic_data(F64)+=tmpi1->ic_data(F64); + tmpi2->t.arg2_tree->ic_data(F64)+=tmpi1->ic_data(F64); else - tmpi2->t.a2t->ic_data(F64)-=tmpi1->ic_data(F64); + tmpi2->t.arg2_tree->ic_data(F64)-=tmpi1->ic_data(F64); tmpi2->ic_class2=tmpi->ic_class2; tmpi_push=tmpi2; OptSetNOP1(tmpi1); @@ -593,19 +593,19 @@ args. OptSetNOP1(tmpi); } else if (tmpi1->ic_code==IC_ADD || tmpi1->ic_code==IC_SUB) { - if (tmpi1->t.a1t->ic_code==IC_IMM_F64) { + if (tmpi1->t.arg1_tree->ic_code==IC_IMM_F64) { tmpi1->ic_flags|=tmpi->ic_flags; - tmpi1->t.a1t->ic_data(F64)+=tmpi2->ic_data(F64); + tmpi1->t.arg1_tree->ic_data(F64)+=tmpi2->ic_data(F64); tmpi1->ic_class2=tmpi->ic_class2; tmpi_push=tmpi1; OptSetNOP1(tmpi2); OptSetNOP1(tmpi); - } else if (tmpi1->t.a2t->ic_code==IC_IMM_F64) { + } else if (tmpi1->t.arg2_tree->ic_code==IC_IMM_F64) { tmpi1->ic_flags|=tmpi->ic_flags; if (tmpi1->ic_code==IC_ADD) - tmpi1->t.a2t->ic_data(F64)+=tmpi2->ic_data(F64); + tmpi1->t.arg2_tree->ic_data(F64)+=tmpi2->ic_data(F64); else - tmpi1->t.a2t->ic_data(F64)-=tmpi2->ic_data(F64); + tmpi1->t.arg2_tree->ic_data(F64)-=tmpi2->ic_data(F64); tmpi1->ic_class2=tmpi->ic_class2; tmpi_push=tmpi1; OptSetNOP1(tmpi2); @@ -638,19 +638,19 @@ args. } else if (tmpi1->ic_code==IC_ADD || tmpi1->ic_code==IC_SUB) { - if (tmpi1->t.a1t->ic_code==IC_IMM_I64) { + if (tmpi1->t.arg1_tree->ic_code==IC_IMM_I64) { tmpi1->ic_flags|=tmpi->ic_flags; - tmpi1->t.a1t->ic_data-=tmpi2->ic_data; + tmpi1->t.arg1_tree->ic_data-=tmpi2->ic_data; tmpi1->ic_class2=tmpi->ic_class2; tmpi_push=tmpi1; OptSetNOP1(tmpi2); OptSetNOP1(tmpi); - } else if (tmpi1->t.a2t->ic_code==IC_IMM_I64) { + } else if (tmpi1->t.arg2_tree->ic_code==IC_IMM_I64) { tmpi1->ic_flags|=tmpi->ic_flags; if (tmpi1->ic_code==IC_ADD) - tmpi1->t.a2t->ic_data-=tmpi2->ic_data; + tmpi1->t.arg2_tree->ic_data-=tmpi2->ic_data; else - tmpi1->t.a2t->ic_data+=tmpi2->ic_data; + tmpi1->t.arg2_tree->ic_data+=tmpi2->ic_data; tmpi1->ic_class2=tmpi->ic_class2; tmpi_push=tmpi1; OptSetNOP1(tmpi2); @@ -667,19 +667,19 @@ args. OptSetNOP1(tmpi); } else if (tmpi1->ic_code==IC_ADD || tmpi1->ic_code==IC_SUB) { - if (tmpi1->t.a1t->ic_code==IC_IMM_F64) { + if (tmpi1->t.arg1_tree->ic_code==IC_IMM_F64) { tmpi1->ic_flags|=tmpi->ic_flags|tmpi2->ic_flags; - tmpi1->t.a1t->ic_data(F64)-=tmpi2->ic_data(F64); + tmpi1->t.arg1_tree->ic_data(F64)-=tmpi2->ic_data(F64); tmpi1->ic_class2=tmpi->ic_class2; tmpi_push=tmpi1; OptSetNOP1(tmpi2); OptSetNOP1(tmpi); - } else if (tmpi1->t.a2t->ic_code==IC_IMM_F64) { + } else if (tmpi1->t.arg2_tree->ic_code==IC_IMM_F64) { tmpi1->ic_flags|=tmpi->ic_flags|tmpi2->ic_flags; if (tmpi1->ic_code==IC_ADD) - tmpi1->t.a2t->ic_data(F64)-=tmpi2->ic_data(F64); + tmpi1->t.arg2_tree->ic_data(F64)-=tmpi2->ic_data(F64); else - tmpi1->t.a2t->ic_data(F64)+=tmpi2->ic_data(F64); + tmpi1->t.arg2_tree->ic_data(F64)+=tmpi2->ic_data(F64); tmpi1->ic_class2=tmpi->ic_class2; tmpi_push=tmpi1; OptSetNOP1(tmpi2); @@ -807,7 +807,7 @@ args. } break; end: - tmpi->ic_flags&=~ICF_R_TO_INT; + tmpi->ic_flags&=~ICF_RES_TO_INT; if (!tmpi_push->ic_class->ptr_stars_cnt) { if (tmpi_push->ic_class->raw_type==RT_F64) tmpi_push->ic_class2=cmp.internal_types[RT_F64]; @@ -860,16 +860,16 @@ args. tmpi->ic_flags=tmpi->ic_flags|ICF_USE_F64; if (tmpc->raw_type==RT_F64) { if (tmpc2->raw_type!=RT_F64) - tmpi2->ic_flags|=ICF_R_TO_F64; + tmpi2->ic_flags|=ICF_RES_TO_F64; } break; case IC_ASSIGN: if (tmpc->raw_type==RT_F64) { if (tmpc2->raw_type!=RT_F64) - tmpi2->ic_flags|=ICF_R_TO_F64; + tmpi2->ic_flags|=ICF_RES_TO_F64; } else { if (tmpc2->raw_type==RT_F64) - tmpi2->ic_flags|=ICF_R_TO_INT; + tmpi2->ic_flags|=ICF_RES_TO_INT; } if (cc->pass==2 && tmpi1->ic_class->raw_type!=RT_F64) { if (tmpi1->ic_code==IC__PP) { @@ -891,7 +891,7 @@ args. case IC_OR_EQU: case IC_XOR_EQU: if (tmpc2->raw_type==RT_F64) - tmpi2->ic_flags|=ICF_R_TO_INT; + tmpi2->ic_flags|=ICF_RES_TO_INT; break; end: break; @@ -947,7 +947,7 @@ args. while (tmpi2->ic_code!=IC_CALL_END) tmpi2=tmpi2->next; - tmpi->ic_flags|=tmpi1->ic_flags&~ICF_R_TO_INT|tmpi2->ic_flags; + tmpi->ic_flags|=tmpi1->ic_flags&~ICF_RES_TO_INT|tmpi2->ic_flags; OptSetNOP1(tmpi2); tmpi->ic_code=IC_IMM_I64; @@ -965,7 +965,7 @@ args. while (tmpi2->ic_code!=IC_CALL_END) tmpi2=tmpi2->next; - tmpi->ic_flags|=tmpi1->ic_flags&~ICF_R_TO_F64|tmpi2->ic_flags; + tmpi->ic_flags|=tmpi1->ic_flags&~ICF_RES_TO_F64|tmpi2->ic_flags; OptSetNOP1(tmpi2); tmpi->ic_code=IC_IMM_I64; @@ -974,7 +974,7 @@ args. tmpi->ic_class2=cmp.internal_types[RT_I64]; OptSetNOP1(tmpi1); } - if (tmpi1->ic_flags&ICF_R_TO_F64) { + if (tmpi1->ic_flags&ICF_RES_TO_F64) { i=0; tmpi2=tmpi1->last; while (TRUE) { @@ -992,7 +992,7 @@ args. tmpi2=tmpi2->next; tmpi1->ic_flags=tmpi->ic_flags|tmpi1->ic_flags& - ~(ICF_R_TO_F64|ICF_PUSH_RES)|tmpi2->ic_flags; + ~(ICF_RES_TO_F64|ICF_PUSH_RES)|tmpi2->ic_flags; OptSetNOP1(tmpi2); tmpi1->ic_class=cmp.internal_types[RT_I64]; @@ -1012,7 +1012,7 @@ args. while (tmpi2->ic_code!=IC_CALL_END) tmpi2=tmpi2->next; - tmpi->ic_flags|=tmpi1->ic_flags&~ICF_R_TO_F64|tmpi2->ic_flags; + tmpi->ic_flags|=tmpi1->ic_flags&~ICF_RES_TO_F64|tmpi2->ic_flags; OptSetNOP1(tmpi2); tmpi->ic_code=IC_IMM_F64; @@ -1030,7 +1030,7 @@ args. while (tmpi2->ic_code!=IC_CALL_END) tmpi2=tmpi2->next; - tmpi->ic_flags|=tmpi1->ic_flags&~ICF_R_TO_INT|tmpi2->ic_flags; + tmpi->ic_flags|=tmpi1->ic_flags&~ICF_RES_TO_INT|tmpi2->ic_flags; OptSetNOP1(tmpi2); tmpi->ic_code=IC_IMM_F64; @@ -1039,7 +1039,7 @@ args. tmpi->ic_class2=cmp.internal_types[RT_F64]; OptSetNOP1(tmpi1); } - if (tmpi1->ic_flags&ICF_R_TO_INT) { + if (tmpi1->ic_flags&ICF_RES_TO_INT) { i=0; tmpi2=tmpi1->last; while (TRUE) { @@ -1057,7 +1057,7 @@ args. tmpi2=tmpi2->next; tmpi1->ic_flags=tmpi->ic_flags|tmpi1->ic_flags& - ~(ICF_R_TO_INT|ICF_PUSH_RES)|tmpi2->ic_flags; + ~(ICF_RES_TO_INT|ICF_PUSH_RES)|tmpi2->ic_flags; OptSetNOP1(tmpi2); tmpi1->ic_class=cmp.internal_types[RT_F64]; @@ -1077,7 +1077,7 @@ args. while (tmpi2->ic_code!=IC_CALL_END) tmpi2=tmpi2->next; - tmpi->ic_flags|=tmpi1->ic_flags&~ICF_R_TO_F64|tmpi2->ic_flags; + tmpi->ic_flags|=tmpi1->ic_flags&~ICF_RES_TO_F64|tmpi2->ic_flags; OptSetNOP1(tmpi2); tmpi->ic_code=IC_IMM_I64; @@ -1252,7 +1252,7 @@ args. case IC_ASM: break; default: - "Pass:%d Missing IC handler\n",cc->pass; + "Pass:%d Missing IC hndlr\n",cc->pass; ICPut(cc,tmpi); LexExcept(cc,"Compiler Optimization Error at "); } @@ -1270,9 +1270,9 @@ args. } if (tmpi->ic_class) { if (tmpi->ic_class->raw_type==RT_F64) - tmpi->ic_flags&=~ICF_R_TO_F64; + tmpi->ic_flags&=~ICF_RES_TO_F64; else - tmpi->ic_flags&=~ICF_R_TO_INT; + tmpi->ic_flags&=~ICF_RES_TO_INT; if (code>IC_END_EXP) last_with_class=tmpi; } diff --git a/Compiler/OptPass3.HC b/Compiler/OptPass3.HC index b58db9e..13bfcf5 100644 --- a/Compiler/OptPass3.HC +++ b/Compiler/OptPass3.HC @@ -67,68 +67,68 @@ U0 OptPass3(CCmpCtrl *cc,COptReg *reg_offsets) break; case IS_2_ARG: tmpi2=PrsPop(ps); - if (tmpi2->ic_flags&ICF_R_TO_F64) + if (tmpi2->ic_flags&ICF_RES_TO_F64) tmpc2=cmp.internal_types[RT_F64]; - else if (tmpi2->ic_flags & ICF_R_TO_INT) + else if (tmpi2->ic_flags & ICF_RES_TO_INT) tmpc2=cmp.internal_types[RT_I64]; else - tmpc2=tmpi->t.a2c; - tmpi->a2.type=MDF_STK+CmpRawType(tmpc2); - tmpi->ic_flags|=ICF_A2_WAS_STK; + tmpc2=tmpi->t.arg2_class; + tmpi->arg2.type=MDF_STK+CmpRawType(tmpc2); + tmpi->ic_flags|=ICF_ARG2_WAS_STK; case IS_1_ARG: tmpi1=PrsPop(ps); - if (tmpi1->ic_flags&ICF_R_TO_F64) + if (tmpi1->ic_flags&ICF_RES_TO_F64) tmpc1=cmp.internal_types[RT_F64]; - else if (tmpi1->ic_flags & ICF_R_TO_INT) + else if (tmpi1->ic_flags & ICF_RES_TO_INT) tmpc1=cmp.internal_types[RT_I64]; else - tmpc1=tmpi->t.a1c; - tmpi->a1.type=MDF_STK+CmpRawType(tmpc1); - tmpi->a1_type_pointed_to=CmpRawTypePointed(tmpc1); - tmpi->ic_flags|=ICF_A1_WAS_STK; + tmpc1=tmpi->t.arg1_class; + tmpi->arg1.type=MDF_STK+CmpRawType(tmpc1); + tmpi->arg1_type_pointed_to=CmpRawTypePointed(tmpc1); + tmpi->ic_flags|=ICF_ARG1_WAS_STK; break; case IS_0_ARG: //nobound switch break; } if (intermediate_code_table[code].res_cnt) { - tmpi->r.type=MDF_STK+CmpRawType(tmpc); - tmpi->ic_flags|=ICF_R_WAS_STK; + tmpi->res.type=MDF_STK+CmpRawType(tmpc); + tmpi->ic_flags|=ICF_RES_WAS_STK; PrsPush(ps,tmpi); } switch [code] { case IC_IMM_F64: - tmpi->ic_flags&=~ICF_R_TO_F64; - if (tmpi->ic_flags&ICF_R_TO_INT) { + tmpi->ic_flags&=~ICF_RES_TO_F64; + if (tmpi->ic_flags&ICF_RES_TO_INT) { tmpi->ic_data=ToI64(tmpi->ic_data(F64)); - tmpi->ic_flags&=~ICF_R_TO_INT; + tmpi->ic_flags&=~ICF_RES_TO_INT; tmpi->ic_code=IC_IMM_I64; } break; case IC_IMM_I64: - tmpi->ic_flags&=~ICF_R_TO_INT; - if (tmpi->ic_flags&ICF_R_TO_F64) { + tmpi->ic_flags&=~ICF_RES_TO_INT; + if (tmpi->ic_flags&ICF_RES_TO_F64) { tmpi->ic_data(F64)=ToF64(tmpi->ic_data); - tmpi->ic_flags&=~ICF_R_TO_F64; + tmpi->ic_flags&=~ICF_RES_TO_F64; tmpi->ic_code=IC_IMM_F64; } break; case IC_RBP: tmpi->ic_code=IC_REG; - tmpi->a1.reg=REG_RBP; + tmpi->arg1.reg=REG_RBP; break; case IC_DEREF: - tmpi->a1_type_pointed_to=tmpi->r.type.raw_type; + tmpi->arg1_type_pointed_to=tmpi->res.type.raw_type; if (tmpi1->ic_code==IC_LEA) { tmpi->ic_flags|=tmpi1->ic_flags; - tmpi->a1.reg=tmpi1->a1.reg; - tmpi->a1.disp=tmpi1->a1.disp; - tmpi->a1.type=MDF_DISP+tmpi->r.type.raw_type; - tmpi->a1_type_pointed_to=CmpRawTypePointed(tmpc); + tmpi->arg1.reg=tmpi1->arg1.reg; + tmpi->arg1.disp=tmpi1->arg1.disp; + tmpi->arg1.type=MDF_DISP+tmpi->res.type.raw_type; + tmpi->arg1_type_pointed_to=CmpRawTypePointed(tmpc); tmpi->ic_code=IC_MOV; OptFree(tmpi1); - if (tmpi->a1.reg==REG_RBP) + if (tmpi->arg1.reg==REG_RBP) for (i=0;ia1.disp) { + if (mv[i].offset_start==tmpi->arg1.disp) { mv[i].lea_balance--; mv[i].score++; break; @@ -136,10 +136,10 @@ U0 OptPass3(CCmpCtrl *cc,COptReg *reg_offsets) } else if (tmpil1->ic_code==IC_ADD_CONST) { if (tmpil2->ic_code==IC_REG) { tmpi->ic_flags|=tmpil2->ic_flags|tmpil1->ic_flags; - tmpi->a1.reg=tmpil2->a1.reg; - tmpi->a1.disp=tmpi->ic_data; - tmpi->a1.type=MDF_DISP+tmpi->r.type.raw_type; - tmpi->a1_type_pointed_to=CmpRawTypePointed(tmpc); + tmpi->arg1.reg=tmpil2->arg1.reg; + tmpi->arg1.disp=tmpi->ic_data; + tmpi->arg1.type=MDF_DISP+tmpi->res.type.raw_type; + tmpi->arg1_type_pointed_to=CmpRawTypePointed(tmpc); tmpi->ic_code=IC_MOV; OptFree(tmpil2); OptFree(tmpil1); @@ -150,18 +150,18 @@ U0 OptPass3(CCmpCtrl *cc,COptReg *reg_offsets) case IC__MM: case IC_PP_: case IC_MM_: - CmpMinTypePointed(tmpi,CmpRawTypePointed(tmpi->t.a1c)); + CmpMinTypePointed(tmpi,CmpRawTypePointed(tmpi->t.arg1_class)); case IC_DEREF_PP: case IC_DEREF_MM: - if (tmpi1->ic_code==IC_LEA && tmpi1->a1.type&MDF_DISP && - tmpi1->a1.reg==REG_RBP) + if (tmpi1->ic_code==IC_LEA && tmpi1->arg1.type&MDF_DISP && + tmpi1->arg1.reg==REG_RBP) for (i=0;ia1.disp) { + if (mv[i].offset_start==tmpi1->arg1.disp) { mv[i].lea_balance--; mv[i].score++; break; } - tmpi->a1_type_pointed_to=tmpi->r.type.raw_type; + tmpi->arg1_type_pointed_to=tmpi->res.type.raw_type; break; case IC_MUL: case IC_DIV: @@ -177,19 +177,19 @@ U0 OptPass3(CCmpCtrl *cc,COptReg *reg_offsets) } if (OptFixupBinaryOp2(&tmpi1,&tmpi2)) { tmpi->ic_flags|=tmpi1->ic_flags; - if (tmpi->t.a1t!=tmpi2) - tmpi->t.a1c=tmpi->t.a2c; + if (tmpi->t.arg1_tree!=tmpi2) + tmpi->t.arg1_class=tmpi->t.arg2_class; tmpi->ic_data=tmpi1->ic_data; tmpi->ic_code=IC_ADD_CONST; - tmpi->a1_type_pointed_to=tmpi->r.type.raw_type; - tmpi->a2.type=MDF_NULL; + tmpi->arg1_type_pointed_to=tmpi->res.type.raw_type; + tmpi->arg2.type=MDF_NULL; OptFree(tmpi1); - if (tmpil2->ic_code==IC_REG && tmpil2->a1.reg==REG_RBP) { + if (tmpil2->ic_code==IC_REG && tmpil2->arg1.reg==REG_RBP) { tmpi->ic_flags|=tmpil2->ic_flags; tmpi->ic_code=IC_LEA; - tmpi->a1.reg=REG_RBP; - tmpi->a1.type=MDF_DISP+tmpi->a1.type.raw_type; - tmpi->a1.disp=tmpi->ic_data; + tmpi->arg1.reg=REG_RBP; + tmpi->arg1.type=MDF_DISP+tmpi->arg1.type.raw_type; + tmpi->arg1.disp=tmpi->ic_data; for (i=0;iic_dataic_flags|=tmpi2->ic_flags; tmpi->ic_data=tmpi2->ic_data; tmpi->ic_code=IC_SUB_CONST; - tmpi->a2.type=MDF_NULL; + tmpi->arg2.type=MDF_NULL; OptFree(tmpi2); } break; @@ -235,25 +235,25 @@ U0 OptPass3(CCmpCtrl *cc,COptReg *reg_offsets) case IC_AND_EQU: case IC_OR_EQU: case IC_XOR_EQU: - if (tmpi1->ic_code==IC_LEA && tmpi1->a1.type&MDF_DISP && - tmpi1->a1.reg==REG_RBP) + if (tmpi1->ic_code==IC_LEA && tmpi1->arg1.type&MDF_DISP && + tmpi1->arg1.reg==REG_RBP) for (i=0;ia1.disp) { + if (mv[i].offset_start==tmpi1->arg1.disp) { mv[i].lea_balance--; mv[i].score++; break; } - tmpi->a1_type_pointed_to=tmpi->r.type.raw_type; - CmpMinTypePointed(tmpi,CmpRawTypePointed(tmpi->t.a1c)); + tmpi->arg1_type_pointed_to=tmpi->res.type.raw_type; + CmpMinTypePointed(tmpi,CmpRawTypePointed(tmpi->t.arg1_class)); break; case IC_RETURN_VAL: case IC_RETURN_VAL2: if (tmpc) { if (tmpc->raw_type==RT_F64 && tmpil1->ic_class->raw_type!=RT_F64) - tmpil1->ic_flags|=ICF_R_TO_F64; + tmpil1->ic_flags|=ICF_RES_TO_F64; else if (tmpc->raw_type!=RT_F64 && tmpil1->ic_class->raw_type==RT_F64) - tmpil1->ic_flags|=ICF_R_TO_INT; + tmpil1->ic_flags|=ICF_RES_TO_INT; } break; case IC_SQR: @@ -287,8 +287,8 @@ U0 OptPass3(CCmpCtrl *cc,COptReg *reg_offsets) if ((tmpi1->ic_code==IC_IMM_I64 || tmpi1->ic_code==IC_IMM_F64) && !tmpi1->ic_data) { OptFree(tmpi1); - MemCpy(&tmpi->a1,&tmpi->a2,sizeof(CICArg)); - tmpi->a2.type=MDF_NULL; + MemCpy(&tmpi->arg1,&tmpi->arg2,sizeof(CICArg)); + tmpi->arg2.type=MDF_NULL; if (code==IC_BR_EQU_EQU) code=tmpi->ic_code=IC_BR_ZERO; else @@ -298,7 +298,7 @@ U0 OptPass3(CCmpCtrl *cc,COptReg *reg_offsets) } else if ((tmpi2->ic_code==IC_IMM_I64 || tmpi2->ic_code==IC_IMM_F64) && !tmpi2->ic_data) { OptFree(tmpi2); - tmpi->a2.type=MDF_NULL; + tmpi->arg2.type=MDF_NULL; if (code==IC_BR_EQU_EQU) code=tmpi->ic_code=IC_BR_ZERO; else @@ -310,7 +310,7 @@ U0 OptPass3(CCmpCtrl *cc,COptReg *reg_offsets) if (tmpi1->ic_code==IC_IMM_I64 || tmpi1->ic_code==IC_IMM_F64) { if (code==IC_BR_ZERO ^^ tmpi1->ic_data) { OptFree(tmpi1); - tmpi->a1.type=MDF_NULL; + tmpi->arg1.type=MDF_NULL; tmpi->ic_code=IC_JMP; } else { OptFree(tmpi1); @@ -359,15 +359,15 @@ U0 OptPass3(CCmpCtrl *cc,COptReg *reg_offsets) goto here1; case IC_BR_MM_ZERO: case IC_BR_MM_NOT_ZERO: - if (tmpi1->ic_code==IC_LEA && tmpi1->a1.type&MDF_DISP && - tmpi1->a1.reg==REG_RBP) + if (tmpi1->ic_code==IC_LEA && tmpi1->arg1.type&MDF_DISP && + tmpi1->arg1.reg==REG_RBP) for (i=0;ia1.disp) { + if (mv[i].offset_start==tmpi1->arg1.disp) { mv[i].lea_balance--; mv[i].score++; break; } - tmpi->a1_type_pointed_to=CmpRawType(tmpc); + tmpi->arg1_type_pointed_to=CmpRawType(tmpc); goto here1; case IC_BR_LESS: case IC_BR_GREATER_EQU: @@ -504,7 +504,7 @@ here1: case IC_LABEL: break; default: - "Pass:%d Missing IC handler\n",cc->pass; + "Pass:%d Missing IC hndlr\n",cc->pass; ICPut(cc,tmpi); LexExcept(cc,"Compiler Optimization Error at "); } diff --git a/Compiler/OptPass4.HC b/Compiler/OptPass4.HC index b0007a5..170b735 100644 --- a/Compiler/OptPass4.HC +++ b/Compiler/OptPass4.HC @@ -9,119 +9,120 @@ Bool OptIC4(CIntermediateCode *tmpi) if (!(tmpil2=OptLag1(tmpil1))) return FALSE; - if (tmpil2->r.type&MDF_STK && !(tmpil2->ic_flags&ICF_PUSH_RES)) { - if (tmpil1->ic_code==IC_ADD_CONST && tmpil1->a1.type&MDF_STK) { + if (tmpil2->res.type&MDF_STK && !(tmpil2->ic_flags&ICF_PUSH_RES)) { + if (tmpil1->ic_code==IC_ADD_CONST && tmpil1->arg1.type&MDF_STK) { if ((tmpil2->ic_code==IC_REG || tmpil2->ic_code==IC_MOV) && - tmpil2->a1.type&MDF_REG) { + tmpil2->arg1.type&MDF_REG) { i=tmpil1->ic_data; if (MIN_I32<=i<=MAX_I32 && - !Bt(&cmp.non_ptr_vars_mask,tmpil2->a1.reg)) { + !Bt(&cmp.non_ptr_vars_mask,tmpil2->arg1.reg)) { tmpil1->ic_flags|=tmpil2->ic_flags&ICG_NO_CVT_MASK; tmpil1->ic_code=IC_LEA; - tmpil1->a1.type=MDF_DISP+tmpil1->a1.type.raw_type; - tmpil1->a1.reg=tmpil2->a1.reg; - tmpil1->a1.disp=i; + tmpil1->arg1.type=MDF_DISP+tmpil1->arg1.type.raw_type; + tmpil1->arg1.reg=tmpil2->arg1.reg; + tmpil1->arg1.disp=i; OptFree(tmpil2); return TRUE; } - } else if (tmpil2->ic_code==IC_SHL_CONST && tmpil2->a1.type&MDF_REG) { + } else if (tmpil2->ic_code==IC_SHL_CONST && tmpil2->arg1.type&MDF_REG) { i=tmpil1->ic_data; - if (MIN_I32<=i<=MAX_I32 && tmpil2->a1.reg!=REG_RSP && + if (MIN_I32<=i<=MAX_I32 && tmpil2->arg1.reg!=REG_RSP && 1<=tmpil2->ic_data<=3) { tmpil1->ic_flags|=tmpil2->ic_flags&ICG_NO_CVT_MASK; tmpil1->ic_code=IC_LEA; - tmpil1->a1.type=MDF_SIB+tmpil1->a1.type.raw_type; - tmpil1->a1.reg=tmpil2->a1.reg<<8+REG_NONE; + tmpil1->arg1.type=MDF_SIB+tmpil1->arg1.type.raw_type; + tmpil1->arg1.reg=tmpil2->arg1.reg<<8+REG_NONE; if (tmpil2->ic_data==1) - tmpil1->a1.reg|=0x4000; + tmpil1->arg1.reg|=0x4000; else if (tmpil2->ic_data==2) - tmpil1->a1.reg|=0x8000; + tmpil1->arg1.reg|=0x8000; else - tmpil1->a1.reg|=0xC000; - tmpil1->a1.disp=i; + tmpil1->arg1.reg|=0xC000; + tmpil1->arg1.disp=i; OptFree(tmpil2); return TRUE; } } } if (tmpil2->ic_code==IC_MOV || tmpil2->ic_code==IC_REG) { - if (tmpil1->a2.type&MDF_STK) { - if (tmpil2->ic_flags & ICF_R_TO_INT) { - if (tmpil2->a1.type&MDF_IMM) - tmpil2->a1.disp=tmpil2->a1.disp(F64); + if (tmpil1->arg2.type&MDF_STK) { + if (tmpil2->ic_flags & ICF_RES_TO_INT) { + if (tmpil2->arg1.type&MDF_IMM) + tmpil2->arg1.disp=tmpil2->arg1.disp(F64); else - tmpil1->ic_flags|=ICF_A2_TO_INT; - } else if (tmpil2->ic_flags&ICF_R_TO_F64) { - if (tmpil2->a1.type&MDF_IMM) - tmpil2->a1.disp(F64)=tmpil2->a1.disp; + tmpil1->ic_flags|=ICF_ARG2_TO_INT; + } else if (tmpil2->ic_flags&ICF_RES_TO_F64) { + if (tmpil2->arg1.type&MDF_IMM) + tmpil2->arg1.disp(F64)=tmpil2->arg1.disp; else - tmpil1->ic_flags|=ICF_A2_TO_F64; + tmpil1->ic_flags|=ICF_ARG2_TO_F64; } - tmpil1->a2.type=tmpil2->a1.type&MDG_MASK+ - MinI64(tmpil1->a2.type.raw_type, - MinI64(tmpil2->r.type.raw_type,tmpil2->a1.type.raw_type)); - tmpil1->a2.reg=tmpil2->a1.reg; - tmpil1->a2.disp=tmpil2->a1.disp; + tmpil1->arg2.type=tmpil2->arg1.type&MDG_MASK+ + MinI64(tmpil1->arg2.type.raw_type, + MinI64(tmpil2->res.type.raw_type,tmpil2->arg1.type.raw_type)); + tmpil1->arg2.reg=tmpil2->arg1.reg; + tmpil1->arg2.disp=tmpil2->arg1.disp; tmpil1->ic_flags|=tmpil2->ic_flags&ICG_NO_CVT_MASK; OptSetNOP2(tmpil2); return TRUE; } - if (tmpil1->a1.type&MDF_STK) { - if (tmpil2->ic_flags & ICF_R_TO_INT) { - if (tmpil2->a1.type&MDF_IMM) - tmpil2->a1.disp=tmpil2->a1.disp(F64); + if (tmpil1->arg1.type&MDF_STK) { + if (tmpil2->ic_flags & ICF_RES_TO_INT) { + if (tmpil2->arg1.type&MDF_IMM) + tmpil2->arg1.disp=tmpil2->arg1.disp(F64); else - tmpil1->ic_flags|=ICF_A1_TO_INT; - } else if (tmpil2->ic_flags&ICF_R_TO_F64) { - if (tmpil2->a1.type&MDF_IMM) { - if (tmpil2->a1.type&RTF_UNSIGNED) - tmpil2->a1.disp(F64)=tmpil2->a1.disp(U64); + tmpil1->ic_flags|=ICF_ARG1_TO_INT; + } else if (tmpil2->ic_flags&ICF_RES_TO_F64) { + if (tmpil2->arg1.type&MDF_IMM) { + if (tmpil2->arg1.type&RTF_UNSIGNED) + tmpil2->arg1.disp(F64)=tmpil2->arg1.disp(U64); else - tmpil2->a1.disp(F64)=tmpil2->a1.disp(I64); + tmpil2->arg1.disp(F64)=tmpil2->arg1.disp(I64); } else - tmpil1->ic_flags|=ICF_A1_TO_F64; + tmpil1->ic_flags|=ICF_ARG1_TO_F64; } - tmpil1->a1.type=tmpil2->a1.type&MDG_MASK+ - MinI64(tmpil1->a1.type.raw_type, - MinI64(tmpil2->r.type.raw_type,tmpil2->a1.type.raw_type)); - CmpMinTypePointed(tmpil1,tmpil2->a1_type_pointed_to); - tmpil1->a1.reg=tmpil2->a1.reg; - tmpil1->a1.disp=tmpil2->a1.disp; + tmpil1->arg1.type=tmpil2->arg1.type&MDG_MASK+ + MinI64(tmpil1->arg1.type.raw_type, + MinI64(tmpil2->res.type.raw_type,tmpil2->arg1.type.raw_type)); + CmpMinTypePointed(tmpil1,tmpil2->arg1_type_pointed_to); + tmpil1->arg1.reg=tmpil2->arg1.reg; + tmpil1->arg1.disp=tmpil2->arg1.disp; tmpil1->ic_flags|=tmpil2->ic_flags&ICG_NO_CVT_MASK; OptSetNOP2(tmpil2); return TRUE; } } if (tmpil1->ic_code==IC_DEREF) { - if (tmpil2->ic_code==IC_ADD_CONST && tmpil2->a1.type&MDF_REG && - tmpil1->a1.type&MDF_STK) { + if (tmpil2->ic_code==IC_ADD_CONST && tmpil2->arg1.type&MDF_REG && + tmpil1->arg1.type&MDF_STK) { i=tmpil2->ic_data; if (MIN_I32<=i<=MAX_I32 && - !Bt(&cmp.non_ptr_vars_mask,tmpil2->a1.reg)) { + !Bt(&cmp.non_ptr_vars_mask,tmpil2->arg1.reg)) { tmpil1->ic_flags|=tmpil2->ic_flags; tmpil1->ic_code=IC_MOV; - tmpil1->a1.type=MDF_DISP+tmpil1->a1_type_pointed_to; - tmpil1->a1.reg=tmpil2->a1.reg; - tmpil1->a1.disp=i; + tmpil1->arg1.type=MDF_DISP+tmpil1->arg1_type_pointed_to; + tmpil1->arg1.reg=tmpil2->arg1.reg; + tmpil1->arg1.disp=i; OptSetNOP2(tmpil2,-1); return TRUE; } } - if (tmpil2->ic_code==IC_LEA && tmpil1->a1.type&MDF_STK) { + if (tmpil2->ic_code==IC_LEA && tmpil1->arg1.type&MDF_STK) { tmpil1->ic_flags|=tmpil2->ic_flags; tmpil1->ic_code=IC_MOV; - tmpil1->a1.type=tmpil2->a1.type&MDG_MASK+tmpil1->a1_type_pointed_to; - tmpil1->a1.reg=tmpil2->a1.reg; - tmpil1->a1.disp=tmpil2->a1.disp; + tmpil1->arg1.type=tmpil2->arg1.type&MDG_MASK+ + tmpil1->arg1_type_pointed_to; + tmpil1->arg1.reg=tmpil2->arg1.reg; + tmpil1->arg1.disp=tmpil2->arg1.disp; OptFree(tmpil2); return TRUE; } } } if (tmpil1->ic_code==IC_DEREF) { - if (tmpil1->a1.type&MDF_REG) { - tmpil1->a1.type=MDF_DISP+tmpil1->a1_type_pointed_to; - tmpil1->a1.disp=0; + if (tmpil1->arg1.type&MDF_REG) { + tmpil1->arg1.type=MDF_DISP+tmpil1->arg1_type_pointed_to; + tmpil1->arg1.disp=0; tmpil1->ic_code=IC_MOV; return TRUE; } @@ -182,51 +183,51 @@ U0 OptPass4(CCmpCtrl *cc,COptReg *reg_offsets,I64 *_type) switch [code] { case IC_IMM_I64: case IC_TYPE: - tmpi->a1.type=MDF_IMM+RT_I64; - tmpi->a1.disp=tmpi->ic_data; + tmpi->arg1.type=MDF_IMM+RT_I64; + tmpi->arg1.disp=tmpi->ic_data; tmpi->ic_code=IC_MOV; break; case IC_IMM_F64: - tmpi->a1.type=MDF_IMM+RT_I64; - tmpi->a1.disp=tmpi->ic_data; - tmpi->a1_type_pointed_to=RT_F64; + tmpi->arg1.type=MDF_IMM+RT_I64; + tmpi->arg1.disp=tmpi->ic_data; + tmpi->arg1_type_pointed_to=RT_F64; tmpi->ic_code=IC_MOV; break; case IC_MOV: - if (tmpi->a1.type&MDF_DISP && tmpi->a1.reg==REG_RBP) { - i=CmpOffset2Reg(tmpi->a1.disp,reg_offsets); + if (tmpi->arg1.type&MDF_DISP && tmpi->arg1.reg==REG_RBP) { + i=CmpOffset2Reg(tmpi->arg1.disp,reg_offsets); if (i>=0) { - tmpi->a1.type=MDF_REG+tmpi->a1.type.raw_type; - tmpi->a1.reg=i; - tmpi->a1.disp=0; + tmpi->arg1.type=MDF_REG+tmpi->arg1.type.raw_type; + tmpi->arg1.reg=i; + tmpi->arg1.disp=0; } } break; case IC_DEREF: if (tmpi1->ic_code==IC_LEA) { - if (tmpi1->a1.type&MDF_DISP && tmpi1->a1.reg==REG_RBP) { - i=CmpOffset2Reg(tmpi1->a1.disp,reg_offsets); + if (tmpi1->arg1.type&MDF_DISP && tmpi1->arg1.reg==REG_RBP) { + i=CmpOffset2Reg(tmpi1->arg1.disp,reg_offsets); if (i>=0) { tmpi->ic_flags|=tmpi1->ic_flags; tmpi->ic_code=IC_REG; - tmpi->a1.type=MDF_REG+tmpi->a1.type.raw_type; - tmpi->a1.reg=i; - tmpi->a1.disp=0; + tmpi->arg1.type=MDF_REG+tmpi->arg1.type.raw_type; + tmpi->arg1.reg=i; + tmpi->arg1.disp=0; OptFree(tmpi1); } } } else if ((tmpi1->ic_code==IC_ABS_ADDR || tmpi1->ic_code==IC_MOV && - tmpi1->a1.type==MDF_IMM+RT_I64 && - 0<=tmpi1->a1.disp<=MAX_I32)&& !(tmpi1->ic_flags&ICF_NO_RIP)) { + tmpi1->arg1.type==MDF_IMM+RT_I64 && + 0<=tmpi1->arg1.disp<=MAX_I32)&& !(tmpi1->ic_flags&ICF_NO_RIP)) { if (tmpi1->ic_code==IC_ABS_ADDR) - tmpi->a1.disp=tmpi1->ic_data; + tmpi->arg1.disp=tmpi1->ic_data; else - tmpi->a1.disp=tmpi1->a1.disp; + tmpi->arg1.disp=tmpi1->arg1.disp; tmpi->ic_flags|=tmpi1->ic_flags; tmpi->ic_code=IC_MOV; - tmpi->a1.type=MDF_RIP_DISP32+tmpi->a1_type_pointed_to; - tmpi->a1.reg=REG_RIP; + tmpi->arg1.type=MDF_RIP_DISP32+tmpi->arg1_type_pointed_to; + tmpi->arg1.reg=REG_RIP; OptFree(tmpi1); } break; @@ -240,13 +241,13 @@ U0 OptPass4(CCmpCtrl *cc,COptReg *reg_offsets,I64 *_type) case IC_PP_: case IC_MM_: if (tmpi1->ic_code==IC_LEA) { - if (tmpi1->a1.type&MDF_DISP && tmpi1->a1.reg==REG_RBP) { - i=CmpOffset2Reg(tmpi1->a1.disp,reg_offsets); + if (tmpi1->arg1.type&MDF_DISP && tmpi1->arg1.reg==REG_RBP) { + i=CmpOffset2Reg(tmpi1->arg1.disp,reg_offsets); if (i>=0) { tmpi->ic_flags|=tmpi1->ic_flags; - tmpi->a1.type=MDF_REG+tmpi->a1.type.raw_type; - tmpi->a1.reg=i; - tmpi->a1.disp=0; + tmpi->arg1.type=MDF_REG+tmpi->arg1.type.raw_type; + tmpi->arg1.reg=i; + tmpi->arg1.disp=0; tmpi->ic_flags|=ICF_BY_VAL; OptSetNOP2(tmpi1); } else @@ -254,38 +255,38 @@ U0 OptPass4(CCmpCtrl *cc,COptReg *reg_offsets,I64 *_type) } else { p4_lea_gone: tmpi->ic_flags|=tmpi1->ic_flags; - tmpi->a1.type=tmpi1->a1.type; - tmpi->a1.reg=tmpi1->a1.reg; - tmpi->a1.disp=tmpi1->a1.disp; + tmpi->arg1.type=tmpi1->arg1.type; + tmpi->arg1.reg=tmpi1->arg1.reg; + tmpi->arg1.disp=tmpi1->arg1.disp; tmpi->ic_flags|=ICF_BY_VAL; OptSetNOP2(tmpi1); } } else if ((tmpi1->ic_code==IC_ABS_ADDR || tmpi1->ic_code==IC_MOV && - tmpi1->a1.type==MDF_IMM+RT_I64 && - 0<=tmpi1->a1.disp<=MAX_I32)&& !(tmpi1->ic_flags&ICF_NO_RIP)) { + tmpi1->arg1.type==MDF_IMM+RT_I64 && + 0<=tmpi1->arg1.disp<=MAX_I32)&& !(tmpi1->ic_flags&ICF_NO_RIP)) { tmpi->ic_flags|=tmpi1->ic_flags; if (tmpi1->ic_code==IC_ABS_ADDR) - tmpi->a1.disp=tmpi1->ic_data; + tmpi->arg1.disp=tmpi1->ic_data; else - tmpi->a1.disp=tmpi1->a1.disp; - tmpi->a1.type=MDF_RIP_DISP32+tmpi->a1_type_pointed_to; - tmpi->a1.reg=REG_RIP; + tmpi->arg1.disp=tmpi1->arg1.disp; + tmpi->arg1.type=MDF_RIP_DISP32+tmpi->arg1_type_pointed_to; + tmpi->arg1.reg=REG_RIP; tmpi->ic_flags|=ICF_BY_VAL; OptFree(tmpi1); } break; case IC_ADD: - if (tmpi1->ic_code==IC_MOV && tmpi1->a1.type==MDF_REG+RT_I64 || + if (tmpi1->ic_code==IC_MOV && tmpi1->arg1.type==MDF_REG+RT_I64 || tmpi1->ic_code==IC_REG) { - if (tmpi2->ic_code==IC_MOV && tmpi2->a1.type==MDF_REG+RT_I64 || + if (tmpi2->ic_code==IC_MOV && tmpi2->arg1.type==MDF_REG+RT_I64 || tmpi2->ic_code==IC_REG) { - if (tmpi2->a1.reg!=REG_RSP) { - tmpi->a1.disp=0; - tmpi->a1.reg=tmpi1->a1.reg+tmpi2->a1.reg<<8; + if (tmpi2->arg1.reg!=REG_RSP) { + tmpi->arg1.disp=0; + tmpi->arg1.reg=tmpi1->arg1.reg+tmpi2->arg1.reg<<8; goto p4_sib; - } else if (tmpi1->a1.reg!=REG_RSP) { - tmpi->a1.disp=0; - tmpi->a1.reg=tmpi2->a1.reg+tmpi1->a1.reg<<8; + } else if (tmpi1->arg1.reg!=REG_RSP) { + tmpi->arg1.disp=0; + tmpi->arg1.reg=tmpi2->arg1.reg+tmpi1->arg1.reg<<8; p4_sib: tmpi->ic_flags|=(tmpi1->ic_flags|tmpi2->ic_flags) &ICG_NO_CVT_MASK; @@ -293,52 +294,52 @@ p4_sib: OptFree(tmpi2); tmpi->ic_code=IC_LEA; - tmpi->a1.type=MDF_SIB+RT_I64; - tmpi->a1_type_pointed_to=RT_I64; + tmpi->arg1.type=MDF_SIB+RT_I64; + tmpi->arg1_type_pointed_to=RT_I64; - tmpi->a2.type=MDF_NULL+tmpi->a2.type.raw_type; + tmpi->arg2.type=MDF_NULL+tmpi->arg2.type.raw_type; } } else if (tmpi2->ic_code==IC_SHL_CONST && - tmpi2->a1.type==MDF_REG+RT_I64 && tmpi2->ic_data<=3) { - if (tmpi2->a1.reg!=REG_RSP) { - tmpi->a1.disp=0; - tmpi->a1.reg=tmpi1->a1.reg+tmpi2->a1.reg<<8; + tmpi2->arg1.type==MDF_REG+RT_I64 && tmpi2->ic_data<=3) { + if (tmpi2->arg1.reg!=REG_RSP) { + tmpi->arg1.disp=0; + tmpi->arg1.reg=tmpi1->arg1.reg+tmpi2->arg1.reg<<8; if (tmpi2->ic_data==1) - tmpi->a1.reg|=0x4000; + tmpi->arg1.reg|=0x4000; else if (tmpi2->ic_data==2) - tmpi->a1.reg|=0x8000; + tmpi->arg1.reg|=0x8000; else - tmpi->a1.reg|=0xC000; + tmpi->arg1.reg|=0xC000; goto p4_sib; } } } else if (tmpi1->ic_code==IC_LEA && - tmpi1->a1.type&MDF_DISP) { - if (tmpi1->a1.reg==REG_RBP && - CmpOffset2Reg(tmpi1->a1.disp,reg_offsets)>=0) + tmpi1->arg1.type&MDF_DISP) { + if (tmpi1->arg1.reg==REG_RBP && + CmpOffset2Reg(tmpi1->arg1.disp,reg_offsets)>=0) break; - if (tmpi2->ic_code==IC_MOV && tmpi2->a1.type==MDF_REG+RT_I64 || + if (tmpi2->ic_code==IC_MOV && tmpi2->arg1.type==MDF_REG+RT_I64 || tmpi2->ic_code==IC_REG) { - if (tmpi2->a1.reg!=REG_RSP) { - tmpi->a1.disp=tmpi1->a1.disp; - tmpi->a1.reg=tmpi1->a1.reg+tmpi2->a1.reg<<8; + if (tmpi2->arg1.reg!=REG_RSP) { + tmpi->arg1.disp=tmpi1->arg1.disp; + tmpi->arg1.reg=tmpi1->arg1.reg+tmpi2->arg1.reg<<8; goto p4_sib; - } else if (tmpi1->a1.reg!=REG_RSP) { - tmpi->a1.disp=tmpi1->a1.disp; - tmpi->a1.reg=tmpi2->a1.reg+tmpi1->a1.reg<<8; + } else if (tmpi1->arg1.reg!=REG_RSP) { + tmpi->arg1.disp=tmpi1->arg1.disp; + tmpi->arg1.reg=tmpi2->arg1.reg+tmpi1->arg1.reg<<8; goto p4_sib; } } else if (tmpi2->ic_code==IC_SHL_CONST && - tmpi2->a1.type==MDF_REG+RT_I64 && tmpi2->ic_data<=3) { - if (tmpi2->a1.reg!=REG_RSP) { - tmpi->a1.disp=tmpi1->a1.disp; - tmpi->a1.reg=tmpi1->a1.reg+tmpi2->a1.reg<<8; + tmpi2->arg1.type==MDF_REG+RT_I64 && tmpi2->ic_data<=3) { + if (tmpi2->arg1.reg!=REG_RSP) { + tmpi->arg1.disp=tmpi1->arg1.disp; + tmpi->arg1.reg=tmpi1->arg1.reg+tmpi2->arg1.reg<<8; if (tmpi2->ic_data==1) - tmpi->a1.reg|=0x4000; + tmpi->arg1.reg|=0x4000; else if (tmpi2->ic_data==2) - tmpi->a1.reg|=0x8000; + tmpi->arg1.reg|=0x8000; else - tmpi->a1.reg|=0xC000; + tmpi->arg1.reg|=0xC000; goto p4_sib; } } @@ -360,52 +361,53 @@ p4_sib: case IC_ADD_EQU: case IC_SUB_EQU: if (tmpi1->ic_code==IC_LEA) { - if (tmpi1->a1.type&(MDF_DISP|MDF_SIB)) { + if (tmpi1->arg1.type&(MDF_DISP|MDF_SIB)) { tmpi2=tmpi->next; - if (tmpi1->a1.type&MDF_DISP && tmpi1->a1.reg==REG_RBP) { - i=CmpOffset2Reg(tmpi1->a1.disp,reg_offsets); + if (tmpi1->arg1.type&MDF_DISP && tmpi1->arg1.reg==REG_RBP) { + i=CmpOffset2Reg(tmpi1->arg1.disp,reg_offsets); if (i>=0) { tmpi->ic_flags|=tmpi1->ic_flags; - tmpi->a1.type=MDF_REG+tmpi->a1.type.raw_type; - tmpi->a1.reg=i; - tmpi->a1.disp=0; + tmpi->arg1.type=MDF_REG+tmpi->arg1.type.raw_type; + tmpi->arg1.reg=i; + tmpi->arg1.disp=0; OptSetNOP2(tmpi1); } else { tmpi->ic_flags|=tmpi1->ic_flags; - tmpi->a1.type=MDF_DISP+tmpi->a1.type.raw_type; - tmpi->a1.reg=REG_RBP; - tmpi->a1.disp=tmpi1->a1.disp; + tmpi->arg1.type=MDF_DISP+tmpi->arg1.type.raw_type; + tmpi->arg1.reg=REG_RBP; + tmpi->arg1.disp=tmpi1->arg1.disp; OptSetNOP2(tmpi1); } } else { tmpi->ic_flags|=tmpi1->ic_flags; - tmpi->a1.type=tmpi1->a1.type&MDG_MASK+tmpi->a1.type.raw_type; - tmpi->a1.reg=tmpi1->a1.reg; - tmpi->a1.disp=tmpi1->a1.disp; + tmpi->arg1.type=tmpi1->arg1.type&MDG_MASK+ + tmpi->arg1.type.raw_type; + tmpi->arg1.reg=tmpi1->arg1.reg; + tmpi->arg1.disp=tmpi1->arg1.disp; OptSetNOP2(tmpi1); } - if (tmpi->r.type&MDF_STK && tmpi2->a2.type&MDF_STK && + if (tmpi->res.type&MDF_STK && tmpi2->arg2.type&MDF_STK && code!=IC_ASSIGN_PP && code!=IC_ASSIGN_MM) { - tmpi->r.type=tmpi->a1.type; - tmpi->r.reg=tmpi->a1.reg; - tmpi->r.disp=tmpi->a1.disp; - tmpi2->a2.type=tmpi->a1.type; - tmpi2->a2.reg=tmpi->a1.reg; - tmpi2->a2.disp=tmpi->a1.disp; - CmpMinTypePointed(tmpi2,tmpi->a1_type_pointed_to); + tmpi->res.type=tmpi->arg1.type; + tmpi->res.reg=tmpi->arg1.reg; + tmpi->res.disp=tmpi->arg1.disp; + tmpi2->arg2.type=tmpi->arg1.type; + tmpi2->arg2.reg=tmpi->arg1.reg; + tmpi2->arg2.disp=tmpi->arg1.disp; + CmpMinTypePointed(tmpi2,tmpi->arg1_type_pointed_to); } tmpi->ic_flags|=ICF_BY_VAL; } } else if ((tmpi1->ic_code==IC_ABS_ADDR || - tmpi1->ic_code==IC_MOV && tmpi1->a1.type==MDF_IMM+RT_I64 && - 0<=tmpi1->a1.disp<=MAX_I32)&& !(tmpi1->ic_flags&ICF_NO_RIP)) { + tmpi1->ic_code==IC_MOV && tmpi1->arg1.type==MDF_IMM+RT_I64 && + 0<=tmpi1->arg1.disp<=MAX_I32)&& !(tmpi1->ic_flags&ICF_NO_RIP)) { tmpi->ic_flags|=tmpi1->ic_flags; if (tmpi1->ic_code==IC_ABS_ADDR) - tmpi->a1.disp=tmpi1->ic_data; + tmpi->arg1.disp=tmpi1->ic_data; else - tmpi->a1.disp=tmpi1->a1.disp; - tmpi->a1.type=MDF_RIP_DISP32+tmpi->a1.type.raw_type; - tmpi->a1.reg=REG_RIP; + tmpi->arg1.disp=tmpi1->arg1.disp; + tmpi->arg1.type=MDF_RIP_DISP32+tmpi->arg1.type.raw_type; + tmpi->arg1.reg=REG_RIP; tmpi->ic_flags|=ICF_BY_VAL; OptSetNOP2(tmpi1); } @@ -417,9 +419,9 @@ p4_sib: tmpil1=tmpi; while (tmpil1=OptLag1(tmpil1)) if (tmpil1->ic_class) { - if (tmpil1->ic_flags & ICF_R_TO_F64) + if (tmpil1->ic_flags & ICF_RES_TO_F64) *_type=RT_F64; - else if (tmpil1->ic_flags & ICF_R_TO_INT) + else if (tmpil1->ic_flags & ICF_RES_TO_INT) *_type=RT_I64; else *_type=tmpil1->ic_class->raw_type; @@ -450,42 +452,42 @@ p4_sib: case IC_LBTC: if (!(tmpi->ic_flags&ICF_BY_VAL)) { if (tmpi2->ic_code==IC_ADDR) { - if (tmpi2->a1.type&MDF_STK && - tmpi2->r.type&MDF_STK) { + if (tmpi2->arg1.type&MDF_STK && + tmpi2->res.type&MDF_STK) { if (tmpil2=OptLag1(tmpi2)) { if (tmpil2->ic_code==IC_LEA) { - if (tmpil2->a1.type&(MDF_IMM|MDG_REG_DISP_SIB_RIP)) { + if (tmpil2->arg1.type&(MDF_IMM|MDG_REG_DISP_SIB_RIP)) { if (tmpi2) { tmpi->ic_flags|=tmpi2->ic_flags; OptFree(tmpi2); } tmpi->ic_flags|=tmpil2->ic_flags|ICF_BY_VAL; - tmpi->a2.type=tmpil2->a1.type; - tmpi->a2.reg =tmpil2->a1.reg; - tmpi->a2.disp=tmpil2->a1.disp; + tmpi->arg2.type=tmpil2->arg1.type; + tmpi->arg2.reg =tmpil2->arg1.reg; + tmpi->arg2.disp=tmpil2->arg1.disp; OptFree(tmpil2); } break; } else if (tmpil2->ic_code!=IC_ABS_ADDR && !(tmpil2->ic_code==IC_MOV && - tmpil2->a1.type==MDF_IMM+RT_I64 && - 0<=tmpil2->a1.disp<=MAX_I32) || + tmpil2->arg1.type==MDF_IMM+RT_I64 && + 0<=tmpil2->arg1.disp<=MAX_I32) || tmpil2->ic_flags&ICF_NO_RIP) tmpil2=NULL; else { if (tmpil2->ic_code==IC_ABS_ADDR) - tmpi->a2.disp=tmpil2->ic_data; + tmpi->arg2.disp=tmpil2->ic_data; else - tmpi->a2.disp=tmpil2->a1.disp; + tmpi->arg2.disp=tmpil2->arg1.disp; } } } else { - if (tmpi2->a1.type==MDF_IMM+RT_I64 && - 0<=tmpi2->a1.disp<=MAX_I32 && + if (tmpi2->arg1.type==MDF_IMM+RT_I64 && + 0<=tmpi2->arg1.disp<=MAX_I32 && !(tmpi2->ic_flags&ICF_NO_RIP)) { tmpil2=tmpi2; tmpi2=NULL; - tmpi->a2.disp=tmpil2->a1.disp; + tmpi->arg2.disp=tmpil2->arg1.disp; } else tmpil2=NULL; } @@ -495,18 +497,18 @@ p4_sib: OptFree(tmpi2); } tmpi->ic_flags|=tmpil2->ic_flags|ICF_BY_VAL; - tmpi->a2.type=MDF_RIP_DISP32+tmpi->a2.type.raw_type; - tmpi->a2.reg=REG_RIP; + tmpi->arg2.type=MDF_RIP_DISP32+tmpi->arg2.type.raw_type; + tmpi->arg2.reg=REG_RIP; OptFree(tmpil2); } - } else if (tmpi2->ic_code==IC_MOV && tmpi2->r.type&MDF_STK && - tmpi2->a1.type==MDF_IMM+RT_I64 && - 0<=tmpi2->a1.disp<=MAX_I32 && + } else if (tmpi2->ic_code==IC_MOV && tmpi2->res.type&MDF_STK && + tmpi2->arg1.type==MDF_IMM+RT_I64 && + 0<=tmpi2->arg1.disp<=MAX_I32 && !(tmpi2->ic_flags&ICF_NO_RIP)) { - tmpi->a2.disp=tmpi2->a1.disp; + tmpi->arg2.disp=tmpi2->arg1.disp; tmpi->ic_flags|=tmpi2->ic_flags|ICF_BY_VAL; - tmpi->a2.type=MDF_RIP_DISP32+tmpi->a2.type.raw_type; - tmpi->a2.reg=REG_RIP; + tmpi->arg2.type=MDF_RIP_DISP32+tmpi->arg2.type.raw_type; + tmpi->arg2.reg=REG_RIP; OptFree(tmpi2); } } @@ -540,19 +542,19 @@ p4_sib: if (!(tmpil1->ic_flags&ICF_PUSH_RES)) { if (tmpi->ic_flags&ICF_RES_NOT_USED) { tmpil1->ic_flags|=ICF_RES_NOT_USED; - tmpil1->r.type=MDF_NULL+tmpil1->r.type.raw_type; - } else if (tmpi->a1.type&MDF_STK && - tmpil1->r.type&MDF_STK) { - tmpi->a1.type=MDF_REG+tmpi->a1.type.raw_type; - tmpi->a1.disp=0; - tmpil1->r.type=MDF_REG+tmpil1->r.type.raw_type; - tmpil1->r.disp=0; + tmpil1->res.type=MDF_NULL+tmpil1->res.type.raw_type; + } else if (tmpi->arg1.type&MDF_STK && + tmpil1->res.type&MDF_STK) { + tmpi->arg1.type=MDF_REG+tmpi->arg1.type.raw_type; + tmpi->arg1.disp=0; + tmpil1->res.type=MDF_REG+tmpil1->res.type.raw_type; + tmpil1->res.disp=0; if (intermediate_code_table[tmpi->ic_code].arg_cnt==IS_2_ARG) { - tmpi->a1.reg=REG_R8; - tmpil1->r.reg=REG_R8; + tmpi->arg1.reg=REG_R8; + tmpil1->res.reg=REG_R8; } else { - tmpi->a1.reg=REG_RAX; - tmpil1->r.reg=REG_RAX; + tmpi->arg1.reg=REG_RAX; + tmpil1->res.reg=REG_RAX; } } } @@ -667,7 +669,7 @@ p4_sib: case IC_CALL_END2: break; default: - "Pass:%d Missing IC handler\n",cc->pass; + "Pass:%d Missing IC hndlr\n",cc->pass; ICPut(cc,tmpi); LexExcept(cc,"Compiler Optimization Error at "); } diff --git a/Compiler/OptPass5.HC b/Compiler/OptPass5.HC index c1f7795..39e689b 100644 --- a/Compiler/OptPass5.HC +++ b/Compiler/OptPass5.HC @@ -26,58 +26,58 @@ U0 OptPass5(CCmpCtrl *cc) if (Bt(&tmpi->ic_data,i)) ps->ptr--; } - if (tmpi->a2.type&MDF_STK) { + if (tmpi->arg2.type&MDF_STK) { tmpi1=PrsPop(ps); if (tmpi1->ic_code==IC_MOV || tmpi1->ic_code==IC_REG) { - if (tmpi1->ic_flags & ICF_R_TO_INT) { - if (tmpi1->a1.type&MDF_IMM) - tmpi1->a1.disp=tmpi1->a1.disp(F64); + if (tmpi1->ic_flags & ICF_RES_TO_INT) { + if (tmpi1->arg1.type&MDF_IMM) + tmpi1->arg1.disp=tmpi1->arg1.disp(F64); else - tmpi->ic_flags|=ICF_A2_TO_INT; - } else if (tmpi1->ic_flags&ICF_R_TO_F64) { - if (tmpi1->a1.type&MDF_IMM) - tmpi1->a1.disp(F64)=tmpi1->a1.disp; + tmpi->ic_flags|=ICF_ARG2_TO_INT; + } else if (tmpi1->ic_flags&ICF_RES_TO_F64) { + if (tmpi1->arg1.type&MDF_IMM) + tmpi1->arg1.disp(F64)=tmpi1->arg1.disp; else - tmpi->ic_flags|=ICF_A2_TO_F64; + tmpi->ic_flags|=ICF_ARG2_TO_F64; } - tmpi->a2.type=tmpi1->a1.type&MDG_MASK+ - MinI64(tmpi->a2.type.raw_type, - MinI64(tmpi1->r.type.raw_type,tmpi1->a1.type.raw_type)); - tmpi->a2.reg=tmpi1->a1.reg; - tmpi->a2.disp=tmpi1->a1.disp; + tmpi->arg2.type=tmpi1->arg1.type&MDG_MASK+ + MinI64(tmpi->arg2.type.raw_type, + MinI64(tmpi1->res.type.raw_type,tmpi1->arg1.type.raw_type)); + tmpi->arg2.reg=tmpi1->arg1.reg; + tmpi->arg2.disp=tmpi1->arg1.disp; tmpi->ic_flags|=tmpi1->ic_flags&ICG_NO_CVT_MASK; OptSetNOP2(tmpi1); } } - if (tmpi->a1.type&MDF_STK) { + if (tmpi->arg1.type&MDF_STK) { tmpi1=PrsPop(ps); if (tmpi1->ic_code==IC_MOV || tmpi1->ic_code==IC_REG) { - if (tmpi1->ic_flags & ICF_R_TO_INT) { - if (tmpi1->a1.type&MDF_IMM) - tmpi1->a1.disp=tmpi1->a1.disp(F64); + if (tmpi1->ic_flags & ICF_RES_TO_INT) { + if (tmpi1->arg1.type&MDF_IMM) + tmpi1->arg1.disp=tmpi1->arg1.disp(F64); else - tmpi->ic_flags|=ICF_A1_TO_INT; - } else if (tmpi1->ic_flags&ICF_R_TO_F64) { - if (tmpi1->a1.type&MDF_IMM) { - if (tmpi1->a1.type&RTF_UNSIGNED) - tmpi1->a1.disp(F64)=tmpi1->a1.disp(U64); + tmpi->ic_flags|=ICF_ARG1_TO_INT; + } else if (tmpi1->ic_flags&ICF_RES_TO_F64) { + if (tmpi1->arg1.type&MDF_IMM) { + if (tmpi1->arg1.type&RTF_UNSIGNED) + tmpi1->arg1.disp(F64)=tmpi1->arg1.disp(U64); else - tmpi1->a1.disp(F64)=tmpi1->a1.disp(I64); + tmpi1->arg1.disp(F64)=tmpi1->arg1.disp(I64); } else - tmpi->ic_flags|=ICF_A1_TO_F64; + tmpi->ic_flags|=ICF_ARG1_TO_F64; } - tmpi->a1.type=tmpi1->a1.type&MDG_MASK+ - MinI64(tmpi->a1.type.raw_type, - MinI64(tmpi1->r.type.raw_type,tmpi1->a1.type.raw_type)); - CmpMinTypePointed(tmpi,tmpi1->a1_type_pointed_to); - tmpi->a1.reg=tmpi1->a1.reg; - tmpi->a1.disp=tmpi1->a1.disp; + tmpi->arg1.type=tmpi1->arg1.type&MDG_MASK+ + MinI64(tmpi->arg1.type.raw_type, + MinI64(tmpi1->res.type.raw_type,tmpi1->arg1.type.raw_type)); + CmpMinTypePointed(tmpi,tmpi1->arg1_type_pointed_to); + tmpi->arg1.reg=tmpi1->arg1.reg; + tmpi->arg1.disp=tmpi1->arg1.disp; tmpi->ic_flags|=tmpi1->ic_flags&ICG_NO_CVT_MASK; OptSetNOP2(tmpi1); } } - if (tmpi->r.type&MDF_STK && + if (tmpi->res.type&MDF_STK && !(tmpi->ic_flags&ICF_RES_NOT_USED)) PrsPush(ps,tmpi); } diff --git a/Compiler/OptPass6.HC b/Compiler/OptPass6.HC index 4f78a88..dee23e5 100644 --- a/Compiler/OptPass6.HC +++ b/Compiler/OptPass6.HC @@ -4,21 +4,21 @@ Bool OptIC6(CIntermediateCode *tmpi) if (tmpi->ic_codeic_code==IC_ADD_CONST && tmpi->ic_code==IC_DEREF && - tmpi->ic_flags&ICF_A1_WAS_STK && tmpi->a1.type&MDF_REG && - tmpil1->r.type&MDF_REG && MIN_I32<=tmpil1->ic_data<=MAX_I32 && - !Bt(&cmp.non_ptr_vars_mask,tmpil1->a1.reg)) { - if (tmpil1->a1.type&MDF_REG) { - tmpi->ic_flags=tmpi->ic_flags&~ICF_A1_WAS_STK | tmpil1->ic_flags; + tmpi->ic_flags&ICF_ARG1_WAS_STK && tmpi->arg1.type&MDF_REG && + tmpil1->res.type&MDF_REG && MIN_I32<=tmpil1->ic_data<=MAX_I32 && + !Bt(&cmp.non_ptr_vars_mask,tmpil1->arg1.reg)) { + if (tmpil1->arg1.type&MDF_REG) { + tmpi->ic_flags=tmpi->ic_flags&~ICF_ARG1_WAS_STK | tmpil1->ic_flags; tmpi->ic_code=IC_MOV; - tmpi->a1.type=MDF_DISP+tmpi->a1_type_pointed_to; - tmpi->a1.reg=tmpil1->a1.reg; - tmpi->a1.disp=tmpil1->ic_data; + tmpi->arg1.type=MDF_DISP+tmpi->arg1_type_pointed_to; + tmpi->arg1.reg=tmpil1->arg1.reg; + tmpi->arg1.disp=tmpil1->ic_data; OptSetNOP2(tmpil1,-1); } else { tmpil1->ic_code=IC_MOV; tmpi->ic_code=IC_MOV; - tmpi->a1.type=MDF_DISP+tmpi->a1_type_pointed_to; - tmpi->a1.disp=tmpil1->ic_data; + tmpi->arg1.type=MDF_DISP+tmpi->arg1_type_pointed_to; + tmpi->arg1.disp=tmpil1->ic_data; } return TRUE; } @@ -61,33 +61,33 @@ U0 OptPass6Lag(CCmpCtrl *cc,CPrsStk *ps,CIntermediateCode *tmpi, } if (intermediate_code_table[code].arg_cnt==IS_V_ARG) stk_ptr-=tmpi->ic_data>>3; - if (tmpi->a2.type&MDF_STK) { + if (tmpi->arg2.type&MDF_STK) { stk_ptr--; if (stk_ptra2.type=MDF_REG+tmpi->a2.type.raw_type; - tmpi->a2.reg=Bsf(REGG_STK_TMP); - tmpi->a2.disp=0; + tmpi->arg2.type=MDF_REG+tmpi->arg2.type.raw_type; + tmpi->arg2.reg=Bsf(REGG_STK_TMP); + tmpi->arg2.disp=0; } } - if (tmpi->a1.type&MDF_STK) { + if (tmpi->arg1.type&MDF_STK) { stk_ptr--; if (stk_ptra1.type=MDF_REG+tmpi->a1.type.raw_type; - tmpi->a1.reg=Bsf(REGG_STK_TMP); - tmpi->a1.disp=0; + tmpi->arg1.type=MDF_REG+tmpi->arg1.type.raw_type; + tmpi->arg1.reg=Bsf(REGG_STK_TMP); + tmpi->arg1.disp=0; } } - if (tmpi->r.type&MDF_STK && !(tmpi->ic_flags & ICF_PUSH_RES)) { + if (tmpi->res.type&MDF_STK && !(tmpi->ic_flags & ICF_PUSH_RES)) { stk_ptr++; if (stk_ptr<=reg_stk_size) { - tmpi->r.type=MDF_REG+tmpi->r.type.raw_type; - tmpi->r.reg=Bsf(REGG_STK_TMP); + tmpi->res.type=MDF_REG+tmpi->res.type.raw_type; + tmpi->res.reg=Bsf(REGG_STK_TMP); clobbered_reg_mask|=REGG_STK_TMP; - tmpi->r.disp=0; + tmpi->res.disp=0; } } while (OptIC6(tmpi)); - if (tmpi->r.type.raw_type!=RT_F64 && !(tmpi->ic_flags&ICF_USE_F64)) + if (tmpi->res.type.raw_type!=RT_F64 && !(tmpi->ic_flags&ICF_USE_F64)) tmpi->ic_flags|=ICF_USE_INT; *_stk_ptr=stk_ptr; *_clobbered_reg_mask=clobbered_reg_mask; @@ -113,49 +113,50 @@ U0 OptPass6(CCmpCtrl *cc) if (tmpil1->ic_code>IC_NOP2) tmpil2=tmpil1; tmpil1=tmpi; - if (tmpi->a2.type&MDF_STK) { - if (tmpil2->r.type&MDF_STK && + if (tmpi->arg2.type&MDF_STK) { + if (tmpil2->res.type&MDF_STK && !(tmpil2->ic_flags&ICF_PUSH_RES)) { if (tmpi->ic_code==IC_ASSIGN && tmpi->ic_flags&ICF_BY_VAL && tmpi->ic_flags&ICF_RES_NOT_USED && tmpil2->ic_code!=IC_CALL_END && tmpil2->ic_code!=IC_CALL_END2 && tmpil2->ic_code!=IC_SET_RAX && - !(tmpi->ic_flags&(ICF_A2_TO_F64|ICF_A2_TO_INT)) && - !(tmpil2->ic_flags&(ICF_R_TO_F64|ICF_R_TO_INT))) { - tmpil2->r.type =tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to; - tmpil2->r.reg =tmpi->a1.reg; - tmpil2->r.disp =tmpi->a1.disp; + !(tmpi->ic_flags&(ICF_ARG2_TO_F64|ICF_ARG2_TO_INT)) && + !(tmpil2->ic_flags&(ICF_RES_TO_F64|ICF_RES_TO_INT))) { + tmpil2->res.type =tmpi->arg1.type&MDG_MASK+ + tmpi->arg1_type_pointed_to; + tmpil2->res.reg =tmpi->arg1.reg; + tmpil2->res.disp =tmpi->arg1.disp; tmpil2->ic_flags=tmpil2->ic_flags - &~(ICF_RES_NOT_USED|ICF_R_WAS_STK) - |tmpi->ic_flags&~(ICF_BY_VAL|ICF_A1_WAS_STK|ICF_A2_WAS_STK); + &~(ICF_RES_NOT_USED|ICF_RES_WAS_STK) + |tmpi->ic_flags&~(ICF_BY_VAL|ICF_ARG1_WAS_STK|ICF_ARG2_WAS_STK); old_tmpil2=NULL; OptSetNOP1(tmpi); } else { - tmpi->a2.type=MDF_REG+tmpi->a2.type.raw_type; - tmpi->a2.reg=REG_RAX; - tmpi->a2.disp=0; - tmpil2->r.type=MDF_REG+tmpil2->r.type.raw_type; - tmpil2->r.reg=REG_RAX; - tmpil2->r.disp=0; + tmpi->arg2.type=MDF_REG+tmpi->arg2.type.raw_type; + tmpi->arg2.reg=REG_RAX; + tmpi->arg2.disp=0; + tmpil2->res.type=MDF_REG+tmpil2->res.type.raw_type; + tmpil2->res.reg=REG_RAX; + tmpil2->res.disp=0; } } - } else if (tmpi->a1.type&MDF_STK && tmpil2->r.type&MDF_STK && + } else if (tmpi->arg1.type&MDF_STK && tmpil2->res.type&MDF_STK && !(tmpil2->ic_flags&ICF_PUSH_RES)) { - tmpi->a1.type=MDF_REG+tmpi->a1.type.raw_type; - tmpi->a1.disp=0; - tmpil2->r.type=MDF_REG+tmpil2->r.type.raw_type; - tmpil2->r.disp=0; + tmpi->arg1.type=MDF_REG+tmpi->arg1.type.raw_type; + tmpi->arg1.disp=0; + tmpil2->res.type=MDF_REG+tmpil2->res.type.raw_type; + tmpil2->res.disp=0; if (intermediate_code_table[tmpi->ic_code].arg_cnt==IS_2_ARG) { - tmpi->a1.reg=REG_R8; - tmpil2->r.reg=REG_R8; + tmpi->arg1.reg=REG_R8; + tmpil2->res.reg=REG_R8; } else { - tmpi->a1.reg=REG_RAX; - tmpil2->r.reg=REG_RAX; + tmpi->arg1.reg=REG_RAX; + tmpil2->res.reg=REG_RAX; } } if (tmpi->ic_flags & ICF_PUSH_RES) - tmpi->r.type==MDF_STK+tmpi->r.type.raw_type; + tmpi->res.type==MDF_STK+tmpi->res.type.raw_type; if (old_tmpil2!=tmpil2) { if (tmpil2->ic_code>IC_NOP2) OptPass6Lag(cc,ps,tmpil2,&stk_ptr,reg_stk_size,&clobbered_reg_mask); diff --git a/Compiler/OptPass789A.HC b/Compiler/OptPass789A.HC index e341c5a..3dc0368 100644 --- a/Compiler/OptPass789A.HC +++ b/Compiler/OptPass789A.HC @@ -7,8 +7,8 @@ size is now known cc->pass==10 is final pass, code is placed into buf. */ CIntermediateCode *tmpi,*tmpi_next; - I64 i,cnt,num_lines=cc->max_line+1-cc->min_line,ip=0,ip2; - U8 *ptr,saved_a1_a2_r[3*sizeof(CICArg)]; + I64 i,cnt,num_lines=cc->max_line+1-cc->min_line,rip=0,rip2; + U8 *ptr,saved_arg1_arg2_r[3*sizeof(CICArg)]; CCodeMisc *lb; CAOT *tmpaot; CAOTAbsAddr *tmpa; @@ -28,7 +28,7 @@ cc->pass==10 is final pass, code is placed into buf. dbg_info->min_line=cc->min_line; dbg_info->max_line=cc->max_line; if (cc->flags&CCF_AOT_COMPILE) - dbg_info->body[0]=aotc->ip; + dbg_info->body[0]=aotc->rip; else dbg_info->body[0]=buf; } else @@ -48,48 +48,48 @@ cc->pass==10 is final pass, code is placed into buf. tmpi_next=tmpi->next; if (tmpi->ic_flags&ICF_PASS_TRACE && Bt(&cc->saved_pass_trace,cc->pass)) ICPut(cc,tmpi); - ip2=ip; + rip2=rip; if (cc->flags&CCF_AOT_COMPILE) - ip2+=aotc->ip; + rip2+=aotc->rip; else - ip2+=buf; + rip2+=buf; cc->cur_ic_float_op_num=0; if (!(tmpi->ic_flags &ICF_CODE_FINAL)) { tmpi->ic_flags=tmpi->ic_flags& ~(ICF_PREV_DELETED|ICF_DONT_RESTORE)|ICF_CODE_FINAL; if (cc->pass==7) cc->dont_push_float=Btr(&tmpi->ic_flags,ICf_DONT_PUSH_FLOAT0); - MemCpy(saved_a1_a2_r,&tmpi->a1,3*sizeof(CICArg)); + MemCpy(saved_arg1_arg2_r,&tmpi->arg1,3*sizeof(CICArg)); tmpi->ic_cnt=0; tmpi->ic_last_start=-1; - if (tmpi->a2.type.mode) { - if (tmpi->ic_flags & ICF_A2_TO_F64) { + if (tmpi->arg2.type.mode) { + if (tmpi->ic_flags & ICF_ARG2_TO_F64) { + ICFCvt(cc,tmpi,REG_RAX,tmpi->arg2.type, + tmpi->arg2.reg,tmpi->arg2.disp,FALSE,CN_A2,rip2); + tmpi->arg2.type=MDF_REG+RT_I64; + tmpi->arg2.reg=REG_RAX; + tmpi->arg2.disp=0; + } else if (tmpi->ic_flags & ICF_ARG2_TO_INT) { ICFCvt(cc,tmpi,REG_RAX, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,FALSE,CN_A2,ip2); - tmpi->a2.type=MDF_REG+RT_I64; - tmpi->a2.reg=REG_RAX; - tmpi->a2.disp=0; - } else if (tmpi->ic_flags & ICF_A2_TO_INT) { - ICFCvt(cc,tmpi,REG_RAX, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,TRUE,CN_A2,ip2); - tmpi->a2.type=MDF_REG+RT_I64; - tmpi->a2.reg=REG_RAX; - tmpi->a2.disp=0; + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,TRUE,CN_A2,rip2); + tmpi->arg2.type=MDF_REG+RT_I64; + tmpi->arg2.reg=REG_RAX; + tmpi->arg2.disp=0; } } - if (tmpi->a1.type.mode) { - if (tmpi->ic_flags & ICF_A1_TO_F64) { + if (tmpi->arg1.type.mode) { + if (tmpi->ic_flags & ICF_ARG1_TO_F64) { + ICFCvt(cc,tmpi,REG_RDX,tmpi->arg1.type, + tmpi->arg1.reg,tmpi->arg1.disp,FALSE,CN_A1,rip2); + tmpi->arg1.type=MDF_REG+RT_I64; + tmpi->arg1.reg=REG_RDX; + tmpi->arg1.disp=0; + } else if (tmpi->ic_flags & ICF_ARG1_TO_INT) { ICFCvt(cc,tmpi,REG_RDX, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,FALSE,CN_A1,ip2); - tmpi->a1.type=MDF_REG+RT_I64; - tmpi->a1.reg=REG_RDX; - tmpi->a1.disp=0; - } else if (tmpi->ic_flags & ICF_A1_TO_INT) { - ICFCvt(cc,tmpi,REG_RDX, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,TRUE,CN_A1,ip2); - tmpi->a1.type=MDF_REG+RT_I64; - tmpi->a1.reg=REG_RDX; - tmpi->a1.disp=0; + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,TRUE,CN_A1,rip2); + tmpi->arg1.type=MDF_REG+RT_I64; + tmpi->arg1.reg=REG_RDX; + tmpi->arg1.disp=0; } } @@ -105,7 +105,7 @@ cc->pass==10 is final pass, code is placed into buf. tmpa->next=aotc->abss; tmpa->type=AAT_ADD_U64; aotc->abss=tmpa; - tmpa->ip=ip2+tmpi->ic_cnt-8; + tmpa->rip=rip2+tmpi->ic_cnt-8; } break; case IC_HEAP_GLBL: @@ -118,7 +118,7 @@ cc->pass==10 is final pass, code is placed into buf. tmphgr=CAlloc(sizeof(CAOTHeapGlblRef)); tmphgr->next=tmphg->references; tmphg->references=tmphgr; - tmphgr->ip=ip2+tmpi->ic_cnt-8; + tmphgr->rip=rip2+tmpi->ic_cnt-8; } break; case IC_ADDR_IMPORT: @@ -128,7 +128,7 @@ cc->pass==10 is final pass, code is placed into buf. tmpg=tmpi->ic_data; tmpie=CAlloc(sizeof(CAOTImportExport)); tmpie->type=IET_IMM_U32; - tmpie->ip=ip2+tmpi->ic_cnt-4; + tmpie->rip=rip2+tmpi->ic_cnt-4; tmpie->next=tmpg->ie_lst; tmpg->ie_lst=tmpie; } @@ -136,182 +136,182 @@ cc->pass==10 is final pass, code is placed into buf. break; case IC_RIP: ICU16(tmpi,0xB848); - ICU64(tmpi,ip2+tmpi->ic_cnt-2); + ICU64(tmpi,rip2+tmpi->ic_cnt-2); if (cc->flags&CCF_AOT_COMPILE && buf &&!(cc->flags&CCF_NO_ABSS)) { tmpa=CAlloc(sizeof(CAOTAbsAddr)); tmpa->next=aotc->abss; tmpa->type=AAT_ADD_U64; aotc->abss=tmpa; - tmpa->ip=ip2+tmpi->ic_cnt-8; + tmpa->rip=rip2+tmpi->ic_cnt-8; } break; end: - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip2); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip2); break; case IC_BR_CARRY: - ICFlagBranch(tmpi,ip,0x72820F,buf); + ICFlagBranch(tmpi,rip,0x72820F,buf); break; case IC_BR_NOT_CARRY: - ICFlagBranch(tmpi,ip,0x73830F,buf); + ICFlagBranch(tmpi,rip,0x73830F,buf); break; case IC_BR_ZERO: - ICTestAndBranch(tmpi,ip,0x74840F,buf,ip2); + ICTestAndBranch(tmpi,rip,0x74840F,buf,rip2); break; case IC_BR_NOT_ZERO: - ICTestAndBranch(tmpi,ip,0x75850F,buf,ip2); + ICTestAndBranch(tmpi,rip,0x75850F,buf,rip2); break; case IC_BR_MM_ZERO: - ICPreIncDec(tmpi,SLASH_OP_DEC,ip2); - ICFlagBranch(tmpi,ip,0x74840F,buf); + ICPreIncDec(tmpi,SLASH_OP_DEC,rip2); + ICFlagBranch(tmpi,rip,0x74840F,buf); break; case IC_BR_MM_NOT_ZERO: - ICPreIncDec(tmpi,SLASH_OP_DEC,ip2); - ICFlagBranch(tmpi,ip,0x75850F,buf); + ICPreIncDec(tmpi,SLASH_OP_DEC,rip2); + ICFlagBranch(tmpi,rip,0x75850F,buf); break; case IC_BR_EQU_EQU: - ICCmpAndBranch(tmpi,FALSE,ip,0x74840F,0x74840F, - 0x74840F,0x74840F,buf,ip2); + ICCmpAndBranch(tmpi,FALSE,rip,0x74840F,0x74840F, + 0x74840F,0x74840F,buf,rip2); break; case IC_BR_EQU_EQU2: - ICCmpAndBranch(tmpi,TRUE,ip,0x74840F,0x74840F, - 0x74840F,0x74840F,buf,ip2); + ICCmpAndBranch(tmpi,TRUE,rip,0x74840F,0x74840F, + 0x74840F,0x74840F,buf,rip2); break; case IC_BR_NOT_EQU: - ICCmpAndBranch(tmpi,FALSE,ip,0x75850F,0x75850F, - 0x75850F,0x75850F,buf,ip2); + ICCmpAndBranch(tmpi,FALSE,rip,0x75850F,0x75850F, + 0x75850F,0x75850F,buf,rip2); break; case IC_BR_NOT_EQU2: - ICCmpAndBranch(tmpi,TRUE,ip,0x75850F,0x75850F, - 0x75850F,0x75850F,buf,ip2); + ICCmpAndBranch(tmpi,TRUE,rip,0x75850F,0x75850F, + 0x75850F,0x75850F,buf,rip2); break; case IC_BR_LESS: if (tmpi->ic_flags&ICF_USE_F64) - ICFCmpAndBranch(cc,tmpi, ip,0x72820F,0x77870F,buf,ip2); + ICFCmpAndBranch(cc,tmpi, rip,0x72820F,0x77870F,buf,rip2); else - ICCmpAndBranch(tmpi,FALSE,ip,0x72820F,0x7C8C0F, - 0x77870F,0x7F8F0F,buf,ip2); + ICCmpAndBranch(tmpi,FALSE,rip,0x72820F,0x7C8C0F, + 0x77870F,0x7F8F0F,buf,rip2); break; case IC_BR_LESS2: - ICCmpAndBranch(tmpi,TRUE,ip,0x72820F,0x7C8C0F, - 0x77870F,0x7F8F0F,buf,ip2); + ICCmpAndBranch(tmpi,TRUE,rip,0x72820F,0x7C8C0F, + 0x77870F,0x7F8F0F,buf,rip2); break; case IC_BR_GREATER_EQU: if (tmpi->ic_flags&ICF_USE_F64) - ICFCmpAndBranch(cc,tmpi, ip,0x73830F,0x76860F,buf,ip2); + ICFCmpAndBranch(cc,tmpi, rip,0x73830F,0x76860F,buf,rip2); else - ICCmpAndBranch(tmpi,FALSE,ip,0x73830F,0x7D8D0F, - 0x76860F,0x7E8E0F,buf,ip2); + ICCmpAndBranch(tmpi,FALSE,rip,0x73830F,0x7D8D0F, + 0x76860F,0x7E8E0F,buf,rip2); break; case IC_BR_GREATER_EQU2: - ICCmpAndBranch(tmpi,TRUE,ip,0x73830F,0x7D8D0F, - 0x76860F,0x7E8E0F,buf,ip2); + ICCmpAndBranch(tmpi,TRUE,rip,0x73830F,0x7D8D0F, + 0x76860F,0x7E8E0F,buf,rip2); break; case IC_BR_GREATER: if (tmpi->ic_flags&ICF_USE_F64) - ICFCmpAndBranch(cc,tmpi, ip,0x77870F,0x72820F,buf,ip2); + ICFCmpAndBranch(cc,tmpi, rip,0x77870F,0x72820F,buf,rip2); else - ICCmpAndBranch(tmpi,FALSE,ip,0x77870F,0x7F8F0F, - 0x72820F,0x7C8C0F,buf,ip2); + ICCmpAndBranch(tmpi,FALSE,rip,0x77870F,0x7F8F0F, + 0x72820F,0x7C8C0F,buf,rip2); break; case IC_BR_GREATER2: - ICCmpAndBranch(tmpi,TRUE,ip,0x77870F,0x7F8F0F, - 0x72820F,0x7C8C0F,buf,ip2); + ICCmpAndBranch(tmpi,TRUE,rip,0x77870F,0x7F8F0F, + 0x72820F,0x7C8C0F,buf,rip2); break; case IC_BR_LESS_EQU: if (tmpi->ic_flags&ICF_USE_F64) - ICFCmpAndBranch(cc,tmpi, ip,0x76860F,0x73830F,buf,ip2); + ICFCmpAndBranch(cc,tmpi, rip,0x76860F,0x73830F,buf,rip2); else - ICCmpAndBranch(tmpi,FALSE,ip,0x76860F,0x7E8E0F, - 0x73830F,0x7D8D0F,buf,ip2); + ICCmpAndBranch(tmpi,FALSE,rip,0x76860F,0x7E8E0F, + 0x73830F,0x7D8D0F,buf,rip2); break; case IC_BR_LESS_EQU2: - ICCmpAndBranch(tmpi,TRUE,ip,0x76860F,0x7E8E0F, - 0x73830F,0x7D8D0F,buf,ip2); + ICCmpAndBranch(tmpi,TRUE,rip,0x76860F,0x7E8E0F, + 0x73830F,0x7D8D0F,buf,rip2); break; case IC_BR_BT: - ICBrBitOps(tmpi,ip,0xA30F,0x20BA0F,0x72820F,buf,ip2); + ICBrBitOps(tmpi,rip,0xA30F,0x20BA0F,0x72820F,buf,rip2); break; case IC_BR_BTS: - ICBrBitOps(tmpi,ip,0xAB0F,0x28BA0F,0x72820F,buf,ip2); + ICBrBitOps(tmpi,rip,0xAB0F,0x28BA0F,0x72820F,buf,rip2); break; case IC_BR_BTR: - ICBrBitOps(tmpi,ip,0xB30F,0x30BA0F,0x72820F,buf,ip2); + ICBrBitOps(tmpi,rip,0xB30F,0x30BA0F,0x72820F,buf,rip2); break; case IC_BR_BTC: - ICBrBitOps(tmpi,ip,0xBB0F,0x38BA0F,0x72820F,buf,ip2); + ICBrBitOps(tmpi,rip,0xBB0F,0x38BA0F,0x72820F,buf,rip2); break; case IC_BR_NOT_BT: - ICBrBitOps(tmpi,ip,0xA30F,0x20BA0F,0x73830F,buf,ip2); + ICBrBitOps(tmpi,rip,0xA30F,0x20BA0F,0x73830F,buf,rip2); break; case IC_BR_NOT_BTS: - ICBrBitOps(tmpi,ip,0xAB0F,0x28BA0F,0x73830F,buf,ip2); + ICBrBitOps(tmpi,rip,0xAB0F,0x28BA0F,0x73830F,buf,rip2); break; case IC_BR_NOT_BTR: - ICBrBitOps(tmpi,ip,0xB30F,0x30BA0F,0x73830F,buf,ip2); + ICBrBitOps(tmpi,rip,0xB30F,0x30BA0F,0x73830F,buf,rip2); break; case IC_BR_NOT_BTC: - ICBrBitOps(tmpi,ip,0xBB0F,0x38BA0F,0x73830F,buf,ip2); + ICBrBitOps(tmpi,rip,0xBB0F,0x38BA0F,0x73830F,buf,rip2); break; case IC_BR_AND_ZERO: - ICAndBranch(tmpi,ip,0x74840F,buf,ip2); + ICAndBranch(tmpi,rip,0x74840F,buf,rip2); break; case IC_BR_AND_NOT_ZERO: - ICAndBranch(tmpi,ip,0x75850F,buf,ip2); + ICAndBranch(tmpi,rip,0x75850F,buf,rip2); break; case IC_SUB_CALL: lb=OptLabelFwd(tmpi->ic_data); ICU8(tmpi,0xE8); - ICU32(tmpi,lb->addr-(ip+5)); + ICU32(tmpi,lb->addr-(rip+5)); break; case IC_JMP: lb=OptLabelFwd(tmpi->ic_data); short_jmp=ToBool(tmpi->ic_flags&ICF_SHORT_JMP); if (!buf && lb->addr!=INVALID_PTR && - MIN_I8+5addr-ipaddr-ripic_flags|=ICF_SHORT_JMP; - i=lb->addr-(ip+2); + i=lb->addr-(rip+2); if (buf || i) ICU16(tmpi,i<<8+0xEB); else tmpi->ic_code=IC_NOP1; } else { - i=lb->addr-(ip+5); + i=lb->addr-(rip+5); ICU8(tmpi,0xE9); ICU32(tmpi,i); } break; case IC_LABEL: lb=tmpi->ic_data; - lb->addr=ip; + lb->addr=rip; if (lb->flags&CMF_POP_CMP) { ICAddRSP(tmpi,-8,FALSE); ICAddRSP(tmpi,8,FALSE); } if (lb->type==CMT_ASM_LABEL) - lb->addr+=lb->ip; + lb->addr+=lb->rip; break; case IC_STR_CONST: case IC_GET_LABEL: lb=tmpi->ic_data; if (cc->flags&CCF_AOT_COMPILE) - i=lb->addr+aotc->ip; + i=lb->addr+aotc->rip; else i=lb->addr+buf; - ICLea(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_RIP_DISP32+RT_PTR,0,i,cc,buf,ip2); + ICLea(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_RIP_DISP32+RT_PTR,0,i,cc,buf,rip2); break; case IC_ASM: tmpaot=tmpi->ic_data; tmpi->ic_cnt+=tmpaot->aot_U8s; if (buf) { - MemCpy(buf+ip,tmpaot->buf,tmpaot->aot_U8s); + MemCpy(buf+rip,tmpaot->buf,tmpaot->aot_U8s); Free(tmpaot->buf); tmpaot->buf=buf; - tmpaot->ip=ip; - tmpaot->ip2=ip2; + tmpaot->rip=rip; + tmpaot->rip2=rip2; if (cc->flags&CCF_AOT_COMPILE) CmpFixUpAOTAsm(cc,tmpaot); else @@ -321,7 +321,7 @@ cc->pass==10 is final pass, code is placed into buf. } break; case IC_CALL: - i=tmpi->ic_data-(ip2+5); + i=tmpi->ic_data-(rip2+5); if (!(MIN_I32<=i<=MAX_I32) && !(cc->flags&CCF_AOT_COMPILE)) { ICU16(tmpi,0xBB48); ICU64(tmpi,tmpi->ic_data); @@ -339,12 +339,12 @@ cc->pass==10 is final pass, code is placed into buf. tmpeu=CAlloc(sizeof(CExternUsage)); tmpeu->next=tmpf->ext_lst; tmpf->ext_lst=tmpeu; - tmpeu->ip=ip2+1; + tmpeu->rip=rip2+1; } break; case IC_CALL_INDIRECT2: ICU16(tmpi,0xBB48); - if (cc->flags&CCF_AOT_COMPILE) i=ip2+tmpi->ic_cnt; + if (cc->flags&CCF_AOT_COMPILE) i=rip2+tmpi->ic_cnt; ICU64(tmpi,tmpi->ic_data); ICU16(tmpi,0x13FF); if (buf && cc->flags&CCF_AOT_COMPILE&& !(cc->flags&CCF_NO_ABSS)) { @@ -352,7 +352,7 @@ cc->pass==10 is final pass, code is placed into buf. tmpa->next=aotc->abss; tmpa->type=AAT_ADD_U64; aotc->abss=tmpa; - tmpa->ip=i; + tmpa->rip=i; } break; case IC_CALL_IMPORT: @@ -363,7 +363,7 @@ cc->pass==10 is final pass, code is placed into buf. tmpf=tmpi->ic_data; tmpie=CAlloc(sizeof(CAOTImportExport)); tmpie->type=IET_IMM_I64; - tmpie->ip=ip2+tmpi->ic_cnt-8; + tmpie->rip=rip2+tmpi->ic_cnt-8; tmpie->next=tmpf->ie_lst; tmpf->ie_lst=tmpie; } @@ -375,7 +375,7 @@ cc->pass==10 is final pass, code is placed into buf. tmpf=tmpi->ic_data; tmpie=CAlloc(sizeof(CAOTImportExport)); tmpie->type=IET_REL_I32; - tmpie->ip=ip2+tmpi->ic_cnt-4; + tmpie->rip=rip2+tmpi->ic_cnt-4; tmpie->next=tmpf->ie_lst; tmpf->ie_lst=tmpie; } @@ -430,270 +430,270 @@ cc->pass==10 is final pass, code is placed into buf. ICZero(tmpi,REG_RAX); ICU8(tmpi,0x64); //It's ugly to use ic_class here - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, MDF_DISP+CmpRawType(tmpi->ic_class),REG_RAX,tmpi->ic_data, - ip2); + rip2); break; case IC_MOV_GS: ICZero(tmpi,REG_RAX); ICU8(tmpi,0x65); //It's ugly to use ic_class here - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, MDF_DISP+CmpRawType(tmpi->ic_class),REG_RAX,tmpi->ic_data, - ip2); + rip2); break; case IC_HOLYC_TYPECAST: - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); break; case IC_COM: - ICUnaries(tmpi,SLASH_OP_NOT,ip2); + ICUnaries(tmpi,SLASH_OP_NOT,rip2); break; case IC_NOT: - ICNot(tmpi,ip2); + ICNot(tmpi,rip2); break; case IC_UNARY_MINUS: - if (tmpi->r.type.raw_type==RT_F64) - ICFUnaryMinus(cc,tmpi,buf,ip2); + if (tmpi->res.type.raw_type==RT_F64) + ICFUnaryMinus(cc,tmpi,buf,rip2); else - ICUnaries(tmpi,SLASH_OP_NEG,ip2); + ICUnaries(tmpi,SLASH_OP_NEG,rip2); break; case IC_ADDR: case IC_MOV: - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); break; case IC_DEREF: - ICDeref(tmpi,ip2); + ICDeref(tmpi,rip2); break; case IC_DEREF_PP: - ICDerefPostIncDec(tmpi,SLASH_OP_INC,ip2); + ICDerefPostIncDec(tmpi,SLASH_OP_INC,rip2); break; case IC_DEREF_MM: - ICDerefPostIncDec(tmpi,SLASH_OP_DEC,ip2); + ICDerefPostIncDec(tmpi,SLASH_OP_DEC,rip2); break; case IC__PP: if (tmpi->ic_flags&ICF_USE_INT) - ICPostIncDec(tmpi,SLASH_OP_INC,ip2); + ICPostIncDec(tmpi,SLASH_OP_INC,rip2); else - ICFPostIncDec(cc,tmpi,CMP_TEMPLATE_INC,ip2); + ICFPostIncDec(cc,tmpi,CMP_TEMPLATE_INC,rip2); break; case IC__MM: if (tmpi->ic_flags&ICF_USE_INT) - ICPostIncDec(tmpi,SLASH_OP_DEC,ip2); + ICPostIncDec(tmpi,SLASH_OP_DEC,rip2); else - ICFPostIncDec(cc,tmpi,CMP_TEMPLATE_DEC,ip2); + ICFPostIncDec(cc,tmpi,CMP_TEMPLATE_DEC,rip2); break; case IC_PP_: if (tmpi->ic_flags&ICF_USE_INT) - ICPreIncDec(tmpi,SLASH_OP_INC,ip2); + ICPreIncDec(tmpi,SLASH_OP_INC,rip2); else - ICFPreIncDec(cc,tmpi,CMP_TEMPLATE_INC,ip2); + ICFPreIncDec(cc,tmpi,CMP_TEMPLATE_INC,rip2); break; case IC_MM_: if (tmpi->ic_flags&ICF_USE_INT) - ICPreIncDec(tmpi,SLASH_OP_DEC,ip2); + ICPreIncDec(tmpi,SLASH_OP_DEC,rip2); else - ICFPreIncDec(cc,tmpi,CMP_TEMPLATE_DEC,ip2); + ICFPreIncDec(cc,tmpi,CMP_TEMPLATE_DEC,rip2); break; case IC_LEA: - ICLea(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,cc,buf,ip2); + ICLea(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,cc,buf,rip2); break; case IC_POWER: - ICFPow(cc,tmpi,buf,ip2); + ICFPow(cc,tmpi,buf,rip2); break; case IC_SHL: - ICShift(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp, - 0xE0D1E0D3E0C1,0xE0D1E0D3E0C1,ip2); + ICShift(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp, + 0xE0D1E0D3E0C1,0xE0D1E0D3E0C1,rip2); break; case IC_SHR: - ICShift(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp, - 0xE8D1E8D3E8C1,0xF8D1F8D3F8C1,ip2); + ICShift(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp, + 0xE8D1E8D3E8C1,0xF8D1F8D3F8C1,rip2); break; case IC_MUL: if (tmpi->ic_flags&ICF_USE_INT) - ICMul(tmpi,ip2); + ICMul(tmpi,rip2); else - ICFMul(cc,tmpi,buf,ip2); + ICFMul(cc,tmpi,buf,rip2); break; case IC_DIV: if (tmpi->ic_flags&ICF_USE_INT) - ICDiv(tmpi,ip2); + ICDiv(tmpi,rip2); else - ICFDiv(cc,tmpi,buf,ip2); + ICFDiv(cc,tmpi,buf,rip2); break; case IC_MOD: if (tmpi->ic_flags&ICF_USE_INT) - ICMod(tmpi,ip2); + ICMod(tmpi,rip2); else - ICFMod(cc,tmpi,ip2); + ICFMod(cc,tmpi,rip2); break; case IC_AND: - ICAddEct(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,0x23,ip2); + ICAddEct(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,0x23,rip2); break; case IC_OR: - ICAddEct(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,0x0B,ip2); + ICAddEct(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,0x0B,rip2); break; case IC_XOR: - ICAddEct(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,0x33,ip2); + ICAddEct(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,0x33,rip2); break; case IC_ADD: if (tmpi->ic_flags&ICF_USE_INT) - ICAddEct(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,0x03,ip2); + ICAddEct(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,0x03,rip2); else - ICFAdd(cc,tmpi,buf,ip2); + ICFAdd(cc,tmpi,buf,rip2); break; case IC_SUB: if (tmpi->ic_flags&ICF_USE_INT) - ICSub(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip2); + ICSub(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip2); else - ICFSub(cc,tmpi,buf,ip2); + ICFSub(cc,tmpi,buf,rip2); break; case IC_EQU_EQU: - ICCmp(tmpi,0x75,0x75,ip2); + ICCmp(tmpi,0x75,0x75,rip2); break; case IC_NOT_EQU: - ICCmp(tmpi,0x74,0x74,ip2); + ICCmp(tmpi,0x74,0x74,rip2); break; case IC_LESS: if (tmpi->ic_flags&ICF_USE_INT) - ICCmp(tmpi,0x73,0x7D,ip2); + ICCmp(tmpi,0x73,0x7D,rip2); else - ICFCmp(cc,tmpi,CMP_TEMPLATE_LESS,ip2); + ICFCmp(cc,tmpi,CMP_TEMPLATE_LESS,rip2); break; case IC_GREATER_EQU: if (tmpi->ic_flags&ICF_USE_INT) - ICCmp(tmpi,0x72,0x7C,ip2); + ICCmp(tmpi,0x72,0x7C,rip2); else - ICFCmp(cc,tmpi,CMP_TEMPLATE_GREATER_EQU,ip2); + ICFCmp(cc,tmpi,CMP_TEMPLATE_GREATER_EQU,rip2); break; case IC_GREATER: if (tmpi->ic_flags&ICF_USE_INT) - ICCmp(tmpi,0x76,0x7E,ip2); + ICCmp(tmpi,0x76,0x7E,rip2); else - ICFCmp(cc,tmpi,CMP_TEMPLATE_GREATER,ip2); + ICFCmp(cc,tmpi,CMP_TEMPLATE_GREATER,rip2); break; case IC_LESS_EQU: if (tmpi->ic_flags&ICF_USE_INT) - ICCmp(tmpi,0x77,0x7F,ip2); + ICCmp(tmpi,0x77,0x7F,rip2); else - ICFCmp(cc,tmpi,CMP_TEMPLATE_LESS_EQU,ip2); + ICFCmp(cc,tmpi,CMP_TEMPLATE_LESS_EQU,rip2); break; case IC_AND_AND: - ICAndAnd(tmpi,ip2); + ICAndAnd(tmpi,rip2); break; case IC_OR_OR: - ICOrOr(tmpi,ip2); + ICOrOr(tmpi,rip2); break; case IC_XOR_XOR: - ICXorXor(tmpi,ip2); + ICXorXor(tmpi,rip2); break; case IC_ASSIGN: - ICAssign(tmpi,ip2); + ICAssign(tmpi,rip2); break; case IC_ASSIGN_PP: - ICAssignPostIncDec(tmpi,SLASH_OP_INC,ip2); + ICAssignPostIncDec(tmpi,SLASH_OP_INC,rip2); break; case IC_ASSIGN_MM: - ICAssignPostIncDec(tmpi,SLASH_OP_DEC,ip2); + ICAssignPostIncDec(tmpi,SLASH_OP_DEC,rip2); break; case IC_SHL_EQU: - ICShiftEqu(tmpi,tmpi->a1_type_pointed_to, - tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp, - 0xE0D1E0D3E0C1,0xE0D1E0D3E0C1,ip2); + ICShiftEqu(tmpi,tmpi->arg1_type_pointed_to, + tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp, + 0xE0D1E0D3E0C1,0xE0D1E0D3E0C1,rip2); break; case IC_SHR_EQU: - ICShiftEqu(tmpi,tmpi->a1_type_pointed_to, - tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp, - 0xE8D1E8D3E8C1,0xF8D1F8D3F8C1,ip2); + ICShiftEqu(tmpi,tmpi->arg1_type_pointed_to, + tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp, + 0xE8D1E8D3E8C1,0xF8D1F8D3F8C1,rip2); break; case IC_MUL_EQU: if (tmpi->ic_flags&ICF_USE_INT) - ICMulEqu(tmpi,ip2); + ICMulEqu(tmpi,rip2); else - ICFOpEqu(cc,tmpi,SLASH_OP_FMUL,buf,ip2); + ICFOpEqu(cc,tmpi,SLASH_OP_FMUL,buf,rip2); break; case IC_DIV_EQU: if (tmpi->ic_flags&ICF_USE_INT) - ICDivEqu(tmpi,FALSE,ip2); + ICDivEqu(tmpi,FALSE,rip2); else - ICFOpEqu(cc,tmpi,SLASH_OP_FDIV,buf,ip2); + ICFOpEqu(cc,tmpi,SLASH_OP_FDIV,buf,rip2); break; case IC_MOD_EQU: if (tmpi->ic_flags&ICF_USE_INT) - ICDivEqu(tmpi,TRUE,ip2); + ICDivEqu(tmpi,TRUE,rip2); else - ICFModEqu(cc,tmpi,ip2); + ICFModEqu(cc,tmpi,rip2); break; case IC_AND_EQU: - ICAndEqu(tmpi,ip2); + ICAndEqu(tmpi,rip2); break; case IC_OR_EQU: - ICOrEqu(tmpi,ip2); + ICOrEqu(tmpi,rip2); break; case IC_XOR_EQU: - ICXorEqu(tmpi,ip2); + ICXorEqu(tmpi,rip2); break; case IC_ADD_EQU: if (tmpi->ic_flags&ICF_USE_INT) - ICAddSubEctEqu(tmpi,tmpi->a1_type_pointed_to, - tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp, - 0x010000000003,ip2); + ICAddSubEctEqu(tmpi,tmpi->arg1_type_pointed_to, + tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp, + 0x010000000003,rip2); else - ICFOpEqu(cc,tmpi,SLASH_OP_FADD,buf,ip2); + ICFOpEqu(cc,tmpi,SLASH_OP_FADD,buf,rip2); break; case IC_SUB_EQU: if (tmpi->ic_flags&ICF_USE_INT) - ICAddSubEctEqu(tmpi,tmpi->a1_type_pointed_to, - tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp, - 0x29000000052B,ip2); + ICAddSubEctEqu(tmpi,tmpi->arg1_type_pointed_to, + tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp, + 0x29000000052B,rip2); else - ICFOpEqu(cc,tmpi,SLASH_OP_FSUB,buf,ip2); + ICFOpEqu(cc,tmpi,SLASH_OP_FSUB,buf,rip2); break; case IC_SHL_CONST: - ICShift(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, + ICShift(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, MDF_IMM+RT_I64,0,tmpi->ic_data, - 0xE0D1E0D3E0C1,0xE0D1E0D3E0C1,ip2); + 0xE0D1E0D3E0C1,0xE0D1E0D3E0C1,rip2); break; case IC_SHR_CONST: - ICShift(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, + ICShift(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, MDF_IMM+RT_I64,0,tmpi->ic_data, - 0xE8D1E8D3E8C1,0xF8D1F8D3F8C1,ip2); + 0xE8D1E8D3E8C1,0xF8D1F8D3F8C1,rip2); break; case IC_ADD_CONST: - ICAddSubEctImm(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,tmpi->ic_data, - 0x0003,ip2); + ICAddSubEctImm(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,tmpi->ic_data, + 0x0003,rip2); break; case IC_SUB_CONST: - ICAddSubEctImm(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,tmpi->ic_data, - 0x052B,ip2); + ICAddSubEctImm(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,tmpi->ic_data, + 0x052B,rip2); break; case IC_ENTER: ICU32(tmpi,0xEC8B4855); @@ -713,7 +713,7 @@ cc->pass==10 is final pass, code is placed into buf. if (reg_offsets[i]>0 && reg_offsets[i].offset!=MAX_I64) { tmpc=OptClassFwd(reg_offsets[i].m->member_class); ICMov(tmpi,MDF_REG+RT_I64,i,0,MDF_DISP+tmpc->raw_type, - REG_RBP,reg_offsets[i].offset,ip2); + REG_RBP,reg_offsets[i].offset,rip2); } } break; @@ -730,290 +730,290 @@ cc->pass==10 is final pass, code is placed into buf. } break; case IC_PUSH: - ICPush(tmpi,tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + ICPush(tmpi,tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); break; case IC_POP: ICU8(tmpi,0x58); break; case IC_INVLPG: ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); ICU24(tmpi,0x38010F); break; case IC_CLFLUSH: ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); ICU24(tmpi,0x38AE0F); break; case IC_GET_RFLAGS: ICU8(tmpi,0x9C); - ICPop(tmpi,MDF_REG+RT_I64,REG_RAX,0,ip2); + ICPop(tmpi,MDF_REG+RT_I64,REG_RAX,0,rip2); break; case IC_CARRY: ICU24(tmpi,0xC0920F); //SETC AL ICU24(tmpi,0x01E083); //AND EAX,1 break; case IC_RDTSC: - ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_RDTSC,TRUE,FALSE,FALSE,CN_MAIN); + ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_RDTSC,TRUE,FALSE,FALSE,CN_INST); break; case IC_SET_RFLAGS: - ICPush(tmpi,tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + ICPush(tmpi,tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); ICU8(tmpi,0x9D); break; case IC_GET_RBP: ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - MDF_REG+RT_I64,REG_RBP,0,ip2); + MDF_REG+RT_I64,REG_RBP,0,rip2); break; case IC_SET_RBP: ICMov(tmpi,MDF_REG+RT_I64,REG_RBP,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); break; case IC_GET_RSP: ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - MDF_REG+RT_I64,REG_RSP,0,ip2); + MDF_REG+RT_I64,REG_RSP,0,rip2); break; case IC_SET_RSP: ICMov(tmpi,MDF_REG+RT_I64,REG_RSP,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); break; case IC_RETURN_VAL: case IC_SET_RAX: ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); break; case IC_RETURN_VAL2: case IC_GET_RAX: break; case IC_BT: - ICBitOps(tmpi,&tmpi->a1,&tmpi->a2,tmpi->next, - 0xA30F,0x20BA0F,ip2); + ICBitOps(tmpi,&tmpi->arg1,&tmpi->arg2,tmpi->next, + 0xA30F,0x20BA0F,rip2); break; case IC_BTS: case IC_LBTS: - ICBitOps(tmpi,&tmpi->a1,&tmpi->a2,tmpi->next, - 0xAB0F,0x28BA0F,ip2); + ICBitOps(tmpi,&tmpi->arg1,&tmpi->arg2,tmpi->next, + 0xAB0F,0x28BA0F,rip2); break; case IC_BTR: case IC_LBTR: - ICBitOps(tmpi,&tmpi->a1,&tmpi->a2,tmpi->next, - 0xB30F,0x30BA0F,ip2); + ICBitOps(tmpi,&tmpi->arg1,&tmpi->arg2,tmpi->next, + 0xB30F,0x30BA0F,rip2); break; case IC_BTC: case IC_LBTC: - ICBitOps(tmpi,&tmpi->a1,&tmpi->a2,tmpi->next, - 0xBB0F,0x38BA0F,ip2); + ICBitOps(tmpi,&tmpi->arg1,&tmpi->arg2,tmpi->next, + 0xBB0F,0x38BA0F,rip2); break; case IC_BSF: ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); ICU32(tmpi,0xC0BC0F48); ICU16(tmpi,0x0375); ICU24(tmpi,0xD0F748); break; case IC_BSR: ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); ICU32(tmpi,0xC0BD0F48); ICU16(tmpi,0x0375); ICU24(tmpi,0xD0F748); break; case IC_SIGN_I64: ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_SIGN_I64, - TRUE,FALSE,FALSE,CN_MAIN); + TRUE,FALSE,FALSE,CN_INST); break; case IC_TOUPPER: - ICToUpper(tmpi,ip2); + ICToUpper(tmpi,rip2); break; case IC_TO_I64: - ICToI64(cc,tmpi,ip2); + ICToI64(cc,tmpi,rip2); break; case IC_TO_F64: - ICToF64(cc,tmpi,ip2); + ICToF64(cc,tmpi,rip2); break; case IC_TO_BOOL: - ICToBool(cc,tmpi,ip2); + ICToBool(cc,tmpi,rip2); break; case IC_SQR: - ICFTemplateFun(cc,tmpi,CMP_TEMPLATE_SQR,ip2); + ICFTemplateFun(cc,tmpi,CMP_TEMPLATE_SQR,rip2); break; case IC_ABS: - ICFTemplateFun(cc,tmpi,CMP_TEMPLATE_ABS,ip2); + ICFTemplateFun(cc,tmpi,CMP_TEMPLATE_ABS,rip2); break; case IC_SQRT: - ICFTemplateFun(cc,tmpi,CMP_TEMPLATE_SQRT,ip2); + ICFTemplateFun(cc,tmpi,CMP_TEMPLATE_SQRT,rip2); break; case IC_SIN: - ICFTemplateFun(cc,tmpi,CMP_TEMPLATE_SIN,ip2); + ICFTemplateFun(cc,tmpi,CMP_TEMPLATE_SIN,rip2); break; case IC_COS: - ICFTemplateFun(cc,tmpi,CMP_TEMPLATE_COS,ip2); + ICFTemplateFun(cc,tmpi,CMP_TEMPLATE_COS,rip2); break; case IC_TAN: - ICFTemplateFun(cc,tmpi,CMP_TEMPLATE_TAN,ip2); + ICFTemplateFun(cc,tmpi,CMP_TEMPLATE_TAN,rip2); break; case IC_ATAN: - ICFTemplateFun(cc,tmpi,CMP_TEMPLATE_ATAN,ip2); + ICFTemplateFun(cc,tmpi,CMP_TEMPLATE_ATAN,rip2); break; case IC_ABS_I64: ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); ICU24(tmpi,0xC08548); ICU16(tmpi,0x0379); ICU24(tmpi,0xD8F748); break; case IC_MIN_I64: - ICMinMax(tmpi,0x4F,ip2); + ICMinMax(tmpi,0x4F,rip2); break; case IC_MAX_I64: - ICMinMax(tmpi,0x4C,ip2); + ICMinMax(tmpi,0x4C,rip2); break; case IC_MIN_U64: - ICMinMax(tmpi,0x47,ip2); + ICMinMax(tmpi,0x47,rip2); break; case IC_MAX_U64: - ICMinMax(tmpi,0x42,ip2); + ICMinMax(tmpi,0x42,rip2); break; case IC_MOD_U64: - ICModU64(tmpi,ip2); + ICModU64(tmpi,rip2); break; case IC_SQR_I64: - ICSqr(tmpi,SLASH_OP_IMUL,ip2); + ICSqr(tmpi,SLASH_OP_IMUL,rip2); break; case IC_SQR_U64: - ICSqr(tmpi,SLASH_OP_MUL,ip2); + ICSqr(tmpi,SLASH_OP_MUL,rip2); break; case IC_SWAP_U8: case IC_SWAP_U16: case IC_SWAP_U32: case IC_SWAP_I64: - ICSwap(tmpi,ip2); + ICSwap(tmpi,rip2); break; case IC_QUE_INIT: - ICQueInit(tmpi,ip2); + ICQueInit(tmpi,rip2); break; case IC_QUE_INS: - ICQueIns(tmpi,ip2); + ICQueIns(tmpi,rip2); break; case IC_QUE_INS_REV: - ICQueInsRev(tmpi,ip2); + ICQueInsRev(tmpi,rip2); break; case IC_QUE_REM: - ICQueRem(tmpi,ip2); + ICQueRem(tmpi,rip2); break; case IC_STRLEN: ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); - ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_STRLEN,TRUE,FALSE,FALSE,CN_MAIN); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); + ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_STRLEN,TRUE,FALSE,FALSE,CN_INST); break; case IC_IN_U32: - if (tmpi->a1.type&MDF_IMM) { + if (tmpi->arg1.type&MDF_IMM) { ICU16(tmpi,0xC033); - if (tmpi->a1.disp<=MAX_U8) - ICU16(tmpi,0xE5+tmpi->a1.disp<<8); + if (tmpi->arg1.disp<=MAX_U8) + ICU16(tmpi,0xE5+tmpi->arg1.disp<<8); else { - ICU32(tmpi,0xBA00+OC_OP_SIZE_PREFIX+tmpi->a1.disp<<16); + ICU32(tmpi,0xBA00+OC_OP_SIZE_PREFIX+tmpi->arg1.disp<<16); ICU8(tmpi,0xED); } } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); ICU16(tmpi,0xC033); ICU8(tmpi,0xED); } break; case IC_IN_U16: - if (tmpi->a1.type&MDF_IMM) { + if (tmpi->arg1.type&MDF_IMM) { ICU16(tmpi,0xC033); - if (tmpi->a1.disp<=MAX_U8) - ICU24(tmpi,0xE500+OC_OP_SIZE_PREFIX+tmpi->a1.disp<<16); + if (tmpi->arg1.disp<=MAX_U8) + ICU24(tmpi,0xE500+OC_OP_SIZE_PREFIX+tmpi->arg1.disp<<16); else { - ICU32(tmpi,0xBA00+OC_OP_SIZE_PREFIX+tmpi->a1.disp<<16); + ICU32(tmpi,0xBA00+OC_OP_SIZE_PREFIX+tmpi->arg1.disp<<16); ICU16(tmpi,0xED00+OC_OP_SIZE_PREFIX); } } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); ICU16(tmpi,0xC033); ICU16(tmpi,0xED00+OC_OP_SIZE_PREFIX); } break; case IC_IN_U8: - if (tmpi->a1.type&MDF_IMM) { + if (tmpi->arg1.type&MDF_IMM) { ICU16(tmpi,0xC033); - if (tmpi->a1.disp<=MAX_U8) - ICU16(tmpi,0xE4+tmpi->a1.disp<<8); + if (tmpi->arg1.disp<=MAX_U8) + ICU16(tmpi,0xE4+tmpi->arg1.disp<<8); else { - ICU32(tmpi,0xBA00+OC_OP_SIZE_PREFIX+tmpi->a1.disp<<16); + ICU32(tmpi,0xBA00+OC_OP_SIZE_PREFIX+tmpi->arg1.disp<<16); ICU8(tmpi,0xEC); } } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); ICU16(tmpi,0xC033); ICU8(tmpi,0xEC); } break; case IC_OUT_U32: - if (tmpi->a2.type&MDF_IMM) { + if (tmpi->arg2.type&MDF_IMM) { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); - if (tmpi->a2.disp<=MAX_U8) - ICU16(tmpi,0xE7+tmpi->a2.disp<<8); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); + if (tmpi->arg2.disp<=MAX_U8) + ICU16(tmpi,0xE7+tmpi->arg2.disp<<8); else { - ICU32(tmpi,0xBA00+OC_OP_SIZE_PREFIX+tmpi->a2.disp<<16); + ICU32(tmpi,0xBA00+OC_OP_SIZE_PREFIX+tmpi->arg2.disp<<16); ICU8(tmpi,0xEF); } } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip2); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip2); ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); ICU8(tmpi,0xEF); } break; case IC_OUT_U16: - if (tmpi->a2.type&MDF_IMM) { + if (tmpi->arg2.type&MDF_IMM) { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); - if (tmpi->a2.disp<=MAX_U8) - ICU24(tmpi,0xE700+OC_OP_SIZE_PREFIX+tmpi->a2.disp<<16); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); + if (tmpi->arg2.disp<=MAX_U8) + ICU24(tmpi,0xE700+OC_OP_SIZE_PREFIX+tmpi->arg2.disp<<16); else { - ICU32(tmpi,0xBA00+OC_OP_SIZE_PREFIX+tmpi->a2.disp<<16); + ICU32(tmpi,0xBA00+OC_OP_SIZE_PREFIX+tmpi->arg2.disp<<16); ICU16(tmpi,0xEF00+OC_OP_SIZE_PREFIX); } } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip2); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip2); ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); ICU16(tmpi,0xEF00+OC_OP_SIZE_PREFIX); } break; case IC_OUT_U8: - if (tmpi->a2.type&MDF_IMM) { + if (tmpi->arg2.type&MDF_IMM) { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); - if (tmpi->a2.disp<=MAX_U8) - ICU16(tmpi,0xE6+tmpi->a2.disp<<8); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); + if (tmpi->arg2.disp<=MAX_U8) + ICU16(tmpi,0xE6+tmpi->arg2.disp<<8); else { - ICU32(tmpi,0xBA00+OC_OP_SIZE_PREFIX+tmpi->a2.disp<<16); + ICU32(tmpi,0xBA00+OC_OP_SIZE_PREFIX+tmpi->arg2.disp<<16); ICU8(tmpi,0xEE); } } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip2); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip2); ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); ICU8(tmpi,0xEE); } break; case IC_NOBOUND_SWITCH: - ICSwitch(tmpi,ip,TRUE,cc,buf,ip2); + ICSwitch(tmpi,rip,TRUE,cc,buf,rip2); break; case IC_SWITCH: - ICSwitch(tmpi,ip,FALSE,cc,buf,ip2); + ICSwitch(tmpi,rip,FALSE,cc,buf,rip2); break; case IC_NOP1: case IC_NOP2: @@ -1025,9 +1025,9 @@ cc->pass==10 is final pass, code is placed into buf. break; case IC_CALL_END: ICPopRegs(tmpi,tmpi->ic_data); - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip2); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip2); break; case IC_POP_REGS: ICPopRegs(tmpi,tmpi->ic_data); @@ -1038,28 +1038,28 @@ cc->pass==10 is final pass, code is placed into buf. case IC_ADD_RSP1: break; default: - "Pass:%d Missing IC handler\n",cc->pass; + "Pass:%d Missing IC hndlr\n",cc->pass; ICPut(cc,tmpi); LexExcept(cc,"Compiler Optimization Error at "); } - if (tmpi->r.type.mode) { - if (tmpi->ic_flags & ICF_R_TO_F64) { + if (tmpi->res.type.mode) { + if (tmpi->ic_flags & ICF_RES_TO_F64) { if (tmpi->ic_code==IC_PUSH_CMP) { ICU24(tmpi,0x242CDF); //FILD U64 [RSP] ICU24(tmpi,0x241CDD); //FSTP U64 [RSP] } else { - ICFCvt(cc,tmpi,REG_RAX,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - FALSE,CN_R,ip2); + ICFCvt(cc,tmpi,REG_RAX,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + FALSE,CN_RES,rip2); if (!Bt(&tmpi->ic_flags,ICf_DONT_POP_FLOAT0+ cc->cur_ic_float_op_num-1)) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip2); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip2); } - } else if (tmpi->ic_flags & ICF_R_TO_INT) { - ICFCvt(cc,tmpi,REG_RAX,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - TRUE,CN_R,ip2); - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip2); + } else if (tmpi->ic_flags & ICF_RES_TO_INT) { + ICFCvt(cc,tmpi,REG_RAX,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + TRUE,CN_RES,rip2); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip2); } } } @@ -1070,25 +1070,25 @@ cc->pass==10 is final pass, code is placed into buf. tmpi->ic_flags&=~ICF_DEL_PREV_INS; } if (cnt && buf) - MemCpy(buf+ip,tmpi->ic_body,cnt); + MemCpy(buf+rip,tmpi->ic_body,cnt); op789A_skip_copy: if (dbg_info && cc->min_line<=tmpi->ic_line<=cc->max_line) { i=tmpi->ic_line-cc->min_line; if (!dbg_info->body[i]) - dbg_info->body[i]=ip2; + dbg_info->body[i]=rip2; } if (tmpi->ic_flags&ICF_PASS_TRACE && Bt(&cc->saved_pass_trace,cc->pass) && cnt) { "$$RED$$"; if (buf) - Un(buf+ip,cnt,64); + Un(buf+rip,cnt,64); else Un(tmpi->ic_body,cnt,64); "$$FG$$"; } if (!(tmpi->ic_flags&(ICF_CODE_FINAL|ICF_DONT_RESTORE))) - MemCpy(&tmpi->a1,saved_a1_a2_r,3*sizeof(CICArg)); - ip+=cnt; + MemCpy(&tmpi->arg1,saved_arg1_arg2_r,3*sizeof(CICArg)); + rip+=cnt; if (tmpi->ic_cnt>=IC_BODY_SIZE && tmpi->ic_code!=IC_ASM) throw('Compiler'); op789A_next: @@ -1099,24 +1099,24 @@ op789A_next: while (lb!=&cc->coc.coc_next_misc) { switch (lb->type) { case CMT_STR_CONST: - lb->addr=ip; + lb->addr=rip; if (buf) - MemCpy(buf+ip,lb->str,lb->st_len); - ip+=lb->st_len; + MemCpy(buf+rip,lb->str,lb->st_len); + rip+=lb->st_len; break; case CMT_JMP_TABLE: - lb->addr=ip; + lb->addr=rip; ptr=buf+lb->addr; if (lb->flags&(CMF_I8_JMP_TABLE|CMF_U8_JMP_TABLE)) { if (buf) for (i=0;irange;i++) *ptr++=lb->jmp_table[i]->addr-lb->begin->addr; - ip+=lb->range; + rip+=lb->range; } else if (lb->flags&(CMF_I16_JMP_TABLE|CMF_U16_JMP_TABLE)) { if (buf) for (i=0;irange;i++) *ptr(U16 *)++=lb->jmp_table[i]->addr-lb->begin->addr; - ip+=lb->range<<1; + rip+=lb->range<<1; } else { if (buf) for (i=0;irange;i++) { @@ -1125,28 +1125,28 @@ op789A_next: tmpa->next=aotc->abss; tmpa->type=AAT_ADD_U32; aotc->abss=tmpa; - tmpa->ip=aotc->ip+lb->addr+i<<2; - *ptr(U32 *)++=lb->jmp_table[i]->addr+aotc->ip; + tmpa->rip=aotc->rip+lb->addr+i<<2; + *ptr(U32 *)++=lb->jmp_table[i]->addr+aotc->rip; } else *ptr(U32 *)++=lb->jmp_table[i]->addr+buf; } - ip+=lb->range<<2; + rip+=lb->range<<2; } break; case CMT_FLOAT_CONSTS: - lb->addr=ip; + lb->addr=rip; if (buf) MemCpy(buf+lb->addr,lb->float_consts,lb->num_consts*sizeof(F64)); - ip+=lb->num_consts*sizeof(F64); + rip+=lb->num_consts*sizeof(F64); break; } lb=lb->next; } if (dbg_info) { if (cc->flags&CCF_AOT_COMPILE) - dbg_info->body[num_lines]=ip+aotc->ip; + dbg_info->body[num_lines]=rip+aotc->rip; else - dbg_info->body[num_lines]=ip+buf; + dbg_info->body[num_lines]=rip+buf; } - return ip; + return rip; } diff --git a/Compiler/PrsExp.HC b/Compiler/PrsExp.HC index 99a5732..1fff5aa 100644 --- a/Compiler/PrsExp.HC +++ b/Compiler/PrsExp.HC @@ -466,17 +466,17 @@ I64 PrsFunCall(CCmpCtrl *cc,CPrsStk *ps,Bool indirect,CHashFun *tmpf) throw('Compiler'); else { COCPush(cc); - cc->pass=0; OptPass012(cc); + cc->pass=0; OptPass012(cc); cc->pass=1; tmpi=OptPass012(cc); COCPop(cc); last_class=OptClassFwd(tmpi->ic_class); tmpc2=OptClassFwd(tmpm->member_class); if (tmpc2->raw_type==RT_F64 && !tmpm->dim.next && last_class->raw_type!=RT_F64) - tmpi->ic_flags|=ICF_R_TO_F64; + tmpi->ic_flags|=ICF_RES_TO_F64; else if (tmpc2->raw_type!=RT_F64 && last_class->raw_type==RT_F64) - tmpi->ic_flags|=ICF_R_TO_INT; + tmpi->ic_flags|=ICF_RES_TO_INT; } } COCPush(cc); @@ -703,12 +703,13 @@ I64 PrsUnaryTerm(CCmpCtrl *cc,CPrsStk *ps,CMemberLst **_local_var, if (cc->flags & CCF_ASM_EXPRESSIONS) { cc->abs_cnts.abs_addres++; if (cc->flags&CCF_AOT_COMPILE) - ICAdd(cc,IC_ABS_ADDR,cc->aotc->ip,cmp.internal_types[RT_PTR]); + ICAdd(cc,IC_ABS_ADDR,cc->aotc->rip,cmp.internal_types[RT_PTR]); else - ICAdd(cc,IC_IMM_I64,cc->aotc->ip,cmp.internal_types[RT_PTR]); + ICAdd(cc,IC_IMM_I64,cc->aotc->rip,cmp.internal_types[RT_PTR]); } else { - if (cc->flags&CCF_CLASS_IP) - ICAdd(cc,IC_IMM_I64,cc->class_ip,cmp.internal_types[RT_I64]); + if (cc->flags&CCF_CLASS_DOL_OFFSET) + ICAdd(cc,IC_IMM_I64,cc->class_dol_offset, + cmp.internal_types[RT_I64]); else ICAdd(cc,IC_RIP,0,cmp.internal_types[RT_PTR]); } @@ -772,7 +773,7 @@ I64 PrsUnaryTerm(CCmpCtrl *cc,CPrsStk *ps,CMemberLst **_local_var, // if (tmpg->flags&GVF_DATA_HEAP) //TODO // ICAdd(cc,IC_HEAP_GLBL,tmpm->static_data,tmpc); // else - ICAdd(cc,IC_ABS_ADDR,tmpm->static_data_ip,tmpc); + ICAdd(cc,IC_ABS_ADDR,tmpm->static_data_rip,tmpc); } else ICAdd(cc,IC_IMM_I64,tmpm->static_data,tmpc); } else { @@ -878,7 +879,7 @@ pu_export_sys_sym: if (tmpg->flags&GVF_DATA_HEAP) ICAdd(cc,IC_HEAP_GLBL,tmpg->heap_glbl,tmpc); else - ICAdd(cc,IC_ABS_ADDR,tmpg->data_addr_ip,tmpc); + ICAdd(cc,IC_ABS_ADDR,tmpg->data_addr_rip,tmpc); } } } else { @@ -1070,7 +1071,7 @@ I64 PrsUnaryModifier(CCmpCtrl *cc,CPrsStk *ps,CMemberLst **_local_var, LexExcept(cc,"Missing ']' at "); Lex(cc); //skip ] tmpi1=cc->coc.coc_head.last; - tmpi1->ic_flags|=ICF_R_TO_INT; + tmpi1->ic_flags|=ICF_RES_TO_INT; ICAdd(cc,IC_MUL,0,tmpc); ICAdd(cc,IC_ADD,0,tmpc); cc->flags|=CCF_RAX; @@ -1086,7 +1087,7 @@ I64 PrsUnaryModifier(CCmpCtrl *cc,CPrsStk *ps,CMemberLst **_local_var, LexExcept(cc,"Missing ']' at "); Lex(cc); //skip ] tmpi1=cc->coc.coc_head.last; - tmpi1->ic_flags|=ICF_R_TO_INT; + tmpi1->ic_flags|=ICF_RES_TO_INT; ICAdd(cc,IC_MUL,0,tmpc); ICAdd(cc,IC_ADD,0,tmpc); cc->flags&=~(CCF_RAX|CCF_ARRAY); diff --git a/Compiler/PrsStmt.HC b/Compiler/PrsStmt.HC index b130c0e..05b65a0 100644 --- a/Compiler/PrsStmt.HC +++ b/Compiler/PrsStmt.HC @@ -99,7 +99,7 @@ CHashFun *PrsFunJoin(CCmpCtrl *cc,CHashClass *tmp_return, tmpf->clobbered_reg_mask=REGG_CLOBBERED+REGG_STK_TMP; tmpf->str=name; if (cc->flags&CCF_AOT_COMPILE) - tmpf->exe_addr=aotc->ip; + tmpf->exe_addr=aotc->rip; else tmpf->exe_addr=&UndefinedExtern; LBts(&tmpf->flags,Cf_EXTERN); @@ -169,7 +169,7 @@ U0 PrsFun(CCmpCtrl *cc,CHashClass *tmp_return,U8 *name,I64 fsp_flags) ICAdd(cc,IC_LEAVE,0,cc->htc.fun->return_class); cc->htc.fun->size&=~7; if (cc->flags&CCF_AOT_COMPILE) { - cc->htc.fun->exe_addr=cc->aotc->ip; + cc->htc.fun->exe_addr=cc->aotc->rip; cc->htc.fun->type|=HTF_EXPORT|HTF_RESOLVE; r=COCCompile(cc,&size,&cc->htc.fun->dbg_info,NULL); if (r) { @@ -300,7 +300,7 @@ U0 PrsGlblVarLst(CCmpCtrl *cc,I64 saved_mode,CHashClass *saved_tmpc, case PRS0__EXTERN: if (cc->flags&CCF_AOT_COMPILE) { tmpg=CAlloc(sizeof(CHashGlblVar)); - tmpg->data_addr_ip=val; + tmpg->data_addr_rip=val; tmpg->type=HTT_GLBL_VAR | HTF_EXPORT; } else { tmpg=CAlloc(sizeof(CHashGlblVar),Fs->code_heap); @@ -351,24 +351,20 @@ U0 PrsGlblVarLst(CCmpCtrl *cc,I64 saved_mode,CHashClass *saved_tmpc, if (cc->token=='=') tmpg->data_addr=CAlloc(j); if (tmpc->size>=8) //align - while (aotc->ip&7) + while (aotc->rip&7) AOTStoreCodeU8(cc,0); else if (tmpc->size==4) - while (aotc->ip&3) + while (aotc->rip&3) AOTStoreCodeU8(cc,0); else if (tmpc->size==2) - while (aotc->ip&1) + while (aotc->rip&1) AOTStoreCodeU8(cc,0); - tmpg->data_addr_ip=aotc->ip; + tmpg->data_addr_rip=aotc->rip; tmpg->type=HTT_GLBL_VAR | HTF_EXPORT; if (tmpex && tmpex->type & HTT_GLBL_VAR) has_alias=TRUE; - if (sys_var_init_flag) - for (k=0;kopts,OPTf_GLBLS_ON_DATA_HEAP)) { @@ -423,14 +419,10 @@ U0 PrsGlblVarLst(CCmpCtrl *cc,I64 saved_mode,CHashClass *saved_tmpc, tmpg->size=tmpg->dim.total_cnt*tmpc->size; if (tmphg) tmphg->size=tmpg->size; - if (cc->flags&CCF_AOT_COMPILE) { - if (sys_var_init_flag) - for (k=0;ksize;k++) - AOTStoreCodeU8(cc,sys_var_init_val); - else - for (k=0;ksize;k++) - AOTStoreCodeU8(cc,0); - } else + if (cc->flags&CCF_AOT_COMPILE) + for (k=0;ksize;k++) + AOTStoreCodeU8(cc,0); + else if (sys_var_init_flag) MemSet(tmpg->data_addr,sys_var_init_val,k); LexPopRestore(cc); @@ -440,7 +432,7 @@ U0 PrsGlblVarLst(CCmpCtrl *cc,I64 saved_mode,CHashClass *saved_tmpc, PrsGlblInit(cc,tmpg,2); if (cc->flags&CCF_AOT_COMPILE) for (k=0;ksize;k++) - AOTStoreCodeU8At(cc,tmpg->data_addr_ip+k,tmpg->data_addr[k]); + AOTStoreCodeU8At(cc,tmpg->data_addr_rip+k,tmpg->data_addr[k]); LexPopNoRestore(cc); } if (has_alias) { @@ -450,7 +442,7 @@ U0 PrsGlblVarLst(CCmpCtrl *cc,I64 saved_mode,CHashClass *saved_tmpc, } tmpex(CHashGlblVar *)->flags|=GVF_ALIAS; tmpex(CHashGlblVar *)->data_addr=tmpg->data_addr; - tmpex(CHashGlblVar *)->data_addr_ip=tmpg->data_addr_ip; + tmpex(CHashGlblVar *)->data_addr_rip=tmpg->data_addr_rip; } if (cc->token==',') Lex(cc); diff --git a/Compiler/PrsVar.HC b/Compiler/PrsVar.HC index 84ecb83..2364d2e 100644 --- a/Compiler/PrsVar.HC +++ b/Compiler/PrsVar.HC @@ -1,5 +1,5 @@ U0 PrsVarInit(CCmpCtrl *cc,U8 **_dst,CHashClass *tmpc,CArrayDim *tmpad, - U8 *data_addr_ip,U8 **_base,Bool data_heap,I64 pass) + U8 *data_addr_rip,U8 **_base,Bool data_heap,I64 pass) { U8 *dst=*_dst,*machine_code; I64 i,j,r,old_flags,type,size; @@ -19,7 +19,7 @@ U0 PrsVarInit(CCmpCtrl *cc,U8 **_dst,CHashClass *tmpc,CArrayDim *tmpad, Lex(cc); while (tmpm) { PrsVarInit2(cc,&dst,tmpm->member_class,&tmpm->dim, - data_addr_ip,_base,data_heap,pass); + data_addr_rip,_base,data_heap,pass); if (cc->token==',') Lex(cc); tmpm=tmpm->next; @@ -43,8 +43,8 @@ U0 PrsVarInit(CCmpCtrl *cc,U8 **_dst,CHashClass *tmpc,CArrayDim *tmpad, tmpa->next=aotc->abss; tmpa->type=AAT_ADD_U64; aotc->abss=tmpa; - tmpa->ip=data_addr_ip+dst-*_base; - *dst(I64 *)=aotc->ip; + tmpa->rip=data_addr_rip+dst-*_base; + *dst(I64 *)=aotc->rip; for (j=0;jtype=IET_MAIN; - tmpie->ip=cc->aotc->ip; + tmpie->rip=cc->aotc->rip; QueIns(tmpie,cc->aot->last_ie); for (i=0;itoken!='}') { tmpvi=MAlloc(offset(CVI2.base)+tmpad1->total_cnt*tmpc->size); _b=&tmpvi->base; - PrsVarInit2(cc,&_b,tmpc,tmpad1,data_addr_ip,_base,data_heap,pass); + PrsVarInit2(cc,&_b,tmpc,tmpad1,data_addr_rip,_base,data_heap,pass); QueIns(tmpvi,head.last); if (cc->token==',') Lex(cc); @@ -189,7 +189,7 @@ U0 PrsVarInit2(CCmpCtrl *cc,U8 **_dst,CHashClass *tmpc, *_dst=_b; } else { for (i=0;icnt;i++) { - PrsVarInit2(cc,_dst,tmpc,tmpad1,data_addr_ip,_base,data_heap,pass); + PrsVarInit2(cc,_dst,tmpc,tmpad1,data_addr_rip,_base,data_heap,pass); if (tmpad1->cnt>1 && cc->token==',') Lex(cc); } @@ -198,7 +198,7 @@ U0 PrsVarInit2(CCmpCtrl *cc,U8 **_dst,CHashClass *tmpc, } } } else { - PrsVarInit(cc,_dst,tmpc,tmpad1,data_addr_ip,_base,data_heap,pass); + PrsVarInit(cc,_dst,tmpc,tmpad1,data_addr_rip,_base,data_heap,pass); LexPush(cc); } } @@ -207,7 +207,7 @@ U0 PrsGlblInit(CCmpCtrl *cc,CHashGlblVar *tmpg,I64 pass) { U8 *dst=tmpg->data_addr; PrsVarInit2(cc,&dst,tmpg->var_class,&tmpg->dim, - tmpg->data_addr_ip,&tmpg->data_addr, + tmpg->data_addr_rip,&tmpg->data_addr, Bt(&cc->opts,OPTf_GLBLS_ON_DATA_HEAP)|| Bt(&cc->flags,CCf_AOT_COMPILE),pass); } @@ -223,7 +223,7 @@ U0 PrsStaticInit(CCmpCtrl *cc,CMemberLst *tmpm,I64 pass) COCPush(cc); COCInit(cc); } - PrsVarInit2(cc,&dst,tmpc,&tmpm->dim,tmpm->static_data_ip, + PrsVarInit2(cc,&dst,tmpc,&tmpm->dim,tmpm->static_data_rip, &tmpm->static_data,Bt(&cc->flags,CCf_AOT_COMPILE),pass); if (cc->flags&CCF_AOT_COMPILE && pass==2) { if (cc->coc.coc_head.next!=&cc->coc.coc_head) { @@ -232,7 +232,7 @@ U0 PrsStaticInit(CCmpCtrl *cc,CMemberLst *tmpm,I64 pass) if (pass==2) { tmpie=CAlloc(sizeof(CAOTImportExport)); tmpie->type=IET_MAIN; - tmpie->ip=cc->aotc->ip; + tmpie->rip=cc->aotc->rip; QueIns(tmpie,cc->aot->last_ie); for (i=0;iflags|=CCF_DONT_MAKE_RES; if (mode.u8[1]==PRS1B_CLASS) - cc->flags|=CCF_CLASS_IP; + cc->flags|=CCF_CLASS_DOL_OFFSET; if ((mode.u8[1]!=PRS1B_LOCAL_VAR && mode.u8[1]!=PRS1B_STATIC_LOCAL_VAR || mode&PRSF_UNION) && (cc->token=='(' || cc->token=='{')) Lex(cc); while (TRUE) { + if (mode&PRSF_UNION) + cc->class_dol_offset=union_base; + else + cc->class_dol_offset=tmpc->size; while (cc->token==';') Lex(cc); - if (mode&PRSF_UNION) - cc->class_ip=union_base; - else - cc->class_ip=tmpc->size; while (cc->token=='$$') { if (Lex(cc)!='=') //skip $$ LexExcept(cc,"Expecting '=' at "); Lex(cc); //skip = - cc->class_ip=LexExpression(cc); - if (-cc->class_ip>tmpc->neg_offset) - tmpc->neg_offset=-cc->class_ip; + cc->class_dol_offset=LexExpression(cc); + if (-cc->class_dol_offset>tmpc->neg_offset) + tmpc->neg_offset=-cc->class_dol_offset; if (mode&PRSF_UNION) - union_base=cc->class_ip; + union_base=cc->class_dol_offset; else - tmpc->size=cc->class_ip; + tmpc->size=cc->class_dol_offset; if (cc->token!=';') LexExcept(cc,"Missing ';' at"); Lex(cc); //skip ; @@ -553,15 +553,10 @@ pvl_restart3: else tmpm->static_data=MAlloc(k,Fs->code_heap); if (cc->flags&CCF_AOT_COMPILE) { - tmpm->static_data_ip=cc->aotc->ip; + tmpm->static_data_rip=cc->aotc->rip; k>>=3; - if (sys_var_init_flag) { - k<<=3; - while (k--) - AOTStoreCodeU8(cc,sys_var_init_val); - } else - while (k--) - AOTStoreCodeU64(cc,0); + while (k--) + AOTStoreCodeU64(cc,0); } else if (sys_var_init_flag) MemSet(tmpm->static_data,sys_var_init_val,k); @@ -579,13 +574,8 @@ pvl_restart3: k=(i+7)&~7; if (cc->flags&CCF_AOT_COMPILE) { k>>=3; - if (sys_var_init_flag) { - k<<=3; - while (k--) - AOTStoreCodeU8(cc,sys_var_init_val); - } else - while (k--) - AOTStoreCodeU64(cc,0); + while (k--) + AOTStoreCodeU64(cc,0); } else if (sys_var_init_flag) MemSet(tmpm->static_data,sys_var_init_val,k); @@ -597,7 +587,7 @@ pvl_restart3: LexPopNoRestore(cc); if (cc->flags&CCF_AOT_COMPILE) for (k=0;kstatic_data_ip+k, + AOTStoreCodeU8At(cc,tmpm->static_data_rip+k, tmpm->static_data[k]); tmpm->use_cnt=0; cc->flags|=CCF_DONT_MAKE_RES; @@ -729,6 +719,6 @@ pvl_restart3: } } pvl_done: - cc->flags=cc->flags&~(CCF_CLASS_IP|CCF_DONT_MAKE_RES)| - old_flags& (CCF_CLASS_IP|CCF_DONT_MAKE_RES); + cc->flags=cc->flags&~(CCF_CLASS_DOL_OFFSET|CCF_DONT_MAKE_RES)| + old_flags&(CCF_CLASS_DOL_OFFSET|CCF_DONT_MAKE_RES); } diff --git a/Compiler/UAsm.HC b/Compiler/UAsm.HC index f712957..36b3452 100644 --- a/Compiler/UAsm.HC +++ b/Compiler/UAsm.HC @@ -63,9 +63,9 @@ U0 DumpUAsmTables() } */ -CInst *InstEntryFind(U8 *ip,I64 opsize,I64 seg_size) +CInst *InstEntryFind(U8 *rip,I64 opsize,I64 seg_size) {//Binary Search - I64 i,j,n,m,k,a1,a2,o1,o2,oc_cnt; + I64 i,j,n,m,k,arg1,arg2,o1,o2,oc_cnt; CInst *tmpins,**table; i=0; if (seg_size==64) { @@ -82,13 +82,13 @@ CInst *InstEntryFind(U8 *ip,I64 opsize,I64 seg_size) m=0; n=0; while (TRUE) { //ief_compare_start - a1=tmpins->arg1; - a2=tmpins->arg2; + arg1=tmpins->arg1; + arg2=tmpins->arg2; oc_cnt=tmpins->opcode_cnt; if (tmpins->flags&IEF_STI_LIKE) oc_cnt--; if (nopcode_cnt-1 && tmpins->flags & IEF_PLUS_OPCODE) o1&=-8; o2=tmpins->opcode[n++]; @@ -97,9 +97,10 @@ CInst *InstEntryFind(U8 *ip,I64 opsize,I64 seg_size) } else switch [tmpins->uasm_slash_val] { case 0...7: - if (!(m=ip[n]>>3&7-tmpins->slash_val)) { - if ((Bt(&uasm.mem_arg_mask,a1) || Bt(&uasm.mem_arg_mask,a2)) && - ip[n]&0xC0==0xC0) { + if (!(m=rip[n]>>3&7-tmpins->slash_val)) { + if ((Bt(&uasm.mem_arg_mask,arg1) || + Bt(&uasm.mem_arg_mask,arg2)) && + rip[n]&0xC0==0xC0) { m=1; goto ief_compare_done; } @@ -114,25 +115,28 @@ CInst *InstEntryFind(U8 *ip,I64 opsize,I64 seg_size) goto ief_compare_done; } } - if (opsize==64||a1==ARGT_M64||a2==ARGT_M64) { - if (!Bt(&uasm.ins64_arg_mask,a1)&& - !Bt(&uasm.ins64_arg_mask,a2)&&!(tmpins->flags&IEF_48_REX)) + if (opsize==64||arg1==ARGT_M64||arg2==ARGT_M64) { + if (!Bt(&uasm.ins64_arg_mask,arg1)&& + !Bt(&uasm.ins64_arg_mask,arg2)&& + !(tmpins->flags&IEF_48_REX)) m=1; } else { - if (Bt(&uasm.ins64_arg_mask,a1)||Bt(&uasm.ins64_arg_mask,a2) || + if (Bt(&uasm.ins64_arg_mask,arg1)|| + Bt(&uasm.ins64_arg_mask,arg2) || tmpins->flags&IEF_48_REX) m=-1; } - } else if ((Bt(&uasm.mem_arg_mask,a1)||Bt(&uasm.mem_arg_mask,a2)) && - ip[n]&0xC0==0xC0) + } else if ((Bt(&uasm.mem_arg_mask,arg1)|| + Bt(&uasm.mem_arg_mask,arg2)) && + rip[n]&0xC0==0xC0) m=1; goto ief_compare_done; case SV_I_REG: - m=ip[n]>>3-tmpins->opcode[tmpins->opcode_cnt-1]>>3; + m=rip[n]>>3-tmpins->opcode[tmpins->opcode_cnt-1]>>3; goto ief_compare_done; case SV_STI_LIKE: - if (!(m=ip[n]>>3-tmpins->opcode[tmpins->opcode_cnt-1]>>3)) - m=ip[n]-tmpins->opcode[tmpins->opcode_cnt-1]; + if (!(m=rip[n]>>3-tmpins->opcode[tmpins->opcode_cnt-1]>>3)) + m=rip[n]-tmpins->opcode[tmpins->opcode_cnt-1]; goto ief_compare_done; case SV_R_REG: case SV_NONE: @@ -148,18 +152,21 @@ CInst *InstEntryFind(U8 *ip,I64 opsize,I64 seg_size) goto ief_compare_done; } } - if (opsize==64 || a1==ARGT_M64 || a2==ARGT_M64) { - if (!Bt(&uasm.ins64_arg_mask,a1) &&!Bt(&uasm.ins64_arg_mask,a2) && - !(tmpins->flags&IEF_48_REX)&& !(a2==ARGT_NONE && - (ARGT_UIMM8<=a1<=ARGT_UIMM64 || ARGT_IMM8<=a1<=ARGT_IMM64))) + if (opsize==64 || arg1==ARGT_M64 || arg2==ARGT_M64) { + if (!Bt(&uasm.ins64_arg_mask,arg1) && + !Bt(&uasm.ins64_arg_mask,arg2) && + !(tmpins->flags&IEF_48_REX)&& !(arg2==ARGT_NONE && + (ARGT_UIMM8<=arg1<=ARGT_UIMM64 || + ARGT_IMM8<=arg1<=ARGT_IMM64))) m=1; else if (tmpins->arg2==ARGT_IMM64 || tmpins->arg2==ARGT_UIMM64) { - if (a2!=ARGT_IMM64&&a2!=ARGT_UIMM64) + if (arg2!=ARGT_IMM64&&arg2!=ARGT_UIMM64) m=1; - } else if (a2==ARGT_IMM64||a2==ARGT_UIMM64) + } else if (arg2==ARGT_IMM64||arg2==ARGT_UIMM64) m=-1; } else { - if (Bt(&uasm.ins64_arg_mask,a1) || Bt(&uasm.ins64_arg_mask,a2) || + if (Bt(&uasm.ins64_arg_mask,arg1) || + Bt(&uasm.ins64_arg_mask,arg2) || tmpins->flags&IEF_48_REX) m=-1; } @@ -235,19 +242,20 @@ U0 UAsmHashLoad() QSortI64(uasm.table_64 ,uasm.table_64_entries ,&InstEntriesCompare); } -U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE) +U0 Ui(U8 *buf,U8 **_rip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE) {//Unassembles one inst I64 i,disp,imm,opsize,opadd, - a1,a2,reloced_a1,reloced_a2, - a1_size=0,a2_size=0,reloced_a1_size,reloced_a2_size, + arg1,arg2,reloced_arg1,reloced_arg2, + arg1_size=0,arg2_size=0,reloced_arg1_size,reloced_arg2_size, ModrM=-1,SIB=-1,scale,r1,r2, Mod=-1,RM1=-1,RM2=-1,REX=-1,REX_r=0,REX_x=0,REX_b=0; Bool cont; CInst *tmpins,*tmpins2; CHashOpcode *tmpo; - U8 *ip=*_ip,*ptr,*reloced_a1_st,*reloced_a2_st, + U8 *rip=*_rip,*ptr,*reloced_arg1_st,*reloced_arg2_st, *bin_data_area1,*bin_data_area2, - line1[512],line2[512],buf2[512],a1_st[512],a2_st[512],seg_overrides[32]; + line1[512],line2[512],buf2[512],arg1_st[512], + arg2_st[512],seg_overrides[32]; if (_jmp_dst) *_jmp_dst=-1; if (seg_size==16) { @@ -260,28 +268,28 @@ U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE) opsize=32; opadd=64; } - *a1_st=0; - *a2_st=0; - if (!IsRaw && PutSrcLink(ip,1,line1)) + *arg1_st=0; + *arg2_st=0; + if (!IsRaw && PutSrcLink(rip,1,line1)) CatPrint(line1,"\n"); else *line1=0; - StrPrint(line1+StrLen(line1),"%24tp ",ip); + StrPrint(line1+StrLen(line1),"%24tp ",rip); bin_data_area1=line1+StrLen(line1); for (i=0;i<6;i++) - CatPrint(line1,"%02X",ip[i]); + CatPrint(line1,"%02X",rip[i]); CatPrint(line1," "); - StrPrint(line2,"%24tp ",ip+6); + StrPrint(line2,"%24tp ",rip+6); bin_data_area2=line2+StrLen(line2); for (i=6;i<12;i++) - CatPrint(line2,"%02X",ip[i]); + CatPrint(line2,"%02X",rip[i]); *seg_overrides=0; cont=TRUE; while (TRUE) { - switch (*ip) { + switch (*rip) { case 0x2E: if (StrLen(seg_overrides)<24) CatPrint(seg_overrides,"CS:"); break; case 0x36: if (StrLen(seg_overrides)<24) @@ -308,7 +316,7 @@ U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE) break; case 0x40...0x4F: if (seg_size==64) { - REX=*ip; + REX=*rip; if (REX>=0x48) opsize=64; REX_b=Bt(&REX,0)<<3; @@ -320,148 +328,148 @@ U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE) cont=FALSE; } if (cont) - ip++; + rip++; else break; } - tmpins=InstEntryFind(ip,opsize,seg_size); + tmpins=InstEntryFind(rip,opsize,seg_size); if (opsize==32 && seg_size==64) { - tmpins2=InstEntryFind(ip,64,seg_size); + tmpins2=InstEntryFind(rip,64,seg_size); if (tmpins2!=tmpins && tmpins2->flags&IEF_REX_ONLY_R8_R15 || - tmpins2->flags&IEF_REX_XOR_LIKE&& ip[1]>>3&7==ip[1]&7) + tmpins2->flags&IEF_REX_XOR_LIKE&& rip[1]>>3&7==rip[1]&7) tmpins=tmpins2; } - ip+=tmpins->opcode_cnt; + rip+=tmpins->opcode_cnt; tmpo=tmpins(U8 *)-tmpins->ins_entry_num*sizeof(CInst) -offset(CHashOpcode.ins); if (just_ins) *line1=0; CatPrint(line1,tmpo->str); - a1=tmpins->arg1; - a2=tmpins->arg2; + arg1=tmpins->arg1; + arg2=tmpins->arg2; - if (a1_size=tmpins->size1) { - if (Bt(&uasm.signed_arg_mask,a1)) - CatPrint(a1_st,"I%d ",a1_size); + if (arg1_size=tmpins->size1) { + if (Bt(&uasm.signed_arg_mask,arg1)) + CatPrint(arg1_st,"I%d ",arg1_size); else - CatPrint(a1_st,"U%d ",a1_size); + CatPrint(arg1_st,"U%d ",arg1_size); } - if (a2_size=tmpins->size2) { - if (Bt(&uasm.signed_arg_mask,a2)) - CatPrint(a2_st,"I%d ",a2_size); + if (arg2_size=tmpins->size2) { + if (Bt(&uasm.signed_arg_mask,arg2)) + CatPrint(arg2_st,"I%d ",arg2_size); else - CatPrint(a2_st,"U%d ",a2_size); + CatPrint(arg2_st,"U%d ",arg2_size); } if (tmpins->flags & IEF_PLUS_OPCODE) { - ip--; - RM1=*ip++ - tmpins->opcode[tmpins->opcode_cnt-1]+REX_b; + rip--; + RM1=*rip++ - tmpins->opcode[tmpins->opcode_cnt-1]+REX_b; ptr=NULL; - if (ARGT_R8<=a1<=ARGT_R64) { - if (a1_size==8) { + if (ARGT_R8<=arg1<=ARGT_R64) { + if (arg1_size==8) { if (REX!=-1) ptr="ST_U8_REX_REGS"; else ptr="ST_U8_REGS"; - } else if (a1_size==16) + } else if (arg1_size==16) ptr="ST_U16_REGS"; - else if (a1_size==32) + else if (arg1_size==32) ptr="ST_U32_REGS"; - else if (a1_size==64) + else if (arg1_size==64) ptr="ST_U64_REGS"; if (ptr) - CatPrint(a1_st,"%Z",RM1,ptr); + CatPrint(arg1_st,"%Z",RM1,ptr); } else { - if (a2_size==8) { + if (arg2_size==8) { if (REX!=-1) ptr="ST_U8_REX_REGS"; else ptr="ST_U8_REGS"; - } else if (a2_size==16) + } else if (arg2_size==16) ptr="ST_U16_REGS"; - else if (a2_size==32) + else if (arg2_size==32) ptr="ST_U32_REGS"; - else if (a2_size==64) + else if (arg2_size==64) ptr="ST_U64_REGS"; if (ptr) - CatPrint(a2_st,"%Z",RM1,ptr); + CatPrint(arg2_st,"%Z",RM1,ptr); } } - if (ARGT_RM8<=a1<=ARGT_RM64 || ARGT_M8<=a1<=ARGT_M64 || - ARGT_RM8<=a2<=ARGT_RM64 || ARGT_M8<=a2<=ARGT_M64) { - if (ARGT_RM8<=a2<=ARGT_RM64 || ARGT_M8<=a2<=ARGT_M64) { - reloced_a1=a2; - reloced_a2=a1; - reloced_a1_size=a2_size; - reloced_a2_size=a1_size; - reloced_a1_st=a2_st; - reloced_a2_st=a1_st; + if (ARGT_RM8<=arg1<=ARGT_RM64 || ARGT_M8<=arg1<=ARGT_M64 || + ARGT_RM8<=arg2<=ARGT_RM64 || ARGT_M8<=arg2<=ARGT_M64) { + if (ARGT_RM8<=arg2<=ARGT_RM64 || ARGT_M8<=arg2<=ARGT_M64) { + reloced_arg1=arg2; + reloced_arg2=arg1; + reloced_arg1_size=arg2_size; + reloced_arg2_size=arg1_size; + reloced_arg1_st=arg2_st; + reloced_arg2_st=arg1_st; } else { - reloced_a1=a1; - reloced_a2=a2; - reloced_a1_size=a1_size; - reloced_a2_size=a2_size; - reloced_a1_st=a1_st; - reloced_a2_st=a2_st; + reloced_arg1=arg1; + reloced_arg2=arg2; + reloced_arg1_size=arg1_size; + reloced_arg2_size=arg2_size; + reloced_arg1_st=arg1_st; + reloced_arg2_st=arg2_st; } - CatPrint(reloced_a1_st,seg_overrides); - ModrM=*ip++; + CatPrint(reloced_arg1_st,seg_overrides); + ModrM=*rip++; Mod=ModrM>>6 & 3; RM1=ModrM & 7+REX_b; RM2=ModrM>>3 & 7+REX_r; if (Mod<3 && RM1&7==4) - SIB=*ip++; + SIB=*rip++; if (Mod==1) { - disp=*ip(U8 *)++; - CatPrint(reloced_a1_st,"%02X",disp); + disp=*rip(U8 *)++; + CatPrint(reloced_arg1_st,"%02X",disp); } else if (Mod==2) { - disp=*ip(U32 *)++; - CatPrint(reloced_a1_st,"%08X",disp); + disp=*rip(U32 *)++; + CatPrint(reloced_arg1_st,"%08X",disp); } if (tmpins->slash_val<8) RM2=-1; else { ptr=NULL; - if (reloced_a2==ARGT_SREG) { + if (reloced_arg2==ARGT_SREG) { if (RM2<=5) ptr="ST_SEG_REGS"; - } else if (!(ARGT_IMM8<=reloced_a2<=ARGT_IMM64) && - !(ARGT_UIMM8<=reloced_a2<=ARGT_UIMM64)) { - if (reloced_a2_size==8) { + } else if (!(ARGT_IMM8<=reloced_arg2<=ARGT_IMM64) && + !(ARGT_UIMM8<=reloced_arg2<=ARGT_UIMM64)) { + if (reloced_arg2_size==8) { if (REX!=-1) ptr="ST_U8_REX_REGS"; else ptr="ST_U8_REGS"; - } else if (reloced_a2_size==16) + } else if (reloced_arg2_size==16) ptr="ST_U16_REGS"; - else if (reloced_a2_size==32) + else if (reloced_arg2_size==32) ptr="ST_U32_REGS"; - else if (reloced_a2_size==64) + else if (reloced_arg2_size==64) ptr="ST_U64_REGS"; } if (ptr) - CatPrint(reloced_a2_st,"%Z",RM2,ptr); + CatPrint(reloced_arg2_st,"%Z",RM2,ptr); } if (RM1&7==5 && !Mod) { - disp=*ip(I32 *)++; + disp=*rip(I32 *)++; if (seg_size==64) { - disp+=ip; - if (reloced_a2==ARGT_IMM8 || reloced_a2==ARGT_UIMM8) + disp+=rip; + if (reloced_arg2==ARGT_IMM8 || reloced_arg2==ARGT_UIMM8) disp++; - else if (reloced_a2==ARGT_IMM16 || reloced_a2==ARGT_UIMM16) + else if (reloced_arg2==ARGT_IMM16 || reloced_arg2==ARGT_UIMM16) disp+=2; - else if (reloced_a2==ARGT_IMM32 || reloced_a2==ARGT_UIMM32) + else if (reloced_arg2==ARGT_IMM32 || reloced_arg2==ARGT_UIMM32) disp+=4; - else if (reloced_a2==ARGT_IMM64 || reloced_a2==ARGT_UIMM64) + else if (reloced_arg2==ARGT_IMM64 || reloced_arg2==ARGT_UIMM64) disp+=8; } - CatPrint(reloced_a1_st,"[%X]",disp); + CatPrint(reloced_arg1_st,"[%X]",disp); RM1=-1; } else { if (Mod<3) { @@ -483,12 +491,12 @@ U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE) else ptr="ST_U32_REGS"; if (r1==REG_RBP && !Mod) { - disp=*ip(U32 *)++; - CatPrint(reloced_a1_st,"%08X[%Z*%d]",disp,r2,ptr,scale); + disp=*rip(U32 *)++; + CatPrint(reloced_arg1_st,"%08X[%Z*%d]",disp,r2,ptr,scale); } else if (r2==4) - CatPrint(reloced_a1_st,"[%Z]",r1,ptr); + CatPrint(reloced_arg1_st,"[%Z]",r1,ptr); else - CatPrint(reloced_a1_st,"[%Z+%Z*%d]",r1,ptr,r2,ptr,scale); + CatPrint(reloced_arg1_st,"[%Z+%Z*%d]",r1,ptr,r2,ptr,scale); } else { if (opadd==16) ptr="ST_U16_REGS"; @@ -496,153 +504,153 @@ U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE) ptr="ST_U32_REGS"; else ptr="ST_U64_REGS"; - CatPrint(reloced_a1_st,"[%Z]",RM1,ptr); + CatPrint(reloced_arg1_st,"[%Z]",RM1,ptr); } } else { ptr=NULL; - if (reloced_a1_size==8) { + if (reloced_arg1_size==8) { if (REX!=-1) ptr="ST_U8_REX_REGS"; else ptr="ST_U8_REGS"; - } else if (reloced_a1_size==16) + } else if (reloced_arg1_size==16) ptr="ST_U16_REGS"; - else if (reloced_a1_size==32) + else if (reloced_arg1_size==32) ptr="ST_U32_REGS"; - else if (reloced_a1_size==64) + else if (reloced_arg1_size==64) ptr="ST_U64_REGS"; if (ptr) - CatPrint(reloced_a1_st,DefineSub(RM1,ptr)); + CatPrint(reloced_arg1_st,DefineSub(RM1,ptr)); } } } - switch (a1) { + switch (arg1) { case ARGT_IMM8: case ARGT_UIMM8: - imm=*ip(U8 *)++; - CatPrint(a1_st,"%02X",imm); + imm=*rip(U8 *)++; + CatPrint(arg1_st,"%02X",imm); if (tmpins->opcode[0]==0xCD && (ptr=DefineSub(imm,"ST_INT_NAMES"))) - CatPrint(a1_st," %s",ptr); + CatPrint(arg1_st," %s",ptr); break; case ARGT_IMM16: case ARGT_UIMM16: - CatPrint(a1_st,"%04X",*ip(U16 *)++); + CatPrint(arg1_st,"%04X",*rip(U16 *)++); break; case ARGT_IMM32: case ARGT_UIMM32: - CatPrint(a1_st,"%08X",*ip(U32 *)++); + CatPrint(arg1_st,"%08X",*rip(U32 *)++); break; case ARGT_IMM64: case ARGT_UIMM64: - CatPrint(a1_st,"%016X",*ip(I64 *)++); + CatPrint(arg1_st,"%016X",*rip(I64 *)++); break; start: case ARGT_REL8: - disp=*ip(I8 *)++; + disp=*rip(I8 *)++; break; case ARGT_REL16: - disp=*ip(I16 *)++; + disp=*rip(I16 *)++; break; case ARGT_REL32: - disp=*ip(I32 *)++; + disp=*rip(I32 *)++; break; end: - disp+=ip; + disp+=rip; if (IsDbgMode) - CatPrint(a1_st,"%p ",disp); + CatPrint(arg1_st,"%p ",disp); else if (PutSrcLink(disp,512,buf2)) - CatPrint(a1_st,"%s ",buf2); + CatPrint(arg1_st,"%s ",buf2); else - CatPrint(a1_st,"%P ",disp); + CatPrint(arg1_st,"%P ",disp); if (_jmp_dst) *_jmp_dst=disp; break; case ARGT_MOFFS8...ARGT_MOFFS64: - CatPrint(a1_st,seg_overrides); - if (a1_size==8) - disp=*ip(U8 *)++; + CatPrint(arg1_st,seg_overrides); + if (arg1_size==8) + disp=*rip(U8 *)++; else if (opadd==16) - disp=*ip(U16 *)++; + disp=*rip(U16 *)++; else - disp=*ip(U32 *)++; - CatPrint(a1_st,"[%X]",disp); + disp=*rip(U32 *)++; + CatPrint(arg1_st,"[%X]",disp); break; case ARGT_AL ... ARGT_DX: case ARGT_SS ... ARGT_ST0: - CatPrint(a1_st,"%z",a1-ARGT_AL, + CatPrint(arg1_st,"%z",arg1-ARGT_AL, "AL\0AX\0EAX\0RAX\0CL\0DX\0 \0 \0SS\0DS\0ES\0FS\0GS\0CS\0ST0\0"); break; case ARGT_STI: - ip--; - CatPrint(a1_st,"%Z",*ip++ - tmpins->opcode[tmpins->opcode_cnt-1], + rip--; + CatPrint(arg1_st,"%Z",*rip++ - tmpins->opcode[tmpins->opcode_cnt-1], "ST_FSTK_REGS"); break; } - switch (a2) { + switch (arg2) { case ARGT_IMM8: case ARGT_UIMM8: - CatPrint(a2_st,"%02X",*ip(U8 *)++); + CatPrint(arg2_st,"%02X",*rip(U8 *)++); break; case ARGT_IMM16: case ARGT_UIMM16: - CatPrint(a2_st,"%04X",*ip(U16 *)++); + CatPrint(arg2_st,"%04X",*rip(U16 *)++); break; case ARGT_IMM32: case ARGT_UIMM32: - CatPrint(a2_st,"%08X",*ip(U32 *)++); + CatPrint(arg2_st,"%08X",*rip(U32 *)++); break; case ARGT_IMM64: case ARGT_UIMM64: - CatPrint(a2_st,"%016X",*ip(I64 *)++); + CatPrint(arg2_st,"%016X",*rip(I64 *)++); break; case ARGT_MOFFS8...ARGT_MOFFS64: - CatPrint(a2_st,seg_overrides); - if (a2_size==8) - disp=*ip(U8 *)++; + CatPrint(arg2_st,seg_overrides); + if (arg2_size==8) + disp=*rip(U8 *)++; else if (opadd==16) - disp=*ip(U16 *)++; + disp=*rip(U16 *)++; else - disp=*ip(U32 *)++; - CatPrint(a2_st,"[%X]",disp); + disp=*rip(U32 *)++; + CatPrint(arg2_st,"[%X]",disp); break; case ARGT_AL ... ARGT_DX: case ARGT_SS ... ARGT_ST0: - CatPrint(a2_st,"%z",a2-ARGT_AL, + CatPrint(arg2_st,"%z",arg2-ARGT_AL, "AL\0AX\0EAX\0RAX\0CL\0DX\0 \0 \0SS\0DS\0ES\0FS\0GS\0CS\0ST0\0"); break; case ARGT_STI: - ip--; - CatPrint(a2_st,"%Z",*ip++ -tmpins->opcode[tmpins->opcode_cnt-1], + rip--; + CatPrint(arg2_st,"%Z",*rip++ -tmpins->opcode[tmpins->opcode_cnt-1], "ST_FSTK_REGS"); break; } if (tmpins->flags&IEF_ENDING_ZERO) - ip++; + rip++; - if (*a1_st) - CatPrint(line1,"\t%s",a1_st); - if (*a2_st) - CatPrint(line1,",%s",a2_st); + if (*arg1_st) + CatPrint(line1,"\t%s",arg1_st); + if (*arg2_st) + CatPrint(line1,",%s",arg2_st); CatPrint(line1,"\n"); CatPrint(line2,"\n"); if (!just_ins) { - for (i=ip-(*_ip)(I64);i<6;i++) { + for (i=rip-(*_rip)(I64);i<6;i++) { bin_data_area1[i<<1]=CH_SPACE; bin_data_area1[i<<1+1]=CH_SPACE; } - for (i=ip-(*_ip)(I64);i<12;i++) { + for (i=rip-(*_rip)(I64);i<12;i++) { bin_data_area2[(i-6)<<1]=CH_SPACE; bin_data_area2[(i-6)<<1+1]=CH_SPACE; } } StrCpy(buf,line1); - if (!just_ins && ip-(*_ip)(I64)>6) + if (!just_ins && rip-(*_rip)(I64)>6) CatPrint(buf,line2); - *_ip=ip; + *_rip=rip; } -U8 *U(U8 *ip,I64 cnt=20,I64 seg_size=64) +U8 *U(U8 *rip,I64 cnt=20,I64 seg_size=64) {//Unassembles a num of insts. I64 i; U8 buf[1024]; @@ -650,22 +658,22 @@ U8 *U(U8 *ip,I64 cnt=20,I64 seg_size=64) PrintWarn("16-bit unassembly is not well supported.\n"); "$$HL,1$$"; for (i=0;ifilename.name='C'; - "\n\n1) TAD\n2) DLC\n\n"; - switch (GetI64("Staff Member Number:")) { - case 1: - RegWriteBranch("TempleOS/Staff", - "#define PERSONAL_INITIALS \"TAD\"\n" - "#define MACHINE_CFG %d\n", - GetI64("Machine Cfg Number:") - ); - break; - case 2: - RegWriteBranch("TempleOS/Staff", - "#define PERSONAL_INITIALS \"DLC\"\n" - "#define MACHINE_CFG 0\n"); - break; - } - Del("C:/Home/DoDistro.HC.Z"); - Del("D:/Home/DoDistro.HC.Z"); - "\n\n\nAfter Reboot be sure to run MakeDistrosAndBackUp.\n\n"; - PressAKey; - Reboot; //Too dangerous for amateurs until reboot. - } - } - break; - } - if (FileFind("D:/Tmp/Logs/access.log")) { - In("\n\n%C",CH_ESC); - RunFile("::/Demo/WebLogDemo/WebLogRep",, - "D:/Tmp/Logs/*.log","D:/Home/WebLogRep.DD"); - Del("D:/Tmp/Logs/*.log"); - } - if (tos_timestamp) - Blog(TRUE); -} - -DoOnce; diff --git a/Demo/AcctExample/HomeKeyPlugIns.HC b/Demo/AcctExample/HomeKeyPlugIns.HC index f7eef5e..40e7add 100644 --- a/Demo/AcctExample/HomeKeyPlugIns.HC +++ b/Demo/AcctExample/HomeKeyPlugIns.HC @@ -63,7 +63,7 @@ Bool MyPutKey(I64 ch,I64 sc) //You can customize keys. This routine //is called before the main editor - //key handler $LK,"DocPutKey",A="MN:DocPutKey"$(). + //key hndlr $LK,"DocPutKey",A="MN:DocPutKey"$(). //You can intercept any key. //Return TRUE if you completely @@ -146,17 +146,10 @@ Bool MyPutKey(I64 ch,I64 sc) } return TRUE; case SC_F7: - if (sc&SCF_SHIFT) { - if (sc&SCF_KEY_DESC) - KeyDescSet("Cmd /NISTGodMisc2"); - else - NISTGodMisc2; - } else { - if (sc&SCF_KEY_DESC) - KeyDescSet("Cmd /God Misc"); - else - GodMisc; - } + if (sc&SCF_KEY_DESC) + KeyDescSet("Cmd /God Misc"); + else + GodMisc; return TRUE; case SC_F8: if (sc&SCF_SHIFT) { @@ -298,15 +291,15 @@ Bool MyPutKey(I64 ch,I64 sc) return TRUE; case 'p': if (sc&SCF_KEY_DESC) - KeyDescSet("Cmd /JukeBox(Home/Sup1)"); + KeyDescSet("Cmd /JukeBox(Home/Sup1Hymns)"); else - JukeBox("~/Sup1/Sup1Psalmody"); + JukeBox("~/Sup1/Sup1Hymns"); return TRUE; case 'P': if (sc&SCF_KEY_DESC) - KeyDescSet("Cmd /JukeBox(Examples)"); + KeyDescSet("Cmd /JukeBox(Home/Sup1Songs)"); else - JukeBox("::/Apps/Psalmody/Examples"); + JukeBox("~/Sup1/Sup1Songs"); return TRUE; } } diff --git a/Demo/AcctExample/HomeLocalize.HC b/Demo/AcctExample/HomeLocalize.HC index 9c5839b..f134007 100644 --- a/Demo/AcctExample/HomeLocalize.HC +++ b/Demo/AcctExample/HomeLocalize.HC @@ -11,11 +11,11 @@ local_time_offset=-8*60*60*CDATE_FREQ; //Pacific // Remember you can set the time in the BIOS. //$AN,"",A="mouse_move_scale"$adjust these to set mouse move scale -mouse.scale.x=0.5; -mouse.scale.y=0.5; -mouse.scale.z=5.0; //wheel +ms_hard.scale.x=0.5; +ms_hard.scale.y=0.5; +ms_hard.scale.z=5.0; //wheel //don't change these -mouse.prescale.x=mouse.pos.x/mouse.scale.x; -mouse.prescale.y=mouse.pos.y/mouse.scale.y; -mouse.prescale.z=mouse.pos.z/mouse.scale.z; +ms_hard.prescale.x=ms_hard.pos.x/ms_hard.scale.x; +ms_hard.prescale.y=ms_hard.pos.y/ms_hard.scale.y; +ms_hard.prescale.z=ms_hard.pos.z/ms_hard.scale.z; diff --git a/Demo/AcctExample/HomeSys.HC b/Demo/AcctExample/HomeSys.HC index 0096ea5..3e5ab90 100644 --- a/Demo/AcctExample/HomeSys.HC +++ b/Demo/AcctExample/HomeSys.HC @@ -30,7 +30,7 @@ U0 StartUpTasks() WinToTop(user1); WinTileVert; "Boot Time:%7.3fs\n",tS; - XTalk(user1,"Cd;#include \"DoOnce\";\n"); + XTalk(user1,"Cd;#include \"Once\";\n"); Silent; ACInit("/*;!*/Bible.TXT*;!*.TXT"); //No Bible, no uncompressed DD. Silent(OFF); diff --git a/Demo/AcctExample/HomeWrappers.HC b/Demo/AcctExample/HomeWrappers.HC index c16451f..0ce474e 100644 --- a/Demo/AcctExample/HomeWrappers.HC +++ b/Demo/AcctExample/HomeWrappers.HC @@ -1,7 +1,7 @@ #help_index "Cmd Line (Typically)" #define FILEMASK_OFF_LIMITS "!*/Misc/PCIDevices.DD*;!*/Misc/Bible.TXT*;"\ - "!*/Sup1/Sup1Texts/*;!*/Sup1/Sup1Words/*;!*/Sup1/Sup1Bin/*;"\ + "!*/Books?/*;!*/Sup1/Sup1Words/*;!*/Sup1/Sup1Bin/*;"\ "!*/Sup1/Sup1Blog/NumBible.TXT*;!*/God/Vocab.DD*" public I64 F(U8 *needle_str,U8 *fu_flags=NULL) diff --git a/Demo/AcctExample/Once.HC b/Demo/AcctExample/Once.HC new file mode 100644 index 0000000..fbd1dea --- /dev/null +++ b/Demo/AcctExample/Once.HC @@ -0,0 +1,39 @@ +//Place this file in /Home and change +//anything you want. + +//This file is executed by the +//first terminal window upon start-up. +//See $LK,"Once",A="FF:/Home/HomeSys.HC,Once"$ and $LK,"Home Files",A="FF:::/Doc/GuideLines.DD,/Home Files"$. + +// Type("::/Doc/Customize.DD"); + +U0 Tmp() +{ + OnceExe; + switch (sys_boot_src.u16[0]) { + case BOOT_SRC_DVD: + "\nIf you answer 'No' you can play with\n" + "the live CD without installing.\n\n" + "Install onto hard drive "; + if (YorN) { + DocBottom; + if (RunFile("::/Misc/OSInstall",,FALSE)) { + Del("C:/Home/DoDistro.HC.Z"); + Del("D:/Home/DoDistro.HC.Z"); + OnceDrv('C',"\"\n\nRun TOSStaffIns;\n\n\n\";"); + OnceDrv('D',"\"\n\nRun TOSStaffIns;\n\n\n\";"); + if (PressAKey!=CH_SHIFT_ESC) + Reboot; //Too dangerous for amateurs until reboot. + } + } + break; + } + if (FileFind("D:/Tmp/Logs/access.log")) { + In("\n\n%C",CH_ESC); + RunFile("::/Demo/WebLogDemo/WebLogRep",, + "D:/Tmp/Logs/*.log","D:/Home/WebLogRep.DD"); + Del("D:/Tmp/Logs/*.log"); + } +} + +Tmp; diff --git a/Demo/AcctExample/PersonalMenu.DD b/Demo/AcctExample/PersonalMenu.DD index b7040c5..a5a2250 100644 --- a/Demo/AcctExample/PersonalMenu.DD +++ b/Demo/AcctExample/PersonalMenu.DD @@ -1,19 +1,20 @@ -$MA,"Cd ",LM="Cd;Dir;\n"$$MA,"DrvC ",LM="Drv('C');\n"$$MA,"DrvD ",LM="Drv('D');\n"$$MA,"/ ",LM="Cd(\"/\");Dir;\n"$$MA,"Home ",LM="Cd(\"/Home\");Dir;\n"$$MA,"ChgDskT ",LM="ChgDsk('T');\n"$$MA,"MergeD ",LM="S2T(\"C:/*\",\"+r+S\");Merge(\"C:/*;!*/LineRep*\",\"D:/*;!*/LineRep*\",\"+r+d\");\n"$$MA,"MergeT ",LM="S2T(\"C:/*\",\"+r+S\");Merge(\"C:/*;!*/LineRep*\",\"T:/*;!*/LineRep*\",\"+r+d\");\n"$ -$MA,"MakeC ",LM="TOSBootHDIns('C');\n"$$MA+PU,"BootC ",LM="BootRAM(\"C:/Kernel.BIN.C\");"$$MA,"MakeBack",LM="MakeDistrosAndBackUp;\n"$$MA,"PreBack ",LM="PreBackUp;\n"$$MA,"MakeD ",LM="TOSBootHDIns('D');\n"$$MA+PU,"BootD ",LM="BootRAM(\"D:/Kernel.BIN.C\");"$$MA,"CopyDrv ",LM="TOSPromptAndCopyDrv;\n"$$MA,"MakeWeb ",LM="MakeWebSitePartial;\n"$ -$MA,"Kernel ",LM="Cd(\"/Kernel\");Dir;\n"$$MA,"Compiler",LM="Cd(\"/Compiler\");Dir;\n"$$MA,"BlkDev ",LM="Cd(\"/Kernel/BlkDev\");Dir;\n"$$MA,"Mem ",LM="Cd(\"/Kernel/Mem\");Dir;\n"$$MA,"Serial ",LM="Cd(\"/Kernel/SerialDev\");Dir;\n"$$MA,"Bin ",LM="Cd(\"/Home/Sup1/Sup1Bin\");Dir;\n"$$MA,"HDAudio ",LM="Cd(\"/Home/Sup1/Sup1HDAudio\");Dir;\n"$$MA,"Examples",LM="Cd(\"/Home/Sup1/Sup1HDAudio/Examples\");Dir;\n"$ +$MA,"Cd ",LM="Cd;Dir;\n"$$MA,"DrvC ",LM="Drv('C');\n"$$MA,"DrvD ",LM="Drv('D');\n"$$MA,"/ ",LM="Cd(\"/\");Dir;\n"$$MA,"Home ",LM="Cd(\"/Home\");Dir;\n"$$MA,"ChgDskT ",LM="ChgDsk('T');\n"$$MA,"MergeD ",LM="S2T(\"C:/*\",\"+r+S\");Merge(\"C:/*;!*/LineRep*\",\"D:/*;!*/LineRep*\",\"+r+d\");\n"$$MA,"MergeT ",LM="S2T(\"C:/*\",\"+r+S\");Merge(\"C:/*;!*/LineRep*\",\"T:/*;!*/LineRep*\",\"+r+d\");\n"$$MA,"D:/Wb ",LM="Cd(\"D:/Wb\");Dir;\n"$ +$MA,"MakeC ",LM="TOSBootHDIns('C');\n"$$MA+PU,"BootC ",LM="BootRAM(\"C:/Kernel.BIN.C\");"$$MA,"Regen ",LM="TOSRegen;\n"$$MA,"PreBack ",LM="PreBackUp;\n"$$MA,"MakeD ",LM="TOSBootHDIns('D');\n"$$MA+PU,"BootD ",LM="BootRAM(\"D:/Kernel.BIN.C\");"$$MA,"CopyDrv ",LM="TOSPromptAndCopyDrv;\n"$$MA,"MakeWeb ",LM="MakeWebSitePartial;\n"$ +$MA,"Kernel ",LM="Cd(\"/Kernel\");Dir;\n"$$MA,"Compiler",LM="Cd(\"/Compiler\");Dir;\n"$$MA,"BlkDev ",LM="Cd(\"/Kernel/BlkDev\");Dir;\n"$$MA,"Mem ",LM="Cd(\"/Kernel/Mem\");Dir;\n"$$MA,"Serial ",LM="Cd(\"/Kernel/SerialDev\");Dir;\n"$$MA,"Bin ",LM="Cd(\"/Home/Sup1/Sup1Bin\");Dir;\n"$$MA,"HDAudio ",LM="Cd(\"/Home/Sup1/Sup1HDAudio\");Dir;\n"$$MA,"Examples",LM="Cd(\"/Home/Sup1/Sup1HDAudio/Examples\");Dir;\n"$$MA,"Dist ",LM="Cd(\"/Home/Sup1/Sup1Distro\");Dir;\n"$ $MA,"Adam ",LM="Cd(\"/Adam\");Dir;\n"$$MA,"AutoComp",LM="Cd(\"/Adam/AutoComplete\");Dir;\n"$$MA,"Ctrls ",LM="Cd(\"/Adam/Ctrls\");Dir;\n"$$MA,"ABlkDev ",LM="Cd(\"/Adam/ABlkDev\");Dir;\n"$$MA,"DolDoc ",LM="Cd(\"/Adam/DolDoc\");Dir;\n"$$MA,"Gr ",LM="Cd(\"/Adam/Gr\");Dir;\n"$$MA,"God ",LM="Cd(\"/Adam/God\");Dir;\n"$$MA,"Snd ",LM="Cd(\"/Adam/Snd\");Dir;\n"$$MA,"Boot ",LM="Cd(\"/Adam/Opt/Boot\");Dir;\n"$$MA,"Utils ",LM="Cd(\"/Adam/Opt/Utils\");Dir;\n"$ -$LK+X,"ChangeLg",A="FI:::/Doc/ChangeLog.DD"$$MA,"Blog ",LM="Blog;\n"$$MA,"EdGod ",LM="Ed(\"D:/Home/God.DD\");\n"$$MA,"BlogDir ",LM="Cd(\"/Home/Web/TAD/BlogDir\");Dir;\n"$$MA,"Partial ",LM="MakeWebSitePartial;\n"$$MA,"CodeWalk",LM="CodeWalkThru;\n"$$MA,"AfterEgp",LM="AfterEgyptInAction;\n"$$MA,"TOSTheme",LM="TempleOSTheme;\n"$$MA,"Videos ",LM="Cd(\"/Home/Sup1/Sup1Videos\");Dir;\n"$ -$MA,"Web ",LM="Cd(\"/Home/Web\");Dir;\n"$$MA,"TAD ",LM="Cd(\"/Home/Web/TAD\");Dir;\n"$$MA,"Sup1 ",LM="Cd(\"/Home/Sup1\");Dir;\n"$$MA,"Blog ",LM="Cd(\"/Home/Sup1/Sup1Blog\");Dir;\n"$$MA,"Code ",LM="Cd(\"/Home/Sup1/Sup1CodeScraps\");Dir;\n"$$MA,"Dist ",LM="Cd(\"/Home/Sup1/Sup1Distro\");Dir;\n"$$MA,"Games ",LM="Cd(\"/Home/Sup1/Sup1Games\");Dir;\n"$$MA,"Graphics",LM="Cd(\"/Home/Sup1/Sup1Graphics\");Dir;\n"$$MA,"Psalmody",LM="Cd(\"/Home/Sup1/Sup1Psalmody\");Dir;\n"$$MA,"Utils ",LM="Cd(\"/Home/Sup1/Sup1Utils\");Dir;\n"$ -$MA,"Apps ",LM="Cd(\"/Apps\");Dir;\n"$$MA,"AfterEgp",LM="Cd(\"/Apps/AfterEgypt\");Dir;\n"$$MA,"Budget ",LM="Cd(\"/Apps/Budget\");Dir;\n"$$MA,"GrModels",LM="Cd(\"/Apps/GrModels\");Dir;\n"$$MA,"KeepAway",LM="Cd(\"/Apps/KeepAway\");Dir;\n"$$MA,"Logic ",LM="Cd(\"/Apps/Logic\");Dir;\n"$$MA,"Psalmody",LM="Cd(\"/Apps/Psalmody\");Dir;\n"$$MA,"Span ",LM="Cd(\"/Apps/Span\");Dir;\n"$$MA,"Strut ",LM="Cd(\"/Apps/Strut\");Dir;\n"$$MA,"TimeClk ",LM="Cd(\"/Apps/TimeClock\");Dir;\n"$ -$MA,"TimeOut ",LM="Cd(\"/Apps/TimeOut\");Dir;\n"$$MA,"ToTheFrt",LM="Cd(\"/Apps/ToTheFront\");Dir;\n"$$MA,"Vocab ",LM="Cd(\"/Apps/Vocabulary\");Dir;\n"$$MA,"XCaliber",LM="Cd(\"/Apps/X-Caliber\");Dir;\n"$ +$LK+X,"ChangeLg",A="FI:::/Doc/ChangeLog.DD"$$MA,"Blog ",LM="Blog;\n"$$MA,"EdGod ",LM="Ed(\"D:/Home/God.DD\");\n"$$MA,"BlogDir ",LM="Cd(\"/Home/Web/TAD/BlogDir\");Dir;\n"$$MA,"Partial ",LM="MakeWebSitePartial;\n"$$MA,"CodeWalk",LM="CodeWalkThru;\n"$$MA,"TOSTheme",LM="TempleOSTheme;\n"$$MA,"Videos ",LM="Cd(\"/Home/Sup1/Sup1Videos\");Dir;\n"$ +$MA,"Web ",LM="Cd(\"/Home/Web\");Dir;\n"$$MA,"TAD ",LM="Cd(\"/Home/Web/TAD\");Dir;\n"$$MA,"DLC ",LM="Cd(\"/Home/Web/DLC\");Dir;\n"$$MA,"AppStore",LM="Cd(\"/Home/Web/AppStore\");Dir;\n"$$MA,"Sup1 ",LM="Cd(\"/Home/Sup1\");Dir;\n"$$MA,"Blog ",LM="Cd(\"/Home/Sup1/Sup1Blog\");Dir;\n"$$MA,"Code ",LM="Cd(\"/Home/Sup1/Sup1CodeScraps\");Dir;\n"$$MA,"Games ",LM="Cd(\"/Home/Sup1/Sup1Games\");Dir;\n"$$MA,"Graphics",LM="Cd(\"/Home/Sup1/Sup1Graphics\");Dir;\n"$$MA,"Utils ",LM="Cd(\"/Home/Sup1/Sup1Utils\");Dir;\n"$ +$MA,"Apps ",LM="Cd(\"/Apps\");Dir;\n"$$MA,"Budget ",LM="Cd(\"/Apps/Budget\");Dir;\n"$$MA,"GrModels",LM="Cd(\"/Apps/GrModels\");Dir;\n"$$MA,"KeepAway",LM="Cd(\"/Apps/KeepAway\");Dir;\n"$$MA,"Logic ",LM="Cd(\"/Apps/Logic\");Dir;\n"$$MA,"Psalmody",LM="Cd(\"/Apps/Psalmody\");Dir;\n"$$MA,"Span ",LM="Cd(\"/Apps/Span\");Dir;\n"$$MA,"Strut ",LM="Cd(\"/Apps/Strut\");Dir;\n"$$MA,"TimeClk ",LM="Cd(\"/Apps/TimeClock\");Dir;\n"$ +$MA,"Titan ",LM="Cd(\"/Apps/Titanium\");Dir;\n"$$MA,"ToTheFrt",LM="Cd(\"/Apps/ToTheFront\");Dir;\n"$$MA,"Vocab ",LM="Cd(\"/Apps/Vocabulary\");Dir;\n"$$MA,"XCaliber",LM="Cd(\"/Apps/X-Caliber\");Dir;\n"$$MA,"Books1 ",LM="Cd(\"/Home/Books1\");Dir;\n"$$MA,"Books2 ",LM="Cd(\"/Home/Books2\");Dir;\n"$$MA,"Hymns ",LM="Cd(\"/Home/Sup1/Sup1Hymns\");Dir;\n"$$MA,"Songs ",LM="Cd(\"/Home/Sup1/Sup1Songs\");Dir;\n"$ $MA,"Demo ",LM="Cd(\"/Demo\");Dir;\n"$$MA,"AcctEmpl",LM="Cd(\"/Demo/AcctExample\");Dir;\n"$$MA,"Asm ",LM="Cd(\"/Demo/Asm\");Dir;\n"$$MA,"DocDoc ",LM="Cd(\"/Demo/DolDoc\");Dir;\n"$$MA,"Dsk ",LM="Cd(\"/Demo/Dsk\");Dir;\n"$$MA,"Games ",LM="Cd(\"/Demo/Games\");Dir;\n"$$MA,"Graphics",LM="Cd(\"/Demo/Graphics\");Dir;\n"$$MA,"InFile ",LM="Cd(\"/Demo/InFile\");Dir;\n"$$MA,"Lectures",LM="Cd(\"/Demo/Lectures\");Dir;\n"$$MA,"MultCore",LM="Cd(\"/Demo/MultiCore\");Dir;\n"$ $MA,"RevFile ",LM="Cd(\"/Demo/RevFileDemo\");Dir;\n"$$MA,"Snd ",LM="Cd(\"/Demo/Snd\");Dir;\n"$$MA,"SortFile",LM="Cd(\"/Demo/SortFileDemo\");Dir;\n"$$MA,"Template",LM="Cd(\"/Demo/Templates\");Dir;\n"$$MA,"HtmlTXT ",LM="Cd(\"/Demo/ToHtmlToTXTDemo\");Dir;\n"$$MA,"WebLog ",LM="Cd(\"/Demo/WebLogDemo\");Dir;\n"$$MA,"Stadium ",LM="Cd(\"/Demo/Games/Stadium\");Dir;\n"$ $MA,"Doc ",LM="Cd(\"/Doc\");Dir;\n"$$MA,"Misc ",LM="Cd(\"/Misc\");Dir;\n"$$MA,"Tour ",LM="Cd(\"/Misc/Tour\");Dir;\n"$$MA,"Tmp ",LM="Cd(\"/Tmp\");Dir;\n"$$MA,"ScrnShot",LM="Cd(\"/Tmp/ScrnShots\");Dir;\n"$$MA,"DelScrSt",LM="Del(\"D:/Tmp/*.SND\");DelTree(\"D:/Tmp/ScrnShots\");MkDir(\"D:/Tmp/ScrnShots\");Del(\"C:/Tmp/*.SND\");DelTree(\"C:/Tmp/ScrnShots\");MkDir(\"C:/Tmp/ScrnShots\");\n"$$MA,"0000Boot",LM="Cd(\"/0000Boot\");Dir;\n"$$MA,"Linux ",LM="Cd(\"/Linux\");Dir;\n"$ -$MA,"LinxDict",LM="Adam(\"GodInit(\\\"~/Sup1/Sup1Words/LinuxDict.TXT**\\\");\");\n"$$MA,"August ",LM="Adam(\"GodInit(\\\"~/Sup1/Sup1Words/AugustWords.TXT**\\\");\");\n"$$MA,"Happy ",LM="Adam(\"GodInit(\\\"~/Sup1/Sup1Words/HappyWords.TXT*\\\");\");\n"$$MA,"Yiddish ",LM="Adam(\"GodInit(\\\"~/Sup1/Sup1Words/Yiddish.TXT*\\\");\");\n"$$MA,"Bible ",LM="Adam(\"GodInit(\\\"~/Sup1/Sup1Words/BibleWords.TXT*\\\");\");\n"$$MA,"Huck ",LM="Adam(\"GodInit(\\\"~/Sup1/Sup1Words/HuckWords.TXT*\\\");\");\n"$$MA,"Ingreds ",LM="Adam(\"GodInit(\\\"~/Sup1/Sup1Words/Ingredients.TXT*\\\");\");\n"$$MA,"Chess ",LM="Adam(\"GodInit(\\\"~/Sup1/Sup1Words/Chess.DD*\\\");\");\n"$$MA,"Texts ",LM="Cd(\"/Home/Sup1/Sup1Texts\");Dir;\n"$$MA,"Words ",LM="Cd(\"/Home/Sup1/Sup1Words\");Dir;\n"$ +$MA,"LinxDict",LM="Adam(\"GodInit(\\\"~/Sup1/Sup1Words/LinuxDict.TXT**\\\");\");\n"$$MA,"August ",LM="Adam(\"GodInit(\\\"~/Sup1/Sup1Words/AugustWords.TXT**\\\");\");\n"$$MA,"Happy ",LM="Adam(\"GodInit(\\\"~/Sup1/Sup1Words/HappyWords.TXT*\\\");\");\n"$$MA,"Yiddish ",LM="Adam(\"GodInit(\\\"~/Sup1/Sup1Words/Yiddish.TXT*\\\");\");\n"$$MA,"Bible ",LM="Adam(\"GodInit(\\\"~/Sup1/Sup1Words/BibleWords.TXT*\\\");\");\n"$$MA,"Huck ",LM="Adam(\"GodInit(\\\"~/Sup1/Sup1Words/HuckWords.TXT*\\\");\");\n"$$MA,"Ingreds ",LM="Adam(\"GodInit(\\\"~/Sup1/Sup1Words/Ingredients.TXT*\\\");\");\n"$$MA,"Chess ",LM="Adam(\"GodInit(\\\"~/Sup1/Sup1Words/Chess.DD*\\\");\");\n"$$MA,"Words ",LM="Cd(\"/Home/Sup1/Sup1Words\");Dir;\n"$ $MA,"MakeStd ",LM="MakeStdDistro;MkDir(\"D:/Wb\");Move(TOS_ISO_NAME,\"D:/Wb/TempleOSCD.ISO\");\n"$$MA,"MakeStRS",LM="MakeStdRedSeaDistro;MkDir(\"D:/Wb\");Move(TOS_ISO_C_NAME,\"D:/Wb/TempleOSCDRS.ISO\");\n"$$MA,"MakeUlt ",LM="MakeUltraDistro;MkDir(\"D:/Wb\");Move(TOS_ISO_NAME,\"D:/Wb/TempleOSUltra.ISO\");\n"$$MA,"MakeUtRS",LM="MakeUltraRedSeaDistro;MkDir(\"D:/Wb\");Move(TOS_ISO_C_NAME,\"D:/Wb/TempleOSUltraRS.ISO\");\n"$$MA,"MakeStaf",LM="MakeStaffDistro;MkDir(\"D:/Wb\");Move(TOS_ISO_NAME,\"D:/Wb/TempleOSStaff.ISO\");\n"$$MA,"MakeDbg ",LM="MakeDbgDistro;MkDir(\"D:/Wb\");Move(TOS_ISO_NAME,\"D:/Wb/TempleOSDbg.ISO\");\n"$ $MA,"BurnStd ",LM="MakeStdDistro;DVDImageWrite('T',TOS_ISO_NAME);\n"$$MA,"BurnStRS",LM="MakeStdRedSeaDistro;DVDImageWrite('T',TOS_ISO_C_NAME);\n"$$MA,"BurnUlt ",LM="MakeUltraDistro;DVDImageWrite('T',TOS_ISO_NAME);\n"$$MA,"BurnUtRS",LM="MakeUltraRedSeaDistro;DVDImageWrite('T',TOS_ISO_C_NAME);\n"$$MA,"BurnStaf",LM="MakeStaffDistro;DVDImageWrite('T',TOS_ISO_NAME);\n"$$MA,"BurnDbg ",LM="MakeDbgDistro;DVDImageWrite('T',TOS_ISO_NAME);\n"$ + $FG,5$Fun Games$FG$ @@ -21,8 +22,8 @@ $MA,"BurnStd ",LM="MakeStdDistro;DVDImageWrite('T',TOS_ISO_NAME);\n"$$MA,"BurnSt -$SP+PU," Egypt",LM="#include \"::/Apps/AfterEgypt/Run\"",BI=1$ $SP+PU,"Frankenstein",LM="#include \"::/Demo/Games/CastleFrankenstein\"",BI=2$ $SP+PU,"ZoneOut",LM="#include \"::/Demo/Games/ZoneOut\"",BI=3$ +$SP+PU,"Titanium",LM="#include \"::/Apps/Titanium/Run\"",BI=1$ $SP+PU,"Diamond",LM="#include \"::/Demo/Games/BlackDiamond\"",BI=2$ $SP+PU," Bat",LM="#include \"::/Demo/Games/FlapBat\"",BI=3$ $SP+PU,"Varoom",LM="#include \"::/Demo/Games/Varoom\"",BI=4$ @@ -30,24 +31,24 @@ $SP+PU," Egypt",LM="#include \"::/Apps/AfterEgypt/Run\"",BI=1$ $SP+PU,"Frankenst -$SP+PU,"Varoom",LM="#include \"::/Demo/Games/Varoom\"",BI=4$ $SP+PU,"Diamond",LM="#include \"::/Demo/Games/BlackDiamond\"",BI=5$ $SP+PU,"Lines",LM="#include \"::/Demo/Games/BattleLines\"",BI=6$ $SP+PU,"TimeOut",LM="#include \"::/Apps/TimeOut/Run\"",BI=7$ $SP+PU," Bat",LM="#include \"::/Demo/Games/FlapBat\"",BI=8$ +$SP+PU,"FlatTops",LM="#include \"::/Demo/Games/FlatTops\"",BI=5$ $SP+PU," Golf ",LM="#include \"::/Demo/Games/BomberGolf\"",BI=6$ $SP+PU,"KeepAway",LM="#include \"::/Apps/KeepAway/Run\"",BI=7$ $SP+PU,"RawHide",LM="#include \"::/Demo/Games/RawHide\"\n",BI=8$ -$SP+PU,"FlatTops",LM="#include \"::/Demo/Games/FlatTops\"",BI=9$ $SP+PU," Golf ",LM="#include \"::/Demo/Games/BomberGolf\"",BI=10$ $SP+PU,"Strut",LM="#include \"::/Apps/Strut/Run\"",BI=11$ $SP+PU,"TheDead",LM="#include \"::/Demo/Games/TheDead\"",BI=12$ $SP+PU,"DunGen",LM="#include \"::/Demo/Games/DunGen\"",BI=13$ +$SP+PU,"X-Caliber",LM="#include \"::/Apps/X-Caliber/Run\"",BI=9$ $SP+PU,"Wenceslas",LM="#include \"::/Demo/Games/Wenceslas\"",BI=10$ $SP+PU,"Lines",LM="#include \"::/Demo/Games/BattleLines\"",BI=11$ -$SP+PU," Talons",LM="#include \"::/Demo/Games/Talons\"",BI=14$ $SP+PU," Span ",LM="#include \"::/Apps/Span/Run\"",BI=15$ $SP+PU,"RawHide",LM="#include \"::/Demo/Games/RawHide\"\n",BI=16$ $SP+PU,"KeepAway",LM="#include \"::/Apps/KeepAway/Run\"",BI=17$ + $FG,5$Unfun Games$FG$ @@ -56,8 +57,8 @@ $SP+PU," Talons",LM="#include \"::/Demo/Games/Talons\"",BI=14$ $SP+PU," Span ", -$SP+PU,"X-Caliber",LM="#include \"::/Apps/X-Caliber/Run\"",BI=18$ $SP+PU,"ToTheFront",LM="#include \"::/Apps/ToTheFront/Run\"",BI=19$ $SP+PU,"Wenceslas",LM="#include \"::/Demo/Games/Wenceslas\"",BI=20$ +$SP+PU," Talons",LM="#include \"::/Demo/Games/Talons\"",BI=12$ $SP+PU,"Frankenstein",LM="#include \"::/Demo/Games/CastleFrankenstein\"",BI=13$ $SP+PU,"ZoneOut",LM="#include \"::/Demo/Games/ZoneOut\"",BI=14$ @@ -66,346 +67,40 @@ $SP+PU,"X-Caliber",LM="#include \"::/Apps/X-Caliber/Run\"",BI=18$ $SP+PU,"ToTheF -$SP+PU,"JukeBox",LM="#include \"::/Apps/Psalmody/Load\";JukeBox(\"::/Apps/Psalmody/Examples\");",BI=21$ $SP+PU,"Psalmody",LM="#include \"::/Apps/Psalmody/Run\";",BI=22$ $SP+PU,"Logic",LM="#include \"::/Apps/Logic/Run\"",BI=23$ $SP+PU,"Models",LM="#include \"::/Apps/GrModels/Run\";View;",BI=24$ $SP+PU,"Vocab",LM="#include \"::/Apps/Vocabulary/Run\"",BI=25$ +$SP+PU,"ToTheFront",LM="#include \"::/Apps/ToTheFront/Run\"",BI=15$ $SP+PU," Span ",LM="#include \"::/Apps/Span/Run\"",BI=16$ $SP+PU,"Checkers",LM="#include \"::/Demo/Games/TreeCheckers.HC.Z\"",BI=17$ $SP+PU,"Digits",LM="#include \"::/Demo/Games/Digits\"",BI=18$ + $FG,5$Code Scraps$FG$ -$SP+PU,"BigGuns",LM="#include \"::/Demo/Games/BigGuns\"",BI=26$ $SP+PU,"Budget",LM="#include \"::/Apps/Budget/Run\"",BI=27$ $SP+PU,"Digits",LM="#include \"::/Demo/Games/Digits\"",BI=28$ $SP+PU,"Checkers",LM="#include \"::/Demo/Games/TreeCheckers.HC.Z\"",BI=29$ -$MA,"TestSuit",LM="#include \"::/Misc/OSTestSuite\";\n"$$MA,"TakeTour",LM="Cd(\"::/Misc/Tour\");;InFile(\"Tour\");\n"$$MA+PU,"PsalSup1",LM="#include \"::/Apps/Psalmody/Load\";Psalmody(\"~/Sup1/Sup1Psalmody\");"$$MA,"Comics ",LM="Cd(\"/Home/Sup1/Sup1Comics\");Dir;\n"$$MA-X+PU,"SymAlpha",LM="DocMax;Who;View;"$$MA-X+PU,"SymNum ",LM="DocMax;Who(\"+m\");View;"$ -yÓÿÿÿÜÿÿÿ<H÷ÿÿÿ'ûÿÿÿ÷ÿÿÿõÿÿÿüÿÿÿ õÿÿÿ'ûÿÿÿ ' - èÿÿÿòÿÿÿèÿÿÿüÿÿÿèÿÿÿèÿÿÿáÿÿÿúÿÿÿáÿÿÿúÿÿÿ èÿÿÿáÿÿÿèÿÿÿüÿÿÿèÿÿÿòÿÿÿèÿÿÿüÿÿÿúÿÿÿõÿÿÿ÷ÿÿÿ  $$÷ÿÿÿ$õÿÿÿ$ èÿÿÿõÿÿÿèÿÿÿòÿÿÿüÿÿÿõÿÿÿüÿÿÿ üÿÿÿéÿÿÿ üÿÿÿéÿÿÿ ÿÿÿÿéÿÿÿ ÿÿÿÿéÿÿÿõÿÿÿÿÿÿÿòÿÿÿÿÿÿÿûÿÿÿãÿÿÿýÿÿÿåÿÿÿãÿÿÿÿÿÿÿãÿÿÿåÿÿÿúÿÿÿáÿÿÿþÿÿÿãÿÿÿõÿÿÿ$÷ÿÿÿ$÷ÿÿÿ' $$õÿÿÿ'' -' ' -     !!&''"#%$$#       ! - - - $%*$*+'&('()&(( $++ -0/.112-,7 765343! 3 45833!839;:7;766;;1  ¸ÿÿÿøÿÿÿCastle¾éÿÿÿâÿÿÿ6R äÿÿÿ äÿÿÿ îÿÿÿ îÿÿÿ  ôÿÿÿÛÿÿÿ ôÿÿÿÛÿÿÿ äÿÿÿÛÿÿÿÛÿÿÿôÿÿÿäÿÿÿîÿÿÿîÿÿÿôÿÿÿ ÷ÿÿÿ ûÿÿÿ îÿÿÿ éÿÿÿ  óÿÿÿõÿÿÿäÿÿÿõÿÿÿäÿÿÿõÿÿÿîÿÿÿõÿÿÿîÿÿÿõÿÿÿôÿÿÿÛÿÿÿõÿÿÿôÿÿÿÛÿÿÿõÿÿÿñÿÿÿäÿÿÿñÿÿÿÛÿÿÿñÿÿÿÛÿÿÿñÿÿÿôÿÿÿäÿÿÿñÿÿÿîÿÿÿñÿÿÿîÿÿÿñÿÿÿôÿÿÿñÿÿÿõÿÿÿ÷ÿÿÿõÿÿÿûÿÿÿõÿÿÿîÿÿÿõÿÿÿéÿÿÿõÿÿÿéÿÿÿõÿÿÿóÿÿÿõÿÿÿóÿÿÿéÿÿÿ óÿÿÿõÿÿÿÿÿÿÿ - -ÿÿÿÿ*ÿÿÿÿ -* -**ÿÿÿÿ    -        -   - -    $"$#"!  !"!#"$#! !    "!"%++&%%'&&(''(()),),**,*+-$$-$'()')&3/..232.11523400/3451104-"V ëÿÿÿçÿÿÿ`Œúÿÿÿ úÿÿÿ úÿÿÿúÿÿÿ ÿÿÿÿ ÿÿÿÿ ÿÿÿÿ ÿÿÿÿÿÿÿÿ ÿÿÿÿ ÿÿÿÿÿÿÿÿ      ðÿÿÿúÿÿÿöÿÿÿúÿÿÿöÿÿÿúÿÿÿðÿÿÿúÿÿÿóÿÿÿÿÿÿÿóÿÿÿÿÿÿÿ ÿÿÿÿ ÷ÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿóÿÿÿÿÿÿÿóÿÿÿÿÿÿÿÿÿÿÿðÿÿÿöÿÿÿöÿÿÿðÿÿÿóÿÿÿóÿÿÿ ÷ÿÿÿ÷ÿÿÿóÿÿÿóÿÿÿúÿÿÿäÿÿÿ úÿÿÿäÿÿÿ úÿÿÿïÿÿÿúÿÿÿïÿÿÿ ùÿÿÿâÿÿÿ ùÿÿÿßÿÿÿùÿÿÿßÿÿÿùÿÿÿâÿÿÿùÿÿÿñÿÿÿ ùÿÿÿñÿÿÿ ÿÿÿÿÿÿÿÿäÿÿÿ äÿÿÿ ïÿÿÿïÿÿÿ âÿÿÿ ßÿÿÿßÿÿÿâÿÿÿñÿÿÿ ñÿÿÿ ðÿÿÿúÿÿÿäÿÿÿöÿÿÿúÿÿÿäÿÿÿöÿÿÿúÿÿÿïÿÿÿðÿÿÿúÿÿÿïÿÿÿóÿÿÿùÿÿÿâÿÿÿóÿÿÿùÿÿÿßÿÿÿùÿÿÿßÿÿÿ÷ÿÿÿùÿÿÿâÿÿÿ÷ÿÿÿùÿÿÿñÿÿÿóÿÿÿùÿÿÿñÿÿÿóÿÿÿÿÿÿÿÿÿÿÿðÿÿÿäÿÿÿöÿÿÿäÿÿÿöÿÿÿïÿÿÿðÿÿÿïÿÿÿóÿÿÿâÿÿÿóÿÿÿßÿÿÿßÿÿÿ÷ÿÿÿâÿÿÿ÷ÿÿÿñÿÿÿóÿÿÿñÿÿÿóÿÿÿ        -      - $%&&'$%$$$'$%%&&'&#!"!# #     /-.-/,/*,,*++)(+*)+(+ + +(!.-.!" + + ,*)*<=>>?<1033211=<<01<?330<1=2=>2>233?>;9:9;8867754765GEFEGDGBDDBCCA@CBA4C@C474C7C4@9FEF9:8C7C8D5BAB56TUVVWTIHKKJIIUTTHITWKKHTIUJUVJVJKKWVSRQQPSPONOLMOMN_^]]\__\Z\[Z[XY[YZLX[[OLLO[[XLQ]^^RQPO[[\PMYZZNM P88P654@@A5LMYYXLC ÐÿÿÿøÿÿÿBlackÒÿÿÿÄÿÿÿ#4ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ      ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôáÿÿÿÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÔÿÿÿøÿÿÿBattle¾Úÿÿÿâÿÿÿ6R äÿÿÿ äÿÿÿ îÿÿÿ îÿÿÿ  ôÿÿÿÛÿÿÿ ôÿÿÿÛÿÿÿ äÿÿÿÛÿÿÿÛÿÿÿôÿÿÿäÿÿÿîÿÿÿîÿÿÿôÿÿÿ ÷ÿÿÿ ûÿÿÿ îÿÿÿ éÿÿÿ  óÿÿÿõÿÿÿäÿÿÿõÿÿÿäÿÿÿõÿÿÿîÿÿÿõÿÿÿîÿÿÿõÿÿÿôÿÿÿÛÿÿÿõÿÿÿôÿÿÿÛÿÿÿõÿÿÿñÿÿÿäÿÿÿñÿÿÿÛÿÿÿñÿÿÿÛÿÿÿñÿÿÿôÿÿÿäÿÿÿñÿÿÿîÿÿÿñÿÿÿîÿÿÿñÿÿÿôÿÿÿñÿÿÿõÿÿÿ÷ÿÿÿõÿÿÿûÿÿÿõÿÿÿîÿÿÿõÿÿÿéÿÿÿõÿÿÿéÿÿÿõÿÿÿóÿÿÿõÿÿÿóÿÿÿéÿÿÿ óÿÿÿõÿÿÿÿÿÿÿ - -ÿÿÿÿ*ÿÿÿÿ -* -**ÿÿÿÿ    -        -   - -    $"$#"!  !"!#"$#! !    "!"%++&%%'&&(''(()),),**,*+-$$-$'()')&3/..232.11523400/3451104-"´ÿÿÿ²ÿÿÿMPÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿºÚÿÿÿèÿÿÿ%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ" -ÔÿÿÿÌÿÿÿ4.ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿb -ÌÿÿÿÆÿÿÿ-7ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ rØÿÿÿÚÿÿÿ#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿ ÿ ÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ²ÒÿÿÿÞÿÿÿ'$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿ ÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿ ÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿR ÄÿÿÿÉÿÿÿ88ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ -Ùÿÿÿêÿÿÿ!ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿ + $SP+PU,"Strut",LM="#include \"::/Apps/Strut/Run\"",BI=19$ $SP+PU,"BigGuns",LM="#include \"::/Demo/Games/BigGuns\"",BI=20$ $SP+PU,"TheDead",LM="#include \"::/Demo/Games/TheDead\"",BI=21$ $SP+PU,"DunGen",LM="#include \"::/Demo/Games/DunGen\"",BI=22$ $SP+PU,"Models",LM="#include \"::/Apps/GrModels/Run\";View;",BI=23$ + $FG,5$Nongames$FG$ - -ÿÿÿ - - +$SP+PU,"JukeBox",LM="#include \"::/Apps/Psalmody/Load\";JukeBox(\"::/Apps/Psalmody/Examples\");",BI=24$ $SP+PU,"Psalmody",LM="#include \"::/Apps/Psalmody/Run\";",BI=25$ $SP+PU,"Budget",LM="#include \"::/Apps/Budget/Run\"",BI=26$ $SP+PU,"Logic",LM="#include \"::/Apps/Logic/Run\"",BI=27$ $SP+PU,"Vocab",LM="#include \"::/Apps/Vocabulary/Run\"",BI=28$ - -ÿÿÿ - - - - - - - - - - - - - - - - - - - -ÿÿÿ - - - - - - - - - - - - - - - - - - - - -ÿÿÿ - - - - - - - - - - - - - - - - - - - - - -ÿÿÿÿ - - - - - - - - - - - - - - - - - - - -ÿÿÿÿ - - - - - - - - - - - - - - - - - - -ÿÿÿÿ - - - - - - - - - - - - - - - - - - - - - -ÿÿÿ - - - - - - - - - - - - - - - - - - - - - -ÿÿÿ - - - - - - - - - - - - - - - - - - -ÿÿÿ - - - - - - - - - - - - - - - - -ÿÿÿ - - - - - - - - - - - - - -ÿÿ - -ÿÿÿÿÿ - - - - - - - - - - - -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ - - - - -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúÕÿÿÿäÿÿÿ%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿ ÿÿÿÿÿ ÿÿÿÿ ÿÿ ÿÿ  - - - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - - - -ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’ÛÿÿÿÀÿÿÿ<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ"ÏÿÿÿÑÿÿÿ)+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’ÔÿÿÿÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÆÿÿÿÖÿÿÿ4$ ÐÿÿÿøÿÿÿTreeÖéÿÿÿåÿÿÿp¨üÿÿÿíÿÿÿíÿÿÿüÿÿÿòÿÿÿòÿÿÿüÿÿÿíÿÿÿýÿÿÿíÿÿÿýÿÿÿüÿÿÿòÿÿÿýÿÿÿòÿÿÿýÿÿÿúÿÿÿòÿÿÿòÿÿÿúÿÿÿúÿÿÿòÿÿÿýÿÿÿòÿÿÿýÿÿÿúÿÿÿýÿÿÿýÿÿÿ÷ÿÿÿôÿÿÿùÿÿÿõÿÿÿöÿÿÿûÿÿÿýÿÿÿøÿÿÿüÿÿÿüÿÿÿ÷ÿÿÿòÿÿÿùÿÿÿóÿÿÿÿÿÿÿöÿÿÿùÿÿÿûÿÿÿøÿÿÿúÿÿÿúÿÿÿöÿÿÿüÿÿÿýÿÿÿøÿÿÿýÿÿÿüÿÿÿôÿÿÿöÿÿÿöÿÿÿõÿÿÿöÿÿÿùÿÿÿüÿÿÿøÿÿÿúÿÿÿûÿÿÿôÿÿÿýÿÿÿõÿÿÿöÿÿÿþÿÿÿôÿÿÿôÿÿÿÿÿÿÿöÿÿÿöÿÿÿõÿÿÿóÿÿÿòÿÿÿõÿÿÿñÿÿÿôÿÿÿýÿÿÿöÿÿÿöÿÿÿþÿÿÿõÿÿÿóÿÿÿÿÿÿÿòÿÿÿõÿÿÿñÿÿÿóÿÿÿóÿÿÿÿÿÿÿúÿÿÿúÿÿÿôÿÿÿþÿÿÿôÿÿÿýÿÿÿûÿÿÿûÿÿÿúÿÿÿúÿÿÿûÿÿÿûÿÿÿ  úÿÿÿýÿÿÿûÿÿÿ þÿÿÿ úÿÿÿÿÿÿÿýÿÿÿþÿÿÿûÿÿÿ þÿÿÿ ûÿÿÿ þÿÿÿ ûÿÿÿ þÿÿÿ ûÿÿÿ þÿÿÿ ûÿÿÿ -þÿÿÿ ûÿÿÿþÿÿÿüÿÿÿ ÿÿÿÿ ûÿÿÿ þÿÿÿ üÿÿÿÿÿÿÿÿÿÿÿ ûÿÿÿ úÿÿÿÿÿÿÿþÿÿÿÿÿÿÿùÿÿÿ øÿÿÿÿÿÿÿ -üÿÿÿ ûÿÿÿþÿÿÿùÿÿÿøÿÿÿÿÿÿÿùÿÿÿ øÿÿÿþÿÿÿöÿÿÿõÿÿÿþÿÿÿùÿÿÿøÿÿÿýÿÿÿñÿÿÿðÿÿÿþÿÿÿúÿÿÿùÿÿÿýÿÿÿòÿÿÿñÿÿÿ  - -       -  -   -      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmokêâÿÿÿÐÿÿÿ%%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿ  ÿÿ  ÿÿ ÿ ÿ        ÿÿ   ÿÿ  ÿÿ  ÿÿ  ÿÿÿ  ÿÿÿÿ  ÿÿÿÿ ÿÿÿ  ÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ åÿÿÿøÿÿÿFlap -„Õÿÿÿáÿÿÿ*ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ      ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     ÿÿÿÿÿÿÿÿÿÿÿÿ        ÿÿÿÿÿÿÿÿÿ      ÿÿÿÿÿÿ    ÿÿÿ      ÿ  ÿÿ    ÿÿ  ÿ  ÿÿÿÿÿ  ÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÑÿÿÿøÿÿÿBomberÒÒÿÿÿÛÿÿÿ0$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :ÚÿÿÿÝÿÿÿ%!ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ’ ÁÿÿÿÑÿÿÿ>.                                                            ŠÉÿÿÿÉÿÿÿC7 ÿ ÿÿÿ ÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  +$MA,"TestSuit",LM="#include \"::/Misc/OSTestSuite\";\n"$$MA,"TakeTour",LM="Cd(\"::/Misc/Tour\");;InFile(\"Tour\");\n"$$MA+PU,"PsalSup1",LM="#include \"::/Apps/Psalmody/Load\";Psalmody(\"~/Sup1/Sup1Hymns\");"$$MA-X+PU,"SymAlpha",LM="DocMax;Who;View;"$$MA-X+PU,"SymNum ",LM="DocMax;Who(\"+m\");View;"$ +C ÐÿÿÿøÿÿÿBlackÒÿÿÿÄÿÿÿ#4ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ      ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿºÚÿÿÿèÿÿÿ%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ" +ÔÿÿÿÌÿÿÿ4.ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrØÿÿÿÚÿÿÿ#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿ ÿ ÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²ÒÿÿÿÞÿÿÿ'$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿ ÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿ ÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿR ÄÿÿÿÉÿÿÿ88ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’ÛÿÿÿÀÿÿÿ<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêâÿÿÿÐÿÿÿ%%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿ  ÿÿ  ÿÿ ÿ ÿ        ÿÿ   ÿÿ  ÿÿ  ÿÿ  ÿÿÿ  ÿÿÿÿ  ÿÿÿÿ ÿÿÿ  ÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ åÿÿÿøÿÿÿFlap„Õÿÿÿáÿÿÿ*ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ      ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     ÿÿÿÿÿÿÿÿÿÿÿÿ        ÿÿÿÿÿÿÿÿÿ      ÿÿÿÿÿÿ    ÿÿÿ      ÿ  ÿÿ    ÿÿ  ÿ  ÿÿÿÿÿ  ÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÑÿÿÿøÿÿÿBomber:ÚÿÿÿÝÿÿÿ%!ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’ ÁÿÿÿÑÿÿÿ>.                                                            ’ÔÿÿÿÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ g ¹ÿÿÿÉÿÿÿþÿÿÿþÿÿÿÀÿÿÿîÿÿÿÈÿÿÿÖÿÿÿìÿÿÿØÿÿÿÜÿÿÿæÿÿÿèÿÿÿôÿÿÿäÿÿÿìÿÿÿâÿÿÿÞÿÿÿÌÿÿÿÜÿÿÿäÿÿÿ€ÿÿÿ +ûÿÿÿöÿÿÿûÿÿÿöÿÿÿûÿÿÿìÿÿÿçÿÿÿöÿÿÿûÿÿÿöÿÿÿ +´ÿÿÿ²ÿÿÿMPÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ŠÉÿÿÿÉÿÿÿC7 ÿ ÿÿÿ ÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ @@ -829,5 +524,331 @@ $MA,"TestSuit",LM="#include \"::/Misc/OSTestSuite\";\n"$$MA,"TakeTour",LM="Cd(\" ÿÿÿÿÿÿÿ    - ÿÿÿÿ     ÿÿ     ÿÿ        ÿ      ÿ                    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg ¹ÿÿÿÉÿÿÿþÿÿÿþÿÿÿÀÿÿÿîÿÿÿÈÿÿÿÖÿÿÿìÿÿÿØÿÿÿÜÿÿÿæÿÿÿèÿÿÿôÿÿÿäÿÿÿìÿÿÿâÿÿÿÞÿÿÿÌÿÿÿÜÿÿÿäÿÿÿ€ÿÿÿ -ûÿÿÿöÿÿÿûÿÿÿöÿÿÿûÿÿÿìÿÿÿçÿÿÿöÿÿÿûÿÿÿöÿÿÿ»ÒÿÿÿÛÿÿÿ6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ØÿÿÿøÿÿÿAfter’ÆÿÿÿÅÿÿÿ?:ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file + ÿÿÿÿ     ÿÿ     ÿÿ        ÿ      ÿ                    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ yÓÿÿÿÜÿÿÿ<H÷ÿÿÿ'ûÿÿÿ÷ÿÿÿõÿÿÿüÿÿÿ õÿÿÿ'ûÿÿÿ ' + èÿÿÿòÿÿÿèÿÿÿüÿÿÿèÿÿÿèÿÿÿáÿÿÿúÿÿÿáÿÿÿúÿÿÿ èÿÿÿáÿÿÿèÿÿÿüÿÿÿèÿÿÿòÿÿÿèÿÿÿüÿÿÿúÿÿÿõÿÿÿ÷ÿÿÿ  $$÷ÿÿÿ$õÿÿÿ$ èÿÿÿõÿÿÿèÿÿÿòÿÿÿüÿÿÿõÿÿÿüÿÿÿ üÿÿÿéÿÿÿ üÿÿÿéÿÿÿ ÿÿÿÿéÿÿÿ ÿÿÿÿéÿÿÿõÿÿÿÿÿÿÿòÿÿÿÿÿÿÿûÿÿÿãÿÿÿýÿÿÿåÿÿÿãÿÿÿÿÿÿÿãÿÿÿåÿÿÿúÿÿÿáÿÿÿþÿÿÿãÿÿÿõÿÿÿ$÷ÿÿÿ$÷ÿÿÿ' $$õÿÿÿ'' +' ' +     !!&''"#%$$#       ! + + + $%*$*+'&('()&(( $++ +0/.112-,7 765343! 3 45833!839;:7;766;;1  ¸ÿÿÿøÿÿÿCastle¾éÿÿÿâÿÿÿ6R äÿÿÿ äÿÿÿ îÿÿÿ îÿÿÿ  ôÿÿÿÛÿÿÿ ôÿÿÿÛÿÿÿ äÿÿÿÛÿÿÿÛÿÿÿôÿÿÿäÿÿÿîÿÿÿîÿÿÿôÿÿÿ ÷ÿÿÿ ûÿÿÿ îÿÿÿ éÿÿÿ  óÿÿÿõÿÿÿäÿÿÿõÿÿÿäÿÿÿõÿÿÿîÿÿÿõÿÿÿîÿÿÿõÿÿÿôÿÿÿÛÿÿÿõÿÿÿôÿÿÿÛÿÿÿõÿÿÿñÿÿÿäÿÿÿñÿÿÿÛÿÿÿñÿÿÿÛÿÿÿñÿÿÿôÿÿÿäÿÿÿñÿÿÿîÿÿÿñÿÿÿîÿÿÿñÿÿÿôÿÿÿñÿÿÿõÿÿÿ÷ÿÿÿõÿÿÿûÿÿÿõÿÿÿîÿÿÿõÿÿÿéÿÿÿõÿÿÿéÿÿÿõÿÿÿóÿÿÿõÿÿÿóÿÿÿéÿÿÿ óÿÿÿõÿÿÿÿÿÿÿ + +ÿÿÿÿ*ÿÿÿÿ +* +**ÿÿÿÿ    +        +   + +    $"$#"!  !"!#"$#! !    "!"%++&%%'&&(''(()),),**,*+-$$-$'()')&3/..232.11523400/3451104-"b +ÌÿÿÿÆÿÿÿ-7ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ Öéÿÿÿåÿÿÿp¨üÿÿÿíÿÿÿíÿÿÿüÿÿÿòÿÿÿòÿÿÿüÿÿÿíÿÿÿýÿÿÿíÿÿÿýÿÿÿüÿÿÿòÿÿÿýÿÿÿòÿÿÿýÿÿÿúÿÿÿòÿÿÿòÿÿÿúÿÿÿúÿÿÿòÿÿÿýÿÿÿòÿÿÿýÿÿÿúÿÿÿýÿÿÿýÿÿÿ÷ÿÿÿôÿÿÿùÿÿÿõÿÿÿöÿÿÿûÿÿÿýÿÿÿøÿÿÿüÿÿÿüÿÿÿ÷ÿÿÿòÿÿÿùÿÿÿóÿÿÿÿÿÿÿöÿÿÿùÿÿÿûÿÿÿøÿÿÿúÿÿÿúÿÿÿöÿÿÿüÿÿÿýÿÿÿøÿÿÿýÿÿÿüÿÿÿôÿÿÿöÿÿÿöÿÿÿõÿÿÿöÿÿÿùÿÿÿüÿÿÿøÿÿÿúÿÿÿûÿÿÿôÿÿÿýÿÿÿõÿÿÿöÿÿÿþÿÿÿôÿÿÿôÿÿÿÿÿÿÿöÿÿÿöÿÿÿõÿÿÿóÿÿÿòÿÿÿõÿÿÿñÿÿÿôÿÿÿýÿÿÿöÿÿÿöÿÿÿþÿÿÿõÿÿÿóÿÿÿÿÿÿÿòÿÿÿõÿÿÿñÿÿÿóÿÿÿóÿÿÿÿÿÿÿúÿÿÿúÿÿÿôÿÿÿþÿÿÿôÿÿÿýÿÿÿûÿÿÿûÿÿÿúÿÿÿúÿÿÿûÿÿÿûÿÿÿ  úÿÿÿýÿÿÿûÿÿÿ þÿÿÿ úÿÿÿÿÿÿÿýÿÿÿþÿÿÿûÿÿÿ þÿÿÿ ûÿÿÿ þÿÿÿ ûÿÿÿ þÿÿÿ ûÿÿÿ þÿÿÿ ûÿÿÿ +þÿÿÿ ûÿÿÿþÿÿÿüÿÿÿ ÿÿÿÿ ûÿÿÿ þÿÿÿ üÿÿÿÿÿÿÿÿÿÿÿ ûÿÿÿ úÿÿÿÿÿÿÿþÿÿÿÿÿÿÿùÿÿÿ øÿÿÿÿÿÿÿ +üÿÿÿ ûÿÿÿþÿÿÿùÿÿÿøÿÿÿÿÿÿÿùÿÿÿ øÿÿÿþÿÿÿöÿÿÿõÿÿÿþÿÿÿùÿÿÿøÿÿÿýÿÿÿñÿÿÿðÿÿÿþÿÿÿúÿÿÿùÿÿÿýÿÿÿòÿÿÿñÿÿÿ  + +       +  +   +      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok¾Úÿÿÿâÿÿÿ6R äÿÿÿ äÿÿÿ îÿÿÿ îÿÿÿ  ôÿÿÿÛÿÿÿ ôÿÿÿÛÿÿÿ äÿÿÿÛÿÿÿÛÿÿÿôÿÿÿäÿÿÿîÿÿÿîÿÿÿôÿÿÿ ÷ÿÿÿ ûÿÿÿ îÿÿÿ éÿÿÿ  óÿÿÿõÿÿÿäÿÿÿõÿÿÿäÿÿÿõÿÿÿîÿÿÿõÿÿÿîÿÿÿõÿÿÿôÿÿÿÛÿÿÿõÿÿÿôÿÿÿÛÿÿÿõÿÿÿñÿÿÿäÿÿÿñÿÿÿÛÿÿÿñÿÿÿÛÿÿÿñÿÿÿôÿÿÿäÿÿÿñÿÿÿîÿÿÿñÿÿÿîÿÿÿñÿÿÿôÿÿÿñÿÿÿõÿÿÿ÷ÿÿÿõÿÿÿûÿÿÿõÿÿÿîÿÿÿõÿÿÿéÿÿÿõÿÿÿéÿÿÿõÿÿÿóÿÿÿõÿÿÿóÿÿÿéÿÿÿ óÿÿÿõÿÿÿÿÿÿÿ + +ÿÿÿÿ*ÿÿÿÿ +* +**ÿÿÿÿ    +        +   + +    $"$#"!  !"!#"$#! !    "!"%++&%%'&&(''(()),),**,*+-$$-$'()')&3/..232.11523400/3451104-"ÒÒÿÿÿÛÿÿÿ0$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÆÿÿÿÖÿÿÿ4$ ÐÿÿÿøÿÿÿTreeúÕÿÿÿäÿÿÿ%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿ ÿÿÿÿÿ ÿÿÿÿ ÿÿ ÿÿ  + + + + + + + + + +  + + + + + + + + + + + +  + + + + + + + + + + + +  + + + + + + + + + +  + + + + + + + +ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ôáÿÿÿÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÔÿÿÿøÿÿÿBattleÒÂÿÿÿÅÿÿÿ@;ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿV ëÿÿÿçÿÿÿ`Œúÿÿÿ úÿÿÿ úÿÿÿúÿÿÿ ÿÿÿÿ ÿÿÿÿ ÿÿÿÿ ÿÿÿÿÿÿÿÿ ÿÿÿÿ ÿÿÿÿÿÿÿÿ      ðÿÿÿúÿÿÿöÿÿÿúÿÿÿöÿÿÿúÿÿÿðÿÿÿúÿÿÿóÿÿÿÿÿÿÿóÿÿÿÿÿÿÿ ÿÿÿÿ ÷ÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿóÿÿÿÿÿÿÿóÿÿÿÿÿÿÿÿÿÿÿðÿÿÿöÿÿÿöÿÿÿðÿÿÿóÿÿÿóÿÿÿ ÷ÿÿÿ÷ÿÿÿóÿÿÿóÿÿÿúÿÿÿäÿÿÿ úÿÿÿäÿÿÿ úÿÿÿïÿÿÿúÿÿÿïÿÿÿ ùÿÿÿâÿÿÿ ùÿÿÿßÿÿÿùÿÿÿßÿÿÿùÿÿÿâÿÿÿùÿÿÿñÿÿÿ ùÿÿÿñÿÿÿ ÿÿÿÿÿÿÿÿäÿÿÿ äÿÿÿ ïÿÿÿïÿÿÿ âÿÿÿ ßÿÿÿßÿÿÿâÿÿÿñÿÿÿ ñÿÿÿ ðÿÿÿúÿÿÿäÿÿÿöÿÿÿúÿÿÿäÿÿÿöÿÿÿúÿÿÿïÿÿÿðÿÿÿúÿÿÿïÿÿÿóÿÿÿùÿÿÿâÿÿÿóÿÿÿùÿÿÿßÿÿÿùÿÿÿßÿÿÿ÷ÿÿÿùÿÿÿâÿÿÿ÷ÿÿÿùÿÿÿñÿÿÿóÿÿÿùÿÿÿñÿÿÿóÿÿÿÿÿÿÿÿÿÿÿðÿÿÿäÿÿÿöÿÿÿäÿÿÿöÿÿÿïÿÿÿðÿÿÿïÿÿÿóÿÿÿâÿÿÿóÿÿÿßÿÿÿßÿÿÿ÷ÿÿÿâÿÿÿ÷ÿÿÿñÿÿÿóÿÿÿñÿÿÿóÿÿÿ        +      + $%&&'$%$$$'$%%&&'&#!"!# #     /-.-/,/*,,*++)(+*)+(+ + +(!.-.!" + + ,*)*<=>>?<1033211=<<01<?330<1=2=>2>233?>;9:9;8867754765GEFEGDGBDDBCCA@CBA4C@C474C7C4@9FEF9:8C7C8D5BAB56TUVVWTIHKKJIIUTTHITWKKHTIUJUVJVJKKWVSRQQPSPONOLMOMN_^]]\__\Z\[Z[XY[YZLX[[OLLO[[XLQ]^^RQPO[[\PMYZZNM P88P654@@A5LMYYXL"ÏÿÿÿÑÿÿÿ)+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +Ùÿÿÿêÿÿÿ!ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ + + +ÿÿÿÿ + +ÿÿÿÿÿÿÿÿÿÿ + + + + + + + + +ÿÿÿ + + + + + + + + + + +ÿÿÿ + + + + + + + + + + + + + + + + + + + +ÿÿÿ + + + + + + + + + + + + + + + + + + + + +ÿÿÿ + + + + + + + + + + + + + + + + + + + + + +ÿÿÿÿ + + + + + + + + + + + + + + + + + + + +ÿÿÿÿ + + + + + + + + + + + + + + + + + + +ÿÿÿÿ + + + + + + + + + + + + + + + + + + + + + +ÿÿÿ + + + + + + + + + + + + + + + + + + + + + +ÿÿÿ + + + + + + + + + + + + + + + + + + +ÿÿÿ + + + + + + + + + + + + + + + + +ÿÿÿ + + + + + + + + + + + + + +ÿÿ + +ÿÿÿÿÿ + + + + + + + + + + + +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ + + + + +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/Demo/AcctExample/PersonalNotes.DD b/Demo/AcctExample/PersonalNotes.DD index 02c282b..e46a38a 100644 --- a/Demo/AcctExample/PersonalNotes.DD +++ b/Demo/AcctExample/PersonalNotes.DD @@ -1,20 +1,33 @@ $WW,1$$FG,5$$TX+CX,"TODO"$$FG$ +* $LK,"::/Apps/X-Caliber/X-Caliber.HC"$ +* Add asteroid harbor defense. +* Afterburner thruster. + +* $LK,"::/Apps/Titanium/Titanium.HC"$ +* Lead-in at start of game with no enemy. +* Have highway of death. +* Fix straight shooting. +* Helicopters. +* Anti-Aircraft. + +* Make registry files more robust. + +* $MA-X+PU,"64-Bit Device Memory",LM="F(\"mem64_ptr\");View;"$ is not implemented. + * $LK,"::/Demo/RandDemo.HC"$ is kinda crappy. * Cursor in $LK,"~/TOSToHtml.HC"$. * Investigate why packet loss $LK,"Training Sleep(1)",A="FF:::/Adam/Training.HC,Sleep(1)"$. +* Naming standard with regard to "MAX_". + * Add AVL or red/black binary tree library support. We have fixed-size stack. Auto-balancing binary tree is very needed. I've done everything myself. I don't want to ruin a perfect record. I'm in no hurry. * $LK,"SpriteEd",A="FI:::/Adam/Gr/SpriteEd.HC"$ shift pts, Ctrl pt for ellipse/polygon w,h is off when rotated. * Get rid of $LK,"JobQue",A="MN:JobQue"$() and use just $LK,"Spawn",A="MN:Spawn"$()? Not sure about this, probably. -* Add missiles to $LK,"::/Apps/TimeOut/TimeOut.HC"$. - -* Add asteroid harbor defense to $LK,"::/Apps/X-Caliber/X-Caliber.HC"$. - * God said this is bad. $LK,"FL:::/Adam/DolDoc/DocFind.HC,41"$ * Backward is broken? @@ -43,8 +56,6 @@ $WW,1$$FG,5$$TX+CX,"TODO"$$FG$ * Compiler Optimization: heap_glbls with added offset. Might exist. -* AfterEgypt: $LK,"Numbers,13:33",A="BF:Numbers,13:33"$ scouts? $LK,"Numbers,21:8",A="BF:Numbers,21:8"$ snakes? - * Bug: Find-and-replace text on $$PT$$ line before it. * 12/25/2015 Copy-Paste index.html glitch if source window 40 columns. * 01/06/2016 Editor filter "str" applied to output from LineRep looks broken. @@ -55,7 +66,7 @@ $WW,1$$FG,5$$TX+CX,"TODO"$$FG$ * Good $LK,"spell checker",A="MN:ACMisspelledFind"$. * Good Bible search. -* Can $LK,"MEM_EXTRA_HASH2_PAGES",A="MN:MEM_EXTRA_HASH2_PAGES"$ be just one? +* Can $LK,"MEM_EXTRA_HASH2_PAGS",A="MN:MEM_EXTRA_HASH2_PAGS"$ be just one? * Bible ranges in $LK,"BibleVerse",A="MN:BibleVerse"$(). @@ -140,7 +151,7 @@ $FG,5$$TX+CX,"TODO: Too Hard, or Not Worth Doing."$$FG$ * Compiler: FunPtr local vars? I forgot if this was hard or not. $ID,5$$HL,1$U0 Main() { - U0 (*fp_old_draw_input_ptr)(CDC *dc,I64 x,I64 y)=gr.fp_draw_input_ptr; + U0 (*fp_old_draw_ms)(CDC *dc,I64 x,I64 y)=gr.fp_draw_ms; } $ID,-5$$HL,0$ * Compiler: Get rid of $LK,"0x20000",A="FF:::/Compiler/CMain.HC,0x20000"$ limit. @@ -155,7 +166,7 @@ $FG,5$$TX+CX,"Bugs"$$FG$ * Bug introduced around 11/1/15. Changed $LK,"::/Kernel/Sched.HC"$ and now $LK,"WinToTop",A="MN:WinToTop"$ is called on Adam task at start-up, sometimes. Might be user's fault because of bad keys pressed during VMware power-on init. Might be fixed by $LK,"ACf_INIT_IN_PROGRESS",A="MN:ACf_INIT_IN_PROGRESS"$. -* 1/12/16 $LK,"ATARepEntry",A="MN:ATARepEntry"$ shows corrupted buttons. Weird. Perhaps, my imagination. +* 1/12/16 $LK,"ATARepEntry",A="MN:ATARepEntry"$ shows corrupted bttns. Weird. Perhaps, my imagination. $FG,5$$TX+CX,"3rd Party Bugs"$$FG$ @@ -179,7 +190,7 @@ $FG,5$$TX+CX,"Bugs? Not really sure."$$FG$ * 1/?/2015,8/10/2015 Macro sel in Menu did not go to shell? No, I think just twice. Not a bug. -* 5/7/14:Something like $LK,"InSetIP",A="MN:InSetIP"$ caused hang, then reboot in TestSuite. +* 5/7/14:Something like $LK,"InSetMs",A="MN:InSetMs"$ caused hang, then reboot in TestSuite. * 5/7/14:#63 Maybe, $LK,"::/Demo/Graphics/Pick3D.HC"$ crashed in TestSuite. * $LK,"StrPrintJoin",A="MN:StrPrintJoin"$(,st); With st="\n\\"; (Forgot what this is talking about.) @@ -194,6 +205,8 @@ CHashFun *fun_ptr; $ID,-5$ * extern of fun with dft arg of str? +* ISO.C on FAT32 created by Windows or Linux are not contiguous. + * Might want to warn switch[] dup case numbers. * Make $LK,"Clamp",A="MN:Clamp"$(), $LK,"Min",A="MN:Min"$(), $LK,"Max",A="MN:Max"$() into asm routines? @@ -219,7 +232,7 @@ $ID,-5$ * Compiler: Type for either F64 or I64, like Print -- no conversion. * Compiler: Arg type ... that did do conversion, if we have one that doesn't. -* $LK,"R",A="MN:R"$("chars_bmp_","set_"); +* $LK,"R",A="MN:R"$("char_bmp_","set_"); * Clean-up code $LK,"FileNameAbs",A="MN:FileNameAbs"$(), does it need so many local var names? I guess no choice. @@ -227,6 +240,8 @@ $ID,-5$ $FG,5$$TX+CX,"Committee Needed"$$FG$ * Make binary tree look-up using FUN_SEG symbol addresses, so we can eliminate fun_seg cache and wall-paper kludge? All HolyC functions and glbl vars would have left-right for address search. +* Make so just CdRom; command to copy entire disk to ::/CdRom directory? + * $LK,"MP DepthBuf",A="FF:::/Adam/Gr/SpriteMesh.HC,dc->depth_buf=e->"$ is a kludge because of dc->depth_buf=NULL in various graphics routines. * Improve editor undo, add redo. @@ -251,7 +266,7 @@ $FG,5$$TX+CX,"Committee Needed"$$FG$ * Eliminate? $LK,"Mat4x4MulXYZ",A="MN:Mat4x4MulXYZ"$() change to 3x3? * Eliminate? $LK,"ROP_XOR",A="MN:ROP_XOR"$? -* $LK,"WinMgrTask",A="MN:WinMgrTask"$ needs to do doc operations on $LK,"PostMsg",A="MN:PostMsg"$() msgs for mouse. Already works for $LK,"IPSet",A="MN:IPSet"$()? +* $LK,"WinMgrTask",A="MN:WinMgrTask"$ needs to do doc operations on $LK,"PostMsg",A="MN:PostMsg"$() msgs for ms_hard. Already works for $LK,"MsSet",A="MN:MsSet"$()? * Should Msgs in PopUp queue get fwded to parent when task dies? @@ -271,8 +286,6 @@ $FG,5$$TX+CX,"Committee Needed"$$FG$ * Compiler: &=, |= can overflow with Bts Btr on small data types? -* Compiler: $LK,"sys_var_init_flag",A="MN:sys_var_init_flag"$ for local vars? - * Implement $LK,"RS_ATTR_FIXED",A="MN:RS_ATTR_FIXED"$ fixed pos files? * SIMD in $LK,"Mat4x4MulXYZ",A="MN:Mat4x4MulXYZ"$? @@ -359,7 +372,7 @@ $FG,5$$TX+CX,"Test"$$FG$ * $LK,"FileMgr",A="MN:FileMgr"$() help link scrolls out of window. -* $LK,"MouseDriverInstall",A="MN:MouseDriverInstall"$() throws exceptions? Doesn't work? Why mouse $LK,"0x9FC30",A="FF:::/Kernel/SerialDev/Mouse.HC,9FC"$? +* $LK,"MsHardDrvrInstall",A="MN:MsHardDrvrInstall"$() throws exceptions? Doesn't work? Why mouse $LK,"0x9FC30",A="FF:::/Kernel/SerialDev/Mouse.HC,9FC"$? * VirtualBox MP reboot? @@ -380,7 +393,7 @@ $FG,5$$TX+CX,"Uncategorized"$$FG$ >Might want to do ZOOM in U8 graphics and convert scrn capture to U8 >Might want to rev bit order -* This $LK,"Fs->catch_except=TRUE",A="FF:::/Kernel/SrvCmd.HC,Fs->catch_except=TRUE"$ causes problems because it +* This $LK,"Fs->catch_except=TRUE",A="FF:::/Kernel/Job.HC,Fs->catch_except=TRUE"$ causes problems because it catches divide and out-of-mem. Not sure what to do, yet. * Release semaphores or break lock sema,usb_td @@ -429,7 +442,7 @@ $FG,5$$TX+CX,"Misc Notes"$$FG$ Erik van der Karbargenbok: $LK,"TempleBot",A="PI:~/Sup1/Sup1Bin/TempleBot"$. Intel CEO's name: Brian Krzanich >$FG,2$lspci -v$FG$ -Size:$TX,"17426KB",D="DD_TEMPLEOSCD_K_SIZE"$ +Size:$TX,"17354KB",D="DD_TEMPLEOSCD_K_SIZE"$ $FG,5$$TX+CX,"My Web Bookmarks"$$FG$$WW,0$ $TX,"My FireFox Bookmarks",HTML="http://www.templeos.org/Wb/Home/Sup1/Sup1Blog/Bookmarks"$ @@ -438,12 +451,15 @@ Frosting $HC,"
\"\"
"$ CottonTail $HC,"
\"\"
"$ TempleOS Logo $HC,"
\"\"
"$ +T-Shirts & Mug $HC,"\"\""$ Pew Pew Pew $HC,"
\"\"
"$ Iceberg $HC,"
\"\"
"$ I made dis $HC,"
\"\"
"$ NIST Beacon $HC,"
\"\"
"$ Purple Frog $HC,"
\"\"
"$ Casino (Dog) $HC,"
\"\"
"$ +Dianna's Cross $HC,""$ + $TX,"SimStructure",HTML="http://www.templeos.org/files/SimStrSetUp.zip"$ $TX,"ASU_Transcripts",HTML="http://www.templeos.org/files/ASU_Transcripts.pdf"$ $TX,"ASU Course Catalog (See page 261)",HTML="https://catalog.asu.edu/files/shared/archives/1994-1996/general/UG1994-1996.pdf/1994-1996-UG-241-267.pdf"$ @@ -476,6 +492,7 @@ $TX,"TOSZ Compression",HTML="http://www.templeos.org/Wb/Linux/TOSZ.CPP"$ $TX,"ATA/ATAPI spec",HTML="http://www.t13.org/Documents/UploadedDocuments/docs2007/D1532v1r4b-AT_Attachment_with_Packet_Interface_-_7_Volume_1.pdf"$ $TX,"Patton Prayer",HTML="http://www.pattonhq.com/prayer.html"$ $TX,"Streaming Terry A. Davis",HTML="https://www.youtube.com/channel/UCdX4uJUwSFwiY3XBvu-F_-Q/live"$ +$TX,"Bleem",HTML="http://strangehorizons.com/fiction/the-secret-number/"$ $TX,"WWW.OSDEV.ORG",HTML="http://www.osdev.org"$ $TX,"NIST Beacon",HTML="http://www.nist.gov/itl/csd/ct/nist_beacon.cfm"$ diff --git a/Demo/AcctExample/Registry.HC b/Demo/AcctExample/Registry.HC index 5c46c5f..11f62f1 100644 --- a/Demo/AcctExample/Registry.HC +++ b/Demo/AcctExample/Registry.HC @@ -2,23 +2,34 @@ $TR-UL,"Adam"$ $ID,2$$TR,"SysMsgFlags"$ $ID,2$sys_msg_flags[0]=0xFF; $ID,-2$$TR,"SysRegVer"$ -$ID,2$registry_version=4.130; -$ID,-2$$ID,-2$$TR-C-UL,"TempleOS"$ -$ID,2$$TR,"CircleTrace"$ -$ID,2$F64 best_score=4.9425; -$ID,-2$$TR,"DiningStars"$ -$ID,2$F64 best_score=9999.0000; -$ID,-2$$TR,"Staff"$ -$ID,2$#define PERSONAL_INITIALS "TAD" -#define MACHINE_CFG 0 -$ID,-2$$TR,"TOSVideos"$ -$ID,2$I64 tos_code_walk_thru=105,tos_after_egypt_in_action=46; -$ID,-2$$TR,"EagleDive"$ +$ID,2$registry_version=5.000; +$ID,-2$$TR,"InsReg"$ +$ID,2$#help_index "Misc/Install Registration" +MemSet(&ins_reg,0,sizeof(CInsReg)); +ins_reg.registered=1; +ins_reg.host_os=2; +ins_reg.host_vm=2; + +#define INS_REG_PERSONAL_INITIALS "TAD" +StrCpy(ins_reg.initials,"TAD"); +HashPublic("INS_REG_PERSONAL_INITIALS",HTT_DEFINE_STR); + +#define INS_REG_MACHINE_NUM 0 +ins_reg.machine_num=0; +HashPublic("INS_REG_MACHINE_NUM",HTT_DEFINE_STR); + +"InsReg:%s:%d\n",INS_REG_PERSONAL_INITIALS,INS_REG_MACHINE_NUM; + +#help_index "" +$ID,-2$$ID,-2$$TR-UL,"TempleOS"$ +$ID,2$$TR,"EagleDive"$ $ID,2$F64 best_score=147.6932; $ID,-2$$TR,"TOSGodOffer"$ $ID,2$I64 tos_gus_gwen=22; -$ID,-2$$TR,"TOSGodMisc"$ -$ID,2$I64 tos_timestamp=0,tos_type=1; +$ID,-2$$TR,"TOSVideos"$ +$ID,2$I64 tos_code_walk_thru=105; +$ID,-2$$TR,"DiningStars"$ +$ID,2$F64 best_score=9999.0000; $ID,-2$$TR,"BlackDiamond"$ $ID,2$I64 best_score=1; $ID,-2$$TR,"DunGen"$ @@ -29,27 +40,32 @@ $ID,-2$$TR,"ZoneOut"$ $ID,2$F64 best_score=8.1373; $ID,-2$$TR,"Varoom"$ $ID,2$F64 best_score=46.2643; +$ID,-2$$TR,"FlapBat"$ +$ID,2$F64 best_score=16.3077; $ID,-2$$TR,"RawHide"$ $ID,2$F64 best_score=96.1279; $ID,-2$$TR,"KeepAway"$ $ID,2$I64 best_score0=68,best_score1=30; $ID,-2$$TR,"Wenceslas"$ $ID,2$F64 best_score=43.9944; -$ID,-2$$TR,"Talons"$ -$ID,2$F64 best_score=9999.0000; -$ID,-2$$TR,"FlapBat"$ -$ID,2$F64 best_score=16.3077; -$ID,-2$$TR,"XCaliber"$ -$ID,2$I64 best_score=20; -I64 msg_flags=1; $ID,-2$$TR,"BomberGolf"$ $ID,2$I64 best_score=175; -$ID,-2$$TR,"TimeOut"$ -$ID,2$I64 best_score=11291; -$ID,-2$$ID,-2$$TR,"DemoCompany"$ -$ID,2$ -$TR,"Game1"$ -$ID,2$F64 best_score=180.03208; -$TR,"SimpleVal"$ -$ID,2$1400; -$ID,-2$$ID,-2$ \ No newline at end of file +$ID,-2$$TR,"OSTestSuite"$ +$ID,2$progress1_tf=0.000;progress2_tf=0.000; +progress3_tf=0.000;progress4_tf=220.470; +$ID,-2$$TR,"Titanium"$ +$ID,2$I64 best_score=16469; +$ID,-2$$TR,"XCaliber"$ +$ID,2$I64 best_score=90; +I64 msg_flags=3; +$ID,-2$$TR,"Talons"$ +$ID,2$F64 best_score=9999.0000; +$ID,-2$$TR,"CircleTrace"$ +$ID,2$F64 best_score=4.9425; +$ID,-2$$TR,"TOSRegen"$ +$ID,2$progress1_tf=0.000;progress2_tf=0.000; +progress3_tf=0.000;progress4_tf=174.320; +$ID,-2$$ID,-2$$TR,"Once"$ +$ID,2$$TR,"Adam"$ +$ID,2$$ID,-2$$TR,"User"$ +$ID,2$$ID,-2$$ID,-2$ \ No newline at end of file diff --git a/Demo/AcctExample/TOSBlog.HC b/Demo/AcctExample/TOSBlog.HC index f35fd5f..f85e271 100644 --- a/Demo/AcctExample/TOSBlog.HC +++ b/Demo/AcctExample/TOSBlog.HC @@ -17,7 +17,7 @@ U8 *BlogLocalFile(CDate cdt=0) CDateStruct ds; if (!cdt) cdt=Now+local_time_offset; Date2Struct(&ds,cdt); - StrPrint(file,"%s/" PERSONAL_INITIALS "%02d%02d%02d.DD.Z", + StrPrint(file,"%s/" INS_REG_PERSONAL_INITIALS "%02d%02d%02d.DD.Z", BlogLocalDir(cdt),ds.year%100,ds.mon,ds.day_of_mon); return file; } @@ -39,7 +39,7 @@ U8 *BlogWebFile(CDate cdt=0) CDateStruct ds; if (!cdt) cdt=Now+local_time_offset; Date2Struct(&ds,cdt); - StrPrint(file,"%s/" PERSONAL_INITIALS "%02d%02d%02d.DD.Z", + StrPrint(file,"%s/" INS_REG_PERSONAL_INITIALS "%02d%02d%02d.DD.Z", BlogWebDir(cdt),ds.year%100,ds.mon,ds.day_of_mon); return file; } @@ -71,13 +71,13 @@ U0 BlogScrnShot() { Bool old_cursor=DocCursor; CDC *dc1,*dc2; - U8 *old_fp_draw_input_ptr=gr.fp_draw_input_ptr; - gr.fp_draw_input_ptr=NULL; + U8 *old_fp_draw_ms=gr.fp_draw_ms; + gr.fp_draw_ms=NULL; Refresh(2); dc1=DCScrnCapture; dc2=DCExt(dc1,0,FONT_HEIGHT,GR_WIDTH-1,GR_HEIGHT-1); BlogDCImgWrite(dc2); - gr.fp_draw_input_ptr=old_fp_draw_input_ptr; + gr.fp_draw_ms=old_fp_draw_ms; DCDel(dc1); DCDel(dc2); DocCursor(old_cursor); @@ -92,23 +92,21 @@ public U0 MakeWebSitePartial() MkDir("D:/Wb/Home/Web/TAD/BlogDir"); FreshenWebDir("/Home/Web"); - FreshenWebDir("/Home/Web/" PERSONAL_INITIALS); + FreshenWebDir("/Home/Web/" INS_REG_PERSONAL_INITIALS); FreshenWebDir(BlogLocalDir+2); Drv('C'); } -public U0 Blog(Bool god_misc2=FALSE) +public U0 Blog(Bool ALT_F6=TRUE) { if (!FileFind(BlogLocalFile,,FUF_JUST_FILES)) - Copy("~/Web/" PERSONAL_INITIALS "/DailyBlogHeader.DD.Z", + Copy("~/Web/" INS_REG_PERSONAL_INITIALS "/DailyBlogHeader.DD.Z", BlogLocalFile); AutoComplete; WinBorder; WinMax; Msg(MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN|SCF_CTRL); - if (god_misc2) - Msg(MSG_KEY_DOWN_UP,0,SC_F7|SCF_SHIFT|SCF_ALT); - else { + if (ALT_F6) { Msg(MSG_KEY_DOWN_UP,0,SC_F6|SCF_ALT); Msg(MSG_KEY_DOWN_UP,'\n',0); } diff --git a/Demo/AcctExample/TOSCfg.HC b/Demo/AcctExample/TOSCfg.HC index 9b099c7..31119f0 100644 --- a/Demo/AcctExample/TOSCfg.HC +++ b/Demo/AcctExample/TOSCfg.HC @@ -1,21 +1,17 @@ #help_index "TOS" -RegSetDftEntry("TempleOS/Staff", -"#define PERSONAL_INITIALS \"TAD\"\n" -"#define MACHINE_CFG 0\n" -); -RegExeBranch("TempleOS/Staff"); - #define PERSONAL_WEB "http:/" "/www.templeos.org/Wb" -#define BLOG_BASE "/Home/Web/" PERSONAL_INITIALS "/BlogDir" -#define DAILY_BASE "/Home/Web/" PERSONAL_INITIALS "/DailyBlog" +#define BLOG_BASE "/Home/Web/"\ + INS_REG_PERSONAL_INITIALS "/BlogDir" +#define DAILY_BASE "/Home/Web/"\ + INS_REG_PERSONAL_INITIALS "/DailyBlog" #define BLOG_LOCAL_BASE "::" BLOG_BASE #define BLOG_WEB_BASE PERSONAL_WEB BLOG_BASE #define SLOP BLK_SIZE U0 TOSBootRescueDrv1() { - CBinFile *bfh=sys_boot_base-sizeof(CBinFile); + CBinFile *bfh=mem_boot_base-sizeof(CBinFile); bfh(I64)+=bfh->file_size-1; DefinePrint("TOS_BOOT_RESCUE_DRV","0x%X", CeilI64(SYS_KERNEL_END+SLOP,BLK_SIZE)); @@ -34,19 +30,19 @@ U0 TOSBootRescueDrv2() U0 TOSInit() { - switch (MACHINE_CFG) { + switch (INS_REG_MACHINE_NUM) { case 1: //TAD Native Machine DefinePrint("CFG_RAM_DRVS", - "\"b\nScale2Mem(2048,0x100000,4*1024*1024*1024)\n\""); - DefinePrint("CFG_HARD_DRVS","\"cs0xFE00\n0xFE10\n0\""); - DefinePrint("CFG_DVD_DRVS","\"ts0x1F0\n1\""); + "\"B\nScale2Mem(2048,0x100000,4*1024*1024*1024)\n\""); + DefinePrint("CFG_HARD_DRVS","\"C\ns0xFE00\n0xFE10\n0\""); + DefinePrint("CFG_DVD_DRVS","\"Ts0x1F0\n1\""); DefinePrint("CFG_DSK_CACHE","\"Scale2Mem(0x80000,0x8000000)\n\""); DefinePrint("TOS_HDS","\"CD\""); DefinePrint("TOS_MASTER_BOOT_DRVS","\"C\""); break; default: DefinePrint("CFG_RAM_DRVS", - "\"b\nScale2Mem(2048,0x100000,4*1024*1024*1024)\n\""); + "\"B\nScale2Mem(2048,0x100000,4*1024*1024*1024)\n\""); DefinePrint("CFG_HARD_DRVS","\"\""); DefinePrint("CFG_DVD_DRVS","\"\""); DefinePrint("CFG_DSK_CACHE","\"Scale2Mem(0x80000,0x8000000)\n\""); @@ -58,16 +54,16 @@ U0 TOSInit() #define TOS_ISO_NAME "B:/TempleOSCD.ISO" #define TOS_ISO_C_NAME "B:/TempleOSCD.ISO.C" #define TOS_DISTRO_DIR "B:/Distro" -#define CFG_OPTS "AutoMountIDE\nCT\n" -#define CFG_DBG_OPTS "AutoMountIDE\nCT"\ +#define CFG_OPTS "StaffMode\nAutoMountIDE\nCT\n" +#define CFG_DBG_OPTS "StaffMode\nAutoMountIDE\nCT"\ "HeapInit\n130\nMemInit\n131\nVarInit\n132\n\n" -#define CFG_DBGZ_OPTS "AutoMountIDE\nCT"\ +#define CFG_DBGZ_OPTS "StaffMode\nAutoMountIDE\nCT"\ "HeapInit\n0\nMemInit\n0\nVarInit\n0\n\n" #define TOS_CFG "\n" CFG_RAM_DRVS CFG_DVD_DRVS CFG_HARD_DRVS "\n"\ CFG_DSK_CACHE CFG_OPTS -#define TOS_DVD_CFG "Tb\n0x20000\nt \n\n\nAutoMountIDE\nCT\n" +#define TOS_DVD_CFG "TB\n0x20000\nT \n\n\nStaffMode\nAutoMountIDE\nCT\n" #define TOS_DVD_DBG_CFG "A" CFG_BOOT_RESCUE_DRV\ - "b\nScale2Mem(2048,0x40000)\n\n\n"\ + "B\nScale2Mem(2048,0x40000)\n\n\n"\ "NoMP\nTextMode\nDontProbe\nBootRescueDrv\n"\ "C:" CFG_BOOT_RESCUE_DRV_FILE "\n"\ CFG_BOOT_RESCUE_DRV_START "\n\n" diff --git a/Demo/AcctExample/TOSDistro.HC b/Demo/AcctExample/TOSDistro.HC index bd04128..031db11 100644 --- a/Demo/AcctExample/TOSDistro.HC +++ b/Demo/AcctExample/TOSDistro.HC @@ -2,18 +2,29 @@ #help_index "TOS" +#define MAKE_STD 1 +#define MAKE_STD_RS 0 +#define MAKE_ULTRA 1 +#define MAKE_ULTRA_RS 0 +#define MAKE_SUP1 1 +#define MAKE_WEB 1 +#define MAKE_BOOKS1 0 +#define MAKE_BOOKS2 0 +#define MAKE_DBG 0 +#define MAKE_STAFF 1 + U8 TOSGetDrv() { I64 res; "Drive (%s):",TOS_HDS; - res=ToUpper(GetChar); + res=Let2Let(GetChar); '\n'; return res; } -U0 TOSBootHDIns(U8 drv_let) +U0 TOSBootHDIns(U8 drv_let=0) { - drv_let=ToUpper(drv_let); + drv_let=Let2Let(drv_let); In(TOS_CFG); BootHDIns(drv_let); if (StrOcc(TOS_MASTER_BOOT_DRVS,drv_let)) @@ -23,8 +34,8 @@ U0 TOSBootHDIns(U8 drv_let) U0 TOSCopyDrv(U8 src,U8 dst) { U8 buf_s[STR_LEN],buf_d[STR_LEN]; - src=ToUpper(src); - dst=ToUpper(dst); + src=Let2Let(src); + dst=Let2Let(dst); Fmt(dst,,FALSE,FSt_FAT32); @@ -51,7 +62,7 @@ public U0 CopySongs(U8 threshold='7') { CDoc *doc; CDocEntry *doc_e; - CDirEntry *tmpde=FilesFind("/Home/Sup1/Sup1Psalmody/*.HC*", + CDirEntry *tmpde=FilesFind("/Home/Sup1/Sup1Hymns/*.HC*", FUF_CLUSTER_ORDER),*tmpde1=tmpde; DelTree("/Apps/Psalmody/Examples"); MkDir("/Apps/Psalmody/Examples"); @@ -70,7 +81,7 @@ U0 DistroPrep() { Del("/Home/Demo*"); DelTree("/Home/*Tmp.DD.Z"); - if (FileFind("/Home/Sup1/Sup1Psalmody")) + if (FileFind("/Home/Sup1/Sup1Hymns")) CopySongs; DelTree("/Tmp"); @@ -85,6 +96,8 @@ U0 DistroPrep() DelTree("/Demo/AcctExample/Budget"); DelTree("/Demo/AcctExample/Private"); DelTree("/Demo/AcctExample/Sup1"); + DelTree("/Demo/AcctExample/Books1"); + DelTree("/Demo/AcctExample/Books2"); DelTree("/Demo/AcctExample/Web"); Del("/Demo/AcctExample/Test*"); Copy("/Home/Web/index.DD.Z", @@ -134,7 +147,6 @@ U0 MakeBootRescueDrvFile() Copy("C:/Adam/Training.HC.Z","A:/Adam"); Copy("C:/Adam/AMem.HC.Z", "A:/Adam"); Copy("C:/Adam/TaskRep.HC.Z", "A:/Adam"); - Copy("C:/Adam/AMathODE.HC.Z","A:/Adam"); FileWrite("C:" CFG_BOOT_RESCUE_DRV_FILE, bd->RAM_dsk,(bd->max_blk+1)<catch_except=TRUE; } UpdateISODocDefines; -public U0 MakeDistrosAndBackUp() + +U0 TOSProgress(U8 *st) +{ + U8 buf[STR_LEN]; + StrPrint(buf,"%d. %s",++progress4,st); + "$$PURPLE$$$$TX+CX,\"%s\"$$$$FG$$\n",buf; + StrCpy(progress3_desc,buf); +} + +U0 TOSProfanity() +{ + Profanity(,"D:/Wb/*;" + "!*/Misc/PCIDevices.DD*;!*/Misc/Bible.TXT*;" + "!*/Books?/*;!*/Sup1/Sup1Words/*;!*/Sup1/Sup1Blog/Profanity.DD*;" + "!*/Sup1/Sup1Blog/NumBible.TXT*;!*/God/Vocab.DD*" + ); +} + +public U0 TOSRegen() { SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ - progress4=*progress4_desc=0; - progress4_max=18; + progress3_max=1; + progress4=-1; + *progress4_desc=0; + progress4_max=12+MAKE_STD+MAKE_STD_RS+MAKE_ULTRA+MAKE_ULTRA_RS+MAKE_SUP1+ + MAKE_WEB+MAKE_BOOKS1+MAKE_BOOKS2+MAKE_DBG+MAKE_STAFF; progress4_t0=tS; + RegExe("TempleOS/TOSRegen"); + + TOSProgress("ChkDsk All"); AutoComplete; WinBorder; WinMax; - ChkAll; progress4++; + ChkAll; - MakeLineRepFile; progress4++; - TOSCopyDrv('C','D'); progress4++; - DelTree ("D:/Wb"); progress4++; - CopyTree("C:/","D:/Wb"); progress4++; + TOSProgress("Make LineRep"); + MakeLineRepFile; + + TOSProgress("Copy C to D"); + TOSCopyDrv('C','D'); + + TOSProgress("Del D:/Wb"); + DelTree ("D:/Wb"); + + TOSProgress("Copy C to D:/Wb"); + CopyTree("C:/","D:/Wb"); DocClear; - MakeStdDistro; progress4++; +#if MAKE_STD + TOSProgress("Make Standard Distro ISO"); + MakeStdDistro; DocClear; - Move(TOS_ISO_NAME,"D:/Wb/TempleOSCD.ISO"); progress4++; - -// MakeStdRedSeaDistro; progress4++; -// DocClear; -// Move(TOS_ISO_C_NAME,"D:/Wb/TempleOSCDRS.ISO"); progress4++; - - MakeUltraDistro; progress4++; + Move(TOS_ISO_NAME,"D:/Wb/TempleOSCD.ISO"); +#endif +#if MAKE_STD_RS + TOSProgress("Make Standard RedSea Distro ISO"); + MakeStdRedSeaDistro; DocClear; - Move(TOS_ISO_NAME,"D:/Wb/TempleOSUltra.ISO"); progress4++; - -// MakeUltraRedSeaDistro; progress4++; -// DocClear; -// Move(TOS_ISO_C_NAME,"D:/Wb/TempleOSUltraRS.ISO"); progress4++; - - MakeSup1ISO; progress4++; + Move(TOS_ISO_C_NAME,"D:/Wb/TempleOSCDRS.ISO"); +#endif +#if MAKE_ULTRA + TOSProgress("Make Ultra Distro ISO"); + MakeUltraDistro; DocClear; - Move(TOS_ISO_C_NAME,"D:/Wb/TempleOSSup1.ISO"); progress4++; - -// MakeDbgDistro; progress4++; -// DocClear; -// Move(TOS_ISO_NAME,"D:/Wb/TempleOSDbg.ISO"); progress4++; - - MakeStaffDistro; progress4++; + Move(TOS_ISO_NAME,"D:/Wb/TempleOSUltra.ISO"); +#endif +#if MAKE_ULTRA_RS + TOSProgress("Make Ultra RedSea Distro ISO"); + MakeUltraRedSeaDistro; DocClear; - Move(TOS_ISO_NAME,"D:/Wb/TempleOSStaff.ISO"); progress4++; + Move(TOS_ISO_C_NAME,"D:/Wb/TempleOSUltraRS.ISO"); +#endif +#if MAKE_DBG + TOSProgress("Make Dbg Distro ISO"); + MakeDbgDistro; + DocClear; + Move(TOS_ISO_NAME,"D:/Wb/TempleOSDbg.ISO"); +#endif +#if MAKE_STAFF + TOSProgress("Make Staff Distro ISO"); + MakeStaffDistro; + DocClear; + Move(TOS_ISO_NAME,"D:/Wb/TempleOSStaff.ISO"); +#endif + +#if MAKE_SUP1 + TOSProgress("Make Supplemental #1 ISO"); + RedSeaISO("D:/Wb/TempleOSSup1","C:/Home/Sup1"); +#endif +#if MAKE_WEB + TOSProgress("Make www.templeos.org ISO"); + RedSeaISO("D:/Wb/TempleOSWeb","C:/Home/Web"); +#endif +#if MAKE_BOOKS1 + TOSProgress("Make Books #1 ISO"); + RedSeaISO("D:/Wb/TempleOSBooks1","C:/Home/Books1"); +#endif +#if MAKE_BOOKS2 + TOSProgress("Make Books #2 ISO"); + RedSeaISO("D:/Wb/TempleOSBooks2","C:/Home/Books2"); +#endif UpdateISODocDefines; - Cd("C:/"); - DocClear; - "$$PURPLE$$Lines longer than 80 columns:$$FG$$\n"; + + TOSProgress("Check for Long Lines"); if (LongLines) throw; - progress4++; DocClear; - "$$PURPLE$$Broken DolDoc Links:$$FG$$\n"; + TOSProgress("Check for Broken DolDoc Links"); if (LinkChk) throw; - progress4++; DocClear; - MakeSymFiles; progress4++; + TOSProgress("Make Symbol Files"); + MakeSymFiles; DocClear; - MakeWebSite; progress4++; + TOSProgress("Make WebSite"); + MakeWebSite; + DocClear; + TOSProgress("Check WebSite for Profanity"); + if (TOSProfanity) + throw; + + TOSProgress("ChkDsk All"); Drv('C'); - ChkAll; progress4++; + ChkAll; + + TOSProgress("Done"); SettingsPop; "Elapsed Time:%5.3f\n",tS-progress4_t0; - ProgressBarsRst; + ProgressBarsRst("TempleOS/TOSRegen"); } public U0 PreBackUp() diff --git a/Demo/AcctExample/TOSHolySpirit.HC b/Demo/AcctExample/TOSHolySpirit.HC index 10e064e..9fbb993 100644 --- a/Demo/AcctExample/TOSHolySpirit.HC +++ b/Demo/AcctExample/TOSHolySpirit.HC @@ -79,8 +79,7 @@ U0 TOSBookLines(U8 *book_filename,I64 book_lines,U8 *st,I64 num_lines, verse=BibleLine2Verse(start); DocPrint(doc_out,"$TX,"KingJamesBible",HTML="http://www.templeos.org/Wb/Home/Sup1/Sup1Blog/NumBible.TXT"$ (%s)\n\nGod says...\n$$RED$$",verse); Free(verse); - } else if (StrMatch("Kosher",book_filename)) - DocPrint(doc_out,"$TX,"KosherTexts",HTML="http://www.templeos.org/Wb/Home/Sup1/Sup1Blog/Kosher.TXT"$\n\nGod says...\n$$RED$$"); + } doc_in=DocNew; BookLines(doc_in,start,num_lines,book_filename); @@ -116,52 +115,69 @@ U0 TOSBookLines(U8 *book_filename,I64 book_lines,U8 *st,I64 num_lines, #define GBP_MEDIUM 1 #define GBP_LONG 2 -public U0 GodBooksPassage(U8 *files_find_mask,I64 len=512, +public U0 GodBooksPassage(U8 *files_find_mask,U8 *file_mask="*",I64 len=512, I64 rand_i32=MIN_I64,I64 verbosity=GBP_SHORT) {//Make God pick a book passage. $LK+PU,"Holy Spirit Instructions",A="FI:::/Adam/God/HSNotes.DD"$ CDirEntry *tmpde=FilesFind(files_find_mask, FUF_RECURSE|FUF_JUST_FILES|FUF_JUST_TXT), - *tmpde1=tmpde; + *tmpde1,*tmpde2,**tmpde3; I64 i=0; U8 *st,*st2=NULL; + + tmpde3=&tmpde2; + tmpde2=NULL; while (tmpde) { - st=FileRead(tmpde->full_name); - tmpde->user_data=StrLen(st); - if (verbosity==GBP_LONG) - "%08X-",i; - if (tmpde->user_data>=len) - i+=tmpde->user_data+1-len; - if (verbosity==GBP_LONG) - "%08X:$$LK,\"%s\",A=\"FI:%s\"$$\n", - i-1,tmpde->full_name+2,tmpde->full_name; - Free(st); - tmpde=tmpde->next; + tmpde1=tmpde->next; + if (WildMatch(tmpde->full_name,file_mask)) { + *tmpde3=tmpde; + tmpde3=&tmpde->next; + } else + DirEntryDel(tmpde); + tmpde=tmpde1; } - if (rand_i32<0) - rand_i32=GodBits(32); - if (verbosity==GBP_LONG) - '\n'; - if (verbosity>=GBP_MEDIUM) - "%08X*%08X",rand_i32,i; - i*=rand_i32; - if (verbosity>=GBP_MEDIUM) - "=%08X.%08X\n",i.u32[1],i.u32[0]; - i=i.u32[1]; - tmpde=tmpde1; - while (tmpde) { - if (!st2 && tmpde->user_data>=len) { - i-=tmpde->user_data+1-len; - if (i<0) { - st=FileRead(tmpde->full_name); - st2=st+(tmpde->user_data+1-len)+i; - st2[len]=0; - "%s\nGod says...\n$$RED$$%s$$FG$$\n",tmpde->full_name,st2; - Free(st); - } + *tmpde3=NULL; + + if (tmpde=tmpde2) { + while (tmpde) { + st=FileRead(tmpde->full_name); + tmpde->user_data=StrLen(st); + if (verbosity==GBP_LONG) + "%08X-",i; + if (tmpde->user_data>=len) + i+=tmpde->user_data+1-len; + if (verbosity==GBP_LONG) + "%08X:$$LK,\"%s\",A=\"FI:%s\"$$\n", + i-1,tmpde->full_name+2,tmpde->full_name; + Free(st); + tmpde=tmpde->next; } - tmpde=tmpde->next; + if (rand_i32<0) + rand_i32=GodBits(32); + if (verbosity==GBP_LONG) + '\n'; + if (verbosity>=GBP_MEDIUM) + "%08X*%08X",rand_i32,i; + i*=rand_i32; + if (verbosity>=GBP_MEDIUM) + "=%08X.%08X\n",i.u32[1],i.u32[0]; + i=i.u32[1]; + + tmpde=tmpde2; + while (tmpde) { + if (!st2 && tmpde->user_data>=len) { + i-=tmpde->user_data+1-len; + if (i<0) { + st=FileRead(tmpde->full_name); + st2=st+(tmpde->user_data+1-len)+i; + st2[len]=0; + "%s\nGod says...\n$$RED$$%s$$FG$$\n",tmpde->full_name,st2; + Free(st); + } + } + tmpde=tmpde->next; + } + DirTreeDel(tmpde2); } - DirTreeDel(tmpde1); } U8 *FileDblRead(U8 *filename,I64 line) @@ -542,7 +558,7 @@ U0 TOSGodDoodle(CNISTBeaconHexWordForm *gm,Bool NIST) StrPrint(hex,"%s%s",gm->rnd0,gm->rnd1); if (NIST) { gm->timestamp=FloorI64(CDate2Unix(Now),60); - if (DocForm(gm(CNISTBeaconHexWordForm *))) + if (PopUpForm(gm(CNISTBeaconHexWordForm *))) NISTBeaconURL(gm->timestamp); else goto gd_done; @@ -550,7 +566,7 @@ U0 TOSGodDoodle(CNISTBeaconHexWordForm *gm,Bool NIST) CatPrint(hex,"%s%s",gm->rnd2,gm->rnd3); if (NIST) { gm->timestamp=FloorI64(CDate2Unix(Now),60); - if (DocForm(gm(CNISTBeaconHexWordForm *))) + if (PopUpForm(gm(CNISTBeaconHexWordForm *))) NISTBeaconURL(gm->timestamp); else goto gd_done; @@ -558,7 +574,7 @@ U0 TOSGodDoodle(CNISTBeaconHexWordForm *gm,Bool NIST) CatPrint(hex,"%s%s",gm->rnd4,gm->rnd5); if (NIST) { gm->timestamp=FloorI64(CDate2Unix(Now),60); - if (DocForm(gm(CNISTBeaconHexWordForm *))) + if (PopUpForm(gm(CNISTBeaconHexWordForm *))) NISTBeaconURL(gm->timestamp); else goto gd_done; @@ -566,7 +582,7 @@ U0 TOSGodDoodle(CNISTBeaconHexWordForm *gm,Bool NIST) CatPrint(hex,"%s%s",gm->rnd6,gm->rnd7); if (NIST) { gm->timestamp=FloorI64(CDate2Unix(Now),60); - if (DocForm(gm(CNISTBeaconHexWordForm *))) + if (PopUpForm(gm(CNISTBeaconHexWordForm *))) NISTBeaconURL(gm->timestamp); else goto gd_done; @@ -574,7 +590,7 @@ U0 TOSGodDoodle(CNISTBeaconHexWordForm *gm,Bool NIST) CatPrint(hex,"%s%s",gm->rnd8,gm->rnd9); if (NIST) { gm->timestamp=FloorI64(CDate2Unix(Now),60); - if (DocForm(gm(CNISTBeaconHexWordForm *))) + if (PopUpForm(gm(CNISTBeaconHexWordForm *))) NISTBeaconURL(gm->timestamp); else goto gd_done; @@ -598,7 +614,7 @@ I64 GodMiscHeader(U8 *type=NULL) CDateStruct ds; I64 res; if (type) { - res=FloorI64(CDate2Unix(Now+120*CDATE_FREQ),60); + res=FloorI64(CDate2Unix(Now+5*60*CDATE_FREQ),60); Date2Struct(&ds,Unix2CDate(res)+local_time_offset+30*CDATE_FREQ); "Response of %s at %02d:%02d Timestamp:%d.\n\n",type,ds.hour,ds.min,res; In("%c//Response of %s at %02d:%02d Timestamp:%d.\n\n", @@ -609,69 +625,54 @@ I64 GodMiscHeader(U8 *type=NULL) return res; } -RegSetDftEntry("TempleOS/TOSGodMisc","I64 tos_timestamp=0,tos_type=0;\n"); -RegExeBranch("TempleOS/TOSGodMisc"); - U0 NISTGodMisc1() { - tos_type=PopUpPickLst("ExtDec5Bible\0ExtDec5Kosher\0LinuxWords\0HappyWords\0" + I64 timestamp,type; + type=PopUpPickLst("ExtDec5Bible\0LinuxWords\0HappyWords\0" "Hex5Bible\0Hex8Books\0Doodle\0Movie\0Painting\0Metallica\0"); - switch (tos_type) { - case: tos_timestamp=GodMiscHeader("Bible"); break; - case: tos_timestamp=GodMiscHeader("Kosher"); break; - case: tos_timestamp=GodMiscHeader("LinuxWords"); break; - case: tos_timestamp=GodMiscHeader("HappyWords"); break; - case: tos_timestamp=GodMiscHeader("Bible"); break; - case: tos_timestamp=GodMiscHeader("BookPick"); break; - case: tos_timestamp=GodMiscHeader("Doodle"); break; - case: tos_timestamp=GodMiscHeader("Movie"); break; - case: tos_timestamp=GodMiscHeader("Painting"); break; - case: tos_timestamp=GodMiscHeader("Metallica"); break; + switch (type) { + case: timestamp=GodMiscHeader("Bible"); break; + case: timestamp=GodMiscHeader("LinuxWords"); break; + case: timestamp=GodMiscHeader("HappyWords"); break; + case: timestamp=GodMiscHeader("Bible"); break; + case: timestamp=GodMiscHeader("BookPick"); break; + case: timestamp=GodMiscHeader("Doodle"); break; + case: timestamp=GodMiscHeader("Movie"); break; + case: timestamp=GodMiscHeader("Painting"); break; + case: timestamp=GodMiscHeader("Metallica"); break; } - RegWriteBranch("TempleOS/TOSGodMisc","I64 tos_timestamp=%d,tos_type=%d;\n", - tos_timestamp,tos_type); + Once("InStr(\"\\\"Blog(FALSE);\n\\\";" + "NISTGodMisc2(%d,%d);\");",timestamp,type); } -U0 NISTGodMisc2() +U0 NISTGodMisc2(I64 timestamp,I64 type) { CRandExtDec5Form *gm=CAlloc(sizeof(CRandExtDec5Form)); - - gm->timestamp=tos_timestamp; - tos_timestamp=0; - RegWriteBranch("TempleOS/TOSGodMisc","I64 tos_timestamp=%d,tos_type=%d;\n", - tos_timestamp,tos_type); - - switch (tos_type) { + gm->timestamp=timestamp; + switch (type) { case: - if (DocForm(gm(CRandExtDec5Form *))) { + if (PopUpForm(gm(CRandExtDec5Form *))) { NISTBeaconURL(gm->timestamp); TOSBookLines("~/Sup1/Sup1Blog/NumBible.TXT",ST_BIBLE_LINES, gm->rnd0,20,-5,FALSE,FALSE); } break; case: - if (DocForm(gm(CRandExtDec5Form *))) { - NISTBeaconURL(gm->timestamp); - TOSBookLines("~/Sup1/Sup1Blog/Kosher.TXT",100000, - gm->rnd0,20,-5,FALSE,FALSE); - } - break; - case: - if (DocForm(gm(CHexWordForm *))) { + if (PopUpForm(gm(CHexWordForm *))) { NISTBeaconURL(gm->timestamp); Adam("GodInit(\"~/Sup1/Sup1Words/LinuxDict.TXT*\");"); GodWordBatch(gm); } break; case: - if (DocForm(gm(CHexWordForm *))) { + if (PopUpForm(gm(CHexWordForm *))) { NISTBeaconURL(gm->timestamp); Adam("GodInit(\"~/Sup1/Sup1Words/HappyWords.TXT*\");"); GodWordBatch(gm); } break; case: - if (DocForm(gm(CRandHex5Form *))) { + if (PopUpForm(gm(CRandHex5Form *))) { "$$TX,\"How this random Bible passage was chosen.\"," "HTML=\"http://www.templeos.org/Wb" "/Home/Web/TAD/NISTPassage.html\"$$\n"; @@ -681,23 +682,23 @@ U0 NISTGodMisc2() } break; case: - if (DocForm(gm(CRandHex8Form *))) { + if (PopUpForm(gm(CRandHex8Form *))) { "$$TX,\"How this random book pick was chosen.\"," "HTML=\"http://www.templeos.org/Wb" - "/Home/Web/TAD/NISTPick001.html\"$$\n"; + "/Home/Web/TAD/NISTPick002.html\"$$\n"; NISTBeaconURL(gm->timestamp); - GodBooksPassage("C:/Home/Sup1/Sup1Texts/*",, + GodBooksPassage("C:/Home/*","C:/Home/Books?/*",, Str2I64(gm->rnd0,16),GBP_MEDIUM); } break; case: - if (DocForm(gm(CHexWordForm *))) { + if (PopUpForm(gm(CHexWordForm *))) { NISTBeaconURL(gm->timestamp); TOSGodDoodle(gm,TRUE); } break; case: - if (DocForm(gm(CMoviesForm *))) { + if (PopUpForm(gm(CMoviesForm *))) { NISTBeaconURL(gm->timestamp); GodVideo("Top 100 Movies", "http://www.afi.com/100years/movies10.aspx", @@ -705,7 +706,7 @@ U0 NISTGodMisc2() } break; case: - if (DocForm(gm(CPaintingsForm *))) { + if (PopUpForm(gm(CPaintingsForm *))) { NISTBeaconURL(gm->timestamp); GodWebIdx("Top 100 Paintings", "http://www.brushwiz.com/most-famous-paintings", @@ -713,7 +714,7 @@ U0 NISTGodMisc2() } break; case: - if (DocForm(gm(CMetallicaForm *))) { + if (PopUpForm(gm(CMetallicaForm *))) { NISTBeaconURL(gm->timestamp); GodVideo("Metallica Song", "http://home.hccnet.nl/a.r.adams/lyrics/" @@ -746,7 +747,7 @@ U0 GodMisc() end: GodMiscHeader; "$$TX,\"%$$Q\",HTML=\"%$$Q\"$$\n",tag,tag; - switch (PopUpPickLst("ExtDec5Bible\0ExtDec5Kosher\0LinuxWords\0" + switch (PopUpPickLst("ExtDec5Bible\0LinuxWords\0" "HappyWords\0Hex5Bible\0Hex8Books\0Doodle\0Movie\0Painting\0" "Metallica\0")) { case: @@ -754,11 +755,6 @@ U0 GodMisc() TOSBookLines("~/Sup1/Sup1Blog/NumBible.TXT",ST_BIBLE_LINES, gm->rnd0,20,-5,FALSE,FALSE); break; - case: - if (DocForm(gm(CRandExtDec5Form *))) - TOSBookLines("~/Sup1/Sup1Blog/Kosher.TXT",100000, - gm->rnd0,20,-5,FALSE,FALSE); - break; case: if (DocForm(gm(CHexWordForm *))) { Adam("GodInit(\"~/Sup1/Sup1Words/LinuxDict.TXT*\");"); @@ -784,8 +780,8 @@ U0 GodMisc() if (DocForm(gm(CRandHex8Form *))) { "$$TX,\"How this random book pick was chosen.\"," "HTML=\"http://www.templeos.org/Wb" - "/Home/Web/TAD/Pick001.html\"$$\n"; - GodBooksPassage("C:/Home/Sup1/Sup1Texts/*",, + "/Home/Web/TAD/NISTPick002.html\"$$\n"; + GodBooksPassage("C:/Home/*","C:/Home/Books?/*",, Str2I64(gm->rnd0,16),GBP_MEDIUM); } break; @@ -831,18 +827,13 @@ U0 GodMisc() end: GodMiscHeader; "$$TX,\"%$$Q\",HTML=\"%$$Q\"$$\n",tag,tag; - switch (PopUpPickLst("ExtDec5Bible\0ExtDec5Kosher\0HexWordBatch\0" + switch (PopUpPickLst("ExtDec5Bible\0HexWordBatch\0" "Hex5Bible\0Hex8Books\0Movie\0Metallica\0")) { case: if (DocForm(gm(CRandExtDec5Form *))) TOSBookLines("~/Sup1/Sup1Blog/NumBible.TXT",ST_BIBLE_LINES, gm->rnd0,20,-5,FALSE,FALSE); break; - case: - if (DocForm(gm(CRandExtDec5Form *))) - TOSBookLines("~/Sup1/Sup1Blog/Kosher.TXT",100000, - gm->rnd0,20,-5,FALSE,FALSE); - break; case: if (DocForm(gm(CHexWordForm *))) GodWordBatch(gm); @@ -860,8 +851,8 @@ U0 GodMisc() if (DocForm(gm(CRandHex8Form *))) { "$$TX,\"How this random book pick was chosen.\"," "HTML=\"http://www.templeos.org/Wb" - "/Home/Web/TAD/Pick001.html\"$$\n"; - GodBooksPassage("C:/Home/Sup1/Sup1Texts/*",, + "/Home/Web/TAD/NISTPick002.html\"$$\n"; + GodBooksPassage("C:/Home/*","C:/Home/Books?/*",, Str2I64(gm->rnd0,16),GBP_MEDIUM); } break; @@ -897,8 +888,8 @@ U0 GodMisc() case: GodMiscHeader; FifoU8Flush(god.fifo); - GodBitsIns(GOD_GOOD_BITS,KbdMouseEvtTime>>GOD_BAD_BITS); - GodBooksPassage("C:/Home/Sup1/Sup1Texts/*"); + GodBitsIns(GOD_GOOD_BITS,KbdMsEvtTime>>GOD_BAD_BITS); + GodBooksPassage("C:/Home/*","C:/Home/Books?/*"); break; } } @@ -1134,7 +1125,7 @@ U0 GodCodeJmp() } FifoU8Flush(god.fifo); - GodBitsIns(GOD_GOOD_BITS,KbdMouseEvtTime>>GOD_BAD_BITS); + GodBitsIns(GOD_GOOD_BITS,KbdMsEvtTime>>GOD_BAD_BITS); num=GodBits(GOD_GOOD_BITS)%cnt; tmpde=tmpde1; @@ -1151,12 +1142,12 @@ U0 GodCodeJmp() Free(st); } -RegSetDftEntry("TempleOS/TOSGodOffer","I64 tos_gus_gwen=0;\n"); -RegExeBranch("TempleOS/TOSGodOffer"); +RegDft("TempleOS/TOSGodOffer","I64 tos_gus_gwen=0;\n"); +RegExe("TempleOS/TOSGodOffer"); U0 GodOffer() { - switch (PopUpPickLst("MosesComic\0GusGwen\0Fiction\0")) { + switch (PopUpPickLst("MosesComic\0GusGwen\0Fiction\0DyingLight\0")) { case: "---- Moses Comic ---- " "(Set in the $TX,"Numbers 11",HTML="http://www.biblegateway.com/passage/?search=Numbers%%%%2011&version=NIV"$ " @@ -1165,17 +1156,23 @@ U0 GodOffer() "God says, \"\"\n"; break; case: - "---- Gus and Gwen Soap Opera Episode %d ----\n" + "---- Gus and Gwen: A soap opera Episode %d ----\n" "Gus says, \"\"\n" "Gwen says, \"\"\n" "-----------------------------------------\n",tos_gus_gwen++; - RegWriteBranch("TempleOS/TOSGodOffer","I64 tos_gus_gwen=%d;\n", + RegWrite("TempleOS/TOSGodOffer","I64 tos_gus_gwen=%d;\n", tos_gus_gwen); break; case: "---- $TX,"Collaborative Fiction",HTML="http://en.wikipedia.org/wiki/Collaborative_fiction"$ ----\n" "Once upon a time "; break; + case: + "---- The Dying Light: A soap opera ----\n" + "Dr. Hans says, \"\"\n" + "Nurse Ruth, \"\"\n" + "---------------------------------------\n"; + break; } } diff --git a/Demo/AcctExample/TOSMisc.HC b/Demo/AcctExample/TOSMisc.HC index 3045293..d7d3098 100644 --- a/Demo/AcctExample/TOSMisc.HC +++ b/Demo/AcctExample/TOSMisc.HC @@ -1,46 +1,6 @@ #help_index "TOS" -public U0 CursorRemFile(U8 *filename) -{ - CDoc *doc=DocRead(filename,DOCF_PLAIN_TEXT|DOCF_NO_CURSOR); - DocWrite(doc); - DocDel(doc); -} -public U0 CursorRem(U8 *files_find_mask="*") -{ - I64 fuf_flags=0; - ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r+T+f+F+O"); - CDirEntry *tmpde=FilesFind(files_find_mask,fuf_flags),*tmpde1=tmpde; - while (tmpde) { - CursorRemFile(tmpde->full_name); - Touch(tmpde->full_name,"",,tmpde->datetime); - tmpde=tmpde->next; - } - DirTreeDel(tmpde1); -} - -U0 UncollapseFile(U8 *filename,I64 *) -{ - CDoc *doc=DocRead(filename,DOCF_NO_CURSOR); - DocCollapse(FALSE,doc); - DocWrite(doc); - DocDel(doc); -} -public U0 Uncollapse(U8 *files_find_mask="*",U8 *fu_flags=NULL) -{ - I64 fuf_flags=0; - ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r+f+F+$$+O"); - ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),fu_flags); - CDirEntry *tmpde=FilesFind(files_find_mask,fuf_flags),*tmpde1=tmpde; - while (tmpde && !Bt(&fuf_flags,FUf_CANCEL)) { - UncollapseFile(tmpde->full_name,&fuf_flags); - Touch(tmpde->full_name,"",,tmpde->datetime); - tmpde=tmpde->next; - } - DirTreeDel(tmpde1); -} - -#define VIDEO_FRAME_RATE 30 +#define VIDEO_FRAME_RATE 29.97 #define FG_JUST_AUDIO 0 #define FG_BOOT_DRV 1 @@ -104,7 +64,7 @@ public U0 FrameGrabberToggle() last_time=tS; if (fg_on) { fg_on=FALSE; - Snd(0); + Snd; wall->record=snd.record=FALSE; Sleep(1000); User("CopyVideo;Exit;\n"); @@ -113,7 +73,7 @@ public U0 FrameGrabberToggle() if (fg_mode!=FG_JUST_AUDIO) Spawn(&FrameGrabberTask,NULL,"Frame Grabber"); wall->record=snd.record=TRUE; - Snd(0); + Snd; } } } @@ -123,7 +83,7 @@ public U0 JukeSong(I64 num) AutoComplete; if (!fg_on) FrameGrabberToggle; - JukeSongsPuppet("~/Sup1/Sup1Psalmody",,num,num+1); + JukeSongsPuppet("~/Sup1/Sup1Hymns",,num,num+1); if (fg_on) FrameGrabberToggle; } @@ -133,7 +93,7 @@ public U0 JukeLines(I64 start_line,I64 end_line) AutoComplete; if (!fg_on) FrameGrabberToggle; - JukeSongsPuppet("~/Sup1/Sup1Psalmody",,start_line*5,end_line*5); + JukeSongsPuppet("~/Sup1/Sup1Hymns",,start_line*5,end_line*5); if (fg_on) FrameGrabberToggle; } @@ -219,22 +179,18 @@ public U0 BMP2TXT(U8 *_in_name,U8 *_out_name=NULL) Free(out_name); } -RegSetDftEntry("TempleOS/TOSVideos", - "I64 tos_code_walk_thru=1,tos_after_egypt_in_action=1;\n"); -RegExeBranch("TempleOS/TOSVideos"); +RegDft("TempleOS/TOSVideos","I64 tos_code_walk_thru=1;\n"); +RegExe("TempleOS/TOSVideos"); U0 TOSRegInit() { DefinePrint("DD_CODE_WALK_THRU","Episode #%d",tos_code_walk_thru); - DefinePrint("DD_AFTER_EGYPT_IN_ACTION","Episode #%d", - tos_after_egypt_in_action); } TOSRegInit; U0 TOSRegWrite() { - RegWriteBranch("TempleOS/TOSVideos", - "I64 tos_code_walk_thru=%d,tos_after_egypt_in_action=%d;\n", - tos_code_walk_thru,tos_after_egypt_in_action); + RegWrite("TempleOS/TOSVideos", + "I64 tos_code_walk_thru=%d;\n",tos_code_walk_thru); TOSRegInit; } @@ -263,23 +219,6 @@ U8 *TOSYouTube() return res; } -U0 AfterEgyptInAction() -{ - SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ - Adam("GodInit(\"/Adam/God/Vocab.DD*\");"); - AutoComplete; - WinBorder; - WinMax; - if (!fg_on) - PopUp("Sleep(50);FrameGrabberToggle;"); - Ed("~/Videos/AfterEgypt.DD.Z"); - Msg(MSG_KEY_DOWN_UP,CH_SPACE,0x3900000039); // - ExeFile("::/Apps/AfterEgypt/Run"); - SettingsPop; - tos_after_egypt_in_action++; - TOSRegWrite; -} - U0 CodeWalkThru() { SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ @@ -309,16 +248,40 @@ U0 TOSJukeVideo(I64 start=0,I64 end=10) Free(buf); AutoComplete; FrameGrabberToggle; - JukeSongsPuppet("~/Sup1/Sup1Psalmody",,start,end); + JukeSongsPuppet("~/Sup1/Sup1Hymns",,start,end); FrameGrabberToggle; } -#define MEM_TEST_SIZE 128*0x100000 +#define MEM_TEST_SIZE 1024*1024 U0 MemTest() { - while (sys_data_bp->alloced_u8s-sys_data_bp->used_u8s>MEM_TEST_SIZE*2) { - MemSet(MAlloc(MEM_TEST_SIZE),0x88,MEM_TEST_SIZE); - "%X\n",sys_data_bp->alloced_u8s-sys_data_bp->used_u8s; + U8 *b; + while (sys_data_bp->alloced_u8s-sys_data_bp->used_u8s>0x1000000) { + b=MAlloc(MEM_TEST_SIZE,Fs->data_heap); + MemSet(b,0x88,MSize(b)); + "Data:%X\n",sys_data_bp->alloced_u8s-sys_data_bp->used_u8s; + Yield; + } + while (sys_code_bp->alloced_u8s-sys_code_bp->used_u8s>0x1000000) { + b=MAlloc(MEM_TEST_SIZE,Fs->code_heap); + MemSet(b,0x88,MSize(b)); + "Code:%X\n",sys_code_bp->alloced_u8s-sys_code_bp->used_u8s; Yield; } } + +public I64 Profanity( + U8 *needle_filename="C:/Home/Sup1/Sup1Blog/Profanity.DD.Z", + U8 *files_find_mask="/*",U8 *fu_flags=NULL) +{//Scan for profanity. + CCmpCtrl *cc; + I64 res=0; + if (FileFind(needle_filename)) { + cc=CmpCtrlNew(MStrPrint("#include \"%s\"",needle_filename)); + while (Lex(cc)) + if (cc->token==TK_IDENT) + res+=Find(cc->cur_str,files_find_mask,fu_flags); + CmpCtrlDel(cc); + } + return res; +} diff --git a/Demo/AcctExample/TOSPolicies.DD b/Demo/AcctExample/TOSPolicies.DD new file mode 100644 index 0000000..6d59ab2 --- /dev/null +++ b/Demo/AcctExample/TOSPolicies.DD @@ -0,0 +1,118 @@ +$WW,1$$FG,5$$TX+CX,"TOS Staff Policies"$$FG$ + +* Motto: Run toward bugs, not away from bugs. + +* Be Metallica. Use short, sharp, powerful words, as though a song. + +* Be careful $FG,2$/Demo/AcctExample$FG$ doesn't get extra files. When you run TOSRegen(), it will copy home files to $FG,2$/Demo/AcctExample$FG$. + +* Be careful $FG,2$remote/Wb$FG$ site doesn't get extra files. If you delete or rename a file, also delete the $FG,2$remote/Wb$FG$ file from the site. + +$TR,"PreBackUp()"$ +$ID,2$ +Linux: Export Bookmarks to ~/TAD/Home/Sup1/Sup1Blog/Bookmarks.html + +Linux: >vm_in +{ + TempleOS: >PreBackUp; + TempleOS: Update Budget + TempleOS: >#include "::/Misc/OSTestSuite" + TempleOS: >Del("/Home/Demo*"); +} +$ID,-2$ +$TR,"Regen()"$ +$ID,2$ +When you do these four steps, do them as quickly as possible so that the $LK,"::/Doc/ChangeLog.DD"$ datetime approximately matches Kernel $LK,"sys_compile_time",A="MN:sys_compile_time"$. +{ + TempleOS: Add ordinary $LK,"::/Doc/ChangeLog.DD"$ entry. + TempleOS: >TOSBootHDIns('C'); + TempleOS: >BootRAM; + TempleOS: >TOSRegen; +} +$ID,-2$ +$TR,"NewRelease(Bool full=FALSE)"$ +$ID,2$ +if ($FG,2$full$FG$) + ]PreBackUp() + +]Regen() + +Linux: >vm_out + +if ($FG,2$full$FG$) { + Linux: Burn ~/TAD to memory stick. + + On other machine { + Linux: Copy ~/TAD from memory stick. + + VMware: Install new TempleOSStaff.ISO to machine named, "TOS". + { //2048 Meg RAM + TempleOS: $LK,"TOSStaffIns",A="MN:TOSStaffIns"$(); in VMware. + ]Regen() + TempleOS: >#include "::/Misc/OSTestSuite" + TempleOS: >Del("/Home/Demo*"); + } + + Linux: >emu_staff_new + Linux: >emu8core or >emu24core + { + TempleOS: $LK,"TOSStaffIns",A="MN:TOSStaffIns"$(); in QEMU. + ]Regen() + } + } +} + +Linux: CrossFTP sync ~/TAD/Site1/Wb to remote/Wb + +if ($FG,2$full$FG$) { + FileZilla + Upload ~/TAD/Site1/index.html to remote/index.html + Upload ~/TAD/Site1/TempleOS.html to remote/TempleOS.html +} + +In WebHost FileMgr { + Del { + remote/TempleOSCD.ISO + remote/TempleOSSup1.ISO.C + remote/TempleOSWeb.ISO.C + remote/TempleOSUltra.ISO + } + Copy up one level to remote root { + remote/Wb/TempleOSCD.ISO + remote/Wb/TempleOSSup1.ISO.C + remote/Wb/TempleOSWeb.ISO.C + remote/Wb/TempleOSUltra.ISO + } +} +$ID,-2$ +$TR,"NewVersion(Bool full=FALSE)"$ +$ID,2$ +Increment minor version number. + >$LK,"R",A="MN:R"$("3.12","3.13","-i-l"); //Approve by hand. + +Add version release notice in $LK,"::/Doc/ChangeLog.DD"$. + +]NewRelease(TRUE); + +Submit to www.betanews.com. +Send email to MajorGeeks. +if ($FG,2$full$FG$) { + Submit to www.upload.com. + Upload to SourceForge. +} +$ID,-2$ +$TR,"NewYearlyVersion()"$ +$ID,2$ +Increment major version number. + >$LK,"R",A="MN:R"$("3.13","4.00","-i-l"); //Approve by hand. + +Add version release notice in $LK,"::/Doc/ChangeLog.DD"$. + +$LK,"Update ::/Misc/PCIDevices.DD",A="FF:::/Adam/DevInfo.HC,PCIDevFileGen"$ + +Remove 6 months from bottom of $LK,"::/Doc/ChangeLog.DD"$. + +]NewVersion(TRUE); +$ID,-2$ +* If you change the compiler language syntax, immediately make a ]NewRelease(TRUE). + diff --git a/Demo/AcctExample/TOSToHtml.HC b/Demo/AcctExample/TOSToHtml.HC index 2293ee7..fca04a9 100644 --- a/Demo/AcctExample/TOSToHtml.HC +++ b/Demo/AcctExample/TOSToHtml.HC @@ -189,7 +189,7 @@ public CDoc *Doc2Html(CDoc *doc_in,U8 *html_header=NULL,U8 *body_header=NULL, "\n" "\n" - "\n"; + "\n"; if (!body_header) body_header= "\n" "
\n";
@@ -244,8 +244,8 @@ public CDoc *Doc2Html(CDoc *doc_in,U8 *html_header=NULL,U8 *body_header=NULL,
 
       if (no_bwd)
 	while (colx)
-	  HtmlPutS(doc_out,doc_e->settings.final_u32_attr,&old_u32_attr,FALSE,
-		" ",&col,style_bitmap);
+	  HtmlPutS(doc_out,doc_e->settings.final_u32_attr&~DOCET_UNDERLINE,
+		&old_u32_attr,TRUE," ",&col,style_bitmap);
 
       link_st=NULL;
       if (doc_e->de_flags&DOCEF_HTML_LINK)
@@ -411,7 +411,7 @@ U0 TOSWebFile(U8 *name,Bool line_nums=FALSE)
   if (FileFind(name,&de)) {
     Free(de.full_name);
     "File:%s\n",name;
-    UncollapseFile(name,NULL);
+    Collapse(name,FALSE);
     Touch(name,"",,de.datetime);
     name2=ChgExt(name,"html");
 
@@ -430,7 +430,7 @@ U0 TOSWebFile(U8 *name,Bool line_nums=FALSE)
 	  "\n"
-	  "\n",
+	  "\n",
 
 	  ">3	//JIT Const.  Simple delay loop
+    MOV		RCX,cnts.time_stamp_freq>>3 //JIT Const.  Simple delay loop
 @@10:	LOOP	@@10
 
-    POP	RCX
+    POP		RCX
     LOOP	@@05
   }
-  Snd(0);
+  Snd;
   return i;
 }
 
diff --git a/Demo/Asm/AsmAndC2.HC b/Demo/Asm/AsmAndC2.HC
index 0f77bdf..98db273 100644
--- a/Demo/Asm/AsmAndC2.HC
+++ b/Demo/Asm/AsmAndC2.HC
@@ -7,7 +7,7 @@ it from the cmd line.
 
 //This is to demo glbl var access.
 //Glbs defined elsewhere can accessed too, like cnts.jiffies.
-I64 glbl_hz=400,glbl_hz_step=100,glbl_hz_base=100;
+I64 glbl_ona=Freq2Ona(400),glbl_ona_step=10,glbl_ona_base=Freq2Ona(100);
 
 asm {
 //Opcodes are slightly different to make writing my x86_64 assembler easier.
@@ -27,9 +27,9 @@ _BEEPS2::
 	PUSH	U64 [&cnts.jiffies]
 
 @@05:	PUSH	RCX
-//U0 $LK,"Beep",A="MN:Beep"$(I64 freq=500,Bool busy=FALSE)
+//U0 $LK,"Beep",A="MN:Beep"$(I8 ona=62,Bool busy=FALSE)
 	PUSH	FALSE	//Do not busy (spin) wait
-	PUSH	U64 [&glbl_hz]	//evaluated at run time
+	PUSH	U64 [&glbl_ona]	//evaluated at run time
 	CALL	&Beep
 	POP	RCX
 	LOOP	@@05
@@ -64,28 +64,22 @@ U0 AsmAndC2()
   asm {
     LIST
 //You can clobber RAX,RBX,RCX,RDX, but preserve the rest.
-
     MOV	RCX,R15 //You can clobber RAX,RBX,RCX,RDX. Preserve the rest.
-
     @@05:	PUSH	RCX
-//U0 $LK,"Snd",A="MN:Snd"$(F64 freq);
 
-    MOV	RAX,RCX	//freq=loop*100.0+100.0
-    IMUL2	RAX,glbl_hz_step	//evaluated at compile ttime
-    ADD	RAX,U64 [&glbl_hz_base] //evaluated at run time
+//U0 $LK,"Snd",A="MN:Snd"$(I8 ona);
+    MOV	RAX,RCX	//ona=loop*10+100.0Hz
+    IMUL2	RAX,glbl_ona_step //Intentionally evaluated at compile time
+    ADD	RAX,U64 [&glbl_ona_base]  //Intentionally evaluated at run time
     PUSH	RAX
-    FILD	U64 [RSP]	//Convert from int to floating
-    FSTP	U64 [RSP]
-
     CALL	&Snd	//We can skip IMPORT with & if JIT compiling.
-
-    MOV	RCX,cnts.time_stamp_freq>>3	//JIT Const.  Simple delay loop.
+    MOV	RCX,cnts.time_stamp_freq>>3 //JIT Const.  Simple delay loop.
 @@10:	LOOP	@@10
 
     POP	RCX
     LOOP	@@05
   }
-  Snd(0);
+  Snd;
 }
 
 AsmAndC2;
diff --git a/Demo/DolDoc/ClickCallBack.HC b/Demo/DolDoc/ClickCallBack.HC
index 102d5a1..10a51dc 100644
--- a/Demo/DolDoc/ClickCallBack.HC
+++ b/Demo/DolDoc/ClickCallBack.HC
@@ -2,10 +2,10 @@ I64 MyLeftCB1(CDoc *,CDocEntry *)
 {
   I64 i;
   for (i=500;i<1000;i+=25) {
-    Snd(i);
+    Snd(Freq2Ona(i));
     Sleep(10);
   }
-  Snd(0);
+  Snd;
   return 0;
 }
 
diff --git a/Demo/DolDoc/DemoDoc.DD b/Demo/DolDoc/DemoDoc.DD
index 72e0841..90b5e1e 100644
Binary files a/Demo/DolDoc/DemoDoc.DD and b/Demo/DolDoc/DemoDoc.DD differ
diff --git a/Demo/DolDoc/MenuButton.HC b/Demo/DolDoc/MenuBttn.HC
similarity index 86%
rename from Demo/DolDoc/MenuButton.HC
rename to Demo/DolDoc/MenuBttn.HC
index 49007c1..1d36238 100644
--- a/Demo/DolDoc/MenuButton.HC
+++ b/Demo/DolDoc/MenuBttn.HC
@@ -1,6 +1,6 @@
-//This example shows buttons.  Buttons return a menu val
+//This example shows bttns.  Bttns return a menu val
 //unless you rig them to send macros.  Menu entries are
-//about the same as buttons, but don't have a border.
+//about the same as bttns, but don't have a border.
 
 I64 PopUpFreq()
 {//See also $LK,"PopUpRangeI64",A="MN:PopUpRangeI64"$()
@@ -22,7 +22,7 @@ I64 PopUpFreq()
 #define MU_SND_ON	2
 #define MU_SND_OFF	3
 
-U0 MenuButton()
+U0 MenuBttn()
 {
   Bool done=FALSE;
   I64 i,j=0,freq=100;
@@ -34,7 +34,7 @@ U0 MenuButton()
 //Use  to generate cursor movement expressions and check "Quote".
     "$$CM+CX-RE,-4$$Menu Demo\n\n";
     "$$LM,8$$"; //Set left margin
-//These are buttons that return a val from a menu selection.
+//These are bttns that return a val from a menu selection.
     if (!j)
       "\n$$BT,\"Snd On\",LE=MU_SND_ON$$\n\n\n";
     else
@@ -49,17 +49,17 @@ U0 MenuButton()
 	break;
       case MU_SND_ON:
 	j=freq;
-	Snd(j);
+	Snd(Freq2Ona(j));
 	break;
       case MU_SND_OFF:
 	j=0;
-	Snd(j);
+	Snd;
 	break;
       case MU_SET_FREQ:
 	freq=PopUpFreq;
 	if (j) {
 	  j=freq;
-	  Snd(j);
+	  Snd(Freq2Ona(j));
 	}
 	break;
       default:
@@ -69,7 +69,7 @@ U0 MenuButton()
   DocPut->flags=DocPut->flags&~DOCF_FORM |
 	old_flags & DOCF_FORM;
   DocClear;
-  Snd(0);
+  Snd;
 }
 
-MenuButton;
+MenuBttn;
diff --git a/Demo/DolDoc/MenuSprite.HC b/Demo/DolDoc/MenuSprite.HC
index 242465c..2eeb83f 100644
Binary files a/Demo/DolDoc/MenuSprite.HC and b/Demo/DolDoc/MenuSprite.HC differ
diff --git a/Demo/DolDoc/TextDemo.HC b/Demo/DolDoc/TextDemo.HC
index 210854a..4468da1 100644
--- a/Demo/DolDoc/TextDemo.HC
+++ b/Demo/DolDoc/TextDemo.HC
@@ -6,7 +6,7 @@
 	"UnderLine: $$UL,1$$Test$$UL,0$$\n\n"
 	"Link     : $$LK,\"Genesis,1:1\",\"BF:Genesis,1:1\"$$\n\n\n"
 
-	"Button   :     $$BT-X,\"OKAY\",LE=1$$\n\n\n\n";
+	"Bttn   :     $$BT-X,\"OKAY\",LE=1$$\n\n\n\n";
 
 //You can do it this way if you like.
 	"\nSuper    : 3$SY,-3$2$SY,0$=9\n\n"
@@ -19,4 +19,4 @@
 // on this link to toggle individual commands.
 	"Link     : $LK,"Genesis,1:1",A="BF:Genesis,1:1"$\n\n\n"
 
-	"Button   :     $BT,"OKAY",LE=1$\n\n\n\n";
+	"Bttn   :     $BT,"OKAY",LE=1$\n\n\n\n";
diff --git a/Demo/Exceptions.HC b/Demo/Exceptions.HC
index 9c001b3..8767468 100644
--- a/Demo/Exceptions.HC
+++ b/Demo/Exceptions.HC
@@ -23,8 +23,8 @@ U0 D2()
     D1;
     if (Prompt(4)) throw('Point4');
   } catch {
-    "D2 handler\n"
-	  "Ch:%c:%P\n",Fs->except_ch,Fs->except_caller1;
+    "D2 hndlr\n"
+	  "Ch:%c:%P\n",Fs->except_ch,Fs->except_callers[0];
     if (Fs->except_ch=='Point1') {
       "Caught in D2\n";
       Fs->catch_except=TRUE;
@@ -38,8 +38,8 @@ U0 Demo()
     D2;
     if (Prompt(3)) throw('Point3');
   } catch {
-    "Demo handler\n"
-	  "Ch:%c:%P\n",Fs->except_ch,Fs->except_caller1;
+    "Demo hndlr\n"
+	  "Ch:%c:%P\n",Fs->except_ch,Fs->except_callers[0];
     Fs->catch_except=TRUE;
   }
 }
diff --git a/Demo/ExtChars.HC b/Demo/ExtChars.HC
index 7164c30..5f41e68 100644
--- a/Demo/ExtChars.HC
+++ b/Demo/ExtChars.HC
@@ -32,4 +32,4 @@ SrcExample;
 //See $LK,"::/Demo/ScrnCodes.HC"$, $LK,"::/Demo/Graphics/CharAnimation.HC"$,
 //$LK,"::/Demo/Games/CharDemo.HC"$ and $LK,"::/Demo/Graphics/FontEd.HC"$.
 
-//See $LK,"chars_bmp_alpha",A="MN:chars_bmp_alpha"$ and $LK,"chars_bmp_alpha_numeric",A="MN:chars_bmp_alpha_numeric"$.
+//See $LK,"char_bmp_alpha",A="MN:char_bmp_alpha"$ and $LK,"char_bmp_alpha_numeric",A="MN:char_bmp_alpha_numeric"$.
diff --git a/Demo/Games/BattleLines.HC b/Demo/Games/BattleLines.HC
index bdde3f9..9613141 100644
Binary files a/Demo/Games/BattleLines.HC and b/Demo/Games/BattleLines.HC differ
diff --git a/Demo/Games/BigGuns.HC b/Demo/Games/BigGuns.HC
index 4a9ef5b..9963585 100644
Binary files a/Demo/Games/BigGuns.HC and b/Demo/Games/BigGuns.HC differ
diff --git a/Demo/Games/BlackDiamond.HC b/Demo/Games/BlackDiamond.HC
index 62ef23e..f0cca4a 100644
Binary files a/Demo/Games/BlackDiamond.HC and b/Demo/Games/BlackDiamond.HC differ
diff --git a/Demo/Games/BomberGolf.HC b/Demo/Games/BomberGolf.HC
index ac0b54e..fa84124 100644
Binary files a/Demo/Games/BomberGolf.HC and b/Demo/Games/BomberGolf.HC differ
diff --git a/Demo/Games/CastleFrankenstein.HC b/Demo/Games/CastleFrankenstein.HC
index 59da621..8939c4f 100644
--- a/Demo/Games/CastleFrankenstein.HC
+++ b/Demo/Games/CastleFrankenstein.HC
@@ -1,7 +1,7 @@
 //Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.HC"$.
 
-RegSetDftEntry("TempleOS/CastleFrankenstein","F64 best_score=9999;\n");
-RegExeBranch("TempleOS/CastleFrankenstein");
+RegDft("TempleOS/CastleFrankenstein","F64 best_score=9999;\n");
+RegExe("TempleOS/CastleFrankenstein");
 
 //Set snap to 4 and width to 4
 //if you edit this map.
@@ -224,14 +224,14 @@ U0 DrawIt(CTask *task,CDC *dc)
 	    z1=0;
 	    DCTransform(dc,&x1,&y1,&z1);
 	    if (z1>0)
-	      SpriteMat3B(dc,x+SCRN_SCALE/2,y+SCRN_SCALE/2,0,$IB,"<5>",BI=5$,r3);
+	      Sprite3Mat4x4B(dc,x+SCRN_SCALE/2,y+SCRN_SCALE/2,0,$IB,"<5>",BI=5$,r3);
 	  } else if (c==YELLOW) {
 	    x1=x+SCRN_SCALE/2;
 	    y1=y+SCRN_SCALE/2;
 	    z1=0;
 	    DCTransform(dc,&x1,&y1,&z1);
 	    if (z1>0)
-	      SpriteMat3B(dc,x+SCRN_SCALE/2,y+SCRN_SCALE/2,0,$IB,"<6>",BI=6$,r3);
+	      Sprite3Mat4x4B(dc,x+SCRN_SCALE/2,y+SCRN_SCALE/2,0,$IB,"<6>",BI=6$,r3);
 	  }
 
 	  if (!map[(yy+1)*map_width+xx]) {
@@ -320,11 +320,11 @@ U0 DrawIt(CTask *task,CDC *dc)
       DCTransform(dc,&xx,&yy,&zz);
       if (zz>0) {
 	if (tmpm->dead)
-	  SpriteMat3B(dc,x,y,0,$IB,"<2>",BI=2$,r2);
+	  Sprite3Mat4x4B(dc,x,y,0,$IB,"<2>",BI=2$,r2);
 	else {
 	  tt=Tri(tS,1.0);
 	  tmps=SpriteInterpolate(tt,$IB,"<3>",BI=3$,$IB,"<4>",BI=4$);
-	  SpriteMat3B(dc,x,y,0,tmps,r1);
+	  Sprite3Mat4x4B(dc,x,y,0,tmps,r1);
 	  Free(tmps);
 	}
       }
@@ -380,7 +380,7 @@ U0 Fire()
   F64 d,dx,dy,xx=Cos(man_é),yy=Sin(man_é);
   Monster *tmpm;
 
-  Noise(100,300,1000);
+  Noise(100,53,74);
   for (i=0,tmpm=monsters;ix;
     y=tmpm->y;
@@ -489,9 +489,9 @@ U0 SongTask(I64)
   Fs->task_end_cb=&SndTaskEndCB;
   MusicSettingsRst;
   while (TRUE) {
-    Play("2q.A#1eG2AeA#qAq.A#1eG2eAeA#qA");
-    Play("q.A#1eG2A#A1qG2q.A#1eG2A#A1qG");
-    Play("3eA#A2qG3eA#A2qG3eA#A2G3AA#A2qG");
+    Play("3q.A#eGAeA#qAq.A#eGeAeA#qA");
+    Play("3q.A#eGA#AqGq.A#eGA#AqG");
+    Play("4eA#AqGeA#AqGeA#AGAA#AqG");
   }
 }
 
@@ -589,7 +589,7 @@ fs_done:
   SettingsPop;
   CleanUp;
   MenuPop;
-  RegWriteBranch("TempleOS/CastleFrankenstein","F64 best_score=%5.4f;\n",
+  RegWrite("TempleOS/CastleFrankenstein","F64 best_score=%5.4f;\n",
 	best_score);
 }
 
diff --git a/Demo/Games/CircleTrace.HC b/Demo/Games/CircleTrace.HC
index 7362e7c..372f55e 100644
--- a/Demo/Games/CircleTrace.HC
+++ b/Demo/Games/CircleTrace.HC
@@ -2,8 +2,8 @@
 
 //Giotto, a famous artist, drew a freehand circle to get a job.
 
-RegSetDftEntry("TempleOS/CircleTrace","F64 best_score=999;\n");
-RegExeBranch("TempleOS/CircleTrace");
+RegDft("TempleOS/CircleTrace","F64 best_score=999;\n");
+RegExe("TempleOS/CircleTrace");
 
 I64 cx,cy;
 F64 avg_error=0,elapsed_time=0,total_error=0,score=999;
@@ -13,7 +13,7 @@ U0 SongTask(I64)
   Fs->task_end_cb=&SndTaskEndCB;
   MusicSettingsRst;
   while (TRUE)
-    Play("hEDCARCDECR");
+    Play("5hEDC4A5RCDECR");
 }
 
 U0 DrawIt(CTask *task,CDC *dc)
@@ -35,7 +35,7 @@ Bool CTPlot(CDC *dc,I64 x,I64 y,I64)
 
 U0 CircleTrace()
 {
-  I64 msg_code,a1,a2,x1,y1;
+  I64 msg_code,arg1,arg2,x1,y1;
   F64 rad,t0,total_distance;
   CDC *dc=DCAlias;
 
@@ -57,12 +57,12 @@ U0 CircleTrace()
   dc->color=ROP_XOR+BLACK^TRANSPARENT;
   GrCircle(dc,cx,cy,CIRCLE_RADIUS);
   do {
-    msg_code=GetMsg(&a1,&a2,
-	  1<color=ROP_XOR+BLACK^TRANSPARENT;
 	GrCircle(dc,cx,cy,CIRCLE_RADIUS);
@@ -70,18 +70,18 @@ U0 CircleTrace()
 	t0=tS;
 	total_distance=0.001;
 	total_error=0;
-	x1=a1; y1=a2;
+	x1=arg1; y1=arg2;
 	do {
-	  msg_code=ScanMsg(&a1,&a2,
-		1<0.95*CIRCUMFERENCE) {
 	  if (scoredead &&
 	  man_x+man_dx==tmpm->x && man_y+man_dy==tmpm->y) {
@@ -438,7 +438,7 @@ dg_done:
     PutExcept;
   SettingsPop;
   MenuPop;
-  RegWriteBranch("TempleOS/DunGen","F64 best_score=%5.4f;\n",best_score);
+  RegWrite("TempleOS/DunGen","F64 best_score=%5.4f;\n",best_score);
   CleanUp;
 }
 
diff --git a/Demo/Games/ElephantWalk.HC b/Demo/Games/ElephantWalk.HC
index cd61fee..bc8d97c 100644
Binary files a/Demo/Games/ElephantWalk.HC and b/Demo/Games/ElephantWalk.HC differ
diff --git a/Demo/Games/FlapBat.HC b/Demo/Games/FlapBat.HC
index a697e3a..1de41ba 100644
Binary files a/Demo/Games/FlapBat.HC and b/Demo/Games/FlapBat.HC differ
diff --git a/Demo/Games/FlatTops.HC b/Demo/Games/FlatTops.HC
index 74de9c6..f255fe6 100644
--- a/Demo/Games/FlatTops.HC
+++ b/Demo/Games/FlatTops.HC
@@ -173,7 +173,7 @@ U0 DrawIt(CTask *task,CDC *dc)
   tmpo=obj_head.next;
   while (tmpo!=&obj_head) {
     if (tmpo->flags&OF_ACTIVE && tmpo->flags&OF_SHIP) {
-      SpriteZ3B(dc,tmpo->x,tmpo->y,0,
+      Sprite3ZB(dc,tmpo->x,tmpo->y,0,
 	    imgs[tmpo->player][tmpo->type],tmpo->é+ã/2);
 
       k=0;
@@ -224,7 +224,7 @@ U0 DrawIt(CTask *task,CDC *dc)
   tmpo=obj_head.next;
   while (tmpo!=&obj_head) {
     if (tmpo->flags&OF_ACTIVE && !(tmpo->flags&OF_SHIP))
-      SpriteZ3B(dc,tmpo->x,tmpo->y,0,
+      Sprite3ZB(dc,tmpo->x,tmpo->y,0,
 	    imgs[tmpo->player][tmpo->type],tmpo->é+ã/2);
     if (tmpo->flags&OF_SHOOTING) {
       dc->color=LTRED;
@@ -425,8 +425,8 @@ Squadron *SquadronLaunch(I64 player,F64 x=MAX_F64,F64 y=MAX_F64)
     if (player==0) {
       launch_unit_x1=tmpo->x;
       launch_unit_y1=tmpo->y;
-      launch_unit_x2=ip.pos.x-main_task->pix_left-main_task->scroll_x;
-      launch_unit_y2=ip.pos.y-main_task->pix_top -main_task->scroll_y;
+      launch_unit_x2=ms.pos.x-main_task->pix_left-main_task->scroll_x;
+      launch_unit_y2=ms.pos.y-main_task->pix_top -main_task->scroll_y;
       launch_t=tS+0.5;
     }
     if (tmpo->squadron>=0) {
@@ -494,8 +494,8 @@ Squadron *SquadronSet
     if (player==0) {
       set_é_unit_x1=tmpo->x;
       set_é_unit_y1=tmpo->y;
-      set_é_unit_x2=ip.pos.x-main_task->pix_left-main_task->scroll_x;
-      set_é_unit_y2=ip.pos.y-main_task->pix_top -main_task->scroll_y;
+      set_é_unit_x2=ms.pos.x-main_task->pix_left-main_task->scroll_x;
+      set_é_unit_y2=ms.pos.y-main_task->pix_top -main_task->scroll_y;
       set_é_t=tS+0.5;
     }
     if (tmpo->squadron>=0) {
@@ -640,7 +640,7 @@ U0 Combat(F64 period)
 	  tmpt->target=tmpo1;
 	  tmpt->é=Arg(tmpo1->x-tmpo->x,tmpo1->y-tmpo->y);
 	  QueIns(tmpt,torpedo_head.last);
-	  Sweep(2000,2000,300);
+	  Sweep(2000,86,53);
 	} else if (tmpo->ship_guns>0 && dship_guns_range) {
 	  tmpo->flags|=OF_SHOOTING;
 	  if (Rand<125.0*period) {
@@ -649,7 +649,7 @@ U0 Combat(F64 period)
 	      tmpo1->fuel*=0.75*Rand+0.25;
 	  }
 	  if (tS>next_noise) {
-	    Noise(100,75,200);
+	    Noise(100,29,46);
 	    next_noise=tS+0.1;
 	  }
 	}
@@ -662,7 +662,7 @@ U0 Combat(F64 period)
 	      tmpo1->fuel*=0.75*Rand+0.25;
 	  }
 	  if (tS>next_noise) {
-	    Noise(25,500,2000);
+	    Noise(25,62,86);
 	    next_noise=tS+0.025;
 	  }
 	}
@@ -781,7 +781,7 @@ U0 AnimateTask(I64)
 
 U0 FlatTops()
 {
-  I64 a1,a2;
+  I64 arg1,arg2;
 
   SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$
   Fs->text_attr=BLUE<<4+WHITE;
@@ -805,16 +805,16 @@ U0 FlatTops()
 	"  Slower(,'-');"
 	"}"
 	);
-  Fs->win_inhibit|=WIF_SELF_IP_L|WIF_SELF_IP_R;
+  Fs->win_inhibit|=WIF_SELF_MS_L|WIF_SELF_MS_R;
   Init;
   Fs->draw_it=&DrawIt;
   Fs->animate_task=Spawn(&AnimateTask,NULL,"Animate",,Fs);
   try {
     while (TRUE)
-      switch (GetMsg(&a1,&a2,
-	    1<text_attr=BLACK<<4+WHITE;
   MenuPush(
@@ -100,9 +100,9 @@ U0 Halogen()
   Fs->draw_it=&DrawIt;
   try {
     while (TRUE) {
-      switch (ScanMsg(&a1,&a2,1<>8,"Draw a maze with left button.");
+  TextPrint(task,0,0,ATTR>>8,"Draw a maze with left bttn.");
   TextPrint(task,0,1,ATTR>>8,"Solve maze starting at right click.");
 }
 
@@ -69,7 +69,7 @@ U0 SolveMaze(I64 x,I64 y)
       if (stk_ptr==STK_SIZE) return;
       Sleep(100);
       if (ScanChar)
-	ThrowBreak;  //
+	throw;
     }
   }
 }
@@ -91,12 +91,11 @@ U0 Maze()
     do {
       MemSet(text,0,sizeof(text));
       while (!(ch=ScanChar)) {
-//Input Ptr (mouse) text x,y coordinates.
-	x=ip.pos_text.x-Fs->win_left-Fs->scroll_x/FONT_WIDTH;
-	y=ip.pos_text.y-Fs->win_top-Fs->scroll_y/FONT_HEIGHT;
-	if (ip.lb&&!winmgr.grab_scroll)
+	x=ms.pos_text.x-Fs->win_left-Fs->scroll_x/FONT_WIDTH;
+	y=ms.pos_text.y-Fs->win_top-Fs->scroll_y/FONT_HEIGHT;
+	if (ms.lb&&!winmgr.grab_scroll)
 	  text[y][x]=CH_SPACE+ATTRF_INVERT+ATTR;
-	if (ip.rb&&!winmgr.grab_scroll) {
+	if (ms.rb&&!winmgr.grab_scroll) {
 	  text[y][x]='*'+ATTR;
 	  SolveMaze(x,y);
 	  ch=GetChar;
diff --git a/Demo/Games/RawHide.HC b/Demo/Games/RawHide.HC
index d87b849..78dfcee 100644
--- a/Demo/Games/RawHide.HC
+++ b/Demo/Games/RawHide.HC
@@ -1,7 +1,7 @@
 //Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.HC"$.
 
-RegSetDftEntry("TempleOS/RawHide","F64 best_score=9999;\n");
-RegExeBranch("TempleOS/RawHide");
+RegDft("TempleOS/RawHide","F64 best_score=9999;\n");
+RegExe("TempleOS/RawHide");
 
 F64 t0,tf;
 I64 outside_cnt;
@@ -230,19 +230,19 @@ U0 DrawIt(CTask *task,CDC *dc)
       dc->flags&=~(DCF_JUST_MIRROR|DCF_SYMMETRY);
     }
 
-  if (ip.pos.x-last_pos_x>0)
+  if (ms.pos.x-last_pos_x>0)
     left=FALSE;
-  else if (ip.pos.x-last_pos_x<0)
+  else if (ms.pos.x-last_pos_x<0)
     left=TRUE;
   if (left) {
     dc->flags|=DCF_JUST_MIRROR|DCF_SYMMETRY;
-    DCSymmetrySet(dc,ip.pos.x-task->pix_left-task->scroll_x,0,
-	  ip.pos.x-task->pix_left-task->scroll_x,1);
+    DCSymmetrySet(dc,ms.pos.x-task->pix_left-task->scroll_x,0,
+	  ms.pos.x-task->pix_left-task->scroll_x,1);
   }
-  Sprite3(dc,ip.pos.x-task->pix_left-task->scroll_x,
-	     ip.pos.y-task->pix_top -task->scroll_y,0,horse_imgs[frame&3]);
+  Sprite3(dc,ms.pos.x-task->pix_left-task->scroll_x,
+	     ms.pos.y-task->pix_top -task->scroll_y,0,horse_imgs[frame&3]);
   dc->flags&=~(DCF_JUST_MIRROR|DCF_SYMMETRY);
-  last_pos_x=ip.pos.x;
+  last_pos_x=ms.pos.x;
 
   if (tf) {
     dc->color=RED;
@@ -336,8 +336,8 @@ U0 AnimateTask(CTask *parent)
     max_speed=ClampU64(max_speed,MAX_U32/3,200*MAX_U32);
     cx=(MAP_WIDTH -parent->pix_width)/2,
 	  cy=(MAP_HEIGHT-parent->pix_height)/2;
-    cursor_x=ip.pos.x+cx-parent->pix_left-parent->scroll_x;
-    cursor_y=ip.pos.y+cy-parent->pix_top -parent->scroll_y;
+    cursor_x=ms.pos.x+cx-parent->pix_left-parent->scroll_x;
+    cursor_y=ms.pos.y+cy-parent->pix_top -parent->scroll_y;
     cnt=0;stress=0;
     my_outside_cnt=0;
     if (cursor_xtask_end_cb=&SndTaskEndCB;
   MusicSettingsRst;
   while (TRUE) {
-    Play("3qC2etG3DCBDCECFqFCsADADqB");
-    Play("C2etG3DCBDCECFqFCsADADqB");
-    Play("2sG3A2G3AqG2etG3GDeBBqBFeBAqE");
-    Play("2sG3A2G3AqG2etG3GDeBBqBFeBAqE");
+    Play("5qC4etG5DC4B5DCECFqFC4sA5D4A5D4qB");
+    Play("5C4etG5DC4B5DCECFqFC4sA5D4A5D4qB");
+    Play("4sGAGA5qG4etG5GD4eBBqB5F4eBA5qE");
+    Play("4sGAGA5qG4etG5GD4eBBqB5F4eBA5qE");
   }
 }
 
@@ -528,7 +528,7 @@ U0 CleanUp()
 
 U0 RawHide()
 {
-  I64 msg_code,a1,a2;
+  I64 msg_code,arg1,arg2;
   SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$
   MenuPush(
 	"File {"
@@ -559,15 +559,15 @@ U0 RawHide()
   Fs->draw_it=&DrawIt;
   try {
     while (TRUE) {
-      msg_code=GetMsg(&a1,&a2,
-	    1<",BI=3$
@@ -112,20 +90,6 @@ RegExeBranch("TempleOS/Talons");
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 
 
 
@@ -149,6 +113,7 @@ RegExeBranch("TempleOS/Talons");
 
 
 
+			$SP,"<5>",BI=5$
 
 
 
@@ -164,6 +129,7 @@ RegExeBranch("TempleOS/Talons");
 
 
 
+			$SP,"<6>",BI=6$
 
 
 
@@ -172,20 +138,17 @@ RegExeBranch("TempleOS/Talons");
 
 
 
+#define LS_TYPES	3
+U8	*landscape_small_imgs[LS_TYPES]={$IB,"<4>",BI=4$,$IB,"<5>",BI=5$,$IB,"<6>",BI=6$},
+	*landscape_large_imgs[LS_TYPES];
 
-
-
-
-
-
-
-
-
-
-
-
-
-
+#define	B_NUM	256
+class Bird
+{
+  Bird *next,*last;
+  CD3I64 p;
+  F64 é;
+} b_head[mp_cnt];
 
 class Obj
 {
@@ -218,9 +181,12 @@ class MPCtrl {
 F64 game_t0,game_tf,pitch,roll,heading,è,speed;
 Bool invert_pitch,rolled_over;
 I64 strip_height,x,y,z,fish_left;
+CD3 v;
 
 U0 WrapAngles()
 {
+  I64 r[4][4],x,y,z;
+
   è=Wrap(è);
   pitch=Wrap(-è-ã/2);
   if (Abs(pitch)>ã/2) {
@@ -234,6 +200,17 @@ U0 WrapAngles()
   else
     rolled_over=TRUE;
   heading=Wrap(heading,0);
+
+  //World to scrn coordinates
+  Mat4x4IdentEqu(r);
+  Mat4x4RotZ(r,heading);
+  Mat4x4RotX(r,è);
+  Mat4x4RotZ(r,roll);
+
+  //We use velocity vector for dog-fighting.
+  x=0x100000000*speed; y=0; z=0;
+  Mat4x4MulXYZ(r,&x,&y,&z);
+  v.x=x/ToF64(0x100000000); v.y=y/ToF64(0x100000000); v.z=z/ToF64(0x100000000);
 }
 
 U0 EDTransform(CDC *dc,I64 *x,I64 *y,I64 *z)
@@ -332,9 +309,9 @@ U0 MPDoPanels(CTask *task)
 		if (Rand<0.1) {
 		  tmpo->fish=FALSE;
 		  if (RandI16&1)
-		    tmpo->img=$IB,"<2>",BI=2$; //Boat
+		    tmpo->img=landscape_large_imgs[0]; //Boat
 		  else
-		    tmpo->img=$IB,"<3>",BI=3$; //Boat
+		    tmpo->img=landscape_large_imgs[1]; //Boat
 		  tmpo->p.z=(WATER_ELEVATION+2)*MAP_SCALE;
 		} else {
 		  tmpo->fish=TRUE;
@@ -354,7 +331,7 @@ U0 MPDoPanels(CTask *task)
 		  tmpo->p.x=(i+w/2)*MAP_SCALE;
 		  tmpo->p.y=(j+h/2)*MAP_SCALE;
 		  tmpo->p.z=l;
-		  tmpo->img=$IB,"<4>",BI=4$; //Tree
+		  tmpo->img=landscape_large_imgs[2]; //Tree
 		  tmpo->fish=FALSE;
 		  QueIns(tmpo,tmpp->last_obj);
 		}
@@ -476,8 +453,8 @@ F64 claws_down;
 
 
 
-$SP,"<5>",BI=5$
-$SP,"<6>",BI=6$
+$SP,"<7>",BI=7$
+$SP,"<8>",BI=8$
 
 
 
@@ -502,9 +479,9 @@ U0 ClawDraw(CDC *dc,I64 x1,I64 y1,I64 x2,I64 y2,I64 w,I64 segments,Bool talon)
   }
   if (talon) {
     if (y1",BI=5$);
+      Sprite3B(dc,x1,y1,0,$IB,"<7>",BI=7$);
     else
-      Sprite3B(dc,x1,y1,0,$IB,"<6>",BI=6$);
+      Sprite3B(dc,x1,y1,0,$IB,"<8>",BI=8$);
   }
 }
 
@@ -534,7 +511,7 @@ U0 DrawIt(CTask *task,CDC *dc)
 }
 
 /*
-$SP,"<7>",BI=7$
+$SP,"<9>",BI=9$
 
 
 
@@ -553,7 +530,7 @@ $SP,"<7>",BI=7$
 
 
 
-$SP,"<8>",BI=8$
+$SP,"<10>",BI=10$
 
 
 
@@ -598,11 +575,10 @@ I64 update_jiffy_limit;
 U0 MPDrawIt(CTask *task,CDC *dc)
 {
   I64 j,update=winmgr.updates&65535,strip_width,*s2w,x1,y1,z1,xx,yy,
-	xh,yh,zh,yh2,xh2,x1h,y1h,x1wa,y1wa,x1wb,y1wb,
-	x3,y3,z3,dd,dd_old,
-	cx=task->pix_width>>1,
-	cy=task->pix_height>>1;
+	xh,yh,zh,yh2,xh2,x1h,y1h,x1wa,y1wa,x1wb,y1wb,x3,y3,z3,dd,dd_old,
+	cx=task->pix_width>>1,cy=task->pix_height>>1,r[16],*elems1,*elems_hard;
   Panel reg *tmpp;
+  Bird	*tmpb;
   Obj	*tmpo;
   Bool	w_on_map,h_on_map;
 
@@ -733,6 +709,21 @@ U0 MPDrawIt(CTask *task,CDC *dc)
     }
   }
 
+  tmpb=b_head[Gs->num].next;
+  while (tmpb!=&b_head[Gs->num]) {
+    elems1=SpriteInterpolate(Tri(tS,0.2),$IB,"<2>",BI=2$,$IB,"<3>",BI=3$);
+
+    Mat4x4IdentEqu(r);
+    Mat4x4RotZ(r,tmpb->é);
+    elems_hard=SpriteTransform(elems1,r);
+
+    Sprite3(dc,tmpb->p.x,tmpb->p.y,tmpb->p.z,elems_hard);
+    Free(elems_hard);
+    Free(elems1);
+
+    tmpb=tmpb->next;
+  }
+
   Free(s2w);
   mp.strip_width[Gs->num]=strip_width;
   LBtr(&mp.update_not_done_flags,Gs->num);
@@ -858,6 +849,7 @@ U0 DrawHorizon(CDC *dc)
 	DCFill(dc,LTCYAN); //Not correct.
     }
   }
+
   dc->depth_buf=old_db;
 }
 
@@ -969,9 +961,10 @@ Obj *FishFind(I64 x1,I64 y1,I64 *_dd)
 
 U0 AnimateTask(I64)
 {//Steadily moves the airplane fwd.
-  I64 *s2w,x1,y1,z1,dx,dy,dz,dd;
+  I64 i,*s2w,x1,y1,z1,dx,dy,dz,dd;
   F64 t0=tS,ms,é,d;
   Obj *tmpo;
+  Bird	*tmpb;
   while (TRUE) {
     ms=1000*(tS-t0);
     t0=tS;
@@ -1020,7 +1013,7 @@ U0 AnimateTask(I64)
 	    QueRem(tmpo);
 	    Free(tmpo);
 	    music.mute=TRUE;
-	    Snd(1000); Sleep(200); Snd(0);
+	    Snd(74); Sleep(200); Snd;
 	    music.mute=FALSE;
 	  }
 	}
@@ -1034,6 +1027,18 @@ U0 AnimateTask(I64)
 	  speed-=0.0001;
 	speed=Clamp(speed+(0.0005-0.0002*Abs(è)/(ã/4)),0.1,5.0);
       }
+
+      for (i=0;ip.x+=10*ms/1000*MAP_SCALE*Cos(tmpb->é);
+	  tmpb->p.y+=10*ms/1000*MAP_SCALE*Sin(tmpb->é);
+	  tmpb->p.z=BIRD_ELEVATION*MAP_SCALE+
+		elevations[tmpb->p.y/MAP_SCALE][tmpb->p.x/MAP_SCALE];
+	  tmpb->é+=2*ã*ms/1000/10;
+	  tmpb=tmpb->next;
+	}
+      }
     }
     Refresh;
   }
@@ -1060,16 +1065,34 @@ U0 SongTask(I64)
   Fs->task_end_cb=&SndTaskEndCB;
   MusicSettingsRst;
   while (TRUE) {
-    Play("3eCGFsDAe.C2sG3eGDqCDeGsGG2qG");
-    Play("3eCGFsDAe.C2sG3eGDqCDeGsGG2qG");
-    Play("3eGECGCAFCsCBCBe.GsG2qG3B");
-    Play("eGECGCAFCsCBCBe.GsG2qG3B");
+    Play("5eCGFsD4A5e.C4sG5eGDqCDeGsGG4qG");
+    Play("5eCGFsD4A5e.C4sG5eGDqCDeGsGG4qG");
+    Play("5eGECGC4A5FCsC4B5C4B5e.GsG4qGB");
+    Play("5eGECGC4A5FCsC4B5C4B5e.GsG4qGB");
   }
 }
 
+U0 PreInit()
+{
+  I64 i,*r=Mat4x4IdentNew;
+  Mat4x4Scale(r,10.0);
+  for (i=0;ip.x=Rand*MAP_WIDTH*MAP_SCALE;
+    tmpb->p.y=Rand*MAP_HEIGHT*MAP_SCALE;
+    tmpb->p.z=BIRD_ELEVATION*MAP_SCALE+
+	  elevations[tmpb->p.y/MAP_SCALE][tmpb->p.x/MAP_SCALE];
+    tmpb->é=2*ã*Rand;
+    QueIns(tmpb,b_head[i%mp_cnt].last);
+  }
+
   for (i=1;itask_end_cb=&TaskEndCB;
@@ -1104,6 +1140,7 @@ U0 Init()
 
 U0 CleanUp()
 {
+  I64 i;
   Panel *tmpp=panel_head,*tmpp1;
   MPEnd;
   while (tmpp) {
@@ -1113,6 +1150,10 @@ U0 CleanUp()
     Free(tmpp);
     tmpp=tmpp1;
   }
+  for (i=0;isong_task=Spawn(&SongTask,NULL,"Song",,Fs);
+  PreInit;
   Init;
   Fs->animate_task=Spawn(&AnimateTask,NULL,"Animate",,Fs);
   Fs->draw_it=&DrawIt;
@@ -1183,10 +1225,12 @@ U0 Talons()
     PutExcept;
   SettingsPop;
   CleanUp;
-  RegWriteBranch("TempleOS/Talons","F64 best_score=%5.4f;\n",best_score);
+  PostCleanUp;
+  RegWrite("TempleOS/Talons","F64 best_score=%5.4f;\n",best_score);
   MenuPop;
 }
 
+Seed(1);
 Talons;
 �
 àÿÿÿýÿÿÿ
@@ -1196,30 +1240,38 @@ Talons;
 &
 	üÿÿÿ
 	üÿÿÿáÿÿÿ
-áÿÿÿ):_éÿÿÿ¡‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŠëÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ







ÿ







ÿ







ÿ







ÿ







ÿ







ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿbþÿÿÿâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚þÿÿÿ
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿʰÿÿÿ8ÿÿÿ<8ÿÿÿȰÿÿÿÈPPȰÿÿÿÈ8ÿÿÿP8ÿÿÿ°ÿÿÿìÿÿÿÎÿÿÿÜÎÿÿÿÜ2ìÿÿÿÜ2Ü2Üìÿÿÿ2ÜÎÿÿÿÜÎÿÿÿìÿÿÿÜ 	 	 
+áÿÿÿ)	:_éÿÿÿ¡‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
+Šëÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ







ÿ







ÿ







ÿ







ÿ







ÿ







ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿbþÿÿÿâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚þÿÿÿ
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊøÿÿÿìÿÿÿìÿÿÿøÿÿÿøÿÿÿìÿÿÿìÿÿÿøÿÿÿþÿÿÿûÿÿÿ•ûÿÿÿ•þÿÿÿ•••þÿÿÿ•ûÿÿÿ•ûÿÿÿþÿÿÿ• 	 	 
  
 	  
-   
 
  
    P
-á>þÿÿÿÿÿáwÿÿÿXÿÿÿ ÿÿÿwÿÿÿ ÿÿÿ>þÿÿÿÿÿQ]ýÿÿQ2„®þÿÿ2®þÿÿ]ýÿÿ								öÿÿÿöÿÿÿ
-öÿÿÿ
-
-öÿÿÿ
-öÿÿÿöÿÿÿÜ
-öÿÿÿÜ
-
-Üöÿÿÿ
-Ü»þÿÿd000000000p¨ àÿÿÿàÿÿÿàÿÿÿ àÿÿÿÉàÿÿÿàÿÿÿÉ  àÿÿÿ   Éàÿÿÿ É>àÿÿÿÉÁÿÿÿàÿÿÿÉ>àÿÿÿîÁÿÿÿàÿÿÿî> ÉÁÿÿÿ É> îÁÿÿÿ î]çÿÿÿ¶Dóÿÿÿ©p XW+L]ÏDÂp8qWDep%RW2Eƒv jƒp2wW>kƒƒEj�9ƒ}&j‰�¨
vµƒ}?j‰3�¨&vµÁÿÿÿùÿÿÿ¨ÿÿÿ®ÿÿÿÁÿÿÿe•ÿÿÿÎÿÿÿeÁÿÿÿ¶¨ÿÿÿ ¶®ÿÿÿÚÿÿÿX•ÿÿÿçÿÿÿX®ÿÿÿÁÿÿÿe•ÿÿÿÎÿÿÿe¢ÿÿÿ•ÿÿÿ‰ÿÿÿ¢ÿÿÿ®ÿÿÿÚÿÿÿX•ÿÿÿçÿÿÿX¢ÿÿÿ®ÿÿÿ‰ÿÿÿ»ÿÿÿ¢ÿÿÿœÿÿÿ‰ÿÿÿ¨ÿÿÿœÿÿÿ‰ÿÿÿèƒÿÿÿ•ÿÿÿè¢ÿÿÿ¨ÿÿÿ‰ÿÿÿµÿÿÿœÿÿÿ•ÿÿÿÛƒÿÿÿ¢ÿÿÿÛ8çÿÿÿîóÿÿÿî2ÚÿÿÿŠçÿÿÿŠ8îî2ŠŠ2ÚÿÿÿŠçÿÿÿŠ+Îÿÿÿ&Úÿÿÿ&2ŠŠ+óÿÿÿ&&+ÎÿÿÿÎÿÿÿ +ôÿÿÿùÿÿÿ+ôÿÿÿ+Îÿÿÿ,Îÿÿÿ, +ùÿÿÿ+íÿÿÿçÿÿÿîÇÿÿÿóÿÿÿáùÿÿÿùÿÿÿŠÔÿÿÿ}íÿÿÿúÇÿÿÿîùÿÿÿ –Ôÿÿÿ+Šùÿÿÿùÿÿÿ�Ôÿÿÿùÿÿÿ„ùÿÿÿ,àÿÿÿùÿÿÿ ùÿÿÿ+�Ôÿÿÿ+„+,àÿÿÿ+ ùÿÿÿàÿÿÿWíÿÿÿdùÿÿÿ,àÿÿÿ,W,íÿÿÿd,0000000000000	
+   
 
  
    P
+Óÿÿÿçÿÿÿ%çÿÿÿ;çÿÿÿéÿÿÿ%çÿÿÿéÿÿÿÓÿÿÿçÿÿÿ!¼ÿÿÿ!8YÞÿÿÿ8Þÿÿÿ¼ÿÿÿ								ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ•ÿÿÿÿ••ÿÿÿÿ•ßÿÿÿ	000000000p¨üÿÿÿ3üÿÿÿüÿÿÿ3üÿÿÿ-üÿÿÿüÿÿÿ-3üÿÿÿ3-üÿÿÿ-üÿÿÿ-ùÿÿÿüÿÿÿ-üÿÿÿùÿÿÿüÿÿÿ-ùÿÿÿ-ùÿÿÿ	ýÿÿÿ+þÿÿÿ*"!	.,$#! 

+
%$

 
+ 

+

 
+
ùÿÿÿÿÿÿÿ,÷ÿÿÿ,÷ÿÿÿùÿÿÿ#õÿÿÿûÿÿÿ#ùÿÿÿ+÷ÿÿÿ+÷ÿÿÿüÿÿÿ"õÿÿÿýÿÿÿ"÷ÿÿÿùÿÿÿ#õÿÿÿûÿÿÿ#öÿÿÿõÿÿÿôÿÿÿöÿÿÿ÷ÿÿÿüÿÿÿ"õÿÿÿýÿÿÿ"öÿÿÿ÷ÿÿÿôÿÿÿùÿÿÿöÿÿÿöÿÿÿôÿÿÿ÷ÿÿÿöÿÿÿôÿÿÿóÿÿÿõÿÿÿöÿÿÿ÷ÿÿÿôÿÿÿøÿÿÿöÿÿÿõÿÿÿóÿÿÿöÿÿÿýÿÿÿþÿÿÿüÿÿÿ
ýÿÿÿ


üÿÿÿ
ýÿÿÿ
ûÿÿÿüÿÿÿ

þÿÿÿûÿÿÿûÿÿÿþÿÿÿÿÿÿÿþÿÿÿûÿÿÿûÿÿÿÿÿÿÿþÿÿÿýÿÿÿúÿÿÿþÿÿÿÿÿÿÿÿÿÿÿ
ûÿÿÿþÿÿÿúÿÿÿÿÿÿÿûÿÿÿ
ÿÿÿÿÿÿÿÿûÿÿÿÿÿÿÿ
ÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿûÿÿÿ
üÿÿÿÿÿÿÿüÿÿÿþÿÿÿ	ÿÿÿÿüÿÿÿþÿÿÿ	0000000000000	
 0
 	0
0
0	0
	0
 00
 0
-0	
0
0000000000000000 0000 0000 0! "0"#!0%$&0&'%0! $0$%!0#"&0&'#0" $0$&"0#!%0%'#0)(*0*+)0-,.0./-0)(,0,-)0+*.0./+0*(,0,.*0+)-0-/+010202310546067501040451032606730204046203150573098:0:;90=<>0>?=098<0<=90;:>0>?;0:8<0<>:0;9=0=?;0A@B0BCA0EDF0FGE0A@D0DEA0CBF0FGC0B@D0DFB0CAE0EGC0IHJ0JKI0MLN0NOM0IHL0LMI0KJN0NOK0JHL0LNJ0KIM0MOK0QPR0RSQ0UTV0VWU0QPT0TUQ0SRV0VWS0RPT0TVR0SQU0UWS0YXZ0Z[Y0]\^0^_]0YX\0\]Y0[Z^0^_[0ZX\0\^Z0[Y]0]_[0a`b0bca0edf0fge0a`d0dea0cbf0fgc0b`d0dfb0cae0egc0ihj0jki0mln0nom0ihl0lmi0kjn0nok0jhl0lnj0kim0mok!
->þÿÿàÿÿÿvàÿÿÿWÿÿÿvÿÿÿÿÿÿ>þÿÿÿÿÿÿÿÿ\ýÿÿP1Pƒ1®þÿÿ\ýÿÿ®þÿÿ						p¨~~ßÿÿÿ~Ê~ßÿÿÿÊ@@ßÿÿÿ@Ê@ßÿÿÿÊ~>Ê~ÁÿÿÿÊ~>î~Áÿÿÿî@>Ê@ÁÿÿÿÊ@>î@Áÿÿÿîw\¶jC©@pY3WM^\ÏQCÂ'prWf8pR,WEè‚ Üi,pw WkÜ‚EÏi9á‚'Ôi¶Žªuá‚@Ôi4¶Ž'ªueÁÿÿÿÂY¨ÿÿÿœ­ÿÿÿf�”ÿÿÿfLÁÿÿÿ¶@¨ÿÿÿ¶ƒ­ÿÿÿYw”ÿÿÿYœ­ÿÿÿf�”ÿÿÿfÉ¡ÿÿÿ½ˆÿÿÿƒ­ÿÿÿYw”ÿÿÿY°¡ÿÿÿ¤ˆÿÿÿ¡ÿÿÿµˆÿÿÿÖœÿÿÿéɃÿÿÿ鵡ÿÿÿ©ˆÿÿÿÉœÿÿÿܽƒÿÿÿÜw7õjõ�2‘ƒ‘Q7éEéj2…^…�2‘ƒ‘©*-œ-j2…^…ƒ*!w!©*
©
LïÿÿÿLøÿÿÿïÿÿÿ©*2©2LLøÿÿÿwìÿÿÿéjÆÿÿÿÜYøÿÿÿ…LÓÿÿÿxQìÿÿÿEÆÿÿÿõ3øÿÿÿž'Óÿÿÿ‘Yøÿÿÿ‘YÓÿÿÿ…Y-Yßÿÿÿ!'øÿÿÿ‘'Óÿÿÿ…'-'ßÿÿÿ!YLßÿÿÿúíìÿÿÿY-Lßÿÿÿ-ú-íìÿÿÿ-	
+0	
0
0000000000000000 0000 0000 0! "0"#!0%$&0&'%0! $0$%!0#"&0&'#0" $0$&"0#!%0%'#0)(*0*+)0-,.0./-0)(,0,-)0+*.0./+0*(,0,.*0+)-0-/+010202310546067501040451032606730204046203150573098:0:;90=<>0>?=098<0<=90;:>0>?;0:8<0<>:0;9=0=?;0A@B0BCA0EDF0FGE0A@D0DEA0CBF0FGC0B@D0DFB0CAE0EGC0IHJ0JKI0MLN0NOM0IHL0LMI0KJN0NOK0JHL0LNJ0KIM0MOK0QPR0RSQ0UTV0VWU0QPT0TUQ0SRV0VWS0RPT0TVR0SQU0UWS0YXZ0Z[Y0]\^0^_]0YX\0\]Y0[Z^0^_[0ZX\0\^Z0[Y]0]_[0a`b0bca0edf0fge0a`d0dea0cbf0fgc0b`d0dfb0cae0egc0ihj0jki0mln0nom0ihl0lmi0kjn0nok0jhl0lnj0kim0mok!
+Óÿÿÿçÿÿÿ%çÿÿÿ;çÿÿÿ%éÿÿÿçÿÿÿÓÿÿÿéÿÿÿçÿÿÿ¼ÿÿÿ!8!Y8Þÿÿÿ¼ÿÿÿÞÿÿÿ						p¨&3&üÿÿÿ3&-&üÿÿÿ- 3 üÿÿÿ3 - üÿÿÿ-&-&ùÿÿÿ-&&ùÿÿÿ - ùÿÿÿ-  ùÿÿÿ%	+$* "!"	.!,$# ! 
+%$ 
+ 
+ 
+#ùÿÿÿ,"÷ÿÿÿ,)÷ÿÿÿ#'õÿÿÿ#!ùÿÿÿ+ ÷ÿÿÿ+&÷ÿÿÿ"%õÿÿÿ")÷ÿÿÿ#'õÿÿÿ#-öÿÿÿ,ôÿÿÿ&÷ÿÿÿ"%õÿÿÿ"+öÿÿÿ)ôÿÿÿ,öÿÿÿ+ôÿÿÿ.öÿÿÿ-óÿÿÿ+öÿÿÿ*ôÿÿÿ-öÿÿÿ,óÿÿÿ%$'&! $
"
'&*)$
"
&%**!þÿÿÿ!ÿÿÿÿþÿÿÿ**!!ÿÿÿÿ%þÿÿÿ$úÿÿÿ"ÿÿÿÿ
!ûÿÿÿ!þÿÿÿ úÿÿÿÿÿÿÿûÿÿÿ"ÿÿÿÿ"ûÿÿÿ
""üÿÿÿÿÿÿÿûÿÿÿ
üÿÿÿ"!üÿÿÿþÿÿÿ"!üÿÿÿþÿÿÿ	
 
 	

	
	
 
 
-	

   ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmokp¨Âþÿÿ >Âþÿÿàÿÿÿ>Âþÿÿ Âþÿÿàÿÿÿƒþÿÿ >ƒþÿÿàÿÿÿ>ƒþÿÿ ƒþÿÿàÿÿÿÂþÿÿ>ÂþÿÿÁÿÿÿÂþÿÿ>%ÂþÿÿÁÿÿÿ%ƒþÿÿ>ƒþÿÿÁÿÿÿƒþÿÿ>%ƒþÿÿÁÿÿÿ%»þÿÿ]í¯þÿÿDáƒþÿÿp�wþÿÿWƒ¢þÿÿ]–þÿÿDújþÿÿp¨^þÿÿWœ}þÿÿp‰pþÿÿW},þÿÿƒW þÿÿjKpþÿÿp¯dþÿÿW¢ þÿÿƒ}þÿÿjp%þÿÿƒ]þÿÿjQúýÿÿ�Díýÿÿv8%þÿÿƒvþÿÿjjúýÿÿ�]íýÿÿvQ©þÿÿÁÿÿÿúœþÿÿ¨ÿÿÿúáþÿÿ®ÿÿÿœÔþÿÿ•ÿÿÿœ�þÿÿÁÿÿÿíƒþÿÿ¨ÿÿÿíÈþÿÿ®ÿÿÿ�»þÿÿ•ÿÿÿ�áþÿÿ®ÿÿÿœÔþÿÿ•ÿÿÿœ
ÿÿÿ¢ÿÿÿKÿÿÿ‰ÿÿÿKÈþÿÿ®ÿÿÿ�»þÿÿ•ÿÿÿ�ôþÿÿ¢ÿÿÿ>çþÿÿ‰ÿÿÿ>ÿÿÿ¢ÿÿÿKúþÿÿ‰ÿÿÿKÿÿÿœÿÿÿ 
ÿÿÿƒÿÿÿ úþÿÿ¢ÿÿÿ>íþÿÿ‰ÿÿÿ>
ÿÿÿœÿÿÿÿÿÿƒÿÿÿ¯þÿÿ8–þÿÿKþÿÿW2þÿÿ2¯þÿÿ8>–þÿÿ>KþÿÿW>2þÿÿ2>KþÿÿW2þÿÿ2çýÿÿvÎýÿÿQKþÿÿW>2þÿÿ2>çýÿÿv>ÎýÿÿQ>»ýÿÿp»ýÿÿK»ýÿÿ�d»ýÿÿjpáýÿÿpáýÿÿKáýÿÿ�dáýÿÿjpœþÿÿíÿÿÿ©þÿÿÇÿÿÿ8þÿÿÔÿÿÿEþÿÿ®ÿÿÿœþÿÿíÿÿÿ>©þÿÿÇÿÿÿ>8þÿÿÔÿÿÿ>Eþÿÿ®ÿÿÿ>8þÿÿÔÿÿÿEþÿÿ®ÿÿÿÔýÿÿ»ÿÿÿáýÿÿ•ÿÿÿ8þÿÿÔÿÿÿ>Eþÿÿ®ÿÿÿ>Ôýÿÿ»ÿÿÿ>áýÿÿ•ÿÿÿ>»ýÿÿÁÿÿÿ»ýÿÿœÿÿÿ»ýÿÿ¢ÿÿÿv»ýÿÿ|ÿÿÿ]áýÿÿÁÿÿÿáýÿÿœÿÿÿáýÿÿ¢ÿÿÿváýÿÿ|ÿÿÿ]0000000000000	
+	

   ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmokp¨àÿÿÿ àÿÿÿüÿÿÿ àÿÿÿàÿÿÿüÿÿÿÙÿÿÿ Ùÿÿÿüÿÿÿ ÙÿÿÿÙÿÿÿüÿÿÿàÿÿÿàÿÿÿùÿÿÿàÿÿÿàÿÿÿùÿÿÿÙÿÿÿÙÿÿÿùÿÿÿÙÿÿÿÙÿÿÿùÿÿÿßÿÿÿ	ÞÿÿÿÙÿÿÿØÿÿÿ
Ýÿÿÿ	Ûÿÿÿ×ÿÿÿÖÿÿÿÙÿÿÿ
ØÿÿÿÑÿÿÿ
Ïÿÿÿ
+ØÿÿÿÖÿÿÿÏÿÿÿ
Îÿÿÿ
+Ðÿÿÿ
	Ïÿÿÿ
+ÌÿÿÿÊÿÿÿÐÿÿÿ
Ïÿÿÿ
+
+Ìÿÿÿ	ÊÿÿÿÝÿÿÿùÿÿÿÜÿÿÿ÷ÿÿÿãÿÿÿ÷ÿÿÿâÿÿÿõÿÿÿÛÿÿÿùÿÿÿÙÿÿÿ÷ÿÿÿàÿÿÿ÷ÿÿÿßÿÿÿõÿÿÿãÿÿÿ÷ÿÿÿâÿÿÿõÿÿÿçÿÿÿöÿÿÿæÿÿÿôÿÿÿàÿÿÿ÷ÿÿÿßÿÿÿõÿÿÿåÿÿÿöÿÿÿãÿÿÿôÿÿÿçÿÿÿöÿÿÿåÿÿÿôÿÿÿèÿÿÿöÿÿÿçÿÿÿóÿÿÿåÿÿÿöÿÿÿäÿÿÿôÿÿÿçÿÿÿöÿÿÿæÿÿÿóÿÿÿÞÿÿÿÛÿÿÿÔÿÿÿÑÿÿÿÞÿÿÿÛÿÿÿÔÿÿÿÑÿÿÿÔÿÿÿÑÿÿÿÊÿÿÿÇÿÿÿÔÿÿÿÑÿÿÿÊÿÿÿÇÿÿÿÅÿÿÿÅÿÿÿÅÿÿÿ	Åÿÿÿ
+ÉÿÿÿÉÿÿÿÉÿÿÿ	Éÿÿÿ
+ÜÿÿÿþÿÿÿÝÿÿÿúÿÿÿÒÿÿÿûÿÿÿÓÿÿÿ÷ÿÿÿÜÿÿÿþÿÿÿÝÿÿÿúÿÿÿÒÿÿÿûÿÿÿÓÿÿÿ÷ÿÿÿÒÿÿÿûÿÿÿÓÿÿÿ÷ÿÿÿÈÿÿÿùÿÿÿÉÿÿÿõÿÿÿÒÿÿÿûÿÿÿÓÿÿÿ÷ÿÿÿÈÿÿÿùÿÿÿÉÿÿÿõÿÿÿÅÿÿÿùÿÿÿÅÿÿÿöÿÿÿÅÿÿÿöÿÿÿÅÿÿÿòÿÿÿ	ÉÿÿÿùÿÿÿÉÿÿÿöÿÿÿÉÿÿÿöÿÿÿÉÿÿÿòÿÿÿ	0000000000000	
 0
 	0
0
0	0
	0
 00
@@ -1248,4 +1300,18 @@ Talons;
 0ZX\
 0\^Z
 0[Y]
-0]_[0a`b0bca0edf0fge0a`d0dea0cbf0fgc0b`d0dfb0cae0egc0ihj0jki0mln0nom0ihl0lmi0kjn0nok0jhl0lnj0kim0mok
\ No newline at end of file
+0]_[0a`b0bca0edf0fge0a`d0dea0cbf0fgc0b`d0dfb0cae0egc0ihj0jki0mln0nom0ihl0lmi0kjn0nok0jhl0lnj0kim0mokÂ(K
+Köÿÿÿ-çÿÿÿûÿÿÿ�ÿÿÿnÎÿÿÿçÿÿÿÎÿÿÿûÿÿÿsn-K
+Köÿÿÿ-çÿÿÿûÿÿÿ�ÿÿÿÎÿÿÿçÿÿÿÎÿÿÿûÿÿÿs-ÎÿÿÿÎÿÿÿÎÿÿÿÎÿÿÿçÿÿÿœÿÿÿÎÿÿÿœÿÿÿ2ÎÿÿÿÎÿÿÿçÿÿÿœÿÿÿÎÿÿÿœÿÿÿ20	0	0
+0
+	00
+000
0
00
00000000000	0
+	0
+00
0
000000000000Â(K
+Köÿÿÿ-çÿÿÿûÿÿÿ�ÿÿÿ’ÿÿÿÎÿÿÿçÿÿÿÎÿÿÿûÿÿÿs’ÿÿÿ-K
+Köÿÿÿ-çÿÿÿûÿÿÿ�ÿÿÿ£ÿÿÿÎÿÿÿçÿÿÿÎÿÿÿûÿÿÿs£ÿÿÿ-ÎÿÿÿÎÿÿÿÎÿÿÿÎÿÿÿçÿÿÿœÿÿÿÎÿÿÿœÿÿÿ2ÎÿÿÿÎÿÿÿçÿÿÿœÿÿÿÎÿÿÿœÿÿÿ20	0	0
+0
+	00
+000
0
00
00000000000	0
+	0
+00
0
000000000000
\ No newline at end of file
diff --git a/Demo/Games/TheDead.HC b/Demo/Games/TheDead.HC
index f2fb65e..d9c6b65 100644
Binary files a/Demo/Games/TheDead.HC and b/Demo/Games/TheDead.HC differ
diff --git a/Demo/Games/TicTacToe.HC b/Demo/Games/TicTacToe.HC
index ab1c750..921eb52 100644
--- a/Demo/Games/TicTacToe.HC
+++ b/Demo/Games/TicTacToe.HC
@@ -35,12 +35,12 @@ U0 DrawBoard(I64 player)
 	break;
 
     }
-//ip.pos.x,ip.pos.y are input pointer (mouse) x,y.
-    //ip.lb	is mouse left button
+//ms.pos.x,ms.pos.y are mouse x,y.
+    //ms.lb	is mouse left bttn
   if (player==1)
-    DrawX(dc,ip.pos.x-Fs->pix_left,ip.pos.y-Fs->pix_top);
+    DrawX(dc,ms.pos.x-Fs->pix_left,ms.pos.y-Fs->pix_top);
   else
-    DrawO(dc,ip.pos.x-Fs->pix_left,ip.pos.y-Fs->pix_top);
+    DrawO(dc,ms.pos.x-Fs->pix_left,ms.pos.y-Fs->pix_top);
   DCDel(dc);
 }
 
@@ -49,19 +49,19 @@ U0 TakeTurn(I64 player)
   I64 i,x=0,y=0;
   while (!(100<=x<400) || !(100<=y<400) || board[i]) {
     if (player==1)
-      Beep(500);
+      Beep;
     else
-      Beep(1000);
-    while (!ip.lb) {
+      Beep(74);
+    while (!ms.lb) {
       DrawBoard(player);
       Refresh;
     }
-    while (ip.lb) {
+    while (ms.lb) {
       DrawBoard(player);
       Refresh;
     }
-    x=ip.pos.x-Fs->pix_left;
-    y=ip.pos.y-Fs->pix_top;
+    x=ms.pos.x-Fs->pix_left;
+    y=ms.pos.y-Fs->pix_top;
     i=(x-100)/100+(y-100)/100*3;
   }
   board[i]=player;
@@ -91,18 +91,18 @@ U0 DoGame()
   while (TRUE) {
     TakeTurn(1);
     if (CheckWinner(1)) {
-      Beep(500);
-      Beep(500);
-      Beep(500);
+      Beep;
+      Beep;
+      Beep;
       break;
     }
     if (++moves==9) break;
 
     TakeTurn(2);
     if (CheckWinner(2)) {
-      Beep(1000);
-      Beep(1000);
-      Beep(1000);
+      Beep(74);
+      Beep(74);
+      Beep(74);
       break;
     }
     if (++moves==9) break;
diff --git a/Demo/Games/TreeCheckers.HC b/Demo/Games/TreeCheckers.HC
index 55c7849..440c1b4 100644
--- a/Demo/Games/TreeCheckers.HC
+++ b/Demo/Games/TreeCheckers.HC
@@ -123,7 +123,7 @@ U0 KillsChk(I64 x1,I64 y1,I64 player)
       dd=SqrI64(x2-x1)+SqrI64(y2-y1);
       if (dd<=(CIRCLE_RAD+2)*(CIRCLE_RAD+2)) {
 	u[i].alive=FALSE;
-	Snd(500);Sleep(100);Snd(0);Sleep(25);
+	Snd(62);Sleep(100);Snd;Sleep(25);
 	num_alive[u[i].player]--;
 	do {
 	  found=FALSE;
@@ -132,7 +132,7 @@ U0 KillsChk(I64 x1,I64 y1,I64 player)
 		  !u[u[j].link].alive) {
 	      found=TRUE;
 	      u[j].alive=FALSE;
-	      Snd(500);Sleep(100);Snd(0);Sleep(25);
+	      Snd(62);Sleep(100);Snd;Sleep(25);
 	      num_alive[u[j].player]--;
 	    }
 	} while (found);
@@ -283,7 +283,7 @@ U0 CleanUp()
 
 U0 TreeCheckers()
 {
-  I64 msg_code,a1,a2,ch,sc;
+  I64 msg_code,arg1,arg2,ch,sc;
   Unit *tmpu;
 
   SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$
@@ -311,11 +311,11 @@ cn_start:
     show_start=FALSE;
     Fs->draw_it=&DrawIt;
     while (TRUE) {
-      msg_code=GetMsg(&a1,&a2,
-	    1<1 && num_alive[1]>1) {
-	    tmpu=UnitFind(a1,a2,cur_player);
+	    tmpu=UnitFind(arg1,arg2,cur_player);
 	    end_x=start_x=tmpu->x;
 	    end_y=start_y=tmpu->y;
 	    show_start=TRUE;
 	  }
 	  break;
-	case MSG_IP_MOVE:
+	case MSG_MS_MOVE:
 	  if (tmpu)
-	    UnitMove(tmpu,a1,a2);
+	    UnitMove(tmpu,arg1,arg2);
 	  break;
-	case MSG_IP_L_UP:
-	  UnitMove(tmpu,a1,a2);
+	case MSG_MS_L_UP:
+	  UnitMove(tmpu,arg1,arg2);
 	  KillsChk(tmpu->x,tmpu->y,cur_player);
 	  show_start=FALSE;
 	  tmpu=NULL;
diff --git a/Demo/Games/Varoom.HC b/Demo/Games/Varoom.HC
index a4e9745..5738044 100644
--- a/Demo/Games/Varoom.HC
+++ b/Demo/Games/Varoom.HC
@@ -87,8 +87,8 @@
 
 
 
-RegSetDftEntry("TempleOS/Varoom","F64 best_score=9999;\n");
-RegExeBranch("TempleOS/Varoom");
+RegDft("TempleOS/Varoom","F64 best_score=9999;\n");
+RegExe("TempleOS/Varoom");
 
 F64 distance,t0,tf;
 Bool game_over;
@@ -468,7 +468,7 @@ U0 DrawIt(CTask *task,CDC *dc)
   dc->x=task->pix_width>>1;
   dc->y=task->pix_height-150;
   dc->z=GR_Z_ALL;
-  SpriteMat3B(dc,0,0,-100,c[0].img,r);
+  Sprite3Mat4x4B(dc,0,0,-100,c[0].img,r);
 
   //Map
   GrBlot(dc,w-track_map->width,h-track_map->height,track_map);
@@ -509,9 +509,9 @@ U0 AnimateTask(I64)
   Track *tmpt,*tmpt2;
   while (TRUE) {
     if (!game_over)
-      Snd(0.01*c[0].speed*3+10);
+      Snd(12.0*Log2(c[0].speed/500+0.7));
     else
-      Snd(0);
+      Snd;
     for (i=0;ip.x-=0.01*tmpc->speed*Cos(tmpc->é-ã/2);
@@ -542,7 +542,7 @@ U0 AnimateTask(I64)
       for (i=1;i>1*CAR_LENGTH>>1) {
 	  game_over=TRUE;
-	  Noise(500,50,100);
+	  Noise(500,22,34);
 	  Sleep(500);
 	  break;
 	}
@@ -697,7 +697,7 @@ vr_done: //Don't goto out of try
   CleanUp;
   SettingsPop;
   MenuPop;
-  RegWriteBranch("TempleOS/Varoom","F64 best_score=%5.4f;\n",best_score);
+  RegWrite("TempleOS/Varoom","F64 best_score=%5.4f;\n",best_score);
 }
 
 Varoom;
diff --git a/Demo/Games/Wenceslas.HC b/Demo/Games/Wenceslas.HC
index 5ef4677..8520df3 100644
--- a/Demo/Games/Wenceslas.HC
+++ b/Demo/Games/Wenceslas.HC
@@ -1,5 +1,5 @@
-RegSetDftEntry("TempleOS/Wenceslas","F64 best_score=9999;\n");
-RegExeBranch("TempleOS/Wenceslas");
+RegDft("TempleOS/Wenceslas","F64 best_score=9999;\n");
+RegExe("TempleOS/Wenceslas");
 
 #define BORDER		5
 #define KING_STEP	6
@@ -177,12 +177,12 @@ U0 DrawIt(CTask *task,CDC *dc)
     Mat4x4RotY(r,tmpp->é+ã/2);
     Mat4x4RotX(r,ã/6);
     if (tmpp->stopped)
-      SpriteMat3B(dc,tmpp->x,tmpp->y,GR_Z_ALL,peasant_imgs[0],r);
+      Sprite3Mat4x4B(dc,tmpp->x,tmpp->y,GR_Z_ALL,peasant_imgs[0],r);
     else {
       tmps=SpriteInterpolate(Saw(animate_mS/250.0,1.0),
 	    peasant_imgs[ animate_phase   &3],
 	    peasant_imgs[(animate_phase+1)&3]);
-      SpriteMat3B(dc,tmpp->x,tmpp->y,GR_Z_ALL,tmps,r);
+      Sprite3Mat4x4B(dc,tmpp->x,tmpp->y,GR_Z_ALL,tmps,r);
       Free(tmps);
     }
     tmpp=tmpp->next;
@@ -193,12 +193,12 @@ U0 DrawIt(CTask *task,CDC *dc)
   Mat4x4RotY(r,king_é+ã/2);
   Mat4x4RotX(r,ã/6);
   if (tS>king_timeout)
-    SpriteMat3B(dc,king_x,king_y,GR_Z_ALL,king_imgs[0],r);
+    Sprite3Mat4x4B(dc,king_x,king_y,GR_Z_ALL,king_imgs[0],r);
   else {
     tmps=SpriteInterpolate(Saw(king_mS/250.0,1.0),
 	  king_imgs[ king_phase   &3],
 	  king_imgs[(king_phase+1)&3]);
-    SpriteMat3B(dc,king_x,king_y,GR_Z_ALL,tmps,r);
+    Sprite3Mat4x4B(dc,king_x,king_y,GR_Z_ALL,tmps,r);
     Free(tmps);
   }
 
@@ -396,10 +396,10 @@ U0 AnimateTask(I64)
     if (!not_stopped_cnt && !tf) {
       tf=tS;
       music.mute=TRUE;
-      Snd(2000);Sleep(200);Snd(0);Sleep(100);
+      Snd(86);Sleep(200);Snd;Sleep(100);
       if (tf-t0color=YELLOW;
   GrLine(dc,balls[0].x,balls[0].y,
-	ip.pos.x-task->pix_left-task->scroll_x,
-	ip.pos.y-task->pix_top-task->scroll_y);
+	ms.pos.x-task->pix_left-task->scroll_x,
+	ms.pos.y-task->pix_top-task->scroll_y);
   for (i=0;ix,springs[i].end1->y,
 	  springs[i].end2->x,springs[i].end2->y);
@@ -46,9 +46,9 @@ U0 DrawIt(CTask *task,CDC *dc)
     GrCircle(dc,balls[i].x,balls[i].y,BALL_RADIUS);
   }
   if (snd_on)
-    Snd(1000);
+    Snd(74);
   else
-    Snd(0);
+    Snd;
 }
 
 U0 MyDerivative(CMathODE *ode,F64 t,COrder2D3 *,COrder2D3 *)
@@ -59,8 +59,8 @@ U0 MyDerivative(CMathODE *ode,F64 t,COrder2D3 *,COrder2D3 *)
   CTask *task=ode->win_task;
 
   D3SubEqu(D3Equ(&p2,
-	ip.pos.x-task->pix_left-task->scroll_x,
-	ip.pos.y-task->pix_top-task->scroll_y,0),
+	ms.pos.x-task->pix_left-task->scroll_x,
+	ms.pos.y-task->pix_top-task->scroll_y,0),
 	&balls[0].state->x);
   D3AddEqu(&balls[0].DstateDt->DxDt,D3MulEqu(&p2,STRETCH));
 
@@ -80,7 +80,7 @@ U0 MyDerivative(CMathODE *ode,F64 t,COrder2D3 *,COrder2D3 *)
       dd=D3NormSqr(&p);
       if (dd<=(2*BALL_RADIUS)*(2*BALL_RADIUS)) {
 	if (t-collision_t>0.05) {
-	  Noise(50,5000,6000);
+	  Noise(50,102,105);
 	  collision_t=t;
 	}
 	d=Sqrt(dd)+0.0001;
@@ -129,8 +129,8 @@ U0 Whap()
   for (i=1;ipix_width>>1,RandI16%500+Fs->pix_height>>1,0);
-  balls[0].x=ip.pos.x-Fs->pix_left-Fs->scroll_x;
-  balls[0].y=ip.pos.y-Fs->pix_top-Fs->scroll_y;
+  balls[0].x=ms.pos.x-Fs->pix_left-Fs->scroll_x;
+  balls[0].y=ms.pos.y-Fs->pix_top-Fs->scroll_y;
   for (i=0;ipix_width/2,Fs->pix_height/2,
-	    ip.pos.x-Fs->pix_left-Fs->scroll_x,
-	    ip.pos.y-Fs->pix_top-Fs->scroll_y);
+	    ms.pos.x-Fs->pix_left-Fs->scroll_x,
+	    ms.pos.y-Fs->pix_top-Fs->scroll_y);
       dc->color=LTBLUE;
       GrLine(dc,Fs->pix_width/2,Fs->pix_height/2,
-	    ip.pos.x-Fs->pix_left-Fs->scroll_x,
-	    ip.pos.y-Fs->pix_top-Fs->scroll_y);
+	    ms.pos.x-Fs->pix_left-Fs->scroll_x,
+	    ms.pos.y-Fs->pix_top-Fs->scroll_y);
 
       Mat4x4IdentEqu(dc->r);
       Mat4x4RotX(dc->r,ê);
diff --git a/Demo/Graphics/BSpline.HC b/Demo/Graphics/BSpline.HC
index 51f45ee..c17fb63 100644
--- a/Demo/Graphics/BSpline.HC
+++ b/Demo/Graphics/BSpline.HC
@@ -3,7 +3,7 @@
 U0 BSplineDemo()
 {
   CDC *dc=DCAlias;
-  I64 a1,a2,i=0,msg_code;
+  I64 arg1,arg2,i=0,msg_code;
   CD3I32 c[MAX_PTS];
 
   SettingsPush;
@@ -13,14 +13,14 @@ U0 BSplineDemo()
   "Sel ctrl points with left mouse.  Right when finished.\n";
   DCFill;
   do {
-    msg_code=GetMsg(&a1,&a2,1<color=GREEN;
-      GrCircle(dc,a1,a2,10);
+      GrCircle(dc,arg1,arg2,10);
       i++;
     }
-  } while (icolor=RED;
   Gr2BSpline(dc,c,i,TRUE);
   dc->color=BLUE;
diff --git a/Demo/Graphics/Balloon.HC b/Demo/Graphics/Balloon.HC
index f0aef6f..7f134f6 100644
--- a/Demo/Graphics/Balloon.HC
+++ b/Demo/Graphics/Balloon.HC
@@ -24,7 +24,7 @@ U0 Balloon()
       for (j=0;j<3;j++)
 	*(text.vga_alias(I64)+0x1000+(i+k)*640/8+j)(U8 *)=a[i*3+j];
 
-    BusyWait(40000);
+    Busy(40000);
 
     for (i=0;i<20;i++)
       for (j=0;j<3;j++)
diff --git a/Demo/Graphics/Camp.HC b/Demo/Graphics/Camp.HC
deleted file mode 100644
index 3ebeaf4..0000000
Binary files a/Demo/Graphics/Camp.HC and /dev/null differ
diff --git a/Demo/Graphics/Collision.HC b/Demo/Graphics/Collision.HC
index 5e056cc..3af2199 100644
Binary files a/Demo/Graphics/Collision.HC and b/Demo/Graphics/Collision.HC differ
diff --git a/Demo/Graphics/Doodle.HC b/Demo/Graphics/Doodle.HC
index b01a7cf..c31c629 100644
--- a/Demo/Graphics/Doodle.HC
+++ b/Demo/Graphics/Doodle.HC
@@ -2,7 +2,7 @@
 
 U0 Doodle()
 {
-  I64 msg_code,i,x1,y1,x2,y2,a1,a2,color=BLACK;
+  I64 msg_code,i,x1,y1,x2,y2,arg1,arg2,color=BLACK;
   CDC *dc=DCAlias;
 
   SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$
@@ -14,30 +14,31 @@ U0 Doodle()
   DocClear;
   DCFill;
   do {
-    msg_code=GetMsg(&a1,&a2,1<=0) color=i;
 	break;
-      case MSG_IP_L_DOWN:
-	x1=a1; y1=a2;
-	x2=a1; y2=a2;
+      case MSG_MS_L_DOWN:
+	x1=arg1; y1=arg2;
+	x2=arg1; y2=arg2;
 	dc->color=ROP_XOR+color^TRANSPARENT;
 	dc->pen_width=7;
-	while (msg_code!=MSG_IP_L_UP) {
+	while (msg_code!=MSG_MS_L_UP) {
 	  GrLine3(dc,x1,y1,0,x2,y2,0);
-	  msg_code=GetMsg(&a1,&a2,
-		1<draw_it=&DrawIt;
     while (TRUE) {
-      switch (msg_code=GetMsg(&a1,&a2,
-	    1<pen_width=1;
   dc->flags&=~(DCF_TRANSFORMATION|DCF_SYMMETRY);
@@ -10,21 +10,21 @@ U0 DrawMyInputPtr(CDC *dc,I64 x,I64 y)
 U0 GridDemo()
 {
   CGridGlbls old_grid;
-  U0 (*old_draw_input_ptr)(CDC *dc,I64 x,I64 y); //Can't init this type of var.
-  MemCpy(&old_grid,&ip_grid,sizeof(CGridGlbls));
+  U0 (*old_draw_ms)(CDC *dc,I64 x,I64 y); //Can't init this type of var.
+  MemCpy(&old_grid,&ms_grid,sizeof(CGridGlbls));
   GridInit;
-  ip_grid.snap=TRUE; //You can set other $LK,"stuff",A="MN:CGridGlbls"$.
-  ip_grid.x=GRID;
-  ip_grid.y=GRID;
-  old_draw_input_ptr=gr.fp_draw_input_ptr;
-  gr.fp_draw_input_ptr=&DrawMyInputPtr;
-  while (!ip.lb)  {//Left button to exit.
-    GrPlot(,ip.pos.x,ip.pos.y);
+  ms_grid.snap=TRUE; //You can set other $LK,"stuff",A="MN:CGridGlbls"$.
+  ms_grid.x=GRID;
+  ms_grid.y=GRID;
+  old_draw_ms=gr.fp_draw_ms;
+  gr.fp_draw_ms=&DrawMyMs;
+  while (!ms.lb)  {//Left bttn to exit.
+    GrPlot(,ms.pos.x,ms.pos.y);
     Yield;
   }
   DCFill;
-  gr.fp_draw_input_ptr=old_draw_input_ptr;
-  MemCpy(&ip_grid,&old_grid,sizeof(CGridGlbls));
+  gr.fp_draw_ms=old_draw_ms;
+  MemCpy(&ms_grid,&old_grid,sizeof(CGridGlbls));
 }
 
 GridDemo;
diff --git a/Demo/Graphics/Hanoi.HC b/Demo/Graphics/Hanoi.HC
index a73d53d..c2ed739 100644
--- a/Demo/Graphics/Hanoi.HC
+++ b/Demo/Graphics/Hanoi.HC
@@ -77,7 +77,7 @@ U0 DrawIt(CTask *task,CDC *dc)
 U0 MySleep()
 {
   if (ScanChar)
-    ThrowBreak;
+    throw;
   Sleep(3);
 }
 
diff --git a/Demo/Graphics/InputPointer.HC b/Demo/Graphics/InputPointer.HC
deleted file mode 100644
index 5a94044..0000000
--- a/Demo/Graphics/InputPointer.HC
+++ /dev/null
@@ -1,11 +0,0 @@
-U0 InputPointer()
-{
-  "Press left mouse button to exit.\n";
-  while (!ip.lb) { //Left button to exit.
-    GrPlot(,ip.pos.x,ip.pos.y);
-    Refresh;
-  }
-  DCFill;
-}
-
-InputPointer;
diff --git a/Demo/Graphics/Lattice.HC b/Demo/Graphics/Lattice.HC
index 1c31489..fa107b3 100644
--- a/Demo/Graphics/Lattice.HC
+++ b/Demo/Graphics/Lattice.HC
@@ -135,7 +135,7 @@ U0 SetMenu()
 U0 Lattice()
 {
   Bool aim=FALSE;
-  I64 a1,a2;
+  I64 arg1,arg2;
   CDC  *dc=DCAlias;
   DCDepthBufAlloc(dc);
   MenuPush(
@@ -181,29 +181,29 @@ U0 Lattice()
   Fs->draw_it=&DrawIt;
   try {
     while (TRUE) {
-      switch (GetMsg(&a1,&a2,1<draw_it=&DrawIt;
   Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_BORDER;
   do {
-    msg_code=GetMsg(&a1,&a2,1<color=GREEN;
-	  dc[cur_dc]->pen_width=0.04*ip.speed;
+	  dc[cur_dc]->pen_width=0.04*ms.speed;
 	  GrLine3(dc[cur_dc],x1,y1,0,x2,y2,0);
 	  restart=TRUE;
-	  msg_code=GetMsg(&a1,&a2,1<pix_width,h=Fs->pix_height,cx=w/2,cy=h/2;
   CDC *dc=DCAlias;
@@ -94,7 +94,7 @@ U0 Draw()
 
 U0 PoleZeros()
 {
-  I64 msg_code,a1,a2,p11,p22,cx,cy;
+  I64 msg_code,arg1,arg2,p11,p22,cx,cy;
   Complex *tmpc=NULL;
 
   PopUpOk(
@@ -118,24 +118,25 @@ U0 PoleZeros()
   try {
     Draw;
     while (TRUE) {
-      msg_code=GetMsg(&a1,&a2,1<pix_width/2;
       cy=Fs->pix_height/2;
       switch (msg_code) {
-	case MSG_IP_L_DOWN:
-	  tmpc=PoleZeroFind(a1-cx,cy-a2);
+	case MSG_MS_L_DOWN:
+	  tmpc=PoleZeroFind(arg1-cx,cy-arg2);
 	  break;
-	case MSG_IP_MOVE:
+	case MSG_MS_MOVE:
 	  if (tmpc) {
-	    p11=a1;p22=a2;
+	    p11=arg1;p22=arg2;
 //get to last mouse move
-	    while (msg_code=ScanMsg(&a1,&a2,1<x=a1-cx;
-	    tmpc->y=cy-a2;
+	    tmpc->x=arg1-cx;
+	    tmpc->y=cy-arg2;
 	    tmpc=NULL;
 	    Draw;
 	  }
 	  break;
-	case MSG_IP_R_DOWN:
-	case MSG_IP_R_UP:
+	case MSG_MS_R_DOWN:
+	case MSG_MS_R_UP:
 	  Draw;
 	  break;
 	case MSG_KEY_DOWN:
-	  if (a1==CH_SHIFT_ESC||a1==CH_ESC)
+	  if (arg1==CH_SHIFT_ESC||arg1==CH_ESC)
 	    goto pz_done;
       }
       Refresh;
diff --git a/Demo/Graphics/ScrnCapture.HC b/Demo/Graphics/ScrnCapture.HC
index 0415cff..8b9a86b 100644
--- a/Demo/Graphics/ScrnCapture.HC
+++ b/Demo/Graphics/ScrnCapture.HC
@@ -1,24 +1,13 @@
 //See $LK,"::/Demo/Games/Stadium/StadiumGen.HC"$.
 
-U0 ViewScrnCapture(U8 *filename)
-{
-  CDC	*dc=DCAlias(,Fs),
-	*dc2=GRRead(filename);
-  GrBlot(dc,0,0,dc2);
-  DCDel(dc2);
-  DCDel(dc);
-}
-
 U0 Main()
 {
   "Capture scrn...\n";
   PressAKey;
-  GRScrnCapture("~/DemoScrnShot");
-
+  GRScrnCaptureWrite("~/DemoScrnShot");
   "View captured scrn...\n";
   PressAKey;
-  ViewScrnCapture("~/DemoScrnShot");
-
+  GRScrnCaptureRead("~/DemoScrnShot");
   PressAKey;
   DCFill;
 }
diff --git a/Demo/Graphics/Shading.HC b/Demo/Graphics/Shading.HC
index 332f126..9e9ae56 100644
--- a/Demo/Graphics/Shading.HC
+++ b/Demo/Graphics/Shading.HC
@@ -72,8 +72,8 @@ U0 DrawIt(CTask *task,CDC *dc)
   Mat4x4Scale(dc->r,tt);
   DCMat4x4Set(dc,dc->r);
 
-  ls.x=-(ip.pos.x-task->pix_left-task->scroll_x-cx);
-  ls.y=-(ip.pos.y-task->pix_top-task->scroll_y-cy);
+  ls.x=-(ms.pos.x-task->pix_left-task->scroll_x-cx);
+  ls.y=-(ms.pos.y-task->pix_top-task->scroll_y-cy);
   ls.z=GR_WIDTH/8;
   d=1<<16/D3I32Norm(&ls);
   ls.x*=d;
diff --git a/Demo/Graphics/Shadow.HC b/Demo/Graphics/Shadow.HC
index aff8f95..aef853f 100644
Binary files a/Demo/Graphics/Shadow.HC and b/Demo/Graphics/Shadow.HC differ
diff --git a/Demo/Graphics/Slider.HC b/Demo/Graphics/Slider.HC
index b040cbf..5801088 100644
--- a/Demo/Graphics/Slider.HC
+++ b/Demo/Graphics/Slider.HC
@@ -75,7 +75,7 @@ CCtrl *SliderNew()
 {
   CCtrl *c=CAlloc(sizeof(CCtrl));
   c->win_task=Fs;
-  c->flags=CTRLF_SHOW|CTRLF_CAPTURE_LEFT_IP;
+  c->flags=CTRLF_SHOW|CTRLF_CAPTURE_LEFT_MS;
   c->type=CTRLT_GENERIC;
   c->state=&sld;
   MemSet(&sld,0,sizeof(CSliderState));
diff --git a/Demo/Graphics/Speedline.HC b/Demo/Graphics/Speedline.HC
index cf4d269..3eddd13 100644
--- a/Demo/Graphics/Speedline.HC
+++ b/Demo/Graphics/Speedline.HC
@@ -2,7 +2,7 @@
 
 public U0 SpeedLineDemo()
 {
-  I64 msg_code,cnt,x1,y1,x2,y2,a1,a2,color=BLACK;
+  I64 msg_code,cnt,x1,y1,x2,y2,arg1,arg2,color=BLACK;
   CDC *dc=DCAlias;
   dc->color=color;
 
@@ -15,31 +15,32 @@ public U0 SpeedLineDemo()
   DocClear;
   DCFill;
   do {
-    msg_code=GetMsg(&a1,&a2,1<=0)
 	  dc->color=color;
 	break;
-      case MSG_IP_L_DOWN:
-	x1=a1; y1=a2;
-	x2=a1; y2=a2;
+      case MSG_MS_L_DOWN:
+	x1=arg1; y1=arg2;
+	x2=arg1; y2=arg2;
 	cnt=0;
-	while (msg_code!=MSG_IP_L_UP) {
-	  dc->pen_width=0.04*ip.speed;
+	while (msg_code!=MSG_MS_L_UP) {
+	  dc->pen_width=0.04*ms.speed;
 	  GrLine3(dc,x1,y1,0,x2,y2,0);
-	  msg_code=GetMsg(&a1,&a2,
-		1<flags|=DCF_SYMMETRY;
   DCSymmetrySet(dc,Fs->pix_width/2,0,Fs->pix_width/2,1);
   do {
-    msg_code=GetMsg(&a1,&a2,
-	  1<flags&=~DCF_SYMMETRY;
 	dc->color=ROP_XOR+RED^TRANSPARENT;
-	x1=a1; y1=a2;
-	x2=a1; y2=a2;
-	while (msg_code!=MSG_IP_R_UP) {
+	x1=arg1; y1=arg2;
+	x2=arg1; y2=arg2;
+	while (msg_code!=MSG_MS_R_UP) {
 	  GrLine3(dc,x1,y1,0,x2,y2,0);
-	  msg_code=GetMsg(&a1,&a2,
-		1<flags|=DCF_SYMMETRY;
 	break;
-      case MSG_IP_L_DOWN:
+      case MSG_MS_L_DOWN:
 	dc->color=ROP_XOR+BLACK^TRANSPARENT;
-	x1=a1; y1=a2;
-	x2=a1; y2=a2;
-	while (msg_code!=MSG_IP_L_UP) {
+	x1=arg1; y1=arg2;
+	x2=arg1; y2=arg2;
+	while (msg_code!=MSG_MS_L_UP) {
 	  GrLine3(dc,x1,y1,0,x2,y2,0);
-	  msg_code=GetMsg(&a1,&a2,
-		1<win_task=sys_winmgr_task;
-  c->flags=CTRLF_SHOW|CTRLF_CAPTURE_LEFT_IP;
+  c->flags=CTRLF_SHOW|CTRLF_CAPTURE_LEFT_MS;
   c->type=CTRLT_GENERIC;
   c->state=ACAlloc(sizeof(CSliderState));
   c->draw_it=&DrawCtrlSlider;
diff --git a/Demo/InFile/INSetIP.HC b/Demo/InFile/INSetIP.HC
deleted file mode 100644
index edf3b0e..0000000
--- a/Demo/InFile/INSetIP.HC
+++ /dev/null
@@ -1,13 +0,0 @@
-U0 INSetIPDemo()
-{
-  I64 t,l;
-  WinBorder(ON);
-  l=Fs->pix_left+Fs->scroll_x;
-  t=Fs->pix_top+Fs->scroll_y;
-  IPSet(,,,FALSE,FALSE); //Mouse unclicked
-  InSetIP(,l-4,t-4);
-  InSetIP(20,l+20,t+20,,TRUE);
-  IPSet(,,,FALSE,FALSE);
-}
-
-INSetIPDemo;
diff --git a/Demo/InFile/INDir.IN b/Demo/InFile/InDir.IN
similarity index 100%
rename from Demo/InFile/INDir.IN
rename to Demo/InFile/InDir.IN
diff --git a/Demo/InFile/INEd.DD b/Demo/InFile/InEd.DD
similarity index 100%
rename from Demo/InFile/INEd.DD
rename to Demo/InFile/InEd.DD
diff --git a/Demo/InFile/INEd.IN b/Demo/InFile/InEd.IN
similarity index 90%
rename from Demo/InFile/INEd.IN
rename to Demo/InFile/InEd.IN
index 09e5268..3476b0a 100644
--- a/Demo/InFile/INEd.IN
+++ b/Demo/InFile/InEd.IN
@@ -4,14 +4,14 @@ Or, type $LK,"InFile",A="MN:InFile"$(filename);
 See $LK,"InFile",A="FF:::/Doc/Glossary.DD,InFile"$ in the glossary for more info.
 
 This InFile will renum the defines in
-INEd.DD.Z.  Test it by numbering a few wrong
+InEd.DD.Z.  Test it by numbering a few wrong
 and running this demo.
 
 */
 
 U8 i;
 
-"Ed(\"INEd.DD.Z\");\n";
+"Ed(\"InEd.DD.Z\");\n";
 //Go to start of file
 Msg(MSG_KEY_DOWN,0,SC_CURSOR_UP|SCF_CTRL);
 for (i=0;i<=0xC3;i++) {
diff --git a/Demo/InFile/INPopUp.HC b/Demo/InFile/InPopUp.HC
similarity index 100%
rename from Demo/InFile/INPopUp.HC
rename to Demo/InFile/InPopUp.HC
diff --git a/Demo/InFile/INPopUpWait.IN b/Demo/InFile/InPopUpWait.IN
similarity index 100%
rename from Demo/InFile/INPopUpWait.IN
rename to Demo/InFile/InPopUpWait.IN
diff --git a/Demo/InFile/INProfile.IN b/Demo/InFile/InProfile.IN
similarity index 100%
rename from Demo/InFile/INProfile.IN
rename to Demo/InFile/InProfile.IN
diff --git a/Demo/InFile/InSetIP.HC b/Demo/InFile/InSetIP.HC
new file mode 100644
index 0000000..807234c
--- /dev/null
+++ b/Demo/InFile/InSetIP.HC
@@ -0,0 +1,13 @@
+U0 InSetMsDemo()
+{
+  I64 t,l;
+  WinBorder(ON);
+  l=Fs->pix_left+Fs->scroll_x;
+  t=Fs->pix_top+Fs->scroll_y;
+  MsSet(,,,FALSE,FALSE); //Mouse unclicked
+  InSetMs(,l-4,t-4);
+  InSetMs(20,l+20,t+20,,TRUE);
+  MsSet(,,,FALSE,FALSE);
+}
+
+InSetMsDemo;
diff --git a/Demo/Lectures/MiniGrLib.HC b/Demo/Lectures/MiniGrLib.HC
index 9fa7336..8b00800 100644
--- a/Demo/Lectures/MiniGrLib.HC
+++ b/Demo/Lectures/MiniGrLib.HC
@@ -88,7 +88,7 @@ U0 MGCircle(I64 x,I64 y,F64 r)
   MGPlot(x+x1,y+y1);
   while (len-->=0) {
 
-    //m1@a1 * m2@a2	= m1*m2@(a1+a2)
+    //m1@a1 * m2@a2	= m1*m2@(arg1+arg2)
 
     //(x1+y1i)*(x2+y2i) = x1*x2+(x1*y1+x2*y2)i-y1*y2
 
@@ -114,7 +114,7 @@ U0 MiniGrLibDemo()
   for (i=0;i<300;i+=4)
     MGCircle(200,100+i,i);
   MGUpdate;
-  BusyWait(1500000);
+  Busy(1500000);
 /*
 We are returning graphics to normal operations under TempleOS.
 It is not normal to by-pass the TempleOS graphcis routines.
diff --git a/Demo/Lectures/Optimization.HC b/Demo/Lectures/Optimization.HC
index 505769e..33f7fa5 100644
--- a/Demo/Lectures/Optimization.HC
+++ b/Demo/Lectures/Optimization.HC
@@ -14,7 +14,7 @@ speed-up.  Depressing.
 
 asm {
 
-LIMIT::	DU64	SAMPLES;	//Memory reference should suck, right?
+LIMIT::	DU64	SAMPLES;	//Memory reference should be bad, right?
 
 _BADLY_UNOPTIMIZED::
 	MOV	RAX,0
@@ -61,7 +61,7 @@ _WELL_OPTIMIZED3::
 	XOR	RAX,RAX
 	MOV	RCX,SAMPLES-1
 @@05:	ADD	RAX,RCX
-	LOOP	@@05	//Inst sucks in speed, but saves code size.
+	LOOP	@@05	//Inst has slow speed, but saves code size.
 	RET
 }
 
diff --git a/Demo/Lectures/ScrnMemory.HC b/Demo/Lectures/ScrnMemory.HC
index aa25476..137fcc0 100644
--- a/Demo/Lectures/ScrnMemory.HC
+++ b/Demo/Lectures/ScrnMemory.HC
@@ -35,7 +35,7 @@ are zero, so sel them and make them zero.
 You can't do reads on VGA memory, by the way.
 That means no read-modify-writes, too.
 */
-  BusyWait(4000000);
+  Busy(4000000);
 
   //TempleOS has a 4 plane memory duplicate of the scrn, $LK,"gr.scrn_image",A="MN:CGrGlbls"$,
   //and only writes actual changes.  See $LK,"GrUpdateVGAGraphics",A="MN:GrUpdateVGAGraphics"$().
diff --git a/Demo/MagicPairs.HC b/Demo/MagicPairs.HC
index 1e5b9f6..f083414 100644
--- a/Demo/MagicPairs.HC
+++ b/Demo/MagicPairs.HC
@@ -258,7 +258,7 @@ class RangeJob
   CDoc *doc;
   I64 num,lo,hi,N,sqrt_primes,cbrt_primes;
   Prime *primes;
-  CSrvCmd *cmd;
+  CJob *cmd;
 } rj[mp_cnt];
 
 I64 TestCoreSubRange(RangeJob *r)
diff --git a/Demo/MemDemo.HC b/Demo/MemDemo.HC
index 80ea1bf..11798bb 100644
--- a/Demo/MemDemo.HC
+++ b/Demo/MemDemo.HC
@@ -2,16 +2,16 @@ U0 MemDemo()
 {
   I64 i;
 "$$HL,1$$$$BLACK$$
-#define MEM_PAGE_BITS		9
-#define MEM_PAGE_SIZE		(1<data_heap->bp->free_page_hash[%X/512]"
+      "Fs->data_heap->bp->free_pag_hash[%X/512]"
 	  "$$BLACK$$ -->$$FG$$[X]$$BLACK$$ -->$$FG$$[X]$$BLACK$$ -->$$FG$$\n",i;
   "\n\n";
 
   "$$PURPLE$$Powers of two, owned by the system.$$FG$$\n";
-  for (i=Bsf(MEM_FREE_PAGE_HASH_SIZE*MEM_PAGE_SIZE);i<64;i++)
+  for (i=Bsf(MEM_FREE_PAG_HASH_SIZE*MEM_PAG_SIZE);i<64;i++)
     if (i==0x1A)
       "...\n";
     else if (!(0x1A<=i<=0x36))
-      "Fs->data_heap->bp->free_page_hash2[%X] %016X"
+      "Fs->data_heap->bp->free_pag_hash2[%X] %016X"
 	  "$$BLACK$$ -->$$FG$$[X]$$BLACK$$ -->$$FG$$[X]$$BLACK$$ -->$$FG$$\n",i,
-	  1< to Exit\n";
 
-  //We don't want the mouse buttons to reposition the cursor,
+  //We don't want the mouse bttns to reposition the cursor,
   //so we inhibit the window mgr from processing them.
 
-  Fs->win_inhibit=WIF_SELF_IP_L|WIF_SELF_IP_R;
+  Fs->win_inhibit=WIF_SELF_MS_L|WIF_SELF_MS_R;
 
   do {
-    msg_code=GetMsg(&a1,&a2,~(1<win_inhibit=WIG_USER_TASK_DFT;
diff --git a/Demo/MultiCore/Clouds.HC b/Demo/MultiCore/Clouds.HC
deleted file mode 100644
index 8dab6cb..0000000
--- a/Demo/MultiCore/Clouds.HC
+++ /dev/null
@@ -1,205 +0,0 @@
-//Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.HC"$.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-$SP,"<1>",BI=1,BP="::/Demo/Graphics/Mountain.HC.Z,Mountain"$ //Pointer to sprite in $LK,"Mountain.HC",A="FI:::/Demo/Graphics/Mountain.HC"$ file
-
-#define NUM_CLOUDS		16
-#define SKY_LINES		30
-#define CLOUD_PTS		512
-#define CLOUD_PENS		8
-#define CLOUD_PEN_PTS	16
-#define CLOUD_PEN_SIZE		16
-
-class Cloud
-{
-  I64 i,x,y,w,h,dx,dy;
-  I64 color;
-  I64 px[CLOUD_PTS],py[CLOUD_PTS],pc[CLOUD_PTS];
-} clouds[NUM_CLOUDS];
-
-class CloudPen
-{
-  CDC *img;
-  I64 px[CLOUD_PEN_PTS],py[CLOUD_PEN_PTS];
-} cloud_pens[CLOUD_PENS];
-
-CDC *cloud_pen;
-
-I64 mp_not_done_flags;
-U0 MPDrawClouds(CTask *task)
-{
-  Cloud *c;
-  CDC *dc=DCAlias(gr.dc2,task);
-  I64 i,j,k,xx,yy,lo=Gs->num*CLOUD_PTS/mp_cnt,hi=(Gs->num+1)*CLOUD_PTS/mp_cnt;
-
-  for (j=0,c=clouds;jpc[i];
-      if (kcolor)
-	dc->color=ROP_MONO+LTGRAY;
-      else
-	dc->color=ROP_MONO+WHITE;
-      xx=c->x.i32[1]+c->px[i];
-      yy=c->y.i32[1]+c->py[i];
-
-      k=RandU16&31-16;
-      if (k==-16)
-	k=-c->px[i];
-      c->px[i]+=SignI64(k);
-
-      k=RandU16&31-16;
-      if (k==-16)
-	k=-c->py[i];
-      c->py[i]+=SignI64(k);
-
-      GrBlot(dc,xx,yy,cloud_pens[i&(CLOUD_PENS-1)].img);
-    }
-  DCDel(dc);
-  LBtr(&mp_not_done_flags,Gs->num);
-}
-
-U0 DrawIt(CTask *task,CDC *dc)
-{
-  I64 i;
-  Sprite3(dc,0,SKY_LINES*FONT_HEIGHT,0,$IB,"<1>",BI=1$);
-  mp_not_done_flags=1<img);
-      cp->img->color=COLOR_MONO;
-      for (j=0;jimg,cp->px[j],cp->py[j]);
-	cp->px[j]=ClampI64(cp->px[j]+RandU16%3-1,0,CLOUD_PEN_SIZE-1);
-	cp->py[j]=ClampI64(cp->py[j]+RandU16%3-1,0,CLOUD_PEN_SIZE-1);
-      }
-    }
-
-    for (i=0,c=clouds;ix+=c->dx;
-      c->y=ClampI64(c->y+c->dy,0,0.7*(SKY_LINES*FONT_HEIGHT)<<32);
-      c->color=MAX_U16*c->y.i32[1]/(0.8*(SKY_LINES*FONT_HEIGHT));
-    }
-
-    Sleep(20);
-  }
-}
-
-#define SAMPLES	6
-U0 Init()
-{
-  Cloud *c=clouds;
-  CloudPen *cp=cloud_pens;
-  I64 i,j,k,l,
-	w=Fs->pix_width,
-	h=SKY_LINES*FONT_HEIGHT;
-
-  for (i=0;ix=ToI64(w/2+Rand*w/2-w/4)<<32;
-    c->y=ToI64(h/2+Rand*h/2-h/4)<<32;
-    c->dx=RandI32;
-    c->dy=RandI32;
-    c->w=100;
-    c->h=50;
-    c->color=RandU16;
-    for (l=0;lpx[l]=(k*c->w/MAX_I16)/SAMPLES;
-
-      k=0;
-      for (j=0;jpy[l]=(k*c->h/MAX_I16)/SAMPLES;
-
-      c->pc[l]=RandU16;
-    }
-  }
-
-  for (i=0;iimg=DCNew(CLOUD_PEN_SIZE,CLOUD_PEN_SIZE);
-    for (j=0;jpx[j]=RandU16%CLOUD_PEN_SIZE;
-      cp->py[j]=RandU16%CLOUD_PEN_SIZE;
-    }
-  }
-}
-
-U0 CleanUp()
-{
-  I64 i;
-  CloudPen *cp=cloud_pens;
-  for (i=0;iimg);
-}
-
-U0 SongTask(I64)
-{//Song by the Holy Spirit
-//This specifies a callback routine
-  //to be called when the task dies.
-  Fs->task_end_cb=&SndTaskEndCB;
-  MusicSettingsRst;
-  while (TRUE) {
-    Play("3qBetDA2G3qD2sG3E2G3EetCEDqFEeDC");
-    Play("qBetDA2G3qD2sG3E2G3EetCEDqFEeDC");
-    Play("CGqDeADsDCDCqGEetDAD2sG3D2G3D");
-    Play("eCGqDeADsDCDCqGEetDAD2sG3D2G3D");
-  }
-}
-
-U0 CloudScene()
-{
-  SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$
-  try {
-    Fs->text_attr=YELLOW<<4+BLUE;
-    Fs->song_task=Spawn(&SongTask,NULL,"Song",,Fs);
-    AutoComplete;
-    WinBorder;
-    WinMax;
-    DocCursor;
-    DocClear;
-    Init;
-    Fs->animate_task=Spawn(&AnimateTask,NULL,"Animate",,Fs);
-
-    "$$BG,LTCYAN$$%h*c",SKY_LINES,'\n';
-    "$$BG,YELLOW$$%h5c",'\n';
-    BibleVerse(,"Exodus,14:19",7);
-
-    Fs->draw_it=&DrawIt;
-    GetChar;
-    Refresh;
-  } catch
-    PutExcept;
-  SettingsPop;
-  CleanUp;
-}
-
-#if __CMD_LINE__
-CloudScene;
-#endif
diff --git a/Demo/MultiCore/Interrupts.HC b/Demo/MultiCore/Interrupts.HC
index 11f34f4..e06617d 100644
--- a/Demo/MultiCore/Interrupts.HC
+++ b/Demo/MultiCore/Interrupts.HC
@@ -1,13 +1,13 @@
 interrupt U0 IntBeepOn()
 {
   *(dev.uncached_alias+LAPIC_EOI)(U32 *)=0; //signal end of interrupt
-  Snd(100);
+  Snd(34);
 }
 
 interrupt U0 IntBeepOff()
 {
   *(dev.uncached_alias+LAPIC_EOI)(U32 *)=0;
-  Snd(0);
+  Snd;
 }
 
 U0 IntTest()
diff --git a/Demo/MultiCore/Lock.HC b/Demo/MultiCore/Lock.HC
index a5e9c9d..a2c2bbf 100644
--- a/Demo/MultiCore/Lock.HC
+++ b/Demo/MultiCore/Lock.HC
@@ -20,7 +20,7 @@ U0 MPUnlockedInc(I64)
 
 U0 UnlockedInc()
 {
-  CSrvCmd *tmpm0,*tmpm1;
+  CJob *tmpm0,*tmpm1;
   glbl=0;
   tmpm0=JobQue(&MPUnlockedInc,NULL,0,0);
   tmpm1=JobQue(&MPUnlockedInc,NULL,1,0);
@@ -39,7 +39,7 @@ U0 MPLockedInc(I64)
 
 U0 LockedInc()
 {
-  CSrvCmd *tmpm0,*tmpm1;
+  CJob *tmpm0,*tmpm1;
   glbl=0;
   tmpm0=JobQue(&MPLockedInc,NULL,0,0);
   tmpm1=JobQue(&MPLockedInc,NULL,1,0);
diff --git a/Demo/MultiCore/MPAdd.HC b/Demo/MultiCore/MPAdd.HC
index 9db9535..71c4a94 100644
--- a/Demo/MultiCore/MPAdd.HC
+++ b/Demo/MultiCore/MPAdd.HC
@@ -12,7 +12,7 @@ I64 MPSum(I64 my_mp_cnt)
 
 I64 Sum(I64 n,I64 my_mp_cnt)
 {
-  CSrvCmd *tmpm[MP_MAX_PROCESSORS];
+  CJob *tmpm[MP_MAX_PROCESSORS];
   I64 res=0,i;
   mp_n=n+1;
   for (i=0;i>k1+k2; //This is a preliminary radix sort.
-    b[j][bn[j]++]=a1[i];
+    j=arg1[i]>>k1+k2; //This is a preliminary radix sort.
+    b[j][bn[j]++]=arg1[i];
   }
   mp_not_done_flags=1<num,len);
+  DocPrint(doc,"CPU%02X Len:%2d ",Gs->num,len);
   while (len--)
     DocPrint(doc,"%C",*a++); //%C is toupper char
   DocPrint(doc,"\n");
diff --git a/Demo/Progress.HC b/Demo/Progress.HC
index e1abc9c..f8acb8d 100644
--- a/Demo/Progress.HC
+++ b/Demo/Progress.HC
@@ -1,54 +1,69 @@
 /*$LK,"progress1",A="MN:progress1"$-$LK,"progress4",A="MN:progress4"$ are just global vars
 shown on the wallpaper. I use them in debugging a lot.
+
 If you set $LK,"progress1_max",A="MN:progress1_max"$-$LK,"progress4_max",A="MN:progress4_max"$,
-then a bar will display.
+then a progress bar will display.
+
+If you set $LK,"progress1_t0",A="MN:progress1_t0"$-$LK,"progress4_t0",A="MN:progress4_t0"$
+then the elapsed time will display.
+
+If you set $LK,"progress1_tf",A="MN:progress1_tf"$-$LK,"progress4_tf",A="MN:progress4_tf"$
+then the estimated time will display.
 */
 
 U0 Main1()
 {
   "\nWith description.\n";
   PressAKey;
-  ProgressBarsRst;
   progress1_max=200;
   StrCpy(progress1_desc,"Progress Demo"); //PROGRESS_DESC_LEN is max
   while (progress1++!=progress1_max)
     Sleep(20);
-  progress1_max=0; //hide
+  ProgressBarsRst;
 }
-
 Main1;
 
 U0 Main2()
 {
-  "\nWith description and time.\n";
+  "\nWith description and elapsed time.\n";
   PressAKey;
-  ProgressBarsRst;
   progress1_max=200;
   progress1_t0=tS;
   StrCpy(progress1_desc,"Progress Demo"); //PROGRESS_DESC_LEN is max
   while (progress1++!=progress1_max)
     Sleep(20);
-  progress1_max=0; //hide
+  ProgressBarsRst;
 }
-
 Main2;
 
 U0 Main3()
+{
+  "\nWith description, elapsed time and registry total time.\n";
+  PressAKey;
+  progress1_max=200;
+  progress1_t0=tS;
+  RegExe("DemoCompany/ProgressBars");
+  StrCpy(progress1_desc,"Progress Demo"); //PROGRESS_DESC_LEN is max
+  while (progress1++!=progress1_max)
+    Sleep(20);
+  ProgressBarsRst("DemoCompany/ProgressBars");
+}
+Main3;
+
+U0 Main4()
 {
   "\nNo description.\n";
   PressAKey;
-  ProgressBarsRst;
-//No progress1_desc
   progress1_max=200;
   while (progress1++!=progress1_max)
     Sleep(20);
-  progress1_max=0; //hide
+  ProgressBarsRst;
 }
+Main4;
 
-Main3;
 
-"\n$$LTRED$$Now, from asm...  It's handy for debugging.$$FG$$\n"
-"$$LTRED$$Watch the progress on the wallpaper.$$FG$$\n";
+"\nNow, from asm...  It's handy for debugging.\n"
+"Watch the progress on the wallpaper.\n";
 WinBorder(ON);
 PressAKey;
 
@@ -61,6 +76,5 @@ _PROGRESS_DEMO::
 	MOV	U64 [&progress1],RCX
 	RET
 }
-
 _extern _PROGRESS_DEMO U0 AsmProgressDemo();
 AsmProgressDemo;
diff --git a/Demo/PullDownMenu.HC b/Demo/PullDownMenu.HC
index b26ae31..9980c42 100644
--- a/Demo/PullDownMenu.HC
+++ b/Demo/PullDownMenu.HC
@@ -5,7 +5,7 @@
 
 U0 PullDownMenuDemo()
 {
-  I64 msg_code,a1,a2;
+  I64 msg_code,arg1,arg2;
   CMenuEntry *tmpse;
 
   MenuPush(
@@ -33,29 +33,29 @@ U0 PullDownMenuDemo()
 	"of the scrn.\n\n";
 
   do {
-    msg_code=GetMsg(&a1,&a2,1<cur_menu,"Misc/Opt1"))
@@ -82,7 +82,7 @@ U0 PullDownMenuDemo()
 	break;
     }
 
-  } while (msg_code!=MSG_KEY_DOWN||(a1!=CH_SHIFT_ESC && a1!=CH_ESC));
+  } while (msg_code!=MSG_KEY_DOWN||(arg1!=CH_SHIFT_ESC && arg1!=CH_ESC));
   MenuPop;
 }
 
diff --git a/Demo/RegistryDemo.HC b/Demo/RegistryDemo.HC
index bd7d0fd..d6bd181 100644
--- a/Demo/RegistryDemo.HC
+++ b/Demo/RegistryDemo.HC
@@ -7,21 +7,21 @@ is valid in HolyC you can place simple expressions
 without vars.
 */
 
-RegSetDftEntry("DemoCompany/Game1","F64 best_score=1.23;\n");
-RegSetDftEntry("DemoCompany/Game1/SimpleVal","1234;\n");
-RegExeBranch("DemoCompany/Game1");
+RegDft("DemoCompany/Game1","F64 best_score=1.23;\n");
+RegDft("DemoCompany/Game1/SimpleVal","1234;\n");
+RegExe("DemoCompany/Game1");
 
 U0 Game()
 {
-  I64 i=RegExeBranch("DemoCompany/Game1/SimpleVal");
+  I64 i=RegExe("DemoCompany/Game1/SimpleVal");
   "High Score:%6.5f\n",best_score;
   "Val:%d\n",i;
   i++;
   best_score=tS;
 //You could combine these into one write by making
   //the $$TR...$$ and $$ID,2$$, $$ID,-2$$, cmds yourself.
-  RegWriteBranch("DemoCompany/Game1","F64 best_score=%9.5f;\n",best_score);
-  RegWriteBranch("DemoCompany/Game1/SimpleVal","%d;\n",i);
+  RegWrite("DemoCompany/Game1","F64 best_score=%9.5f;\n",best_score);
+  RegWrite("DemoCompany/Game1/SimpleVal","%d;\n",i);
 }
 
 Game;
diff --git a/Demo/Snd/ASCIIOrgan.HC b/Demo/Snd/ASCIIOrgan.HC
index b9b60db..b0ece5c 100644
Binary files a/Demo/Snd/ASCIIOrgan.HC and b/Demo/Snd/ASCIIOrgan.HC differ
diff --git a/Demo/Snd/MorseCode.HC b/Demo/Snd/MorseCode.HC
index f063550..ecc4e39 100644
--- a/Demo/Snd/MorseCode.HC
+++ b/Demo/Snd/MorseCode.HC
@@ -92,7 +92,7 @@ I64 MorseWaitKey()
     if (m_start) {
       GetMsg(NULL,NULL,1<=M_SPACE_THRESHOLD) {
@@ -170,7 +170,7 @@ U0 Morse()
       }
     }
   }
-  Snd(0);
+  Snd;
 }
 
 Morse;
diff --git a/Demo/Snd/OhGreat.HC b/Demo/Snd/OhGreat.HC
index 0abb739..1977196 100644
--- a/Demo/Snd/OhGreat.HC
+++ b/Demo/Snd/OhGreat.HC
@@ -4,38 +4,38 @@ U0 Song()
   MusicSettingsRst;
   try //Catch  exit
     while (!ScanChar) {
-      Play("4hEqDCBCDhE",
+      Play("6hEqDC5B6CDhE",
 	    "God \0is \0a \0g\0od \0of \0love.\n\0");
-      Play("3GqFEFhG4E",
+      Play("5GqFEFhG6E",
 	    " \0 \0 \0 \0 \0He \0");
-      Play("qDCBCDhE3G",
+      Play("6qDC5B6CDhE5G",
 	    "wat\0ches \0us \0from \0a\0bove.\n\0 \0");
-      Play("qFEFhG4BqC",
+      Play("5qFEFhGB6qC",
 	    " \0 \0 \0 \0Our \0world \0");
-      Play("DhCeDChB3G",
+      Play("6DhCeDC5hBG",
 	    "is\0n't \0al\0ways \0nice.\n\0 \0");
-      Play("qFEFhG4EqD",
+      Play("5qFEFhG6EqD",
 	    " \0 \0 \0 \0Be\0fore \0");
-      Play("CBCDhE3G",
+      Play("6C5B6CDhE5G",
 	    "you \0gr\0ipe \0think \0twice.\n\0 \0");
-      Play("qFEFhG4EqD",
+      Play("5qFEFhG6EqD",
 	    " \0 \0 \0 \0He \0wat\0");
-      Play("CBCDhE3G",
+      Play("6C5B6CDhE5G",
 	    "ches \0us \0from \0a\0bove.\n\0 \0");
-      Play("qFEFhG4EqD",
+      Play("5qFEFhG6EqD",
 	    " \0 \0 \0 \0He'll \0smack \0");
-      Play("CBCDhE3G",
+      Play("6C5B6CDhE5G",
 	    "you \0with \0out \0a \0glove.\n\0 \0");
-      Play("qFEFhG4BqC",
+      Play("5qFEFhGB6qC",
 	    " \0 \0 \0 \0Our \0world \0");
-      Play("DhCeDChB3G",
+      Play("6DhCeDC5hBG",
 	    "is\0n't \0al\0ways \0nice.\n\0 \0");
-      Play("qFEFhG");
+      Play("5qFEFhG");
     }
   catch
     PutExcept;
   '\n';
-  Snd(0);
+  Snd;
 }
 
 Song;
diff --git a/Demo/Snd/WaterFowl.HC b/Demo/Snd/WaterFowl.HC
index efcdaa3..d968a5f 100644
Binary files a/Demo/Snd/WaterFowl.HC and b/Demo/Snd/WaterFowl.HC differ
diff --git a/Demo/Templates/Game1.HC b/Demo/Templates/Game1.HC
index df88518..eda3208 100644
--- a/Demo/Templates/Game1.HC
+++ b/Demo/Templates/Game1.HC
@@ -22,7 +22,7 @@ U0 SongTask(I64)
   Fs->task_end_cb=&SndTaskEndCB;
   MusicSettingsRst;
   while (TRUE) {
-    Play("ABC");
+    Play("4AB5C");
   }
 }
 
diff --git a/Demo/Templates/Registry1.HC b/Demo/Templates/Registry1.HC
index 2db820e..4557274 100644
--- a/Demo/Templates/Registry1.HC
+++ b/Demo/Templates/Registry1.HC
@@ -1,10 +1,10 @@
-RegSetDftEntry("MyCompany/MyApp","F64 best_score=9999;\n");
-RegExeBranch("MyCompany/MyApp");
+RegDft("MyCompany/MyApp","F64 best_score=9999;\n");
+RegExe("MyCompany/MyApp");
 
 U0 Main()
 {
   GetChar;
-  RegWriteBranch("MyCompany/MyApp","F64 best_score=%5.4f;\n",best_score);
+  RegWrite("MyCompany/MyApp","F64 best_score=%5.4f;\n",best_score);
 }
 
 Main;
diff --git a/Demo/ToHtmlToTXTDemo/DemoInPage.DD b/Demo/ToHtmlToTXTDemo/DemoInPage.DD
index 4e63d3b..ec2c15f 100644
--- a/Demo/ToHtmlToTXTDemo/DemoInPage.DD
+++ b/Demo/ToHtmlToTXTDemo/DemoInPage.DD
@@ -1,6 +1,8 @@
 $WW,1$$FG,5$$TX+CX,"The Temple Operating System"$$FG,0$
 $FG,4$
-$LK,"Download Operating System",A="FI:~/Web/DownloadOS.DD"$		$LK,"App Store",A="FI:~/Web/AppStore.DD"$
+$LK,"Download Operating System",A="FI:~/Web/DownloadOS.DD"$		$LK,"App Store",A="FI:~/Web/AppStore/AppStore.DD"$
+
+$FG,4$$TX,"Terry's Linux Bash Scripts for QEMU, VMware and VirtualBox",HTML="http://www.templeos.org/Wb/Home/Sup1/Sup1Bin"$
 
 $LK,"Screen Shots",A="FI:~/Web/ScrnShots.DD"$				$LK,"Instructional Videos",A="FI:~/Web/TOSVideos.DD"$
 
@@ -12,10 +14,12 @@ $LK,"Source Code By File",A="FF:~/Web/LineRep.DD,KStart16.HC"$			$TX,"Source Cod
 
 $TX,"Source Code By Sym",HTML="http://www.templeos.org/Wb/Home/Web/SymsAlpha.html"$			$TX,"Source Code By Address",HTML="http://www.templeos.org/Wb/Home/Web/SymsAddress.html"$
 	
-$LK,"Change Log",A="FI:::/Doc/ChangeLog.DD"$				$LK,"History of TempleOS",A="FI:~/Web/History.DD"$
+$LK,"TempleOS Credits",A="FI:::/Doc/Credits.DD"$			$LK,"History of TempleOS",A="FI:~/Web/History.DD"$
 
-$LK,"TempleOS Credits",A="FI:::/Doc/Credits.DD"$			$LK,"Terry Davis",A="FI:~/Web/TAD/TAD.DD"$	$LK,"Dianna Cowern",A="FI:~/Web/DLC/DLC.DD"$
+$LK,"Why 640x480?",A="FI:::/Home/Web/640x480.DD"$				$LK,"Dianna Cowern",A="FI:~/Web/DLC/DLC.DD"$
 $FG$
+$LK,"Change Log",A="FI:::/Doc/ChangeLog.DD"$				$LK,"Terry Davis",A="FI:~/Web/TAD/TAD.DD"$
+
 The Brits are moving to $TX,"ban \"hacking tools\"",HTML="http://www.theregister.co.uk/2008/01/02/hacker_toll_ban_guidance"$.  Take my $LK,"unassembler",A="MN:Ui"$ from my cold dead hands.  NRA is for guns; IRA is for computers.
 
 $HC,""$
@@ -24,7 +28,7 @@ TempleOS is a free, public domain, open source, $FG,4$$TX,"x86_64",HTML="http://
 
 The CIA encourages code obsfucation.  They make it more complicated than necessary.  TempleOS is, literally, more simple than necessary.  It is obnoxiously simple... to the point it hurts. 
 
-This $TX,"\"Hello World\" joke",HTML="http://www.infiltec.com/j-h-wrld.htm"$, the $TX,"BMP file format",HTML="http://en.wikipedia.org/wiki/BMP_file_format"$ and the $TX,"WAV file format",HTML="http://en.wikipedia.org/wiki/WAV"$ show that the industry is really screwed-up!  That's what TempleOS fixes.  I capped the line-of-code count at 100,000 and God said it must be perfect, so it will never be an ugly monstrocity.  It is currently $TX,"81,304",D="DD_TEMPLEOS_LOC_OFFICIAL"$ lines of unblemished code.  Backward compatibility is not promised.
+This $TX,"\"Hello World\" joke",HTML="http://www.infiltec.com/j-h-wrld.htm"$, the $TX,"BMP file format",HTML="http://en.wikipedia.org/wiki/BMP_file_format"$ and the $TX,"WAV file format",HTML="http://en.wikipedia.org/wiki/WAV"$ show that the industry is really screwed-up!  That's what TempleOS fixes.  I capped the line-of-code count at 100,000 and God said it must be perfect, so it will never be an ugly monstrocity.  It is currently $TX,"81,432",D="DD_TEMPLEOS_LOC_OFFICIAL"$ lines of unblemished code.  Backward compatibility is not promised.
 
 Normally, failure is not an option, but since TempleOS accompanies Windows or Linux, we exclude certain uses.  There is no reason to duplicate browsing, multimedia, desktop publishing, etc.  Linux wants to be a secure, multi-user mainframe.  That's why it has file permissions.  The vision for TempleOS, however, is a modern, 64-bit Commodore 64.  The C64 was a non-networked, home computer mostly used for games.  It trained my generation how to program because it was wide open, completely hackable.  The games were not multimedia works of art, but generated by non-artist.
 
@@ -40,7 +44,7 @@ $HC,""$
 
-I wrote all $LK,"120,646",A="FF:~/Web/LineRep.DD,Kernel.PRJ",D="DD_TEMPLEOS_LOC"$ lines of TempleOS over the last $TX,"13.3",D="DD_TEMPLEOS_AGE"$ years, full-time, including the 64-bit compiler.  It was called, at various times, "$FG,4$$TX,"Hoppy",HTML="http://web.archive.org/web/*/http://www.simstructure.hare.com/*"$$FG$", "$FG,4$$TX,"The J Operating System",HTML="http://wayback.archive.org/web/*/http://www.justrighteous.org/*"$$FG$", "$FG,4$$TX,"LoseThos",HTML="http://web.archive.org/web/*/http://www.losethos.com/*"$$FG$" and "$FG,4$$TX,"SparrowOS",HTML="http://web.archive.org/web/*/http://www.sparrowos.com/*"$$FG$".  Here are my $FG,4$$TX,"college transcripts",HTML="http://www.templeos.org/files/ASU_Transcripts.pdf"$$FG$.  I've been a professional operating system developer since 1990 when I was hired to work on Ticketmaster's VAX OS.
+I wrote all $LK,"121,216",A="FF:~/Web/LineRep.DD,Kernel.PRJ",D="DD_TEMPLEOS_LOC"$ lines of TempleOS over the last $TX,"13.4",D="DD_TEMPLEOS_AGE"$ years, full-time, including the 64-bit compiler.  It was called, at various times, "$FG,4$$TX,"Hoppy",HTML="http://web.archive.org/web/*/http://www.simstructure.hare.com/*"$$FG$", "$FG,4$$TX,"The J Operating System",HTML="http://wayback.archive.org/web/*/http://www.justrighteous.org/*"$$FG$", "$FG,4$$TX,"LoseThos",HTML="http://web.archive.org/web/*/http://www.losethos.com/*"$$FG$" and "$FG,4$$TX,"SparrowOS",HTML="http://web.archive.org/web/*/http://www.sparrowos.com/*"$$FG$".  Here are my $FG,4$$TX,"college transcripts",HTML="http://www.templeos.org/files/ASU_Transcripts.pdf"$$FG$.  I've been a professional operating system developer since 1990 when I was hired to work on Ticketmaster's VAX OS.
 
 $FG,8$
 * "Commodore 64" is a trademark owned by Polabe Holding NV.
diff --git a/Demo/ToHtmlToTXTDemo/ToHtml.HC b/Demo/ToHtmlToTXTDemo/ToHtml.HC
index e2a28ba..f2f345b 100644
--- a/Demo/ToHtmlToTXTDemo/ToHtml.HC
+++ b/Demo/ToHtmlToTXTDemo/ToHtml.HC
@@ -184,7 +184,7 @@ public CDoc *Doc2Html(CDoc *doc_in,U8 *html_header=NULL,U8 *body_header=NULL,
 	  "\n"
 	  "\n"
-	  "\n";
+	  "\n";
   if (!body_header) body_header=
 	  "\n"
 	  "
\n";
@@ -239,8 +239,8 @@ public CDoc *Doc2Html(CDoc *doc_in,U8 *html_header=NULL,U8 *body_header=NULL,
 
       if (no_bwd)
 	while (colx)
-	  HtmlPutS(doc_out,doc_e->settings.final_u32_attr,&old_u32_attr,FALSE,
-		" ",&col,style_bitmap);
+	  HtmlPutS(doc_out,doc_e->settings.final_u32_attr&~DOCET_UNDERLINE,
+		&old_u32_attr,TRUE," ",&col,style_bitmap);
 
       link_st=NULL;
       if (doc_e->de_flags&DOCEF_HTML_LINK)
@@ -280,7 +280,7 @@ public CDoc *Doc2Html(CDoc *doc_in,U8 *html_header=NULL,U8 *body_header=NULL,
 	    Free(hl);
 	  } else
 	    HtmlPutS(doc_out,doc_e->settings.final_u32_attr,
-		  &old_u32_attr,doc_e->tag,&col,style_bitmap);
+		  &old_u32_attr,TRUE,doc_e->tag,&col,style_bitmap);
 	  break;
 	case DOCT_TAB:
 	  HtmlPutS(doc_out,doc_e->settings.final_u32_attr,&old_u32_attr,TRUE,
diff --git a/Demo/WebLogDemo/WebLogRep.HC b/Demo/WebLogDemo/WebLogRep.HC
index 1439762..0f9b049 100644
--- a/Demo/WebLogDemo/WebLogRep.HC
+++ b/Demo/WebLogDemo/WebLogRep.HC
@@ -174,7 +174,7 @@ Bool IsBlocked(BlockedStruct *head,U32 ip_num)
   return FALSE;
 }
 
-U0 BlockIPNums(LogStruct *head)
+U0 BlockIPNuip(LogStruct *head)
 {
   BlockedStruct blocked_head;
   LogStruct *tmplg=head->next,*tmplg1;
@@ -197,7 +197,7 @@ U0 BlockIPNums(LogStruct *head)
     tmplg=tmplg->next;
   }
 
-  //pass 2: removed blocked ip_nums
+  //pass 2: removed blocked ip_nuip
   tmplg=head->next;
   while (tmplg!=head) {
     tmplg1=tmplg->next;
@@ -241,7 +241,7 @@ Bool IPNumTreeAdd(LogStruct **_head,LogStruct *tmplg)
   LogStruct *head;
   if (UnusedStk<0x200) {
     PrintErr("Stk Overflow");
-    ThrowBreak;
+    throw;
   }
   if (head=*_head) {
     if (tmplg->ip_num==head->ip_num)
@@ -264,7 +264,7 @@ U0 LinkTreeAdd(LinkStruct **_root,LogStruct *tmplg)
   LinkStruct *root,*tmplk;
   if (UnusedStk<0x200) {
     PrintErr("Stk Overflow");
-    ThrowBreak;
+    throw;
   }
   if (root=*_root) {
     if (!(i=StrCmp(tmplg->link,root->link)))
@@ -287,7 +287,7 @@ U0 FileTreeAdd(LinkStruct **_root,LogStruct *tmplg)
   LinkStruct *root,*tmplk;
   if (UnusedStk<0x200) {
     PrintErr("Stk Overflow");
-    ThrowBreak;
+    throw;
   }
   if (root=*_root) {
     if (!(i=StrCmp(tmplg->file,root->file)))
@@ -503,7 +503,7 @@ U0 WebLogRep(U8 *mask,U8 *output_filename)
   head=PrsLogFiles(mask,&start,&end);
   start=GetDate("Start(%D):",start);
   end  =GetDate("End  (%D):",end);
-  BlockIPNums(head);
+  BlockIPNuip(head);
 
   DocClear;
   "$$WW,0$$";
diff --git a/Doc/Boot.DD b/Doc/Boot.DD
index d174290..0e170aa 100644
Binary files a/Doc/Boot.DD and b/Doc/Boot.DD differ
diff --git a/Doc/ChangeLog.DD b/Doc/ChangeLog.DD
index 181551d..b7bbcf9 100644
--- a/Doc/ChangeLog.DD
+++ b/Doc/ChangeLog.DD
@@ -2,11 +2,113 @@ $WW,1$$FG,5$$TX+CX,"Change Log"$$FG$
 
 Use $LK,"R",A="MN:R"$() to rename if I change a label.
 
-$IV,1$----11/21/16 01:46:12----$IV,0$
+$IV,1$----01/10/17 15:29:10----$IV,0$
+* Added $LK,"Let2Let",A="MN:Let2Let"$().
+
+$IV,1$----01/10/17 14:27:58----$IV,0$
+* Made $LK,"DocPut",A="MN:DocPut"$() use parent task's doc if input filter task.
+* Added $LK,"Once",A="MN:Once"$(), $LK,"AOnce",A="MN:AOnce"$(), $LK,"OnceFlush",A="MN:OnceFlush"$(), $LK,"AOnceFlush",A="MN:AOnceFlush"$(), $LK,"OnceDrv",A="MN:OnceDrv"$(), $LK,"AOnceDrv",A="MN:AOnceDrv"$() and $LK,"OnceExe",A="MN:OnceExe"$().
+* $LK,"R",A="MN:R"$("DoOnce","Once");
+* Added $LK,"RegAppend",A="MN:RegAppend"$() and $LK,"RegCnt",A="MN:RegCnt"$();
+* $LK,"R",A="MN:R"$("RegSetDftEntry()","$LK,"RegDft",A="MN:RegDft"$()");
+* $LK,"R",A="MN:R"$("RegExeBranch()","$LK,"RegExe",A="MN:RegExe"$()");
+* $LK,"R",A="MN:R"$("RegWriteBranch()","$LK,"RegWrite",A="MN:RegWrite"$()");
+
+$IV,1$----01/10/17 11:45:41----$IV,0$
+* Added $LK,"::/Adam/InsReg.HC"$ with $LK,"InsReg",A="MN:InsReg"$(), $LK,"InsRereg",A="MN:InsRereg"$() and $LK,"InsUnreg",A="MN:InsUnreg"$().
+* Added $LK,"::/Adam/Host.HC"$ with $LK,"HostChgDsk",A="MN:HostChgDsk"$().
+* Added $LK,"::/Adam/Opt/Utils/TOS.HC"$ with $LK,"TOSStdIns",A="MN:TOSStdIns"$().
+* Added cmd line args for partition % to $LK,"PrtDsk",A="MN:PrtDsk"$().
+
+$IV,1$----01/09/17 21:48:34----$IV,0$
+* $LK,"R",A="MN:R"$("a1","arg1");
+* $LK,"R",A="MN:R"$("a2","arg2");
+* $LK,"R",A="MN:R"$("r","res");
+
+$IV,1$----01/09/17 02:30:59----$IV,0$
+* Improved compiler $LK,"ICSlashOp",A="MN:ICSlashOp"$().
+* Added $LK,"Panic",A="MN:Panic"$().
+* Made it possible to mount just one partition.
+* Fixed creation of RedSea ISOs.
+* Organized $LK,"::/PersonalMenu.DD"$.
+* Moved AfterEgypt to the supplemental disk.
+
+$IV,1$----01/06/17 06:07:19----$IV,0$
+* Fixed $LK,"ChgDsk",A="MN:ChgDsk"$().
+* Improved $LK,"::/Misc/OSTestSuite.HC"$.
+
+$IV,1$----01/05/17 04:53:21----$IV,0$
+* No longer support ASCII#12,  CH_FORM_FEED.
+* Fixed $LK,"sys_var_init_flag",A="MN:sys_var_init_flag"$.
+* $LK,"GRScrnCaptureRead",A="MN:GRScrnCaptureRead"$().
+
+$IV,1$----01/04/17 18:06:14----$IV,0$
+* Added $LK,"::/Demo/AcctExample/TOSPolicies.DD"$.
+* $LK,"R",A="MN:R"$("U0 pad;",";"); for align #asserts.
+* Got rid of $FG,4$mouse.throttle$FG$. 
+* $LK,"R",A="MN:R"$("Button","Bttn");
+* $LK,"R",A="MN:R"$("Handler","Hndlr");
+* $LK,"R",A="MN:R"$("InputPointer","Mouse");
+* Improved $LK,"MemRep",A="MN:MemRep"$().
+* Changed $LK,"::/Adam/WallPaper.HC"$.
+
+$IV,1$----01/03/17 12:23:49----$IV,0$
+* $LK,"R",A="MN:R"$("chars_cmp...","char_bmp...");
+* Added chk for $LK,"Profanity",A="FF:::/Demo/AcctExample/TOSMisc.HC,Profanity"$.
+* Improved $LK,"TOSRegen",A="FF:::/Demo/AcctExample/TOSDistro.HC,TOSRegen"$.
+* Removed $TX,"TempleOSBooks1.ISO",HTML="http://www.templeos.org/files/TempleOSBooks1.ISO"$ and $TX,"TempleOSBooks2.ISO",HTML="http://www.templeos.org/files/TempleOSBooks2.ISO"$ out of $TX,"TempleOSSup1.ISO",HTML="http://www.templeos.org/TempleOSSup1.ISO"$.
+
+$IV,1$----01/01/17 17:16:16----$IV,0$
+* $BK,1$TempleOS version 5.00 Released$BK,0$
+* Added $LK,"Collapse",A="MN:Collapse"$().
+* Added $LK,"CursorRem",A="MN:CursorRem"$().
+
+$IV,1$----12/31/16 07:21:20----$IV,0$
+* $LK,"R",A="MN:R"$("SYS_SEMA_...","SEMA_...");
+* $LK,"R",A="MN:R"$("SYSf_CTRL_ALT_...","CTRL_ALT_...");
+* $LK,"R",A="MN:R"$("ThrowBreak()","$LK,"Break",A="MN:Break"$()");
+* Added $LK,"MemPageRep",A="MN:MemPageRep"$().
+
+$IV,1$----12/30/16 23:42:20----$IV,0$
+* $LK,"R",A="MN:R"$("Pages512","Pags");
+* Overhauled $LK,"::/Kernel/Mem/PageTables.HC"$.
+* $LK,"R",A="MN:R"$("BusyWait()","$LK,"Busy",A="MN:Busy"$()");
+
+$IV,1$----12/29/16 10:21:44----$IV,0$
+* Changed $LK,"Snd",A="MN:Snd"$() from $FG,2$freq$FG$ to a $FG,2$I8$FG$ val called an $FG,2$ona$FG$.
+* Fixed err in music octaves.
+* To convert songs, download Supplemental#1 ISO from the AppStore on http://www.templeos.org and run Sup1/Sup1Utils/CvtSong500.HC.
+
+$IV,1$----12/22/16 16:18:32----$IV,0$
+* $LK,"R",A="MN:R"$("CSrvCmd","$LK,"CJob",A="MN:CJob"$");
+* $LK,"R",A="MN:R"$("CSrvCtrl","$LK,"CJobCtrl",A="MN:CJobCtrl"$");
+
+$IV,1$----12/03/16 13:19:58----$IV,0$
+* $LK,"R",A="MN:R"$("SpriteMat3B()","$LK,"Sprite3Mat4x4B",A="MN:Sprite3Mat4x4B"$()");
+* $LK,"R",A="MN:R"$("SpriteX3B()","$LK,"Sprite3XB",A="MN:Sprite3XB"$()");
+* $LK,"R",A="MN:R"$("SpriteY3B()","$LK,"Sprite3YB",A="MN:Sprite3YB"$()");
+* $LK,"R",A="MN:R"$("SpriteZ3B()","$LK,"Sprite3ZB",A="MN:Sprite3ZB"$()");
+* Improved $LK,"::/Demo/Games/Talons.HC"$.
+
+$IV,1$----12/03/16 10:16:26----$IV,0$
+* Changed $LK,"__CMD_LINE__",A="MN:__CMD_LINE__"$.
+* Added $LK,"CProgress",A="MN:CProgress"$.tf.
+* Added $LK,"sys_staff_mode_flag",A="MN:sys_staff_mode_flag"$.
+* $LK,"R",A="MN:R"$("except_caller","except_callers");
+
+$IV,1$----11/30/16 22:44:35----$IV,0$
+* Added $LK,"SpriteTransform",A="MN:SpriteTransform"$().
+
+$IV,1$----11/28/16 07:11:41----$IV,0$
+* Improved $LK,"::/Apps/Titanium/Titanium.HC"$.
+
+$IV,1$----11/26/16 22:43:51----$IV,0$
+* Added solar storms to $LK,"::/Apps/X-Caliber/X-Caliber.HC"$.
+* $LK,"R",A="MN:R"$("TimeOut","Titanium");
 
 $IV,1$----11/20/16 19:46:43----$IV,0$
 * $BK,1$TempleOS version 4.13 Released$BK,0$
-* Improved $LK,"::/Apps/TimeOut/TimeOut.HC"$.
+* Improved $LK,"::/Apps/Titanium/Titanium.HC"$.
 * Improved $LK,"::/Apps/X-Caliber/X-Caliber.HC"$.
 
 $IV,1$----11/19/16 08:19:51----$IV,0$
@@ -139,7 +241,7 @@ $IV,1$----07/08/16 14:30:19----$IV,0$
 
 $IV,1$----07/07/16 07:21:03----$IV,0$
 * $LK,"DocRead",A="MN:DocRead"$() changes to file's dir so relative filenames work.
-* Added AppStore to website with Supplemental #1 ISO for download.
+* Added AppStore to website with Supplemental#1 ISO for download.
 
 $IV,1$----07/06/16 23:45:30----$IV,0$
 * Fixed multicore bug in $LK,"Sprite3",A="MN:Sprite3"$().
@@ -201,228 +303,3 @@ $IV,1$----06/16/16 19:49:39----$IV,0$
 $IV,1$----06/02/16 03:20:56----$IV,0$
 * $BK,1$TempleOS version 4.07 Released$BK,0$
 * Added claws to $LK,"::/Demo/Games/Talons.HC"$.
-
-$IV,1$----05/30/16 21:16:44----$IV,0$
-* Added waterfall to $LK,"::/Demo/Games/RawHide.HC"$.
-
-$IV,1$----05/23/16 01:30:28----$IV,0$
-* Added $LK,"RedSeaISO",A="MN:RedSeaISO"$().
-* $LK,"R",A="MN:R"$("ISOFileCreate","$LK,"ISO9660ISO",A="MN:ISO9660ISO"$");
-
-$IV,1$----05/19/16 02:16:09----$IV,0$
-* Added $LK,"BDT_ISO_FILE_WRITE",A="MN:BDT_ISO_FILE_WRITE"$.
-
-$IV,1$----05/17/16 07:16:38----$IV,0$
-* Worked on compiler $LK,"CICArg",A="MN:CICArg"$.a1_type_pointed_to.
-
-$IV,1$----05/13/16 14:35:14----$IV,0$
-* Improved $LK,"::/Demo/Games/Wenceslas.HC"$.
-
-$IV,1$----05/12/16 05:18:56----$IV,0$
-* Added $LK,"CCF_CMD_LINE",A="MN:CCF_CMD_LINE"$
-* Replaced $FG,4$__DEPTH__$FG$ with $LK,"__CMD_LINE__",A="MN:__CMD_LINE__"$.
-
-$IV,1$----05/10/16 06:23:05----$IV,0$
-* Compiler bug fixes and optimizations.
-
-$IV,1$----05/07/16 08:55:59----$IV,0$
-* $BK,1$TempleOS version 4.06 Released$BK,0$
-
-$IV,1$----05/03/16 19:26:45----$IV,0$
-* Made $LK,"FunSegFind",A="MN:FunSegFind"$() search all hash tables when $LK,"IsDbgMode",A="MN:IsDbgMode"$.
-* Added missiles to $LK,"::/Apps/X-Caliber/X-Caliber.HC"$.
-* Fixed bug in $LK,"D3Unit",A="MN:D3Unit"$().
-
-$IV,1$----05/01/16 15:12:31----$IV,0$
-* $LK,"R",A="MN:R"$("Identical","Ident");
-* $LK,"R",A="MN:R"$("Previous","Prev");
-* $LK,"R",A="MN:R"$("Result","Res");
-* Started assembler MMX/SSE.  Not done.
-* Changed a couple Bible related things.
-
-$IV,1$----04/26/16 01:18:57----$IV,0$
-* $LK,"R",A="MN:R"$("MapDrv","$LK,"DrvMap",A="MN:DrvMap"$");
-
-$IV,1$----04/25/16 13:17:49----$IV,0$
-* Changed args in $LK,"CAdd",A="MN:CAdd"$(), $LK,"CSub",A="MN:CSub"$(), $LK,"CMul",A="MN:CMul"$(), $LK,"CDiv",A="MN:CDiv"$() and $LK,"CPoly",A="MN:CPoly"$().
-* Changed args in $LK,"D3Add",A="MN:D3Add"$(), $LK,"D3Sub",A="MN:D3Sub"$(), $LK,"D3Mul",A="MN:D3Mul"$(), $LK,"D3Div",A="MN:D3Div"$() and $LK,"D3Cross",A="MN:D3Cross"$().
-
-$IV,1$----04/25/16 03:42:30----$IV,0$
-* $LK,"R",A="MN:R"$("TK_INT","TK_I64");
-* Added $LK,"::/Demo/Templates/Game1.HC"$.
-* Added $LK,"::/Demo/Templates/Lex1.HC"$.
-* Added $LK,"::/Demo/Templates/MultiCore1.HC"$.
-* Added $LK,"::/Demo/Templates/ODE1.HC"$.
-* Added $LK,"::/Demo/Templates/Registry1.HC"$.
-* Added $LK,"::/Demo/Templates/Util1.HC"$.
-* Added $LK,"::/Demo/Templates/Util2.HC"$.
-
-$IV,1$----04/23/16 13:20:24----$IV,0$
-* Got rid of low protected memory area that caught NULL deref.
-* Got rid of 4K page tables by making $LK,"text",A="MN:text"$.vga_alias.  All pages are 2Meg size.
-
-$IV,1$----04/15/16 13:39:25----$IV,0$
-* Fixed bug in $LK,"EdCodeTools",A="MN:EdCodeTools"$().
-* Fixed double $FG,2$ASCII#5$FG$ cursor bug.
-
-$IV,1$----04/01/16 14:59:49----$IV,0$
-* Changed $LK,"SpriteInterpolate",A="MN:SpriteInterpolate"$() args.
-* $LK,"R",A="MN:R"$("Index","Idx");
-
-$IV,1$----03/31/16 11:20:13----$IV,0$
-* Changed $LK,"::/Adam/WallPaper.HC"$.
-* Got rid of $FG,4$CTask.time_slice_start$FG$ and $FG,4$CTask.total_time$FG$.
-
-$IV,1$----03/29/16 05:53:45----$IV,0$
-* $BK,1$TempleOS version 4.05 Released$BK,0$
-
-$IV,1$----03/24/16 16:26:50----$IV,0$
-* Added $LK,"::/Demo/Games/CharDemo.HC"$.
-
-$IV,1$----03/22/16 16:58:25----$IV,0$
-* Added $LK,"DOCEF_DFT_RAW_TYPE",A="MN:DOCEF_DFT_RAW_TYPE"$.  Modified $LK,"DocForm",A="MN:DocForm"$() to look-up raw type automatically from the compiler's class information.
-* Added $LK,"DOCEF_DFT_LEN",A="MN:DOCEF_DFT_LEN"$.  Modified $LK,"DocForm",A="MN:DocForm"$() to look-up string length automatically from the compiler's class information.
-
-$IV,1$----03/21/16 07:28:35----$IV,0$
-* Added $LK,"OCF_ALIAS",A="MN:OCF_ALIAS"$.
-* $LK,"R",A="MN:R"$("Integer","Int");
-* Added aliases to $LK,"::/Compiler/OpCodes.DD"$.
-
-$IV,1$----03/21/16 02:12:08----$IV,0$
-* Added $LK,"DOCT_MARKER",A="MN:DOCT_MARKER"$.
-* Added $LK,"CICType",A="MN:CICType"$.
-* Optimized $LK,"MDG_MASK",A="MN:MDG_MASK"$ and $LK,"RTG_MASK",A="MN:RTG_MASK"$ values.
-
-$IV,1$----03/19/16 09:15:11----$IV,0$
-* Fixed bug in $LK,"EdFindReplace",A="MN:EdFindReplace"$().
-
-$IV,1$----03/19/16 06:22:36----$IV,0$
-* Fixed $LK,"UAsm",A="MN:Ui"$() bug.
-* Got rids of $FG,4$ICF_A1_FIRST$FG$.
-* Cleaned-up compiler $LK,"REGG_CLOBBERED",A="MN:REGG_CLOBBERED"$ and $LK,"REGG_STK_TMP",A="MN:REGG_STK_TMP"$.
-
-$IV,1$----03/18/16 09:53:33----$IV,0$
-* Made $LK,"SpriteEd",A="MN:SpriteEd"$() sel foreground elem.
-
-$IV,1$----03/14/16 05:57:27----$IV,0$
-* $BK,1$TempleOS version 4.04 Released$BK,0$
-* Changed $FG,2$nobound_switch$FG$ so it uses [].
-* Changed $LK,"KbdMouseCmdAck",A="MN:KbdMouseCmdAck"$().
-
-$IV,1$----02/19/16 18:48:51----$IV,0$
-* Fixed bug in $LK,"::/Demo/ToHtmlToTXTDemo/ToHtml.HC"$.
-
-$IV,1$----02/15/16 23:31:15----$IV,0$
-* Improved $LK,"::/Demo/Games/RawHide.HC"$.
-
-$IV,1$----02/13/16 17:02:34----$IV,0$
-* Added $FG,2$$$CL+H$$$FG$ to clear all, including hold entries.
-
-$IV,1$----02/10/16 08:56:49----$IV,0$
-* Improved $FG,2$$FG$ prompting.
-
-$IV,1$----02/09/16 23:54:23----$IV,0$
-* Created $LK,"DOCEF_LEN",A="MN:DOCEF_LEN"$ with arg.  $LK,"DOCT_DATA",A="MN:DOCT_DATA"$ has default 64 len.
-
-$IV,1$----02/09/16 09:34:32----$IV,0$
-* $BK,1$TempleOS version 4.03 Released$BK,0$
-* Added $LK,"DOCEF_REMALLOC_DATA",A="MN:DOCEF_REMALLOC_DATA"$.
-
-$IV,1$----02/05/16 23:00:53----$IV,0$
-* Moved $LK,"::/Demo/ToHtmlToTXTDemo/ToHtml.HC"$.
-* Added $LK,"::/Demo/AcctExample/TOSToHtml.HC"$.
-
-$IV,1$----02/03/16 18:47:00----$IV,0$
-* Refactored $LK,"SpriteMainEd",A="MN:SpriteMainEd"$().
-* Added tag edit to main sprite edit menu.
-
-$IV,1$----02/01/16 21:01:15----$IV,0$
-* Cleaned-up $LK,"TaskKillDying",A="MN:TaskKillDying"$().
-* Made multicore more professional.
-
-$IV,1$----02/01/16 06:02:41----$IV,0$
-* Moved Sup1CodeScraps/Mem/Mem2Meg.HC out of kernel.
-
-$IV,1$----01/31/16 04:07:50----$IV,0$
-* Fixed scheduler, so doesn't idle so high.
-* Fixed many memory leaks.
-* Changed args to  $LK,"Mem512Alloc",A="MN:Mem512Alloc"$(), $LK,"Mem512Free",A="MN:Mem512Free"$(), and $LK,"Mem512TaskAlloc",A="MN:Mem512TaskAlloc"$().
-
-$IV,1$----01/30/16 11:14:29----$IV,0$
-* Changed arg in $LK,"DocEntryNewTag",A="MN:DocEntryNewTag"$().
-* Added $LK,"DocEntryNewBase",A="MN:DocEntryNewBase"$().
-
-$IV,1$----01/29/16 02:44:38----$IV,0$
-* Overhauled $LK,"DocSave",A="MN:DocSave"$() and $LK,"DocRecalc",A="MN:DocRecalc"$().
-
-$IV,1$----01/28/16 20:45:35----$IV,0$
-* Fixed bug in locate sprite elem code.
-* Overhauled $FG,2$$FG$ sprite editor.
-* Added $LK,"DocHighlightCursor",A="MN:DocHighlightCursor"$() and $LK,"DOCf_DONT_HIGHLIGHT_CURSOR",A="MN:DOCf_DONT_HIGHLIGHT_CURSOR"$.
-
-$IV,1$----01/28/16 14:05:52----$IV,0$
-* Fixed bug in $LK,"AutoComplete",A="MN:AutoComplete"$() init.
-* Added $LK,"HeapLogSizeRep",A="MN:HeapLogSizeRep"$().
-
-$IV,1$----01/27/16 20:41:54----$IV,0$
-* $BK,1$TempleOS version 4.02 Released$BK,0$
-
-$IV,1$----01/27/16 06:40:46----$IV,0$
-* Added $FG,2$$FG$ macro to $LK,"TestSuite",A="FI:::/Misc/OSTestSuite.HC"$.
-* Added compiler err for $FG,2$break;$FG$ in a subswitch preface.
-
-$IV,1$----01/27/16 04:14:08----$IV,0$
-* Added $LK,"::/Demo/ToHtmlToTXTDemo/HtmlGen.HC"$ and $LK,"::/Demo/ToHtmlToTXTDemo/TXTGen.HC"$.
-* Now, $LK,"Plain",A="MN:Plain"$() doesn't save with $LK,"CH_CURSOR",A="MN:CH_CURSOR"$.
-* $LK,"R",A="MN:R"$("DOCF_PLAIN_TEXT_WITH_TABS","DOCF_PLAIN_TEXT_TABS"); 
-* Change $LK,"Document Links",A="FF:::/Adam/DolDoc/DocLink.HC,AD"$ "DF:word" to "DN:word".
-* Merged documentation into $LK,"::/Doc/FAQ.DD"$.
-
-$IV,1$----01/26/16 17:51:45----$IV,0$
-* $LK,"R",A="MN:R"$("PSect","FunSeg"); 
-* $LK,"R",A="MN:R"$("Equal","Equ");
-* $LK,"R",A="MN:R"$("Binary","Bin");
-
-$IV,1$----01/26/16 14:09:45----$IV,0$
-* Changed $LK,"DirContextNew",A="MN:DirContextNew"$(), $LK,"FilesFindMatch",A="MN:FilesFindMatch"$() and $LK,"FilesFind",A="MN:FilesFind"$() to use full_name.
-* $LK,"R",A="MN:R"$("Statement","Stmt");
-
-$IV,1$----01/18/16 15:19:43----$IV,0$
-* Added except arg to $LK,"Let2BlkDev",A="MN:Let2BlkDev"$(), $LK,"BlkDevChk",A="MN:BlkDevChk"$(), $LK,"Let2Drv",A="MN:Let2Drv"$(), $LK,"DrvChk",A="MN:DrvChk"$() and $LK,"DrvIsWritable",A="MN:DrvIsWritable"$().
-
-$IV,1$----01/16/16 08:20:00----$IV,0$
-* Added $LK,"DrvTextAttrGet",A="MN:DrvTextAttrGet"$().
-* Removed $FG,4$DrvTextAttrSet$FG$().
-
-$IV,1$----01/15/16 00:47:31----$IV,0$
-* $LK,"KeyboardPlug-Ins '9','0'",A="FF:::/HomeKeyPlugIns.HC,'9'"$.
-* $LK,"R",A="MN:R"$("$$$$LM,5$$$$","$$$$ID,5$$$$");
-
-$IV,1$----01/15/16 00:12:02----$IV,0$
-* Added $LK,"Let2BlkDevType",A="MN:Let2BlkDevType"$().
-* Added $LK,"WIF_SELF_FOCUS",A="MN:WIF_SELF_FOCUS"$ to $LK,"::/Misc/OSInstall.HC"$.
-* Added $FG,2$%$$F$FG$ to $LK,"Print(\"\") Fmt Strings",A="FI:::/Doc/Print.DD"$.
-
-$IV,1$----01/12/16 19:17:12----$IV,0$
-* Overhauled $LK,"Mount",A="MN:Mount"$() and $LK,"::/Kernel/KCfg.HC"$.
-
-$IV,1$----01/12/16 10:06:18----$IV,0$
-* $BK,1$TempleOS version 4.01 Released$BK,0$
-* Standardized drive letters.  Your $LK,"In",A="MN:In"$() config scripts for compiling the kernel with $LK,"BootHDIns",A="MN:BootHDIns"$() must be changed.
-* Added $LK,"CCF_QUESTION_HELP",A="MN:CCF_QUESTION_HELP"$.
-
-$IV,1$----01/11/16 00:04:38----$IV,0$
-* $LK,"R",A="MN:R"$("PAGE_SIZE","MEM_PAGE_SIZE"); etc.
-* $LK,"R",A="MN:R"$("DFT_STK","MEM_DFT_STK"); etc.
-* Added $LK,"::/Demo/MemDemo.HC"$.
-
-$IV,1$----01/08/16 17:04:58----$IV,0$
-* Added $LK,"FUF_RISKY",A="MN:FUF_RISKY"$ to $LK,"DocOpt",A="MN:DocOpt"$().
-* Fixed $LK,"::/Doc/CompilerOverview.DD"$.
-
-$IV,1$----01/06/16 11:01:57----$IV,0$
-* Got rid of $FG,4$DOCEF_HARD_SKIP$FG$.
-
-$IV,1$----01/03/16 17:15:41----$IV,0$
-* Updated $LK,"::/Misc/PCIDevices.DD"$.
-* Added null case option.  Next higher int with "$FG,2$case:$FG$" in $FG,2$switch$FG$ stmts.  See  $LK,"::/Demo/NullCase.HC"$.
diff --git a/Doc/Charter.DD b/Doc/Charter.DD
index 3426e47..81b5d65 100644
--- a/Doc/Charter.DD
+++ b/Doc/Charter.DD
@@ -21,7 +21,7 @@ $ID,-5$
 
 * God said $FG,2$640x480 16 color$FG$ graphics is a covenant like circumcision.  Children will do offerings.  Think of 16 colors like the Simpson's cartoons.  In the future, even if one GPU were universal, we would keep 640x480 16 color and not use GPU acceleration.  Graphics operations should be transparent, not hidden in a GPU.
 
-* God said to use a single audio voice -- a single frequency with waveforms and, maybe, amplitude envelope. 
+* God said to use a single-voice 8-bit signed MIDI-like sample for sound.  God does not want death screams, perhaps, because God has PTSD or soldiers have PTSD.  (Imagine wounded on battlefields.) 
 
 * God said His temple must be perfect.  $FG,4$We don't think twice about breaking compatibility.$FG$  God said we do a seven year release cycle.  I say the PC hardware follows a 49 year, jubilee cycle, like broadcast TV upgrades.
 
@@ -31,7 +31,7 @@ $ID,-5$
 
 * Low line count is the highest good, so it is easy to learn the whole thing.  Users should see the light at the end of the tunnel.  One file system, for example, is better than many file systems.
 
-* There is a limit of 100,000 lines of code for all time, not including applications and demos.  $FG,4$Code comments count$FG$, however.  Currently, there are $TX,"81,223",D="DD_TEMPLEOS_LOC_OFFICIAL"$ lines of code.  $FG,4$3rd party libraries are banned$FG$ because they circumvent the intent of this limit.  The vision is a Commodore 64 ROM -- a fixed core API that is the only dependency of applications.  Dependency on components and libraries creates a hell that is no longer blissful.
+* There is a limit of 100,000 lines of code for all time, not including applications and demos.  $FG,4$Code comments count$FG$, however.  Currently, there are $TX,"81,390",D="DD_TEMPLEOS_LOC_OFFICIAL"$ lines of code.  $FG,4$3rd party libraries are banned$FG$ because they circumvent the intent of this limit.  The vision is a Commodore 64 ROM -- a fixed core API that is the only dependency of applications.  Dependency on components and libraries creates a hell that is no longer blissful.
  
 * Minimal abstraction is a goal.  Sheep are fools.  They always respect a design that is more complicated than another.  Any genius can make it complicated.  Like in physics, it takes a supra-genius to make it simple.
 
@@ -39,7 +39,7 @@ $ID,-5$
 
 * All hardware access will be done through x86 IN/OUT instructions, not PCI drivers.  A frame buffer for VGA is an exception.
 
-* One driver for each class of device.  Limited exceptions are allowed.  With divergent device capabilities, it is a nightmare for user applications and what is gained?  A three button mouse is like a leg you cannot put weight on.
+* One driver for each class of device.  Limited exceptions are allowed.  With divergent device capabilities, it is a nightmare for user applications and what is gained?  A three bttn mouse is like a leg you cannot put weight on.
 
 * $FG,2$Ring-0-only$FG$.  Everything runs in kernel mode, including user applications.
 
diff --git a/Doc/Credits.DD b/Doc/Credits.DD
index 4e7527a..43d29bc 100644
--- a/Doc/Credits.DD
+++ b/Doc/Credits.DD
@@ -1,6 +1,6 @@
 $WW,1$$FG,5$$TX+CX,"Credits"$$FG$
 
-I, $FG,2$Terry A. Davis$FG$, wrote all $TX,"119,996",D="DD_TEMPLEOS_LOC"$ lines of TempleOS over the past $TX,"13.2",D="DD_TEMPLEOS_AGE"$ years (full-time).  It can run on some bare metal 64-bit PC's from about 2005-2010 with no layering, libraries, tools, modules or anything from other sources.  Otherwise, you run it in a virtual machine, like $FG,2$VMware$FG$, $FG,2$QEMU$FG$ or $FG,2$VirtualBox$FG$.  It is independent and stands alone.  It has no networking, so it certainly doesn't call home.  100% of the src code is including on all distro's, from the kernel to the compiler to the boot loaders!  It is public domain, not GPL.
+I, $FG,2$Terry A. Davis$FG$, wrote all $TX,"119,241",D="DD_TEMPLEOS_LOC"$ lines of TempleOS over the past $TX,"13.4",D="DD_TEMPLEOS_AGE"$ years (full-time).  It can run on some bare metal 64-bit PC's from about 2005-2010 with no layering, libraries, tools, modules or anything from other sources.  Otherwise, you run it in a virtual machine, like $FG,2$VMware$FG$, $FG,2$QEMU$FG$ or $FG,2$VirtualBox$FG$.  It is independent and stands alone.  It has no networking, so it certainly doesn't call home.  100% of the src code is including on all distro's, from the kernel to the compiler to the boot loaders!  It is public domain, not GPL.
 
 *) $LK,"::/Kernel/FontStd.HC"$, is taken from $FG,4$$TX,"FreeDOS",HTML="http://www.freedos.org"$$FG$.  It's public domain.
 
@@ -14,7 +14,7 @@ I, $FG,2$Terry A. Davis$FG$, wrote all $TX,"119,996",D="DD_TEMPLEOS_LOC"$ lines
 
 *) The adaptive-step-size-Runge-Kutta algorithm, $LK,"::/Adam/AMathODE.HC"$, is adapted from the book, $UL,1$Numeric Recipies in C$UL,0$.
 
-*) The mountain, palm trees, sheep and goats in AfterEgypt are from $FG,4$$TX,"http://www.public-domain-photos.com",HTML="http://www.public-domain-photos.com"$$FG$.  The wolf in BlackDiamond is also from there.  I took watermarked photos and converted to 16 color.
+*) The mountain in some games is from $FG,4$$TX,"http://www.public-domain-photos.com",HTML="http://www.public-domain-photos.com"$$FG$.  The wolf in BlackDiamond is also from there.  I took watermarked photos and converted to 16 color.
 
 *) The $FG,2$FAT32$FG$ file system is owned by MicroSoft.
 
@@ -34,7 +34,7 @@ I, $FG,2$Terry A. Davis$FG$, wrote all $TX,"119,996",D="DD_TEMPLEOS_LOC"$ lines
 
 *) Thanks to $FG,4$$TX,"http://www.osdev.org",HTML="http://www.osdev.org"$$FG$ for a couple tips.
 
-*) God told me to stick with 640x480 16 color,  a single audio voice and kept me from zombie-walking into making child windows like $FG,2$Windows$FG$.  Instead, I made one window per task with no child windows.  He also guided my progress, very obviously.
+*) God told me to stick with 640x480 16 color and single-voice 8-bit signed MIDI-like sample for sound.   He kept me from zombie-walking into making child windows like $FG,2$Windows$FG$.  Instead, I made one window per task with no child windows.  He also guided my progress, very obviously.
 
 *) I got $FG,4$$TX,"Webster's Dictionary",HTML="http://www.templeos.org/files/DICTIONARY.DD"$$FG$ and $FG,4$$TX,"The King James Bible",HTML="http://www.templeos.org/files/BIBLE.DD"$$FG$ from $FG,4$$TX,"Project Gutenberg",HTML="http://web.archive.org/web/20110730111436/http://promo.net/pg/"$$FG$.
 
diff --git a/Doc/Ctrls.DD b/Doc/Ctrls.DD
index 91e5a18..28155da 100644
--- a/Doc/Ctrls.DD
+++ b/Doc/Ctrls.DD
@@ -1 +1 @@
-$WW,1$To create a TempleOS graphic ctrl, you define callback functions and insert a $LK,"CCtrl",A="MN:CCtrl"$ structure in the $LK,"CTask",A="MN:CTask"$ queue.  See $LK,"::/Demo/Graphics/Slider.HC"$, $LK,"::/Demo/Graphics/ScrollBars.HC"$ and $LK,"TermButtonNew",A="FF:::/Adam/WallPaper.HC,TermButtonNew"$.  There is a template-code ctrl generator, if you press $FG,2$$FG$.
+$WW,1$To create a TempleOS graphic ctrl, you define callback functions and insert a $LK,"CCtrl",A="MN:CCtrl"$ structure in the $LK,"CTask",A="MN:CTask"$ queue.  See $LK,"::/Demo/Graphics/Slider.HC"$, $LK,"::/Demo/Graphics/ScrollBars.HC"$ and $LK,"TermBttnNew",A="FF:::/Adam/WallPaper.HC,TermBttnNew"$.  There is a template-code ctrl generator, if you press $FG,2$$FG$.
diff --git a/Doc/Customize.DD b/Doc/Customize.DD
index beb052a..8105fff 100644
--- a/Doc/Customize.DD
+++ b/Doc/Customize.DD
@@ -1,6 +1,6 @@
 
-$WW,1$* You can adjust the mouse movement rate by setting global vars in your start-up file.  See $LK,"mouse scale",A="FF:~/HomeLocalize.HC,mouse.scale"$.
+$WW,1$* You can adjust the mouse movement rate by setting global vars in your start-up file.  See $LK,"mouse scale",A="FF:~/HomeLocalize.HC,ms_hard.scale"$.
 
 * You can set your local time zone by setting the $FG,4$local_time_offset$FG$ global var in a start-up file.  It's units are $LK,"CDATE_FREQ",A="MN:CDATE_FREQ"$.  See $LK,"local time",A="FF:~/HomeLocalize.HC,local_time"$.
 
-* Get rid of this msg $LK,"here",A="FF:~/DoOnce.HC,Customize.DD"$.
+* Get rid of this msg $LK,"here",A="FF:~/Once.HC,Customize.DD"$.
diff --git a/Doc/DbgOverview.DD b/Doc/DbgOverview.DD
index 06f7374..cbaefee 100644
--- a/Doc/DbgOverview.DD
+++ b/Doc/DbgOverview.DD
@@ -20,7 +20,7 @@ $WW,1$$FG,5$$TX+CX,"Debugging Overview"$$FG$
 
 * $LK,"ClassRep",A="MN:ClassRep"$() and the dynamic version $LK,"ClassRepD",A="MN:ClassRepD"$() can be used to dump structures.
 
-* $LK,"Prof",A="MN:Prof"$() and $LK,"ProfRep",A="MN:ProfRep"$() provide code profiling.  See $LK,"::/Demo/InFile/INProfile.IN"$ (This is an $LK,"InFile",A="FF:::/Doc/Glossary.DD,InFile"$.)
+* $LK,"Prof",A="MN:Prof"$() and $LK,"ProfRep",A="MN:ProfRep"$() provide code profiling.  See $LK,"::/Demo/InFile/InProfile.IN"$ (This is an $LK,"InFile",A="FF:::/Doc/Glossary.DD,InFile"$.)
 
 * Use $LK,"RawPrint",A="MN:RawPrint"$() to print debug info bypassing the window framework.  You pass these routines a count in milliseconds for how long it should be displayed.  You can use $LK,"Raw",A="MN:Raw"$($FG,2$TRUE$FG$) to make all output bypass the window framework.  The $FG,2$WinMgr$FG$ runs on $FG,2$Core0$FG$ and will overwrite raw text from other cores when it updates the scrn.
 
@@ -37,6 +37,6 @@ $ID,-2$
 
 * There is a heap check utility which can find leaks.  Use $LK,"HeapLog",A="MN:HeapLog"$(), $LK,"HeapLogAddrRep",A="MN:HeapLogAddrRep"$() and $LK,"HeapLogSizeRep",A="MN:HeapLogSizeRep"$().  It's a really simple program which intercepts $LK,"MAlloc",A="MN:MAlloc"$() and $LK,"Free",A="MN:Free"$().  You can customize the code to find other heap issues.
 
-* You can define handler functions for $FG,2$$FG$ keys with $LK,"CtrlAltCBSet",A="MN:CtrlAltCBSet"$().  They operate either in a interrupt environment or in the window mgr when it queues kbd msgs.  You can do $LK,"Raw",A="MN:Raw"$() output.  $FG,2$$FG$ handlers take a scan_code as an arg.
+* You can define hndlr functions for $FG,2$$FG$ keys with $LK,"CtrlAltCBSet",A="MN:CtrlAltCBSet"$().  They operate either in a interrupt environment or in the window mgr when it queues kbd msgs.  You can do $LK,"Raw",A="MN:Raw"$() output.  $FG,2$$FG$ hndlrs take a scan_code as an arg.
 
-* If you recompile $FG,2$Kernel$FG,2$$FG$ with $LK,"BootHDIns",A="MN:BootHDIns"$(), you can set the $FG,4$MemInit$FG$, option to initialize memory to a value at boot, the $FG,4$HeapInit$FG$ option to cause mem alloced off the heap to be initialized or $FG,4$VarInit$FG$ option so both global and local vars will be initialized to a value.  Pick a non-zero value to discover uninitialized var bugs.  You can set $LK,"sys_var_init_flag",A="MN:sys_var_init_flag"$, and $LK,"sys_heap_init_flag",A="MN:sys_heap_init_flag"$ directly after booting.
+* If you recompile $FG,2$Kernel$FG,2$$FG$ with $LK,"BootHDIns",A="MN:BootHDIns"$(), you can set the $FG,4$MemInit$FG$, option to initialize memory to a value at boot, the $FG,4$HeapInit$FG$ option to cause mem alloced off the heap to be initialized or $FG,4$VarInit$FG$ option so both global and local vars will be initialized to a value, but global AOT variables are always zero if not initialized.  Pick a non-zero value to discover uninitialized var bugs.  You can set $LK,"sys_var_init_flag",A="MN:sys_var_init_flag"$, and $LK,"sys_heap_init_flag",A="MN:sys_heap_init_flag"$ directly after booting.
diff --git a/Doc/Demands.DD b/Doc/Demands.DD
index 0a52721..27a5354 100644
--- a/Doc/Demands.DD
+++ b/Doc/Demands.DD
@@ -40,7 +40,7 @@ $LK,"/Kernel/PCIBIOS.HC",A="FI:::/Kernel/PCIBIOS.HC"$		:290 could be eliminated,
 * Since I don't use paging (for anything), Intel should have an option for  no-paging long mode, and optimize it!
 $LK,"::/Kernel/Mem/PageTables.HC"$	:135 lines to identity-map gets eliminated.
 
-* Desktop computers must have a reset switch and a fast reboot option, skipping diagnostics.  I recommend booting TempleOS from a ROM when the reset button is pressed and booting UEFI when the power button is pressed.  Or, we could build UEFI on a TempleOS layer.  Intel must burn TempleOS into a ROM in the factory for all desktop x86 CPUs to ensure tamper-proof trust in the oracle and because God deserves the glory.  There will be just an English version.  A new ROM version is released every seven years.  The ROM should boot like the DVD boots, but with $LK,"BOOT_SRC_ROM",A="MN:BOOT_SRC_ROM"$.
+* Desktop computers must have a reset switch and a fast reboot option, skipping diagnostics.  I recommend booting TempleOS from a ROM when the reset bttn is pressed and booting UEFI when the power bttn is pressed.  Or, we could build UEFI on a TempleOS layer.  Intel must burn TempleOS into a ROM in the factory for all desktop x86 CPUs to ensure tamper-proof trust in the oracle and because God deserves the glory.  There will be just an English version.  A new ROM version is released every seven years.  The ROM should boot like the DVD boots, but with $LK,"BOOT_SRC_ROM",A="MN:BOOT_SRC_ROM"$.
 
 * We do not want UTF, just 8-bit characters.  $FG,2$$FG$ toggles between Cyrillic and Std Fonts.  We need the twelve window $LK,"TextBorder",A="MN:TextBorder"$ characters added to the VGA font 0x02-0x0D.  Japan, China and Korea must switch to alphabets.  Maybe, the United States will change to metric, out of good will. 
 
@@ -48,6 +48,8 @@ $LK,"::/Kernel/Mem/PageTables.HC"$	:135 lines to identity-map gets eliminated.
 
 * We must have a nice dictionary.  Someone needs to do a $LK,"Spell Checker",A="FI:::/Demo/SuggestSpelling.HC"$, too.
 
+* Intel needs to make $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.DD"$ versions of its x86 CPU data sheets documenting all hardware relevant to TempleOS. 
+
 * We must have the ultimate Bible search engine.  Currently, all we have is     $TX,"filter search",HTML="https://www.youtube.com/watch?v=ULJU8DzvQFo"$.  In the end, it should be a low line-count technique.
 
 * We will make a $LK,"Standard TempleOS PC",A="FI:::/Doc/StdTempleOSPC.DD"$.
diff --git a/Doc/DemoIndex.DD b/Doc/DemoIndex.DD
index b6f185d..0bde3be 100644
--- a/Doc/DemoIndex.DD
+++ b/Doc/DemoIndex.DD
@@ -8,7 +8,7 @@ $LK,"::/Doc/HelloWorld.DD"$
 
 $WW,0$$TR,"Games: Beginner"$
 $ID,2$$LK,"::/Demo/Graphics/NetOfDots.HC"$
-$LK,"::/Demo/Graphics/InputPointer.HC"$
+$LK,"::/Demo/Graphics/MouseDemo.HC"$
 $LK,"::/Demo/Graphics/Lines.HC"$
 $LK,"::/Demo/Graphics/SunMoon.HC"$
 $LK,"::/Demo/Graphics/LowPassFilter.HC"$
@@ -27,7 +27,6 @@ $LK,"::/Demo/RandDemo.HC"$
 $LK,"::/Demo/KeyBitMap.HC"$
 $LK,"::/Demo/Graphics/WinZBuf.HC"$
 $LK,"::/Demo/Graphics/Elephant.HC"$
-$LK,"::/Demo/Graphics/Mountain.HC"$
 $LK,"::/Demo/Graphics/WallPaperFish.HC"$ //Press SHIFT-F5 to Adam Include
 $LK,"::/Demo/Games/Digits.HC"$
 $LK,"::/Demo/Progress.HC"$ //has some ASM, just ignore
@@ -78,7 +77,6 @@ $LK,"::/Demo/Games/TreeCheckers.HC"$
 $LK,"::/Demo/MultiCore/Palindrome.HC"$
 $LK,"::/Demo/MultiCore/MPAdd.HC"$
 $LK,"::/Demo/MultiCore/Lock.HC"$
-$LK,"::/Demo/MultiCore/Clouds.HC"$
 $LK,"::/Demo/Graphics/Slider.HC"$
 $LK,"::/Demo/Graphics/WallPaperCtrl.HC"$ //Press SHIFT-F5 to Adam Include
 $LK,"::/Demo/Graphics/ScrollBars.HC"$
@@ -89,14 +87,13 @@ $LK,"::/Demo/Games/BigGuns.HC"$
 $LK,"::/Demo/Games/FlatTops.HC"$
 $LK,"::/Demo/Games/RawHide.HC"$
 $LK,"::/Demo/Games/DunGen.HC"$
-$MA-X+PU,"::/Apps/TimeOut",LM="Cd(\"::/Apps/TimeOut\");Dir;View;\n"$
+$MA-X+PU,"::/Apps/Titanium",LM="Cd(\"::/Apps/Titanium\");Dir;View;\n"$
 $LK,"::/Demo/Games/Collision.HC"$
 $ID,-2$$TR,"Games: Advanced"$
 $ID,2$$LK,"::/Demo/MultiCore/LoadTest.HC"$
 $LK,"::/Demo/MultiCore/Primes.HC"$
 $LK,"::/Demo/MultiCore/MPRadix.HC"$
 $LK,"::/Demo/MultiCore/Interrupts.HC"$
-$MA-X+PU,"::/Apps/AfterEgypt",LM="Cd(\"::/Apps/AfterEgypt\");Dir;View;\n"$
 $LK,"::/Demo/Games/Varoom.HC"$
 $LK,"::/Demo/Graphics/Shading.HC"$
 $LK,"::/Demo/Graphics/Transform.HC"$
@@ -108,7 +105,6 @@ $LK,"::/Demo/Graphics/SpriteText.HC"$
 $LK,"::/Demo/Graphics/SpriteRaw.HC"$
 $MA-X+PU,"::/Apps/GrModels",LM="Cd(\"::/Apps/GrModels\");Dir;View;\n"$
 $MA-X+PU,"::/Apps/KeepAway",LM="Cd(\"::/Apps/KeepAway\");Dir;View;\n"$
-$LK,"::/Demo/Graphics/Camp.HC"$
 $LK,"::/Demo/Games/Rocket.HC"$
 $LK,"::/Demo/Games/RocketScience.HC"$
 $LK,"::/Demo/Games/MassSpring.HC"$
@@ -162,7 +158,7 @@ $LK,"::/Demo/ClassMeta.HC"$
 $LK,"::/Demo/LastClass.HC"$
 $LK,"::/Demo/DolDoc/NumBible.HC"$
 $LK,"::/Demo/DolDoc/Form.HC"$
-$LK,"::/Demo/DolDoc/MenuButton.HC"$
+$LK,"::/Demo/DolDoc/MenuBttn.HC"$
 $LK,"::/Demo/DolDoc/MenuSprite.HC"$
 $LK,"::/Demo/DolDoc/ClickCallBack.HC"$
 $LK,"::/Demo/DolDoc/TreeDemo.HC"$
diff --git a/Doc/Directives.DD b/Doc/Directives.DD
index 32c10eb..9617939 100644
--- a/Doc/Directives.DD
+++ b/Doc/Directives.DD
@@ -1,7 +1,7 @@
 $HL,1$$WW,0$#define __DATE__ #exe{StreamPrint("\"%D\"",Now);}
 #define __TIME__ #exe{StreamPrint("\"%T\"",Now);}
 #define __LINE__ #exe{StreamPrint("%d",Fs->last_cc->lex_include_stk->line_num);}
-#define __CMD_LINE__ #exe{StreamPrint("%d",Fs->last_cc->flags&CCF_CMD_LINE && Fs->last_cc->lex_include_stk->depth<2);}
+#define __CMD_LINE__ #exe{StreamPrint("%d",Fs->last_cc->flags&CCF_CMD_LINE && Fs->last_cc->lex_include_stk->depth<1);}
 #define __FILE__ #exe{StreamPrint("\"%s\"",Fs->last_cc->lex_include_stk->full_name);}
 #define __DIR__  #exe{StreamDir;}
 
diff --git a/Doc/DolDocOverview.DD b/Doc/DolDocOverview.DD
index 3a1ef68..60ef706 100644
--- a/Doc/DolDocOverview.DD
+++ b/Doc/DolDocOverview.DD
@@ -113,15 +113,15 @@ Examples:  to see
 5)$LK,"File find link searching for 5th 'CTRL'",A="FF:::/Kernel/KernelA.HH,CTRL:5"$
 6)$LK,"Manual page link",A="MN:Print"$
 7)$LK,"File line num link",A="FL:::/Kernel/KernelA.HH,200"$
-8)$LK,"File anchor link --  to see anchor after you click",A="FA:::/Kernel/Mem/PageTables.HC,ExpandHeap"$
+8)$LK,"File anchor link --  to see anchor after you click",A="FA:::/Demo/DolDoc/DemoDoc.DD,MyLittleAnchor"$
 9)$LK,"Bible Link",A="BF:Acts,2:3"$ The chapter:verse actually just does a text search.
 10) $LK,"Help Index Link",A="HI:Doc"$.
-11) $LK,"Address Link",A="AD:0x12000"$.
+11) $LK,"Address Link",A="AD:0x11000"$.
 
 12) For in-memory document address links, see $LK,"SpriteEdText",A="MN:SpriteEdText"$().
 
-$ID,-2$$TR,"BT Button"$
-$ID,2$See $LK,"::/Demo/DolDoc/MenuButton.HC"$.
+$ID,-2$$TR,"BT Bttn"$
+$ID,2$See $LK,"::/Demo/DolDoc/MenuBttn.HC"$.
 $ID,-2$$TR,"DA Data"$
 $ID,2$Used for forms that prompt for data or just displaying a value.  Use $FG,2$$FG$ to help you generate the DolDoc command text you need in your $LK,"HolyC",A="FI:::/Doc/HolyC.DD"$ $FG,2$class$FG$ member's $FG,2$fmtstr$FG$ meta-data for $LK,"DocForm",A="MN:DocForm"$().  See $LK,"::/Demo/DolDoc/Form.HC"$, $LK,"::/Demo/Dsk/DataBase.HC"$, and $LK,"::/Adam/DolDoc/DocWidgetWiz.HC"$.
 
@@ -240,13 +240,13 @@ $ID,2$See $LK,"::/Demo/ToHtmlToTXTDemo/ToHtml.HC"$ to generate a html version of
 $ID,-2$$TR,"LE= Left Expression"$
 $ID,2$Left expression.  $FG,2$CM$FG$ has this by default for X offset and you can leave-off the $FG,2$LE=$FG$, just putting the $FG,2$$FG$.
 
-See $LK,"::/Demo/DolDoc/MenuButton.HC"$.
+See $LK,"::/Demo/DolDoc/MenuBttn.HC"$.
 $ID,-2$$TR,"LM=\"\" Left Macro Str"$
 $ID,2$Left macro string.
 $ID,-2$$TR,"RE= Right Expression"$
 $ID,2$Right expression.  $FG,2$CM$FG$ has this by default for Y offset and you can leave-off the $FG,2$RE=$FG$, just putting the $FG,2$$FG$.
 
-See $LK,"::/Demo/DolDoc/MenuButton.HC"$.
+See $LK,"::/Demo/DolDoc/MenuBttn.HC"$.
 $ID,-2$$TR,"RM=\"\" Right Macro Str"$
 $ID,2$Right macro string.
 $ID,-2$$TR,"BI= Bin Number"$
@@ -269,7 +269,7 @@ $ID,2$Scroll text in a marquee of so many columns.
 $ID,-2$$TR,"U= User Data"$
 $ID,2$User Data.
 
-See $LK,"::/Demo/DolDoc/MenuButton.HC"$.
+See $LK,"::/Demo/DolDoc/MenuBttn.HC"$.
 $ID,-2$
 $FG,5$EXAMPLES:
 
diff --git a/Doc/Features.DD b/Doc/Features.DD
index f260741..8595fa2 100644
--- a/Doc/Features.DD
+++ b/Doc/Features.DD
@@ -1,6 +1,6 @@
          $WW,1$$FG,5$$TX+CX,"TempleOS' Features"$$FG$
 
-* Oracle in program, $FG,2$AfterEgypt$FG$, for $LK,"tongues",A="FI:::/Adam/God/HSNotes.DD"$.
+* Oracle in with $FG,2$$FG$ for words or $FG,2$$FG$ for passages.  See $LK,"tongues",A="FI:::/Adam/God/HSNotes.DD"$.
 
 * $FG,4$$TX,"x86_64",HTML="http://en.wikipedia.org/wiki/Amd64#AMD64"$$FG$, ring-0-only, single-address-map (identity), multitasking kernel with multicore support.
 
diff --git a/Doc/Glossary.DD b/Doc/Glossary.DD
index d2c7b6c..52d799d 100644
--- a/Doc/Glossary.DD
+++ b/Doc/Glossary.DD
@@ -18,6 +18,7 @@ $FG,2$BG$FG$	Backround
 $FG,2$Bin$FG$	Binary
 $FG,2$Blk$FG$	Block
 $FG,2$Bmp$FG$	BitMap
+$FG,2$Bttn$FG$	Button
 $FG,2$Buf$FG$	Buffer
 $FG,2$Bwd$FG$	Backward
 $FG,2$CB$FG$	Call-Back, Code Block
@@ -25,6 +26,7 @@ $FG,2$Cfg$FG$	Config
 $FG,2$Chg$FG$	Change
 $FG,2$Chk$FG$	Check
 $FG,2$Const$FG$	Consant
+$FG,2$Cont$FG$	Continue
 $FG,2$Cmd$FG$	Command
 $FG,2$Cmp$FG$	Compiler
 $FG,2$Cnt$FG$	Count
@@ -60,6 +62,7 @@ $FG,2$Fun$FG$	Function
 $FG,2$Gen$FG$	Generate
 $FG,2$Glbl$FG$	Global
 $FG,2$Gr$FG$	Graphic
+$FG,2$Hndlr$FG$	Handler
 $FG,2$IDE$FG$	Integrated Drive Electronics, Integrated Development Environment
 $FG,2$Id$FG$	Identification
 $FG,2$Ident$FG$	Identifier, Identity, Identical
@@ -69,7 +72,6 @@ $FG,2$Init$FG$	Initialize
 $FG,2$Ins$FG$	Insert, Install
 $FG,2$Inst$FG$	Instruction
 $FG,2$Int$FG$	Interrupt, Integer
-$FG,2$ip_$FG$	Input Pointer.  See $LK,"InputPointer.HC",A="FI:::/Kernel/SerialDev/InputPointer.HC"$.
 $FG,2$Irq$FG$	Interrupt (Request)
 $FG,2$JIT$FG$	Just-in-Time
 $FG,2$Kbd$FG$	Keyboard
@@ -84,8 +86,10 @@ $FG,2$Man$FG$	Manual
 $FG,2$Mem$FG$	Memory
 $FG,2$Mgd$FG$	Managed
 $FG,2$Mgr$FG$	Manager
+$FG,2$Mid$FG$	Middle
 $FG,2$Mon$FG$	Month
 $FG,2$MP$FG$	MultiProcessor
+$FG,2$Ms$FG$	Mouse
 $FG,2$Msg$FG$	Message
 $FG,2$Num$FG$	Number
 $FG,2$Obj$FG$	Object
@@ -160,7 +164,7 @@ $ID,2$This is Adam, as in Adam and Eve, the parent of all tasks.  Adam is immort
 $ID,-2$$TR,"Seth Tasks"$
 $ID,2$In the Bible, $LK,"Seth",A="BF:Genesis,4:25"$$FG$ is Adam and Eve's child.  Each CPU core has an executive task called $FG,2$Seth$FG$ that is immortal.  The Adam task on $FG,2$Core0$FG$ is also its $FG,2$Seth$FG$ task.
 $ID,-2$$TR,"Code and Data Heaps"$
-$ID,2$TempleOS uses the asm $FG,2$CALL$FG$ inst, exclusively, and that inst is limited to calling routines $FG,2$+/-2Gig$FG$ from the current code location.  To prevent out-of-range issues, I decided to separate code and data, placing all code within the lowest $FG,2$2Gig$FG$ of memory, addresses $FG,2$00000000$FG$-$FG,2$7FFFFFFF$FG$.  The compiler and $LK,"Load",A="MN:Load"$()er alloc memory from the code heap to store code and glbl vars, unless the compiler option $LK,"OPTf_GLBLS_ON_DATA_HEAP",A="MN:OPTf_GLBLS_ON_DATA_HEAP"$ is used.  When programs call $LK,"MAlloc",A="MN:MAlloc"$() is from the data heap, which in not limited in size, except by physical RAM memory.  You can alloc from any heap in any task at any time on any core, even making $LK,"independent",A="MN:Mem512Alloc"$ heaps.
+$ID,2$TempleOS uses the asm $FG,2$CALL$FG$ inst, exclusively, and that inst is limited to calling routines $FG,2$+/-2Gig$FG$ from the current code location.  To prevent out-of-range issues, I decided to separate code and data, placing all code within the lowest $FG,2$2Gig$FG$ of memory, addresses $FG,2$00000000$FG$-$FG,2$7FFFFFFF$FG$.  The compiler and $LK,"Load",A="MN:Load"$()er alloc memory from the code heap to store code and glbl vars, unless the compiler option $LK,"OPTf_GLBLS_ON_DATA_HEAP",A="MN:OPTf_GLBLS_ON_DATA_HEAP"$ is used.  When programs call $LK,"MAlloc",A="MN:MAlloc"$() is from the data heap, which in not limited in size, except by physical RAM memory.  You can alloc from any heap in any task at any time on any core, even making $LK,"independent",A="MN:MemPagAlloc"$ heaps.
 $ID,-2$$TR,"Parent, Child and PopUp Tasks"$
 $ID,2$Often a task will $LK,"Spawn",A="MN:Spawn"$() or $LK,"PopUp",A="MN:PopUp"$() a task as a helper.  The helper is known as a child Task, though you can $LK,"Spawn",A="MN:Spawn"$ a task and assign it a different parent... like $FG,2$Adam$FG$.  Links are kept as to who's whose child, so when one task is $LK,"Kill",A="MN:Kill"$()ed the child helper tasks die, too.  You can get a report of current system tasks with $LK,"TaskRep",A="MN:TaskRep"$().  There is just one window per task, so child tasks are needed for pop-ups.
 $ID,-2$$TR,"HolyC"$
@@ -176,6 +180,7 @@ $ID,2$In $FG,2$just-in-time$FG$ mode, the compiler places code and data in memor
 $ID,-2$$TR,"Compiler Intermediate Code"$
 $ID,2$The compiler generates insts one step before making actual assembly (machine) language insts.  This code is rev polish stack machine in nature and can be viewed with $LK,"PassTrace",A="MN:PassTrace"$().  The compiler does not $FG,2$interpret$FG$ code, except in the process of optimization to make the final machine code.  Assembly language output can be viewed when code is compiled with the $LK,"Trace",A="MN:Trace"$(), or, afterward, with $LK,"U",A="MN:U"$() or $LK,"Uf",A="MN:Uf"$("").
 $ID,-2$$TR,"Drive/Partition"$
+
 $ID,2$There is no distinction between $FG,2$drive$FG$ or $FG,2$partition$FG$.  They are specified with a single letter from $FG,2$A$FG$-$FG,2$Z$FG$.
 
 '$FG,2$:$FG$' is the boot drive.
@@ -197,8 +202,11 @@ $LK,"Editor Link Types",A="MN:LK_FILE"$
 $LK,"files_find_mask",A="FI:::/Doc/FileUtils.DD"$
 $LK,"Hash Table",A="HI:Hash"$
 $LK,"InFile",A="HI:InFile"$
+$LK,"Ona",A="HI:Snd"$
+$LK,"Pag",A="HI:Memory/BlkPool"$
 $LK,"RedSea File System",A="FI:::/Doc/RedSea.DD"$
 $LK,"Sprite",A="HI:Graphics/Sprite"$
+
 $TR,"CLI, STI, PUSHFD, POPFD"$
 $ID,2$These are x86 assembly insts.
 $FG,2$CLI$FG$ disable interrupts.
diff --git a/Doc/GraphicsOverview.DD b/Doc/GraphicsOverview.DD
index ae2fccf..9259b85 100644
Binary files a/Doc/GraphicsOverview.DD and b/Doc/GraphicsOverview.DD differ
diff --git a/Doc/GuideLines.DD b/Doc/GuideLines.DD
index f7add04..51c2e08 100644
--- a/Doc/GuideLines.DD
+++ b/Doc/GuideLines.DD
@@ -30,7 +30,7 @@ $LK,"~/MakeHome.HC"$ a file compiled by the $LK,"Adam Task",A="FF:::/Doc/Glossar
 
 $FG,4$~/Home*$FG$ Copy $FG,2$Home*$FG$ files from the root into $FG,2$~$FG$ and customize them.  These files are invoked when the $LK,"Adam Task",A="FF:::/Doc/Glossary.DD,Adam Task"$ starts-up.
 
-$LK,"~/DoOnce.HC"$ a file invoked at the start-up of the first user.  Customize this!
+$LK,"~/Once.HC"$ a file invoked at the start-up of the first user.  Customize this!
 
 $LK,"~/Registry.HC"$ can be edited by hand or deleted to reset to defaults.  Takes affect next boot.
 
@@ -88,6 +88,8 @@ $ID,-5$
 
 * Use $FG,2$$LK,"CH_SHIFT_SPACE",A="MN:CH_SHIFT_SPACE"$$FG$ for spaces in quotes in source code because I run $LK,"Spaces-to-Tabs",A="FF:::/Adam/Opt/Utils/StrUtils.HC,S2T"$ on source code.
 
+* Do not use $FG,2$#if$FG$ or $FG,2$#ifdef$FG$
+
 
 
 $FG,5$$TX+CX,"Hash Sym Tables"$$FG$
diff --git a/Doc/HelpIndex.DD b/Doc/HelpIndex.DD
index fa9935e..eef56f4 100644
Binary files a/Doc/HelpIndex.DD and b/Doc/HelpIndex.DD differ
diff --git a/Doc/HolyC.DD b/Doc/HolyC.DD
index 0e1efcc..382bd0d 100644
--- a/Doc/HolyC.DD
+++ b/Doc/HolyC.DD
@@ -227,7 +227,7 @@ $FG$$ID,-2$
 
 * There is a keyword $FG,2$lastclass$FG$ you use as a dft arg.  It is set to the class name of the prev arg.  See $LK,"::/Demo/LastClass.HC"$, $LK,"ClassRep",A="MN:ClassRep"$(), $LK,"DocForm",A="MN:DocForm"$()  and $LK,"::/Demo/Dsk/BlkDevRep.HC"$.
 
-* See $LK,"::/Demo/Exceptions.HC"$.  $FG,2$try{} catch{}$FG$ and $FG,2$throw$FG$ are different from C++. $FG,2$throw$FG$ is a function with an 8-byte or less char arg.  The char string passed in $FG,2$throw()$FG$ can be accessed from within a $FG,2$catch{}$FG$ using the $FG,2$Fs->except_ch$FG$.  Within a $FG,2$catch {}$FG$ blk, set the var $FG,2$Fs->catch_except$FG$ to $FG,2$TRUE$FG$ if you want to terminate the search for a handler.  Use $LK,"PutExcept",A="MN:PutExcept"$() as a handler, if you like.
+* See $LK,"::/Demo/Exceptions.HC"$.  $FG,2$try{} catch{}$FG$ and $FG,2$throw$FG$ are different from C++. $FG,2$throw$FG$ is a function with an 8-byte or less char arg.  The char string passed in $FG,2$throw()$FG$ can be accessed from within a $FG,2$catch{}$FG$ using the $FG,2$Fs->except_ch$FG$.  Within a $FG,2$catch {}$FG$ blk, set the var $FG,2$Fs->catch_except$FG$ to $FG,2$TRUE$FG$ if you want to terminate the search for a hndlr.  Use $LK,"PutExcept",A="MN:PutExcept"$() as a hndlr, if you like.
 
 * A function is available similar to $FG,2$sizeof$FG$ which provides the offset of a member of a class.  It's called $FG,2$offset$FG$.  You place the class name and member inside as in $FG,2$offset(classname.membername)$FG$.  It has nothing to do with 16-bit code.  Both $FG,2$sizeof$FG$ and $FG,2$offset$FG$ only accept one level of member vars.  That is, you can't do $FG,2$sizeof(classname.membername.submembername)$FG$.$FG$
 
diff --git a/Doc/InFile.DD b/Doc/InFile.DD
index ed63e9d..35f1eea 100644
--- a/Doc/InFile.DD
+++ b/Doc/InFile.DD
@@ -2,6 +2,6 @@ $WW,1$$FG,2$InFiles$FG$ are used to generate user input to automate operations.
 
 When an $FG,2$InFile$FG$ runs, a child task is $LK,"Spawn",A="MN:Spawn"$()ed which intercepts real user input and generates fake input.  InFiles are $LK,"HolyC",A="FI:::/Doc/HolyC.DD"$ programs run by the child whose stdout goes to the parent's input buffer.  $LK,"Msg",A="MN:Msg"$() can be included in an $FG,2$InFile$FG$ to send special keys or mouse cmds to the parent.  While an $FG,2$InFile$FG$ is running, the normal input gets diverted to the InFile task and can be filtered and sent back to the parent task.  Unless you are driving functions which prompt for data, you can probably use an $FG,2$#include$FG$ file in place of an $FG,2$InFile$FG$.
 
-See $LK,"::/Demo/InFile/INDir.IN"$.
+See $LK,"::/Demo/InFile/InDir.IN"$.
 
 Note: $LK,"In",A="MN:In"$("") can be used if all you need is to send ASCII characters.  It differs from $LK,"InStr",A="MN:InStr"$().  You'll probably use $LK,"In",A="MN:In"$() a lot and not $LK,"InStr",A="MN:InStr"$().  With $LK,"In",A="MN:In"$(), for example, you can place answers to the prompts for recompiling the $FG,2$Kernel$FG$ module during $LK,"BootHDIns",A="MN:BootHDIns"$().
diff --git a/Doc/InputPointer.DD b/Doc/InputPointer.DD
deleted file mode 100644
index 05f51dc..0000000
--- a/Doc/InputPointer.DD
+++ /dev/null
@@ -1,16 +0,0 @@
-$WW,1$"Input Ptr" is the mouse.  In the future, might be joystick or pad.
-
-$LK,"ip.pos.x",A="MN:ip"$ and $LK,"ip.pos.y",A="MN:ip"$ can be used to access the x and y coordinates of the input ptr.  They are relative to the scrn, not window.  These can be used if you don't want to use msg passing.  $LK,"ip.pos.z",A="MN:ip"$ is the wheel.
-
-$LK,"ip.pos_text.x",A="MN:CIPStateGlbls"$ and $LK,"ip.pos_text.y",A="MN:CIPStateGlbls"$ are the text column and row of the input ptr.  See $LK,"::/Demo/Games/Maze.HC"$.
-
-See $LK,"CIPStateGlbls",A="MN:CIPStateGlbls"$ and $LK,"CMouseStateGlbls",A="MN:CMouseStateGlbls"$.
-
-$HL,1$//****
-mouse.pos.x=mouse.prescale.x*mouse.scale.x*ip_grid.x_speed;
-ip.presnap.x=ToI64(ip.scale.x*mouse.pos.x)+ip.offset.x;
-if (ip_grid.snap)
-  ip.pos.x=Trunc(ip.presnap.x/ip_grid.x)*ip_grid.x+ip_grid.x_offset;
-else
-  ip.pos.x=ip.presnap.x;
-//****$HL,0$
diff --git a/Doc/TaskSrv.DD b/Doc/Job.DD
similarity index 53%
rename from Doc/TaskSrv.DD
rename to Doc/Job.DD
index aeb7c0d..003afac 100644
Binary files a/Doc/TaskSrv.DD and b/Doc/Job.DD differ
diff --git a/Doc/KeyAlloc.DD b/Doc/KeyAlloc.DD
index 9ad2891..601b0d7 100644
--- a/Doc/KeyAlloc.DD
+++ b/Doc/KeyAlloc.DD
@@ -4,11 +4,11 @@ See $LK,"Char",A="HI:Char"$ for definition of scan codes.
 
 See $MA-X+PU,"Key Map",LM="KeyMap;View;\n"$ for a detailed list of key commands.
 
-When you are at the cmd line, editing documents, browsing documentation and help, entering items in forms or in menu's, the $LK,"DolDoc",A="MN:CDoc"$ editor handles keys.  It allows you to define your own key handlers in a $LK,"MyPutKey",A="MN:MyPutKey"$() function.  If you choose, you can catch keys, overriding the default handlers.  See $LK,"DocPutKey",A="MN:DocPutKey"$().  The following is an overview of key allocations.
+When you are at the cmd line, editing documents, browsing documentation and help, entering items in forms or in menu's, the $LK,"DolDoc",A="MN:CDoc"$ editor handles keys.  It allows you to define your own key hndlrs in a $LK,"MyPutKey",A="MN:MyPutKey"$() function.  If you choose, you can catch keys, overriding the default hndlrs.  See $LK,"DocPutKey",A="MN:DocPutKey"$().  The following is an overview of key allocations.
 
-$FG,2$$FG$ and $FG,2$$FG$  Free for user configurations in your $LK,"MyPutKey",A="MN:MyPutKey"$() handler, except for $FG,2$ALT-BACKSPACE$FG$ (undo).  There are a few examples pre-defined, but you can change them if you wish.
+$FG,2$$FG$ and $FG,2$$FG$  Free for user configurations in your $LK,"MyPutKey",A="MN:MyPutKey"$() hndlr, except for $FG,2$ALT-BACKSPACE$FG$ (undo).  There are a few examples pre-defined, but you can change them if you wish.
 
-$FG,2$$FG$ and $FG,2$$FG$  Handled at a system level, NOT by the $LK,"CDoc",A="MN:CDoc"$ editor.  I reserve the right to alloc these, but in the mean time, you can define your own handlers with $LK,"CtrlAltCBSet",A="MN:CtrlAltCBSet"$().  They operate either in a interrupt environment or in the window mgr when it queues kbd msgs.  You can do $LK,"Raw",A="MN:Raw"$() output.  $FG,2$$FG$ handlers take a scan_code as an arg.
+$FG,2$$FG$ and $FG,2$$FG$  Handled at a system level, NOT by the $LK,"CDoc",A="MN:CDoc"$ editor.  I reserve the right to alloc these, but in the mean time, you can define your own hndlrs with $LK,"CtrlAltCBSet",A="MN:CtrlAltCBSet"$().  They operate either in a interrupt environment or in the window mgr when it queues kbd msgs.  You can do $LK,"Raw",A="MN:Raw"$() output.  $FG,2$$FG$ hndlrs take a scan_code as an arg.
 
 $FG,2$$FG$  Auto-completes local words.
 
diff --git a/Doc/KeyDev.DD b/Doc/KeyDev.DD
index d0b5a68..006cb95 100644
--- a/Doc/KeyDev.DD
+++ b/Doc/KeyDev.DD
@@ -1,14 +1,14 @@
-$WW,1$The editor mostly stays in a $LK,"GetKey",A="MN:GetKey"$()/$LK,"PutKey",A="MN:PutKey"$() loop.  The putkey portion is where keys are acted-upon.  TempleOS has a chain of putkey handlers in a $LK,"Circular Queue",A="HI:Circular Queue"$ with priorities.  The highest priority handlers can choose to terminate handling, otherwise, the keys get sent on down the chain.
+$WW,1$The editor mostly stays in a $LK,"GetKey",A="MN:GetKey"$()/$LK,"PutKey",A="MN:PutKey"$() loop.  The putkey portion is where keys are acted-upon.  TempleOS has a chain of putkey hndlrs in a $LK,"Circular Queue",A="HI:Circular Queue"$ with priorities.  The highest priority hndlrs can choose to terminate handling, otherwise, the keys get sent on down the chain.
 
 $LK,"KeyDevAdd",A="MN:KeyDevAdd"$() defines a putkey device with a priority.  "Device" might be a misnomer.  Currently, the following are defined:
 
-Priority    Handler
+Priority    Hndlr
 ---------- ---------
-$FG,2$0x20000000$FG$ $LK,"MyPutKey",A="MN:MyPutKey"$() user handler
+$FG,2$0x20000000$FG$ $LK,"MyPutKey",A="MN:MyPutKey"$() user hndlr
 $FG,2$0x40000000$FG$ $LK,"KDInputFilterPutKey",A="MN:KDInputFilterPutKey"$() for $LK,"In",A="MN:In"$(), $LK,"InStr",A="MN:InStr"$(), and $LK,"InFile",A="MN:InFile"$() handling.
 $FG,2$0x60000000$FG$ $LK,"KDRawPutKey",A="MN:KDRawPutKey"$() nonwindowed direct to video mem debug output. 
 $FG,2$0x80000000$FG$ $LK,"KDDocPutKey",A="MN:KDDocPutKey"$() standard document cmds
 
-Since handling individual keys is slow, TempleOS supports PutS() as well.  If no puts handler is defined, individual keys are sent.
+Since handling individual keys is slow, TempleOS supports PutS() as well.  If no puts hndlr is defined, individual keys are sent.
 
 $LK,"CDoc",A="MN:CDoc"$$FG,2$.user_put_key$FG$ and $LK,"CDoc",A="MN:CDoc"$$FG,2$.user_put_s$FG$ are call back routines which offer some neat tricks.  See $LK,"::/Apps/Psalmody/JukeBox.HC"$.  There is a var $LK,"CDoc",A="MN:CDoc"$$FG,2$.user_put_data$FG$ which gets passed to them.
diff --git a/Doc/MemOverview.DD b/Doc/MemOverview.DD
index 891bd63..f227c6b 100644
--- a/Doc/MemOverview.DD
+++ b/Doc/MemOverview.DD
@@ -1,6 +1,6 @@
 $WW,1$$FG,5$$TX+CX,"Memory Overview"$$FG$
 
-Paging is practically not used.  64-bit mode requires paging, however, so it is identity-mapped, virtual identical to physical.  All tasks on all cores use the same page table map, just as though all addresses are physical addresses.  2Meg or 1Gig page table entries are used.  Nothing swaps to disk.  You can adjust $LK,"MEM_MAPPED_SPACE",A="MN:MEM_MAPPED_SPACE"$ for more RAM.
+Paging is practically not used.  64-bit mode requires paging, however, so it is identity-mapped -- virtual identical to physical.  All tasks on all cores use the same page table map, just as though all addresses are physical addresses.  2Meg or 1Gig page table entries are used.  Nothing swaps to disk.
 
 In TempleOS, the lowest 2Gig of memory is called the $FG,2$code heap$FG$.  TempleOS's compiler always uses 32-bit signed relative JMP & CALL insts because 64-bit CALLs take two insts.  With signed +/- 32-bit values, code can only call a function within 2Gig distance.  Therefore, TempleOS keeps all code in the lowest 2Gig memory addresses including what would normally be called "the kernel".  Two Gig is plenty for code, don't worry.
 
@@ -8,50 +8,39 @@ You can create new, independent heaps using $LK,"HeapCtrlInit",A="MN:HeapCtrlIni
 
 Memory alloced by a task will be freed when the task is killed.  The $LK,"Adam Task",A="FF:::/Doc/Glossary.DD,Adam Task"$ is a task that never dies.  His memory is like kernel memory in other operating systems.  See $LK,"ACAlloc",A="MN:ACAlloc"$(), $LK,"AMAlloc",A="MN:AMAlloc"$(), $LK,"AMAllocIdent",A="MN:AMAllocIdent"$() and $LK,"AStrNew",A="MN:AStrNew"$().
 
-All of the regular page tables are marked, "cached".  When accessing hardware, however, you need uncached page table.  The lowest 4Gig of addresses have an alias used to access hardware located toward the top of mapped space.  It is currently at $FG,2$0x$TX,"3F00000000",D="DD_UNCACHED_ALIAS"$$FG$ but can change if $LK,"MEM_MAPPED_SPACE",A="MN:MEM_MAPPED_SPACE"$ is adjusted.  See $LK,"dev.uncached_alias",A="FF:::/Kernel/KEnd.HC,dev.uncached_alias"$.
+All of the regular page tables are marked, "cached".  When accessing hardware, however, you need uncached page table.  The lowest 4Gig addresses have an alias to access hardware located toward the top of mapped space, $FG,2$0x$TX,"01AA000000",D="DD_UNCACHED_ALIAS"$$FG$.  See $LK,"dev.uncached_alias",A="FF:::/Kernel/KEnd.HC,dev.uncached_alias"$.
 
-During an extended powered-on session of TempleOS, in theory, memory will become fragmented, requiring a reboot.  It has never happened to me.
+During an extended powered-on session of TempleOS, in theory, memory will become fragmented, requiring a reboot.  It has never happens to me.
 
 See $LK,"MemRep",A="MN:MemRep"$() and $LK,"::/Demo/MemDemo.HC"$.
 
+
 $FG,5$$TX+CX,"Single System-wide Mem Map"$
 
-$FG,2$ 0x00$TX,"00007C00",D="DD_KERNEL"$- 0x00$TX,"0003654F",D="DD_KERNEL_END"$$FG$
+$FG,2$ 0x00$TX,"00007C00",D="DD_KERNEL"$- 0x00$TX,"00036AEF",D="DD_KERNEL_END"$$FG$
 $ID,2$Kernel module, placed here by the boot-loader, $LK,"BOOT_RAM_BASE",A="MN:BOOT_RAM_BASE"$.
 $ID,-2$
 $FG,2$ 0x00$TX,"00096600",D="DD_BOOT_HIGH_LOC_DVD"$- 0x00$TX,"00096FFF",D="DD_BOOT_HIGH_LOC_DVD_END"$$FG$
 $ID,2$$FG$Boot block relocated here before loading the Kernel module, $LK,"BootDVD",A="FI:::/Adam/Opt/Boot/BootDVD.HC"$ & $LK,"BootHD",A="FI:::/Adam/Opt/Boot/BootHD.HC"$.
 $ID,-2$
-$FG,2$ 0x00$TX,"00097000",D="DD_MP_VECT"$- 0x00$TX,"00097030",D="DD_MP_VECT_END"$$FG$
-$ID,2$Multicore start-up vect code, $LK,"MPN_VECT",A="MN:MPN_VECT"$.
-$ID,-2$
-$FG,2$~0x000009F000- 0x000009FFFF
-$ID,2$$FG$Extended BIOS data area.
-$ID,-2$
-$FG,2$ 0x00000A0000- 0x00000BFFFF$FG$
-$ID,2$VGA graphics mem, marked as write-through cache in $LK,"text",A="MN:text"$.vga_alias.
-$ID,-2$
-$FG,2$ 0x00$TX,"00100000",D="DD_SYS_FIXED_AREA_BASE"$- 0x00$TX,"002035FF",D="DD_SYS_FIXED_AREA_END"$$FG$
-$ID,2$$LK,"CSysFixedArea",A="MN:CSysFixedArea"$ for page tables and misc.  $TX,"256Gig",D="DD_MEM_MAPPED_SPACE_GIG"$ of address space mapped.
-$ID,-2$
-$FG,2$ 0x00$TX,"00203600",D="DD_SYS_HEAP_BASE"$- 0x00$TX,"7FFFFFFF",D="DD_SYS_HEAP_LIMIT"$$FG$
-$ID,2$Code Heap mem.
-$ID,-2$
-$FG,2$             - 0x007FFFFFFF$FG$
-$ID,2$Data Heap mem.  (This exists if there is less than 2Gig of code heap.)
-$ID,-2$
+$FG,2$ 0x00$TX,"00097000",D="DD_MP_VECT"$- 0x00$TX,"00097030",D="DD_MP_VECT_END"$$FG$ Multicore start-up vect code, $LK,"MPN_VECT",A="MN:MPN_VECT"$.
+$FG,2$~0x000009F000- 0x000009FFFF$FG$ Extended BIOS data area.
+$FG,2$ 0x00000A0000- 0x00000BFFFF$FG$ VGA graphics mem with alias at $LK,"text",A="MN:text"$.vga_alias.
+$FG,2$ 0x00$TX,"00100000",D="DD_SYS_FIXED_AREA_BASE"$- 0x00$TX,"00101FFF",D="DD_SYS_FIXED_AREA_END"$$FG$ $LK,"CSysFixedArea",A="MN:CSysFixedArea"$ for misc.
+$FG,2$ 0x00$TX,"0010F000",D="DD_MEM_HEAP_BASE"$- 0x00$TX,"7FFFFFFF",D="DD_MEM_HEAP_LIMIT"$$FG$ Code Heap mem.
+
 $FG,2$ 0x00E0000000- 0x00FFFFFFFF$FG$
 $ID,2$32-bit devices could alloc memory at 0xF0000000 going up, but this is wrong, since some PCs already have devices at 0xF0000000.  No PCI devices are supported, so $LK,"Mem32DevAlloc",A="MN:Mem32DevAlloc"$() flaws are not an issue.
 $ID,-2$
 $FG,2$ 0x0080000000-~0x00DFFFFFFF$FG$
-$FG,2$ 0x0100000000-~0x$TX,"3FFFFFFFFF",D="DD_MEM_MAPPED_SPACE_END"$$FG$
+$FG,2$ 0x0100000000-~0x$TX,"01A9FFFFFF",D="DD_PHYSICAL_SPACE_END"$$FG$
 $ID,2$Data Heap mem.  (The physical memory that exists in this range is data heap.)
 $ID,-2$
-$FG,2$ 0x$TX,"3F00000000",D="DD_UNCACHED_ALIAS"$- 0x$TX,"3FFFFFFFFF",D="DD_MEM_MAPPED_SPACE_END"$$FG$
+$FG,2$ 0x$TX,"01AA000000",D="DD_UNCACHED_ALIAS"$- 0x$TX,"02A9FFFFFF",D="DD_MAPPED_SPACE_END"$$FG$
 $ID,2$Uncached alias of first 4Gig.  (For 32-bit device access.)
 $ID,-2$
-$FG,2$             - 0x$TX,"3FFFFFFFFF",D="DD_MEM_MAPPED_SPACE_END"$$FG$
-$ID,2$64-bit devices are alloced with $LK,"Mem64DevAlloc",A="MN:Mem64DevAlloc"$() counting bwd from $TX,"256Gig",D="DD_MEM_MAPPED_SPACE_GIG"$, but no PCI devices are actually supported$WW,0$.
+$FG,2$             - 0x$TX,"02A9FFFFFF",D="DD_MAPPED_SPACE_END"$$FG$
+$ID,2$64-bit devices are alloced with $LK,"Mem64DevAlloc",A="MN:Mem64DevAlloc"$() counting bwd, but no PCI devices are actually supported$WW,0$.
 $ID,-2$
 
 
@@ -60,15 +49,14 @@ $WW,1$* Note: There is a break in the data-heap block pool.  This has no effect
 * Note: For systems with less than 2Gig RAM, the code and data heap block pools are the same.  For systems with 2-4Gig of RAM, the code heap is 1/4 of the total.  See $LK,"BlkPoolsInit",A="MN:BlkPoolsInit"$().
 
 
-
 $FG,5$$TX+CX,"History"$$FG$
 
 In 2003, I wanted to make a no-paging ring-0-only 64-bit operating system for super speed with simplicity and full access.  With paging, every memory request requires 5 accesses -- it must access the address itself, 4K, 2Meg, 1Gig, and 512Gig page tables, but the CPU's translation look-aside buffer mostly removes the penalty for using paging.  So, I did not want to use paging, but long mode requires it.  I did the next best thing -- I identity-mapped everything and achieved the simplicity I was after with subtle performance boosts, not wasting time changing address maps.  And, I look forward to the day I command Intel to make an optimized no-paging long mode.
 
 I needed VGA A0000-BFFFF memory to be write-through and 0xE0000000-0xFFFFFFFF to be uncached for various devices.  All 64-bit computers allow stopping address translation at 2Meg page size, not using 4K.  I wanted to use 2Meg for everything because it's faster, with one less level of page tables.  I had to make A0000-BFFFF write-through, though, so I could not use 2Meg size on the lowest page.  I did the lowest 2Meg area as 4K pages.  I also unmapped the first 4K to cause a fault when dereferencing NULL.
 
-In 2016, I came-up with an alternate idea.  I double mapped the lowest memory with an alias that was uncached.  Accessing the lowest 2Meg area directly was cached but the alias I created up at the $LK,"top of address space",A="MN:MEM_MAPPED_SPACE"$ was uncached.  Unfortunately, I could no longer boast of the simplicity of identity mapping everything.  Since many of my users are familiar with A0000-BFFFF, it is actually pretty seriously unfortunate that they cannot use the easy-to-understand numbers of A0000-BFFFF, but must access the relocated alias location.  See $LK,"text.vga_alias",A="FF:::/Kernel/KEnd.HC,text.vga_alias"$.  I also no longer cause a fault when dereferencing NULL.
+In 2016, I came-up with an alternate idea.  I double mapped the lowest memory with an alias that was uncached.  Accessing the lowest 2Meg area directly was cached but the alias I created up at the top of address space was uncached.  See $LK,"UncachedAliasAlloc",A="MN:UncachedAliasAlloc"$().  Unfortunately, I could no longer boast of the simplicity of identity mapping everything.  Since many of my users are familiar with A0000-BFFFF, it is actually pretty seriously unfortunate that they cannot use the easy-to-understand numbers of A0000-BFFFF, but must access the relocated alias location.  See $LK,"text.vga_alias",A="FF:::/Kernel/KEnd.HC,text.vga_alias"$.  I also no longer cause a fault when dereferencing NULL.
 
-Then, I switched to 1Gig page sizes.  For the lowest 4Gig, I set-up an alias up at the $LK,"top of address space",A="MN:MEM_MAPPED_SPACE"$.  Not all computers support 1Gig page tables, however, so I also support 2Meg.
+Then, I switched to 1Gig page sizes.  For the lowest 4Gig, I set-up an alias up at the top of address space.  See $LK,"UncachedAliasAlloc",A="MN:UncachedAliasAlloc"$().  Not all computers support 1Gig page tables, however, so I also support 2Meg.
 
 My original plan was to allow changing the page tables as needed, so I had code for taking control of 2Meg pages and marking them uncached or whatever.  When I did a HDAudio driver, I requested some 32-bit address space as uncached.  Today, all of the first 4Gig can be accessed without caching at the $LK,"dev.uncached_alias",A="FF:::/Kernel/KEnd.HC,dev.uncached_alias"$.
diff --git a/Doc/Menus.DD b/Doc/Menus.DD
index a760998..5502099 100644
--- a/Doc/Menus.DD
+++ b/Doc/Menus.DD
@@ -21,7 +21,7 @@ Help
   About(,'/');
 }
 $FG$
-The first arg is the msg code and it is optional with the default being $LK,"MSG_KEY_DOWN_UP",A="MN:MSG_KEY_DOWN_UP"$.  The second arg is the msg $FG,2$a1$FG$ value which is $LK,"ASCII",A="MN:CH_CTRLA"$ of the key in the case of $LK,"MSG_KEY_DOWN",A="MN:MSG_KEY_DOWN"$.  The third arg is the msg $FG,2$a2$FG$ value which is the $LK,"scan_code",A="FI:::/Doc/CharOverview.DD"$$FG$ of the key in the case of $LK,"MSG_KEY_DOWN",A="MN:MSG_KEY_DOWN"$.
+The first arg is the msg code and it is optional with the default being $LK,"MSG_KEY_DOWN_UP",A="MN:MSG_KEY_DOWN_UP"$.  The second arg is the msg $FG,2$arg1$FG$ value which is $LK,"ASCII",A="MN:CH_CTRLA"$ of the key in the case of $LK,"MSG_KEY_DOWN",A="MN:MSG_KEY_DOWN"$.  The third arg is the msg $FG,2$arg2$FG$ value which is the $LK,"scan_code",A="FI:::/Doc/CharOverview.DD"$$FG$ of the key in the case of $LK,"MSG_KEY_DOWN",A="MN:MSG_KEY_DOWN"$.
 
 Press $FG,2$$FG$ and "Insert ASCII/ScanCode".
 
diff --git a/Doc/Mouse.DD b/Doc/Mouse.DD
new file mode 100644
index 0000000..4931dd0
--- /dev/null
+++ b/Doc/Mouse.DD
@@ -0,0 +1,16 @@
+$WW,1$$LK,"ms.pos.x",A="MN:ms"$ and $LK,"ms.pos.y",A="MN:ms"$ can be used to access the x and y coordinates of the mouse.  They are relative to the scrn, not window.  These can be used if you don't want to use msg passing.  $LK,"ms.pos.z",A="MN:ms"$ is the wheel.
+
+$LK,"ms.pos_text.x",A="MN:CMsStateGlbls"$ and $LK,"ms.pos_text.y",A="MN:CMsStateGlbls"$ are the text column and row.  See $LK,"::/Demo/Games/Maze.HC"$.
+
+See $LK,"CMsStateGlbls",A="MN:CMsStateGlbls"$ and $LK,"CMsHardStateGlbls",A="MN:CMsHardStateGlbls"$.
+
+The $FG,2$hard$FG$ designation, as in $FG,2$ms_hard$FG$, represents hardware layer items before the application of an abstraction layer.
+
+$HL,1$//****
+ms_hard.pos.x=ms_hard.prescale.x*ms_hard.scale.x*ms_grid.x_speed;
+ms.presnap.x=ToI64(ms.scale.x*ms_hard.pos.x)+ms.offset.x;
+if (ms_grid.snap)
+  ms.pos.x=Trunc(ms.presnap.x/ms_grid.x)*ms_grid.x+ms_grid.x_offset;
+else
+  ms.pos.x=ms.presnap.x;
+//****$HL,0$
diff --git a/Doc/MultiCore.DD b/Doc/MultiCore.DD
index 705523a..72735dc 100644
--- a/Doc/MultiCore.DD
+++ b/Doc/MultiCore.DD
@@ -6,7 +6,7 @@ Only tasks on $FG,2$Core0$FG$ can have windows, but other cores can help render
 
 Each core has an executive $LK,"Seth Task",A="FF:::/Doc/Glossary.DD,Seth Tasks"$ which is the father of all tasks on that core.  $LK,"Adam",A="FF:::/Doc/Glossary.DD,Adam Task"$ is the $LK,"Seth Task",A="FF:::/Doc/Glossary.DD,Seth Tasks"$ on $FG,2$Core0$FG$.
 
-You give a job to a $LK,"Seth Task",A="FF:::/Doc/Glossary.DD,Seth Tasks"$ with $LK,"JobQue",A="MN:JobQue"$() and get the res with $LK,"JobResGet",A="MN:JobResGet"$().  You spawn a task on another core with $LK,"Spawn",A="MN:Spawn"$().
+You give a job to a $LK,"Seth Task",A="FF:::/Doc/Glossary.DD,Seth Tasks"$ with $LK,"JobQue",A="MN:JobQue"$() and get the result with $LK,"JobResGet",A="MN:JobResGet"$().  You spawn a task on any core with $LK,"Spawn",A="MN:Spawn"$().
 
 Note: You must use the $FG,2$LOCK$FG$ asm prefix when changing shared structures in a multicore environment.  The $LK,"LBts",A="MN:LBts"$(), $LK,"LBtr",A="MN:LBtr"$() and $LK,"LBtc",A="MN:LBtc"$() insts have $FG,2$LOCK$FG$ prefixes.  The compiler has a $FG,2$lock{}$FG$ feature but it doesn't work well.  See $LK,"::/Demo/MultiCore/Lock.HC"$.
 
diff --git a/Doc/Pags.DD b/Doc/Pags.DD
new file mode 100644
index 0000000..90488d0
--- /dev/null
+++ b/Doc/Pags.DD
@@ -0,0 +1 @@
+$WW,1$The word $FG,2$Pag$FG$ refers to an arbitrilly created $LK,"MEM_PAG_SIZE",A="MN:MEM_PAG_SIZE"$ unit of heap allocation.  TempleOS does not alter the CPU page tables after setting them up at boot in $LK,"SYS_INIT_PAGE_TABLES",A="MN:SYS_INIT_PAGE_TABLES"$, so the CPU hardware page size is rarely important.
diff --git a/Doc/Print.DD b/Doc/Print.DD
index 5562ef3..03375ff 100644
--- a/Doc/Print.DD
+++ b/Doc/Print.DD
@@ -75,9 +75,13 @@ $LK,"TextPrint",A="MN:TextPrint"$(CTask *task,I64 x,I64 y,I64 attr,U8 *fmt,...)
 
 $LK,"ExePrint",A="MN:ExePrint"$(U8 *fmt,...) compiles and execute a string.  Note: It returns the res of the last executed expression.
 
-$LK,"InPrint",A="MN:InPrint"$(I64 ms,U8 *fmt,...) $LK,"PutChars",A="MN:PutChars"$()s one at a time with a delay.
+$LK,"Once",A="MN:Once"$(U8 *fmt,...) Writes User code to $LK,"Registry",A="FI:~/Registry.HC"$ to be executed next boot.
 
-$LK,"RawPrint",A="MN:RawPrint"$(I64 ms,U8 *fmt,...) sends direct to scrn memory, bypassing window manager.
+$LK,"AOnce",A="MN:AOnce"$(U8 *fmt,...) Writes Adam code to $LK,"Registry",A="FI:~/Registry.HC"$ to be executed next boot.
+
+$LK,"InPrint",A="MN:InPrint"$(I64 mS,U8 *fmt,...) $LK,"PutChars",A="MN:PutChars"$()s one at a time with a delay.
+
+$LK,"RawPrint",A="MN:RawPrint"$(I64 mS,U8 *fmt,...) sends direct to scrn memory, bypassing window manager.
 
 $LK,"User",A="MN:User"$(U8 *fmt,...) Spawns a user and execute a string on start-up.
 
diff --git a/Doc/Quirks.DD b/Doc/Quirks.DD
index 4f65ce4..30b267b 100644
--- a/Doc/Quirks.DD
+++ b/Doc/Quirks.DD
@@ -18,7 +18,7 @@ $WW,1$* You run a risk of problems if you do file operations on the same files s
 $ID,2$
 A) $LK,"DocBottom",A="MN:DocBottom"$() followed by $LK,"DocClear",A="MN:DocClear"$() to clear the $LK,"CDoc",A="MN:CDoc"$ so it has no active widgets.
 
-B) Disable window mgr button click checking with $FG,4$Fs->win_inhibit$FG$ set to mask $LK,"WIF_SELF_IP_L",A="MN:WIF_SELF_IP_L"$|$LK,"WIF_FOCUS_TASK_IP_L_D",A="MN:WIF_FOCUS_TASK_IP_L_D"$|$LK,"WIF_SELF_IP_R",A="MN:WIF_SELF_IP_R"$|$LK,"WIF_FOCUS_TASK_IP_R_D",A="MN:WIF_FOCUS_TASK_IP_R_D"$.  This inhibits window mgr operations but still generates messages from button clicks.
+B) Disable window mgr bttn click checking with $FG,4$Fs->win_inhibit$FG$ set to mask $LK,"WIF_SELF_MS_L",A="MN:WIF_SELF_MS_L"$|$LK,"WIF_FOCUS_TASK_MS_L_D",A="MN:WIF_FOCUS_TASK_MS_L_D"$|$LK,"WIF_SELF_MS_R",A="MN:WIF_SELF_MS_R"$|$LK,"WIF_FOCUS_TASK_MS_R_D",A="MN:WIF_FOCUS_TASK_MS_R_D"$.  This inhibits window mgr operations but still generates messages from bttn clicks.
 $ID,-2$
 * $FG,2$switch/case$FG$ stmts alloc a single jump table--do not use with wide, sparse ranges of case values.
 
diff --git a/Doc/RedSea.DD b/Doc/RedSea.DD
index b672c0a..7b12aab 100644
--- a/Doc/RedSea.DD
+++ b/Doc/RedSea.DD
@@ -6,13 +6,13 @@ $HL,1$#define CDIR_FILENAME_LEN	38 //Must include terminator zero
 
 The following bit field shows valid 8-Bit ASCII filename characters.
 
-U32 chars_bmp_filename[8]=
+U32 char_bmp_filename[8]=
 {0x0000000, 0x03FF73FB, 0xEFFFFFFF, 0x2FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF};
 
 public class CDirEntry //64-byte fixed-size
 {
   U16 attr;	//See $LK,"RS_ATTR_DIR",A="MN:RS_ATTR_DIR"$.  I would like to change these.
-  U8 name[CDIR_FILENAME_LEN]; //See $LK,"chars_bmp_filename",A="MN:chars_bmp_filename"$, $LK,"FileNameChk",A="MN:FileNameChk"$
+  U8 name[CDIR_FILENAME_LEN]; //See $LK,"char_bmp_filename",A="MN:char_bmp_filename"$, $LK,"FileNameChk",A="MN:FileNameChk"$
   I64 cluster; (blk) //One sector per cluster.
   I64 size;	//In bytes
   CDate datetime; //See  $LK,"DateTime",A="::/Doc/TimeDate.DD"$, $LK,"Implementation of DateTime",A="FI:::/Kernel/KDate.HC"$
diff --git a/Doc/Requirements.DD b/Doc/Requirements.DD
index cea2773..16d2a8e 100644
--- a/Doc/Requirements.DD
+++ b/Doc/Requirements.DD
@@ -10,7 +10,7 @@ $FG,5$Supported Hardware$FG$
 
 * Most$FG$ keyboards and mice.
 
-* Minimum $TX,"512Meg",D="DD_MEM_MIN_MEG"$ RAM; Maximum $TX,"256Gig",D="DD_MEM_MAPPED_SPACE_GIG"$ RAM ($LK,"easily increased",A="MN:MEM_MAPPED_SPACE"$).
+* Minimum $TX,"512Meg",D="DD_MEM_MIN_MEG"$ RAM.
 
 * Internal PC Speakers.
 
diff --git a/Doc/Snd.DD b/Doc/Snd.DD
new file mode 100644
index 0000000..2aee02d
--- /dev/null
+++ b/Doc/Snd.DD
@@ -0,0 +1 @@
+$WW,1$Sound is generated with $FG,2$I8$FG$ vals called $FG,2$ona$FG$'s.  See $LK,"Note2Ona",A="MN:Note2Ona"$() and $LK,"Ona2Freq",A="MN:Ona2Freq"$().  God does not want death screams, perhaps, because God has PTSD or soldiers have PTSD.  (Imagine wounded on battlefields.)  $FG,2$Ona$FG$'s will allow elegant wave files for export and will allow the creation of simple hardware over the next centuries.  $LK,"ONA_REST",A="MN:ONA_REST"$ is off.
diff --git a/Doc/Sprite.DD b/Doc/Sprite.DD
index 8ae908f..3318cb9 100644
--- a/Doc/Sprite.DD
+++ b/Doc/Sprite.DD
@@ -2,6 +2,6 @@ $WW,1$A $LK,"CSprite",A="MN:CSprite"$ is an ordered list of $LK,"these",A="MN:SP
 
 See $LK,"::/Demo/Graphics/SpritePlot.HC"$, $LK,"::/Demo/Graphics/SpritePlot3D.HC"$, $LK,"::/Demo/Graphics/SpritePut.HC"$, $LK,"::/Demo/Graphics/SpriteRaw.HC"$ and $LK,"SpriteMeshEd",A="MN:SpriteMeshEd"$().
 
-Be aware that copying $FG,2$SP$FG$, $FG,2$IB$FG$, or $FG,2$IS$FG$ entries with the clipboard ress in duplicate entries with different nums.  You can manually remove dups by editing with $FG,2$$FG$ and setting to the original num.
+Be aware that copying $FG,2$SP$FG$, $FG,2$IB$FG$, or $FG,2$IS$FG$ entries with the clipboard results in duplicate entries with different nums.  You can manually remove dups by editing with $FG,2$$FG$ and setting to the original num.
 
 See $LK,"::/Adam/Gr/GrSpritePlot.HC",A="FL:::/Adam/Gr/GrSpritePlot.HC,1"$ for how CSprite are stored.$FG$
diff --git a/Doc/Start.DD b/Doc/Start.DD
index 7aa8e75..43e53b1 100644
--- a/Doc/Start.DD
+++ b/Doc/Start.DD
@@ -1,4 +1,4 @@
-$WW+H,1$$FG,5$$TX+CX,"TempleOS V4.13",D="DD_OS_NAME_VERSION"$$FG$
+$WW+H,1$$FG,5$$TX+CX,"TempleOS V5.00",D="DD_OS_NAME_VERSION"$$FG$
 
 $TX+CX,"Public Domain Operating System"$
 
diff --git a/Doc/StdTempleOSPC.DD b/Doc/StdTempleOSPC.DD
index e8cdb0d..dda6068 100644
--- a/Doc/StdTempleOSPC.DD
+++ b/Doc/StdTempleOSPC.DD
@@ -1,6 +1,6 @@
 $WW,1$$FG,5$$TX+CX,"The Standard TempleOS PC",HTML="http://www.templeos.org/Wb/Home/Web/TAD/TAD.html"$$FG$
 
-All desktop PCs will have 8-channel OCTART super-simple high speed serial ports to replace USB.  They are simpler because the driver is as simple as old school $LK,"RS232 Serial",A="FI:::/Doc/Comm.HC"$, they have no USB end-points and they have no USB human interface device reports.  Computer mice will all have exactly two buttons and one wheel.  Game controllers will all be the standard deluxe $TX,"game console controllers",HTML="http://www.gamestop.com/pc/accessories/steam-controller/121865"$ that are popular today.  It will have 8 big TX and 8 big RX fifos that allow flow control characters to jump the queue.  It should be locked-down to as few options as possible, like 8-1-N only, although hardware may use a USB frame, not an RS232, so stop bits might not be relevant.  Perhaps, just two baud rates -- high and low speed are needed.  Low speed is good for slow microcontrollers and allows longer cable length.  Keyboard, mouse and game controller can be low speed.
+All desktop PCs will have 8-channel OCTART super-simple high speed serial ports to replace USB.  They are simpler because the driver is as simple as old school $LK,"RS232 Serial",A="FI:::/Doc/Comm.HC"$, they have no USB end-points and they have no USB human interface device reports.  Computer mice will all have exactly two bttns and one wheel.  Game controllers will all be the standard deluxe $TX,"game console controllers",HTML="http://www.gamestop.com/pc/accessories/steam-controller/121865"$ that are popular today.  It will have 8 big TX and 8 big RX fifos that allow flow control characters to jump the queue.  It should be locked-down to as few options as possible, like 8-1-N only, although hardware may use a USB frame, not an RS232, so stop bits might not be relevant.  Perhaps, just two baud rates -- high and low speed are needed.  Low speed is good for slow microcontrollers and allows longer cable length.  Keyboard, mouse and game controller can be low speed.
 
 The USB creators banned generic devices, requiring a signed, certified driver for everything!  That's no good.  We allow any device and will communicate, generically, using a serial terminal program like the old school HyperTerminal, XTalk or Telnet.
 
@@ -41,7 +41,7 @@ We want a CPU mode with virtual IO port addresses similar to how paging creates
 
 Meanwhile, a complicated PCI interface can be designed along-side the TempleOS interface for Windows and Linux.  It would almost be possible to carry-on separate lives, however, the super-simple serial requires getting rid of USB since super-simple serial is a new hardware standard.  People can add USB ports with a PCI device card.
 
-God said He wants single audio voice for the sound.  I think we want a word-sized IO port for period with zero causing it to be off.  The period should allow for 20Hz to 20,000 Hz.  The PIT period register for PC speaker seems okay, whatever it is.
+God said He wants single-voice 8-bit signed MIDI-like sample for the sound.  God does not want death screams, perhaps, because God has PTSD or soldiers have PTSD.  (Imagine wounded on battlefields.)
 
 The video will be a linear frame buffer 640x480 16 color with one-byte-per-pixel even though it is only 16 color with is 4-bit.  Perhaps, we have a interrupt to sync with the refresh.
 
@@ -52,9 +52,9 @@ The original PC had general purpose digital IO through the parallel port.  That
 Digital cameras will be super-simple high speed serial, but TempleOS is forever limited to 16 colors and multimedia is banned because large files being loaded into memory fragments memory, so cameras are somewhat unwelcome.  I have enough problems without making the Brits anxious about autonomous gun turrets and killer robots.  The reason I say cameras will be super-simple serial is because we are replacing USB ports with super-simple serial.  Windows/Linux will have only super-simple serial ports unless people buy a USB PCI expansion card.  So, the digital cameras will be super-simple serial.
 
 
-$FG,5$$TX+CX,"Version One"$$FG$
+$FG,5$$TX+CX,"Version 1.0"$$FG$
 
-We will make a spec for a $$4,000, perfectly standardized, cryogenically-cooled, monster desktop PC.  It will have 16 cores, integrated 4K graphics, and, hopefully, 6 Ghz continuous operation.  Perhaps, 64 Gig of RAM will be standard? God said to help to poor buy them.  It is pointless to have a high powered machine if other people have wimpy machines and cannot run programs you write.  Therefore, everybody in the developed world will buy a Standard TempleOS IBM PC over the next ten years, so that will be a quantity of 400 million, perhaps.  God said to pay the US national debt with the revenue.  We will standardize everything, not just the TempleOS related items.  The display will be 4K (and of course 640x480 16 color) and no others.  Everybody gets just one monitor, unless you buy special PCI cards.  Everybody gets two speakers, a headphone, a mic, a webcam and touch scrn.  We make the audio one sample rate and one sample size, but TempleOS still gets just a square wave.  (HD Audio is really screwed-up and requires complicated artificial intelligence, just to route output to speakers.)
+We will make a spec for a $$8,000, perfectly standardized, cryogenically-cooled, monster desktop PC.  It will have 16 cores, integrated 4K graphics, and, hopefully, 6 Ghz continuous operation.  Perhaps, 64 Gig of RAM will be standard? God said to help to poor buy them.  It is pointless to have a high powered machine if other people have wimpy machines and cannot run programs you write.  Therefore, everybody in the developed world will buy a Standard TempleOS IBM PC over the next ten years, so that will be a quantity of 400 million, perhaps.  God said to pay the US national debt with the revenue.  We will standardize everything, not just the TempleOS related items.  The display will be 4K (and of course 640x480 16 color) and no others.  Everybody gets just one monitor, unless you buy special PCI cards.  Everybody gets two speakers, a headphone, a mic, a webcam and touch scrn.  We make the audio one sample rate and one sample size, but TempleOS still gets just a square wave.  (HD Audio is really screwed-up and requires complicated artificial intelligence, just to route output to speakers.)
 
 The Standard Temple IBM PC will be a full-sized tower.  Perhaps, stain-glass will decorate the case because God is sentimentally attached to stained-glass.  We should set the size at exactly 2.5 feet by 1.5 feet by 1.5 feet as in the $LK,"Exodus,25:10-10",A="BF:Exodus,25:10-10"$ for all time.  If there is extra room, make a storage shelf for DVDs.  We do not want a race-to-the-bottom, shrinking the size.  Instead of making it smaller, make it more powerful.  We want to remove all cost pressure from making things small.  It must have a CD/DVD/Blu-ray drive.  The vision is CD/DVDs used for a library of games, not installed on the hard-drive.  We need a network connection, possibly implemented as a super-simple high speed serial device.  What about standard monitor and speakers?  The C64's success was partially due to wide spread, completely standard, hardware.  I think TempleOS will not do bad block devices, so we need a hard drive, not just NV-memory or SSD.
 
@@ -80,6 +80,13 @@ The Temple PC will stay unchanged for seven years at a time.  The Bible speaks o
 $HC,""$
 
 I thought 2.5' x 1.5' x 1.5' was ridiculously big, but it looks like it is reasonable for super-cooled refrigeration systems!
+
+
+$FG,5$$TX+CX,"Version 2.0"$$FG$
+
+$HC,"
\"\"
"$ + +The Standard Temple IBM PC V2.0 will be released seven years after V1.0. Each unit will have a full, uncut, silicon wafer. V2.0 will be sold, unchanged, for seven more years, like a Commodore 64. $FG,8$ * "Commodore 64" is a trademark owned by Polabe Holding NV. * "Linux" is a trademark owned by Linus Torvalds. diff --git a/Doc/Strategy.DD b/Doc/Strategy.DD index 4248faa..d853cde 100644 --- a/Doc/Strategy.DD +++ b/Doc/Strategy.DD @@ -16,7 +16,7 @@ TempleOS is a motorcycle -- if you lean-over too far, a motorcycle will crash. Linux and Windows are general purpose operating systems. They attempt to do any task you want. TempleOS cherry-picks tasks and is designed to do the same things a C64 did. This saves and order of magnitude complexity. For example, the $LK,"RedSea",A="FI:::/Doc/RedSea.DD"$ file system allocates just contiguous files -- you load and save whole files at once. A benefit is this allows compression. Also, TempleOS does not do networking or multimedia. In theory, memory will fragment with lots of big files. The system would fall to pieces with multimedia, but God said 640x480 16 color is a permanent covenant like circumcision. -A three button mouse is like a leg you cannot put weight on. TempleOS just does hardware everybody has, with no divergent code bases for each machine's custom hardware. There is one graphics driver instead of 50 for different GPUs. This saves an order of magnitude complexity and makes for a delightful API, so developer's code is not like a frayed rope end. +A three bttn mouse is like a leg you cannot put weight on. TempleOS just does hardware everybody has, with no divergent code bases for each machine's custom hardware. There is one graphics driver instead of 50 for different GPUs. This saves an order of magnitude complexity and makes for a delightful API, so developer's code is not like a frayed rope end. @@ -46,7 +46,7 @@ A three button mouse is like a leg you cannot put weight on. TempleOS just does * One editor/word processor/browser for the command-line window, source code, documentation browser, dialog forms. -* No child windows. One window per task. Buttons are widgets, not child windows. There are child tasks, however. +* No child windows. One window per task. Bttns are widgets, not child windows. There are child tasks, however. * No distinction between $FG,2$thread$FG$, $FG,2$process$FG$ or $FG,2$task$FG$. @@ -54,7 +54,7 @@ A three button mouse is like a leg you cannot put weight on. TempleOS just does * $LK,"MultiCore",A="FI:::/Doc/MultiCore.DD"$ is done $FG,2$master/slave$FG$, instead of $FG,2$SMP$FG$. $FG,2$Core0$FG$ applications explicitly assigns jobs. Locks are present allowing multicore file, heap, and hardware access, though. -* $LK,"Music",A="MN:Play"$ is done with an elegant one-voice notation. +* $LK,"Sound",A="HI:Snd"$ has single-voice 8-bit signed MIDI-like samples. * All tasks have a heap and a sym table. Scope is that of environment vars in other operating systems. As text is typed at the command line or you run programs by $FG,2$#include$FG$ing them, the syms go in the table. If a sym is not found, the parent task's table is checked. The father of all tasks has the API syms you'll need waiting in it's table. No need to $FG,2$#include$FG$ headers. diff --git a/Doc/Tips.DD b/Doc/Tips.DD index 2f276d0..0a042f7 100644 --- a/Doc/Tips.DD +++ b/Doc/Tips.DD @@ -21,7 +21,7 @@ $FG,2$Merge(\"C:/*\",\"D:/*\",\"+r+d\");$FG$ to check my changes. * Use the PullDown menu at the top of the scrn to learn commands, or for finding the keyboard controls to games. -* You can adjust the mouse movement rate by setting global vars in your start-up file. See $LK,"mouse scale",A="FF:~/HomeLocalize.HC,mouse.scale"$. +* You can adjust the mouse movement rate by setting global vars in your start-up file. See $LK,"mouse scale",A="FF:~/HomeLocalize.HC,ms_hard.scale"$. * You can set your local time zone by setting the $LK,"local_time_offset",A="MN:local_time_offset"$ global var in a start-up file. It's units are $LK,"CDATE_FREQ",A="MN:CDATE_FREQ"$. See $LK,"local time",A="FF:~/HomeLocalize.HC,local_time"$. diff --git a/HomeKeyPlugIns.HC b/HomeKeyPlugIns.HC index d251a5b..eee3097 100644 --- a/HomeKeyPlugIns.HC +++ b/HomeKeyPlugIns.HC @@ -17,7 +17,7 @@ Bool MyPutKey(I64 ch,I64 sc) //You can customize keys. This routine //is called before the main editor - //key handler $LK,"DocPutKey",A="MN:DocPutKey"$(). + //key hndlr $LK,"DocPutKey",A="MN:DocPutKey"$(). //You can intercept any key. //Return TRUE if you completely diff --git a/HomeLocalize.HC b/HomeLocalize.HC index b5c4531..bafbe59 100644 --- a/HomeLocalize.HC +++ b/HomeLocalize.HC @@ -8,12 +8,12 @@ KbdTypeMatic(0); local_time_offset=0*60*60*CDATE_FREQ; //Do daylight savings by hand //$AN,"",A="mouse_move_scale"$adjust these to set mouse move scale -mouse.scale.x=0.5; -mouse.scale.y=0.5; -mouse.scale.z=1.0; //wheel +ms_hard.scale.x=0.5; +ms_hard.scale.y=0.5; +ms_hard.scale.z=1.0; //wheel //don't change these -mouse.prescale.x=mouse.pos.x/mouse.scale.x; -mouse.prescale.y=mouse.pos.y/mouse.scale.y; -mouse.prescale.z=mouse.pos.z/mouse.scale.z; +ms_hard.prescale.x=ms_hard.pos.x/ms_hard.scale.x; +ms_hard.prescale.y=ms_hard.pos.y/ms_hard.scale.y; +ms_hard.prescale.z=ms_hard.pos.z/ms_hard.scale.z; diff --git a/HomeSys.HC b/HomeSys.HC index 512b685..71113c1 100644 --- a/HomeSys.HC +++ b/HomeSys.HC @@ -27,7 +27,7 @@ U0 StartUpTasks() WinToTop(user1); WinTileVert; "Boot Time:%7.3fs\n",tS; - XTalk(user1,"Cd;#include \"DoOnce\";\n"); + XTalk(user1,"Cd;#include \"Once\";\n"); Silent; //no output to scrn ACInit("/*;!*/Bible.TXT*"); Silent(OFF); //no output to scrn diff --git a/Kernel/BlkDev/DskATA.HC b/Kernel/BlkDev/DskATA.HC index 6c09f11..1b89dce 100644 --- a/Kernel/BlkDev/DskATA.HC +++ b/Kernel/BlkDev/DskATA.HC @@ -160,10 +160,10 @@ Bool ATAPIStartStop(CBlkDev *bd,F64 timeout,Bool start) return FALSE; } -I64 ATAGetDevId(CBlkDev *bd,F64 timeout,U16 **_id_record) +I64 ATAGetDevId(CBlkDev *bd,F64 timeout,Bool keep_id_record) { - U16 *id_record; - if (_id_record) *_id_record=NULL; + I64 res=BDT_NULL; + U16 *id_record=NULL; if (bd->type!=BDT_ATAPI && bd->base1) OutU8(bd->base1+ATAR1_CTRL,0x8); if (bd->flags & BDF_EXT_SIZE) @@ -171,24 +171,30 @@ I64 ATAGetDevId(CBlkDev *bd,F64 timeout,U16 **_id_record) else OutU8(bd->base0+ATAR0_SEL,0xE0|bd->unit<<4); ATACmd(bd,ATA_ID_DEV); - if (!ATAWaitNotBUSY(bd,timeout)) - return BDT_NULL; - if (InU8(bd->base0+ATAR0_STAT)&ATAS_ERR) - return BDT_ATAPI; - id_record=ACAlloc(512); - if (!ATAGetRes(bd,timeout,id_record,512,512,FALSE)) { - Free(id_record); - return BDT_NULL; + if (ATAWaitNotBUSY(bd,timeout)) { + if (InU8(bd->base0+ATAR0_STAT)&ATAS_ERR) + res=BDT_ATAPI; + else { + id_record=ACAlloc(512); + if (ATAGetRes(bd,timeout,id_record,512,512,FALSE)) + res=BDT_ATA; + else { + Free(id_record); + id_record=NULL; + } + } } - if (_id_record) *_id_record=id_record; - return BDT_ATA; + if (keep_id_record) { + Free(bd->dev_id_record); + bd->dev_id_record=id_record; + } + return res; } I64 ATAReadNativeMax(CBlkDev *bd,F64 timeout) {//Returns zero on err I64 res=0; Bool okay=TRUE; - if (bd->type==BDT_ATAPI) { if (bd->flags & BDF_EXT_SIZE) OutU8(bd->base0+ATAR0_SEL,0xEF|bd->unit<<4); @@ -207,9 +213,7 @@ I64 ATAReadNativeMax(CBlkDev *bd,F64 timeout) if (0dev_id_record); - if (ATAGetDevId(bd,timeout,&bd->dev_id_record)==BDT_NULL) + if (ATAGetDevId(bd,timeout,TRUE)==BDT_NULL) okay=FALSE; else BEqu(&bd->flags,BDf_EXT_SIZE,Bt(&bd->dev_id_record[86],10)); @@ -310,7 +314,6 @@ Bool ATAInit(CBlkDev *bd) bd->flags|=BDF_EXT_SIZE; if (ATAReadNativeMax(bd,tS+0.1)) { - ATABlkSel(bd,bd->max_blk,0); if (bd->flags&BDF_EXT_SIZE) ATACmd(bd,ATA_SET_MAX_EXT); @@ -379,7 +382,7 @@ I64 ATAProbe(I64 base0,I64 base1,I64 unit) bd.base1=base1; bd.unit=unit; bd.blk_size=DVD_BLK_SIZE; - return ATAGetDevId(&bd,tS+0.1,NULL); + return ATAGetDevId(&bd,tS+0.1,FALSE); } Bool ATAPIReadBlks2(CBlkDev *bd,F64 timeout,U8 *buf, diff --git a/Kernel/BlkDev/DskATAId.HC b/Kernel/BlkDev/DskATAId.HC index 724e2b8..5f8ee77 100644 --- a/Kernel/BlkDev/DskATAId.HC +++ b/Kernel/BlkDev/DskATAId.HC @@ -244,7 +244,7 @@ CBlkDev *ATAMount(U8 first_drv_let,I64 type,I64 base0,I64 base1,I64 unit) res->unit=unit; res->base0=base0; res->base1=base1; - if (BlkDevAdd(res,FALSE,FALSE)) + if (BlkDevAdd(res,,FALSE,FALSE)) return res; } return NULL; diff --git a/Kernel/BlkDev/DskAddDev.HC b/Kernel/BlkDev/DskAddDev.HC index e09b626..0ec685b 100644 --- a/Kernel/BlkDev/DskAddDev.HC +++ b/Kernel/BlkDev/DskAddDev.HC @@ -24,18 +24,20 @@ U0 BlkDevLockFwdingSet(CBlkDev *bd) } } -I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free) -{ - I64 i,j,ext_base,offset,res=0; +I64 BlkDevAdd(CBlkDev *bd,I64 prt_num=MIN_I64, + Bool whole_drv,Bool make_free) +{//It will mount just one partition of prt_num>=0. +//When repartitioing whole drive, whole_drv=TRUE. + I64 i,j,ext_base,offset,res=0,num=0; CDrv *dv; CRedSeaBoot br; CMasterBoot mbr; bd->bd_signature=BD_SIGNATURE_VAL; if (make_free) - dv=DrvMakeFreeSlot(bd->first_drv_let+res); + dv=DrvMakeFreeSlot(bd->first_drv_let); else - dv=DrvMakeFreeSlot(DrvNextFreeLet(bd->first_drv_let+res)); + dv=DrvMakeFreeSlot(DrvNextFreeLet(bd->first_drv_let)); dv->bd=bd; dv->drv_offset=bd->drv_offset; dv->size=bd->max_blk+1-bd->drv_offset; @@ -44,6 +46,7 @@ I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free) case BDT_ISO_FILE_READ: case BDT_ISO_FILE_WRITE: dv->dv_signature=DRV_SIGNATURE_VAL; + dv->prt_num=num; dv->fs_type=FSt_REDSEA; //This is to force creation of a RAM //drive during boot, so it is probably @@ -63,8 +66,9 @@ I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free) dv->dv_signature=0; //Revoke validation else { dv->dv_signature=0; //Revoke validation - if (one_drv) { + if (whole_drv) { dv->dv_signature=DRV_SIGNATURE_VAL; + dv->prt_num=num; res++; dv->fs_type=FSt_REDSEA; dv->size=bd->max_blk+1-bd->drv_offset; @@ -75,12 +79,12 @@ I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free) } offset=0; ext_base=INVALID_CLUSTER; - while (TRUE) { + while (prt_num<0 || num<=prt_num) { ATAReadBlks(bd,&mbr,offset,1); if (mbr.signature!=0xAA55) break; j=-1; - for (i=0;i<4;i++) { + for (i=0;i<4 && (prt_num<0 || num<=prt_num);i++) { if (mbr.p[i].type) { if (make_free) dv=DrvMakeFreeSlot(bd->first_drv_let+res); @@ -92,9 +96,10 @@ I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free) switch (mbr.p[i].type) { case MBR_PT_REDSEA: dv->dv_signature=DRV_SIGNATURE_VAL; + dv->prt_num=num; res++; dv->fs_type=FSt_REDSEA; - RedSeaDrvInit(dv); + RedSeaInit(dv); break; case MBR_PT_FAT32a: case MBR_PT_FAT32b: @@ -104,17 +109,19 @@ I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free) case MBR_PT_FAT32f: ATAReadBlks(bd,&br,dv->drv_offset,1); dv->dv_signature=DRV_SIGNATURE_VAL; + dv->prt_num=num; res++; if (br.signature==MBR_PT_REDSEA) { dv->fs_type=FSt_REDSEA; - RedSeaDrvInit(dv); + RedSeaInit(dv); } else { dv->fs_type=FSt_FAT32; - FAT32DrvInit(dv); + FAT32Init(dv); } break; case MBR_PT_NTFS: dv->dv_signature=DRV_SIGNATURE_VAL; + dv->prt_num=num; res++; dv->fs_type=FSt_NTFS; break; @@ -124,9 +131,11 @@ I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free) break; default: dv->dv_signature=DRV_SIGNATURE_VAL; + dv->prt_num=num; res++; dv->fs_type=FSt_UNKNOWN; } + num++; } } if (Let2BlkDevType(bd->first_drv_let+res)!=bd->type) @@ -145,6 +154,7 @@ I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free) break; case BDT_ATAPI: dv->dv_signature=DRV_SIGNATURE_VAL; + dv->prt_num=num; res++; dv->fs_type=FSt_ISO9660; //Start with this dv->size=0; diff --git a/Kernel/BlkDev/DskBlkDev.HC b/Kernel/BlkDev/DskBlkDev.HC index e787d42..fa67d63 100644 --- a/Kernel/BlkDev/DskBlkDev.HC +++ b/Kernel/BlkDev/DskBlkDev.HC @@ -44,8 +44,8 @@ Bool BlkDevInit(CBlkDev *bd) } dv->fs_type=FSt_REDSEA; dv->size=bd->max_blk+1-bd->drv_offset; - if (RedSeaDrvValidate(bd->first_drv_let)) - RedSeaDrvInit(dv); + if (RedSeaValidate(bd->first_drv_let)) + RedSeaInit(dv); else RedSeaFmt(bd->first_drv_let); res=TRUE; @@ -54,21 +54,25 @@ Bool BlkDevInit(CBlkDev *bd) if (FileFind(bd->file_dsk_name,&de,FUF_JUST_FILES)) { bd->max_blk=de.size>>BLK_SIZE_BITS-1; try bd->file_dsk=FOpen(bd->file_dsk_name,"rc",bd->max_blk+1); - catch + catch { + if (Fs->except_ch=='File') + PrintErr("Not Contiguous. Move file to filename.ISO.C.\n"); Fs->catch_except=TRUE; + } if (bd->file_dsk) { dv->fs_type=FSt_REDSEA; dv->size=bd->max_blk+1-bd->drv_offset; - if (RedSeaDrvValidate(bd->first_drv_let)) { - RedSeaDrvInit(dv); + if (RedSeaValidate(bd->first_drv_let)) { + RedSeaInit(dv); res=TRUE; - } + } else + PrintErr("Not RedSea\n"); } } break; case BDT_ISO_FILE_WRITE: if (!bd->file_dsk_name) { - StrPrint(buf,"%C:/Drv%C.DRV.C", + StrPrint(buf,"%C:/Drv%C.ISO.C", blkdev.boot_drv_let,bd->first_drv_let); bd->file_dsk_name=AStrNew(buf); } @@ -78,6 +82,7 @@ Bool BlkDevInit(CBlkDev *bd) dv->fs_type=FSt_REDSEA; dv->size=bd->max_blk+1-bd->drv_offset; RedSeaFmt(bd->first_drv_let); + CallExtStr("RedSeaISO9660",bd->file_dsk_name,bd->first_drv_let); res=TRUE; break; case BDT_ATA: diff --git a/Kernel/BlkDev/DskCDDVD.HC b/Kernel/BlkDev/DskCDDVD.HC index 0809d91..2a7f485 100644 --- a/Kernel/BlkDev/DskCDDVD.HC +++ b/Kernel/BlkDev/DskCDDVD.HC @@ -2,7 +2,7 @@ //ISO2 is ISO13490 //ISO3 is ISO13346 -Bool ISODrvInit(CDrv *dv,I64 blk) +Bool ISOInit(CDrv *dv,I64 blk) { CBlkDev *bd=dv->bd; I64 spc=bd->blk_size>>BLK_SIZE_BITS,i=blk/spc,drv_offset=0; @@ -13,9 +13,9 @@ Bool ISODrvInit(CDrv *dv,I64 blk) try { unlock=DrvLock(dv); - dv->fs_type=FSt_ISO9660; //default + dv->fs_type=FSt_ISO9660; dv->spc=spc; - dv->drv_offset=bd->drv_offset=dv->data_area=dv->root_cluster=dv->size=0; + dv->data_area=dv->root_cluster=dv->drv_offset=bd->drv_offset=dv->size=0; while (TRUE) { dv->size=MaxI64(dv->size,(i+1)*spc); RBlks(dv,iso,i*spc,spc); @@ -30,17 +30,17 @@ Bool ISODrvInit(CDrv *dv,I64 blk) break; case ISO1T_SUPPLEMENTARY_DESC: de=&iso->root_dir_record; - dv->root_cluster=de->loc.little; dv->size=iso->vol_space_size.little*bd->blk_size>>BLK_SIZE_BITS; if (!StrCmp(iso->publisher_id,"TempleOS RedSea")) { dv->fs_type=FSt_REDSEA; bd->drv_offset=dv->drv_offset=19<<2+drv_offset; bd->max_blk=dv->size-1; dv->size-=bd->drv_offset; - RedSeaDrvInit(dv); - } + RedSeaInit(dv); + } else + dv->root_cluster=de->loc.little; res=TRUE; - goto ipi_done; + goto di_done; case ISO1T_TERMINATOR: throw('Drv'); } @@ -51,7 +51,7 @@ Bool ISODrvInit(CDrv *dv,I64 blk) } i++; } -ipi_done: +di_done: Free(iso); if (unlock) DrvUnlock(dv); diff --git a/Kernel/BlkDev/DskCache.HC b/Kernel/BlkDev/DskCache.HC index 33f7946..988f458 100644 --- a/Kernel/BlkDev/DskCache.HC +++ b/Kernel/BlkDev/DskCache.HC @@ -3,7 +3,7 @@ U0 DskCacheInit(I64 size_in_U8s) CCacheBlk *tmpc; I64 i,cnt; - while (LBts(&sys_semas[SYS_SEMA_DSK_CACHE],0)) + while (LBts(&sys_semas[SEMA_DSK_CACHE],0)) Yield; Free(blkdev.cache_ctrl); Free(blkdev.cache_base); @@ -34,7 +34,7 @@ U0 DskCacheInit(I64 size_in_U8s) tmpc->next_hash=tmpc->last_hash=tmpc; } } - LBtr(&sys_semas[SYS_SEMA_DSK_CACHE],0); + LBtr(&sys_semas[SEMA_DSK_CACHE],0); } I64 DskCacheHash(I64 blk) @@ -77,7 +77,7 @@ U0 DskCacheAdd(CDrv *dv,U8 *buf, I64 blk, I64 cnt) { CCacheBlk *tmpc; if (blkdev.cache_base) { - while (LBts(&sys_semas[SYS_SEMA_DSK_CACHE],0)) + while (LBts(&sys_semas[SEMA_DSK_CACHE],0)) Yield; while (cnt-->0) { if (!(tmpc=DskCacheFind(dv,blk))) @@ -90,7 +90,7 @@ U0 DskCacheAdd(CDrv *dv,U8 *buf, I64 blk, I64 cnt) blk++; buf+=BLK_SIZE; } - LBtr(&sys_semas[SYS_SEMA_DSK_CACHE],0); + LBtr(&sys_semas[SEMA_DSK_CACHE],0); } } @@ -98,7 +98,7 @@ U0 DskCacheInvalidate2(CDrv *dv) { CCacheBlk *tmpc,*tmpc1; if (blkdev.cache_base) { - while (LBts(&sys_semas[SYS_SEMA_DSK_CACHE],0)) + while (LBts(&sys_semas[SEMA_DSK_CACHE],0)) Yield; tmpc=blkdev.cache_ctrl->last_lru; while (tmpc!=blkdev.cache_ctrl) { @@ -112,7 +112,7 @@ U0 DskCacheInvalidate2(CDrv *dv) } tmpc=tmpc1; } - LBtr(&sys_semas[SYS_SEMA_DSK_CACHE],0); + LBtr(&sys_semas[SEMA_DSK_CACHE],0); } } @@ -120,7 +120,7 @@ U0 RCache(CDrv *dv,U8 **_buf, I64 *_blk, I64 *_cnt) { CCacheBlk *tmpc; if (blkdev.cache_base) { - while (LBts(&sys_semas[SYS_SEMA_DSK_CACHE],0)) + while (LBts(&sys_semas[SEMA_DSK_CACHE],0)) Yield; //fetch leading blks from cache while (*_cnt>0) { @@ -140,6 +140,6 @@ U0 RCache(CDrv *dv,U8 **_buf, I64 *_blk, I64 *_cnt) } else break; } - LBtr(&sys_semas[SYS_SEMA_DSK_CACHE],0); + LBtr(&sys_semas[SEMA_DSK_CACHE],0); } } diff --git a/Kernel/BlkDev/DskDrv.HC b/Kernel/BlkDev/DskDrv.HC index 047bd6e..5e8ee8f 100644 --- a/Kernel/BlkDev/DskDrv.HC +++ b/Kernel/BlkDev/DskDrv.HC @@ -38,7 +38,7 @@ U0 DrvsRelease() CDrv *DrvMakeFreeSlot(U8 drv_let) {//Make a slot free for a new drv, like during $LK,"Mount",A="MN:Mount"$(). //!!! drv_let is not a $LK,"remapped",A="MN:DrvMap"$ drv. - I64 i=ToUpper(drv_let)-'A'; + I64 i=Let2Let(drv_let)-'A'; CDrv *res; if (!(0<=idrv_let; } +U8 Let2Let(U8 drv_let=0) +{//Drv letter to Drv letter. + if (!drv_let) + drv_let=Drv2Let(Fs->cur_dv); + else if (drv_let==':') + drv_let=blkdev.boot_drv_let; + else if (drv_let=='~') + drv_let=*blkdev.home_dir; + return ToUpper(drv_let); +} + I64 Let2BlkDevType(U8 drv_let) {//Drv letter to BlkDev Type. drv_let=0 not allowed. See $LK,"BDT_NULL",A="MN:BDT_NULL"$. - drv_let=ToUpper(drv_let); + drv_let=Let2Let(drv_let); if ('A'<=drv_let<='B') return BDT_RAM; if ('C'<=drv_let<='L') @@ -180,11 +191,7 @@ CDrv *Let2Drv(U8 drv_let=0,Bool except=TRUE) if (!drv_let) dv=Fs->cur_dv; else { - if (drv_let==':') - drv_let=blkdev.boot_drv_let; - else if (drv_let=='~') - drv_let=*blkdev.home_dir; - drv_let=ToUpper(drv_let); + drv_let=Let2Let(drv_let); if (!('A'<=drv_let<='Z')) { if (except) throw('Drv'); @@ -219,7 +226,7 @@ U0 DskCacheInvalidate(CDrv *dv) if (bd->flags & BDF_READ_CACHE) DskCacheInvalidate2(dv); if (bd->type==BDT_ATAPI && !(bd->flags & BDF_READ_ONLY_OVERRIDE)) - ISODrvInit(dv,(32767/bd->blk_size+1)*bd->blk_size>>BLK_SIZE_BITS); + ISOInit(dv,(32767/bd->blk_size+1)*bd->blk_size>>BLK_SIZE_BITS); if (unlock) DrvUnlock(dv); } catch @@ -233,15 +240,18 @@ U0 ChgDsk(U8 drv_let=0) CBlkDev *bd=dv->bd; if (!(bd->flags&BDF_INITIALIZED)) BlkDevInit(bd); - else if (bd->flags&BDF_REMOVABLE) + else if (bd->flags&BDF_REMOVABLE) { + if (bd->type==BDT_ATAPI) + ATAInit(bd); //TODO: This is a kludge for QEMU? DskCacheInvalidate(dv); + } Drv(drv_let); RedSeaFreeFreeLst(dv); } Bool DrvMap(U8 drv_let,CDrv *dv) {//Make drive letter map to another. - drv_let=ToUpper(drv_let); + drv_let=Let2Let(drv_let); if ('A'<=drv_let<='Z') { blkdev.let_to_drv[drv_let-'A']=dv; dv->drv_let=drv_let; @@ -311,13 +321,7 @@ U8 drv_text_attr[3]={BLACK,BLUE,RED}; U8 DrvTextAttrGet(U8 drv_let=0) {//Get color of drive. - if (!drv_let) - drv_let=Drv2Let(Fs->cur_dv); - else if (drv_let==':') - drv_let=blkdev.boot_drv_let; - else if (drv_let=='~') - drv_let=*blkdev.home_dir; - drv_let=ToUpper(drv_let); + drv_let=Let2Let(drv_let); if ('A'<=drv_let<='Z') return blkdev_text_attr[Let2BlkDevType(drv_let)]<<4| drv_text_attr[drv_let%sizeof(drv_text_attr)]; diff --git a/Kernel/BlkDev/DskFmt.HC b/Kernel/BlkDev/DskFmt.HC index 0092d21..87d18ef 100644 --- a/Kernel/BlkDev/DskFmt.HC +++ b/Kernel/BlkDev/DskFmt.HC @@ -2,7 +2,9 @@ Bool DrvTypeSet(U8 drv_let,I64 type=FSt_REDSEA) {//Very dangerous I64 i,j,ext_base,drv_num,offset,cur_type; CMasterBoot mbr; - CBlkDev *bd=Let2BlkDev(drv_let); + CBlkDev *bd; + drv_let=Let2Let(drv_let); + bd=Let2BlkDev(drv_let); drv_num=bd->first_drv_let-'A'; switch (bd->type) { case BDT_ATA: @@ -17,7 +19,7 @@ Bool DrvTypeSet(U8 drv_let,I64 type=FSt_REDSEA) if (cur_type==5 || cur_type==15) j=i; else { - if (drv_num+'A'==ToUpper(drv_let)) { + if (drv_num+'A'==drv_let) { switch (type) { case FSt_REDSEA: mbr.p[i].type=MBR_PT_REDSEA; diff --git a/Kernel/BlkDev/DskStrA.HC b/Kernel/BlkDev/DskStrA.HC index 55d00ad..2d78581 100644 --- a/Kernel/BlkDev/DskStrA.HC +++ b/Kernel/BlkDev/DskStrA.HC @@ -257,7 +257,7 @@ Bool FileNameChk(U8 *filename) } if (StrLen(filename)>=CDIR_FILENAME_LEN) return FALSE; while (*ptr) - if (!Bt(chars_bmp_filename,*ptr++)) + if (!Bt(char_bmp_filename,*ptr++)) return FALSE; return TRUE; } diff --git a/Kernel/BlkDev/FileSysFAT.HC b/Kernel/BlkDev/FileSysFAT.HC index 0f8bc55..7affbc1 100644 --- a/Kernel/BlkDev/FileSysFAT.HC +++ b/Kernel/BlkDev/FileSysFAT.HC @@ -19,7 +19,7 @@ CDate Dos2CDate(U16 t,U16 d) return Struct2Date(&ds); } -U0 FAT32DrvInit(CDrv *dv) +U0 FAT32Init(CDrv *dv) { CFAT32Boot br32; Bool unlock; @@ -45,18 +45,6 @@ U0 FAT32DrvInit(CDrv *dv) DrvUnlock(dv); } -Bool FAT32DrvValidate(U8 drv_let) -{ - CDrv *dv; - CFAT32Boot br; - if ((dv=Let2Drv(drv_let,FALSE)) && dv->fs_type==FSt_FAT32 && - RBlks(dv,&br,dv->drv_offset,1) && br.signature==0xAA55 && - br.sects==dv->size) - return TRUE; - else - return FALSE; -} - U0 FAT32Fmt(U8 drv_let,Bool quick=TRUE) { CFAT32Boot *br=CAlloc(BLK_SIZE); @@ -115,11 +103,11 @@ U0 FAT32Fmt(U8 drv_let,Bool quick=TRUE) WBlks(dv,fis,dv->drv_offset+br->file_system_info_sect,1); WBlks(dv,br,dv->drv_offset,1); - FAT32DrvInit(dv); + FAT32Init(dv); ClustersAlloc(dv,0,1,FALSE); //Alloc #1 br->root_cluster=ClustersAlloc(dv,0,1,FALSE); WBlks(dv,br,dv->drv_offset,1); - FAT32DrvInit(dv); + FAT32Init(dv); DrvUnlock(dv); } catch DrvUnlock(dv); diff --git a/Kernel/BlkDev/FileSysISO.HC b/Kernel/BlkDev/FileSysISO.HC index 25bf8de..07b9f39 100644 --- a/Kernel/BlkDev/FileSysISO.HC +++ b/Kernel/BlkDev/FileSysISO.HC @@ -42,7 +42,7 @@ Bool ISO1FromName(U8 *dst,U8 *src) src++; if (*src==';') break; - if (Bt(chars_bmp_filename,*src)) { + if (Bt(char_bmp_filename,*src)) { if (j>=CDIR_FILENAME_LEN-1) return FALSE; dst[j++]=*src++; diff --git a/Kernel/BlkDev/FileSysRedSea.HC b/Kernel/BlkDev/FileSysRedSea.HC index 2ea99ef..1a78034 100644 --- a/Kernel/BlkDev/FileSysRedSea.HC +++ b/Kernel/BlkDev/FileSysRedSea.HC @@ -55,7 +55,7 @@ U0 RedSeaFreeLstBuild(CDrv *dv) DrvUnlock(dv); } -U0 RedSeaDrvInit(CDrv *dv) +U0 RedSeaInit(CDrv *dv) { CRedSeaBoot br; Bool unlock; @@ -79,7 +79,7 @@ U0 RedSeaDrvInit(CDrv *dv) DrvUnlock(dv); } -Bool RedSeaDrvValidate(U8 drv_let) +Bool RedSeaValidate(U8 drv_let) { CDrv *dv; CRedSeaBoot br; @@ -119,7 +119,7 @@ U0 RedSeaFmt(U8 drv_let,Bool quick=TRUE) WZeroBlks(dv,dv->drv_offset,i); WBlks(dv,br,dv->drv_offset,1); - RedSeaDrvInit(dv); + RedSeaInit(dv); ClustersAlloc(dv,0,1,FALSE); //Alloc #1 root_dir_blks=MaxI64(1,dv->bd->init_root_dir_blks); @@ -144,7 +144,7 @@ U0 RedSeaFmt(U8 drv_let,Bool quick=TRUE) d_native->datetime=Now; WBlks(dv,root_dir,br->root_cluster,root_dir_blks); - RedSeaDrvInit(dv); + RedSeaInit(dv); DrvUnlock(dv); } catch DrvUnlock(dv); diff --git a/Kernel/Compress.HC b/Kernel/Compress.HC index 304fb0b..103136d 100644 --- a/Kernel/Compress.HC +++ b/Kernel/Compress.HC @@ -253,7 +253,7 @@ U8 *ExpandBuf(CArcCompress *arc,CTask *mem_task=NULL) U8 *res; if (!(CT_NONE<=arc->compression_type<=CT_8_BIT) || - arc->expanded_size>MEM_MAPPED_SPACE) + arc->expanded_size>mem_mapped_space) throw('Compress'); res=MAlloc(arc->expanded_size+1,mem_task); diff --git a/Kernel/Display.HC b/Kernel/Display.HC index a2d8f2d..06abfc2 100644 --- a/Kernel/Display.HC +++ b/Kernel/Display.HC @@ -39,7 +39,7 @@ See also $LK,"GrUpdateScrn",A="MN:GrUpdateScrn"$(). while (text.raw_col % text.cols) RawPutChar(CH_SPACE); - } else if (Bt(chars_bmp_displayable,ch)) { + } else if (Bt(char_bmp_displayable,ch)) { row=text.raw_col/text.cols%text.rows; col=text.raw_col%text.cols; if (!Bt(&sys_run_level,RLf_VGA)) { //if text mode @@ -87,7 +87,7 @@ See also $LK,"GrUpdateScrn",A="MN:GrUpdateScrn"$(). U0 VGAFlush() {//Flush winmgr vga cache, so updates whole scrn. - LBts(&sys_semas[SYS_SEMA_FLUSH_VGA_IMAGE],0); + LBts(&sys_semas[SEMA_FLUSH_VGA_IMAGE],0); } U0 WinDerivedValsUpdate(CTask *task) diff --git a/Kernel/EdLite.HC b/Kernel/EdLite.HC index f42a459..c655be2 100644 --- a/Kernel/EdLite.HC +++ b/Kernel/EdLite.HC @@ -232,7 +232,7 @@ Bool EdLite(U8 *filename,I64 num=1,I64 edf_dof_flags=0) } break; default: - if (Bt(chars_bmp_getkey,ch)) { + if (Bt(char_bmp_printable,ch)) { if (cur_line==&head) { cur_line=MAlloc(sizeof(CLine)); cur_line->line=StrNew(""); @@ -327,11 +327,11 @@ Bool EdLiteFileLine(U8 *fl_file_line,I64 edf_dof_flags=0) U0 FixSet(U8 *filename,I64 line) {//Compiler calls this to set file line for Fix U8 *st=MStrPrint("FL:%s,%d",filename,line); - while (LBts(&sys_semas[SYS_SEMA_FIX],0)) + while (LBts(&sys_semas[SEMA_FIX],0)) Yield; Free(dbg.fix_file_line); dbg.fix_file_line=AStrNew(st); - LBtr(&sys_semas[SYS_SEMA_FIX],0); + LBtr(&sys_semas[SEMA_FIX],0); } Bool Fix(I64 edf_dof_flags=0) @@ -339,10 +339,10 @@ Bool Fix(I64 edf_dof_flags=0) U8 *st; Bool res=FALSE; - while (LBts(&sys_semas[SYS_SEMA_FIX],0)) + while (LBts(&sys_semas[SEMA_FIX],0)) Yield; st=StrNew(dbg.fix_file_line); - LBtr(&sys_semas[SYS_SEMA_FIX],0); + LBtr(&sys_semas[SEMA_FIX],0); if (st) { if (IsRaw) diff --git a/Kernel/SrvCmd.HC b/Kernel/Job.HC similarity index 70% rename from Kernel/SrvCmd.HC rename to Kernel/Job.HC index b46314d..b5f5511 100644 --- a/Kernel/SrvCmd.HC +++ b/Kernel/Job.HC @@ -1,21 +1,21 @@ -U0 SrvCmdDel(CSrvCmd *tmpc) +U0 JobDel(CJob *tmpc) {//Free one cmd node. Free(tmpc->aux_str); Free(tmpc); } -U0 SrvCmdQueDel(CSrvCmd *head) +U0 JobQueDel(CJob *head) { - CSrvCmd *tmpc=head->next,*tmpc1; + CJob *tmpc=head->next,*tmpc1; while (tmpc!=head) { tmpc1=tmpc->next; QueRem(tmpc); - SrvCmdDel(tmpc); + JobDel(tmpc); tmpc=tmpc1; } } -U0 SrvCtrlInit(CSrvCtrl *ctrl) +U0 JobCtrlInit(CJobCtrl *ctrl) { QueInit(&ctrl->next_waiting); QueInit(&ctrl->next_done); @@ -36,34 +36,34 @@ U0 TaskRstAwaitingMsg(CTask *task=NULL) POPFD } -CSrvCmd *TaskExe(CTask *srv,CTask *master,U8 *data,I64 flags) +CJob *TaskExe(CTask *srv,CTask *master,U8 *data,I64 flags) {//Queues a request to compile and execute src code text. - CSrvCmd *res; + CJob *res; if (!data || !TaskValidate(srv) || master && !TaskValidate(master) || srv->popup_task && !Bt(&srv->task_flags,TASKf_FILTER_INPUT)) return NULL; - res=ACAlloc(sizeof(CSrvCmd)); + res=ACAlloc(sizeof(CJob)); res->master_task=master; - res->cmd_code=SVCT_EXE_STR; + res->job_code=JOBT_EXE_STR; res->flags=flags; res->aux_str=AStrNew(data); res->ctrl=&srv->srv_ctrl; PUSHFD CLI - while (LBts(&srv->srv_ctrl.flags,SVCRf_LOCKED)) + while (LBts(&srv->srv_ctrl.flags,JOBCf_LOCKED)) PAUSE if (!TaskValidate(srv)) { - LBtr(&srv->srv_ctrl.flags,SVCRf_LOCKED); + LBtr(&srv->srv_ctrl.flags,JOBCf_LOCKED); POPFD - SrvCmdDel(res); + JobDel(res); return NULL; } else { LBtr(&srv->task_flags,TASKf_IDLE); TaskRstAwaitingMsg(srv); QueIns(res,srv->srv_ctrl.last_waiting); - LBtr(&srv->srv_ctrl.flags,SVCRf_LOCKED); - if (Bt(&flags,SVCf_WAKE_MASTER)) { + LBtr(&srv->srv_ctrl.flags,JOBCf_LOCKED); + if (Bt(&flags,JOBf_WAKE_MASTER)) { Suspend(master); Yield; } @@ -72,22 +72,22 @@ CSrvCmd *TaskExe(CTask *srv,CTask *master,U8 *data,I64 flags) return res; } -CSrvCmd *TaskText(CTask *srv,CTask *master,U8 *data,I64 flags) +CJob *TaskText(CTask *srv,CTask *master,U8 *data,I64 flags) {//Post StdIn text to servant task. Tell who the master task is. - CSrvCmd *res; + CJob *res; CTask *task; if (!data || !TaskValidate(srv) || master && !TaskValidate(master) || srv->popup_task && !Bt(&srv->task_flags,TASKf_FILTER_INPUT)) return NULL; - res=ACAlloc(sizeof(CSrvCmd)); + res=ACAlloc(sizeof(CJob)); res->master_task=master; //in case somebody cares - res->cmd_code=SVCT_TEXT_INPUT; + res->job_code=JOBT_TEXT_INPUT; res->flags=flags; res->aux_str=AStrNew(data); PUSHFD task=srv->last_input_filter_task; - if (Bt(&flags,SVCf_HIGHEST_PRIORITY) || task==srv) { + if (Bt(&flags,JOBf_HIGHEST_PRIORITY) || task==srv) { if (task!=srv) TaskWait(srv); task=Spawn(&InputFilterTask,NULL,"Input Filter",,srv); @@ -101,38 +101,39 @@ CSrvCmd *TaskText(CTask *srv,CTask *master,U8 *data,I64 flags) task=srv->next_input_filter_task; } res->ctrl=&task->srv_ctrl; - while (LBts(&task->srv_ctrl.flags,SVCRf_LOCKED)) + while (LBts(&task->srv_ctrl.flags,JOBCf_LOCKED)) PAUSE if (!TaskValidate(task)) { - SrvCmdDel(res); + JobDel(res); res=NULL; } else { LBtr(&task->task_flags,TASKf_IDLE); TaskRstAwaitingMsg(task); QueIns(res,task->srv_ctrl.last_waiting); - LBtr(&task->srv_ctrl.flags,SVCRf_LOCKED); + LBtr(&task->srv_ctrl.flags,JOBCf_LOCKED); } POPFD return res; } -CSrvCmd *TaskMsg(CTask *_srv,CTask *master,I64 msg_code,I64 a1,I64 a2,I64 flags) +CJob *TaskMsg(CTask *_srv,CTask *master, + I64 msg_code,I64 arg1,I64 arg2,I64 flags) {//Post message to servant task. Tell who the master task is. -//See $LK,"flags",A="MN:SVCf_WAKE_MASTER"$ and $LK,"msg_code",A="MN:MSG_CMD"$. - CSrvCmd *tmpc1,*tmpc; +//See $LK,"flags",A="MN:JOBf_WAKE_MASTER"$ and $LK,"msg_code",A="MN:MSG_CMD"$. + CJob *tmpc1,*tmpc; CTask *srv=_srv; if (!TaskValidate(srv) || master && !TaskValidate(master)|| srv->popup_task && !Bt(&srv->task_flags,TASKf_FILTER_INPUT)) return NULL; - tmpc=ACAlloc(sizeof(CSrvCmd)); + tmpc=ACAlloc(sizeof(CJob)); tmpc->master_task=master; - tmpc->cmd_code=SVCT_MSG; + tmpc->job_code=JOBT_MSG; tmpc->msg_code=AbsI64(msg_code); //negative means do a down and up - tmpc->aux1=a1; - tmpc->aux2=a2; + tmpc->aux1=arg1; + tmpc->aux2=arg2; tmpc->flags=flags; PUSHFD - if (Bt(&sys_semas[SYS_SEMA_RECORD_MACRO],0) && + if (Bt(&sys_semas[SEMA_RECORD_MACRO],0) && srv!=sys_macro_task && msg_code==MSG_KEY_DOWN) { tmpc1=AMAllocIdent(tmpc); CLI @@ -140,54 +141,54 @@ CSrvCmd *TaskMsg(CTask *_srv,CTask *master,I64 msg_code,I64 a1,I64 a2,I64 flags) } CLI while (Bt(&srv->task_flags,TASKf_FILTER_INPUT) && - !Bt(&flags,SVCf_DONT_FILTER)) + !Bt(&flags,JOBf_DONT_FILTER)) srv=srv->next_input_filter_task; tmpc->ctrl=&srv->srv_ctrl; - while (LBts(&srv->srv_ctrl.flags,SVCRf_LOCKED)) + while (LBts(&srv->srv_ctrl.flags,JOBCf_LOCKED)) PAUSE if (!TaskValidate(srv)) { - SrvCmdDel(tmpc); + JobDel(tmpc); tmpc=NULL; } else { LBtr(&srv->task_flags,TASKf_IDLE); TaskRstAwaitingMsg(srv); QueIns(tmpc,srv->srv_ctrl.last_waiting); - LBtr(&srv->srv_ctrl.flags,SVCRf_LOCKED); + LBtr(&srv->srv_ctrl.flags,JOBCf_LOCKED); } POPFD if (msg_code<0) //Down-Up - TaskMsg(_srv,master,-msg_code+1,a1,a2,flags); + TaskMsg(_srv,master,-msg_code+1,arg1,arg2,flags); return tmpc; } -Bool JobResScan(CSrvCmd *rqst=NULL,I64 *_res=NULL) +Bool JobResScan(CJob *rqst=NULL,I64 *_res=NULL) {//Check rqst complete, return with or without. - CSrvCtrl *ctrl; - CSrvCmd *tmpc,*tmpc1; - if (!rqst || Bt(&rqst->flags,SVCf_DONE)) { + CJobCtrl *ctrl; + CJob *tmpc,*tmpc1; + if (!rqst || Bt(&rqst->flags,JOBf_DONE)) { if (!rqst || rqst->master_task) ctrl=&Fs->srv_ctrl; else ctrl=rqst->ctrl; PUSHFD CLI - while (LBts(&ctrl->flags,SVCRf_LOCKED)) + while (LBts(&ctrl->flags,JOBCf_LOCKED)) PAUSE tmpc1=&ctrl->next_done; tmpc=tmpc1->next; while (tmpc!=tmpc1) { if (!rqst || rqst==tmpc) { QueRem(tmpc); - LBtr(&ctrl->flags,SVCRf_LOCKED); + LBtr(&ctrl->flags,JOBCf_LOCKED); POPFD if (_res) *_res=tmpc->res; - SrvCmdDel(tmpc); + JobDel(tmpc); return TRUE; } tmpc=tmpc->next; } - LBtr(&ctrl->flags,SVCRf_LOCKED); + LBtr(&ctrl->flags,JOBCf_LOCKED); POPFD } if (_res) @@ -195,10 +196,10 @@ Bool JobResScan(CSrvCmd *rqst=NULL,I64 *_res=NULL) return FALSE; } -I64 JobResGet(CSrvCmd *rqst=NULL) +I64 JobResGet(CJob *rqst=NULL) {//See $LK,"::/Demo/MultiCore/Lock.HC"$ I64 res; - CSrvCmd *tmpc1; + CJob *tmpc1; if (!rqst) { tmpc1=&Fs->srv_ctrl.next_done; while (tmpc1==tmpc1->next) { @@ -206,7 +207,7 @@ I64 JobResGet(CSrvCmd *rqst=NULL) Yield; } } else { - while (!Bt(&rqst->flags,SVCf_DONE)) { + while (!Bt(&rqst->flags,JOBf_DONE)) { LBts(&Fs->task_flags,TASKf_IDLE); Yield; } @@ -220,7 +221,7 @@ I64 JobResGet(CSrvCmd *rqst=NULL) U0 TaskWait(CTask *task=NULL,Bool cmd_line_pmt=FALSE) {//Wait for idle. CTask *task1; - CSrvCmd *tmpc1; + CJob *tmpc1; if (!task) task=Fs; if (TaskValidate(task)) { PUSHFD @@ -238,48 +239,47 @@ U0 TaskWait(CTask *task=NULL,Bool cmd_line_pmt=FALSE) } } -U0 PostMsg(CTask *task,I64 msg_code,I64 a1,I64 a2,I64 flags=0) +U0 PostMsg(CTask *task,I64 msg_code,I64 arg1,I64 arg2,I64 flags=0) {//Post message to a task and return immediately. See $LK,"msg_code",A="MN:MSG_CMD"$. if (TaskValidate(task)) { if (Bt(&task->task_flags,TASKf_INPUT_FILTER_TASK)) - TaskMsg(task->last_input_filter_task,NULL,msg_code,a1,a2, - flags|1<last_input_filter_task,NULL,msg_code,arg1,arg2, + flags|1<flags,SVCRf_LOCKED. - CSrvCmd *tmpc=ctrl->next_waiting; +I64 JobRunOne(I64 run_flags,CJobCtrl *ctrl) +{//Called with ctrl->flags,JOBCf_LOCKED. + CJob *tmpc=ctrl->next_waiting; CTask *master; I64 res,flags=tmpc->flags,old_flags=GetRFlags; - if (Bt(&flags,SVCf_EXIT_ON_COMPLETE)) - res=SCR_EXIT; + if (Bt(&flags,JOBf_EXIT_ON_COMPLETE)) + res=JOB_EXIT; else - res=SCR_CONT; - switch (tmpc->cmd_code) { - case SVCT_SPAWN_TASK: + res=JOB_CONT; + switch (tmpc->job_code) { + case JOBT_SPAWN_TASK: QueRem(tmpc); - LBts(&tmpc->flags,SVCf_DISPATCHED); - tmpc->servant_cpu_num=Gs->num; - LBtr(&ctrl->flags,SVCRf_LOCKED); + LBts(&tmpc->flags,JOBf_DISPATCHED); + LBtr(&ctrl->flags,JOBCf_LOCKED); if (tmpc->aux_str) tmpc->spawned_task=Spawn(tmpc->addr,tmpc->fun_arg, tmpc->aux_str,,tmpc->aux1,tmpc->aux2,tmpc->flags); @@ -287,11 +287,10 @@ I64 SrvCmdRunOne(I64 run_flags,CSrvCtrl *ctrl) tmpc->spawned_task=Spawn(tmpc->addr,tmpc->fun_arg, "Unnamed",,tmpc->aux1,tmpc->aux2,tmpc->flags); break; - case SVCT_CALL: + case JOBT_CALL: QueRem(tmpc); - LBts(&tmpc->flags,SVCf_DISPATCHED); - tmpc->servant_cpu_num=Gs->num; - LBtr(&ctrl->flags,SVCRf_LOCKED); + LBts(&tmpc->flags,JOBf_DISPATCHED); + LBtr(&ctrl->flags,JOBCf_LOCKED); SetRFlags(run_flags); LBtr(&Fs->task_flags,TASKf_IDLE); try @@ -300,11 +299,10 @@ I64 SrvCmdRunOne(I64 run_flags,CSrvCtrl *ctrl) Fs->catch_except=TRUE; SetRFlags(old_flags); break; - case SVCT_EXE_STR: + case JOBT_EXE_STR: QueRem(tmpc); - LBts(&tmpc->flags,SVCf_DISPATCHED); - tmpc->servant_cpu_num=Gs->num; - LBtr(&ctrl->flags,SVCRf_LOCKED); + LBts(&tmpc->flags,JOBf_DISPATCHED); + LBtr(&ctrl->flags,JOBCf_LOCKED); SetRFlags(run_flags); LBtr(&Fs->task_flags,TASKf_IDLE); try @@ -314,63 +312,63 @@ I64 SrvCmdRunOne(I64 run_flags,CSrvCtrl *ctrl) SetRFlags(old_flags); break; default: - res=SCR_DONE; + res=JOB_DONE; } if (res) { if (master=tmpc->master_task) { - if (!Bt(&flags,SVCf_FREE_ON_COMPLETE)) { + if (!Bt(&flags,JOBf_FREE_ON_COMPLETE)) { CLI - while (LBts(&master->srv_ctrl.flags,SVCRf_LOCKED)) + while (LBts(&master->srv_ctrl.flags,JOBCf_LOCKED)) PAUSE QueIns(tmpc,master->srv_ctrl.last_done); - LBts(&tmpc->flags,SVCf_DONE); - LBtr(&master->srv_ctrl.flags,SVCRf_LOCKED); + LBts(&tmpc->flags,JOBf_DONE); + LBtr(&master->srv_ctrl.flags,JOBCf_LOCKED); SetRFlags(old_flags); } - if (Bt(&flags,SVCf_FOCUS_MASTER) && + if (Bt(&flags,JOBf_FOCUS_MASTER) && !Bt(&master->win_inhibit,WIf_SELF_FOCUS)) sys_focus_task=master; - if (Bt(&flags,SVCf_WAKE_MASTER)) + if (Bt(&flags,JOBf_WAKE_MASTER)) Suspend(master,FALSE); } - if (Bt(&flags,SVCf_FREE_ON_COMPLETE)) - SrvCmdDel(tmpc); + if (Bt(&flags,JOBf_FREE_ON_COMPLETE)) + JobDel(tmpc); else if (!master) { CLI - while (LBts(&ctrl->flags,SVCRf_LOCKED)) + while (LBts(&ctrl->flags,JOBCf_LOCKED)) Yield; QueIns(tmpc,ctrl->last_done); - LBts(&tmpc->flags,SVCf_DONE); - LBtr(&ctrl->flags,SVCRf_LOCKED); + LBts(&tmpc->flags,JOBf_DONE); + LBtr(&ctrl->flags,JOBCf_LOCKED); SetRFlags(old_flags); } } return res; } -I64 SrvCmdsHandler(I64 run_flags,CTask *task=NULL) +I64 JobsHndlr(I64 run_flags,CTask *task=NULL) {//Handle all waiting cmds and return. I64 cnt=0,old_flags=GetRFlags; if (!task) task=Fs; while (TRUE) { CLI - while (LBts(&task->srv_ctrl.flags,SVCRf_LOCKED)) + while (LBts(&task->srv_ctrl.flags,JOBCf_LOCKED)) PAUSE if (task->srv_ctrl.next_waiting!=&task->srv_ctrl) - switch (SrvCmdRunOne(run_flags,&task->srv_ctrl)) { - case SCR_CONT: + switch (JobRunOne(run_flags,&task->srv_ctrl)) { + case JOB_CONT: cnt++; break; - case SCR_EXIT: + case JOB_EXIT: Exit; - case SCR_DONE: - goto sch_done; + case JOB_DONE: + goto jh_done; } else - goto sch_done; + goto jh_done; } -sch_done: - LBtr(&task->srv_ctrl.flags,SVCRf_LOCKED); +jh_done: + LBtr(&task->srv_ctrl.flags,JOBCf_LOCKED); SetRFlags(old_flags); return cnt; } @@ -378,15 +376,15 @@ sch_done: I64 PopUp(U8 *buf,CTask *parent=NULL,CTask **_pu_task=NULL) {//Execute code in $LK,"PopUp",A="MN:PopUp"$ task. I64 res; - CSrvCmd *tmpc; + CJob *tmpc; CTask *task=Spawn(&SrvCmdLine,NULL,"Servant",,parent); if (!parent) { - TaskExe(task,parent,buf,1<popup_task=task; - tmpc=TaskExe(task,parent,buf,1<popup_task=NULL; @@ -409,13 +407,13 @@ I64 Adam(U8 *fmt,...) {//Make adam_task execute code. I64 res; U8 *buf=StrPrintJoin(NULL,fmt,argc,argv); - CSrvCmd *tmpc; + CJob *tmpc; if (Fs==adam_task) { tmpc=TaskExe(adam_task,Fs,buf,0); - SrvCmdsHandler(GetRFlags); + JobsHndlr(GetRFlags); } else { TaskWait(adam_task); - tmpc=TaskExe(adam_task,Fs,buf,1<task_flags,TASKf_INPUT_FILTER_TASK)) ExePrint("%s",buf); else - TaskText(Fs,NULL,buf,1<$$FG$$ for cur drv) Boot Drv:"; - ch=ToUpper(GetChar); + ch=Let2Let(GetChar); if ('A'<=ch<='Z') c->boot_drv_let=ch; else @@ -109,7 +110,7 @@ U0 KernelCfgOptions(CKernelCfg *c) case CFG_AUTO_MOUNT_IDE: if (state) { "First HD Drive Let:"; - c->auto_mount_ide_hd_let=ToUpper(GetChar); + c->auto_mount_ide_hd_let=Let2Let(GetChar); if (!('A'<=c->auto_mount_ide_hd_let<='Z')) c->auto_mount_ide_hd_let=0; '\n'; @@ -119,7 +120,7 @@ U0 KernelCfgOptions(CKernelCfg *c) "First HD Drive:%C\n",'C'; "First CD Drive Let:"; - c->auto_mount_ide_cd_let=ToUpper(GetChar); + c->auto_mount_ide_cd_let=Let2Let(GetChar); if (!('A'<=c->auto_mount_ide_cd_let<='Z')) c->auto_mount_ide_cd_let=0; '\n'; diff --git a/Kernel/KDate.HC b/Kernel/KDate.HC index 38ac24c..b56ee58 100644 --- a/Kernel/KDate.HC +++ b/Kernel/KDate.HC @@ -139,7 +139,7 @@ U0 NowDateTimeStruct(CDateStruct *_ds) MemSet(_ds,0,sizeof(CDateStruct)); PUSHFD CLI - while (LBts(&sys_semas[SYS_SEMA_SYS_DATE],0)) + while (LBts(&sys_semas[SEMA_SYS_DATE],0)) PAUSE OutU8(0x70,0x0A); @@ -172,7 +172,7 @@ U0 NowDateTimeStruct(CDateStruct *_ds) else is_bcd=TRUE; - LBtr(&sys_semas[SYS_SEMA_SYS_DATE],0); + LBtr(&sys_semas[SEMA_SYS_DATE],0); POPFD if (is_bcd) for (i=2;i<9;i++) diff --git a/Kernel/KDbg.HC b/Kernel/KDbg.HC index 41aedc5..48708ba 100644 --- a/Kernel/KDbg.HC +++ b/Kernel/KDbg.HC @@ -1,11 +1,11 @@ Bool ChkPtr(U8 *ptr) {//Check if addr is valid ptr. - if (sys_heap_base<=ptr<=MEM_MAPPED_SPACE) { + if (mem_heap_base<=ptr<=mem_mapped_space) { if (*MemPageTable(ptr)&1) return TRUE; else return FALSE; - } else if (ptrstk->stk_base<=ptr<= (&task->stk->stk_base)(U8 *)+task->stk->stk_size) res=TRUE; - } else if (sys_heap_base<=ptr<=sys_heap_limit) + } else if (mem_heap_base<=ptr<=mem_heap_limit) res=TRUE; POPFD return res; @@ -214,7 +214,7 @@ U0 Da(U8 **addr,I64 cnt=0x10) } } -U0 RawPrint(I64 ms=100,U8 *fmt,...) +U0 RawPrint(I64 mS=100,U8 *fmt,...) {//Print using $LK,"Raw",A="MN:Raw"$ scrn output for a length of time. //$BK,1$Your heap must be good.$BK,0$ U8 *buf=StrPrintJoin(NULL,fmt,argc,argv); @@ -224,14 +224,14 @@ U0 RawPrint(I64 ms=100,U8 *fmt,...) old_raw=Raw(ON); old_input_filter=LBtr(&Fs->task_flags,TASKf_INPUT_FILTER_TASK); "%s",buf; - BusyWait(ms<<10); + Busy(mS<<10); POPFD LBEqu(&Fs->task_flags,TASKf_INPUT_FILTER_TASK,old_input_filter); Raw(old_raw); Free(buf); } -U0 RawD(I64 ms=100,U8 *addr,I64 cnt=0x80) +U0 RawD(I64 mS=100,U8 *addr,I64 cnt=0x80) {//Dumps a block of mem using $LK,"Raw",A="MN:Raw"$ //scrn output for a fixed length //of time. @@ -241,13 +241,13 @@ U0 RawD(I64 ms=100,U8 *addr,I64 cnt=0x80) old_raw=Raw(ON); old_input_filter=LBtr(&Fs->task_flags,TASKf_INPUT_FILTER_TASK); D(addr,cnt); - BusyWait(ms<<10); + Busy(mS<<10); POPFD LBEqu(&Fs->task_flags,TASKf_INPUT_FILTER_TASK,old_input_filter); Raw(old_raw); } -U0 RawDm(I64 ms=100,U8 *addr,I64 cnt=0x80) +U0 RawDm(I64 mS=100,U8 *addr,I64 cnt=0x80) {//Dumps a block of mem using $LK,"Raw",A="MN:Raw"$ //scrn output for a fixed length //of time. @@ -257,7 +257,7 @@ U0 RawDm(I64 ms=100,U8 *addr,I64 cnt=0x80) old_raw=Raw(ON); old_input_filter=LBtr(&Fs->task_flags,TASKf_INPUT_FILTER_TASK); Dm(addr,cnt); - BusyWait(ms<<10); + Busy(mS<<10); POPFD LBEqu(&Fs->task_flags,TASKf_INPUT_FILTER_TASK,old_input_filter); Raw(old_raw); @@ -512,7 +512,7 @@ U0 DbgHelp() ">1+2*3+&Print;\t\t\t//Show calculation res.\n" ">*(0x70000)(I64 *)=0x123456789;\t//Assign value to 0x70000-0x70007.\n" ">_RAX=0x1234;\t\t\t//Set RAX to 0x1234.\n" - ">_RIP=&SysThrowBreak;\t\t//Set RIP.\n" + ">_RIP=&Break;\t\t//Set RIP.\n" ">I64 i;\t\t\t\t//Declare variable.\n" ">i=_RCX+_RDX;\t\t\t//Assign to variable.\n" ">U(&Print+0x8);\t\t\t//Unassemble Print.\n" @@ -535,12 +535,15 @@ U0 Dbg2() Bool old_win_inhibit,old_waiting_msg,old_single; I64 i,old_getstr2; U8 buf[200]; - if (IsRaw) { - i=Fs->rip; - Ui(buf,&i); - "%s",buf; + if (dbg.panic) { + if (IsRaw) { + i=Fs->rip; + Ui(buf,&i); + "%s",buf; + } else + U(Fs->rip,1); } else - U(Fs->rip,1); + dbg.panic=TRUE; old_waiting_msg=LBtr(&Fs->task_flags,TASKf_AWAITING_MSG); old_win_inhibit=Fs->win_inhibit; Fs->win_inhibit=WIG_USER_TASK_DFT; @@ -549,7 +552,7 @@ U0 Dbg2() old_getstr2=fp_getstr2; fp_getstr2=&SysGetStr2; old_single=SingleUser(OFF); - while (!mouse.install_attempts) + while (!ms_hard.install_attempts) Yield; SingleUser(old_single); UserTaskCont; @@ -575,7 +578,7 @@ U0 Fault3(I64 fault_num,I64 fault_err_code) } "\n\tTempleOS Debugger\n\n" ">Help;\t//For help.\n\n"; - Beep(500,TRUE); + Beep(62,TRUE); if (fault_num==I_DBG) { if (dbg.msg) { "\n!!! %s",dbg.msg; @@ -584,7 +587,8 @@ U0 Fault3(I64 fault_num,I64 fault_err_code) " !!!\n\n"; } } - CallerRep; + if (dbg.panic) + CallerRep; Dbg2; POPFD } @@ -631,12 +635,18 @@ U0 Fault2(I64 fault_num,I64 fault_err_code) Exit; } -U0 Dbg(U8 *msg=NULL,I64 msg_num=0) -{//Enters the debugger.Can be used as a panic. +U0 Panic(U8 *msg=NULL,I64 msg_num=0,Bool panic=TRUE) +{//Enter the debugger with panic? PUSHFD CLI dbg.msg=msg; dbg.msg_num=msg_num; + dbg.panic=panic; INT I_DBG POPFD } + +U0 Dbg(U8 *msg=NULL,I64 msg_num=0) +{//Enter debugger, no panic. + Panic(msg,msg_num,FALSE); +} diff --git a/Kernel/KDefine.HC b/Kernel/KDefine.HC index 3f728dd..4ad7130 100644 --- a/Kernel/KDefine.HC +++ b/Kernel/KDefine.HC @@ -164,9 +164,9 @@ CColorROPU16 Str2ColorU16(U8 *st) while (TRUE) { if (!*st||StrOcc(str2color_lst,*st)) return res; - if (Bt(chars_bmp_alpha,*st)) { + if (Bt(char_bmp_alpha,*st)) { ptr=st; - while (Bt(chars_bmp_alpha_numeric,*ptr)) + while (Bt(char_bmp_alpha_numeric,*ptr)) ptr++; st2=ptr2=MAlloc(ptr-st+1); while (sttask_name,"Adam Task CPU#0"); + StrCpy(Fs->task_name,"Adam Task CPU00"); StrCpy(Fs->task_title,Fs->task_name); Fs->title_src=TTS_TASK_NAME; Fs->win_right=text.cols-2; @@ -152,7 +151,7 @@ U0 KernelMain() Core0Init; IntInit1; - //Before this point use $LK,"Snd",A="MN:Snd"$() and $LK,"BusyWait",A="MN:BusyWait"$() + //Before this point use $LK,"Snd",A="MN:Snd"$() and $LK,"Busy",A="MN:Busy"$() //to debug. After this point, use $LK,"RawPrint",A="MN:RawPrint"$() LBts(&sys_run_level,RLf_RAW); "TempleOS V%5.3f\t%D %T\n\n", @@ -165,7 +164,7 @@ U0 KernelMain() IntsInit; "Enable IRQ's\n"; SetRFlags(RFLAGG_NORMAL); - BusyWait(2000); + Busy(2000); IntInit2; LBts(&sys_run_level,RLf_INTERRUPTS); @@ -185,10 +184,10 @@ U0 KernelMain() "LBts(&sys_run_level,RLf_MP);"); }; - KbdMouseVarsInit; - IPVarsInit; + KbdMsInit; + MsInit; KbdInit; - Spawn(&MouseDriverInstall); + Spawn(&MsHardDrvrInstall); "Loading Compiler\n"; Cd("/Compiler"); diff --git a/Kernel/KExcept.HC b/Kernel/KExcept.HC index a16853a..ae2d24d 100644 --- a/Kernel/KExcept.HC +++ b/Kernel/KExcept.HC @@ -14,13 +14,13 @@ _TEST_EXCEPT:: MOV R15,U64 CExcept.r15[RAX] PUSH U64 CExcept.rflags[RAX] POPFD - JMP U64 CExcept.handler_catch[RAX] + JMP U64 CExcept.hndlr_catch[RAX] _TAKE_EXCEPT:: XOR RAX,RAX MOV RAX,FS:U64 CTask.last_except[RAX] MOV RSP,U64 CExcept.rsp[RAX] - JMP U64 CExcept.handler_untry[RAX] + JMP U64 CExcept.hndlr_untry[RAX] _SAVE_EXCEPT_REGS:: PUSH RBP @@ -45,9 +45,9 @@ _extern _SAVE_EXCEPT_REGS U0 SaveExceptRegs(CExcept *t); U0 PutExcept(Bool catch_it=TRUE) {//Print exception msg and catch exception. "Except:%c:",Fs->except_ch; - "%P:%P:%P:%P:%P:%P\n",Fs->except_caller1,Fs->except_caller2, - Fs->except_caller3,Fs->except_caller4,Fs->except_caller5, - Fs->except_caller6,Fs->except_caller7,Fs->except_caller8; + "%P:%P:%P:%P:%P:%P\n",Fs->except_callers[0],Fs->except_callers[1], + Fs->except_callers[2],Fs->except_callers[3],Fs->except_callers[4], + Fs->except_callers[5],Fs->except_callers[6],Fs->except_callers[7]; Fs->catch_except=catch_it; } @@ -65,8 +65,8 @@ U0 SysTry(U8 *catch_start,U8 *untry_start) { I64 *rbp=GetRBP; CExcept *tmpt=MAlloc(sizeof(CExcept)); - tmpt->handler_catch=catch_start; - tmpt->handler_untry=untry_start; + tmpt->hndlr_catch=catch_start; + tmpt->hndlr_untry=untry_start; tmpt->rsp=rbp(U8 *)+sizeof(CTryStk); tmpt->rbp=*rbp; tmpt->rflags=GetRFlags; @@ -86,22 +86,17 @@ U0 throw(I64 ch=0,Bool no_log=FALSE) //In the catcher, fetch ch from Fs->except_ch. CExcept *tmpt=Fs->last_except; Bool was_raw; + I64 i; Fs->except_ch=ch; - Fs->except_caller1=Caller(1); - Fs->except_caller2=Caller(2); - Fs->except_caller3=Caller(3); - Fs->except_caller4=Caller(4); - Fs->except_caller5=Caller(5); - Fs->except_caller6=Caller(6); - Fs->except_caller7=Caller(7); - Fs->except_caller8=Caller(8); + for (i=0;iexcept_callers[i]=Caller(i+1); Fs->except_rbp=GetRBP; Fs->catch_except=FALSE; if (!no_log) - AdamLog("Except:%c:%p:%p:%p:%p:%p:%p\n",ch,Fs->except_caller1, - Fs->except_caller2,Fs->except_caller3,Fs->except_caller4, - Fs->except_caller5,Fs->except_caller6,Fs->except_caller7, - Fs->except_caller8); + AdamLog("Except:%c:%p:%p:%p:%p:%p:%p\n",ch,Fs->except_callers[0], + Fs->except_callers[1],Fs->except_callers[2],Fs->except_callers[3], + Fs->except_callers[4],Fs->except_callers[5],Fs->except_callers[6], + Fs->except_callers[7]); while (Fs->next_except!=&Fs->next_except) { TestExcept; if (Fs->catch_except) @@ -113,17 +108,17 @@ U0 throw(I64 ch=0,Bool no_log=FALSE) } was_raw=Raw(ON); PutExcept(FALSE); - Dbg("Unhandled Exception"); + Panic("Unhandled Exception"); Raw(was_raw); } #exe {Option(OPTf_NO_REG_VAR,OFF);}; -U0 SysThrowBreak() -{ +U0 Break() +{//Send . if (Bt(&Fs->task_flags,TASKf_BREAK_TO_SHIFT_ESC)) Msg(MSG_KEY_DOWN,CH_SHIFT_ESC,0x20100000201); - else {//TODO: Might want lock + else { Fs->wake_jiffy=0; TaskRstAwaitingMsg; DrvsRelease(); @@ -133,17 +128,6 @@ U0 SysThrowBreak() } } -U0 ThrowBreak(CTask *task=NULL) -{//Can be used to exit an app, but not a task. - if (task && task!=Fs) { - if (!TaskValidate(task)) return; -//TODO: Might want lock - sys_focus_task=task; - LBts(sys_ctrl_alt_flags,SYSf_CTRL_ALT_C); - } else - SysThrowBreak; -} - Bool BreakLock(CTask *task=NULL) {//Disables . if (!task) task=Fs; @@ -157,9 +141,9 @@ Bool BreakUnlock(CTask *task=NULL) res=LBtr(&task->task_flags,TASKf_BREAK_LOCKED); if (LBtr(&task->task_flags,TASKf_PENDING_BREAK)) { if (task==Fs) - ThrowBreak; + Break; else - task->rip=&ThrowBreak; + task->rip=&Break; } return res; } diff --git a/Kernel/KExts.HC b/Kernel/KExts.HC index 4abc398..1f40687 100644 --- a/Kernel/KExts.HC +++ b/Kernel/KExts.HC @@ -10,7 +10,8 @@ import Bool Ed(U8 *link_st,I64 edf_dof_flags=0); extern U0 AdamErr(U8 *fmt,...); extern U0 AdamLog(U8 *fmt,...); extern I64 BIOSTotalMem(); -extern I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free); +extern I64 BlkDevAdd(CBlkDev *bd,I64 prt_num=MIN_I64, + Bool whole_drv,Bool make_free); extern CBlkDev *BlkDevChk(CBlkDev *bd,Bool except=TRUE); extern Bool BlkDevLock(CBlkDev *bd); extern CBlkDev *BlkDevNextFreeSlot(U8 first_drv_let,I64 type); @@ -19,7 +20,6 @@ extern U0 BlkDevsRelease(); extern U8 *Caller(I64 num=1); extern U8 *CatPrint(U8 *_dst,U8 *fmt,...); extern Bool Cd(U8 *dirname=NULL,Bool make_dirs=FALSE); -extern U0 Dbg(U8 *msg=NULL,I64 msg_num=0); extern U0 DbgHelp(); extern U8 *Define(U8 *dname); extern I64 DefineMatch(U8 *needle,U8 *haystack_lst_dname,I64 flags=0); @@ -40,9 +40,9 @@ extern I64 FAT32AllocClusters(CDrv *dv,I64 c,I64 cnt); extern I64 FAT32AllocContiguousClusters(CDrv *dv,I64 cnt); extern Bool FAT32DirNew(CDrv *dv,U8 *cur_dir,CDirEntry *tmpde, Bool free_old_chain); -extern U0 FAT32DrvInit(CDrv *dv); extern Bool FAT32FileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name, CDirEntry *_res,I64 fuf_flags=0); +extern U0 FAT32Init(CDrv *dv); extern U0 FClose(CFile *f); extern CFile *FOpen(U8 *filename,U8 *flags,I64 cnt=0); extern Bool FRBlks(CFile *f,U8 *buf,I64 blk=FFB_NEXT_BLK,I64 cnt=1); @@ -59,18 +59,24 @@ extern CHeapCtrl *HeapCtrlInit(CHeapCtrl *hc=NULL, CTask *task=NULL,CBlkPool *bp); extern Bool ISO1FileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name, CDirEntry *_res,I64 fuf_flags=0); -extern Bool ISODrvInit(CDrv *dv,I64 blk); +extern Bool ISOInit(CDrv *dv,I64 blk); extern Bool IsDbgMode(); extern Bool IsDir(U8 *dir_name); extern Bool IsRaw(); +extern U0 JobCtrlInit(CJobCtrl *ctrl); +extern U0 JobDel(CJob *tmpc); +extern U0 JobQueDel(CJob *head); +extern I64 JobsHndlr(I64 run_flags,CTask *task=NULL); extern CBlkDev *Let2BlkDev(U8 drv_let=0,Bool except=TRUE); extern I64 Let2BlkDevType(U8 drv_let); extern CDrv *Let2Drv(U8 drv_let=0,Bool except=TRUE); +extern U8 Let2Let(U8 drv_let=0); extern U0 MPInt(U8 num,I64 cpu_num=1); extern U8 *MStrPrint(U8 *fmt,...); extern Bool MkDir(U8 *filename,I64 entry_cnt=0); -extern U0 MouseIPSet(I64 x,I64 y,I64 z,I64 l,I64 r); -extern U0 Msg(I64 msg_code,I64 a1,I64 a2,I64 flags=0); +extern U0 MsHardSet(I64 x,I64 y,I64 z,I64 l,I64 r); +extern U0 Msg(I64 msg_code,I64 arg1,I64 arg2,I64 flags=0); +extern U0 Panic(U8 *msg=NULL,I64 msg_num=0,Bool panic=TRUE); extern I64 PopUp(U8 *buf,CTask *parent=NULL,CTask **_pu_task=NULL); extern U0 Print(U8 *fmt,...); extern U0 PutChars(U64 ch); @@ -79,24 +85,20 @@ extern Bool RBlks(CDrv *dv,U8 *buf, I64 blk, I64 cnt); extern I64 RedSeaAllocClusters(CDrv *dv,I64 cnt); extern Bool RedSeaDirNew(CDrv *dv,U8 *cur_dir,CDirEntry *tmpde, Bool free_old_chain); -extern U0 RedSeaDrvInit(CDrv *dv); -extern Bool RedSeaDrvValidate(U8 drv_let); extern Bool RedSeaFileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name, CDirEntry *_res,I64 fuf_flags=0); extern U0 RedSeaFmt(U8 drv_let,Bool quick=TRUE); extern U0 RedSeaFreeFreeLst(CDrv *dv); +extern U0 RedSeaInit(CDrv *dv); +extern Bool RedSeaValidate(U8 drv_let); extern CTask *SpawnQue(U0 (*fp_addr)(U8 *data),U8 *data=NULL, U8 *task_name=NULL,I64 target_cpu,CTask *parent=NULL, //NULL means adam - I64 stk_size=0,I64 flags=1<code_heap),*dst=res; diff --git a/Kernel/KLoad.HC b/Kernel/KLoad.HC index cd99443..e95450a 100644 --- a/Kernel/KLoad.HC +++ b/Kernel/KLoad.HC @@ -240,11 +240,11 @@ CBinFile *Load(U8 *filename,I64 ld_flags=0,CBinFile *bfh_addr=INVALID_PTR) U0 LoadKernel() { HashGenericAdd(KERNEL_MODULE_NAME,HTT_MODULE|HTF_PUBLIC, - sys_boot_base-sizeof(CBinFile)); + mem_boot_base-sizeof(CBinFile)); //Abs patches done here $LK,"CPatchTableAbsAddr",A="FF:D:/Kernel/KStart32.HC,CPatchTableAbsAddr"$. - LoadPass1(sys_boot_patch_table_base,sys_boot_base,LDF_NO_ABSS|LDF_SILENT); + LoadPass1(sys_boot_patch_table_base,mem_boot_base,LDF_NO_ABSS|LDF_SILENT); //No main routines - // LoadPass2(sys_boot_patch_table_base,sys_boot_base,0); + // LoadPass2(sys_boot_patch_table_base,mem_boot_base,0); } diff --git a/Kernel/KMisc.HC b/Kernel/KMisc.HC index 852d9c7..eadf147 100644 --- a/Kernel/KMisc.HC +++ b/Kernel/KMisc.HC @@ -44,15 +44,15 @@ I64 BCnt(I64 d) return res; } -U0 IntCore0TimerHandler(CTask *) -{//Called from $LK,"IntCore0TimerHandler",A="FF:::/Kernel/KInts.HC,IntCore0TimerHandler"$ +U0 IntCore0TimerHndlr(CTask *) +{//Called from $LK,"IntCore0TimerHndlr",A="FF:::/Kernel/KInts.HC,IntCore0TimerHndlr"$ I64 i; if (mp_cnt>1) - while (LBts(&sys_semas[SYS_SEMA_SYS_TIMER],0)) + while (LBts(&sys_semas[SEMA_SYS_TIMER],0)) PAUSE lock cnts.jiffies++; cnts.timer+=SYS_TIMER0_PERIOD+1; - LBtr(&sys_semas[SYS_SEMA_SYS_TIMER],0); + LBtr(&sys_semas[SEMA_SYS_TIMER],0); for (i=1;i1) - while (LBts(&sys_semas[SYS_SEMA_SYS_TIMER],0)) + while (LBts(&sys_semas[SEMA_SYS_TIMER],0)) PAUSE OutU8(0x43,0); //Latch Timer0 if ((i=InU8(0x40)+InU8(0x40)<<8)==SYS_TIMER0_PERIOD) { @@ -72,7 +72,7 @@ I64 SysTimerRead() i=-1; } res=cnts.timer+SYS_TIMER0_PERIOD-i; - LBtr(&sys_semas[SYS_SEMA_SYS_TIMER],0); + LBtr(&sys_semas[SEMA_SYS_TIMER],0); POPFD return res; } @@ -133,7 +133,7 @@ Bool Blink(F64 Hz=2.5) return ToI64(cnts.jiffies*2*Hz/JIFFY_FREQ)&1; } -U0 BusyWait(I64 æS) +U0 Busy(I64 æS) {//Loosely timed. I64 i; if (cnts.HPET_freq) { @@ -152,63 +152,79 @@ U0 SleepUntil(I64 wake_jiffy) LBEqu(&Fs->task_flags,TASKf_IDLE,old_idle); } -U0 Sleep(I64 ms) +U0 Sleep(I64 mS) {//Not for power-saving. It is to make a program pause without hogging the CPU. - if (!ms) + if (!mS) Yield; else - SleepUntil(cnts.jiffies+ms*JIFFY_FREQ/1000); + SleepUntil(cnts.jiffies+mS*JIFFY_FREQ/1000); } -U0 Snd(F64 freq) +F64 Ona2Freq(I8 ona) +{//Ona to freq. Ona=60 is 440.0Hz. + if (ona==ONA_REST) + return 0; + else + return 440.0/32*2.0`(ona/12.0); +} + +I8 Freq2Ona(F64 freq) +{//Freq to Ona. 440.0Hz is Ona=60. + if (freq>0) + return ClampI64(12*Log2(32.0/440.0*freq),ONA_REST+1,MAX_I8); + else + return ONA_REST; +} + +U0 Snd(I8 ona=ONA_REST) {//Play freq. Zero means off. I64 period; CSndData *d; - if (!Bt(&sys_semas[SYS_SEMA_MUTE],0) && - !LBts(&sys_semas[SYS_SEMA_SND],0)) { //Mutex. Just throw-out if in use - if (freq!=snd.freq) { - snd.freq=freq; - if (0freq=freq; + d->ona=ona; d->time=tS; QueIns(d,snd.record_head.last); } - LBtr(&sys_semas[SYS_SEMA_SND],0); + LBtr(&sys_semas[SEMA_SND],0); } } U0 SndRst() {//Fix stuck sound. - if (Bt(&sys_semas[SYS_SEMA_SND],0)) { + if (Bt(&sys_semas[SEMA_SND],0)) { Sleep(1); - if (Bt(&sys_semas[SYS_SEMA_SND],0)) { + if (Bt(&sys_semas[SEMA_SND],0)) { Sleep(1); - LBtr(&sys_semas[SYS_SEMA_SND],0); + LBtr(&sys_semas[SEMA_SND],0); } } - Snd(0); + Snd; } -U0 Beep(I64 freq=500,Bool busy=FALSE) -{//Make beep at given freq. - Snd(freq); +U0 Beep(I8 ona=62,Bool busy=FALSE) +{//Make beep at given ona freq. + Snd(ona); if (busy) - BusyWait(500000); + Busy(500000); else Sleep(500); - Snd(0); + Snd; if (busy) - BusyWait(200000); + Busy(200000); else Sleep(200); } @@ -219,17 +235,17 @@ Bool Mute(Bool val) if (val) { PUSHFD CLI - Snd(0); - res=LBts(&sys_semas[SYS_SEMA_MUTE],0); + Snd; + res=LBts(&sys_semas[SEMA_MUTE],0); POPFD } else - res=LBtr(&sys_semas[SYS_SEMA_MUTE],0); + res=LBtr(&sys_semas[SEMA_MUTE],0); return res; } Bool IsMute() {//Return is-mute flag. - return Bt(&sys_semas[SYS_SEMA_MUTE],0); + return Bt(&sys_semas[SEMA_MUTE],0); } Bool Silent(Bool val=ON) @@ -244,12 +260,12 @@ Bool IsSilent() Bool SysDbg(Bool val) {//Set SysDbg bit you can use while debugging. - return LBEqu(&sys_semas[SYS_SEMA_DEBUG],0,val); + return LBEqu(&sys_semas[SEMA_DEBUG],0,val); } Bool IsSysDbg() {//Return SysDbg bit. - return Bt(&sys_semas[SYS_SEMA_DEBUG],0); + return Bt(&sys_semas[SEMA_DEBUG],0); } Bool Raw(Bool val) @@ -266,25 +282,26 @@ Bool IsRaw() Bool SingleUser(Bool val) {//Set single-user mode. - return LBEqu(&sys_semas[SYS_SEMA_SINGLE_USER],0,val); + return LBEqu(&sys_semas[SEMA_SINGLE_USER],0,val); } Bool IsSingleUser() {//Return single-user mode. - return Bt(&sys_semas[SYS_SEMA_SINGLE_USER],0); + return Bt(&sys_semas[SEMA_SINGLE_USER],0); } Bool DbgMode(Bool val) {//Set dbg-mode. - return LBEqu(&sys_semas[SYS_SEMA_DBG_MODE],0,val); + return LBEqu(&sys_semas[SEMA_DBG_MODE],0,val); } Bool IsDbgMode() {//Return dbg-mode. - return Bt(&sys_semas[SYS_SEMA_DBG_MODE],0); + return Bt(&sys_semas[SEMA_DBG_MODE],0); } -U0 ProgressBarsRst() +U0 ProgressBarsRst(U8 *path=NULL) { + CallExtStr("ProgressBarsRegTf",path); MemSet(sys_progresses,0,sizeof(sys_progresses)); } diff --git a/Kernel/KStart16.HC b/Kernel/KStart16.HC index 53fe4db..4314536 100644 --- a/Kernel/KStart16.HC +++ b/Kernel/KStart16.HC @@ -15,7 +15,7 @@ because it is #included first. $LK,"Kernel.PRJ",A="FF:::/Kernel/Kernel.PRJ,KSta */ USE16 SYS_KERNEL:: //This must match $LK,"CKernel",A="MN:CKernel"$. - JMP U16 CORE0_16BIT_INIT + JMP I16 CORE0_16BIT_INIT //************************************ // ASM Global vars required for 16-bit start-up @@ -27,13 +27,13 @@ SYS_RUN_LEVEL:: DU32 0; #exe {StreamPrint("SYS_COMPILE_TIME:: DU64 0x%X;",Now);} //See $LK,"BootDVDProbe",A="MN:BootDVDProbe"$ #assert SYS_COMPILE_TIME+sizeof(CDate)+sizeof(CBinFile)opts[CFG_MEM_INIT], kernel_cfg->mem_init_val, kernel_cfg->opts[CFG_HEAP_INIT],kernel_cfg->heap_init_val, -kernel_cfg->opts[CFG_VAR_INIT], kernel_cfg->var_init_val); +kernel_cfg->opts[CFG_VAR_INIT], kernel_cfg->var_init_val, +kernel_cfg->opts[CFG_STAFF_MODE]); }; SYS_HEAP_DBG_FLAG:: DU8 _CFG_HEAP_DBG; -SYS_GIG_PAGES:: DU8 0; + ALIGN 8,0 SYS_CTRL_ALT_FLAGS:: DU64 0; SYS_EXTERN_TABLE:: DU64 0; @@ -31,18 +41,22 @@ SYS_PROGRESSES:: SYS_PROGRESS1:: DU64 0; SYS_PROGRESS1_MAX:: DU64 0; SYS_PROGRESS1_T0:: DU64 0; +SYS_PROGRESS1_TF:: DU64 0; SYS_PROGRESS1_DESC:: DU8 PROGRESS_DESC_LEN DUP(0); SYS_PROGRESS2:: DU64 0; SYS_PROGRESS2_MAX:: DU64 0; SYS_PROGRESS2_T0:: DU64 0; +SYS_PROGRESS2_TF:: DU64 0; SYS_PROGRESS2_DESC:: DU8 PROGRESS_DESC_LEN DUP(0); SYS_PROGRESS3:: DU64 0; SYS_PROGRESS3_MAX:: DU64 0; SYS_PROGRESS3_T0:: DU64 0; +SYS_PROGRESS3_TF:: DU64 0; SYS_PROGRESS3_DESC:: DU8 PROGRESS_DESC_LEN DUP(0); SYS_PROGRESS4:: DU64 0; SYS_PROGRESS4_MAX:: DU64 0; SYS_PROGRESS4_T0:: DU64 0; +SYS_PROGRESS4_TF:: DU64 0; SYS_PROGRESS4_DESC:: DU8 PROGRESS_DESC_LEN DUP(0); #assert $$-SYS_PROGRESSES==sizeof(CProgress)*4 @@ -55,7 +69,7 @@ SYS_MP_CNT_LOCK:: DU64 1; ALIGN DFT_CACHE_LINE_WIDTH,OC_NOP SYS_CACHE_LINE_WIDTH:: DU64 DFT_CACHE_LINE_WIDTH; DU8 DFT_CACHE_LINE_WIDTH-sizeof(CBinFile)-8 DUP(0); -SYS_SEMAS:: DU8 NUM_SYS_SEMAS*SEMA_STRUCT_SIZE DUP(0); +SYS_SEMAS:: DU8 SEMA_NUM_SEMAS*DFT_CACHE_LINE_WIDTH DUP(0); //************************************ ALIGN 16,OC_NOP CORE0_32BIT_INIT:: //Entry point for $LK,"BootRAM",A="MN:BootRAM"$. @@ -68,7 +82,7 @@ CORE0_32BIT_INIT:: //Entry point for $LK,"BootRAM",A="MN:BootRAM"$. MOV DS,AX BTS U32 [SYS_RUN_LEVEL],RLf_32BIT MOV ESI,U32 [SYS_BOOT_PATCH_TABLE_BASE] - MOV EDI,U32 [SYS_BOOT_BASE] + MOV EDI,U32 [MEM_BOOT_BASE] MOV AX,CGDT.ds MOV DS,AX @@ -94,10 +108,10 @@ CORE0_32BIT_INIT:: //Entry point for $LK,"BootRAM",A="MN:BootRAM"$. CALL SYS_FIND_PCIBIOS_SERVICE_DIR CALL SYS_FIND_PCI_SERVICES - - MOV U32 [SYS_HEAP_BASE],SYS_FIXED_AREA+sizeof(CSysFixedArea) CALL SYS_INIT_PAGE_TABLES - + CALL SYS_INIT_16MEG_SYS_CODE_BP PUSH U32 0 //Return from next call will be 64-bit CALL SYS_ENTER_LONG_MODE + + //We fall-thou to $LK,"KStart64",A="FL:::/Kernel/KStart64.HC,1"$, next. } diff --git a/Kernel/KStart64.HC b/Kernel/KStart64.HC index 5947dce..8b6dbdd 100644 --- a/Kernel/KStart64.HC +++ b/Kernel/KStart64.HC @@ -15,7 +15,7 @@ USE64 //Init Adam HeapCtrl MOV EDI,U32 SYS_FIXED_AREA+CSysFixedArea.adam_hc - MOV EAX,U32 SYS_FIXED_AREA+CSysFixedArea.adam_bp + MOV EAX,U32 SYS_FIXED_AREA+CSysFixedArea.sys_code_bp MOV U64 CHeapCtrl.bp[RDI],RAX MOV U32 CHeapCtrl.hc_signature[RDI],HEAP_CTRL_SIGNATURE_VAL @@ -29,7 +29,7 @@ USE64 MOV U64 CTask.data_heap[RAX],RDI MOV U32 CTask.task_signature[RAX],TASK_SIGNATURE_VAL - BTS U32 [SYS_RUN_LEVEL],RLf_BOOT_HEAP + BTS U32 [SYS_RUN_LEVEL],RLf_16MEG_ADAM_HEAP_CTRL PUSH MEM_ADAM_STK PUSH U32 SYS_FIXED_AREA+CSysFixedArea.adam @@ -46,7 +46,7 @@ SYS_ENTER_LONG_MODE:: //Switch to long 64-bit mode OR EAX,0xB0 MOV_CR4_EAX - MOV EAX,SYS_FIXED_AREA+CSysFixedArea.pml4 + MOV EAX,[MEM_PML4] MOV_CR3_EAX MOV ECX,IA32_EFER diff --git a/Kernel/KTask.HC b/Kernel/KTask.HC index 2627023..0676912 100644 --- a/Kernel/KTask.HC +++ b/Kernel/KTask.HC @@ -4,6 +4,9 @@ U0 Exit() LBts(&Fs->task_flags,TASKf_KILL_AFTER_DBG); G; } else { + if (sys_staff_mode_flag) + AdamLog("%p:%p:%p:%p:%p:%p\n",Caller(0),Caller(1),Caller(2),Caller(3), + Caller(4),Caller(5),Caller(6),Caller(7)); if (!Gs->num && !IsDbgMode) SingleUser(OFF); Fs->rflags=GetRFlags; @@ -42,19 +45,31 @@ U0 DeathWait(CTask **_task,Bool send_exit=FALSE) Yield; } -Bool Kill(CTask *task,Bool wait=TRUE) +Bool Kill(CTask *task,Bool wait=TRUE,Bool just_break=FALSE) {//Terminate other task. I64 i; - if (TaskValidate(task) && task!=sys_winmgr_task) { - for (i=0;itask_flags,TASKf_KILL_TASK); - if (wait) { - do Yield; - while (TaskValidate(task) && Bt(&task->task_flags,TASKf_KILL_TASK)); + if (TaskValidate(task)) { + if (just_break) { + if (task!=Fs) + Break; + else {//TODO wait + sys_focus_task=task; + LBts(sys_ctrl_alt_flags,CTRL_ALT_C); + return TRUE; + } + } else { + if (task!=sys_winmgr_task) { + for (i=0;itask_flags,TASKf_KILL_TASK); + if (wait) { + do Yield; + while (TaskValidate(task) && Bt(&task->task_flags,TASKf_KILL_TASK)); + } + return TRUE; + } } - return TRUE; } return FALSE; } @@ -187,7 +202,7 @@ I64 TaskInit(CTask *task,I64 stk_size) task->next_child_task=task->last_child_task= (&task->next_child_task)(U8 *)-offset(CTask.next_sibling_task); - SrvCtrlInit(&task->srv_ctrl); + JobCtrlInit(&task->srv_ctrl); QueInit(&task->next_cc); QueInit(&task->next_except); QueInit(&task->next_ctrl); @@ -228,7 +243,7 @@ CTask *Spawn(U0 (*fp_start_addr)(U8 *data),U8 *data=NULL,U8 *task_name=NULL, I64 target_cpu=-1, //-1 for current CPU. See $LK,"multi-core",A="FI:::/Demo/MultiCore/LoadTest.HC"$. CTask *parent=NULL, //NULL means adam I64 stk_size=0, //0=default - I64 flags=1<title_src=TTS_TASK_NAME; PUSHFD CLI - if (Bt(&flags,SVCf_ADD_TO_QUE)) { + if (Bt(&flags,JOBf_ADD_TO_QUE)) { TaskQueInsChild(task); TaskQueIns(task); } @@ -279,7 +294,7 @@ U0 TaskDerivedValsUpdate(CTask *task=NULL,Bool update_z_buf=TRUE) if (fp_update_ctrls) (*fp_update_ctrls)(task); if (update_z_buf && Bt(&task->display_flags,DISPLAYf_SHOW)) - LBts(&sys_semas[SYS_SEMA_UPDATE_WIN_Z_BUF],0); + LBts(&sys_semas[SEMA_UPDATE_WIN_Z_BUF],0); LBtr(&task->task_flags,TASKf_TASK_LOCK); POPFD } @@ -356,7 +371,7 @@ U0 SrvTaskCont() FlushMsgs; while (TRUE) { CLI - if (SrvCmdsHandler(old_flags) && Fs->title_src==TTS_TASK_NAME) + if (JobsHndlr(old_flags) && Fs->title_src==TTS_TASK_NAME) MemCpy(Fs->task_title,Fs->task_name,TASK_NAME_LEN); FlushMsgs; LBts(&Fs->task_flags,TASKf_IDLE); @@ -392,8 +407,7 @@ U0 SrvCmdLine(I64 dummy=0) { no_warn dummy; Fs->win_inhibit=WIG_USER_TASK_DFT; - if (HashFind("SrvStartUp",adam_task->hash_table,HTT_FUN)) - CallExtStr("SrvStartUp"); + CallExtStr("SrvStartUp"); SrvTaskCont; } @@ -401,8 +415,7 @@ U0 UserCmdLine(I64 dummy=0) {//A user task ends-up calling this. no_warn dummy; Fs->win_inhibit=WIG_USER_TASK_DFT; - if (HashFind("UserStartUp",adam_task->hash_table,HTT_FUN)) - CallExtStr("UserStartUp"); + CallExtStr("UserStartUp"); if (!LBts(&Fs->display_flags,DISPLAYf_SHOW)) Dbg; UserTaskCont; @@ -463,15 +476,15 @@ I64 TaskEnd() return task->next_task; } if (LBtr(&task->display_flags,DISPLAYf_SHOW)) - LBts(&sys_semas[SYS_SEMA_UPDATE_WIN_Z_BUF],0); + LBts(&sys_semas[SEMA_UPDATE_WIN_Z_BUF],0); while (LBts(&task->task_flags,TASKf_TASK_LOCK)) PAUSE - while (LBts(&task->srv_ctrl.flags,SVCRf_LOCKED)) + while (LBts(&task->srv_ctrl.flags,JOBCf_LOCKED)) PAUSE - SrvCmdQueDel(&task->srv_ctrl.next_waiting); - SrvCmdQueDel(&task->srv_ctrl.next_done); + JobQueDel(&task->srv_ctrl.next_waiting); + JobQueDel(&task->srv_ctrl.next_done); if (IsRaw) VGAFlush; @@ -500,7 +513,7 @@ I64 TaskEnd() tmpt =task->next_task; //save to return TaskQueRem(task); - LBtr(&task->srv_ctrl.flags,SVCRf_LOCKED); + LBtr(&task->srv_ctrl.flags,JOBCf_LOCKED); LBtr(&task->task_flags,TASKf_TASK_LOCK); task->wake_jiffy=cnts.jiffies+DYING_JIFFIES; diff --git a/Kernel/Kernel.MAP b/Kernel/Kernel.MAP index c7431f9..bd68701 100644 --- a/Kernel/Kernel.MAP +++ b/Kernel/Kernel.MAP @@ -1,2913 +1,2931 @@ -$LK,"DrvTextAttrGet",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,312",BI=1$ -$LK,"ARGT_R64",A="FL:::/Kernel/KernelA.HH,1895"$ +$LK,"DrvTextAttrGet",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,322",BI=1$ +$LK,"TASK_EXCEPT_CALLERS",A="FL:::/Kernel/KernelA.HH,3268"$ +$LK,"ARGT_R64",A="FL:::/Kernel/KernelA.HH,1882"$ $LK,"MAlloc",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,387"$ -$LK,"BOOT_SRC_NULL",A="FL:::/Kernel/KernelA.HH,3884"$ +$LK,"BOOT_SRC_NULL",A="FL:::/Kernel/KernelA.HH,3839"$ $LK,"KbdTypeMatic",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,86",BI=2$ $LK,"KbdLEDsSet",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,52",BI=3$ -$LK,"LXchgU32",A="FL:::/Kernel/KernelB.HH,259"$ -$LK,"LXchgU16",A="FL:::/Kernel/KernelB.HH,258"$ -$LK,"BDS_CUR_DRV",A="FL:::/Kernel/KernelA.HH,3270"$ -$LK,"DOCM_CANCEL",A="FL:::/Kernel/KernelA.HH,1343"$ -$LK,"chars_bmp_word",A="FL:::/Kernel/StrA.HC.Z,340"$ -$LK,"BLK_SIZE",A="FL:::/Kernel/KernelA.HH,2297"$ -$LK,"ARGT_SS",A="FL:::/Kernel/KernelA.HH,1926"$ +$LK,"LXchgU32",A="FL:::/Kernel/KernelB.HH,265"$ +$LK,"LXchgU16",A="FL:::/Kernel/KernelB.HH,264"$ +$LK,"BDS_CUR_DRV",A="FL:::/Kernel/KernelA.HH,3230"$ +$LK,"ICF_ARG2_TO_F64",A="FL:::/Kernel/KernelA.HH,1581"$ +$LK,"DOCM_CANCEL",A="FL:::/Kernel/KernelA.HH,1331"$ +$LK,"BLK_SIZE",A="FL:::/Kernel/KernelA.HH,2284"$ +$LK,"ARGT_SS",A="FL:::/Kernel/KernelA.HH,1913"$ $LK,"c32_eax",A="FL:::/Kernel/PCIBIOS.HC.Z,152"$ -$LK,"ARGT_EAX",A="FL:::/Kernel/KernelA.HH,1919"$ -$LK,"DOCT_HEADER",A="FL:::/Kernel/KernelA.HH,913"$ -$LK,"Ff__EXTERN",A="FL:::/Kernel/KernelA.HH,853"$ +$LK,"ARGT_EAX",A="FL:::/Kernel/KernelA.HH,1906"$ +$LK,"DOCT_HEADER",A="FL:::/Kernel/KernelA.HH,901"$ +$LK,"Ff__EXTERN",A="FL:::/Kernel/KernelA.HH,841"$ $LK,"c32_ebx",A="FL:::/Kernel/PCIBIOS.HC.Z,153"$ -$LK,"MemPageSize",A="FL:::/Kernel/Mem/PageTables.HC.Z,135",BI=4$ $LK,"D3Add",A="FL:::/Kernel/KernelB.HH,145"$ $LK,"D3NormSqr",A="FL:::/Kernel/KernelB.HH,158"$ -$LK,"ARf_PLANAR_SYMMETRY",A="FL:::/Kernel/KernelA.HH,3897"$ -$LK,"DOCf_PLAIN_TEXT_TABS",A="FL:::/Kernel/KernelA.HH,1297"$ -$LK,"RLF_BLKDEV",A="FL:::/Kernel/KernelA.HH,467"$ -$LK,"RLf_BLKDEV",A="FL:::/Kernel/KernelA.HH,448"$ +$LK,"ARf_PLANAR_SYMMETRY",A="FL:::/Kernel/KernelA.HH,3852"$ +$LK,"DOCf_PLAIN_TEXT_TABS",A="FL:::/Kernel/KernelA.HH,1285"$ +$LK,"RLF_BLKDEV",A="FL:::/Kernel/KernelA.HH,470"$ +$LK,"RLf_BLKDEV",A="FL:::/Kernel/KernelA.HH,450"$ $LK,"c32_ecx",A="FL:::/Kernel/PCIBIOS.HC.Z,154"$ -$LK,"CCF_USE_LAST_U16",A="FL:::/Kernel/KernelA.HH,2156"$ -$LK,"SYSf_CTRL_ALT_DEL",A="FL:::/Kernel/KernelA.HH,618"$ +$LK,"CCF_USE_LAST_U16",A="FL:::/Kernel/KernelA.HH,2143"$ $LK,"SSF_INACTIVE",A="FL:::/Kernel/KernelA.HH,224"$ $LK,"MSF_INACTIVE",A="FL:::/Kernel/KernelA.HH,207"$ -$LK,"ATA_READ_MULTI",A="FL:::/Kernel/KernelA.HH,2264"$ +$LK,"ATA_READ_MULTI",A="FL:::/Kernel/KernelA.HH,2251"$ $LK,"c32_edx",A="FL:::/Kernel/PCIBIOS.HC.Z,155"$ -$LK,"FUf_WHOLE_LABELS_AFTER",A="FL:::/Kernel/KernelA.HH,2594"$ -$LK,"CAOTBinBlk",A="FL:::/Kernel/KernelA.HH,1798"$ -$LK,"DOCEf_HAS_TERMINATOR",A="FL:::/Kernel/KernelA.HH,1100"$ -$LK,"KernelMain",A="FL:::/Kernel/KEnd.HC.Z,132",BI=5$ -$LK,"KbdCmdSend",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,24",BI=6$ +$LK,"JOBf_DISPATCHED",A="FL:::/Kernel/KernelA.HH,3149"$ +$LK,"FUf_WHOLE_LABELS_AFTER",A="FL:::/Kernel/KernelA.HH,2581"$ +$LK,"CAOTBinBlk",A="FL:::/Kernel/KernelA.HH,1785"$ +$LK,"DOCEf_HAS_TERMINATOR",A="FL:::/Kernel/KernelA.HH,1088"$ +$LK,"KernelMain",A="FL:::/Kernel/KEnd.HC.Z,133",BI=4$ +$LK,"KbdCmdSend",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,24",BI=5$ $LK,"_D3_NORM_SQR",A="FL:::/Kernel/KMathA.HC.Z,22"$ -$LK,"TTS_CUR_LEX",A="FL:::/Kernel/KernelA.HH,3278"$ -$LK,"RS_ATTR_COMPRESSED",A="FL:::/Kernel/KernelA.HH,2537"$ -$LK,"CCf_USE_LAST_U16",A="FL:::/Kernel/KernelA.HH,2157"$ -$LK,"CDocEntry",A="FL:::/Kernel/KernelA.HH,1182"$ -$LK,"CAOT",A="FL:::/Kernel/KernelA.HH,1996"$ -$LK,"sys_gig_pages",A="FL:::/Kernel/KernelB.HH,179"$ -$LK,"SVCf_DISPATCHED",A="FL:::/Kernel/KernelA.HH,3187"$ -$LK,"RLF_32BIT",A="FL:::/Kernel/KernelA.HH,460"$ -$LK,"RLF_16BIT",A="FL:::/Kernel/KernelA.HH,458"$ -$LK,"RLf_32BIT",A="FL:::/Kernel/KernelA.HH,441"$ -$LK,"RLf_16BIT",A="FL:::/Kernel/KernelA.HH,439"$ -$LK,"BreakUnlock",A="FL:::/Kernel/KExcept.HC.Z,153",BI=7$ -$LK,"DOCT_BACKGROUND",A="FL:::/Kernel/KernelA.HH,917"$ -$LK,"DOCT_FOREGROUND",A="FL:::/Kernel/KernelA.HH,916"$ +$LK,"TTS_CUR_LEX",A="FL:::/Kernel/KernelA.HH,3238"$ +$LK,"RS_ATTR_COMPRESSED",A="FL:::/Kernel/KernelA.HH,2524"$ +$LK,"CCf_USE_LAST_U16",A="FL:::/Kernel/KernelA.HH,2144"$ +$LK,"CDocEntry",A="FL:::/Kernel/KernelA.HH,1170"$ +$LK,"CAOT",A="FL:::/Kernel/KernelA.HH,1983"$ +$LK,"ICF_ARG2_WAS_STK",A="FL:::/Kernel/KernelA.HH,1594"$ +$LK,"RLF_32BIT",A="FL:::/Kernel/KernelA.HH,462"$ +$LK,"RLF_16BIT",A="FL:::/Kernel/KernelA.HH,460"$ +$LK,"RLf_32BIT",A="FL:::/Kernel/KernelA.HH,442"$ +$LK,"RLf_16BIT",A="FL:::/Kernel/KernelA.HH,440"$ +$LK,"BreakUnlock",A="FL:::/Kernel/KExcept.HC.Z,137",BI=6$ +$LK,"DOCT_BACKGROUND",A="FL:::/Kernel/KernelA.HH,905"$ +$LK,"DOCT_FOREGROUND",A="FL:::/Kernel/KernelA.HH,904"$ $LK,"CGDT",A="FL:::/Kernel/KernelA.HH,336"$ -$LK,"TSF_SAME_SONG",A="FL:::/Kernel/KernelA.HH,3248"$ -$LK,"PRTF_NEG_AUX_FMT_NUM",A="FL:::/Kernel/KernelA.HH,3925"$ -$LK,"ICF_PUSH_CMP",A="FL:::/Kernel/KernelA.HH,1607"$ -$LK,"MLF_NO_UNUSED_WARN",A="FL:::/Kernel/KernelA.HH,780"$ +$LK,"TSF_SAME_SONG",A="FL:::/Kernel/KernelA.HH,3208"$ +$LK,"PRTF_NEG_AUX_FMT_NUM",A="FL:::/Kernel/KernelA.HH,3880"$ +$LK,"SCF_MS_L_DOWN",A="FL:::/Kernel/KernelA.HH,3499"$ +$LK,"SCf_MS_L_DOWN",A="FL:::/Kernel/KernelA.HH,3484"$ +$LK,"MSG_MS_L_DOWN",A="FL:::/Kernel/KernelA.HH,3192"$ +$LK,"ICF_PUSH_CMP",A="FL:::/Kernel/KernelA.HH,1595"$ +$LK,"MLF_NO_UNUSED_WARN",A="FL:::/Kernel/KernelA.HH,768"$ $LK,"I_MP_CRASH",A="FL:::/Kernel/KernelA.HH,295"$ -$LK,"MEM_HEAP_HASH_SIZE",A="FL:::/Kernel/KernelA.HH,2880"$ +$LK,"MEM_HEAP_HASH_SIZE",A="FL:::/Kernel/KernelA.HH,2848"$ $LK,"INVALID_PTR",A="FL:::/Kernel/KernelA.HH,40"$ -$LK,"RECALCt_NORMAL",A="FL:::/Kernel/KernelA.HH,1347"$ -$LK,"ATAInit",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,303",BI=8$ -$LK,"HashDefineLstAdd",A="FL:::/Kernel/KHashB.HC.Z,206",BI=9$ -$LK,"StrUtil",A="FL:::/Kernel/StrA.HC.Z,524",BI=10$ -$LK,"LstMatch",A="FL:::/Kernel/StrA.HC.Z,421",BI=11$ -$LK,"IET_REL_I32",A="FL:::/Kernel/KernelA.HH,401"$ -$LK,"IET_REL_I16",A="FL:::/Kernel/KernelA.HH,399"$ -$LK,"CPrsStk",A="FL:::/Kernel/KernelA.HH,1677"$ -$LK,"CCmpCtrl",A="FL:::/Kernel/KernelA.HH,2167"$ -$LK,"ATAWBlks",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,579",BI=12$ -$LK,"CCPU",A="FL:::/Kernel/KernelA.HH,3443"$ -$LK,"ATABlkSel",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,1",BI=13$ +$LK,"RECALCt_NORMAL",A="FL:::/Kernel/KernelA.HH,1335"$ +$LK,"ATAInit",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,307",BI=7$ +$LK,"HashDefineLstAdd",A="FL:::/Kernel/KHashB.HC.Z,206",BI=8$ +$LK,"StrUtil",A="FL:::/Kernel/StrA.HC.Z,519",BI=9$ +$LK,"LstMatch",A="FL:::/Kernel/StrA.HC.Z,416",BI=10$ +$LK,"IET_REL_I32",A="FL:::/Kernel/KernelA.HH,400"$ +$LK,"IET_REL_I16",A="FL:::/Kernel/KernelA.HH,398"$ +$LK,"CPrsStk",A="FL:::/Kernel/KernelA.HH,1664"$ +$LK,"CCmpCtrl",A="FL:::/Kernel/KernelA.HH,2154"$ +$LK,"ATAWBlks",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,582",BI=11$ +$LK,"CCPU",A="FL:::/Kernel/KernelA.HH,3403"$ +$LK,"ATABlkSel",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,1",BI=12$ $LK,"c32_esi",A="FL:::/Kernel/PCIBIOS.HC.Z,156"$ -$LK,"CCF_JUST_LOAD",A="FL:::/Kernel/KernelA.HH,2132"$ -$LK,"DOCEF_RIGHT_IN_STR",A="FL:::/Kernel/KernelA.HH,987"$ -$LK,"LDF_JUST_LOAD",A="FL:::/Kernel/KernelA.HH,369"$ -$LK,"SYS_CACHE_LINE_WIDTH",A="FL:::/Kernel/KStart32.HC.Z,56"$ -$LK,"CMF_I16_JMP_TABLE",A="FL:::/Kernel/KernelA.HH,1698"$ +$LK,"CCF_JUST_LOAD",A="FL:::/Kernel/KernelA.HH,2119"$ +$LK,"DOCEF_RIGHT_IN_STR",A="FL:::/Kernel/KernelA.HH,975"$ +$LK,"LDF_JUST_LOAD",A="FL:::/Kernel/KernelA.HH,368"$ +$LK,"SYS_CACHE_LINE_WIDTH",A="FL:::/Kernel/KStart32.HC.Z,70"$ +$LK,"CMF_I16_JMP_TABLE",A="FL:::/Kernel/KernelA.HH,1685"$ +$LK,"IRQMsHard",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,90",BI=13$ $LK,"FramePtrSet",A="FL:::/Kernel/KHashB.HC.Z,230",BI=14$ -$LK,"CCf_PASS_TRACE_PRESENT",A="FL:::/Kernel/KernelA.HH,2138"$ -$LK,"CMF_U16_JMP_TABLE",A="FL:::/Kernel/KernelA.HH,1699"$ +$LK,"CCf_PASS_TRACE_PRESENT",A="FL:::/Kernel/KernelA.HH,2125"$ +$LK,"CMF_U16_JMP_TABLE",A="FL:::/Kernel/KernelA.HH,1686"$ $LK,"_STRICMP",A="FL:::/Kernel/StrA.HC.Z,117"$ -$LK,"IET_REL_I64",A="FL:::/Kernel/KernelA.HH,403"$ -$LK,"CFAT32Boot",A="FL:::/Kernel/KernelA.HH,2336"$ -$LK,"DOCEf_RIGHT_IN_STR",A="FL:::/Kernel/KernelA.HH,1075"$ -$LK,"DOCEF_NO_CLICK_ON",A="FL:::/Kernel/KernelA.HH,1023"$ -$LK,"FILEMASK_TXT",A="FL:::/Kernel/KernelA.HH,2292"$ -$LK,"TK_EOF",A="FL:::/Kernel/KernelA.HH,2067"$ -$LK,"CWinScroll",A="FL:::/Kernel/KernelA.HH,3102"$ -$LK,"DOCEf_NO_CLICK_ON",A="FL:::/Kernel/KernelA.HH,1109"$ -$LK,"ARf_FLOODFILL",A="FL:::/Kernel/KernelA.HH,3895"$ -$LK,"ICF_USE_F64",A="FL:::/Kernel/KernelA.HH,1595"$ -$LK,"MemPagesNotPresentMark",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,58",BI=15$ -$LK,"CH_BACKSPACE",A="FL:::/Kernel/KernelA.HH,3511"$ -$LK,"FloorI64",A="FL:::/Kernel/KMathB.HC.Z,52",BI=16$ -$LK,"SC_BACKSPACE",A="FL:::/Kernel/KernelA.HH,3557"$ -$LK,"FUf_WHOLE_LABELS_BEFORE",A="FL:::/Kernel/KernelA.HH,2593"$ -$LK,"GVF_ARRAY",A="FL:::/Kernel/KernelA.HH,872"$ -$LK,"DirEntryCompareCluster",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,84",BI=17$ -$LK,"KbdCmdFlush",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,45",BI=18$ -$LK,"CFPU",A="FL:::/Kernel/KernelA.HH,3174"$ -$LK,"TASKf_IDLE",A="FL:::/Kernel/KernelA.HH,3284"$ -$LK,"CDIR_SIZE",A="FL:::/Kernel/KernelA.HH,2564"$ -$LK,"ARGT_UIMM32",A="FL:::/Kernel/KernelA.HH,1889"$ -$LK,"ARGT_UIMM16",A="FL:::/Kernel/KernelA.HH,1888"$ -$LK,"PCIWriteU8",A="FL:::/Kernel/PCIBIOS.HC.Z,220",BI=19$ -$LK,"DefinePrint",A="FL:::/Kernel/KDefine.HC.Z,90",BI=20$ -$LK,"FifoI64Del",A="FL:::/Kernel/KDataTypes.HC.Z,252",BI=21$ -$LK,"CDocUndo",A="FL:::/Kernel/KernelA.HH,1335"$ -$LK,"ROPB_XOR",A="FL:::/Kernel/KernelA.HH,2936"$ -$LK,"FUF_JUST_FILES",A="FL:::/Kernel/KernelA.HH,2608"$ -$LK,"ATA_SET_MAX",A="FL:::/Kernel/KernelA.HH,2262"$ -$LK,"IEF_DFT",A="FL:::/Kernel/KernelA.HH,1729"$ -$LK,"RT_F32",A="FL:::/Kernel/KernelA.HH,1562"$ -$LK,"Let2BlkDev",A="FL:::/Kernel/BlkDev/DskBlkDev.HC.Z,175",BI=22$ -$LK,"FUf_JUST_FILES",A="FL:::/Kernel/KernelA.HH,2581"$ -$LK,"ARGT_M1632",A="FL:::/Kernel/KernelA.HH,1907"$ -$LK,"DOF_MIN_SIZE",A="FL:::/Kernel/KernelA.HH,1216"$ -$LK,"DOCEF_LEFT_X",A="FL:::/Kernel/KernelA.HH,988"$ +$LK,"IET_REL_I64",A="FL:::/Kernel/KernelA.HH,402"$ +$LK,"CFAT32Boot",A="FL:::/Kernel/KernelA.HH,2323"$ +$LK,"DOCEf_RIGHT_IN_STR",A="FL:::/Kernel/KernelA.HH,1063"$ +$LK,"DOCEF_NO_CLICK_ON",A="FL:::/Kernel/KernelA.HH,1011"$ +$LK,"FILEMASK_TXT",A="FL:::/Kernel/KernelA.HH,2279"$ +$LK,"TK_EOF",A="FL:::/Kernel/KernelA.HH,2054"$ +$LK,"CWinScroll",A="FL:::/Kernel/KernelA.HH,3064"$ +$LK,"DOCEf_NO_CLICK_ON",A="FL:::/Kernel/KernelA.HH,1097"$ +$LK,"ARf_FLOODFILL",A="FL:::/Kernel/KernelA.HH,3850"$ +$LK,"ICF_USE_F64",A="FL:::/Kernel/KernelA.HH,1583"$ +$LK,"CH_BACKSPACE",A="FL:::/Kernel/KernelA.HH,3465"$ +$LK,"FloorI64",A="FL:::/Kernel/KMathB.HC.Z,52",BI=15$ +$LK,"SC_BACKSPACE",A="FL:::/Kernel/KernelA.HH,3510"$ +$LK,"FUf_WHOLE_LABELS_BEFORE",A="FL:::/Kernel/KernelA.HH,2580"$ +$LK,"GVF_ARRAY",A="FL:::/Kernel/KernelA.HH,860"$ +$LK,"DirEntryCompareCluster",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,84",BI=16$ +$LK,"KbdCmdFlush",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,45",BI=17$ +$LK,"CFPU",A="FL:::/Kernel/KernelA.HH,3136"$ +$LK,"TASKf_IDLE",A="FL:::/Kernel/KernelA.HH,3244"$ +$LK,"CDIR_SIZE",A="FL:::/Kernel/KernelA.HH,2551"$ +$LK,"ARGT_UIMM32",A="FL:::/Kernel/KernelA.HH,1876"$ +$LK,"ARGT_UIMM16",A="FL:::/Kernel/KernelA.HH,1875"$ +$LK,"PCIWriteU8",A="FL:::/Kernel/PCIBIOS.HC.Z,220",BI=18$ +$LK,"DefinePrint",A="FL:::/Kernel/KDefine.HC.Z,90",BI=19$ +$LK,"FifoI64Del",A="FL:::/Kernel/KDataTypes.HC.Z,252",BI=20$ +$LK,"CDocUndo",A="FL:::/Kernel/KernelA.HH,1323"$ +$LK,"ROPB_XOR",A="FL:::/Kernel/KernelA.HH,2904"$ +$LK,"FUF_JUST_FILES",A="FL:::/Kernel/KernelA.HH,2595"$ +$LK,"ATA_SET_MAX",A="FL:::/Kernel/KernelA.HH,2249"$ +$LK,"IEF_DFT",A="FL:::/Kernel/KernelA.HH,1716"$ +$LK,"RT_F32",A="FL:::/Kernel/KernelA.HH,1550"$ +$LK,"Let2BlkDev",A="FL:::/Kernel/BlkDev/DskBlkDev.HC.Z,180",BI=21$ +$LK,"FUf_JUST_FILES",A="FL:::/Kernel/KernelA.HH,2568"$ +$LK,"ARGT_M1632",A="FL:::/Kernel/KernelA.HH,1894"$ +$LK,"DOF_MIN_SIZE",A="FL:::/Kernel/KernelA.HH,1204"$ +$LK,"DOCEF_LEFT_X",A="FL:::/Kernel/KernelA.HH,976"$ $LK,"RFLAGf_AUX_CARRY",A="FL:::/Kernel/KernelA.HH,310"$ -$LK,"DEF_PROCESSED",A="FL:::/Kernel/KernelA.HH,2548"$ -$LK,"WIf_FOCUS_TASK_IP_L_D",A="FL:::/Kernel/KernelA.HH,1449"$ -$LK,"DOCEf_LEFT_X",A="FL:::/Kernel/KernelA.HH,1076"$ -$LK,"Mem64DevFree",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,150",BI=23$ -$LK,"Mem32DevFree",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,114",BI=24$ -$LK,"SYS_GIG_PAGES",A="FL:::/Kernel/KStart32.HC.Z,22"$ -$LK,"ARGT_UIMM64",A="FL:::/Kernel/KernelA.HH,1890"$ -$LK,"DOCf_MIN_SIZE",A="FL:::/Kernel/KernelA.HH,1305"$ -$LK,"DOCF_MIN_SIZE",A="FL:::/Kernel/KernelA.HH,1269"$ -$LK,"ATARepEntry",A="FL:::/Kernel/BlkDev/DskATAId.HC.Z,91",BI=25$ -$LK,"BLUE",A="FL:::/Kernel/KernelA.HH,2961"$ -$LK,"sys_ctrl_alt_flags",A="FL:::/Kernel/KernelB.HH,203"$ +$LK,"DEF_PROCESSED",A="FL:::/Kernel/KernelA.HH,2535"$ +$LK,"DOCEf_LEFT_X",A="FL:::/Kernel/KernelA.HH,1064"$ +$LK,"Mem64DevFree",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,127",BI=22$ +$LK,"Mem32DevFree",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,91",BI=23$ +$LK,"ARGT_UIMM64",A="FL:::/Kernel/KernelA.HH,1877"$ +$LK,"DOCf_MIN_SIZE",A="FL:::/Kernel/KernelA.HH,1293"$ +$LK,"DOCF_MIN_SIZE",A="FL:::/Kernel/KernelA.HH,1257"$ +$LK,"ATARepEntry",A="FL:::/Kernel/BlkDev/DskATAId.HC.Z,91",BI=24$ +$LK,"BLUE",A="FL:::/Kernel/KernelA.HH,2929"$ +$LK,"sys_ctrl_alt_flags",A="FL:::/Kernel/KernelB.HH,205"$ $LK,"D3Div",A="FL:::/Kernel/KernelB.HH,151"$ -$LK,"RT_F64",A="FL:::/Kernel/KernelA.HH,1564"$ -$LK,"EdLite",A="FL:::/Kernel/EdLite.HC.Z,58",BI=26$ -$LK,"MBR_PT_FAT12",A="FL:::/Kernel/KernelA.HH,2701"$ -$LK,"FramePtr",A="FL:::/Kernel/KHashB.HC.Z,215",BI=27$ -$LK,"ARGT_RM8",A="FL:::/Kernel/KernelA.HH,1897"$ -$LK,"ROPF_PROBABILITY_DITHER",A="FL:::/Kernel/KernelA.HH,2956"$ -$LK,"RTF_UNSIGNED",A="FL:::/Kernel/KernelA.HH,1567"$ -$LK,"DOCEF_HAS_BORDER",A="FL:::/Kernel/KernelA.HH,1003"$ -$LK,"TK_EQU_EQU",A="FL:::/Kernel/KernelA.HH,2082"$ -$LK,"RT_I32",A="FL:::/Kernel/KernelA.HH,1557"$ -$LK,"RT_I16",A="FL:::/Kernel/KernelA.HH,1555"$ -$LK,"DOCEf_HAS_BORDER",A="FL:::/Kernel/KernelA.HH,1091"$ -$LK,"SysTry",A="FL:::/Kernel/KExcept.HC.Z,64",BI=28$ -$LK,"POP_REGS",A="FL:::/Kernel/KernelA.HH,1769"$ -$LK,"IEF_OP_SIZE32",A="FL:::/Kernel/KernelA.HH,1726"$ -$LK,"IEF_OP_SIZE16",A="FL:::/Kernel/KernelA.HH,1725"$ -$LK,"HTT_INTERNAL_TYPE",A="FL:::/Kernel/KernelA.HH,688"$ -$LK,"BD_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,2663"$ -$LK,"DOCEf_ESC",A="FL:::/Kernel/KernelA.HH,1088"$ -$LK,"ScanCode2Char",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,136",BI=29$ -$LK,"NUM_DRVS",A="FL:::/Kernel/KernelA.HH,2717"$ -$LK,"FSt_ISO13346",A="FL:::/Kernel/KernelA.HH,2693"$ +$LK,"RT_F64",A="FL:::/Kernel/KernelA.HH,1552"$ +$LK,"EdLite",A="FL:::/Kernel/EdLite.HC.Z,58",BI=25$ +$LK,"MBR_PT_FAT12",A="FL:::/Kernel/KernelA.HH,2688"$ +$LK,"FramePtr",A="FL:::/Kernel/KHashB.HC.Z,215",BI=26$ +$LK,"ARGT_RM8",A="FL:::/Kernel/KernelA.HH,1884"$ +$LK,"ROPF_PROBABILITY_DITHER",A="FL:::/Kernel/KernelA.HH,2924"$ +$LK,"RTF_UNSIGNED",A="FL:::/Kernel/KernelA.HH,1555"$ +$LK,"DOCEF_HAS_BORDER",A="FL:::/Kernel/KernelA.HH,991"$ +$LK,"TK_EQU_EQU",A="FL:::/Kernel/KernelA.HH,2069"$ +$LK,"RT_I32",A="FL:::/Kernel/KernelA.HH,1545"$ +$LK,"RT_I16",A="FL:::/Kernel/KernelA.HH,1543"$ +$LK,"DOCEf_HAS_BORDER",A="FL:::/Kernel/KernelA.HH,1079"$ +$LK,"SysTry",A="FL:::/Kernel/KExcept.HC.Z,64",BI=27$ +$LK,"POP_REGS",A="FL:::/Kernel/KernelA.HH,1756"$ +$LK,"IEF_OP_SIZE32",A="FL:::/Kernel/KernelA.HH,1713"$ +$LK,"IEF_OP_SIZE16",A="FL:::/Kernel/KernelA.HH,1712"$ +$LK,"HTT_INTERNAL_TYPE",A="FL:::/Kernel/KernelA.HH,676"$ +$LK,"BD_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,2650"$ +$LK,"DOCEf_ESC",A="FL:::/Kernel/KernelA.HH,1076"$ +$LK,"ScanCode2Char",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,136",BI=28$ +$LK,"NUM_DRVS",A="FL:::/Kernel/KernelA.HH,2704"$ +$LK,"FSt_ISO13346",A="FL:::/Kernel/KernelA.HH,2680"$ $LK,"_D3_ADD",A="FL:::/Kernel/KMathA.HC.Z,131"$ -$LK,"SYSf_CTRL_ALT_TAB",A="FL:::/Kernel/KernelA.HH,621"$ -$LK,"RCache",A="FL:::/Kernel/BlkDev/DskCache.HC.Z,119",BI=30$ -$LK,"DOC_ATTR_DFT_TEXT",A="FL:::/Kernel/KernelA.HH,1135"$ +$LK,"RCache",A="FL:::/Kernel/BlkDev/DskCache.HC.Z,119",BI=29$ +$LK,"DOC_ATTR_DFT_TEXT",A="FL:::/Kernel/KernelA.HH,1123"$ $LK,"D3Dot",A="FL:::/Kernel/KernelB.HH,153"$ -$LK,"CSrvCmd",A="FL:::/Kernel/KernelA.HH,3198"$ -$LK,"ARGT_RAX",A="FL:::/Kernel/KernelA.HH,1920"$ -$LK,"EDf_WAS_WRITE",A="FL:::/Kernel/KernelA.HH,1257"$ -$LK,"EDF_WAS_WRITE",A="FL:::/Kernel/KernelA.HH,1251"$ -$LK,"DOCF_NO_SCROLL_BARS",A="FL:::/Kernel/KernelA.HH,1272"$ -$LK,"KbdMsgsQue",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,467",BI=31$ -$LK,"ARGT_ST0",A="FL:::/Kernel/KernelA.HH,1933"$ -$LK,"RT_I64",A="FL:::/Kernel/KernelA.HH,1559"$ -$LK,"FifoI64Cnt",A="FL:::/Kernel/KDataTypes.HC.Z,312",BI=32$ +$LK,"ARGT_RAX",A="FL:::/Kernel/KernelA.HH,1907"$ +$LK,"EDf_WAS_WRITE",A="FL:::/Kernel/KernelA.HH,1245"$ +$LK,"EDF_WAS_WRITE",A="FL:::/Kernel/KernelA.HH,1239"$ +$LK,"DOCF_NO_SCROLL_BARS",A="FL:::/Kernel/KernelA.HH,1260"$ +$LK,"KbdMsgsQue",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,467",BI=30$ +$LK,"ARGT_ST0",A="FL:::/Kernel/KernelA.HH,1920"$ +$LK,"RT_I64",A="FL:::/Kernel/KernelA.HH,1547"$ +$LK,"SEMA_REFRESH_IN_PROGRESS",A="FL:::/Kernel/KernelA.HH,602"$ +$LK,"FifoI64Cnt",A="FL:::/Kernel/KDataTypes.HC.Z,312",BI=31$ $LK,"sys_task_being_scrn_updated",A="FL:::/Kernel/KGlbls.HC.Z,11"$ -$LK,"NUM_PROGRESS_BARS",A="FL:::/Kernel/KernelA.HH,3904"$ -$LK,"SUF_SAFE_DOLLAR",A="FL:::/Kernel/KernelA.HH,3797"$ -$LK,"RWF_SHOW_DOLLAR",A="FL:::/Kernel/KernelA.HH,3597"$ -$LK,"_CFG_HEAP_DBG",A="FL:::/Kernel/KernelA.HH,2799"$ -$LK,"HTt_INTERNAL_TYPE",A="FL:::/Kernel/KernelA.HH,658"$ -$LK,"RedSeaFileWrite",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,511",BI=33$ -$LK,"CPatchTableAbsAddr",A="FL:::/Kernel/KernelA.HH,384"$ -$LK,"DVDImageRead",A="FL:::/Kernel/BlkDev/DskCDDVD.HC.Z,69",BI=34$ -$LK,"FSt_ISO13490",A="FL:::/Kernel/KernelA.HH,2692"$ -$LK,"IET_CODE_HEAP",A="FL:::/Kernel/KernelA.HH,412"$ -$LK,"ROPB_MONO",A="FL:::/Kernel/KernelA.HH,2938"$ -$LK,"CAsmNum2",A="FL:::/Kernel/KernelA.HH,1825"$ +$LK,"NUM_PROGRESS_BARS",A="FL:::/Kernel/KernelA.HH,3859"$ +$LK,"SUF_SAFE_DOLLAR",A="FL:::/Kernel/KernelA.HH,3750"$ +$LK,"RWF_SHOW_DOLLAR",A="FL:::/Kernel/KernelA.HH,3550"$ +$LK,"_CFG_HEAP_DBG",A="FL:::/Kernel/KernelA.HH,2787"$ +$LK,"HTt_INTERNAL_TYPE",A="FL:::/Kernel/KernelA.HH,646"$ +$LK,"RedSeaFileWrite",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,511",BI=32$ +$LK,"CPatchTableAbsAddr",A="FL:::/Kernel/KernelA.HH,383"$ +$LK,"DVDImageRead",A="FL:::/Kernel/BlkDev/DskCDDVD.HC.Z,69",BI=33$ +$LK,"FSt_ISO13490",A="FL:::/Kernel/KernelA.HH,2679"$ +$LK,"IET_CODE_HEAP",A="FL:::/Kernel/KernelA.HH,411"$ +$LK,"ROPB_MONO",A="FL:::/Kernel/KernelA.HH,2906"$ +$LK,"CAsmNum2",A="FL:::/Kernel/KernelA.HH,1812"$ +$LK,"WIf_FOCUS_TASK_MS_WHEEL",A="FL:::/Kernel/KernelA.HH,1440"$ +$LK,"MsHardSetPost",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,203",BI=34$ $LK,"AMAlloc",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,390",BI=35$ -$LK,"ICF_R_TO_INT",A="FL:::/Kernel/KernelA.HH,1590"$ -$LK,"DOCEf_LEN",A="FL:::/Kernel/KernelA.HH,1055"$ +$LK,"DOCEf_LEN",A="FL:::/Kernel/KernelA.HH,1043"$ $LK,"B",A="FL:::/Kernel/KDbg.HC.Z,407",BI=36$ -$LK,"ICF_PUSH_RES",A="FL:::/Kernel/KernelA.HH,1602"$ -$LK,"chars_bmp_dec_numeric",A="FL:::/Kernel/StrA.HC.Z,350"$ +$LK,"ICF_PUSH_RES",A="FL:::/Kernel/KernelA.HH,1590"$ $LK,"D3Equ",A="FL:::/Kernel/KernelB.HH,154"$ -$LK,"FF_NEW_FILE",A="FL:::/Kernel/KernelA.HH,2783"$ -$LK,"CMT_STR_CONST",A="FL:::/Kernel/KernelA.HH,1688"$ -$LK,"WIf_FOCUS_TASK_IP_R_D",A="FL:::/Kernel/KernelA.HH,1451"$ +$LK,"FF_NEW_FILE",A="FL:::/Kernel/KernelA.HH,2771"$ +$LK,"CMT_STR_CONST",A="FL:::/Kernel/KernelA.HH,1675"$ $LK,"D",A="FL:::/Kernel/KDbg.HC.Z,172",BI=37$ $LK,"StrPrint",A="FL:::/Kernel/StrPrint.HC.Z,876",BI=38$ -$LK,"WINMGR_FPS",A="FL:::/Kernel/KernelA.HH,1465"$ +$LK,"MEM_PAG_BITS",A="FL:::/Kernel/KernelA.HH,2846"$ +$LK,"WINMGR_FPS",A="FL:::/Kernel/KernelA.HH,1453"$ $LK,"E",A="FL:::/Kernel/FunSeg.HC.Z,310",BI=39$ -$LK,"ICF_A2_TO_INT",A="FL:::/Kernel/KernelA.HH,1594"$ -$LK,"CEdFileName",A="FL:::/Kernel/KernelA.HH,1241"$ -$LK,"DOCT_LEFT_MARGIN",A="FL:::/Kernel/KernelA.HH,911"$ +$LK,"CEdFileName",A="FL:::/Kernel/KernelA.HH,1229"$ +$LK,"DOCT_LEFT_MARGIN",A="FL:::/Kernel/KernelA.HH,899"$ $LK,"_STRNCMP",A="FL:::/Kernel/StrA.HC.Z,154"$ -$LK,"MEM_NUM_USED_1GIG",A="FL:::/Kernel/KernelA.HH,3466"$ -$LK,"CCF_NO_CHAR_CONST",A="FL:::/Kernel/KernelA.HH,2137"$ +$LK,"CCF_NO_CHAR_CONST",A="FL:::/Kernel/KernelA.HH,2124"$ $LK,"G",A="FL:::/Kernel/KDbg.HC.Z,444",BI=40$ $LK,"ScaleIndent",A="FL:::/Kernel/StrB.HC.Z,35",BI=41$ -$LK,"IET_ABS_ADDR",A="FL:::/Kernel/KernelA.HH,411"$ +$LK,"JOBCf_LOCKED",A="FL:::/Kernel/KernelA.HH,3177"$ +$LK,"IET_ABS_ADDR",A="FL:::/Kernel/KernelA.HH,410"$ $LK,"PressAKey",A="FL:::/Kernel/StrB.HC.Z,103",BI=42$ -$LK,"DOF_WIN_MAX",A="FL:::/Kernel/KernelA.HH,1219"$ -$LK,"CCodeCtrl",A="FL:::/Kernel/KernelA.HH,2015"$ +$LK,"DOF_WIN_MAX",A="FL:::/Kernel/KernelA.HH,1207"$ +$LK,"CCodeCtrl",A="FL:::/Kernel/KernelA.HH,2002"$ $LK,"Char2ScanCode",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,100",BI=43$ $LK,"Mem32DevInit",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,30",BI=44$ $LK,"_BIT_FIELD_OR_U32",A="FL:::/Kernel/KUtils.HC.Z,154"$ -$LK,"DOCf_NO_SCROLL_BARS",A="FL:::/Kernel/KernelA.HH,1308"$ +$LK,"DOCf_NO_SCROLL_BARS",A="FL:::/Kernel/KernelA.HH,1296"$ $LK,"SPutChar",A="FL:::/Kernel/StrPrint.HC.Z,1",BI=45$ $LK,"TaskQueIns",A="FL:::/Kernel/Sched.HC.Z,287",BI=46$ -$LK,"CYAN",A="FL:::/Kernel/KernelA.HH,2963"$ -$LK,"TK_SUPERSCRIPT",A="FL:::/Kernel/KernelA.HH,2068"$ -$LK,"RS_ATTR_DELETED",A="FL:::/Kernel/KernelA.HH,2535"$ -$LK,"CMT_ASM_LABEL",A="FL:::/Kernel/KernelA.HH,1686"$ -$LK,"RLF_64BIT",A="FL:::/Kernel/KernelA.HH,462"$ -$LK,"RLf_64BIT",A="FL:::/Kernel/KernelA.HH,443"$ +$LK,"CYAN",A="FL:::/Kernel/KernelA.HH,2931"$ +$LK,"TK_SUPERSCRIPT",A="FL:::/Kernel/KernelA.HH,2055"$ +$LK,"RS_ATTR_DELETED",A="FL:::/Kernel/KernelA.HH,2522"$ +$LK,"CMT_ASM_LABEL",A="FL:::/Kernel/KernelA.HH,1673"$ +$LK,"RLF_64BIT",A="FL:::/Kernel/KernelA.HH,465"$ +$LK,"RLf_64BIT",A="FL:::/Kernel/KernelA.HH,445"$ $LK,"RedSeaFreeLstBuild",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,24",BI=47$ -$LK,"TK_SHL",A="FL:::/Kernel/KernelA.HH,2080"$ -$LK,"DOCf_HAS_SONG",A="FL:::/Kernel/KernelA.HH,1311"$ -$LK,"DOCF_HAS_SONG",A="FL:::/Kernel/KernelA.HH,1275"$ -$LK,"CH_CTRLA",A="FL:::/Kernel/KernelA.HH,3484"$ -$LK,"CHashGlblVar",A="FL:::/Kernel/KernelA.HH,874"$ -$LK,"CH_CTRLB",A="FL:::/Kernel/KernelA.HH,3485"$ -$LK,"MEM_NUM_1GIG",A="FL:::/Kernel/KernelA.HH,3467"$ -$LK,"DOCEf_TAG",A="FL:::/Kernel/KernelA.HH,1054"$ +$LK,"MSG_MS_L_D_UP",A="FL:::/Kernel/KernelA.HH,3195"$ +$LK,"TK_SHL",A="FL:::/Kernel/KernelA.HH,2067"$ +$LK,"DOCf_HAS_SONG",A="FL:::/Kernel/KernelA.HH,1299"$ +$LK,"DOCF_HAS_SONG",A="FL:::/Kernel/KernelA.HH,1263"$ +$LK,"CH_CTRLA",A="FL:::/Kernel/KernelA.HH,3438"$ +$LK,"CHashGlblVar",A="FL:::/Kernel/KernelA.HH,862"$ +$LK,"MEM_NUM_1GIG",A="FL:::/Kernel/KStart32.HC.Z,11"$ +$LK,"CH_CTRLB",A="FL:::/Kernel/KernelA.HH,3439"$ +$LK,"DOCEf_TAG",A="FL:::/Kernel/KernelA.HH,1042"$ $LK,"S",A="FL:::/Kernel/KDbg.HC.Z,479",BI=48$ -$LK,"CH_CTRLC",A="FL:::/Kernel/KernelA.HH,3486"$ +$LK,"CH_CTRLC",A="FL:::/Kernel/KernelA.HH,3440"$ +$LK,"SEMA_RECORD_MACRO",A="FL:::/Kernel/KernelA.HH,595"$ $LK,"FifoI64Ins",A="FL:::/Kernel/KDataTypes.HC.Z,258",BI=49$ $LK,"FloorU64",A="FL:::/Kernel/KMathB.HC.Z,36",BI=50$ -$LK,"CH_CTRLD",A="FL:::/Kernel/KernelA.HH,3487"$ -$LK,"DOCF_WORD_WRAP",A="FL:::/Kernel/KernelA.HH,1284"$ -$LK,"DOCT_WORD_WRAP",A="FL:::/Kernel/KernelA.HH,920"$ -$LK,"CH_CTRLE",A="FL:::/Kernel/KernelA.HH,3488"$ -$LK,"BLACK",A="FL:::/Kernel/KernelA.HH,2960"$ -$LK,"ARGT_STI",A="FL:::/Kernel/KernelA.HH,1934"$ -$LK,"NUM_REGS",A="FL:::/Kernel/KernelA.HH,1772"$ -$LK,"DOCf_WORD_WRAP",A="FL:::/Kernel/KernelA.HH,1321"$ -$LK,"DOCEf_BOTTOM_Y",A="FL:::/Kernel/KernelA.HH,1081"$ -$LK,"DOCEF_BOTTOM_Y",A="FL:::/Kernel/KernelA.HH,993"$ +$LK,"CH_CTRLD",A="FL:::/Kernel/KernelA.HH,3441"$ +$LK,"DOCF_WORD_WRAP",A="FL:::/Kernel/KernelA.HH,1272"$ +$LK,"DOCT_WORD_WRAP",A="FL:::/Kernel/KernelA.HH,908"$ +$LK,"CH_CTRLE",A="FL:::/Kernel/KernelA.HH,3442"$ +$LK,"BLACK",A="FL:::/Kernel/KernelA.HH,2928"$ +$LK,"ARGT_STI",A="FL:::/Kernel/KernelA.HH,1921"$ +$LK,"NUM_REGS",A="FL:::/Kernel/KernelA.HH,1759"$ +$LK,"DOCf_WORD_WRAP",A="FL:::/Kernel/KernelA.HH,1309"$ +$LK,"DOCEf_BOTTOM_Y",A="FL:::/Kernel/KernelA.HH,1069"$ +$LK,"DOCEF_BOTTOM_Y",A="FL:::/Kernel/KernelA.HH,981"$ $LK,"FileNameAbs",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,171",BI=51$ -$LK,"CH_CTRLF",A="FL:::/Kernel/KernelA.HH,3489"$ -$LK,"TK_SHR",A="FL:::/Kernel/KernelA.HH,2081"$ +$LK,"CH_CTRLF",A="FL:::/Kernel/KernelA.HH,3443"$ +$LK,"TK_SHR",A="FL:::/Kernel/KernelA.HH,2068"$ $LK,"AutoMountIDE",A="FL:::/Kernel/BlkDev/DskATAId.HC.Z,253",BI=52$ -$LK,"CH_CTRLG",A="FL:::/Kernel/KernelA.HH,3490"$ -$LK,"DOCEF_REMALLOC_DATA",A="FL:::/Kernel/KernelA.HH,1013"$ +$LK,"CH_CTRLG",A="FL:::/Kernel/KernelA.HH,3444"$ +$LK,"DOCEF_REMALLOC_DATA",A="FL:::/Kernel/KernelA.HH,1001"$ $LK,"_HASH_REM_DEL",A="FL:::/Kernel/KHashA.HC.Z,208"$ $LK,"TaskQueRem",A="FL:::/Kernel/Sched.HC.Z,301",BI=53$ -$LK,"CH_CTRLH",A="FL:::/Kernel/KernelA.HH,3491"$ -$LK,"CPalindromeU32",A="FL:::/Kernel/KernelA.HH,2416"$ -$LK,"CPalindromeU16",A="FL:::/Kernel/KernelA.HH,2411"$ -$LK,"DOCT_CHECK_BOX",A="FL:::/Kernel/KernelA.HH,932"$ -$LK,"DCF_SCRN_BITMAP",A="FL:::/Kernel/KernelA.HH,3640"$ -$LK,"CH_CTRLI",A="FL:::/Kernel/KernelA.HH,3492"$ -$LK,"FileNameTmpTxt",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,276",BI=54$ -$LK,"FifoI64New",A="FL:::/Kernel/KDataTypes.HC.Z,240",BI=55$ -$LK,"CH_CTRLJ",A="FL:::/Kernel/KernelA.HH,3493"$ -$LK,"ARGT_XMM128",A="FL:::/Kernel/KernelA.HH,1943"$ -$LK,"SC_CURSOR_UP",A="FL:::/Kernel/KernelA.HH,3566"$ -$LK,"CH_CTRLK",A="FL:::/Kernel/KernelA.HH,3494"$ -$LK,"TASKf_HAS_SONG",A="FL:::/Kernel/KernelA.HH,3288"$ -$LK,"DOCEf_SEL",A="FL:::/Kernel/KernelA.HH,1050"$ -$LK,"RandI32",A="FL:::/Kernel/KMathB.HC.Z,97",BI=56$ -$LK,"RandI16",A="FL:::/Kernel/KMathB.HC.Z,77",BI=57$ -$LK,"CH_CTRLL",A="FL:::/Kernel/KernelA.HH,3495"$ -$LK,"CH_CTRLM",A="FL:::/Kernel/KernelA.HH,3496"$ -$LK,"ICf_LOCK",A="FL:::/Kernel/KernelA.HH,1614"$ -$LK,"ICF_LOCK",A="FL:::/Kernel/KernelA.HH,1613"$ -$LK,"PutFileLink",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,163",BI=58$ -$LK,"BreakLock",A="FL:::/Kernel/KExcept.HC.Z,147",BI=59$ -$LK,"HPET",A="FL:::/Kernel/KMisc.HC.Z,80",BI=60$ -$LK,"CORE0_32BIT_INIT",A="FL:::/Kernel/KStart32.HC.Z,61"$ +$LK,"RedSeaValidate",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,82",BI=54$ +$LK,"CH_CTRLH",A="FL:::/Kernel/KernelA.HH,3445"$ +$LK,"CPalindromeU32",A="FL:::/Kernel/KernelA.HH,2403"$ +$LK,"CPalindromeU16",A="FL:::/Kernel/KernelA.HH,2398"$ +$LK,"DOCT_CHECK_BOX",A="FL:::/Kernel/KernelA.HH,920"$ +$LK,"DCF_SCRN_BITMAP",A="FL:::/Kernel/KernelA.HH,3593"$ +$LK,"CH_CTRLI",A="FL:::/Kernel/KernelA.HH,3446"$ +$LK,"FileNameTmpTxt",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,276",BI=55$ +$LK,"FifoI64New",A="FL:::/Kernel/KDataTypes.HC.Z,240",BI=56$ +$LK,"CH_CTRLJ",A="FL:::/Kernel/KernelA.HH,3447"$ +$LK,"ARGT_XMM128",A="FL:::/Kernel/KernelA.HH,1930"$ +$LK,"SC_CURSOR_UP",A="FL:::/Kernel/KernelA.HH,3519"$ +$LK,"CH_CTRLK",A="FL:::/Kernel/KernelA.HH,3448"$ +$LK,"TASKf_HAS_SONG",A="FL:::/Kernel/KernelA.HH,3248"$ +$LK,"WIF_FOCUS_TASK_MS_L_D",A="FL:::/Kernel/KernelA.HH,1412"$ +$LK,"DOCEf_SEL",A="FL:::/Kernel/KernelA.HH,1038"$ +$LK,"RandI32",A="FL:::/Kernel/KMathB.HC.Z,97",BI=57$ +$LK,"RandI16",A="FL:::/Kernel/KMathB.HC.Z,77",BI=58$ +$LK,"CH_CTRLL",A="FL:::/Kernel/KernelA.HH,3449"$ +$LK,"CH_CTRLM",A="FL:::/Kernel/KernelA.HH,3450"$ +$LK,"ICf_LOCK",A="FL:::/Kernel/KernelA.HH,1602"$ +$LK,"ICF_LOCK",A="FL:::/Kernel/KernelA.HH,1601"$ +$LK,"WIF_SELF_MS_WHEEL",A="FL:::/Kernel/KernelA.HH,1402"$ +$LK,"PutFileLink",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,163",BI=59$ +$LK,"BreakLock",A="FL:::/Kernel/KExcept.HC.Z,131",BI=60$ +$LK,"HPET",A="FL:::/Kernel/KMisc.HC.Z,80",BI=61$ +$LK,"CORE0_32BIT_INIT",A="FL:::/Kernel/KStart32.HC.Z,75"$ $LK,"CORE0_16BIT_INIT",A="FL:::/Kernel/KStart16.HC.Z,56"$ -$LK,"CH_CTRLN",A="FL:::/Kernel/KernelA.HH,3497"$ -$LK,"BDf_FMT",A="FL:::/Kernel/KernelA.HH,2655"$ -$LK,"CCF_KEEP_DOT",A="FL:::/Kernel/KernelA.HH,2134"$ -$LK,"Let2BlkDevType",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,161",BI=61$ -$LK,"CH_CTRLO",A="FL:::/Kernel/KernelA.HH,3498"$ -$LK,"ARGT_XMM",A="FL:::/Kernel/KernelA.HH,1939"$ -$LK,"DOCEf_REMALLOC_DATA",A="FL:::/Kernel/KernelA.HH,1099"$ -$LK,"DOCEf_WIN_REL",A="FL:::/Kernel/KernelA.HH,1086"$ -$LK,"DOCEF_WIN_REL",A="FL:::/Kernel/KernelA.HH,998"$ -$LK,"FifoI64Rem",A="FL:::/Kernel/KDataTypes.HC.Z,275",BI=62$ +$LK,"CH_CTRLN",A="FL:::/Kernel/KernelA.HH,3451"$ +$LK,"BDf_FMT",A="FL:::/Kernel/KernelA.HH,2642"$ +$LK,"CCF_KEEP_DOT",A="FL:::/Kernel/KernelA.HH,2121"$ +$LK,"Let2BlkDevType",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,172",BI=62$ +$LK,"CH_CTRLO",A="FL:::/Kernel/KernelA.HH,3452"$ +$LK,"ARGT_XMM",A="FL:::/Kernel/KernelA.HH,1926"$ +$LK,"DOCEf_REMALLOC_DATA",A="FL:::/Kernel/KernelA.HH,1087"$ +$LK,"DOCEf_WIN_REL",A="FL:::/Kernel/KernelA.HH,1074"$ +$LK,"DOCEF_WIN_REL",A="FL:::/Kernel/KernelA.HH,986"$ +$LK,"FifoI64Rem",A="FL:::/Kernel/KDataTypes.HC.Z,275",BI=63$ $LK,"_D3_DIV",A="FL:::/Kernel/KMathA.HC.Z,184"$ -$LK,"CH_CTRLP",A="FL:::/Kernel/KernelA.HH,3499"$ -$LK,"chars_bmp_non_eol",A="FL:::/Kernel/StrA.HC.Z,396"$ -$LK,"PRTF_NEG",A="FL:::/Kernel/KernelA.HH,3923"$ -$LK,"CH_CTRLQ",A="FL:::/Kernel/KernelA.HH,3500"$ -$LK,"CTSS",A="FL:::/Kernel/KernelA.HH,3407"$ -$LK,"HomeSet",A="FL:::/Kernel/BlkDev/DskDirB.HC.Z,1",BI=63$ -$LK,"FileNameChk",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,249",BI=64$ +$LK,"CH_CTRLP",A="FL:::/Kernel/KernelA.HH,3453"$ +$LK,"ICF_ARG2_TO_INT",A="FL:::/Kernel/KernelA.HH,1582"$ +$LK,"PRTF_NEG",A="FL:::/Kernel/KernelA.HH,3878"$ +$LK,"CH_CTRLQ",A="FL:::/Kernel/KernelA.HH,3454"$ +$LK,"CTSS",A="FL:::/Kernel/KernelA.HH,3367"$ +$LK,"HomeSet",A="FL:::/Kernel/BlkDev/DskDirB.HC.Z,1",BI=64$ +$LK,"FileNameChk",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,249",BI=65$ $LK,"D3Mul",A="FL:::/Kernel/KernelB.HH,155"$ -$LK,"CH_CTRLR",A="FL:::/Kernel/KernelA.HH,3501"$ +$LK,"CH_CTRLR",A="FL:::/Kernel/KernelA.HH,3455"$ $LK,"SK_NAME",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,89"$ -$LK,"CtrlAltC",A="FL:::/Kernel/KeyDev.HC.Z,133",BI=65$ -$LK,"CallerRep",A="FL:::/Kernel/KDbg.HC.Z,152",BI=66$ -$LK,"CH_CTRLS",A="FL:::/Kernel/KernelA.HH,3502"$ -$LK,"ROP_EQU",A="FL:::/Kernel/KernelA.HH,2944"$ -$LK,"DOCEf_LST",A="FL:::/Kernel/KernelA.HH,1104"$ -$LK,"CtrlAltD",A="FL:::/Kernel/KeyDev.HC.Z,138",BI=67$ -$LK,"RandI64",A="FL:::/Kernel/KMathB.HC.Z,117",BI=68$ -$LK,"CH_CTRLT",A="FL:::/Kernel/KernelA.HH,3503"$ -$LK,"MBS_UNUSED_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,2859"$ -$LK,"CCmpGlbls",A="FL:::/Kernel/KernelA.HH,2214"$ -$LK,"RT_U32",A="FL:::/Kernel/KernelA.HH,1558"$ -$LK,"RT_U16",A="FL:::/Kernel/KernelA.HH,1556"$ -$LK,"CExternUsage",A="FL:::/Kernel/KernelA.HH,818"$ -$LK,"FAT32FreeClusters",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,413",BI=69$ +$LK,"CtrlAltC",A="FL:::/Kernel/KeyDev.HC.Z,133",BI=66$ +$LK,"CallerRep",A="FL:::/Kernel/KDbg.HC.Z,152",BI=67$ +$LK,"CH_CTRLS",A="FL:::/Kernel/KernelA.HH,3456"$ +$LK,"ROP_EQU",A="FL:::/Kernel/KernelA.HH,2912"$ +$LK,"DOCEf_LST",A="FL:::/Kernel/KernelA.HH,1092"$ +$LK,"CtrlAltD",A="FL:::/Kernel/KeyDev.HC.Z,138",BI=68$ +$LK,"RandI64",A="FL:::/Kernel/KMathB.HC.Z,117",BI=69$ +$LK,"CH_CTRLT",A="FL:::/Kernel/KernelA.HH,3457"$ +$LK,"MBS_UNUSED_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,2827"$ +$LK,"CCmpGlbls",A="FL:::/Kernel/KernelA.HH,2201"$ +$LK,"RT_U32",A="FL:::/Kernel/KernelA.HH,1546"$ +$LK,"RT_U16",A="FL:::/Kernel/KernelA.HH,1544"$ +$LK,"CExternUsage",A="FL:::/Kernel/KernelA.HH,806"$ +$LK,"FAT32FreeClusters",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,401",BI=70$ $LK,"sys_os_version",A="FL:::/Kernel/KGlbls.HC.Z,16"$ -$LK,"CH_CTRLU",A="FL:::/Kernel/KernelA.HH,3504"$ -$LK,"ARGT_MM32",A="FL:::/Kernel/KernelA.HH,1937"$ -$LK,"DOCSS_COMMENT",A="FL:::/Kernel/KernelA.HH,1132"$ -$LK,"CtrlAltF",A="FL:::/Kernel/KeyDev.HC.Z,148",BI=70$ -$LK,"ip_grid",A="FL:::/Kernel/KGlbls.HC.Z,24"$ -$LK,"CH_CTRLV",A="FL:::/Kernel/KernelA.HH,3505"$ -$LK,"CCodeMisc",A="FL:::/Kernel/KernelA.HH,1703"$ -$LK,"DOF_DONT_TEXT_ATTR",A="FL:::/Kernel/KernelA.HH,1220"$ -$LK,"DOCEf_WORD_WRAP",A="FL:::/Kernel/KernelA.HH,1047"$ -$LK,"DOCEF_WORD_WRAP",A="FL:::/Kernel/KernelA.HH,1041"$ -$LK,"DrvFATBlkSet",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,117",BI=71$ -$LK,"ISODrvInit",A="FL:::/Kernel/BlkDev/DskCDDVD.HC.Z,5",BI=72$ -$LK,"CH_CTRLW",A="FL:::/Kernel/KernelA.HH,3506"$ -$LK,"FFB_NEXT_BLK",A="FL:::/Kernel/KernelA.HH,2780"$ +$LK,"CH_CTRLU",A="FL:::/Kernel/KernelA.HH,3458"$ +$LK,"ARGT_MM32",A="FL:::/Kernel/KernelA.HH,1924"$ +$LK,"WIf_SELF_MS_WHEEL",A="FL:::/Kernel/KernelA.HH,1428"$ +$LK,"DOCSS_COMMENT",A="FL:::/Kernel/KernelA.HH,1120"$ +$LK,"CtrlAltF",A="FL:::/Kernel/KeyDev.HC.Z,148",BI=71$ +$LK,"CH_CTRLV",A="FL:::/Kernel/KernelA.HH,3459"$ +$LK,"CCodeMisc",A="FL:::/Kernel/KernelA.HH,1690"$ +$LK,"DOF_DONT_TEXT_ATTR",A="FL:::/Kernel/KernelA.HH,1208"$ +$LK,"DOCEf_WORD_WRAP",A="FL:::/Kernel/KernelA.HH,1035"$ +$LK,"DOCEF_WORD_WRAP",A="FL:::/Kernel/KernelA.HH,1029"$ +$LK,"DrvFATBlkSet",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,117",BI=72$ +$LK,"CH_CTRLW",A="FL:::/Kernel/KernelA.HH,3460"$ +$LK,"FFB_NEXT_BLK",A="FL:::/Kernel/KernelA.HH,2768"$ $LK,"ISO1FromName",A="FL:::/Kernel/BlkDev/FileSysISO.HC.Z,28",BI=73$ $LK,"MPIntAll",A="FL:::/Kernel/MultiProc.HC.Z,149",BI=74$ $LK,"TaskContextRestore",A="FL:::/Kernel/Sched.HC.Z,283"$ -$LK,"SCf_ALT",A="FL:::/Kernel/KernelA.HH,3526"$ -$LK,"CH_CTRLX",A="FL:::/Kernel/KernelA.HH,3507"$ -$LK,"CH_CTRLY",A="FL:::/Kernel/KernelA.HH,3508"$ -$LK,"CDoc",A="FL:::/Kernel/KernelA.HH,1356"$ +$LK,"SCf_ALT",A="FL:::/Kernel/KernelA.HH,3479"$ +$LK,"CH_CTRLX",A="FL:::/Kernel/KernelA.HH,3461"$ +$LK,"CH_CTRLY",A="FL:::/Kernel/KernelA.HH,3462"$ +$LK,"CDoc",A="FL:::/Kernel/KernelA.HH,1344"$ $LK,"MemSetU8",A="FL:::/Kernel/KernelB.HH,178"$ $LK,"_FCLEX",A="FL:::/Kernel/KMathA.HC.Z,646"$ $LK,"_D3_DOT",A="FL:::/Kernel/KMathA.HC.Z,113"$ -$LK,"ARf_CSPRITE_INS_CLIPBOARD",A="FL:::/Kernel/KernelA.HH,3896"$ -$LK,"CH_CTRLZ",A="FL:::/Kernel/KernelA.HH,3509"$ -$LK,"MEM_NUM_2MEG",A="FL:::/Kernel/KernelA.HH,3465"$ -$LK,"CHashGeneric",A="FL:::/Kernel/KernelA.HH,734"$ +$LK,"MEM_NUM_2MEG",A="FL:::/Kernel/KStart32.HC.Z,10"$ +$LK,"ARf_CSPRITE_INS_CLIPBOARD",A="FL:::/Kernel/KernelA.HH,3851"$ +$LK,"CH_CTRLZ",A="FL:::/Kernel/KernelA.HH,3463"$ +$LK,"CHashGeneric",A="FL:::/Kernel/KernelA.HH,722"$ $LK,"SYS_FIND_PCIBIOS_SERVICE_DIR",A="FL:::/Kernel/PCIBIOS.HC.Z,8"$ -$LK,"CTRLF_CLICKED",A="FL:::/Kernel/KernelA.HH,3098"$ -$LK,"HTF_RESOLVE",A="FL:::/Kernel/KernelA.HH,708"$ +$LK,"CTRLF_CLICKED",A="FL:::/Kernel/KernelA.HH,3060"$ +$LK,"HTF_RESOLVE",A="FL:::/Kernel/KernelA.HH,696"$ $LK,"BCnt",A="FL:::/Kernel/KMisc.HC.Z,39",BI=75$ -$LK,"Mem64DevAlloc",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,131",BI=76$ -$LK,"Mem32DevAlloc",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,81",BI=77$ -$LK,"RT_U64",A="FL:::/Kernel/KernelA.HH,1561"$ -$LK,"DOCT_TAB",A="FL:::/Kernel/KernelA.HH,904"$ -$LK,"HTT_FRAME_PTR",A="FL:::/Kernel/KernelA.HH,699"$ -$LK,"HTt_FRAME_PTR",A="FL:::/Kernel/KernelA.HH,669"$ +$LK,"Mem64DevAlloc",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,108",BI=76$ +$LK,"Mem32DevAlloc",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,58",BI=77$ +$LK,"RT_U64",A="FL:::/Kernel/KernelA.HH,1549"$ +$LK,"DOCT_TAB",A="FL:::/Kernel/KernelA.HH,892"$ +$LK,"HTT_FRAME_PTR",A="FL:::/Kernel/KernelA.HH,687"$ +$LK,"HTt_FRAME_PTR",A="FL:::/Kernel/KernelA.HH,657"$ $LK,"ISO1FilesFind",A="FL:::/Kernel/BlkDev/FileSysISO.HC.Z,173",BI=78$ $LK,"CtrlAltM",A="FL:::/Kernel/KeyDev.HC.Z,153",BI=79$ $LK,"DefineLstLoad",A="FL:::/Kernel/KDefine.HC.Z,13",BI=80$ -$LK,"ARGT_MM64",A="FL:::/Kernel/KernelA.HH,1938"$ -$LK,"DOCEf_LEFT_CB",A="FL:::/Kernel/KernelA.HH,1072"$ -$LK,"DOCEF_LEFT_CB",A="FL:::/Kernel/KernelA.HH,984"$ +$LK,"ARGT_MM64",A="FL:::/Kernel/KernelA.HH,1925"$ +$LK,"DOCEf_LEFT_CB",A="FL:::/Kernel/KernelA.HH,1060"$ +$LK,"DOCEF_LEFT_CB",A="FL:::/Kernel/KernelA.HH,972"$ $LK,"RFLAGf_DIR",A="FL:::/Kernel/KernelA.HH,315"$ $LK,"ClusterNumNext",A="FL:::/Kernel/BlkDev/DskCluster.HC.Z,1",BI=81$ -$LK,"KbdMouseEvtTime",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,486",BI=82$ -$LK,"CtrlAltN",A="FL:::/Kernel/KeyDev.HC.Z,158",BI=83$ -$LK,"ip_last",A="FL:::/Kernel/KGlbls.HC.Z,25"$ -$LK,"C:/Doc/MultiCore.DD.Z",A="FL:::/Kernel/KernelB.HH,231"$ -$LK,"CDirEntry",A="FL:::/Kernel/KernelA.HH,2552"$ -$LK,"TK_STR",A="FL:::/Kernel/KernelA.HH,2072"$ -$LK,"ACD_DEF_END",A="FL:::/Kernel/KernelA.HH,1503"$ -$LK,"PROGRESS_DESC_LEN",A="FL:::/Kernel/KernelA.HH,3905"$ -$LK,"CCF_ASM_EXPRESSIONS",A="FL:::/Kernel/KernelA.HH,2145"$ +$LK,"CtrlAltN",A="FL:::/Kernel/KeyDev.HC.Z,158",BI=82$ +$LK,"C:/Doc/MultiCore.DD.Z",A="FL:::/Kernel/KernelB.HH,237"$ +$LK,"CDirEntry",A="FL:::/Kernel/KernelA.HH,2539"$ +$LK,"TK_STR",A="FL:::/Kernel/KernelA.HH,2059"$ +$LK,"ACD_DEF_END",A="FL:::/Kernel/KernelA.HH,1491"$ +$LK,"PROGRESS_DESC_LEN",A="FL:::/Kernel/KernelA.HH,3860"$ +$LK,"CCF_ASM_EXPRESSIONS",A="FL:::/Kernel/KernelA.HH,2132"$ $LK,"D3Sub",A="FL:::/Kernel/KernelB.HH,159"$ -$LK,"SC_CURSOR_RIGHT",A="FL:::/Kernel/KernelA.HH,3569"$ -$LK,"KeyDevAdd",A="FL:::/Kernel/KeyDev.HC.Z,70",BI=84$ -$LK,"CTRLF_BORDER",A="FL:::/Kernel/KernelA.HH,3095"$ +$LK,"SC_CURSOR_RIGHT",A="FL:::/Kernel/KernelA.HH,3522"$ +$LK,"KeyDevAdd",A="FL:::/Kernel/KeyDev.HC.Z,70",BI=83$ +$LK,"CTRLF_BORDER",A="FL:::/Kernel/KernelA.HH,3057"$ $LK,"_D3_EQU",A="FL:::/Kernel/KMathA.HC.Z,226"$ -$LK,"VGAP_ATTR_DATA_READ",A="FL:::/Kernel/KernelA.HH,3726"$ -$LK,"ATA_PACKET",A="FL:::/Kernel/KernelA.HH,2259"$ -$LK,"HTF_LOCAL",A="FL:::/Kernel/KernelA.HH,710"$ -$LK,"HTT_ASM_KEYWORD",A="FL:::/Kernel/KernelA.HH,693"$ -$LK,"HTf_LOCAL",A="FL:::/Kernel/KernelA.HH,680"$ -$LK,"CtrlAltT",A="FL:::/Kernel/KeyDev.HC.Z,163",BI=85$ -$LK,"IsSilent",A="FL:::/Kernel/KMisc.HC.Z,240",BI=86$ -$LK,"CBpt",A="FL:::/Kernel/KernelA.HH,3160"$ -$LK,"HTt_ASM_KEYWORD",A="FL:::/Kernel/KernelA.HH,663"$ -$LK,"PCIWriteU32",A="FL:::/Kernel/PCIBIOS.HC.Z,250",BI=87$ -$LK,"PCIWriteU16",A="FL:::/Kernel/PCIBIOS.HC.Z,235",BI=88$ -$LK,"CtrlAltV",A="FL:::/Kernel/KeyDev.HC.Z,168",BI=89$ -$LK,"CISO1DirEntry",A="FL:::/Kernel/KernelA.HH,2458"$ +$LK,"VGAP_ATTR_DATA_READ",A="FL:::/Kernel/KernelA.HH,3679"$ +$LK,"ATA_PACKET",A="FL:::/Kernel/KernelA.HH,2246"$ +$LK,"WIF_FOCUS_TASK_MS_R_D",A="FL:::/Kernel/KernelA.HH,1414"$ +$LK,"HTF_LOCAL",A="FL:::/Kernel/KernelA.HH,698"$ +$LK,"HTT_ASM_KEYWORD",A="FL:::/Kernel/KernelA.HH,681"$ +$LK,"HTf_LOCAL",A="FL:::/Kernel/KernelA.HH,668"$ +$LK,"CtrlAltT",A="FL:::/Kernel/KeyDev.HC.Z,163",BI=84$ +$LK,"IsSilent",A="FL:::/Kernel/KMisc.HC.Z,256",BI=85$ +$LK,"CBpt",A="FL:::/Kernel/KernelA.HH,3122"$ +$LK,"HTt_ASM_KEYWORD",A="FL:::/Kernel/KernelA.HH,651"$ +$LK,"PCIWriteU32",A="FL:::/Kernel/PCIBIOS.HC.Z,250",BI=86$ +$LK,"PCIWriteU16",A="FL:::/Kernel/PCIBIOS.HC.Z,235",BI=87$ +$LK,"CtrlAltV",A="FL:::/Kernel/KeyDev.HC.Z,168",BI=88$ +$LK,"VM_VMWARE",A="FL:::/Kernel/KernelA.HH,3891"$ +$LK,"CISO1DirEntry",A="FL:::/Kernel/KernelA.HH,2445"$ $LK,"_LXCHG_U8",A="FL:::/Kernel/KUtils.HC.Z,244"$ -$LK,"CtrlAltX",A="FL:::/Kernel/KeyDev.HC.Z,173",BI=90$ -$LK,"ChgDsk",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,230",BI=91$ -$LK,"UserTaskCont",A="FL:::/Kernel/KTask.HC.Z,369",BI=92$ +$LK,"CtrlAltX",A="FL:::/Kernel/KeyDev.HC.Z,173",BI=89$ +$LK,"ChgDsk",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,237",BI=90$ +$LK,"UserTaskCont",A="FL:::/Kernel/KTask.HC.Z,384",BI=91$ $LK,"RFLAGf_NESTED_TASK",A="FL:::/Kernel/KernelA.HH,319"$ $LK,"BEqu",A="FL:::/Kernel/KernelB.HH,28"$ -$LK,"ISO1T_PRI_VOL_DESC",A="FL:::/Kernel/KernelA.HH,2479"$ -$LK,"FAT32MkDir",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,933",BI=93$ -$LK,"DCS_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,3649"$ -$LK,"ICF_USE_INT",A="FL:::/Kernel/KernelA.HH,1597"$ -$LK,"DOCT_NEW_LINE",A="FL:::/Kernel/KernelA.HH,902"$ -$LK,"BIN_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,372"$ -$LK,"ARGT_IMM8",A="FL:::/Kernel/KernelA.HH,1882"$ +$LK,"ISO1T_PRI_VOL_DESC",A="FL:::/Kernel/KernelA.HH,2466"$ +$LK,"FAT32MkDir",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,921",BI=92$ +$LK,"DCS_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,3602"$ +$LK,"ICF_USE_INT",A="FL:::/Kernel/KernelA.HH,1585"$ +$LK,"DOCT_NEW_LINE",A="FL:::/Kernel/KernelA.HH,890"$ +$LK,"BIN_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,371"$ +$LK,"char_bmp_non_eol_white_space",A="FL:::/Kernel/StrA.HC.Z,359"$ +$LK,"ARGT_IMM8",A="FL:::/Kernel/KernelA.HH,1869"$ $LK,"SYS_HASH_SINGLE_TABLE_FIND1",A="FL:::/Kernel/KHashA.HC.Z,30"$ -$LK,"DOC_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,1345"$ -$LK,"DOCEF_INVERT",A="FL:::/Kernel/KernelA.HH,1043"$ +$LK,"CJob",A="FL:::/Kernel/KernelA.HH,3160"$ +$LK,"DOC_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,1333"$ +$LK,"DOCEF_INVERT",A="FL:::/Kernel/KernelA.HH,1031"$ $LK,"CDateStruct",A="FL:::/Kernel/KernelA.HH,193"$ -$LK,"CHashFun",A="FL:::/Kernel/KernelA.HH,857"$ -$LK,"SV_I_REG",A="FL:::/Kernel/KernelA.HH,1739"$ -$LK,"DOCEf_INVERT",A="FL:::/Kernel/KernelA.HH,1049"$ -$LK,"DayOfWeek",A="FL:::/Kernel/KDate.HC.Z,30",BI=94$ -$LK,"CDrv",A="FL:::/Kernel/KernelA.HH,2720"$ -$LK,"TK_MINUS_MINUS",A="FL:::/Kernel/KernelA.HH,2077"$ -$LK,"DOCT_LST",A="FL:::/Kernel/KernelA.HH,933"$ -$LK,"JobResGet",A="FL:::/Kernel/SrvCmd.HC.Z,198",BI=95$ -$LK,"sys_heap_init_flag",A="FL:::/Kernel/KernelB.HH,181"$ -$LK,"FUF_CANCEL",A="FL:::/Kernel/KernelA.HH,2600"$ -$LK,"FUf_CANCEL",A="FL:::/Kernel/KernelA.HH,2573"$ +$LK,"CHashFun",A="FL:::/Kernel/KernelA.HH,845"$ +$LK,"JOBf_ADD_TO_QUE",A="FL:::/Kernel/KernelA.HH,3151"$ +$LK,"SV_I_REG",A="FL:::/Kernel/KernelA.HH,1726"$ +$LK,"DOCEf_INVERT",A="FL:::/Kernel/KernelA.HH,1037"$ +$LK,"DayOfWeek",A="FL:::/Kernel/KDate.HC.Z,30",BI=93$ +$LK,"CDrv",A="FL:::/Kernel/KernelA.HH,2707"$ +$LK,"TK_MINUS_MINUS",A="FL:::/Kernel/KernelA.HH,2064"$ +$LK,"DOCT_LST",A="FL:::/Kernel/KernelA.HH,921"$ +$LK,"JobResGet",A="FL:::/Kernel/Job.HC.Z,199",BI=94$ +$LK,"sys_heap_init_flag",A="FL:::/Kernel/KernelB.HH,180"$ +$LK,"FUF_CANCEL",A="FL:::/Kernel/KernelA.HH,2587"$ +$LK,"FUf_CANCEL",A="FL:::/Kernel/KernelA.HH,2560"$ $LK,"FALSE",A="FL:::/Kernel/KernelA.HH,21"$ -$LK,"VGAP_REG_READ",A="FL:::/Kernel/KernelA.HH,3731"$ -$LK,"SVCf_ADD_TO_QUE",A="FL:::/Kernel/KernelA.HH,3189"$ -$LK,"CUAsmGlbls",A="FL:::/Kernel/KernelA.HH,2229"$ -$LK,"TK_ADD_EQU",A="FL:::/Kernel/KernelA.HH,2096"$ -$LK,"TK_XOR_EQU",A="FL:::/Kernel/KernelA.HH,2095"$ -$LK,"StrPrintHex",A="FL:::/Kernel/StrA.HC.Z,1",BI=96$ +$LK,"VGAP_REG_READ",A="FL:::/Kernel/KernelA.HH,3684"$ +$LK,"CUAsmGlbls",A="FL:::/Kernel/KernelA.HH,2216"$ +$LK,"TK_ADD_EQU",A="FL:::/Kernel/KernelA.HH,2083"$ +$LK,"TK_XOR_EQU",A="FL:::/Kernel/KernelA.HH,2082"$ +$LK,"StrPrintHex",A="FL:::/Kernel/StrA.HC.Z,1",BI=95$ $LK,"_D3_ADD_EQU",A="FL:::/Kernel/KMathA.HC.Z,239"$ -$LK,"DRV_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,2719"$ -$LK,"DOCT_PMT",A="FL:::/Kernel/KernelA.HH,908"$ -$LK,"Cf_EXTERN",A="FL:::/Kernel/KernelA.HH,831"$ -$LK,"HPET_GCAP_ID",A="FL:::/Kernel/KernelA.HH,534"$ +$LK,"DRV_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,2706"$ +$LK,"DOCT_PMT",A="FL:::/Kernel/KernelA.HH,896"$ +$LK,"Cf_EXTERN",A="FL:::/Kernel/KernelA.HH,819"$ +$LK,"HPET_GCAP_ID",A="FL:::/Kernel/KernelA.HH,537"$ $LK,"ATan",A="FL:::/Kernel/KernelB.HH,95"$ -$LK,"MEM_NUM_512GIG",A="FL:::/Kernel/KernelA.HH,3468"$ -$LK,"SysBadFree",A="FL:::/Kernel/Mem/Mem512.HC.Z,1",BI=97$ -$LK,"ATA_ID_DEV",A="FL:::/Kernel/KernelA.HH,2268"$ -$LK,"CHashReg",A="FL:::/Kernel/KernelA.HH,749"$ -$LK,"SCf_INS",A="FL:::/Kernel/KernelA.HH,3534"$ -$LK,"LAPIC_LVT_ERR",A="FL:::/Kernel/KernelA.HH,504"$ -$LK,"Scale2Mem",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,192",BI=98$ -$LK,"Mem512TaskFree",A="FL:::/Kernel/Mem/Mem512.HC.Z,154",BI=99$ -$LK,"RandU32",A="FL:::/Kernel/KMathB.HC.Z,107",BI=100$ -$LK,"RandU16",A="FL:::/Kernel/KMathB.HC.Z,87",BI=101$ +$LK,"MEM_NUM_512GIG",A="FL:::/Kernel/KStart32.HC.Z,12"$ +$LK,"SysBadFree",A="FL:::/Kernel/Mem/MemPag.HC.Z,1",BI=96$ +$LK,"ATA_ID_DEV",A="FL:::/Kernel/KernelA.HH,2255"$ +$LK,"CHashReg",A="FL:::/Kernel/KernelA.HH,737"$ +$LK,"SCf_INS",A="FL:::/Kernel/KernelA.HH,3487"$ +$LK,"LAPIC_LVT_ERR",A="FL:::/Kernel/KernelA.HH,507"$ +$LK,"Scale2Mem",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,169",BI=97$ +$LK,"RandU32",A="FL:::/Kernel/KMathB.HC.Z,107",BI=98$ +$LK,"RandU16",A="FL:::/Kernel/KMathB.HC.Z,87",BI=99$ $LK,"_FLDCW",A="FL:::/Kernel/KMathA.HC.Z,625"$ -$LK,"__DIR__",A="FL:::/Kernel/KernelA.HH,2031"$ -$LK,"ARGT_RM32",A="FL:::/Kernel/KernelA.HH,1899"$ -$LK,"ARGT_RM16",A="FL:::/Kernel/KernelA.HH,1898"$ +$LK,"__DIR__",A="FL:::/Kernel/KernelA.HH,2018"$ +$LK,"ARGT_RM32",A="FL:::/Kernel/KernelA.HH,1886"$ +$LK,"ARGT_RM16",A="FL:::/Kernel/KernelA.HH,1885"$ $LK,"RFLAGf_INT",A="FL:::/Kernel/KernelA.HH,314"$ -$LK,"WIf_SELF_DOC",A="FL:::/Kernel/KernelA.HH,1443"$ -$LK,"WIF_SELF_DOC",A="FL:::/Kernel/KernelA.HH,1417"$ -$LK,"MLF_STATIC",A="FL:::/Kernel/KernelA.HH,781"$ -$LK,"ChgExt",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,203",BI=102$ +$LK,"WIf_SELF_DOC",A="FL:::/Kernel/KernelA.HH,1431"$ +$LK,"WIF_SELF_DOC",A="FL:::/Kernel/KernelA.HH,1405"$ +$LK,"MLF_STATIC",A="FL:::/Kernel/KernelA.HH,769"$ +$LK,"ChgExt",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,203",BI=100$ $LK,"str2color_lst",A="FL:::/Kernel/KDefine.HC.Z,156"$ $LK,"local_time_offset",A="FL:::/Kernel/KGlbls.HC.Z,14"$ -$LK,"RedSeaFilesFind",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,539",BI=103$ -$LK,"TK_INS_BIN",A="FL:::/Kernel/KernelA.HH,2108"$ +$LK,"RedSeaFilesFind",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,539",BI=101$ +$LK,"TK_INS_BIN",A="FL:::/Kernel/KernelA.HH,2095"$ $LK,"_D3_MUL",A="FL:::/Kernel/KMathA.HC.Z,167"$ -$LK,"ISO1_BASE_YEAR",A="FL:::/Kernel/KernelA.HH,2521"$ -$LK,"TK_ELSE",A="FL:::/Kernel/KernelA.HH,2104"$ -$LK,"RandU64",A="FL:::/Kernel/KMathB.HC.Z,127",BI=104$ -$LK,"PostMsgWait",A="FL:::/Kernel/SrvCmd.HC.Z,252",BI=105$ -$LK,"UndefinedDefine",A="FL:::/Kernel/KDefine.HC.Z,43",BI=106$ -$LK,"ARGT_RM64",A="FL:::/Kernel/KernelA.HH,1900"$ -$LK,"ATAGetRes",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,67",BI=107$ -$LK,"ATAWaitDRQ",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,36",BI=108$ -$LK,"TaskInit",A="FL:::/Kernel/KTask.HC.Z,167",BI=109$ -$LK,"DOCEf_RIGHT_CB",A="FL:::/Kernel/KernelA.HH,1074"$ -$LK,"DOCEF_RIGHT_CB",A="FL:::/Kernel/KernelA.HH,986"$ -$LK,"HTT_DICT_WORD",A="FL:::/Kernel/KernelA.HH,691"$ -$LK,"HTt_DICT_WORD",A="FL:::/Kernel/KernelA.HH,661"$ -$LK,"RLf_MP",A="FL:::/Kernel/KernelA.HH,449"$ -$LK,"PRTF_DOLLAR",A="FL:::/Kernel/KernelA.HH,3918"$ +$LK,"ISO1_BASE_YEAR",A="FL:::/Kernel/KernelA.HH,2508"$ +$LK,"TK_ELSE",A="FL:::/Kernel/KernelA.HH,2091"$ +$LK,"RandU64",A="FL:::/Kernel/KMathB.HC.Z,127",BI=102$ +$LK,"PostMsgWait",A="FL:::/Kernel/Job.HC.Z,253",BI=103$ +$LK,"UndefinedDefine",A="FL:::/Kernel/KDefine.HC.Z,43",BI=104$ +$LK,"ARGT_RM64",A="FL:::/Kernel/KernelA.HH,1887"$ +$LK,"ATAGetRes",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,67",BI=105$ +$LK,"ATAWaitDRQ",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,36",BI=106$ +$LK,"TaskInit",A="FL:::/Kernel/KTask.HC.Z,182",BI=107$ +$LK,"DOCEf_RIGHT_CB",A="FL:::/Kernel/KernelA.HH,1062"$ +$LK,"DOCEF_RIGHT_CB",A="FL:::/Kernel/KernelA.HH,974"$ +$LK,"HTT_DICT_WORD",A="FL:::/Kernel/KernelA.HH,679"$ +$LK,"HTt_DICT_WORD",A="FL:::/Kernel/KernelA.HH,649"$ +$LK,"RLf_MP",A="FL:::/Kernel/KernelA.HH,451"$ +$LK,"PRTF_DOLLAR",A="FL:::/Kernel/KernelA.HH,3873"$ $LK,"CSpring",A="FL:::/Kernel/KernelA.HH,227"$ -$LK,"CBGR24",A="FL:::/Kernel/KernelA.HH,2992"$ -$LK,"FONT_WIDTH",A="FL:::/Kernel/KernelA.HH,3610"$ -$LK,"CHeapCtrl",A="FL:::/Kernel/KernelA.HH,2909"$ -$LK,"LastDayOfYear",A="FL:::/Kernel/KDate.HC.Z,110",BI=110$ +$LK,"CBGR24",A="FL:::/Kernel/KernelA.HH,2960"$ +$LK,"FONT_WIDTH",A="FL:::/Kernel/KernelA.HH,3563"$ +$LK,"CHeapCtrl",A="FL:::/Kernel/KernelA.HH,2877"$ +$LK,"LastDayOfYear",A="FL:::/Kernel/KDate.HC.Z,110",BI=108$ $LK,"SYS_IDLE_PT",A="FL:::/Kernel/Sched.HC.Z,204"$ -$LK,"mp_cnt_initial",A="FL:::/Kernel/KernelB.HH,233"$ -$LK,"STD_DISTRO_DVD_CFG",A="FL:::/Kernel/KernelA.HH,3891"$ -$LK,"CAbsCntsI64",A="FL:::/Kernel/KernelA.HH,1804"$ -$LK,"Core0StartMP",A="FL:::/Kernel/MultiProc.HC.Z,284",BI=111$ +$LK,"mp_cnt_initial",A="FL:::/Kernel/KernelB.HH,239"$ +$LK,"STD_DISTRO_DVD_CFG",A="FL:::/Kernel/KernelA.HH,3846"$ +$LK,"OS_WINDOWS",A="FL:::/Kernel/KernelA.HH,3887"$ +$LK,"CAbsCntsI64",A="FL:::/Kernel/KernelA.HH,1791"$ +$LK,"Core0StartMP",A="FL:::/Kernel/MultiProc.HC.Z,283",BI=109$ $LK,"_D3_SUB",A="FL:::/Kernel/KMathA.HC.Z,149"$ -$LK,"CBGR48",A="FL:::/Kernel/KernelA.HH,2996"$ -$LK,"DOCEF_BORDER_PLOT",A="FL:::/Kernel/KernelA.HH,1005"$ -$LK,"IntCore0TimerHandler",A="FL:::/Kernel/KMisc.HC.Z,47",BI=112$ -$LK,"__DATE__",A="FL:::/Kernel/KernelA.HH,2023"$ -$LK,"chars_bmp_safe_dollar",A="FL:::/Kernel/StrA.HC.Z,391"$ -$LK,"AdamErr",A="FL:::/Kernel/SrvCmd.HC.Z,435",BI=113$ -$LK,"sys_focus_task",A="FL:::/Kernel/KernelB.HH,197"$ -$LK,"DOCEf_BORDER_PLOT",A="FL:::/Kernel/KernelA.HH,1093"$ -$LK,"HTT_MODULE",A="FL:::/Kernel/KernelA.HH,697"$ -$LK,"HTt_MODULE",A="FL:::/Kernel/KernelA.HH,667"$ -$LK,"SVCf_HIGHEST_PRIORITY",A="FL:::/Kernel/KernelA.HH,3184"$ -$LK,"ARGT_REL8",A="FL:::/Kernel/KernelA.HH,1878"$ -$LK,"GridInit",A="FL:::/Kernel/SerialDev/InputPointer.HC.Z,1",BI=114$ -$LK,"FirstDayOfYear",A="FL:::/Kernel/KDate.HC.Z,98",BI=115$ -$LK,"CCf_PMT",A="FL:::/Kernel/KernelA.HH,2127"$ -$LK,"ACD_EXTRA",A="FL:::/Kernel/KernelA.HH,1508"$ -$LK,"WIf_SELF_ODE",A="FL:::/Kernel/KernelA.HH,1444"$ -$LK,"WIF_SELF_ODE",A="FL:::/Kernel/KernelA.HH,1418"$ -$LK,"MLF_DFT_AVAILABLE",A="FL:::/Kernel/KernelA.HH,775"$ +$LK,"CBGR48",A="FL:::/Kernel/KernelA.HH,2964"$ +$LK,"DOCEF_BORDER_PLOT",A="FL:::/Kernel/KernelA.HH,993"$ +$LK,"__DATE__",A="FL:::/Kernel/KernelA.HH,2010"$ +$LK,"AdamErr",A="FL:::/Kernel/Job.HC.Z,433",BI=110$ +$LK,"sys_focus_task",A="FL:::/Kernel/KernelB.HH,199"$ +$LK,"DOCEf_BORDER_PLOT",A="FL:::/Kernel/KernelA.HH,1081"$ +$LK,"HTT_MODULE",A="FL:::/Kernel/KernelA.HH,685"$ +$LK,"HTt_MODULE",A="FL:::/Kernel/KernelA.HH,655"$ +$LK,"ARGT_REL8",A="FL:::/Kernel/KernelA.HH,1865"$ +$LK,"GridInit",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,1",BI=111$ +$LK,"FirstDayOfYear",A="FL:::/Kernel/KDate.HC.Z,98",BI=112$ +$LK,"CCf_PMT",A="FL:::/Kernel/KernelA.HH,2114"$ +$LK,"ACD_EXTRA",A="FL:::/Kernel/KernelA.HH,1496"$ +$LK,"WIf_SELF_ODE",A="FL:::/Kernel/KernelA.HH,1432"$ +$LK,"WIF_SELF_ODE",A="FL:::/Kernel/KernelA.HH,1406"$ +$LK,"MLF_DFT_AVAILABLE",A="FL:::/Kernel/KernelA.HH,763"$ $LK,"COREAP_16BIT_INIT",A="FL:::/Kernel/MultiProc.HC.Z,9"$ -$LK,"SCf_NUM",A="FL:::/Kernel/KernelA.HH,3528"$ -$LK,"RS_ATTR_RESIDENT",A="FL:::/Kernel/KernelA.HH,2536"$ -$LK,"Dbg2",A="FL:::/Kernel/KDbg.HC.Z,533",BI=116$ -$LK,"HashSrcFileSet",A="FL:::/Kernel/KHashB.HC.Z,154",BI=117$ -$LK,"ROP_XOR",A="FL:::/Kernel/KernelA.HH,2945"$ +$LK,"SCf_NUM",A="FL:::/Kernel/KernelA.HH,3481"$ +$LK,"MSG_MS_MOVE",A="FL:::/Kernel/KernelA.HH,3191"$ +$LK,"RS_ATTR_RESIDENT",A="FL:::/Kernel/KernelA.HH,2523"$ +$LK,"Dbg2",A="FL:::/Kernel/KDbg.HC.Z,533",BI=113$ +$LK,"HashSrcFileSet",A="FL:::/Kernel/KHashB.HC.Z,154",BI=114$ +$LK,"ROP_XOR",A="FL:::/Kernel/KernelA.HH,2913"$ $LK,"NULL",A="FL:::/Kernel/KernelA.HH,19"$ -$LK,"BlkPoolInit",A="FL:::/Kernel/Mem/BlkPool.HC.Z,18",BI=118$ -$LK,"BDF_EXT_SIZE",A="FL:::/Kernel/KernelA.HH,2647"$ -$LK,"ProgressBarsRst",A="FL:::/Kernel/KMisc.HC.Z,287",BI=119$ +$LK,"BlkPoolInit",A="FL:::/Kernel/Mem/BlkPool.HC.Z,18",BI=115$ +$LK,"BDF_EXT_SIZE",A="FL:::/Kernel/KernelA.HH,2634"$ +$LK,"ProgressBarsRst",A="FL:::/Kernel/KMisc.HC.Z,303",BI=116$ $LK,"sys_boot_blk",A="FL:::/Kernel/KernelB.HH,38"$ -$LK,"TASKf_PENDING_BREAK",A="FL:::/Kernel/KernelA.HH,3292"$ -$LK,"BDf_EXT_SIZE",A="FL:::/Kernel/KernelA.HH,2657"$ -$LK,"RedSeaAllocClusters",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,302",BI=120$ +$LK,"TASKf_PENDING_BREAK",A="FL:::/Kernel/KernelA.HH,3252"$ +$LK,"BDf_EXT_SIZE",A="FL:::/Kernel/KernelA.HH,2644"$ +$LK,"RedSeaAllocClusters",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,302",BI=117$ +$LK,"JOBT_SPAWN_TASK",A="FL:::/Kernel/KernelA.HH,3158"$ $LK,"CQue",A="FL:::/Kernel/KernelA.HH,122"$ -$LK,"MEM_ADAM_STK",A="FL:::/Kernel/KernelA.HH,2886"$ -$LK,"DOCEF_UPDATE_DATA",A="FL:::/Kernel/KernelA.HH,1009"$ -$LK,"AdamLog",A="FL:::/Kernel/SrvCmd.HC.Z,425",BI=121$ -$LK,"TASKf_KILL_TASK",A="FL:::/Kernel/KernelA.HH,3282"$ -$LK,"ACD_H1",A="FL:::/Kernel/KernelA.HH,1500"$ -$LK,"Ff_RET1",A="FL:::/Kernel/KernelA.HH,855"$ -$LK,"SVCT_SPAWN_TASK",A="FL:::/Kernel/KernelA.HH,3196"$ -$LK,"RS_ATTR_ARCHIVE",A="FL:::/Kernel/KernelA.HH,2531"$ -$LK,"DOCEf_UPDATE_DATA",A="FL:::/Kernel/KernelA.HH,1097"$ -$LK,"EXT_DBG_RESUME",A="FL:::/Kernel/KernelA.HH,580"$ -$LK,"FSt_FAT32",A="FL:::/Kernel/KernelA.HH,2690"$ -$LK,"OPTf_WARN_PAREN",A="FL:::/Kernel/KernelA.HH,1536"$ -$LK,"TaskStkNew",A="FL:::/Kernel/KTask.HC.Z,85",BI=122$ -$LK,"RT_PTR",A="FL:::/Kernel/KernelA.HH,1560"$ -$LK,"HashTableDel",A="FL:::/Kernel/KHashB.HC.Z,90",BI=123$ +$LK,"MEM_ADAM_STK",A="FL:::/Kernel/KernelA.HH,2854"$ +$LK,"DOCEF_UPDATE_DATA",A="FL:::/Kernel/KernelA.HH,997"$ +$LK,"AdamLog",A="FL:::/Kernel/Job.HC.Z,423",BI=118$ +$LK,"TASKf_KILL_TASK",A="FL:::/Kernel/KernelA.HH,3242"$ +$LK,"ACD_H1",A="FL:::/Kernel/KernelA.HH,1488"$ +$LK,"Ff_RET1",A="FL:::/Kernel/KernelA.HH,843"$ +$LK,"RS_ATTR_ARCHIVE",A="FL:::/Kernel/KernelA.HH,2518"$ +$LK,"DOCEf_UPDATE_DATA",A="FL:::/Kernel/KernelA.HH,1085"$ +$LK,"EXT_DBG_RESUME",A="FL:::/Kernel/KernelA.HH,583"$ +$LK,"MSG_MS_R_D_DOWN",A="FL:::/Kernel/KernelA.HH,3198"$ +$LK,"FSt_FAT32",A="FL:::/Kernel/KernelA.HH,2677"$ +$LK,"OPTf_WARN_PAREN",A="FL:::/Kernel/KernelA.HH,1524"$ +$LK,"TaskStkNew",A="FL:::/Kernel/KTask.HC.Z,100",BI=119$ +$LK,"RT_PTR",A="FL:::/Kernel/KernelA.HH,1548"$ +$LK,"HashTableDel",A="FL:::/Kernel/KHashB.HC.Z,90",BI=120$ $LK,"LBtc",A="FL:::/Kernel/KernelB.HH,22"$ -$LK,"FUF_Z_OR_NOT_Z",A="FL:::/Kernel/KernelA.HH,2615"$ +$LK,"FUF_Z_OR_NOT_Z",A="FL:::/Kernel/KernelA.HH,2602"$ +$LK,"char_bmp_zero_tab_cr_nl_cursor",A="FL:::/Kernel/StrA.HC.Z,365"$ $LK,"ClampI64",A="FL:::/Kernel/KernelB.HH,125"$ -$LK,"FUf_Z_OR_NOT_Z",A="FL:::/Kernel/KernelA.HH,2588"$ -$LK,"B2",A="FL:::/Kernel/KDbg.HC.Z,422",BI=124$ +$LK,"FUf_Z_OR_NOT_Z",A="FL:::/Kernel/KernelA.HH,2575"$ +$LK,"B2",A="FL:::/Kernel/KDbg.HC.Z,422",BI=121$ $LK,"SLOP",A="FL:::/Kernel/StrPrint.HC.Z,206"$ -$LK,"FF_BUF_DIRTY",A="FL:::/Kernel/KernelA.HH,2784"$ -$LK,"ICF_SWAP",A="FL:::/Kernel/KernelA.HH,1609"$ +$LK,"FF_BUF_DIRTY",A="FL:::/Kernel/KernelA.HH,2772"$ +$LK,"ICF_SWAP",A="FL:::/Kernel/KernelA.HH,1597"$ $LK,"_STRMATCH",A="FL:::/Kernel/StrA.HC.Z,223"$ $LK,"MSF_FIXED",A="FL:::/Kernel/KernelA.HH,208"$ +$LK,"MEM_HEAP_BASE",A="FL:::/Kernel/KStart32.HC.Z,6"$ $LK,"_CPUID",A="FL:::/Kernel/KUtils.HC.Z,319"$ -$LK,"SYS_HEAP_BASE",A="FL:::/Kernel/KStart32.HC.Z,6"$ $LK,"_LBEQU",A="FL:::/Kernel/KUtils.HC.Z,104"$ -$LK,"Caller",A="FL:::/Kernel/KDbg.HC.Z,60",BI=125$ -$LK,"SUF_S2T",A="FL:::/Kernel/KernelA.HH,3794"$ -$LK,"ATA_DEV_RST",A="FL:::/Kernel/KernelA.HH,2258"$ +$LK,"Caller",A="FL:::/Kernel/KDbg.HC.Z,60",BI=122$ +$LK,"SUF_S2T",A="FL:::/Kernel/KernelA.HH,3747"$ +$LK,"ATA_DEV_RST",A="FL:::/Kernel/KernelA.HH,2245"$ $LK,"INT_MP_CRASH_ADDR",A="FL:::/Kernel/KInts.HC.Z,2"$ -$LK,"RWF_LAST_DOLLAR",A="FL:::/Kernel/KernelA.HH,3596"$ -$LK,"RS_ATTR_CONTIGUOUS",A="FL:::/Kernel/KernelA.HH,2538"$ -$LK,"HPET_MAIN_CNT",A="FL:::/Kernel/KernelA.HH,536"$ -$LK,"ARGT_NONE",A="FL:::/Kernel/KernelA.HH,1877"$ -$LK,"DOCT_DATA",A="FL:::/Kernel/KernelA.HH,931"$ -$LK,"SUF_T2S",A="FL:::/Kernel/KernelA.HH,3795"$ -$LK,"MEM_MIN_MEG",A="FL:::/Kernel/KernelA.HH,3463"$ +$LK,"RWF_LAST_DOLLAR",A="FL:::/Kernel/KernelA.HH,3549"$ +$LK,"RS_ATTR_CONTIGUOUS",A="FL:::/Kernel/KernelA.HH,2525"$ +$LK,"HPET_MAIN_CNT",A="FL:::/Kernel/KernelA.HH,539"$ +$LK,"ARGT_NONE",A="FL:::/Kernel/KernelA.HH,1864"$ +$LK,"DOCT_DATA",A="FL:::/Kernel/KernelA.HH,919"$ +$LK,"SUF_T2S",A="FL:::/Kernel/KernelA.HH,3748"$ +$LK,"MEM_MIN_MEG",A="FL:::/Kernel/KernelA.HH,3423"$ $LK,"exp_1",A="FL:::/Kernel/KernelA.HH,52"$ $LK,"CTRL_KEY_SCAN_DECODE_TABLE",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,15"$ -$LK,"KeyDevRem",A="FL:::/Kernel/KeyDev.HC.Z,64",BI=126$ -$LK,"G2",A="FL:::/Kernel/KDbg.HC.Z,469",BI=127$ -$LK,"DOCEG_HAS_ARG",A="FL:::/Kernel/KernelA.HH,1032"$ -$LK,"TSSNew",A="FL:::/Kernel/MultiProc.HC.Z,76",BI=128$ -$LK,"SYS_PROGRESS1_DESC",A="FL:::/Kernel/KStart32.HC.Z,34"$ +$LK,"KeyDevRem",A="FL:::/Kernel/KeyDev.HC.Z,64",BI=123$ +$LK,"G2",A="FL:::/Kernel/KDbg.HC.Z,469",BI=124$ +$LK,"DOCEG_HAS_ARG",A="FL:::/Kernel/KernelA.HH,1020"$ +$LK,"TSSNew",A="FL:::/Kernel/MultiProc.HC.Z,76",BI=125$ +$LK,"SYS_PROGRESS1_DESC",A="FL:::/Kernel/KStart32.HC.Z,45"$ $LK,"LBtr",A="FL:::/Kernel/KernelB.HH,24"$ -$LK,"FStf_DISABLE",A="FL:::/Kernel/KernelA.HH,2699"$ -$LK,"HTT_OPCODE",A="FL:::/Kernel/KernelA.HH,694"$ -$LK,"HTt_OPCODE",A="FL:::/Kernel/KernelA.HH,664"$ +$LK,"FStf_DISABLE",A="FL:::/Kernel/KernelA.HH,2686"$ +$LK,"HTT_OPCODE",A="FL:::/Kernel/KernelA.HH,682"$ +$LK,"HTt_OPCODE",A="FL:::/Kernel/KernelA.HH,652"$ $LK,"CDATE_YEAR_DAYS_INT",A="FL:::/Kernel/KernelA.HH,184"$ -$LK,"FAT32AllocContiguousClusters",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,514",BI=129$ +$LK,"FAT32AllocContiguousClusters",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,502",BI=126$ $LK,"LBts",A="FL:::/Kernel/KernelB.HH,26"$ $LK,"ArcEntryGet",A="FL:::/Kernel/Compress.HC.Z,100"$ $LK,"_LOG10",A="FL:::/Kernel/KMathA.HC.Z,592"$ -$LK,"Adam",A="FL:::/Kernel/SrvCmd.HC.Z,408",BI=130$ +$LK,"Adam",A="FL:::/Kernel/Job.HC.Z,406",BI=127$ $LK,"CTryStk",A="FL:::/Kernel/KExcept.HC.Z,56"$ -$LK,"DCF_PALETTE",A="FL:::/Kernel/KernelA.HH,3625"$ +$LK,"DCF_PALETTE",A="FL:::/Kernel/KernelA.HH,3578"$ $LK,"set_bits_table",A="FL:::/Kernel/KGlbls.HC.Z,13"$ $LK,"rev_bits_table",A="FL:::/Kernel/KGlbls.HC.Z,12"$ -$LK,"KBD_CTRL",A="FL:::/Kernel/KernelA.HH,3003"$ -$LK,"HTt_FUN",A="FL:::/Kernel/KernelA.HH,659"$ -$LK,"RS_ATTR_LONG_NAME",A="FL:::/Kernel/KernelA.HH,2532"$ -$LK,"TK_XOR_XOR",A="FL:::/Kernel/KernelA.HH,2088"$ -$LK,"DOCEf_HOLD",A="FL:::/Kernel/KernelA.HH,1102"$ -$LK,"DOCEF_HOLD",A="FL:::/Kernel/KernelA.HH,1016"$ -$LK,"KDInputFilterPutKey",A="FL:::/Kernel/KeyDev.HC.Z,108",BI=131$ -$LK,"GetOutOfDollar",A="FL:::/Kernel/StrB.HC.Z,75",BI=132$ -$LK,"DOC_COLOR_ALT_TEXT",A="FL:::/Kernel/KernelA.HH,1136"$ -$LK,"MBR_PT_FAT32a",A="FL:::/Kernel/KernelA.HH,2702"$ -$LK,"DbgHelp",A="FL:::/Kernel/KDbg.HC.Z,498",BI=133$ +$LK,"KBD_CTRL",A="FL:::/Kernel/KernelA.HH,2971"$ +$LK,"HTt_FUN",A="FL:::/Kernel/KernelA.HH,647"$ +$LK,"JobCtrlInit",A="FL:::/Kernel/Job.HC.Z,18",BI=128$ +$LK,"RS_ATTR_LONG_NAME",A="FL:::/Kernel/KernelA.HH,2519"$ +$LK,"TK_XOR_XOR",A="FL:::/Kernel/KernelA.HH,2075"$ +$LK,"DOCEf_HOLD",A="FL:::/Kernel/KernelA.HH,1090"$ +$LK,"DOCEF_HOLD",A="FL:::/Kernel/KernelA.HH,1004"$ +$LK,"KDInputFilterPutKey",A="FL:::/Kernel/KeyDev.HC.Z,108",BI=129$ +$LK,"GetOutOfDollar",A="FL:::/Kernel/StrB.HC.Z,75",BI=130$ +$LK,"MEM_PAG_SIZE",A="FL:::/Kernel/KernelA.HH,2847"$ +$LK,"DOC_COLOR_ALT_TEXT",A="FL:::/Kernel/KernelA.HH,1124"$ +$LK,"MBR_PT_FAT32a",A="FL:::/Kernel/KernelA.HH,2689"$ +$LK,"DbgHelp",A="FL:::/Kernel/KDbg.HC.Z,498",BI=131$ $LK,"_FLOOR",A="FL:::/Kernel/KMathA.HC.Z,420"$ -$LK,"MBR_PT_FAT32b",A="FL:::/Kernel/KernelA.HH,2703"$ -$LK,"MBR_PT_FAT32c",A="FL:::/Kernel/KernelA.HH,2704"$ +$LK,"MBR_PT_FAT32b",A="FL:::/Kernel/KernelA.HH,2690"$ +$LK,"MBR_PT_FAT32c",A="FL:::/Kernel/KernelA.HH,2691"$ $LK,"D3Dist",A="FL:::/Kernel/KernelB.HH,149"$ -$LK,"MBR_PT_FAT32d",A="FL:::/Kernel/KernelA.HH,2705"$ -$LK,"TK_INS_BIN_SIZE",A="FL:::/Kernel/KernelA.HH,2109"$ -$LK,"LMF_EXACT",A="FL:::/Kernel/KernelA.HH,3807"$ -$LK,"MBR_PT_FAT32e",A="FL:::/Kernel/KernelA.HH,2706"$ -$LK,"FSt_NTFS",A="FL:::/Kernel/KernelA.HH,2694"$ -$LK,"MBR_PT_FAT32f",A="FL:::/Kernel/KernelA.HH,2707"$ -$LK,"CM_MAX_CONSTS",A="FL:::/Kernel/KernelA.HH,1701"$ -$LK,"DOCEF_TAG_CB",A="FL:::/Kernel/KernelA.HH,995"$ -$LK,"Str2Date",A="FL:::/Kernel/StrScan.HC.Z,138",BI=134$ -$LK,"ICF_PASS_TRACE",A="FL:::/Kernel/KernelA.HH,1603"$ -$LK,"DOCEf_TAG_CB",A="FL:::/Kernel/KernelA.HH,1083"$ -$LK,"HTt_REG",A="FL:::/Kernel/KernelA.HH,665"$ -$LK,"ChkPtr",A="FL:::/Kernel/KDbg.HC.Z,1",BI=135$ -$LK,"TaskWait",A="FL:::/Kernel/SrvCmd.HC.Z,220",BI=136$ -$LK,"_R10",A="FL:::/Kernel/KernelA.HH,3432"$ +$LK,"MBR_PT_FAT32d",A="FL:::/Kernel/KernelA.HH,2692"$ +$LK,"TK_INS_BIN_SIZE",A="FL:::/Kernel/KernelA.HH,2096"$ +$LK,"LMF_EXACT",A="FL:::/Kernel/KernelA.HH,3760"$ +$LK,"MBR_PT_FAT32e",A="FL:::/Kernel/KernelA.HH,2693"$ +$LK,"FSt_NTFS",A="FL:::/Kernel/KernelA.HH,2681"$ +$LK,"char_bmp_alpha_numeric",A="FL:::/Kernel/StrA.HC.Z,330"$ +$LK,"MBR_PT_FAT32f",A="FL:::/Kernel/KernelA.HH,2694"$ +$LK,"CM_MAX_CONSTS",A="FL:::/Kernel/KernelA.HH,1688"$ +$LK,"DOCEF_TAG_CB",A="FL:::/Kernel/KernelA.HH,983"$ +$LK,"Str2Date",A="FL:::/Kernel/StrScan.HC.Z,138",BI=132$ +$LK,"ICF_PASS_TRACE",A="FL:::/Kernel/KernelA.HH,1591"$ +$LK,"DOCEf_TAG_CB",A="FL:::/Kernel/KernelA.HH,1071"$ +$LK,"HTt_REG",A="FL:::/Kernel/KernelA.HH,653"$ +$LK,"ChkPtr",A="FL:::/Kernel/KDbg.HC.Z,1",BI=133$ +$LK,"TaskWait",A="FL:::/Kernel/Job.HC.Z,221",BI=134$ +$LK,"SCF_MS_R_DOWN",A="FL:::/Kernel/KernelA.HH,3500"$ +$LK,"SCf_MS_R_DOWN",A="FL:::/Kernel/KernelA.HH,3485"$ +$LK,"_R10",A="FL:::/Kernel/KernelA.HH,3392"$ +$LK,"MSG_MS_R_DOWN",A="FL:::/Kernel/KernelA.HH,3196"$ $LK,"SYS_MEM_INIT_VAL",A="FL::/Tmp.DD.Z,1"$ -$LK,"_R11",A="FL:::/Kernel/KernelA.HH,3433"$ -$LK,"BOOT_RAM_LIMIT",A="FL:::/Kernel/KernelA.HH,3881"$ -$LK,"_R12",A="FL:::/Kernel/KernelA.HH,3434"$ +$LK,"_R11",A="FL:::/Kernel/KernelA.HH,3393"$ +$LK,"BOOT_RAM_LIMIT",A="FL:::/Kernel/KernelA.HH,3836"$ +$LK,"_R12",A="FL:::/Kernel/KernelA.HH,3394"$ $LK,"SK_CLUSTER",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,90"$ -$LK,"SysGetI64",A="FL:::/Kernel/BlkDev/DskAddDev.HC.Z,169",BI=137$ +$LK,"SysGetI64",A="FL:::/Kernel/BlkDev/DskAddDev.HC.Z,179",BI=135$ $LK,"MemSetI64",A="FL:::/Kernel/KernelB.HH,172"$ -$LK,"_R13",A="FL:::/Kernel/KernelA.HH,3435"$ -$LK,"DEF_NOT_INITIALIZED",A="FL:::/Kernel/KernelA.HH,2549"$ +$LK,"_R13",A="FL:::/Kernel/KernelA.HH,3395"$ +$LK,"DEF_NOT_INITIALIZED",A="FL:::/Kernel/KernelA.HH,2536"$ $LK,"SYS_BOOT_PATCH_TABLE_BASE",A="FL:::/Kernel/KStart16.HC.Z,25"$ -$LK,"_R14",A="FL:::/Kernel/KernelA.HH,3436"$ -$LK,"CTRLT_WIN_VSCROLL",A="FL:::/Kernel/KernelA.HH,3091"$ -$LK,"TK_LESS_EQU",A="FL:::/Kernel/KernelA.HH,2084"$ +$LK,"_R14",A="FL:::/Kernel/KernelA.HH,3396"$ +$LK,"JOBf_FREE_ON_COMPLETE",A="FL:::/Kernel/KernelA.HH,3150"$ +$LK,"CTRLT_WIN_VSCROLL",A="FL:::/Kernel/KernelA.HH,3053"$ +$LK,"TK_LESS_EQU",A="FL:::/Kernel/KernelA.HH,2071"$ $LK,"ODEF_HAS_MASSES",A="FL:::/Kernel/KernelA.HH,241"$ -$LK,"_R15",A="FL:::/Kernel/KernelA.HH,3437"$ -$LK,"FUG_FILES_FIND",A="FL:::/Kernel/KernelA.HH,2623"$ +$LK,"_R15",A="FL:::/Kernel/KernelA.HH,3397"$ +$LK,"FUG_FILES_FIND",A="FL:::/Kernel/KernelA.HH,2610"$ $LK,"TRUE",A="FL:::/Kernel/KernelA.HH,20"$ -$LK,"FSt_NULL",A="FL:::/Kernel/KernelA.HH,2688"$ -$LK,"chars_bmp_zero_tab_ff_cr_nl_cursor",A="FL:::/Kernel/StrA.HC.Z,365"$ -$LK,"CEdFindText",A="FL:::/Kernel/KernelA.HH,1225"$ -$LK,"MEM_FREE_PAGE_HASH_SIZE",A="FL:::/Kernel/KernelA.HH,2881"$ -$LK,"LDF_NO_ABSS",A="FL:::/Kernel/KernelA.HH,368"$ -$LK,"DOCEf_LINK",A="FL:::/Kernel/KernelA.HH,1087"$ -$LK,"DOCEF_LINK",A="FL:::/Kernel/KernelA.HH,999"$ +$LK,"JOBf_EXIT_ON_COMPLETE",A="FL:::/Kernel/KernelA.HH,3144"$ +$LK,"FSt_NULL",A="FL:::/Kernel/KernelA.HH,2675"$ +$LK,"CEdFindText",A="FL:::/Kernel/KernelA.HH,1213"$ +$LK,"WIf_FOCUS_TASK_MS_L_D",A="FL:::/Kernel/KernelA.HH,1437"$ +$LK,"LDF_NO_ABSS",A="FL:::/Kernel/KernelA.HH,367"$ +$LK,"DOCEf_LINK",A="FL:::/Kernel/KernelA.HH,1075"$ +$LK,"DOCEF_LINK",A="FL:::/Kernel/KernelA.HH,987"$ $LK,"D3Copy",A="FL:::/Kernel/KernelB.HH,147"$ -$LK,"Beep",A="FL:::/Kernel/KMisc.HC.Z,202",BI=138$ +$LK,"Beep",A="FL:::/Kernel/KMisc.HC.Z,218",BI=136$ $LK,"_STRNICMP",A="FL:::/Kernel/StrA.HC.Z,183"$ +$LK,"JobQueDel",A="FL:::/Kernel/Job.HC.Z,7",BI=137$ $LK,"_MEMSET_I64",A="FL:::/Kernel/KUtils.HC.Z,42"$ -$LK,"CH_SPACE",A="FL:::/Kernel/KernelA.HH,3516"$ -$LK,"AAT_SUB_U8",A="FL:::/Kernel/KernelA.HH,1968"$ -$LK,"IET_IMM64_EXPORT",A="FL:::/Kernel/KernelA.HH,410"$ -$LK,"IET_IMM32_EXPORT",A="FL:::/Kernel/KernelA.HH,408"$ -$LK,"sys_gdt",A="FL:::/Kernel/KernelB.HH,270"$ +$LK,"CH_SPACE",A="FL:::/Kernel/KernelA.HH,3469"$ +$LK,"AAT_SUB_U8",A="FL:::/Kernel/KernelA.HH,1955"$ +$LK,"IET_IMM64_EXPORT",A="FL:::/Kernel/KernelA.HH,409"$ +$LK,"IET_IMM32_EXPORT",A="FL:::/Kernel/KernelA.HH,407"$ +$LK,"sys_gdt",A="FL:::/Kernel/KernelB.HH,274"$ $LK,"Call",A="FL:::/Kernel/KernelB.HH,44"$ -$LK,"SYS_FIXED_AREA",A="FL:::/Kernel/KernelA.HH,3470"$ -$LK,"ICF_CODE_FINAL",A="FL:::/Kernel/KernelA.HH,1599"$ -$LK,"SYS_PROGRESS2_DESC",A="FL:::/Kernel/KStart32.HC.Z,38"$ -$LK,"BlkDevLockFwdingSet",A="FL:::/Kernel/BlkDev/DskAddDev.HC.Z,1",BI=139$ +$LK,"SYS_FIXED_AREA",A="FL:::/Kernel/KernelA.HH,3425"$ +$LK,"ICF_CODE_FINAL",A="FL:::/Kernel/KernelA.HH,1587"$ +$LK,"SYS_PROGRESS2_DESC",A="FL:::/Kernel/KStart32.HC.Z,50"$ +$LK,"SYS_STAFF_MODE_FLAG",A="FL::/Tmp.DD.Z,1"$ +$LK,"BlkDevLockFwdingSet",A="FL:::/Kernel/BlkDev/DskAddDev.HC.Z,1",BI=138$ $LK,"InU8",A="FL:::/Kernel/KernelB.HH,77"$ -$LK,"ARGT_SREG",A="FL:::/Kernel/KernelA.HH,1924"$ -$LK,"CMemUnused",A="FL:::/Kernel/KernelA.HH,2818"$ -$LK,"IEF_48_REX",A="FL:::/Kernel/KernelA.HH,1731"$ +$LK,"ARGT_SREG",A="FL:::/Kernel/KernelA.HH,1911"$ +$LK,"CMemUnused",A="FL:::/Kernel/KernelA.HH,2806"$ +$LK,"IEF_48_REX",A="FL:::/Kernel/KernelA.HH,1718"$ $LK,"ã",A="FL:::/Kernel/KernelA.HH,51"$ -$LK,"Suspend",A="FL:::/Kernel/KTask.HC.Z,62",BI=140$ +$LK,"Suspend",A="FL:::/Kernel/KTask.HC.Z,77",BI=139$ $LK,"ClampU64",A="FL:::/Kernel/KernelB.HH,127"$ -$LK,"ARC_MAX_BITS",A="FL:::/Kernel/KernelA.HH,3742"$ -$LK,"TK_MOD_EQU",A="FL:::/Kernel/KernelA.HH,2105"$ -$LK,"FunSegFind",A="FL:::/Kernel/FunSeg.HC.Z,54",BI=141$ -$LK,"Define",A="FL:::/Kernel/KDefine.HC.Z,49",BI=142$ -$LK,"FAT32Fmt",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,60",BI=143$ -$LK,"SrvCmdLine",A="FL:::/Kernel/KTask.HC.Z,391",BI=144$ -$LK,"HashTableNew",A="FL:::/Kernel/KHashB.HC.Z,50",BI=145$ -$LK,"DOCT_INDENT",A="FL:::/Kernel/KernelA.HH,915"$ +$LK,"ARC_MAX_BITS",A="FL:::/Kernel/KernelA.HH,3695"$ +$LK,"TK_MOD_EQU",A="FL:::/Kernel/KernelA.HH,2092"$ +$LK,"FunSegFind",A="FL:::/Kernel/FunSeg.HC.Z,54",BI=140$ +$LK,"Define",A="FL:::/Kernel/KDefine.HC.Z,49",BI=141$ +$LK,"FAT32Fmt",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,48",BI=142$ +$LK,"SrvCmdLine",A="FL:::/Kernel/KTask.HC.Z,406",BI=143$ +$LK,"HashTableNew",A="FL:::/Kernel/KHashB.HC.Z,50",BI=144$ +$LK,"DOCT_INDENT",A="FL:::/Kernel/KernelA.HH,903"$ $LK,"_ARG",A="FL:::/Kernel/KMathA.HC.Z,366"$ -$LK,"COLORROP_NO_ROP0_MASK",A="FL:::/Kernel/KernelA.HH,2990"$ +$LK,"COLORROP_NO_ROP0_MASK",A="FL:::/Kernel/KernelA.HH,2958"$ $LK,"CDualBuf",A="FL:::/Kernel/BlkDev/DskCDDVD.HC.Z,109"$ -$LK,"TaskText",A="FL:::/Kernel/SrvCmd.HC.Z,75",BI=146$ -$LK,"COLORROP_BITS",A="FL:::/Kernel/KernelA.HH,2991"$ -$LK,"BROWN",A="FL:::/Kernel/KernelA.HH,2966"$ -$LK,"Da",A="FL:::/Kernel/KDbg.HC.Z,209",BI=147$ -$LK,"SUF_REM_TRAILING",A="FL:::/Kernel/KernelA.HH,3789"$ -$LK,"Cd",A="FL:::/Kernel/BlkDev/DskDirB.HC.Z,9",BI=148$ +$LK,"TaskText",A="FL:::/Kernel/Job.HC.Z,75",BI=145$ +$LK,"MSG_MS_L_UP",A="FL:::/Kernel/KernelA.HH,3193"$ +$LK,"COLORROP_BITS",A="FL:::/Kernel/KernelA.HH,2959"$ +$LK,"BROWN",A="FL:::/Kernel/KernelA.HH,2934"$ +$LK,"Da",A="FL:::/Kernel/KDbg.HC.Z,209",BI=146$ +$LK,"SUF_REM_TRAILING",A="FL:::/Kernel/KernelA.HH,3742"$ +$LK,"Cd",A="FL:::/Kernel/BlkDev/DskDirB.HC.Z,9",BI=147$ $LK,"Ceil",A="FL:::/Kernel/KernelB.HH,123"$ -$LK,"DOCEF_SKIP_IN_FORM",A="FL:::/Kernel/KernelA.HH,1021"$ -$LK,"CCF_DONT_FREE_BUF",A="FL:::/Kernel/KernelA.HH,2129"$ -$LK,"IET_ZEROED_CODE_HEAP",A="FL:::/Kernel/KernelA.HH,413"$ -$LK,"SrcEdLink",A="FL:::/Kernel/FunSeg.HC.Z,278",BI=149$ -$LK,"GetRBP",A="FL:::/Kernel/KernelB.HH,246"$ -$LK,"GREEN",A="FL:::/Kernel/KernelA.HH,2962"$ -$LK,"RECALCF_TO_HTML",A="FL:::/Kernel/KernelA.HH,1354"$ +$LK,"DOCEF_SKIP_IN_FORM",A="FL:::/Kernel/KernelA.HH,1009"$ +$LK,"CCF_DONT_FREE_BUF",A="FL:::/Kernel/KernelA.HH,2116"$ +$LK,"ICF_RES_WAS_STK",A="FL:::/Kernel/KernelA.HH,1592"$ +$LK,"IET_ZEROED_CODE_HEAP",A="FL:::/Kernel/KernelA.HH,412"$ +$LK,"SrcEdLink",A="FL:::/Kernel/FunSeg.HC.Z,278",BI=148$ +$LK,"GetRBP",A="FL:::/Kernel/KernelB.HH,252"$ +$LK,"GREEN",A="FL:::/Kernel/KernelA.HH,2930"$ +$LK,"RECALCF_TO_HTML",A="FL:::/Kernel/KernelA.HH,1342"$ $LK,"ì",A="FL:::/Kernel/KernelA.HH,49"$ $LK,"ON",A="FL:::/Kernel/KernelA.HH,22"$ $LK,"_LXCHG_I64",A="FL:::/Kernel/KUtils.HC.Z,217"$ -$LK,"MDG_DISP_SIB_RIP",A="FL:::/Kernel/KernelA.HH,1586"$ -$LK,"DOCEt_BLINK",A="FL:::/Kernel/KernelA.HH,954"$ -$LK,"DOCET_BLINK",A="FL:::/Kernel/KernelA.HH,948"$ +$LK,"MDG_DISP_SIB_RIP",A="FL:::/Kernel/KernelA.HH,1574"$ +$LK,"DOCEt_BLINK",A="FL:::/Kernel/KernelA.HH,942"$ +$LK,"DOCET_BLINK",A="FL:::/Kernel/KernelA.HH,936"$ $LK,"sys_clipboard_doc",A="FL:::/Kernel/KGlbls.HC.Z,6"$ -$LK,"CCF_NO_DEFINES",A="FL:::/Kernel/KernelA.HH,2130"$ -$LK,"DOCEf_SKIP_IN_FORM",A="FL:::/Kernel/KernelA.HH,1107"$ +$LK,"JOBf_DONE",A="FL:::/Kernel/KernelA.HH,3148"$ +$LK,"CCF_NO_DEFINES",A="FL:::/Kernel/KernelA.HH,2117"$ +$LK,"DOCEf_SKIP_IN_FORM",A="FL:::/Kernel/KernelA.HH,1095"$ $LK,"CGDTEntry",A="FL:::/Kernel/KernelA.HH,331"$ -$LK,"ARGT_XMM0",A="FL:::/Kernel/KernelA.HH,1944"$ +$LK,"ARGT_XMM0",A="FL:::/Kernel/KernelA.HH,1931"$ $LK,"_TASK_END_NOW",A="FL:::/Kernel/Sched.HC.Z,151"$ -$LK,"HTT_INVALID",A="FL:::/Kernel/KernelA.HH,682"$ +$LK,"HTT_INVALID",A="FL:::/Kernel/KernelA.HH,670"$ $LK,"_REP_OUT_U8",A="FL:::/Kernel/KUtils.HC.Z,308"$ -$LK,"GetRAX",A="FL:::/Kernel/KernelB.HH,245"$ +$LK,"GetRAX",A="FL:::/Kernel/KernelB.HH,251"$ $LK,"sys_boot_src",A="FL:::/Kernel/KernelB.HH,40"$ -$LK,"SCF_DELETE",A="FL:::/Kernel/KernelA.HH,3548"$ -$LK,"SCf_DELETE",A="FL:::/Kernel/KernelA.HH,3533"$ -$LK,"ARGT_M32N32",A="FL:::/Kernel/KernelA.HH,1910"$ -$LK,"ARGT_M16N16",A="FL:::/Kernel/KernelA.HH,1909"$ -$LK,"ARGT_M16N32",A="FL:::/Kernel/KernelA.HH,1908"$ -$LK,"SV_STI_LIKE",A="FL:::/Kernel/KernelA.HH,1740"$ -$LK,"ICG_NO_CVT_MASK",A="FL:::/Kernel/KernelA.HH,1619"$ -$LK,"RECALCG_MASK",A="FL:::/Kernel/KernelA.HH,1350"$ -$LK,"progress1_t0",A="FL:::/Kernel/KernelB.HH,210"$ -$LK,"HTF_PRIVATE",A="FL:::/Kernel/KernelA.HH,702"$ -$LK,"ESTIMATED_MISC_ALLOCS",A="FL:::/Kernel/Mem/PageTables.HC.Z,97"$ -$LK,"Pow10I64",A="FL:::/Kernel/KMathB.HC.Z,26",BI=150$ -$LK,"IEF_STI_LIKE",A="FL:::/Kernel/KernelA.HH,1734"$ -$LK,"HTf_PRIVATE",A="FL:::/Kernel/KernelA.HH,672"$ -$LK,"Dm",A="FL:::/Kernel/KDbg.HC.Z,204",BI=151$ -$LK,"CCF_EXE_BLK",A="FL:::/Kernel/KernelA.HH,2142"$ +$LK,"SCF_DELETE",A="FL:::/Kernel/KernelA.HH,3501"$ +$LK,"SCf_DELETE",A="FL:::/Kernel/KernelA.HH,3486"$ +$LK,"ARGT_M32N32",A="FL:::/Kernel/KernelA.HH,1897"$ +$LK,"ARGT_M16N16",A="FL:::/Kernel/KernelA.HH,1896"$ +$LK,"ARGT_M16N32",A="FL:::/Kernel/KernelA.HH,1895"$ +$LK,"SV_STI_LIKE",A="FL:::/Kernel/KernelA.HH,1727"$ +$LK,"ICG_NO_CVT_MASK",A="FL:::/Kernel/KernelA.HH,1607"$ +$LK,"RECALCG_MASK",A="FL:::/Kernel/KernelA.HH,1338"$ +$LK,"progress1_t0",A="FL:::/Kernel/KernelB.HH,212"$ +$LK,"WIf_FOCUS_TASK_MS_R_D",A="FL:::/Kernel/KernelA.HH,1439"$ +$LK,"HTF_PRIVATE",A="FL:::/Kernel/KernelA.HH,690"$ +$LK,"Pow10I64",A="FL:::/Kernel/KMathB.HC.Z,26",BI=149$ +$LK,"char_bmp_alpha_numeric_no_at",A="FL:::/Kernel/StrA.HC.Z,335"$ +$LK,"IEF_STI_LIKE",A="FL:::/Kernel/KernelA.HH,1721"$ +$LK,"HTf_PRIVATE",A="FL:::/Kernel/KernelA.HH,660"$ +$LK,"Dm",A="FL:::/Kernel/KDbg.HC.Z,204",BI=150$ +$LK,"CCF_EXE_BLK",A="FL:::/Kernel/KernelA.HH,2129"$ $LK,"CQueD3I32",A="FL:::/Kernel/KernelA.HH,132"$ -$LK,"BDf_REMOVABLE",A="FL:::/Kernel/KernelA.HH,2649"$ -$LK,"BDF_REMOVABLE",A="FL:::/Kernel/KernelA.HH,2639"$ -$LK,"COLOR_INVALID",A="FL:::/Kernel/KernelA.HH,2978"$ -$LK,"DftExt",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,212",BI=152$ +$LK,"BDf_REMOVABLE",A="FL:::/Kernel/KernelA.HH,2636"$ +$LK,"BDF_REMOVABLE",A="FL:::/Kernel/KernelA.HH,2626"$ +$LK,"COLOR_INVALID",A="FL:::/Kernel/KernelA.HH,2946"$ +$LK,"DftExt",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,212",BI=151$ $LK,"Bt",A="FL:::/Kernel/KernelB.HH,14"$ -$LK,"OPTf_EXTERNS_TO_IMPORTS",A="FL:::/Kernel/KernelA.HH,1539"$ -$LK,"HashFunSegFind",A="FL:::/Kernel/FunSeg.HC.Z,10",BI=153$ -$LK,"Dr",A="FL:::/Kernel/KDbg.HC.Z,328",BI=154$ -$LK,"CPUId",A="FL:::/Kernel/KernelB.HH,256"$ -$LK,"FilesFind2",A="FL:::/Kernel/BlkDev/DskFind.HC.Z,1",BI=155$ -$LK,"TaskKillDying",A="FL:::/Kernel/KTask.HC.Z,515",BI=156$ +$LK,"OPTf_EXTERNS_TO_IMPORTS",A="FL:::/Kernel/KernelA.HH,1527"$ +$LK,"HashFunSegFind",A="FL:::/Kernel/FunSeg.HC.Z,10",BI=152$ +$LK,"Dr",A="FL:::/Kernel/KDbg.HC.Z,328",BI=153$ +$LK,"CPUId",A="FL:::/Kernel/KernelB.HH,262"$ +$LK,"FilesFind2",A="FL:::/Kernel/BlkDev/DskFind.HC.Z,1",BI=154$ +$LK,"TaskKillDying",A="FL:::/Kernel/KTask.HC.Z,528",BI=155$ $LK,"scan_code_map",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,157"$ -$LK,"progress2_t0",A="FL:::/Kernel/KernelB.HH,215"$ -$LK,"UncachedAliasAlloc",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,161",BI=157$ +$LK,"progress2_t0",A="FL:::/Kernel/KernelB.HH,218"$ +$LK,"UncachedAliasAlloc",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,138",BI=156$ $LK,"MSize2",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,385"$ +$LK,"SYS_16MEG_AREA_LIMIT",A="FL:::/Kernel/KernelA.HH,3426"$ $LK,"MemSetU32",A="FL:::/Kernel/KernelB.HH,176"$ $LK,"MemSetU16",A="FL:::/Kernel/KernelB.HH,174"$ -$LK,"DirTreeDel",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,36",BI=158$ -$LK,"Fs",A="FL:::/Kernel/KernelB.HH,280"$ -$LK,"SCF_CAPS",A="FL:::/Kernel/KernelA.HH,3542"$ -$LK,"SCf_CAPS",A="FL:::/Kernel/KernelA.HH,3527"$ -$LK,"SYS_SEMA_FAR_CALL32",A="FL:::/Kernel/KernelA.HH,606"$ -$LK,"In",A="FL:::/Kernel/SrvCmd.HC.Z,484",BI=159$ -$LK,"ACD_DEF_CHAR",A="FL:::/Kernel/KernelA.HH,1514"$ -$LK,"DbgMode",A="FL:::/Kernel/KMisc.HC.Z,277",BI=160$ -$LK,"Gs",A="FL:::/Kernel/KernelB.HH,238"$ -$LK,"SYS_PROGRESS3_DESC",A="FL:::/Kernel/KStart32.HC.Z,42"$ -$LK,"RWF_SCROLL",A="FL:::/Kernel/KernelA.HH,3598"$ -$LK,"REGG_LOCAL_VARS",A="FL:::/Kernel/KernelA.HH,1792"$ -$LK,"DrvModelNum",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,294",BI=161$ +$LK,"DirTreeDel",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,36",BI=157$ +$LK,"Fs",A="FL:::/Kernel/KernelB.HH,287"$ +$LK,"SCF_CAPS",A="FL:::/Kernel/KernelA.HH,3495"$ +$LK,"SCf_CAPS",A="FL:::/Kernel/KernelA.HH,3480"$ +$LK,"In",A="FL:::/Kernel/Job.HC.Z,482",BI=158$ +$LK,"ACD_DEF_CHAR",A="FL:::/Kernel/KernelA.HH,1502"$ +$LK,"DbgMode",A="FL:::/Kernel/KMisc.HC.Z,293",BI=159$ +$LK,"Gs",A="FL:::/Kernel/KernelB.HH,244"$ +$LK,"SYS_PROGRESS3_DESC",A="FL:::/Kernel/KStart32.HC.Z,55"$ +$LK,"RWF_SCROLL",A="FL:::/Kernel/KernelA.HH,3551"$ +$LK,"REGG_LOCAL_VARS",A="FL:::/Kernel/KernelA.HH,1779"$ +$LK,"DrvModelNum",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,304",BI=160$ $LK,"RepInU8",A="FL:::/Kernel/KernelB.HH,86"$ -$LK,"IsSysDbg",A="FL:::/Kernel/KMisc.HC.Z,250",BI=162$ -$LK,"progress3_t0",A="FL:::/Kernel/KernelB.HH,220"$ -$LK,"CDbgGlbls",A="FL:::/Kernel/KernelA.HH,3866"$ +$LK,"IsSysDbg",A="FL:::/Kernel/KMisc.HC.Z,266",BI=161$ +$LK,"progress3_t0",A="FL:::/Kernel/KernelB.HH,224"$ +$LK,"CDbgGlbls",A="FL:::/Kernel/KernelA.HH,3820"$ $LK,"_TEST_EXCEPT",A="FL:::/Kernel/KExcept.HC.Z,4"$ $LK,"_FSTCW",A="FL:::/Kernel/KMathA.HC.Z,632"$ -$LK,"MSG_IP_R_DOWN_UP",A="FL:::/Kernel/KernelA.HH,3244"$ -$LK,"ScanFlags",A="FL:::/Kernel/StrB.HC.Z,123",BI=163$ +$LK,"MSG_MS_R_DOWN_UP",A="FL:::/Kernel/KernelA.HH,3204"$ +$LK,"ScanFlags",A="FL:::/Kernel/StrB.HC.Z,123",BI=162$ $LK,"Ln",A="FL:::/Kernel/KernelB.HH,134"$ $LK,"INT_WAKE",A="FL:::/Kernel/KInts.HC.Z,6"$ -$LK,"GetS",A="FL:::/Kernel/SerialDev/Message.HC.Z,209",BI=164$ +$LK,"GetS",A="FL:::/Kernel/SerialDev/Message.HC.Z,209",BI=163$ $LK,"_MEMSET_U32",A="FL:::/Kernel/KUtils.HC.Z,29"$ $LK,"_MEMSET_U16",A="FL:::/Kernel/KUtils.HC.Z,16"$ -$LK,"SYS_MP_CNT_LOCK",A="FL:::/Kernel/KStart32.HC.Z,53"$ +$LK,"DOCT_BTTN",A="FL:::/Kernel/KernelA.HH,918"$ +$LK,"SYS_MP_CNT_LOCK",A="FL:::/Kernel/KStart32.HC.Z,67"$ $LK,"SYS_COMPILE_TIME",A="FL::/Tmp.DD.Z,1"$ -$LK,"GetTSC",A="FL:::/Kernel/KernelB.HH,284"$ -$LK,"BptR",A="FL:::/Kernel/KDbg.HC.Z,389",BI=165$ -$LK,"DOCT_MARKER",A="FL:::/Kernel/KernelA.HH,907"$ -$LK,"BptS",A="FL:::/Kernel/KDbg.HC.Z,368",BI=166$ +$LK,"GetTSC",A="FL:::/Kernel/KernelB.HH,291"$ +$LK,"BptR",A="FL:::/Kernel/KDbg.HC.Z,389",BI=164$ +$LK,"DOCT_MARKER",A="FL:::/Kernel/KernelA.HH,895"$ +$LK,"BptS",A="FL:::/Kernel/KDbg.HC.Z,368",BI=165$ $LK,"_HASH_BUCKET_FIND",A="FL:::/Kernel/KHashA.HC.Z,158"$ $LK,"_MHEAP_CTRL",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,368"$ -$LK,"progress4_t0",A="FL:::/Kernel/KernelB.HH,225"$ -$LK,"ATAMount",A="FL:::/Kernel/BlkDev/DskATAId.HC.Z,238",BI=167$ -$LK,"FifoI64Peek",A="FL:::/Kernel/KDataTypes.HC.Z,290",BI=168$ +$LK,"progress4_t0",A="FL:::/Kernel/KernelB.HH,230"$ +$LK,"ATAMount",A="FL:::/Kernel/BlkDev/DskATAId.HC.Z,238",BI=166$ +$LK,"FifoI64Peek",A="FL:::/Kernel/KDataTypes.HC.Z,290",BI=167$ $LK,"_EXP",A="FL:::/Kernel/KMathA.HC.Z,558"$ -$LK,"SYS_SEMA_SYS_TIMER",A="FL:::/Kernel/KernelA.HH,596"$ -$LK,"IET_END",A="FL:::/Kernel/KernelA.HH,393"$ -$LK,"KbdHandler",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,441",BI=169$ -$LK,"GSF_WITH_NEW_LINE",A="FL:::/Kernel/KernelA.HH,3783"$ +$LK,"IET_END",A="FL:::/Kernel/KernelA.HH,392"$ +$LK,"GSF_WITH_NEW_LINE",A="FL:::/Kernel/KernelA.HH,3736"$ $LK,"SYS_HASH_FIND1",A="FL:::/Kernel/KHashA.HC.Z,81"$ -$LK,"GetRSP",A="FL:::/Kernel/KernelB.HH,248"$ +$LK,"GetRSP",A="FL:::/Kernel/KernelB.HH,254"$ $LK,"_D3_DIST",A="FL:::/Kernel/KMathA.HC.Z,39"$ -$LK,"ScanKey",A="FL:::/Kernel/SerialDev/Message.HC.Z,123",BI=170$ -$LK,"MouseDriverInstall",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,217",BI=171$ -$LK,"mouse_last",A="FL:::/Kernel/KGlbls.HC.Z,28"$ -$LK,"InFile",A="FL:::/Kernel/SrvCmd.HC.Z,476",BI=172$ +$LK,"ScanKey",A="FL:::/Kernel/SerialDev/Message.HC.Z,123",BI=168$ +$LK,"MSG_MS_R_D_UP",A="FL:::/Kernel/KernelA.HH,3199"$ +$LK,"InFile",A="FL:::/Kernel/Job.HC.Z,474",BI=169$ $LK,"D3DistSqr",A="FL:::/Kernel/KernelB.HH,150"$ -$LK,"_RDI",A="FL:::/Kernel/KernelA.HH,3426"$ -$LK,"SV_R_REG",A="FL:::/Kernel/KernelA.HH,1738"$ -$LK,"PRTF_TRUNCATE",A="FL:::/Kernel/KernelA.HH,3916"$ -$LK,"ATARepExitAllApplications",A="FL:::/Kernel/BlkDev/DskATAId.HC.Z,120",BI=173$ -$LK,"CeilI64",A="FL:::/Kernel/KMathB.HC.Z,62",BI=174$ -$LK,"_RBP",A="FL:::/Kernel/KernelA.HH,3427"$ -$LK,"CCacheBlk",A="FL:::/Kernel/KernelA.HH,2748"$ -$LK,"OPTf_WARN_DUP_TYPES",A="FL:::/Kernel/KernelA.HH,1537"$ -$LK,"ATAProbe",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,373",BI=175$ +$LK,"_RDI",A="FL:::/Kernel/KernelA.HH,3386"$ +$LK,"SV_R_REG",A="FL:::/Kernel/KernelA.HH,1725"$ +$LK,"PRTF_TRUNCATE",A="FL:::/Kernel/KernelA.HH,3871"$ +$LK,"ATARepExitAllApplications",A="FL:::/Kernel/BlkDev/DskATAId.HC.Z,120",BI=170$ +$LK,"CeilI64",A="FL:::/Kernel/KMathB.HC.Z,62",BI=171$ +$LK,"_RBP",A="FL:::/Kernel/KernelA.HH,3387"$ +$LK,"CCacheBlk",A="FL:::/Kernel/KernelA.HH,2736"$ +$LK,"OPTf_WARN_DUP_TYPES",A="FL:::/Kernel/KernelA.HH,1525"$ +$LK,"ATAProbe",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,376",BI=172$ $LK,"_LXCHG_U16",A="FL:::/Kernel/KUtils.HC.Z,235"$ $LK,"_LXCHG_U32",A="FL:::/Kernel/KUtils.HC.Z,226"$ -$LK,"SYS_PROGRESS1",A="FL:::/Kernel/KStart32.HC.Z,31"$ -$LK,"DOCT_FOOTER",A="FL:::/Kernel/KernelA.HH,914"$ +$LK,"SYS_PROGRESS1",A="FL:::/Kernel/KStart32.HC.Z,41"$ +$LK,"DOCT_FOOTER",A="FL:::/Kernel/KernelA.HH,902"$ $LK,"MEM_NUM_E820_ENTRIES",A="FL:::/Kernel/KernelA.HH,357"$ -$LK,"MPAPICInit",A="FL:::/Kernel/MultiProc.HC.Z,171",BI=176$ -$LK,"SYS_PROGRESS2",A="FL:::/Kernel/KStart32.HC.Z,35"$ -$LK,"DOCEf_SKIP",A="FL:::/Kernel/KernelA.HH,1105"$ -$LK,"DOCEF_SKIP",A="FL:::/Kernel/KernelA.HH,1019"$ -$LK,"SYS_PROGRESS3",A="FL:::/Kernel/KStart32.HC.Z,39"$ -$LK,"CCF_DONT_MAKE_RES",A="FL:::/Kernel/KernelA.HH,2165"$ -$LK,"CSrvCtrl",A="FL:::/Kernel/KernelA.HH,3218"$ -$LK,"DirNew",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,1",BI=177$ -$LK,"SYS_PROGRESS4",A="FL:::/Kernel/KStart32.HC.Z,43"$ -$LK,"_RAX",A="FL:::/Kernel/KernelA.HH,3421"$ -$LK,"FAT32DirNew",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,576",BI=178$ -$LK,"HTf_RESOLVED",A="FL:::/Kernel/KernelA.HH,678"$ -$LK,"LinkedLstDel",A="FL:::/Kernel/KDataTypes.HC.Z,1",BI=179$ -$LK,"Help",A="FL:::/Kernel/StrB.HC.Z,115",BI=180$ +$LK,"MPAPICInit",A="FL:::/Kernel/MultiProc.HC.Z,171",BI=173$ +$LK,"SYS_PROGRESS2",A="FL:::/Kernel/KStart32.HC.Z,46"$ +$LK,"DOCEf_SKIP",A="FL:::/Kernel/KernelA.HH,1093"$ +$LK,"DOCEF_SKIP",A="FL:::/Kernel/KernelA.HH,1007"$ +$LK,"SYS_PROGRESS3",A="FL:::/Kernel/KStart32.HC.Z,51"$ +$LK,"MSG_MS_R_UP",A="FL:::/Kernel/KernelA.HH,3197"$ +$LK,"CCF_DONT_MAKE_RES",A="FL:::/Kernel/KernelA.HH,2152"$ +$LK,"DirNew",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,1",BI=174$ +$LK,"SYS_PROGRESS4",A="FL:::/Kernel/KStart32.HC.Z,56"$ +$LK,"_RAX",A="FL:::/Kernel/KernelA.HH,3381"$ +$LK,"FAT32DirNew",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,564",BI=175$ +$LK,"HTf_RESOLVED",A="FL:::/Kernel/KernelA.HH,666"$ +$LK,"LinkedLstDel",A="FL:::/Kernel/KDataTypes.HC.Z,1",BI=176$ +$LK,"Help",A="FL:::/Kernel/StrB.HC.Z,115",BI=177$ $LK,"Log2",A="FL:::/Kernel/KernelB.HH,136"$ -$LK,"_RBX",A="FL:::/Kernel/KernelA.HH,3422"$ -$LK,"DOCT_HEX_ED",A="FL:::/Kernel/KernelA.HH,936"$ -$LK,"DOCT_LINK",A="FL:::/Kernel/KernelA.HH,929"$ +$LK,"_RBX",A="FL:::/Kernel/KernelA.HH,3382"$ +$LK,"DOCT_HEX_ED",A="FL:::/Kernel/KernelA.HH,924"$ +$LK,"DOCT_LINK",A="FL:::/Kernel/KernelA.HH,917"$ $LK,"_D3_COPY",A="FL:::/Kernel/KMathA.HC.Z,212"$ $LK,"PUT_STR",A="FL:::/Kernel/StrA.HC.Z,58"$ $LK,"_RET",A="FL:::/Kernel/KUtils.HC.Z,456"$ -$LK,"_RCX",A="FL:::/Kernel/KernelA.HH,3423"$ -$LK,"BIOSTotalMem",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,174",BI=181$ -$LK,"_RDX",A="FL:::/Kernel/KernelA.HH,3424"$ -$LK,"RLF_FULL_HEAP",A="FL:::/Kernel/KernelA.HH,464"$ -$LK,"RLf_FULL_HEAP",A="FL:::/Kernel/KernelA.HH,445"$ -$LK,"ScanMsg",A="FL:::/Kernel/SerialDev/Message.HC.Z,37",BI=182$ -$LK,"SYS_PROGRESS4_DESC",A="FL:::/Kernel/KStart32.HC.Z,46"$ -$LK,"__FILE__",A="FL:::/Kernel/KernelA.HH,2029"$ +$LK,"_RCX",A="FL:::/Kernel/KernelA.HH,3383"$ +$LK,"BIOSTotalMem",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,151",BI=178$ +$LK,"_RDX",A="FL:::/Kernel/KernelA.HH,3384"$ +$LK,"ScanMsg",A="FL:::/Kernel/SerialDev/Message.HC.Z,37",BI=179$ +$LK,"SYS_PROGRESS4_DESC",A="FL:::/Kernel/KStart32.HC.Z,60"$ +$LK,"__FILE__",A="FL:::/Kernel/KernelA.HH,2016"$ $LK,"CDate",A="FL:::/Kernel/KernelA.HH,186"$ -$LK,"CLFlush",A="FL:::/Kernel/KernelB.HH,273"$ -$LK,"SYS_HEAP_DBG_FLAG",A="FL:::/Kernel/KStart32.HC.Z,21"$ -$LK,"_RIP",A="FL:::/Kernel/KernelA.HH,3429"$ -$LK,"IEF_REX_ONLY_R8_R15",A="FL:::/Kernel/KernelA.HH,1732"$ -$LK,"MDF_IMM",A="FL:::/Kernel/KernelA.HH,1579"$ -$LK,"DOCSS_SINGLE_QUOTE",A="FL:::/Kernel/KernelA.HH,1130"$ -$LK,"KBD_PORT",A="FL:::/Kernel/KernelA.HH,3002"$ -$LK,"NUM_COLORS",A="FL:::/Kernel/KernelA.HH,2977"$ +$LK,"CLFlush",A="FL:::/Kernel/KernelB.HH,277"$ +$LK,"SYS_HEAP_DBG_FLAG",A="FL:::/Kernel/KStart32.HC.Z,31"$ +$LK,"_RIP",A="FL:::/Kernel/KernelA.HH,3389"$ +$LK,"IEF_REX_ONLY_R8_R15",A="FL:::/Kernel/KernelA.HH,1719"$ +$LK,"MDF_IMM",A="FL:::/Kernel/KernelA.HH,1567"$ +$LK,"DOCSS_SINGLE_QUOTE",A="FL:::/Kernel/KernelA.HH,1118"$ +$LK,"KBD_PORT",A="FL:::/Kernel/KernelA.HH,2970"$ +$LK,"NUM_COLORS",A="FL:::/Kernel/KernelA.HH,2945"$ $LK,"ac",A="FL:::/Kernel/KGlbls.HC.Z,19"$ $LK,"_FSTSW",A="FL:::/Kernel/KMathA.HC.Z,641"$ -$LK,"ARGT_IMM32",A="FL:::/Kernel/KernelA.HH,1884"$ -$LK,"ARGT_IMM16",A="FL:::/Kernel/KernelA.HH,1883"$ -$LK,"MouseSpeedSet",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,109",BI=183$ -$LK,"Name2ParentDirCluster",A="FL:::/Kernel/BlkDev/DskStrB.HC.Z,54",BI=184$ +$LK,"ARGT_IMM32",A="FL:::/Kernel/KernelA.HH,1871"$ +$LK,"ARGT_IMM16",A="FL:::/Kernel/KernelA.HH,1870"$ +$LK,"Name2ParentDirCluster",A="FL:::/Kernel/BlkDev/DskStrB.HC.Z,54",BI=180$ $LK,"Free",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,383"$ -$LK,"DOCEf_AUX_STR",A="FL:::/Kernel/KernelA.HH,1056"$ -$LK,"DOCEF_AUX_STR",A="FL:::/Kernel/KernelA.HH,968"$ -$LK,"Char2KeyName",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,201",BI=185$ -$LK,"Mem512Free",A="FL:::/Kernel/Mem/Mem512.HC.Z,84",BI=186$ +$LK,"DOCEf_AUX_STR",A="FL:::/Kernel/KernelA.HH,1044"$ +$LK,"DOCEF_AUX_STR",A="FL:::/Kernel/KernelA.HH,956"$ +$LK,"Char2KeyName",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,201",BI=181$ $LK,"blkdev",A="FL:::/Kernel/KGlbls.HC.Z,20"$ -$LK,"TK_NUM_TK",A="FL:::/Kernel/KernelA.HH,2110"$ -$LK,"CWinMgrGlbls",A="FL:::/Kernel/KernelA.HH,1467"$ -$LK,"DOCEf_TREE",A="FL:::/Kernel/KernelA.HH,1103"$ -$LK,"DOCEF_TREE",A="FL:::/Kernel/KernelA.HH,1017"$ -$LK,"MouseUpdatePre",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,119",BI=187$ -$LK,"ISO1FileFind",A="FL:::/Kernel/BlkDev/FileSysISO.HC.Z,70",BI=188$ -$LK,"TASK_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,3306"$ -$LK,"SysDefinesLoad",A="FL:::/Kernel/KDefine.HC.Z,97",BI=189$ -$LK,"Mem512TaskAlloc",A="FL:::/Kernel/Mem/Mem512.HC.Z,115",BI=190$ -$LK,"MEM_MAPPED_SPACE",A="FL:::/Kernel/KernelA.HH,3464"$ +$LK,"TK_NUM_TK",A="FL:::/Kernel/KernelA.HH,2097"$ +$LK,"CWinMgrGlbls",A="FL:::/Kernel/KernelA.HH,1455"$ +$LK,"DOCEf_TREE",A="FL:::/Kernel/KernelA.HH,1091"$ +$LK,"DOCEF_TREE",A="FL:::/Kernel/KernelA.HH,1005"$ +$LK,"ISO1FileFind",A="FL:::/Kernel/BlkDev/FileSysISO.HC.Z,70",BI=182$ +$LK,"progress1_tf",A="FL:::/Kernel/KernelB.HH,213"$ +$LK,"mem_mapped_space",A="FL:::/Kernel/KernelB.HH,195"$ +$LK,"TASK_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,3266"$ +$LK,"SysDefinesLoad",A="FL:::/Kernel/KDefine.HC.Z,97",BI=183$ +$LK,"MEM_MAPPED_SPACE",A="FL:::/Kernel/KStart32.HC.Z,9"$ +$LK,"SEMA_SYS_DATE",A="FL:::/Kernel/KernelA.HH,597"$ $LK,"D3Norm",A="FL:::/Kernel/KernelB.HH,157"$ $LK,"_POW",A="FL:::/Kernel/KMathA.HC.Z,515"$ -$LK,"MSG_KEY_DOWN",A="FL:::/Kernel/KernelA.HH,3229"$ -$LK,"ARGT_IMM64",A="FL:::/Kernel/KernelA.HH,1885"$ -$LK,"RTG_MASK",A="FL:::/Kernel/KernelA.HH,1568"$ -$LK,"TASK_HASH_TABLE_SIZE",A="FL:::/Kernel/KernelA.HH,2891"$ -$LK,"DOCT_BUTTON",A="FL:::/Kernel/KernelA.HH,930"$ -$LK,"drv_text_attr",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,310"$ +$LK,"MSG_KEY_DOWN",A="FL:::/Kernel/KernelA.HH,3189"$ +$LK,"ARGT_IMM64",A="FL:::/Kernel/KernelA.HH,1872"$ +$LK,"RTG_MASK",A="FL:::/Kernel/KernelA.HH,1556"$ +$LK,"SEMA_UPDATE_WIN_Z_BUF",A="FL:::/Kernel/KernelA.HH,609"$ +$LK,"TASK_HASH_TABLE_SIZE",A="FL:::/Kernel/KernelA.HH,2859"$ +$LK,"drv_text_attr",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,320"$ $LK,"PUT_HEX_U8",A="FL:::/Kernel/StrA.HC.Z,44"$ -$LK,"_RSI",A="FL:::/Kernel/KernelA.HH,3425"$ -$LK,"CTRLF_CAPTURE_RIGHT_IP",A="FL:::/Kernel/KernelA.HH,3097"$ -$LK,"CPUStructInit",A="FL:::/Kernel/MultiProc.HC.Z,116",BI=191$ -$LK,"WIf_FOCUS_TASK_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HH,1454"$ -$LK,"WIF_FOCUS_TASK_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HH,1429"$ -$LK,"CIntermediateCode",A="FL:::/Kernel/KernelA.HH,1653"$ -$LK,"MDF_REG",A="FL:::/Kernel/KernelA.HH,1580"$ -$LK,"DOC_COLOR_ANCHOR",A="FL:::/Kernel/KernelA.HH,1139"$ -$LK,"Str2ColorU32",A="FL:::/Kernel/KDefine.HC.Z,202",BI=192$ -$LK,"Str2ColorU16",A="FL:::/Kernel/KDefine.HC.Z,158",BI=193$ -$LK,"LinkedLstCnt",A="FL:::/Kernel/KDataTypes.HC.Z,21",BI=194$ -$LK,"CTRLT_VIEWING_ANGLES",A="FL:::/Kernel/KernelA.HH,3092"$ -$LK,"DOCEf_QUIT",A="FL:::/Kernel/KernelA.HH,1089"$ -$LK,"DOCEF_QUIT",A="FL:::/Kernel/KernelA.HH,1001"$ -$LK,"Tabs2Spaces",A="FL:::/Kernel/StrB.HC.Z,1",BI=195$ +$LK,"_RSI",A="FL:::/Kernel/KernelA.HH,3385"$ +$LK,"CPUStructInit",A="FL:::/Kernel/MultiProc.HC.Z,116",BI=184$ +$LK,"WIf_FOCUS_TASK_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HH,1442"$ +$LK,"WIF_FOCUS_TASK_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HH,1417"$ +$LK,"CIntermediateCode",A="FL:::/Kernel/KernelA.HH,1641"$ +$LK,"progress2_tf",A="FL:::/Kernel/KernelB.HH,219"$ +$LK,"MDF_REG",A="FL:::/Kernel/KernelA.HH,1568"$ +$LK,"DOC_COLOR_ANCHOR",A="FL:::/Kernel/KernelA.HH,1127"$ +$LK,"Str2ColorU32",A="FL:::/Kernel/KDefine.HC.Z,202",BI=185$ +$LK,"Str2ColorU16",A="FL:::/Kernel/KDefine.HC.Z,158",BI=186$ +$LK,"LinkedLstCnt",A="FL:::/Kernel/KDataTypes.HC.Z,21",BI=187$ +$LK,"CTRLT_VIEWING_ANGLES",A="FL:::/Kernel/KernelA.HH,3054"$ +$LK,"DOCEf_QUIT",A="FL:::/Kernel/KernelA.HH,1077"$ +$LK,"DOCEF_QUIT",A="FL:::/Kernel/KernelA.HH,989"$ +$LK,"Tabs2Spaces",A="FL:::/Kernel/StrB.HC.Z,1",BI=188$ $LK,"MaxI64",A="FL:::/Kernel/KernelB.HH,99"$ $LK,"SYS_GDT_PTR",A="FL:::/Kernel/KStart16.HC.Z,34"$ -$LK,"_RSP",A="FL:::/Kernel/KernelA.HH,3428"$ -$LK,"DOCT_INS_BIN_SIZE",A="FL:::/Kernel/KernelA.HH,940"$ -$LK,"FSetCluster",A="FL:::/Kernel/BlkDev/DskCFile.HC.Z,99",BI=196$ -$LK,"WinDerivedValsUpdate",A="FL:::/Kernel/Display.HC.Z,93",BI=197$ +$LK,"_RSP",A="FL:::/Kernel/KernelA.HH,3388"$ +$LK,"DOCT_INS_BIN_SIZE",A="FL:::/Kernel/KernelA.HH,928"$ +$LK,"FSetCluster",A="FL:::/Kernel/BlkDev/DskCFile.HC.Z,99",BI=189$ +$LK,"WinDerivedValsUpdate",A="FL:::/Kernel/Display.HC.Z,93",BI=190$ $LK,"fp_update_ctrls",A="FL:::/Kernel/KGlbls.HC.Z,33"$ -$LK,"DSK_CACHE_HASH_SIZE",A="FL:::/Kernel/KernelA.HH,2746"$ -$LK,"RS_ATTR_VOL_ID",A="FL:::/Kernel/KernelA.HH,2529"$ -$LK,"DOCf_UNDERLINE",A="FL:::/Kernel/KernelA.HH,1325"$ -$LK,"DOCF_UNDERLINE",A="FL:::/Kernel/KernelA.HH,1288"$ -$LK,"DOCT_UNDERLINE",A="FL:::/Kernel/KernelA.HH,924"$ -$LK,"IntDivZero",A="FL:::/Kernel/KInts.HC.Z,150",BI=198$ +$LK,"DSK_CACHE_HASH_SIZE",A="FL:::/Kernel/KernelA.HH,2734"$ +$LK,"RS_ATTR_VOL_ID",A="FL:::/Kernel/KernelA.HH,2516"$ +$LK,"DOCf_UNDERLINE",A="FL:::/Kernel/KernelA.HH,1313"$ +$LK,"DOCF_UNDERLINE",A="FL:::/Kernel/KernelA.HH,1276"$ +$LK,"DOCT_UNDERLINE",A="FL:::/Kernel/KernelA.HH,912"$ +$LK,"IntDivZero",A="FL:::/Kernel/KInts.HC.Z,150",BI=191$ +$LK,"MemPagFree",A="FL:::/Kernel/Mem/MemPag.HC.Z,83",BI=192$ $LK,"_SQR",A="FL:::/Kernel/KMathA.HC.Z,337"$ -$LK,"DISPLAYf_SILENT",A="FL:::/Kernel/KernelA.HH,3301"$ -$LK,"MDF_SIB",A="FL:::/Kernel/KernelA.HH,1582"$ -$LK,"REGT_R32",A="FL:::/Kernel/KernelA.HH,742"$ -$LK,"REGT_R16",A="FL:::/Kernel/KernelA.HH,741"$ -$LK,"IEF_NOT_IN_64_BIT",A="FL:::/Kernel/KernelA.HH,1730"$ -$LK,"RedSeaFileFind",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,155",BI=199$ +$LK,"DISPLAYf_SILENT",A="FL:::/Kernel/KernelA.HH,3261"$ +$LK,"MDF_SIB",A="FL:::/Kernel/KernelA.HH,1570"$ +$LK,"REGT_R32",A="FL:::/Kernel/KernelA.HH,730"$ +$LK,"REGT_R16",A="FL:::/Kernel/KernelA.HH,729"$ +$LK,"CJobCtrl",A="FL:::/Kernel/KernelA.HH,3178"$ +$LK,"progress3_tf",A="FL:::/Kernel/KernelB.HH,225"$ +$LK,"IEF_NOT_IN_64_BIT",A="FL:::/Kernel/KernelA.HH,1717"$ +$LK,"RedSeaFileFind",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,155",BI=193$ +$LK,"CTRLF_CAPTURE_RIGHT_MS",A="FL:::/Kernel/KernelA.HH,3059"$ $LK,"SYS_PCIBIOS_SERVICE_DIR",A="FL:::/Kernel/PCIBIOS.HC.Z,4"$ -$LK,"tS",A="FL:::/Kernel/KMisc.HC.Z,122",BI=200$ +$LK,"tS",A="FL:::/Kernel/KMisc.HC.Z,122",BI=194$ $LK,"LBEqu",A="FL:::/Kernel/KernelB.HH,34"$ -$LK,"ICF_RES_NOT_USED",A="FL:::/Kernel/KernelA.HH,1598"$ -$LK,"DOCEt_SEL",A="FL:::/Kernel/KernelA.HH,956"$ -$LK,"ArcDetermineCompressionType",A="FL:::/Kernel/Compress.HC.Z,102",BI=201$ -$LK,"SYS_SEMA_REFRESH_IN_PROGRESS",A="FL:::/Kernel/KernelA.HH,602"$ -$LK,"IntInit1",A="FL:::/Kernel/KInts.HC.Z,180",BI=202$ -$LK,"CH_CURSOR",A="FL:::/Kernel/KernelA.HH,3510"$ -$LK,"IntInit2",A="FL:::/Kernel/KInts.HC.Z,195",BI=203$ -$LK,"DOCT_CURSOR",A="FL:::/Kernel/KernelA.HH,906"$ -$LK,"GetKey",A="FL:::/Kernel/SerialDev/Message.HC.Z,142",BI=204$ -$LK,"ROP_MONO",A="FL:::/Kernel/KernelA.HH,2947"$ -$LK,"CFAT32DirEntryLong",A="FL:::/Kernel/KernelA.HH,2396"$ -$LK,"Kill",A="FL:::/Kernel/KTask.HC.Z,45",BI=205$ -$LK,"RS_ATTR_FIXED",A="FL:::/Kernel/KernelA.HH,2539"$ -$LK,"TK_IFDEF",A="FL:::/Kernel/KernelA.HH,2099"$ -$LK,"REGT_R64",A="FL:::/Kernel/KernelA.HH,743"$ -$LK,"SingleUser",A="FL:::/Kernel/KMisc.HC.Z,267",BI=206$ -$LK,"Date2Struct",A="FL:::/Kernel/KDate.HC.Z,39",BI=207$ -$LK,"CFile",A="FL:::/Kernel/KernelA.HH,2789"$ -$LK,"Fault2",A="FL:::/Kernel/KDbg.HC.Z,592",BI=208$ -$LK,"Load",A="FL:::/Kernel/KLoad.HC.Z,181",BI=209$ -$LK,"ip",A="FL:::/Kernel/KGlbls.HC.Z,25"$ -$LK,"CFreeLst",A="FL:::/Kernel/KernelA.HH,2711"$ -$LK,"DOCEF_CHECKED_COLLAPSED",A="FL:::/Kernel/KernelA.HH,1006"$ +$LK,"ICF_RES_NOT_USED",A="FL:::/Kernel/KernelA.HH,1586"$ +$LK,"DOCEt_SEL",A="FL:::/Kernel/KernelA.HH,944"$ +$LK,"ArcDetermineCompressionType",A="FL:::/Kernel/Compress.HC.Z,102",BI=195$ +$LK,"IntInit1",A="FL:::/Kernel/KInts.HC.Z,180",BI=196$ +$LK,"CH_CURSOR",A="FL:::/Kernel/KernelA.HH,3464"$ +$LK,"IntInit2",A="FL:::/Kernel/KInts.HC.Z,195",BI=197$ +$LK,"DOCT_CURSOR",A="FL:::/Kernel/KernelA.HH,894"$ +$LK,"GetKey",A="FL:::/Kernel/SerialDev/Message.HC.Z,142",BI=198$ +$LK,"ROP_MONO",A="FL:::/Kernel/KernelA.HH,2915"$ +$LK,"CFAT32DirEntryLong",A="FL:::/Kernel/KernelA.HH,2383"$ +$LK,"Kill",A="FL:::/Kernel/KTask.HC.Z,48",BI=199$ +$LK,"RS_ATTR_FIXED",A="FL:::/Kernel/KernelA.HH,2526"$ +$LK,"TK_IFDEF",A="FL:::/Kernel/KernelA.HH,2086"$ +$LK,"REGT_R64",A="FL:::/Kernel/KernelA.HH,731"$ +$LK,"SingleUser",A="FL:::/Kernel/KMisc.HC.Z,283",BI=200$ +$LK,"Date2Struct",A="FL:::/Kernel/KDate.HC.Z,39",BI=201$ +$LK,"progress4_tf",A="FL:::/Kernel/KernelB.HH,231"$ +$LK,"CFile",A="FL:::/Kernel/KernelA.HH,2777"$ +$LK,"Fault2",A="FL:::/Kernel/KDbg.HC.Z,596",BI=202$ +$LK,"Load",A="FL:::/Kernel/KLoad.HC.Z,181",BI=203$ +$LK,"CFreeLst",A="FL:::/Kernel/KernelA.HH,2698"$ +$LK,"DOCEF_CHECKED_COLLAPSED",A="FL:::/Kernel/KernelA.HH,994"$ $LK,"CHash",A="FL:::/Kernel/KernelA.HH,624"$ -$LK,"RedSeaFreeClusters",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,250",BI=210$ -$LK,"DeathWait",A="FL:::/Kernel/KTask.HC.Z,35",BI=211$ -$LK,"Fault3",A="FL:::/Kernel/KDbg.HC.Z,561",BI=212$ -$LK,"CompressBuf",A="FL:::/Kernel/Compress.HC.Z,281",BI=213$ -$LK,"chars_bmp_hex_numeric",A="FL:::/Kernel/StrA.HC.Z,353"$ -$LK,"CCF_NOT_CONST",A="FL:::/Kernel/KernelA.HH,2139"$ -$LK,"CeilU64",A="FL:::/Kernel/KMathB.HC.Z,41",BI=214$ -$LK,"BPlf_LOCKED",A="FL:::/Kernel/KernelA.HH,2894"$ -$LK,"BDlf_LOCKED",A="FL:::/Kernel/KernelA.HH,2660"$ -$LK,"TK_ELLIPSIS",A="FL:::/Kernel/KernelA.HH,2107"$ -$LK,"TK_OR_EQU",A="FL:::/Kernel/KernelA.HH,2094"$ +$LK,"RedSeaFreeClusters",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,250",BI=204$ +$LK,"DeathWait",A="FL:::/Kernel/KTask.HC.Z,38",BI=205$ +$LK,"Fault3",A="FL:::/Kernel/KDbg.HC.Z,564",BI=206$ +$LK,"Busy",A="FL:::/Kernel/KMisc.HC.Z,136",BI=207$ +$LK,"CompressBuf",A="FL:::/Kernel/Compress.HC.Z,281",BI=208$ +$LK,"CCF_NOT_CONST",A="FL:::/Kernel/KernelA.HH,2126"$ +$LK,"CeilU64",A="FL:::/Kernel/KMathB.HC.Z,41",BI=209$ +$LK,"BPlf_LOCKED",A="FL:::/Kernel/KernelA.HH,2862"$ +$LK,"BDlf_LOCKED",A="FL:::/Kernel/KernelA.HH,2647"$ +$LK,"TK_ELLIPSIS",A="FL:::/Kernel/KernelA.HH,2094"$ +$LK,"TK_OR_EQU",A="FL:::/Kernel/KernelA.HH,2081"$ $LK,"sys_neg_pows_lst",A="FL:::/Kernel/StrPrint.HC.Z,203"$ $LK,"sys_pos_pows_lst",A="FL:::/Kernel/StrPrint.HC.Z,202"$ -$LK,"MStrPrint",A="FL:::/Kernel/StrPrint.HC.Z,898",BI=215$ -$LK,"DVlf_LOCKED",A="FL:::/Kernel/KernelA.HH,2685"$ -$LK,"SrcFileName",A="FL:::/Kernel/FunSeg.HC.Z,239",BI=216$ -$LK,"RawD",A="FL:::/Kernel/KDbg.HC.Z,234",BI=217$ -$LK,"IsSingleUser",A="FL:::/Kernel/KMisc.HC.Z,272",BI=218$ +$LK,"MStrPrint",A="FL:::/Kernel/StrPrint.HC.Z,898",BI=210$ +$LK,"DVlf_LOCKED",A="FL:::/Kernel/KernelA.HH,2672"$ +$LK,"SrcFileName",A="FL:::/Kernel/FunSeg.HC.Z,239",BI=211$ +$LK,"RawD",A="FL:::/Kernel/KDbg.HC.Z,234",BI=212$ +$LK,"IsSingleUser",A="FL:::/Kernel/KMisc.HC.Z,288",BI=213$ $LK,"adam_task",A="FL:::/Kernel/KGlbls.HC.Z,8"$ $LK,"_POW10",A="FL:::/Kernel/KMathA.HC.Z,524"$ -$LK,"SVCRf_LOCKED",A="FL:::/Kernel/KernelA.HH,3217"$ -$LK,"BDF_LAST_WAS_WRITE",A="FL:::/Kernel/KernelA.HH,2643"$ -$LK,"DOCT_CURSOR_MOVEMENT",A="FL:::/Kernel/KernelA.HH,927"$ -$LK,"SCF_CTRL",A="FL:::/Kernel/KernelA.HH,3540"$ -$LK,"SCf_CTRL",A="FL:::/Kernel/KernelA.HH,3525"$ -$LK,"TK_ENDIF",A="FL:::/Kernel/KernelA.HH,2103"$ -$LK,"RT_UF32",A="FL:::/Kernel/KernelA.HH,1563"$ -$LK,"CCF_NO_REG_OPT",A="FL:::/Kernel/KernelA.HH,2140"$ -$LK,"DOCEf_UNDERLINE",A="FL:::/Kernel/KernelA.HH,1051"$ -$LK,"DOCEF_UNDERLINE",A="FL:::/Kernel/KernelA.HH,1045"$ -$LK,"DOCEt_UNDERLINE",A="FL:::/Kernel/KernelA.HH,957"$ -$LK,"DOCET_UNDERLINE",A="FL:::/Kernel/KernelA.HH,951"$ -$LK,"RLf_DOC",A="FL:::/Kernel/KernelA.HH,451"$ +$LK,"BDF_LAST_WAS_WRITE",A="FL:::/Kernel/KernelA.HH,2630"$ +$LK,"DOCT_CURSOR_MOVEMENT",A="FL:::/Kernel/KernelA.HH,915"$ +$LK,"SCF_CTRL",A="FL:::/Kernel/KernelA.HH,3493"$ +$LK,"SCf_CTRL",A="FL:::/Kernel/KernelA.HH,3478"$ +$LK,"TK_ENDIF",A="FL:::/Kernel/KernelA.HH,2090"$ +$LK,"RT_UF32",A="FL:::/Kernel/KernelA.HH,1551"$ +$LK,"CCF_NO_REG_OPT",A="FL:::/Kernel/KernelA.HH,2127"$ +$LK,"DOCEf_UNDERLINE",A="FL:::/Kernel/KernelA.HH,1039"$ +$LK,"DOCEF_UNDERLINE",A="FL:::/Kernel/KernelA.HH,1033"$ +$LK,"DOCEt_UNDERLINE",A="FL:::/Kernel/KernelA.HH,945"$ +$LK,"DOCET_UNDERLINE",A="FL:::/Kernel/KernelA.HH,939"$ +$LK,"RLf_DOC",A="FL:::/Kernel/KernelA.HH,453"$ $LK,"pi",A="FL:::/Kernel/KernelA.HH,50"$ -$LK,"ATTRF_UNDERLINE",A="FL:::/Kernel/KernelA.HH,893"$ -$LK,"ATTRf_UNDERLINE",A="FL:::/Kernel/KernelA.HH,898"$ -$LK,"KbdMouseVarsInit",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,271",BI=219$ -$LK,"DOCF_BWD_MOVEMENT",A="FL:::/Kernel/KernelA.HH,1277"$ -$LK,"SYS_SEMA_UPDATE_WIN_Z_BUF",A="FL:::/Kernel/KernelA.HH,609"$ -$LK,"Exit",A="FL:::/Kernel/KTask.HC.Z,1",BI=220$ -$LK,"TASKf_BREAK_TO_SHIFT_ESC",A="FL:::/Kernel/KernelA.HH,3293"$ -$LK,"HTT_KEYWORD",A="FL:::/Kernel/KernelA.HH,692"$ -$LK,"CopySingleZ",A="FL:::/Kernel/BlkDev/DskCopy.HC.Z,1",BI=221$ -$LK,"DCF_NO_TRANSPARENTS",A="FL:::/Kernel/KernelA.HH,3626"$ -$LK,"HTt_KEYWORD",A="FL:::/Kernel/KernelA.HH,662"$ -$LK,"RT_UF64",A="FL:::/Kernel/KernelA.HH,1565"$ -$LK,"DOCf_BWD_MOVEMENT",A="FL:::/Kernel/KernelA.HH,1313"$ -$LK,"GetMsg",A="FL:::/Kernel/SerialDev/Message.HC.Z,95",BI=222$ -$LK,"CMPCrash",A="FL:::/Kernel/KernelA.HH,3857"$ -$LK,"ROPBF_HALF_RANGE_COLOR",A="FL:::/Kernel/KernelA.HH,2939"$ -$LK,"ICF_SHORT_JMP",A="FL:::/Kernel/KernelA.HH,1601"$ -$LK,"IA32_FS_BASE",A="FL:::/Kernel/KernelA.HH,523"$ -$LK,"Rand",A="FL:::/Kernel/KMathB.HC.Z,137",BI=223$ -$LK,"FAT32_ENTRIES_BITS",A="FL:::/Kernel/KernelA.HH,2409"$ -$LK,"TK_IDENT",A="FL:::/Kernel/KernelA.HH,2071"$ -$LK,"ArcCompressBuf",A="FL:::/Kernel/Compress.HC.Z,110",BI=224$ -$LK,"MDG_REG_DISP_SIB_RIP",A="FL:::/Kernel/KernelA.HH,1587"$ -$LK,"ToFileLine",A="FL:::/Kernel/EdLite.HC.Z,303",BI=225$ +$LK,"MsHardDrvrInstall",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,294",BI=214$ +$LK,"KbdHndlr",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,441",BI=215$ +$LK,"ATTRF_UNDERLINE",A="FL:::/Kernel/KernelA.HH,881"$ +$LK,"ATTRf_UNDERLINE",A="FL:::/Kernel/KernelA.HH,886"$ +$LK,"SEMA_FLUSH_VGA_IMAGE",A="FL:::/Kernel/KernelA.HH,603"$ +$LK,"DOCF_BWD_MOVEMENT",A="FL:::/Kernel/KernelA.HH,1265"$ +$LK,"ms",A="FL:::/Kernel/KGlbls.HC.Z,25"$ +$LK,"Exit",A="FL:::/Kernel/KTask.HC.Z,1",BI=216$ +$LK,"TASKf_BREAK_TO_SHIFT_ESC",A="FL:::/Kernel/KernelA.HH,3253"$ +$LK,"HTT_KEYWORD",A="FL:::/Kernel/KernelA.HH,680"$ +$LK,"CopySingleZ",A="FL:::/Kernel/BlkDev/DskCopy.HC.Z,1",BI=217$ +$LK,"DCF_NO_TRANSPARENTS",A="FL:::/Kernel/KernelA.HH,3579"$ +$LK,"HTt_KEYWORD",A="FL:::/Kernel/KernelA.HH,650"$ +$LK,"RT_UF64",A="FL:::/Kernel/KernelA.HH,1553"$ +$LK,"DOCf_BWD_MOVEMENT",A="FL:::/Kernel/KernelA.HH,1301"$ +$LK,"GetMsg",A="FL:::/Kernel/SerialDev/Message.HC.Z,95",BI=218$ +$LK,"CMPCrash",A="FL:::/Kernel/KernelA.HH,3811"$ +$LK,"ROPBF_HALF_RANGE_COLOR",A="FL:::/Kernel/KernelA.HH,2907"$ +$LK,"JOBT_EXE_STR",A="FL:::/Kernel/KernelA.HH,3155"$ +$LK,"ICF_SHORT_JMP",A="FL:::/Kernel/KernelA.HH,1589"$ +$LK,"IA32_FS_BASE",A="FL:::/Kernel/KernelA.HH,526"$ +$LK,"Rand",A="FL:::/Kernel/KMathB.HC.Z,137",BI=219$ +$LK,"FAT32_ENTRIES_BITS",A="FL:::/Kernel/KernelA.HH,2396"$ +$LK,"TK_IDENT",A="FL:::/Kernel/KernelA.HH,2058"$ +$LK,"ArcCompressBuf",A="FL:::/Kernel/Compress.HC.Z,110",BI=220$ +$LK,"MDG_REG_DISP_SIB_RIP",A="FL:::/Kernel/KernelA.HH,1575"$ +$LK,"ToFileLine",A="FL:::/Kernel/EdLite.HC.Z,303",BI=221$ $LK,"D3Unit",A="FL:::/Kernel/KernelB.HH,161"$ -$LK,"CTRLT_WIN_HSCROLL",A="FL:::/Kernel/KernelA.HH,3090"$ -$LK,"TK_IFAOT",A="FL:::/Kernel/KernelA.HH,2101"$ -$LK,"IsDotC",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,31",BI=226$ -$LK,"BDf_LAST_WAS_WRITE",A="FL:::/Kernel/KernelA.HH,2653"$ -$LK,"TK_GREATER_EQU",A="FL:::/Kernel/KernelA.HH,2085"$ -$LK,"CICArg",A="FL:::/Kernel/KernelA.HH,1630"$ -$LK,"MDF_STK",A="FL:::/Kernel/KernelA.HH,1578"$ -$LK,"DOCEf_CENTER_X",A="FL:::/Kernel/KernelA.HH,1077"$ -$LK,"DOCEF_CENTER_X",A="FL:::/Kernel/KernelA.HH,989"$ -$LK,"SYS_TIMER_FREQ",A="FL:::/Kernel/KernelA.HH,553"$ -$LK,"HashTablePurge",A="FL:::/Kernel/KHashB.HC.Z,107",BI=227$ -$LK,"GR_HEIGHT",A="FL:::/Kernel/KernelA.HH,3615"$ -$LK,"DOCEf_CENTER_Y",A="FL:::/Kernel/KernelA.HH,1080"$ -$LK,"DOCEF_CENTER_Y",A="FL:::/Kernel/KernelA.HH,992"$ -$LK,"Seed",A="FL:::/Kernel/KMathB.HC.Z,147",BI=228$ -$LK,"DrvsRelease",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,27",BI=229$ -$LK,"BlkDevNextFreeSlot",A="FL:::/Kernel/BlkDev/DskBlkDev.HC.Z,120",BI=230$ -$LK,"TASKf_FILTER_INPUT",A="FL:::/Kernel/KernelA.HH,3287"$ -$LK,"DOCEF_REFRESH_DATA",A="FL:::/Kernel/KernelA.HH,1008"$ -$LK,"DOCf_DONT_HIGHLIGHT_CURSOR",A="FL:::/Kernel/KernelA.HH,1307"$ -$LK,"DOCF_DONT_HIGHLIGHT_CURSOR",A="FL:::/Kernel/KernelA.HH,1271"$ -$LK,"SYS_SEMA_FLUSH_VGA_IMAGE",A="FL:::/Kernel/KernelA.HH,603"$ -$LK,"OPTf_NO_REG_VAR",A="FL:::/Kernel/KernelA.HH,1541"$ -$LK,"CTRLF_SHOW",A="FL:::/Kernel/KernelA.HH,3094"$ -$LK,"DOCEf_REFRESH_DATA",A="FL:::/Kernel/KernelA.HH,1096"$ -$LK,"DOCEf_LEFT_EXP",A="FL:::/Kernel/KernelA.HH,1059"$ -$LK,"DOCEF_LEFT_EXP",A="FL:::/Kernel/KernelA.HH,971"$ -$LK,"ISO1FileRead",A="FL:::/Kernel/BlkDev/FileSysISO.HC.Z,130",BI=231$ -$LK,"ATAPIWaitReady",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,334",BI=232$ -$LK,"SC_PRTSCRN1",A="FL:::/Kernel/KernelA.HH,3590"$ -$LK,"FUF_ALL",A="FL:::/Kernel/KernelA.HH,2599"$ +$LK,"CTRLT_WIN_HSCROLL",A="FL:::/Kernel/KernelA.HH,3052"$ +$LK,"TK_IFAOT",A="FL:::/Kernel/KernelA.HH,2088"$ +$LK,"IsDotC",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,31",BI=222$ +$LK,"BDf_LAST_WAS_WRITE",A="FL:::/Kernel/KernelA.HH,2640"$ +$LK,"TK_GREATER_EQU",A="FL:::/Kernel/KernelA.HH,2072"$ +$LK,"CICArg",A="FL:::/Kernel/KernelA.HH,1618"$ +$LK,"MDF_STK",A="FL:::/Kernel/KernelA.HH,1566"$ +$LK,"DOCEf_CENTER_X",A="FL:::/Kernel/KernelA.HH,1065"$ +$LK,"DOCEF_CENTER_X",A="FL:::/Kernel/KernelA.HH,977"$ +$LK,"SYS_TIMER_FREQ",A="FL:::/Kernel/KernelA.HH,556"$ +$LK,"HashTablePurge",A="FL:::/Kernel/KHashB.HC.Z,107",BI=223$ +$LK,"GR_HEIGHT",A="FL:::/Kernel/KernelA.HH,3568"$ +$LK,"DOCEf_CENTER_Y",A="FL:::/Kernel/KernelA.HH,1068"$ +$LK,"DOCEF_CENTER_Y",A="FL:::/Kernel/KernelA.HH,980"$ +$LK,"Seed",A="FL:::/Kernel/KMathB.HC.Z,147",BI=224$ +$LK,"DrvsRelease",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,27",BI=225$ +$LK,"BlkDevNextFreeSlot",A="FL:::/Kernel/BlkDev/DskBlkDev.HC.Z,125",BI=226$ +$LK,"TASKf_FILTER_INPUT",A="FL:::/Kernel/KernelA.HH,3247"$ +$LK,"DOCEF_REFRESH_DATA",A="FL:::/Kernel/KernelA.HH,996"$ +$LK,"DOCf_DONT_HIGHLIGHT_CURSOR",A="FL:::/Kernel/KernelA.HH,1295"$ +$LK,"DOCF_DONT_HIGHLIGHT_CURSOR",A="FL:::/Kernel/KernelA.HH,1259"$ +$LK,"OPTf_NO_REG_VAR",A="FL:::/Kernel/KernelA.HH,1529"$ +$LK,"CTRLF_SHOW",A="FL:::/Kernel/KernelA.HH,3056"$ +$LK,"DOCEf_REFRESH_DATA",A="FL:::/Kernel/KernelA.HH,1084"$ +$LK,"DOCEf_LEFT_EXP",A="FL:::/Kernel/KernelA.HH,1047"$ +$LK,"DOCEF_LEFT_EXP",A="FL:::/Kernel/KernelA.HH,959"$ +$LK,"ISO1FileRead",A="FL:::/Kernel/BlkDev/FileSysISO.HC.Z,130",BI=227$ +$LK,"ATAPIWaitReady",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,337",BI=228$ +$LK,"SC_PRTSCRN1",A="FL:::/Kernel/KernelA.HH,3543"$ +$LK,"FUF_ALL",A="FL:::/Kernel/KernelA.HH,2586"$ $LK,"STR_LEN",A="FL:::/Kernel/KernelA.HH,41"$ -$LK,"DskCacheQueIns",A="FL:::/Kernel/BlkDev/DskCache.HC.Z,53",BI=233$ -$LK,"SC_PRTSCRN2",A="FL:::/Kernel/KernelA.HH,3591"$ -$LK,"sys_semas",A="FL:::/Kernel/KernelB.HH,235"$ -$LK,"InputFilterTask",A="FL:::/Kernel/SerialDev/Message.HC.Z,1",BI=234$ +$LK,"DskCacheQueIns",A="FL:::/Kernel/BlkDev/DskCache.HC.Z,53",BI=229$ +$LK,"SC_PRTSCRN2",A="FL:::/Kernel/KernelA.HH,3544"$ +$LK,"sys_semas",A="FL:::/Kernel/KernelB.HH,241"$ +$LK,"OS_LINUX",A="FL:::/Kernel/KernelA.HH,3886"$ +$LK,"InputFilterTask",A="FL:::/Kernel/SerialDev/Message.HC.Z,1",BI=230$ $LK,"SYS_HASH_STR",A="FL:::/Kernel/KHashA.HC.Z,4"$ -$LK,"ATAR0_CMD",A="FL:::/Kernel/KernelA.HH,2284"$ +$LK,"ATAR0_CMD",A="FL:::/Kernel/KernelA.HH,2271"$ $LK,"I_DBG",A="FL:::/Kernel/KernelA.HH,297"$ -$LK,"FATNameTo",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,130",BI=235$ -$LK,"SrvCmdQueDel",A="FL:::/Kernel/SrvCmd.HC.Z,7",BI=236$ +$LK,"FATNameTo",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,118",BI=231$ $LK,"MinI64",A="FL:::/Kernel/KernelB.HH,101"$ $LK,"MaxU64",A="FL:::/Kernel/KernelB.HH,100"$ $LK,"CallInd",A="FL:::/Kernel/KernelB.HH,49"$ -$LK,"EndianI64",A="FL:::/Kernel/KMisc.HC.Z,25",BI=237$ +$LK,"EndianI64",A="FL:::/Kernel/KMisc.HC.Z,25",BI=232$ $LK,"_MSIZE",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,337"$ -$LK,"AC_MAX_FILLINS",A="FL:::/Kernel/KernelA.HH,1482"$ -$LK,"GVF_IMPORT",A="FL:::/Kernel/KernelA.HH,868"$ -$LK,"HTF_IMPORT",A="FL:::/Kernel/KernelA.HH,705"$ -$LK,"HTf_IMPORT",A="FL:::/Kernel/KernelA.HH,675"$ -$LK,"NUM_BLKDEVS",A="FL:::/Kernel/KernelA.HH,2662"$ -$LK,"IEF_PLUS_OPCODE",A="FL:::/Kernel/KernelA.HH,1727"$ -$LK,"LAPIC_ICR_LOW",A="FL:::/Kernel/KernelA.HH,496"$ -$LK,"mouse",A="FL:::/Kernel/KGlbls.HC.Z,28"$ +$LK,"AC_MAX_FILLINS",A="FL:::/Kernel/KernelA.HH,1470"$ +$LK,"GVF_IMPORT",A="FL:::/Kernel/KernelA.HH,856"$ +$LK,"HTF_IMPORT",A="FL:::/Kernel/KernelA.HH,693"$ +$LK,"HTf_IMPORT",A="FL:::/Kernel/KernelA.HH,663"$ +$LK,"NUM_BLKDEVS",A="FL:::/Kernel/KernelA.HH,2649"$ +$LK,"IEF_PLUS_OPCODE",A="FL:::/Kernel/KernelA.HH,1714"$ +$LK,"LAPIC_ICR_LOW",A="FL:::/Kernel/KernelA.HH,499"$ $LK,"D3Zero",A="FL:::/Kernel/KernelB.HH,162"$ -$LK,"ST_WARN_ST",A="FL:::/Kernel/KernelA.HH,3519"$ -$LK,"FUF_SCAN_PARENTS",A="FL:::/Kernel/KernelA.HH,2617"$ -$LK,"DskCacheInvalidate2",A="FL:::/Kernel/BlkDev/DskCache.HC.Z,97",BI=238$ -$LK,"CCtrl",A="FL:::/Kernel/KernelA.HH,3116"$ -$LK,"CBlkDev",A="FL:::/Kernel/KernelA.HH,2664"$ -$LK,"DOCT_SONG",A="FL:::/Kernel/KernelA.HH,941"$ -$LK,"DOCT_TREE",A="FL:::/Kernel/KernelA.HH,937"$ -$LK,"progress1_desc",A="FL:::/Kernel/KernelB.HH,208"$ -$LK,"BDS_ED_FILENAME_DRV",A="FL:::/Kernel/KernelA.HH,3271"$ -$LK,"DOCT_TEXT",A="FL:::/Kernel/KernelA.HH,901"$ +$LK,"ST_WARN_ST",A="FL:::/Kernel/KernelA.HH,3472"$ +$LK,"FUF_SCAN_PARENTS",A="FL:::/Kernel/KernelA.HH,2604"$ +$LK,"DskCacheInvalidate2",A="FL:::/Kernel/BlkDev/DskCache.HC.Z,97",BI=233$ +$LK,"CCtrl",A="FL:::/Kernel/KernelA.HH,3078"$ +$LK,"CBlkDev",A="FL:::/Kernel/KernelA.HH,2651"$ +$LK,"DOCT_SONG",A="FL:::/Kernel/KernelA.HH,929"$ +$LK,"DOCT_TREE",A="FL:::/Kernel/KernelA.HH,925"$ +$LK,"progress1_desc",A="FL:::/Kernel/KernelB.HH,210"$ +$LK,"BDS_ED_FILENAME_DRV",A="FL:::/Kernel/KernelA.HH,3231"$ +$LK,"DOCT_TEXT",A="FL:::/Kernel/KernelA.HH,889"$ $LK,"CMathODE",A="FL:::/Kernel/KernelA.HH,245"$ -$LK,"WinInside",A="FL:::/Kernel/Display.HC.Z,110",BI=239$ +$LK,"WinInside",A="FL:::/Kernel/Display.HC.Z,110",BI=234$ +$LK,"SEMA_FIX",A="FL:::/Kernel/KernelA.HH,615"$ $LK,"RFLAGf_ALIGN_CHECK",A="FL:::/Kernel/KernelA.HH,322"$ -$LK,"FUf_SCAN_PARENTS",A="FL:::/Kernel/KernelA.HH,2590"$ -$LK,"DOCF_ALLOW_UNDO",A="FL:::/Kernel/KernelA.HH,1273"$ -$LK,"CMemberLst",A="FL:::/Kernel/KernelA.HH,798"$ -$LK,"DOCf_ALLOW_UNDO",A="FL:::/Kernel/KernelA.HH,1309"$ -$LK,"DskCacheQueRem",A="FL:::/Kernel/BlkDev/DskCache.HC.Z,46",BI=240$ +$LK,"MsHardSet",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,272",BI=235$ +$LK,"FUf_SCAN_PARENTS",A="FL:::/Kernel/KernelA.HH,2577"$ +$LK,"DOCF_ALLOW_UNDO",A="FL:::/Kernel/KernelA.HH,1261"$ +$LK,"CMemberLst",A="FL:::/Kernel/KernelA.HH,786"$ +$LK,"DOCf_ALLOW_UNDO",A="FL:::/Kernel/KernelA.HH,1297"$ +$LK,"DskCacheQueRem",A="FL:::/Kernel/BlkDev/DskCache.HC.Z,46",BI=236$ $LK,"_D3_NORM",A="FL:::/Kernel/KMathA.HC.Z,4"$ -$LK,"DOCEf_BLINK",A="FL:::/Kernel/KernelA.HH,1048"$ -$LK,"DOCEF_BLINK",A="FL:::/Kernel/KernelA.HH,1042"$ -$LK,"IsDotZ",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,22",BI=241$ -$LK,"HashGenericAdd",A="FL:::/Kernel/KHashB.HC.Z,140",BI=242$ +$LK,"DOCEf_BLINK",A="FL:::/Kernel/KernelA.HH,1036"$ +$LK,"DOCEF_BLINK",A="FL:::/Kernel/KernelA.HH,1030"$ +$LK,"IsDotZ",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,22",BI=237$ +$LK,"HashGenericAdd",A="FL:::/Kernel/KHashB.HC.Z,140",BI=238$ $LK,"_TASK_CONTEXT_RESTORE",A="FL:::/Kernel/Sched.HC.Z,100"$ $LK,"BFieldOrU32",A="FL:::/Kernel/KernelB.HH,32"$ -$LK,"TK_IFJIT",A="FL:::/Kernel/KernelA.HH,2102"$ -$LK,"RedSeaFileRead",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,207",BI=243$ -$LK,"MousePktRead",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,1",BI=244$ -$LK,"VGAP_CRTC_DATA",A="FL:::/Kernel/KernelA.HH,3735"$ -$LK,"ARGT_REL32",A="FL:::/Kernel/KernelA.HH,1880"$ -$LK,"ARGT_REL16",A="FL:::/Kernel/KernelA.HH,1879"$ -$LK,"cpu_structs",A="FL:::/Kernel/KernelB.HH,231"$ -$LK,"SC_DELETE",A="FL:::/Kernel/KernelA.HH,3575"$ +$LK,"TK_IFJIT",A="FL:::/Kernel/KernelA.HH,2089"$ +$LK,"RedSeaFileRead",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,207",BI=239$ +$LK,"VGAP_CRTC_DATA",A="FL:::/Kernel/KernelA.HH,3688"$ +$LK,"ARGT_REL32",A="FL:::/Kernel/KernelA.HH,1867"$ +$LK,"ARGT_REL16",A="FL:::/Kernel/KernelA.HH,1866"$ +$LK,"mem_page_size",A="FL:::/Kernel/KernelB.HH,284"$ +$LK,"cpu_structs",A="FL:::/Kernel/KernelB.HH,237"$ +$LK,"SC_DELETE",A="FL:::/Kernel/KernelA.HH,3528"$ $LK,"MAX_U64_F64",A="FL:::/Kernel/KernelA.HH,45"$ +$LK,"MsHardGetType",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,103",BI=240$ $LK,"CLine",A="FL:::/Kernel/EdLite.HC.Z,1"$ -$LK,"C:/Doc/TimeCycles.DD.Z",A="FL:::/Kernel/KernelB.HH,284"$ -$LK,"ACD_MAX_FILLINS",A="FL:::/Kernel/KernelA.HH,1519"$ -$LK,"REGT_SEG",A="FL:::/Kernel/KernelA.HH,744"$ +$LK,"C:/Doc/TimeCycles.DD.Z",A="FL:::/Kernel/KernelB.HH,291"$ +$LK,"ACD_MAX_FILLINS",A="FL:::/Kernel/KernelA.HH,1507"$ +$LK,"REGT_SEG",A="FL:::/Kernel/KernelA.HH,732"$ $LK,"CMass",A="FL:::/Kernel/KernelA.HH,209"$ -$LK,"GetStr",A="FL:::/Kernel/SerialDev/Message.HC.Z,193",BI=245$ -$LK,"LTRED",A="FL:::/Kernel/KernelA.HH,2972"$ -$LK,"FSG_TYPE_MASK",A="FL:::/Kernel/KernelA.HH,2697"$ +$LK,"GetStr",A="FL:::/Kernel/SerialDev/Message.HC.Z,193",BI=241$ +$LK,"LTRED",A="FL:::/Kernel/KernelA.HH,2940"$ +$LK,"FSG_TYPE_MASK",A="FL:::/Kernel/KernelA.HH,2684"$ $LK,"StrIMatch",A="FL:::/Kernel/StrA.HC.Z,319"$ -$LK,"HTG_TYPE_MASK",A="FL:::/Kernel/KernelA.HH,700"$ +$LK,"HTG_TYPE_MASK",A="FL:::/Kernel/KernelA.HH,688"$ $LK,"Sign",A="FL:::/Kernel/KernelB.HH,140"$ -$LK,"ExpandBuf",A="FL:::/Kernel/Compress.HC.Z,250",BI=246$ -$LK,"ICF_ALT_TEMPLATE",A="FL:::/Kernel/KernelA.HH,1612"$ -$LK,"DOCT_PAGE_LEN",A="FL:::/Kernel/KernelA.HH,910"$ -$LK,"RLf_RAW",A="FL:::/Kernel/KernelA.HH,446"$ -$LK,"BootDVDProbe",A="FL:::/Kernel/BlkDev/DskATAId.HC.Z,1",BI=247$ -$LK,"ToggleZorNotZ",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,265",BI=248$ -$LK,"VGAP_ATTR_INDEX",A="FL:::/Kernel/KernelA.HH,3724"$ +$LK,"ExpandBuf",A="FL:::/Kernel/Compress.HC.Z,250",BI=242$ +$LK,"ICF_ALT_TEMPLATE",A="FL:::/Kernel/KernelA.HH,1600"$ +$LK,"DOCT_PAGE_LEN",A="FL:::/Kernel/KernelA.HH,898"$ +$LK,"RLf_RAW",A="FL:::/Kernel/KernelA.HH,448"$ +$LK,"BootDVDProbe",A="FL:::/Kernel/BlkDev/DskATAId.HC.Z,1",BI=243$ +$LK,"ToggleZorNotZ",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,265",BI=244$ +$LK,"VGAP_ATTR_INDEX",A="FL:::/Kernel/KernelA.HH,3677"$ $LK,"D3MulEqu",A="FL:::/Kernel/KernelB.HH,156"$ -$LK,"BDS_CONST",A="FL:::/Kernel/KernelA.HH,3269"$ +$LK,"BDS_CONST",A="FL:::/Kernel/KernelA.HH,3229"$ $LK,"MP_MAX_PROCESSORS",A="FL:::/Kernel/KernelA.HH,304"$ -$LK,"SysGlblsInit",A="FL:::/Kernel/KEnd.HC.Z,1",BI=249$ -$LK,"PutSrcLink",A="FL:::/Kernel/FunSeg.HC.Z,295",BI=250$ -$LK,"CMenu",A="FL:::/Kernel/KernelA.HH,3150"$ -$LK,"BDT_ATAPI",A="FL:::/Kernel/KernelA.HH,2636"$ -$LK,"FUF_MAP",A="FL:::/Kernel/KernelA.HH,2604"$ -$LK,"CFAT32DirEntry",A="FL:::/Kernel/KernelA.HH,2380"$ -$LK,"ACD_POS_END",A="FL:::/Kernel/KernelA.HH,1507"$ -$LK,"DOCT_INVERT",A="FL:::/Kernel/KernelA.HH,923"$ -$LK,"CMT_HASH_ENTRY",A="FL:::/Kernel/KernelA.HH,1692"$ -$LK,"RLf_VGA",A="FL:::/Kernel/KernelA.HH,440"$ -$LK,"WIf_FOCUS_TASK_IP_WHEEL",A="FL:::/Kernel/KernelA.HH,1452"$ -$LK,"LAPIC_LVT_PERF",A="FL:::/Kernel/KernelA.HH,501"$ -$LK,"SC_F1",A="FL:::/Kernel/KernelA.HH,3576"$ -$LK,"SYS_SEMAS",A="FL:::/Kernel/KStart32.HC.Z,58"$ -$LK,"SC_F2",A="FL:::/Kernel/KernelA.HH,3577"$ -$LK,"BirthWait",A="FL:::/Kernel/KTask.HC.Z,28",BI=251$ +$LK,"SysGlblsInit",A="FL:::/Kernel/KEnd.HC.Z,1",BI=245$ +$LK,"PutSrcLink",A="FL:::/Kernel/FunSeg.HC.Z,295",BI=246$ +$LK,"CMenu",A="FL:::/Kernel/KernelA.HH,3112"$ +$LK,"JobRunOne",A="FL:::/Kernel/Job.HC.Z,269",BI=247$ +$LK,"BDT_ATAPI",A="FL:::/Kernel/KernelA.HH,2623"$ +$LK,"FUF_MAP",A="FL:::/Kernel/KernelA.HH,2591"$ +$LK,"CFAT32DirEntry",A="FL:::/Kernel/KernelA.HH,2367"$ +$LK,"ACD_POS_END",A="FL:::/Kernel/KernelA.HH,1495"$ +$LK,"DOCT_INVERT",A="FL:::/Kernel/KernelA.HH,911"$ +$LK,"CMT_HASH_ENTRY",A="FL:::/Kernel/KernelA.HH,1679"$ +$LK,"RLf_VGA",A="FL:::/Kernel/KernelA.HH,441"$ +$LK,"LAPIC_LVT_PERF",A="FL:::/Kernel/KernelA.HH,504"$ +$LK,"SC_F1",A="FL:::/Kernel/KernelA.HH,3529"$ +$LK,"SYS_SEMAS",A="FL:::/Kernel/KStart32.HC.Z,72"$ +$LK,"SC_F2",A="FL:::/Kernel/KernelA.HH,3530"$ +$LK,"BirthWait",A="FL:::/Kernel/KTask.HC.Z,31",BI=248$ +$LK,"MsHardRst",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,114",BI=249$ $LK,"SYS_VAR_INIT_FLAG",A="FL::/Tmp.DD.Z,1"$ $LK,"SYS_MEM_INIT_FLAG",A="FL::/Tmp.DD.Z,1"$ -$LK,"SC_F3",A="FL:::/Kernel/KernelA.HH,3578"$ +$LK,"SC_F3",A="FL:::/Kernel/KernelA.HH,3531"$ $LK,"SignI64",A="FL:::/Kernel/KernelB.HH,104"$ -$LK,"SC_F4",A="FL:::/Kernel/KernelA.HH,3579"$ -$LK,"WSSf_SET_TO_POS",A="FL:::/Kernel/KernelA.HH,3100"$ -$LK,"RS_ATTR_SYSTEM",A="FL:::/Kernel/KernelA.HH,2528"$ -$LK,"SYS_SEMA_MUTE",A="FL:::/Kernel/KernelA.HH,611"$ +$LK,"SC_F4",A="FL:::/Kernel/KernelA.HH,3532"$ +$LK,"WSSf_SET_TO_POS",A="FL:::/Kernel/KernelA.HH,3062"$ +$LK,"RS_ATTR_SYSTEM",A="FL:::/Kernel/KernelA.HH,2515"$ $LK,"I_BPT",A="FL:::/Kernel/KernelA.HH,290"$ $LK,"_TAKE_EXCEPT",A="FL:::/Kernel/KExcept.HC.Z,20"$ -$LK,"DefineCnt",A="FL:::/Kernel/KDefine.HC.Z,74",BI=252$ -$LK,"SC_F5",A="FL:::/Kernel/KernelA.HH,3580"$ -$LK,"WIF_FOCUS_TASK_MENU",A="FL:::/Kernel/KernelA.HH,1421"$ -$LK,"RedSeaCd",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,236",BI=253$ -$LK,"SC_F6",A="FL:::/Kernel/KernelA.HH,3581"$ -$LK,"SysGrInit",A="FL:::/Kernel/KEnd.HC.Z,62",BI=254$ -$LK,"ArcCtrlDel",A="FL:::/Kernel/Compress.HC.Z,244",BI=255$ -$LK,"SysBadMAlloc",A="FL:::/Kernel/Mem/Mem512.HC.Z,6",BI=256$ -$LK,"SC_F7",A="FL:::/Kernel/KernelA.HH,3582"$ -$LK,"DOCSS_NORMAL",A="FL:::/Kernel/KernelA.HH,1129"$ -$LK,"GVF_EXTERN",A="FL:::/Kernel/KernelA.HH,869"$ -$LK,"blkdev_text_attr",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,309"$ -$LK,"SC_F8",A="FL:::/Kernel/KernelA.HH,3583"$ -$LK,"Mute",A="FL:::/Kernel/KMisc.HC.Z,216",BI=257$ +$LK,"DefineCnt",A="FL:::/Kernel/KDefine.HC.Z,74",BI=250$ +$LK,"SC_F5",A="FL:::/Kernel/KernelA.HH,3533"$ +$LK,"WIF_FOCUS_TASK_MENU",A="FL:::/Kernel/KernelA.HH,1409"$ +$LK,"RedSeaCd",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,236",BI=251$ +$LK,"JobDel",A="FL:::/Kernel/Job.HC.Z,1",BI=252$ +$LK,"SC_F6",A="FL:::/Kernel/KernelA.HH,3534"$ +$LK,"SysGrInit",A="FL:::/Kernel/KEnd.HC.Z,63",BI=253$ +$LK,"ArcCtrlDel",A="FL:::/Kernel/Compress.HC.Z,244",BI=254$ +$LK,"SysBadMAlloc",A="FL:::/Kernel/Mem/MemPag.HC.Z,6",BI=255$ +$LK,"SC_F7",A="FL:::/Kernel/KernelA.HH,3535"$ +$LK,"DOCSS_NORMAL",A="FL:::/Kernel/KernelA.HH,1117"$ +$LK,"GVF_EXTERN",A="FL:::/Kernel/KernelA.HH,857"$ +$LK,"blkdev_text_attr",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,319"$ +$LK,"SC_F8",A="FL:::/Kernel/KernelA.HH,3536"$ +$LK,"Mute",A="FL:::/Kernel/KMisc.HC.Z,232",BI=256$ $LK,"INT_FAULT",A="FL:::/Kernel/KInts.HC.Z,62"$ -$LK,"progress2_desc",A="FL:::/Kernel/KernelB.HH,213"$ -$LK,"DCSF_PALETTE_GET",A="FL:::/Kernel/KernelA.HH,3647"$ -$LK,"SC_F9",A="FL:::/Kernel/KernelA.HH,3584"$ -$LK,"DOCEF_SOLID_BORDER",A="FL:::/Kernel/KernelA.HH,1004"$ +$LK,"progress2_desc",A="FL:::/Kernel/KernelB.HH,216"$ +$LK,"DCSF_PALETTE_GET",A="FL:::/Kernel/KernelA.HH,3600"$ +$LK,"SC_F9",A="FL:::/Kernel/KernelA.HH,3537"$ +$LK,"DOCEF_SOLID_BORDER",A="FL:::/Kernel/KernelA.HH,992"$ +$LK,"KbdMsRst",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,284",BI=257$ $LK,"KbdBuildSC",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,301",BI=258$ -$LK,"CInst",A="FL:::/Kernel/KernelA.HH,1742"$ -$LK,"IOAPICID",A="FL:::/Kernel/KernelA.HH,513"$ +$LK,"CInst",A="FL:::/Kernel/KernelA.HH,1729"$ +$LK,"IOAPICID",A="FL:::/Kernel/KernelA.HH,516"$ $LK,"RFLAGf_SIGN",A="FL:::/Kernel/KernelA.HH,312"$ -$LK,"DKGRAY",A="FL:::/Kernel/KernelA.HH,2968"$ -$LK,"DOCEF_MARGIN_REL_X",A="FL:::/Kernel/KernelA.HH,997"$ +$LK,"DKGRAY",A="FL:::/Kernel/KernelA.HH,2936"$ +$LK,"DOCEF_MARGIN_REL_X",A="FL:::/Kernel/KernelA.HH,985"$ $LK,"PutDirLink",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,200",BI=259$ $LK,"EndianU32",A="FL:::/Kernel/KMisc.HC.Z,15",BI=260$ $LK,"EndianU16",A="FL:::/Kernel/KMisc.HC.Z,7",BI=261$ -$LK,"DOCEf_SOLID_BORDER",A="FL:::/Kernel/KernelA.HH,1092"$ -$LK,"DOCEF_LEFT_IN_STR",A="FL:::/Kernel/KernelA.HH,985"$ -$LK,"sys_pci_busses",A="FL:::/Kernel/KernelB.HH,241"$ -$LK,"BOOT_STK_SIZE",A="FL:::/Kernel/KernelA.HH,3882"$ -$LK,"TTS_LOCKED_CONST",A="FL:::/Kernel/KernelA.HH,3275"$ -$LK,"CCf_FUN_EXP",A="FL:::/Kernel/KernelA.HH,2149"$ -$LK,"CCF_FUN_EXP",A="FL:::/Kernel/KernelA.HH,2148"$ -$LK,"LAPIC_APIC_VERSION",A="FL:::/Kernel/KernelA.HH,481"$ -$LK,"PutS",A="FL:::/Kernel/KeyDev.HC.Z,29",BI=262$ -$LK,"DOCEf_MARGIN_REL_X",A="FL:::/Kernel/KernelA.HH,1085"$ -$LK,"DOCEf_LEFT_IN_STR",A="FL:::/Kernel/KernelA.HH,1073"$ -$LK,"CDocBin",A="FL:::/Kernel/KernelA.HH,1115"$ -$LK,"LAPIC_BASE",A="FL:::/Kernel/KernelA.HH,478"$ +$LK,"MemPagTaskFree",A="FL:::/Kernel/Mem/MemPag.HC.Z,153",BI=262$ +$LK,"DOCEf_SOLID_BORDER",A="FL:::/Kernel/KernelA.HH,1080"$ +$LK,"DOCEF_LEFT_IN_STR",A="FL:::/Kernel/KernelA.HH,973"$ +$LK,"sys_pci_busses",A="FL:::/Kernel/KernelB.HH,247"$ +$LK,"BOOT_STK_SIZE",A="FL:::/Kernel/KernelA.HH,3837"$ +$LK,"TTS_LOCKED_CONST",A="FL:::/Kernel/KernelA.HH,3235"$ +$LK,"CCf_FUN_EXP",A="FL:::/Kernel/KernelA.HH,2136"$ +$LK,"CCF_FUN_EXP",A="FL:::/Kernel/KernelA.HH,2135"$ +$LK,"LAPIC_APIC_VERSION",A="FL:::/Kernel/KernelA.HH,484"$ +$LK,"PutS",A="FL:::/Kernel/KeyDev.HC.Z,29",BI=263$ +$LK,"DOCEf_MARGIN_REL_X",A="FL:::/Kernel/KernelA.HH,1073"$ +$LK,"DOCEf_LEFT_IN_STR",A="FL:::/Kernel/KernelA.HH,1061"$ +$LK,"SEMA_VGA",A="FL:::/Kernel/KernelA.HH,608"$ +$LK,"CDocBin",A="FL:::/Kernel/KernelA.HH,1103"$ +$LK,"LAPIC_BASE",A="FL:::/Kernel/KernelA.HH,481"$ $LK,"MAX_F64",A="FL:::/Kernel/KernelA.HH,46"$ -$LK,"StrPrintJoin",A="FL:::/Kernel/StrPrint.HC.Z,208",BI=263$ -$LK,"IA32_GS_BASE",A="FL:::/Kernel/KernelA.HH,524"$ +$LK,"StrPrintJoin",A="FL:::/Kernel/StrPrint.HC.Z,208",BI=264$ +$LK,"IA32_GS_BASE",A="FL:::/Kernel/KernelA.HH,527"$ $LK,"log2_e",A="FL:::/Kernel/KernelA.HH,54"$ -$LK,"CurDir",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,281",BI=264$ +$LK,"CurDir",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,281",BI=265$ $LK,"MinU64",A="FL:::/Kernel/KernelB.HH,102"$ $LK,"_SYS_HLT",A="FL:::/Kernel/KUtils.HC.Z,468"$ -$LK,"CCF_AOT_COMPILE",A="FL:::/Kernel/KernelA.HH,2159"$ -$LK,"OPTf_KEEP_PRIVATE",A="FL:::/Kernel/KernelA.HH,1540"$ +$LK,"CCF_AOT_COMPILE",A="FL:::/Kernel/KernelA.HH,2146"$ +$LK,"OPTf_KEEP_PRIVATE",A="FL:::/Kernel/KernelA.HH,1528"$ +$LK,"SEMA_SND",A="FL:::/Kernel/KernelA.HH,599"$ $LK,"MAX_I32",A="FL:::/Kernel/KernelA.HH,33"$ $LK,"MAX_I16",A="FL:::/Kernel/KernelA.HH,29"$ -$LK,"HTF_EXPORT",A="FL:::/Kernel/KernelA.HH,704"$ -$LK,"HTf_EXPORT",A="FL:::/Kernel/KernelA.HH,674"$ -$LK,"DrvDel",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,69",BI=265$ -$LK,"ATAPIReadBlks2",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,385",BI=266$ +$LK,"HTF_EXPORT",A="FL:::/Kernel/KernelA.HH,692"$ +$LK,"HTf_EXPORT",A="FL:::/Kernel/KernelA.HH,662"$ +$LK,"DrvDel",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,69",BI=266$ +$LK,"ATAPIReadBlks2",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,388",BI=267$ $LK,"_D3_UNIT",A="FL:::/Kernel/KMathA.HC.Z,305"$ -$LK,"CCf_AOT_COMPILE",A="FL:::/Kernel/KernelA.HH,2160"$ -$LK,"POP_C_REGS",A="FL:::/Kernel/KernelA.HH,1765"$ +$LK,"CCf_AOT_COMPILE",A="FL:::/Kernel/KernelA.HH,2147"$ +$LK,"POP_C_REGS",A="FL:::/Kernel/KernelA.HH,1752"$ $LK,"_STRIMATCH",A="FL:::/Kernel/StrA.HC.Z,262"$ -$LK,"DrvChk",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,142",BI=267$ -$LK,"CSema",A="FL:::/Kernel/KernelA.HH,588"$ -$LK,"EXT_HEAPLOG_MALLOC",A="FL:::/Kernel/KernelA.HH,578"$ -$LK,"GR_WIDTH",A="FL:::/Kernel/KernelA.HH,3614"$ -$LK,"DOCT_SOFT_NEW_LINE",A="FL:::/Kernel/KernelA.HH,903"$ -$LK,"GetBaseUnit",A="FL:::/Kernel/BlkDev/DskAddDev.HC.Z,176",BI=268$ -$LK,"FixSet",A="FL:::/Kernel/EdLite.HC.Z,327",BI=269$ -$LK,"IPSet",A="FL:::/Kernel/SerialDev/InputPointer.HC.Z,43",BI=270$ -$LK,"DOCf_SEL",A="FL:::/Kernel/KernelA.HH,1324"$ -$LK,"SYS_SEMA_HEAPLOG_LOCK",A="FL:::/Kernel/KernelA.HH,601"$ +$LK,"DrvChk",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,142",BI=268$ +$LK,"CSema",A="FL:::/Kernel/KernelA.HH,590"$ +$LK,"EXT_HEAPLOG_MALLOC",A="FL:::/Kernel/KernelA.HH,581"$ +$LK,"GR_WIDTH",A="FL:::/Kernel/KernelA.HH,3567"$ +$LK,"DOCT_SOFT_NEW_LINE",A="FL:::/Kernel/KernelA.HH,891"$ +$LK,"GetBaseUnit",A="FL:::/Kernel/BlkDev/DskAddDev.HC.Z,186",BI=269$ +$LK,"FixSet",A="FL:::/Kernel/EdLite.HC.Z,327",BI=270$ +$LK,"DOCf_SEL",A="FL:::/Kernel/KernelA.HH,1312"$ $LK,"sqrt2",A="FL:::/Kernel/KernelA.HH,57"$ -$LK,"ATAR0_SEL",A="FL:::/Kernel/KernelA.HH,2282"$ +$LK,"VM_QEMU",A="FL:::/Kernel/KernelA.HH,3892"$ +$LK,"ATAR0_SEL",A="FL:::/Kernel/KernelA.HH,2269"$ $LK,"CQueVectU8",A="FL:::/Kernel/KernelA.HH,163"$ -$LK,"IntFaultHandlersNew",A="FL:::/Kernel/KInts.HC.Z,166",BI=271$ -$LK,"TASKf_INPUT_FILTER_TASK",A="FL:::/Kernel/KernelA.HH,3286"$ -$LK,"OM_CB",A="FL:::/Kernel/KernelA.HH,1869"$ +$LK,"ms_hard",A="FL:::/Kernel/KGlbls.HC.Z,28"$ +$LK,"mem_boot_base",A="FL:::/Kernel/KernelB.HH,37"$ +$LK,"TASKf_INPUT_FILTER_TASK",A="FL:::/Kernel/KernelA.HH,3246"$ +$LK,"OM_CB",A="FL:::/Kernel/KernelA.HH,1856"$ $LK,"MAX_I64",A="FL:::/Kernel/KernelA.HH,37"$ -$LK,"throw",A="FL:::/Kernel/KExcept.HC.Z,84",BI=272$ -$LK,"sys_boot_base",A="FL:::/Kernel/KernelB.HH,37"$ -$LK,"BDF_READ_ONLY_OVERRIDE",A="FL:::/Kernel/KernelA.HH,2642"$ -$LK,"TK_AND_AND",A="FL:::/Kernel/KernelA.HH,2086"$ -$LK,"REG_NONE",A="FL:::/Kernel/KernelA.HH,1785"$ -$LK,"OC_LOCK_PREFIX",A="FL:::/Kernel/KernelA.HH,1757"$ -$LK,"WIF_SELF_IP_WHEEL",A="FL:::/Kernel/KernelA.HH,1414"$ -$LK,"Ff_INTERRUPT",A="FL:::/Kernel/KernelA.HH,848"$ -$LK,"CFunSegCache",A="FL:::/Kernel/KernelA.HH,3847"$ -$LK,"OM_CD",A="FL:::/Kernel/KernelA.HH,1871"$ -$LK,"AAT_ADD_U8",A="FL:::/Kernel/KernelA.HH,1967"$ -$LK,"REGT_XMM",A="FL:::/Kernel/KernelA.HH,747"$ -$LK,"DOCSS_CPP_Z_COMMENT",A="FL:::/Kernel/KernelA.HH,1133"$ -$LK,"DOCT_SHIFTED_X",A="FL:::/Kernel/KernelA.HH,925"$ -$LK,"PutExcept",A="FL:::/Kernel/KExcept.HC.Z,45",BI=273$ +$LK,"throw",A="FL:::/Kernel/KExcept.HC.Z,84",BI=271$ +$LK,"BDF_READ_ONLY_OVERRIDE",A="FL:::/Kernel/KernelA.HH,2629"$ +$LK,"TK_AND_AND",A="FL:::/Kernel/KernelA.HH,2073"$ +$LK,"REG_NONE",A="FL:::/Kernel/KernelA.HH,1772"$ +$LK,"OC_LOCK_PREFIX",A="FL:::/Kernel/KernelA.HH,1744"$ +$LK,"Ff_INTERRUPT",A="FL:::/Kernel/KernelA.HH,836"$ +$LK,"CFunSegCache",A="FL:::/Kernel/KernelA.HH,3801"$ +$LK,"OM_CD",A="FL:::/Kernel/KernelA.HH,1858"$ +$LK,"AAT_ADD_U8",A="FL:::/Kernel/KernelA.HH,1954"$ +$LK,"REGT_XMM",A="FL:::/Kernel/KernelA.HH,735"$ +$LK,"DOCSS_CPP_Z_COMMENT",A="FL:::/Kernel/KernelA.HH,1121"$ +$LK,"DOCT_SHIFTED_X",A="FL:::/Kernel/KernelA.HH,913"$ +$LK,"RLF_16MEG_SYS_CODE_BP",A="FL:::/Kernel/KernelA.HH,464"$ +$LK,"PutExcept",A="FL:::/Kernel/KExcept.HC.Z,45",BI=272$ $LK,"TestExcept",A="FL:::/Kernel/KExcept.HC.Z,41"$ -$LK,"CColorROPU32",A="FL:::/Kernel/KernelA.HH,2985"$ -$LK,"CColorROPU16",A="FL:::/Kernel/KernelA.HH,2981"$ -$LK,"DOCT_SHIFTED_Y",A="FL:::/Kernel/KernelA.HH,926"$ -$LK,"HTT_FILE",A="FL:::/Kernel/KernelA.HH,696"$ -$LK,"HTT_DEFINE_STR",A="FL:::/Kernel/KernelA.HH,685"$ -$LK,"HTt_FILE",A="FL:::/Kernel/KernelA.HH,666"$ -$LK,"Push",A="FL:::/Kernel/KernelB.HH,250"$ -$LK,"SVCf_FREE_ON_COMPLETE",A="FL:::/Kernel/KernelA.HH,3188"$ -$LK,"HTt_DEFINE_STR",A="FL:::/Kernel/KernelA.HH,655"$ +$LK,"char_bmp_printable",A="FL:::/Kernel/StrA.HC.Z,376"$ +$LK,"CColorROPU32",A="FL:::/Kernel/KernelA.HH,2953"$ +$LK,"CColorROPU16",A="FL:::/Kernel/KernelA.HH,2949"$ +$LK,"DOCT_SHIFTED_Y",A="FL:::/Kernel/KernelA.HH,914"$ +$LK,"HTT_FILE",A="FL:::/Kernel/KernelA.HH,684"$ +$LK,"HTT_DEFINE_STR",A="FL:::/Kernel/KernelA.HH,673"$ +$LK,"HTt_FILE",A="FL:::/Kernel/KernelA.HH,654"$ +$LK,"Push",A="FL:::/Kernel/KernelB.HH,256"$ +$LK,"HTt_DEFINE_STR",A="FL:::/Kernel/KernelA.HH,643"$ $LK,"STK_REP_LEN",A="FL:::/Kernel/KDbg.HC.Z,102"$ $LK,"I_NMI",A="FL:::/Kernel/KernelA.HH,289"$ -$LK,"Date2ISO1",A="FL:::/Kernel/BlkDev/FileSysISO.HC.Z,1",BI=274$ +$LK,"Date2ISO1",A="FL:::/Kernel/BlkDev/FileSysISO.HC.Z,1",BI=273$ $LK,"ModU64",A="FL:::/Kernel/KernelB.HH,103"$ -$LK,"SVCf_EXIT_ON_COMPLETE",A="FL:::/Kernel/KernelA.HH,3182"$ -$LK,"DOCG_DBL_BUF_FLAGS",A="FL:::/Kernel/KernelA.HH,959"$ -$LK,"JobResScan",A="FL:::/Kernel/SrvCmd.HC.Z,163",BI=275$ -$LK,"WIf_FOCUS_TASK_MENU",A="FL:::/Kernel/KernelA.HH,1446"$ -$LK,"WIf_SELF_IP_WHEEL",A="FL:::/Kernel/KernelA.HH,1440"$ -$LK,"CTask",A="FL:::/Kernel/KernelA.HH,3322"$ +$LK,"DOCG_DBL_BUF_FLAGS",A="FL:::/Kernel/KernelA.HH,947"$ +$LK,"JobResScan",A="FL:::/Kernel/Job.HC.Z,164",BI=274$ +$LK,"WIf_FOCUS_TASK_MENU",A="FL:::/Kernel/KernelA.HH,1434"$ +$LK,"CTask",A="FL:::/Kernel/KernelA.HH,3283"$ $LK,"C:/Doc/Bit.DD.Z",A="FL:::/Kernel/KernelB.HH,9"$ -$LK,"OC_JMP_REL8",A="FL:::/Kernel/KernelA.HH,1761"$ +$LK,"C:/Doc/Pags.DD.Z",A="FL:::/Kernel/KernelA.HH,2825"$ +$LK,"OC_JMP_REL8",A="FL:::/Kernel/KernelA.HH,1748"$ $LK,"_HASH_SINGLE_TABLE_FIND",A="FL:::/Kernel/KHashA.HC.Z,143"$ $LK,"_D3_ZERO",A="FL:::/Kernel/KMathA.HC.Z,201"$ -$LK,"REGG_STK_TMP",A="FL:::/Kernel/KernelA.HH,1791"$ -$LK,"Str2F64",A="FL:::/Kernel/StrScan.HC.Z,55",BI=276$ +$LK,"REGG_STK_TMP",A="FL:::/Kernel/KernelA.HH,1778"$ +$LK,"Str2F64",A="FL:::/Kernel/StrScan.HC.Z,55",BI=275$ $LK,"_YIELD",A="FL:::/Kernel/Sched.HC.Z,157"$ -$LK,"OM_IB",A="FL:::/Kernel/KernelA.HH,1873"$ -$LK,"progress3_desc",A="FL:::/Kernel/KernelB.HH,218"$ -$LK,"DCF_SYMMETRY",A="FL:::/Kernel/KernelA.HH,3631"$ -$LK,"OM_ID",A="FL:::/Kernel/KernelA.HH,1875"$ -$LK,"OM_CP",A="FL:::/Kernel/KernelA.HH,1872"$ -$LK,"WIF_FOCUS_TASK_IP_L",A="FL:::/Kernel/KernelA.HH,1423"$ +$LK,"OM_IB",A="FL:::/Kernel/KernelA.HH,1860"$ +$LK,"progress3_desc",A="FL:::/Kernel/KernelB.HH,222"$ +$LK,"DCF_SYMMETRY",A="FL:::/Kernel/KernelA.HH,3584"$ +$LK,"OM_ID",A="FL:::/Kernel/KernelA.HH,1862"$ +$LK,"OM_CP",A="FL:::/Kernel/KernelA.HH,1859"$ $LK,"_ROUND",A="FL:::/Kernel/KMathA.HC.Z,380"$ +$LK,"OS_OTHER",A="FL:::/Kernel/KernelA.HH,3884"$ $LK,"RFLAGf_TRAP",A="FL:::/Kernel/KernelA.HH,313"$ $LK,"SYS_HASH_BUCKET_FIND",A="FL:::/Kernel/KHashA.HC.Z,109"$ -$LK,"BOOT_SRC_DVD",A="FL:::/Kernel/KernelA.HH,3888"$ -$LK,"FUF_RECURSE",A="FL:::/Kernel/KernelA.HH,2596"$ -$LK,"FUf_RECURSE",A="FL:::/Kernel/KernelA.HH,2569"$ +$LK,"BOOT_SRC_DVD",A="FL:::/Kernel/KernelA.HH,3843"$ +$LK,"FUF_RECURSE",A="FL:::/Kernel/KernelA.HH,2583"$ +$LK,"FUf_RECURSE",A="FL:::/Kernel/KernelA.HH,2556"$ $LK,"MemCmp",A="FL:::/Kernel/KernelB.HH,166"$ -$LK,"SVCf_DONE",A="FL:::/Kernel/KernelA.HH,3186"$ -$LK,"SC_PAGE_UP",A="FL:::/Kernel/KernelA.HH,3570"$ -$LK,"User",A="FL:::/Kernel/KTask.HC.Z,411",BI=277$ -$LK,"WIF_FOCUS_TASK_IP_R",A="FL:::/Kernel/KernelA.HH,1425"$ -$LK,"DOCEf_RIGHT_EXP",A="FL:::/Kernel/KernelA.HH,1061"$ -$LK,"DOCEF_RIGHT_EXP",A="FL:::/Kernel/KernelA.HH,973"$ -$LK,"DirEntryDel",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,17",BI=278$ -$LK,"CLexFile",A="FL:::/Kernel/KernelA.HH,2035"$ -$LK,"OM_CW",A="FL:::/Kernel/KernelA.HH,1870"$ -$LK,"DOCF_DONT_SWAP_OUT",A="FL:::/Kernel/KernelA.HH,1279"$ -$LK,"IA32_LAPIC_BASE",A="FL:::/Kernel/KernelA.HH,521"$ -$LK,"ATACmd",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,59",BI=279$ -$LK,"BusyWait",A="FL:::/Kernel/KMisc.HC.Z,136",BI=280$ -$LK,"FILEMASK_DD",A="FL:::/Kernel/KernelA.HH,2291"$ -$LK,"DOCEf_SHIFTED_X",A="FL:::/Kernel/KernelA.HH,1066"$ -$LK,"DOCEG_DONT_EDIT",A="FL:::/Kernel/KernelA.HH,1036"$ -$LK,"DOCEF_SHIFTED_X",A="FL:::/Kernel/KernelA.HH,978"$ -$LK,"DOCEf_SHIFTED_Y",A="FL:::/Kernel/KernelA.HH,1067"$ -$LK,"DOCEF_SHIFTED_Y",A="FL:::/Kernel/KernelA.HH,979"$ -$LK,"Str2I64",A="FL:::/Kernel/StrScan.HC.Z,1",BI=281$ +$LK,"ONA_REST",A="FL:::/Kernel/KernelA.HH,3784"$ +$LK,"SC_PAGE_UP",A="FL:::/Kernel/KernelA.HH,3523"$ +$LK,"User",A="FL:::/Kernel/KTask.HC.Z,424",BI=276$ +$LK,"MSG_MS_L_D_DOWN",A="FL:::/Kernel/KernelA.HH,3194"$ +$LK,"DOCEf_RIGHT_EXP",A="FL:::/Kernel/KernelA.HH,1049"$ +$LK,"DOCEF_RIGHT_EXP",A="FL:::/Kernel/KernelA.HH,961"$ +$LK,"DirEntryDel",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,17",BI=277$ +$LK,"CLexFile",A="FL:::/Kernel/KernelA.HH,2022"$ +$LK,"OM_CW",A="FL:::/Kernel/KernelA.HH,1857"$ +$LK,"DOCF_DONT_SWAP_OUT",A="FL:::/Kernel/KernelA.HH,1267"$ +$LK,"IA32_LAPIC_BASE",A="FL:::/Kernel/KernelA.HH,524"$ +$LK,"ATACmd",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,59",BI=278$ +$LK,"FILEMASK_DD",A="FL:::/Kernel/KernelA.HH,2278"$ +$LK,"DOCEf_SHIFTED_X",A="FL:::/Kernel/KernelA.HH,1054"$ +$LK,"DOCEG_DONT_EDIT",A="FL:::/Kernel/KernelA.HH,1024"$ +$LK,"DOCEF_SHIFTED_X",A="FL:::/Kernel/KernelA.HH,966"$ +$LK,"SEMA_HEAPLOG_ACTIVE",A="FL:::/Kernel/KernelA.HH,600"$ +$LK,"DOCEf_SHIFTED_Y",A="FL:::/Kernel/KernelA.HH,1055"$ +$LK,"DOCEF_SHIFTED_Y",A="FL:::/Kernel/KernelA.HH,967"$ +$LK,"Str2I64",A="FL:::/Kernel/StrScan.HC.Z,1",BI=279$ $LK,"Sqrt",A="FL:::/Kernel/KernelB.HH,109"$ -$LK,"DrvMap",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,242",BI=282$ -$LK,"NowDateTimeStruct",A="FL:::/Kernel/KDate.HC.Z,133",BI=283$ -$LK,"YorN",A="FL:::/Kernel/StrB.HC.Z,87",BI=284$ -$LK,"MT_CD",A="FL:::/Kernel/KernelA.HH,2543"$ +$LK,"DrvMap",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,252",BI=280$ +$LK,"NowDateTimeStruct",A="FL:::/Kernel/KDate.HC.Z,133",BI=281$ +$LK,"YorN",A="FL:::/Kernel/StrB.HC.Z,87",BI=282$ +$LK,"MT_CD",A="FL:::/Kernel/KernelA.HH,2530"$ $LK,"RFLAGf_VINT",A="FL:::/Kernel/KernelA.HH,323"$ -$LK,"DCF_ON_TOP",A="FL:::/Kernel/KernelA.HH,3643"$ -$LK,"ACD_DEF",A="FL:::/Kernel/KernelA.HH,1502"$ -$LK,"DOCEF_BIN_PTR_LINK",A="FL:::/Kernel/KernelA.HH,976"$ -$LK,"SYS_CPU_STRUCTS",A="FL:::/Kernel/KStart32.HC.Z,50"$ -$LK,"SVCT_MSG",A="FL:::/Kernel/KernelA.HH,3192"$ -$LK,"DOCf_DONT_SWAP_OUT",A="FL:::/Kernel/KernelA.HH,1315"$ -$LK,"CDocEntryBase",A="FL:::/Kernel/KernelA.HH,1160"$ -$LK,"MLF_STR_DFT_AVAILABLE",A="FL:::/Kernel/KernelA.HH,777"$ -$LK,"ArcCtrlNew",A="FL:::/Kernel/Compress.HC.Z,221",BI=285$ -$LK,"DCF_DONT_DRAW",A="FL:::/Kernel/KernelA.HH,3638"$ -$LK,"SYS_SEMA_HEAPLOG_ACTIVE",A="FL:::/Kernel/KernelA.HH,600"$ -$LK,"DOC_SCROLL_SPEED",A="FL:::/Kernel/KernelA.HH,1127"$ -$LK,"ATTRf_SEL",A="FL:::/Kernel/KernelA.HH,897"$ -$LK,"DOCEf_BIN_PTR_LINK",A="FL:::/Kernel/KernelA.HH,1064"$ +$LK,"DCF_ON_TOP",A="FL:::/Kernel/KernelA.HH,3596"$ +$LK,"ACD_DEF",A="FL:::/Kernel/KernelA.HH,1490"$ +$LK,"DOCEF_BIN_PTR_LINK",A="FL:::/Kernel/KernelA.HH,964"$ +$LK,"SYS_CPU_STRUCTS",A="FL:::/Kernel/KStart32.HC.Z,64"$ +$LK,"DOCf_DONT_SWAP_OUT",A="FL:::/Kernel/KernelA.HH,1303"$ +$LK,"CDocEntryBase",A="FL:::/Kernel/KernelA.HH,1148"$ +$LK,"MLF_STR_DFT_AVAILABLE",A="FL:::/Kernel/KernelA.HH,765"$ +$LK,"ArcCtrlNew",A="FL:::/Kernel/Compress.HC.Z,221",BI=283$ +$LK,"DCF_DONT_DRAW",A="FL:::/Kernel/KernelA.HH,3591"$ +$LK,"DOC_SCROLL_SPEED",A="FL:::/Kernel/KernelA.HH,1115"$ +$LK,"ATTRf_SEL",A="FL:::/Kernel/KernelA.HH,885"$ +$LK,"DOCEf_BIN_PTR_LINK",A="FL:::/Kernel/KernelA.HH,1052"$ $LK,"SSF_NO_TENSION",A="FL:::/Kernel/KernelA.HH,226"$ $LK,"I32",A="FL:::/Kernel/KernelA.HH,87"$ $LK,"I16",A="FL:::/Kernel/KernelA.HH,73"$ $LK,"MemCpy",A="FL:::/Kernel/KernelB.HH,168"$ -$LK,"CT_NONE",A="FL:::/Kernel/KernelA.HH,3744"$ -$LK,"OM_IW",A="FL:::/Kernel/KernelA.HH,1874"$ -$LK,"VGAP_DATA",A="FL:::/Kernel/KernelA.HH,3729"$ -$LK,"OM_NO",A="FL:::/Kernel/KernelA.HH,1868"$ -$LK,"IET_DATA_HEAP",A="FL:::/Kernel/KernelA.HH,414"$ -$LK,"GVF_DATA_HEAP",A="FL:::/Kernel/KernelA.HH,870"$ -$LK,"DefineSub",A="FL:::/Kernel/KDefine.HC.Z,60",BI=286$ -$LK,"WHITE",A="FL:::/Kernel/KernelA.HH,2975"$ -$LK,"ATA_READ_MULTI_EXT",A="FL:::/Kernel/KernelA.HH,2265"$ -$LK,"DOCEF_SCROLLING_X",A="FL:::/Kernel/KernelA.HH,980"$ -$LK,"DOCEf_CHECKED_COLLAPSED",A="FL:::/Kernel/KernelA.HH,1094"$ -$LK,"ISO1T_SUPPLEMENTARY_DESC",A="FL:::/Kernel/KernelA.HH,2480"$ -$LK,"DOCEf_SCROLLING_X",A="FL:::/Kernel/KernelA.HH,1068"$ -$LK,"MPInt",A="FL:::/Kernel/MultiProc.HC.Z,132",BI=287$ -$LK,"BOOT_SRC_RAM",A="FL:::/Kernel/KernelA.HH,3886"$ -$LK,"TK_AND_EQU",A="FL:::/Kernel/KernelA.HH,2093"$ +$LK,"CT_NONE",A="FL:::/Kernel/KernelA.HH,3697"$ +$LK,"OM_IW",A="FL:::/Kernel/KernelA.HH,1861"$ +$LK,"VGAP_DATA",A="FL:::/Kernel/KernelA.HH,3682"$ +$LK,"OM_NO",A="FL:::/Kernel/KernelA.HH,1855"$ +$LK,"IET_DATA_HEAP",A="FL:::/Kernel/KernelA.HH,413"$ +$LK,"GVF_DATA_HEAP",A="FL:::/Kernel/KernelA.HH,858"$ +$LK,"DefineSub",A="FL:::/Kernel/KDefine.HC.Z,60",BI=284$ +$LK,"WHITE",A="FL:::/Kernel/KernelA.HH,2943"$ +$LK,"ATA_READ_MULTI_EXT",A="FL:::/Kernel/KernelA.HH,2252"$ +$LK,"DOCEF_SCROLLING_X",A="FL:::/Kernel/KernelA.HH,968"$ +$LK,"DOCEf_CHECKED_COLLAPSED",A="FL:::/Kernel/KernelA.HH,1082"$ +$LK,"ISO1T_SUPPLEMENTARY_DESC",A="FL:::/Kernel/KernelA.HH,2467"$ +$LK,"DOCEf_SCROLLING_X",A="FL:::/Kernel/KernelA.HH,1056"$ +$LK,"MPInt",A="FL:::/Kernel/MultiProc.HC.Z,132",BI=285$ +$LK,"BOOT_SRC_RAM",A="FL:::/Kernel/KernelA.HH,3841"$ +$LK,"TK_AND_EQU",A="FL:::/Kernel/KernelA.HH,2080"$ $LK,"I64",A="FL:::/Kernel/KernelA.HH,105"$ $LK,"MAX_U32",A="FL:::/Kernel/KernelA.HH,35"$ $LK,"MAX_U16",A="FL:::/Kernel/KernelA.HH,31"$ -$LK,"PopUpPrint",A="FL:::/Kernel/SrvCmd.HC.Z,399",BI=288$ -$LK,"IntEntryGet",A="FL:::/Kernel/KInts.HC.Z,97",BI=289$ -$LK,"FILEMASK_GR",A="FL:::/Kernel/KernelA.HH,2293"$ +$LK,"PopUpPrint",A="FL:::/Kernel/Job.HC.Z,397",BI=286$ +$LK,"IntEntryGet",A="FL:::/Kernel/KInts.HC.Z,97",BI=287$ +$LK,"ms_grid",A="FL:::/Kernel/KGlbls.HC.Z,24"$ +$LK,"FILEMASK_GR",A="FL:::/Kernel/KernelA.HH,2280"$ $LK,"CD2",A="FL:::/Kernel/KernelA.HH,150"$ -$LK,"KeyDevInit",A="FL:::/Kernel/KeyDev.HC.Z,201",BI=290$ -$LK,"CCF_HAS_RETURN",A="FL:::/Kernel/KernelA.HH,2144"$ -$LK,"CAsmArg",A="FL:::/Kernel/KernelA.HH,1844"$ +$LK,"KeyDevInit",A="FL:::/Kernel/KeyDev.HC.Z,201",BI=288$ +$LK,"CCF_HAS_RETURN",A="FL:::/Kernel/KernelA.HH,2131"$ +$LK,"CAsmArg",A="FL:::/Kernel/KernelA.HH,1831"$ $LK,"CD3",A="FL:::/Kernel/KernelA.HH,156"$ $LK,"SYS_BOOT_BLK",A="FL:::/Kernel/KStart16.HC.Z,24"$ -$LK,"progress4_desc",A="FL:::/Kernel/KernelB.HH,223"$ +$LK,"progress4_desc",A="FL:::/Kernel/KernelB.HH,228"$ $LK,"RFLAGf_ZERO",A="FL:::/Kernel/KernelA.HH,311"$ -$LK,"DrvFATBlkClean",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,99",BI=291$ -$LK,"CCF_CLASS_IP",A="FL:::/Kernel/KernelA.HH,2164"$ -$LK,"WIf_FOCUS_TASK_IP_L",A="FL:::/Kernel/KernelA.HH,1448"$ -$LK,"PCIReadU8",A="FL:::/Kernel/PCIBIOS.HC.Z,163",BI=292$ -$LK,"SYS_SEMA_SYS_DATE",A="FL:::/Kernel/KernelA.HH,597"$ -$LK,"EXT_WIN_FOCUS",A="FL:::/Kernel/KernelA.HH,577"$ -$LK,"ClustersAlloc",A="FL:::/Kernel/BlkDev/DskCluster.HC.Z,134",BI=293$ -$LK,"WIF_SELF_IP_L",A="FL:::/Kernel/KernelA.HH,1410"$ +$LK,"DrvFATBlkClean",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,99",BI=289$ +$LK,"PCIReadU8",A="FL:::/Kernel/PCIBIOS.HC.Z,163",BI=290$ +$LK,"EXT_WIN_FOCUS",A="FL:::/Kernel/KernelA.HH,580"$ +$LK,"ClustersAlloc",A="FL:::/Kernel/BlkDev/DskCluster.HC.Z,134",BI=291$ $LK,"MAX_U64",A="FL:::/Kernel/KernelA.HH,39"$ -$LK,"WIf_SELF_IP_L",A="FL:::/Kernel/KernelA.HH,1438"$ -$LK,"CHashAC",A="FL:::/Kernel/KernelA.HH,754"$ -$LK,"DOCf_NO_CURSOR",A="FL:::/Kernel/KernelA.HH,1298"$ -$LK,"DOCF_NO_CURSOR",A="FL:::/Kernel/KernelA.HH,1262"$ -$LK,"PrintWarn",A="FL:::/Kernel/StrPrint.HC.Z,914",BI=294$ -$LK,"LoadOneImport",A="FL:::/Kernel/KLoad.HC.Z,1",BI=295$ -$LK,"FOpen",A="FL:::/Kernel/BlkDev/DskCFile.HC.Z,9",BI=296$ -$LK,"CCF_LAST_WAS_DOT",A="FL:::/Kernel/KernelA.HH,2158"$ -$LK,"CMF_DEFINED",A="FL:::/Kernel/KernelA.HH,1695"$ -$LK,"WIf_FOCUS_TASK_IP_R",A="FL:::/Kernel/KernelA.HH,1450"$ -$LK,"HTG_ALL",A="FL:::/Kernel/KernelA.HH,715"$ +$LK,"CHashAC",A="FL:::/Kernel/KernelA.HH,742"$ +$LK,"ms_last",A="FL:::/Kernel/KGlbls.HC.Z,25"$ +$LK,"DOCf_NO_CURSOR",A="FL:::/Kernel/KernelA.HH,1286"$ +$LK,"DOCF_NO_CURSOR",A="FL:::/Kernel/KernelA.HH,1250"$ +$LK,"PrintWarn",A="FL:::/Kernel/StrPrint.HC.Z,914",BI=292$ +$LK,"LoadOneImport",A="FL:::/Kernel/KLoad.HC.Z,1",BI=293$ +$LK,"SEMA_FORCE_WINMGR",A="FL:::/Kernel/KernelA.HH,612"$ +$LK,"FOpen",A="FL:::/Kernel/BlkDev/DskCFile.HC.Z,9",BI=294$ +$LK,"CCF_LAST_WAS_DOT",A="FL:::/Kernel/KernelA.HH,2145"$ +$LK,"CMF_DEFINED",A="FL:::/Kernel/KernelA.HH,1682"$ +$LK,"HTG_ALL",A="FL:::/Kernel/KernelA.HH,703"$ $LK,"sys_var_init_val",A="FL:::/Kernel/KernelB.HH,186"$ -$LK,"FUF_REPLACE",A="FL:::/Kernel/KernelA.HH,2601"$ -$LK,"FUf_REPLACE",A="FL:::/Kernel/KernelA.HH,2574"$ -$LK,"DrvRep",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,328",BI=297$ -$LK,"BlkDevUnlock",A="FL:::/Kernel/BlkDev/DskBlkDev.HC.Z,15",BI=298$ -$LK,"CMemUsed",A="FL:::/Kernel/KernelA.HH,2825"$ -$LK,"WIF_SELF_IP_R",A="FL:::/Kernel/KernelA.HH,1412"$ -$LK,"IntMPCrash",A="FL:::/Kernel/MultiProc.HC.Z,380",BI=299$ -$LK,"JobQue",A="FL:::/Kernel/MultiProc.HC.Z,213",BI=300$ -$LK,"TSSBusy",A="FL:::/Kernel/MultiProc.HC.Z,71",BI=301$ -$LK,"DrvTypeSet",A="FL:::/Kernel/BlkDev/DskFmt.HC.Z,1",BI=302$ -$LK,"FUF_JUST_AOT",A="FL:::/Kernel/KernelA.HH,2612"$ -$LK,"FUf_JUST_AOT",A="FL:::/Kernel/KernelA.HH,2585"$ -$LK,"WIf_SELF_IP_R",A="FL:::/Kernel/KernelA.HH,1439"$ -$LK,"DirNameAbs",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,108",BI=303$ -$LK,"DOF_DONT_HOME",A="FL:::/Kernel/KernelA.HH,1218"$ -$LK,"CH_ESC",A="FL:::/Kernel/KernelA.HH,3513"$ -$LK,"DOCEf_DONT_DRAW",A="FL:::/Kernel/KernelA.HH,1110"$ -$LK,"DOCEF_DONT_DRAW",A="FL:::/Kernel/KernelA.HH,1024"$ -$LK,"DrvFATBlkAlloc",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,89",BI=304$ -$LK,"WildMatch",A="FL:::/Kernel/StrA.HC.Z,656",BI=305$ -$LK,"CDC",A="FL:::/Kernel/KernelA.HH,3658"$ -$LK,"SC_CURSOR_LEFT",A="FL:::/Kernel/KernelA.HH,3568"$ -$LK,"IsMute",A="FL:::/Kernel/KMisc.HC.Z,230",BI=306$ -$LK,"DOCT_CLEAR",A="FL:::/Kernel/KernelA.HH,909"$ -$LK,"DVDImageWrite",A="FL:::/Kernel/BlkDev/DskCDDVD.HC.Z,147",BI=307$ -$LK,"MouseRst",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,37",BI=308$ -$LK,"HashTypeNum",A="FL:::/Kernel/KHashB.HC.Z,1",BI=309$ -$LK,"CPUf_DYING_TASK_QUE",A="FL:::/Kernel/KernelA.HH,3441"$ -$LK,"BDf_READ_ONLY",A="FL:::/Kernel/KernelA.HH,2651"$ -$LK,"BDF_READ_ONLY",A="FL:::/Kernel/KernelA.HH,2641"$ -$LK,"DCF_JUST_MIRROR",A="FL:::/Kernel/KernelA.HH,3635"$ -$LK,"FSt_UNKNOWN",A="FL:::/Kernel/KernelA.HH,2695"$ -$LK,"WIG_USER_TASK_DFT",A="FL:::/Kernel/KernelA.HH,1434"$ -$LK,"sys_cache_line_width",A="FL:::/Kernel/KernelB.HH,269"$ -$LK,"XchgI64",A="FL:::/Kernel/KernelB.HH,264"$ -$LK,"SC_CURSOR_DOWN",A="FL:::/Kernel/KernelA.HH,3567"$ -$LK,"DOF_DONT_WINMGR_SYNC",A="FL:::/Kernel/KernelA.HH,1221"$ +$LK,"FUF_REPLACE",A="FL:::/Kernel/KernelA.HH,2588"$ +$LK,"FUf_REPLACE",A="FL:::/Kernel/KernelA.HH,2561"$ +$LK,"DrvRep",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,332",BI=295$ +$LK,"BlkDevUnlock",A="FL:::/Kernel/BlkDev/DskBlkDev.HC.Z,15",BI=296$ +$LK,"CMemUsed",A="FL:::/Kernel/KernelA.HH,2813"$ +$LK,"IntMPCrash",A="FL:::/Kernel/MultiProc.HC.Z,379",BI=297$ +$LK,"JobQue",A="FL:::/Kernel/MultiProc.HC.Z,213",BI=298$ +$LK,"TSSBusy",A="FL:::/Kernel/MultiProc.HC.Z,71",BI=299$ +$LK,"DrvTypeSet",A="FL:::/Kernel/BlkDev/DskFmt.HC.Z,1",BI=300$ +$LK,"FUF_JUST_AOT",A="FL:::/Kernel/KernelA.HH,2599"$ +$LK,"FUf_JUST_AOT",A="FL:::/Kernel/KernelA.HH,2572"$ +$LK,"DirNameAbs",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,108",BI=301$ +$LK,"DOF_DONT_HOME",A="FL:::/Kernel/KernelA.HH,1206"$ +$LK,"CH_ESC",A="FL:::/Kernel/KernelA.HH,3466"$ +$LK,"DOCEf_DONT_DRAW",A="FL:::/Kernel/KernelA.HH,1098"$ +$LK,"DOCEF_DONT_DRAW",A="FL:::/Kernel/KernelA.HH,1012"$ +$LK,"WIF_FOCUS_TASK_MS_L",A="FL:::/Kernel/KernelA.HH,1411"$ +$LK,"DrvFATBlkAlloc",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,89",BI=302$ +$LK,"WildMatch",A="FL:::/Kernel/StrA.HC.Z,651",BI=303$ +$LK,"MEM_EXTRA_HASH2_PAGS",A="FL:::/Kernel/KernelA.HH,2852"$ +$LK,"CDC",A="FL:::/Kernel/KernelA.HH,3611"$ +$LK,"SC_CURSOR_LEFT",A="FL:::/Kernel/KernelA.HH,3521"$ +$LK,"IsMute",A="FL:::/Kernel/KMisc.HC.Z,246",BI=304$ +$LK,"DOCT_CLEAR",A="FL:::/Kernel/KernelA.HH,897"$ +$LK,"DVDImageWrite",A="FL:::/Kernel/BlkDev/DskCDDVD.HC.Z,147",BI=305$ +$LK,"HashTypeNum",A="FL:::/Kernel/KHashB.HC.Z,1",BI=306$ +$LK,"CPUf_DYING_TASK_QUE",A="FL:::/Kernel/KernelA.HH,3401"$ +$LK,"BDf_READ_ONLY",A="FL:::/Kernel/KernelA.HH,2638"$ +$LK,"BDF_READ_ONLY",A="FL:::/Kernel/KernelA.HH,2628"$ +$LK,"DCF_JUST_MIRROR",A="FL:::/Kernel/KernelA.HH,3588"$ +$LK,"FSt_UNKNOWN",A="FL:::/Kernel/KernelA.HH,2682"$ +$LK,"WIG_USER_TASK_DFT",A="FL:::/Kernel/KernelA.HH,1422"$ +$LK,"sys_cache_line_width",A="FL:::/Kernel/KernelB.HH,279"$ +$LK,"XchgI64",A="FL:::/Kernel/KernelB.HH,270"$ +$LK,"SC_CURSOR_DOWN",A="FL:::/Kernel/KernelA.HH,3520"$ +$LK,"WIF_FOCUS_TASK_MS_R",A="FL:::/Kernel/KernelA.HH,1413"$ +$LK,"DOF_DONT_WINMGR_SYNC",A="FL:::/Kernel/KernelA.HH,1209"$ $LK,"I_SINGLE_STEP",A="FL:::/Kernel/KernelA.HH,288"$ -$LK,"KbdMouseRst",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,207",BI=310$ -$LK,"ATA_WRITE_MULTI",A="FL:::/Kernel/KernelA.HH,2266"$ -$LK,"DOC_COLOR_KEYWORD",A="FL:::/Kernel/KernelA.HH,1143"$ -$LK,"XTalkStr",A="FL:::/Kernel/SrvCmd.HC.Z,491",BI=311$ -$LK,"CCF_IN_QUOTES",A="FL:::/Kernel/KernelA.HH,2141"$ +$LK,"ATA_WRITE_MULTI",A="FL:::/Kernel/KernelA.HH,2253"$ +$LK,"DOC_COLOR_KEYWORD",A="FL:::/Kernel/KernelA.HH,1131"$ +$LK,"XTalkStr",A="FL:::/Kernel/Job.HC.Z,489",BI=307$ +$LK,"CCF_IN_QUOTES",A="FL:::/Kernel/KernelA.HH,2128"$ $LK,"CFifoU8",A="FL:::/Kernel/KernelA.HH,171"$ -$LK,"ATAReadNativeMax",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,187",BI=312$ -$LK,"BOOT_SRC_ROM",A="FL:::/Kernel/KernelA.HH,3885"$ -$LK,"RLF_AUTO_COMPLETE",A="FL:::/Kernel/KernelA.HH,474"$ -$LK,"SYS_KERNEL_END",A="FL:::/Kernel/KEnd.HC.Z,216"$ +$LK,"ATAReadNativeMax",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,194",BI=308$ +$LK,"MsHardSetPre",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,196",BI=309$ +$LK,"BOOT_SRC_ROM",A="FL:::/Kernel/KernelA.HH,3840"$ +$LK,"MEM_FREE_PAG_HASH_SIZE",A="FL:::/Kernel/KernelA.HH,2849"$ +$LK,"RLF_AUTO_COMPLETE",A="FL:::/Kernel/KernelA.HH,477"$ +$LK,"SYS_KERNEL_END",A="FL:::/Kernel/KEnd.HC.Z,215"$ $LK,"TakeExcept",A="FL:::/Kernel/KExcept.HC.Z,42"$ $LK,"_MALLOC",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,5"$ -$LK,"CHashDefineStr",A="FL:::/Kernel/KernelA.HH,825"$ +$LK,"CHashDefineStr",A="FL:::/Kernel/KernelA.HH,813"$ $LK,"MemSet",A="FL:::/Kernel/KernelB.HH,170"$ $LK,"_TRUNC",A="FL:::/Kernel/KMathA.HC.Z,400"$ -$LK,"HTF_IMM",A="FL:::/Kernel/KernelA.HH,706"$ -$LK,"FUF_IGNORE",A="FL:::/Kernel/KernelA.HH,2598"$ -$LK,"FUf_IGNORE",A="FL:::/Kernel/KernelA.HH,2571"$ -$LK,"AAT_SUB_U32",A="FL:::/Kernel/KernelA.HH,1972"$ -$LK,"AAT_SUB_U16",A="FL:::/Kernel/KernelA.HH,1970"$ -$LK,"IP_MOUSE",A="FL:::/Kernel/KernelA.HH,3046"$ -$LK,"ATAIDDrvs",A="FL:::/Kernel/BlkDev/DskATAId.HC.Z,204",BI=313$ -$LK,"UserCmdLine",A="FL:::/Kernel/KTask.HC.Z,400",BI=314$ -$LK,"GVF_FUN",A="FL:::/Kernel/KernelA.HH,867"$ -$LK,"IA32F_LME",A="FL:::/Kernel/KernelA.HH,520"$ -$LK,"LAPICF_APIC_ENABLED",A="FL:::/Kernel/KernelA.HH,490"$ -$LK,"RLf_AUTO_COMPLETE",A="FL:::/Kernel/KernelA.HH,455"$ -$LK,"PCIClassFind",A="FL:::/Kernel/PCIBIOS.HC.Z,265",BI=315$ -$LK,"RECALCF_HAS_CURSOR",A="FL:::/Kernel/KernelA.HH,1352"$ -$LK,"ATARep",A="FL:::/Kernel/BlkDev/DskATAId.HC.Z,131",BI=316$ -$LK,"KDInputFilterPutS",A="FL:::/Kernel/KeyDev.HC.Z,117",BI=317$ +$LK,"HTF_IMM",A="FL:::/Kernel/KernelA.HH,694"$ +$LK,"char_bmp_dec_numeric",A="FL:::/Kernel/StrA.HC.Z,350"$ +$LK,"FUF_IGNORE",A="FL:::/Kernel/KernelA.HH,2585"$ +$LK,"FUf_IGNORE",A="FL:::/Kernel/KernelA.HH,2558"$ +$LK,"AAT_SUB_U32",A="FL:::/Kernel/KernelA.HH,1959"$ +$LK,"AAT_SUB_U16",A="FL:::/Kernel/KernelA.HH,1957"$ +$LK,"ATAIDDrvs",A="FL:::/Kernel/BlkDev/DskATAId.HC.Z,204",BI=310$ +$LK,"UserCmdLine",A="FL:::/Kernel/KTask.HC.Z,414",BI=311$ +$LK,"GVF_FUN",A="FL:::/Kernel/KernelA.HH,855"$ +$LK,"IA32F_LME",A="FL:::/Kernel/KernelA.HH,523"$ +$LK,"LAPICF_APIC_ENABLED",A="FL:::/Kernel/KernelA.HH,493"$ +$LK,"RLf_AUTO_COMPLETE",A="FL:::/Kernel/KernelA.HH,457"$ +$LK,"PCIClassFind",A="FL:::/Kernel/PCIBIOS.HC.Z,265",BI=312$ +$LK,"RECALCF_HAS_CURSOR",A="FL:::/Kernel/KernelA.HH,1340"$ +$LK,"ATARep",A="FL:::/Kernel/BlkDev/DskATAId.HC.Z,131",BI=313$ +$LK,"KDInputFilterPutS",A="FL:::/Kernel/KeyDev.HC.Z,117",BI=314$ $LK,"D3SubEqu",A="FL:::/Kernel/KernelB.HH,160"$ -$LK,"FUF_JUST_JIT",A="FL:::/Kernel/KernelA.HH,2613"$ -$LK,"FUf_JUST_JIT",A="FL:::/Kernel/KernelA.HH,2586"$ -$LK,"CAsmIns",A="FL:::/Kernel/KernelA.HH,1832"$ +$LK,"FUF_JUST_JIT",A="FL:::/Kernel/KernelA.HH,2600"$ +$LK,"FUf_JUST_JIT",A="FL:::/Kernel/KernelA.HH,2573"$ +$LK,"CAsmIns",A="FL:::/Kernel/KernelA.HH,1819"$ $LK,"InU32",A="FL:::/Kernel/KernelB.HH,76"$ $LK,"InU16",A="FL:::/Kernel/KernelB.HH,75"$ -$LK,"TK_IF",A="FL:::/Kernel/KernelA.HH,2098"$ -$LK,"DOCT_BLINK",A="FL:::/Kernel/KernelA.HH,922"$ +$LK,"TK_IF",A="FL:::/Kernel/KernelA.HH,2085"$ +$LK,"DOCT_BLINK",A="FL:::/Kernel/KernelA.HH,910"$ $LK,"U32",A="FL:::/Kernel/KernelA.HH,79"$ $LK,"U16",A="FL:::/Kernel/KernelA.HH,67"$ $LK,"_XCHG_I64",A="FL:::/Kernel/KUtils.HC.Z,184"$ -$LK,"ATANop",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,48",BI=318$ -$LK,"TaskDel",A="FL:::/Kernel/KTask.HC.Z,424",BI=319$ -$LK,"LXchgU8",A="FL:::/Kernel/KernelB.HH,260"$ -$LK,"AAT_SUB_U64",A="FL:::/Kernel/KernelA.HH,1974"$ -$LK,"HasLower",A="FL:::/Kernel/FunSeg.HC.Z,1",BI=320$ +$LK,"ATANop",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,48",BI=315$ +$LK,"TaskDel",A="FL:::/Kernel/KTask.HC.Z,437",BI=316$ +$LK,"LXchgU8",A="FL:::/Kernel/KernelB.HH,266"$ +$LK,"AAT_SUB_U64",A="FL:::/Kernel/KernelA.HH,1961"$ +$LK,"HasLower",A="FL:::/Kernel/FunSeg.HC.Z,1",BI=317$ $LK,"_CALL",A="FL:::/Kernel/KUtils.HC.Z,145"$ -$LK,"IA32F_SCE",A="FL:::/Kernel/KernelA.HH,519"$ +$LK,"IA32F_SCE",A="FL:::/Kernel/KernelA.HH,522"$ $LK,"MIN_F64",A="FL:::/Kernel/KernelA.HH,47"$ -$LK,"__LINE__",A="FL:::/Kernel/KernelA.HH,2025"$ -$LK,"FUF_FLATTEN_TREE",A="FL:::/Kernel/KernelA.HH,2618"$ -$LK,"KeyDescSet",A="FL:::/Kernel/KeyDev.HC.Z,56",BI=321$ +$LK,"__LINE__",A="FL:::/Kernel/KernelA.HH,2012"$ +$LK,"FUF_FLATTEN_TREE",A="FL:::/Kernel/KernelA.HH,2605"$ +$LK,"KeyDescSet",A="FL:::/Kernel/KeyDev.HC.Z,56",BI=318$ $LK,"U64",A="FL:::/Kernel/KernelA.HH,95"$ $LK,"MIN_I32",A="FL:::/Kernel/KernelA.HH,32"$ $LK,"MIN_I16",A="FL:::/Kernel/KernelA.HH,28"$ -$LK,"FSize",A="FL:::/Kernel/BlkDev/DskCFile.HC.Z,1",BI=322$ -$LK,"IntEntrySet",A="FL:::/Kernel/KInts.HC.Z,109",BI=323$ -$LK,"Mem32DevIns",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,1",BI=324$ -$LK,"SYS_MP_CNT_INITIAL",A="FL:::/Kernel/KStart32.HC.Z,52"$ -$LK,"FUf_FLATTEN_TREE",A="FL:::/Kernel/KernelA.HH,2591"$ +$LK,"FSize",A="FL:::/Kernel/BlkDev/DskCFile.HC.Z,1",BI=319$ +$LK,"IntEntrySet",A="FL:::/Kernel/KInts.HC.Z,109",BI=320$ +$LK,"Mem32DevIns",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,1",BI=321$ +$LK,"SYS_MP_CNT_INITIAL",A="FL:::/Kernel/KStart32.HC.Z,66"$ +$LK,"FUf_FLATTEN_TREE",A="FL:::/Kernel/KernelA.HH,2578"$ +$LK,"WIf_FOCUS_TASK_MS_L",A="FL:::/Kernel/KernelA.HH,1436"$ +$LK,"WIF_SELF_MS_L",A="FL:::/Kernel/KernelA.HH,1398"$ +$LK,"char_bmp_word",A="FL:::/Kernel/StrA.HC.Z,340"$ +$LK,"WIf_SELF_MS_L",A="FL:::/Kernel/KernelA.HH,1426"$ $LK,"_CEIL",A="FL:::/Kernel/KMathA.HC.Z,441"$ -$LK,"INVALID_CLUSTER",A="FL:::/Kernel/KernelA.HH,2300"$ -$LK,"TaskEnd",A="FL:::/Kernel/KTask.HC.Z,432",BI=325$ +$LK,"INVALID_CLUSTER",A="FL:::/Kernel/KernelA.HH,2287"$ +$LK,"TaskEnd",A="FL:::/Kernel/KTask.HC.Z,445",BI=322$ +$LK,"WIf_FOCUS_TASK_MS_R",A="FL:::/Kernel/KernelA.HH,1438"$ $LK,"MIN_I64",A="FL:::/Kernel/KernelA.HH,36"$ -$LK,"TaskCaller",A="FL:::/Kernel/KDbg.HC.Z,75",BI=326$ -$LK,"SV_NONE",A="FL:::/Kernel/KernelA.HH,1741"$ +$LK,"TaskCaller",A="FL:::/Kernel/KDbg.HC.Z,75",BI=323$ +$LK,"SV_NONE",A="FL:::/Kernel/KernelA.HH,1728"$ $LK,"QUE_VECT_U8_CNT",A="FL:::/Kernel/KernelA.HH,162"$ -$LK,"RT_I0",A="FL:::/Kernel/KernelA.HH,1551"$ -$LK,"DOCEF_LEFT_MACRO",A="FL:::/Kernel/KernelA.HH,972"$ -$LK,"TK_DEREFERENCE",A="FL:::/Kernel/KernelA.HH,2078"$ -$LK,"ARGT_UIMM8",A="FL:::/Kernel/KernelA.HH,1887"$ -$LK,"DOCF_NULL_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HH,1278"$ -$LK,"DOCEf_LEFT_MACRO",A="FL:::/Kernel/KernelA.HH,1060"$ +$LK,"RT_I0",A="FL:::/Kernel/KernelA.HH,1539"$ +$LK,"WIF_SELF_MS_R",A="FL:::/Kernel/KernelA.HH,1400"$ +$LK,"DOCEF_LEFT_MACRO",A="FL:::/Kernel/KernelA.HH,960"$ +$LK,"TK_DEREFERENCE",A="FL:::/Kernel/KernelA.HH,2065"$ +$LK,"ARGT_UIMM8",A="FL:::/Kernel/KernelA.HH,1874"$ +$LK,"WIf_SELF_MS_R",A="FL:::/Kernel/KernelA.HH,1427"$ +$LK,"DOCF_NULL_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HH,1266"$ +$LK,"DOCEf_LEFT_MACRO",A="FL:::/Kernel/KernelA.HH,1048"$ $LK,"SYS_GDT",A="FL:::/Kernel/KStart16.HC.Z,39"$ -$LK,"CDate2Dos",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,1",BI=327$ -$LK,"SrvCmdRunOne",A="FL:::/Kernel/SrvCmd.HC.Z,268",BI=328$ +$LK,"JOBf_WAKE_MASTER",A="FL:::/Kernel/KernelA.HH,3142"$ +$LK,"CDate2Dos",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,1",BI=324$ +$LK,"SEMA_DEBUG",A="FL:::/Kernel/KernelA.HH,594"$ $LK,"TMP_BUF_LEN",A="FL:::/Kernel/StrPrint.HC.Z,205"$ -$LK,"MRT_UNUSED",A="FL:::/Kernel/KernelA.HH,2866"$ -$LK,"MDG_REG_DISP_SIB",A="FL:::/Kernel/KernelA.HH,1585"$ -$LK,"RedSeaFilesDel",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,458",BI=329$ -$LK,"XchgU32",A="FL:::/Kernel/KernelB.HH,266"$ -$LK,"XchgU16",A="FL:::/Kernel/KernelB.HH,265"$ -$LK,"TK_SHL_EQU",A="FL:::/Kernel/KernelA.HH,2089"$ -$LK,"CCntsGlbls",A="FL:::/Kernel/KernelA.HH,538"$ -$LK,"LastDayOfMon",A="FL:::/Kernel/KDate.HC.Z,82",BI=330$ -$LK,"RT_I8",A="FL:::/Kernel/KernelA.HH,1553"$ -$LK,"SVCf_WAKE_MASTER",A="FL:::/Kernel/KernelA.HH,3180"$ -$LK,"CAsmNum",A="FL:::/Kernel/KernelA.HH,1817"$ +$LK,"MRT_UNUSED",A="FL:::/Kernel/KernelA.HH,2834"$ +$LK,"MDG_REG_DISP_SIB",A="FL:::/Kernel/KernelA.HH,1573"$ +$LK,"RedSeaFilesDel",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,458",BI=325$ +$LK,"XchgU32",A="FL:::/Kernel/KernelB.HH,272"$ +$LK,"XchgU16",A="FL:::/Kernel/KernelB.HH,271"$ +$LK,"TK_SHL_EQU",A="FL:::/Kernel/KernelA.HH,2076"$ +$LK,"CCntsGlbls",A="FL:::/Kernel/KernelA.HH,541"$ +$LK,"LastDayOfMon",A="FL:::/Kernel/KDate.HC.Z,82",BI=326$ +$LK,"RT_I8",A="FL:::/Kernel/KernelA.HH,1541"$ +$LK,"CAsmNum",A="FL:::/Kernel/KernelA.HH,1804"$ $LK,"_REP_OUT_U16",A="FL:::/Kernel/KUtils.HC.Z,297"$ $LK,"_REP_OUT_U32",A="FL:::/Kernel/KUtils.HC.Z,286"$ -$LK,"VGAM_TEXT",A="FL:::/Kernel/KernelA.HH,3721"$ -$LK,"ACD_POS",A="FL:::/Kernel/KernelA.HH,1506"$ -$LK,"FirstDayOfMon",A="FL:::/Kernel/KDate.HC.Z,71",BI=331$ -$LK,"PutChars",A="FL:::/Kernel/KeyDev.HC.Z,20",BI=332$ +$LK,"VGAM_TEXT",A="FL:::/Kernel/KernelA.HH,3674"$ +$LK,"ACD_POS",A="FL:::/Kernel/KernelA.HH,1494"$ +$LK,"FirstDayOfMon",A="FL:::/Kernel/KDate.HC.Z,71",BI=327$ +$LK,"PutChars",A="FL:::/Kernel/KeyDev.HC.Z,20",BI=328$ $LK,"_BEQU",A="FL:::/Kernel/KUtils.HC.Z,89"$ -$LK,"DOCEf_RAW_TYPE",A="FL:::/Kernel/KernelA.HH,1065"$ -$LK,"DOCEF_RAW_TYPE",A="FL:::/Kernel/KernelA.HH,977"$ -$LK,"ansf",A="FL:::/Kernel/KernelA.HH,3419"$ -$LK,"BlkDevsInitAll",A="FL:::/Kernel/BlkDev/DskAddDev.HC.Z,215",BI=333$ -$LK,"SysUntry",A="FL:::/Kernel/KExcept.HC.Z,77",BI=334$ -$LK,"WIF_FOCUS_TASK_BORDER",A="FL:::/Kernel/KernelA.HH,1428"$ +$LK,"DOCEf_RAW_TYPE",A="FL:::/Kernel/KernelA.HH,1053"$ +$LK,"DOCEF_RAW_TYPE",A="FL:::/Kernel/KernelA.HH,965"$ +$LK,"ansf",A="FL:::/Kernel/KernelA.HH,3379"$ +$LK,"BlkDevsInitAll",A="FL:::/Kernel/BlkDev/DskAddDev.HC.Z,225",BI=329$ +$LK,"SysUntry",A="FL:::/Kernel/KExcept.HC.Z,77",BI=330$ +$LK,"WIF_FOCUS_TASK_BORDER",A="FL:::/Kernel/KernelA.HH,1416"$ $LK,"_MEMCMP",A="FL:::/Kernel/KUtils.HC.Z,70"$ -$LK,"DISPLAYf_NO_BORDER",A="FL:::/Kernel/KernelA.HH,3302"$ +$LK,"DISPLAYf_NO_BORDER",A="FL:::/Kernel/KernelA.HH,3262"$ $LK,"OFF",A="FL:::/Kernel/KernelA.HH,23"$ -$LK,"DOCF_DO_FULL_REFRESH",A="FL:::/Kernel/KernelA.HH,1280"$ +$LK,"DOCF_DO_FULL_REFRESH",A="FL:::/Kernel/KernelA.HH,1268"$ $LK,"SYS_BOOT_SRC",A="FL:::/Kernel/KStart16.HC.Z,23"$ -$LK,"FUF_JUST_SRC",A="FL:::/Kernel/KernelA.HH,2611"$ -$LK,"FUf_JUST_SRC",A="FL:::/Kernel/KernelA.HH,2584"$ -$LK,"OC_CALL",A="FL:::/Kernel/KernelA.HH,1760"$ -$LK,"TaskExe",A="FL:::/Kernel/SrvCmd.HC.Z,39",BI=335$ -$LK,"ThrowBreak",A="FL:::/Kernel/KExcept.HC.Z,136",BI=336$ -$LK,"FileWrite",A="FL:::/Kernel/BlkDev/DskFile.HC.Z,87",BI=337$ -$LK,"ARf_CSPRITE_PTS_RECTANGLES",A="FL:::/Kernel/KernelA.HH,3900"$ +$LK,"FUF_JUST_SRC",A="FL:::/Kernel/KernelA.HH,2598"$ +$LK,"FUf_JUST_SRC",A="FL:::/Kernel/KernelA.HH,2571"$ +$LK,"OC_CALL",A="FL:::/Kernel/KernelA.HH,1747"$ +$LK,"TaskExe",A="FL:::/Kernel/Job.HC.Z,39",BI=331$ +$LK,"FileWrite",A="FL:::/Kernel/BlkDev/DskFile.HC.Z,87",BI=332$ +$LK,"ARf_CSPRITE_PTS_RECTANGLES",A="FL:::/Kernel/KernelA.HH,3855"$ $LK,"RFLAGf_ID",A="FL:::/Kernel/KernelA.HH,325"$ -$LK,"SCF_E0_PREFIX",A="FL:::/Kernel/KernelA.HH,3537"$ -$LK,"SCf_E0_PREFIX",A="FL:::/Kernel/KernelA.HH,3522"$ -$LK,"ATAWaitNotBUSY",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,24",BI=338$ +$LK,"SCF_E0_PREFIX",A="FL:::/Kernel/KernelA.HH,3490"$ +$LK,"SCf_E0_PREFIX",A="FL:::/Kernel/KernelA.HH,3475"$ +$LK,"ATAWaitNotBUSY",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,24",BI=333$ $LK,"_XCHG_U16",A="FL:::/Kernel/KUtils.HC.Z,200"$ $LK,"_XCHG_U32",A="FL:::/Kernel/KUtils.HC.Z,192"$ -$LK,"SUF_TO_LOWER",A="FL:::/Kernel/KernelA.HH,3793"$ -$LK,"ARGT_XMM32",A="FL:::/Kernel/KernelA.HH,1941"$ -$LK,"WIF_SELF_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HH,1416"$ -$LK,"LDF_SILENT",A="FL:::/Kernel/KernelA.HH,370"$ -$LK,"RED",A="FL:::/Kernel/KernelA.HH,2964"$ -$LK,"RT_U0",A="FL:::/Kernel/KernelA.HH,1552"$ -$LK,"SYS_SEMA_DEBUG",A="FL:::/Kernel/KernelA.HH,594"$ -$LK,"SrvCmdDel",A="FL:::/Kernel/SrvCmd.HC.Z,1",BI=339$ -$LK,"VGAR_MAP_MASK",A="FL:::/Kernel/KernelA.HH,3739"$ -$LK,"PRTF_COMMA",A="FL:::/Kernel/KernelA.HH,3917"$ -$LK,"CAOTCtrl",A="FL:::/Kernel/KernelA.HH,2049"$ -$LK,"SCF_NEW_KEY",A="FL:::/Kernel/KernelA.HH,3545"$ +$LK,"SUF_TO_LOWER",A="FL:::/Kernel/KernelA.HH,3746"$ +$LK,"ARGT_XMM32",A="FL:::/Kernel/KernelA.HH,1928"$ +$LK,"WIF_SELF_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HH,1404"$ +$LK,"LDF_SILENT",A="FL:::/Kernel/KernelA.HH,369"$ +$LK,"MsInit",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,63",BI=334$ +$LK,"RED",A="FL:::/Kernel/KernelA.HH,2932"$ +$LK,"RT_U0",A="FL:::/Kernel/KernelA.HH,1540"$ +$LK,"VGAR_MAP_MASK",A="FL:::/Kernel/KernelA.HH,3692"$ +$LK,"PRTF_COMMA",A="FL:::/Kernel/KernelA.HH,3872"$ +$LK,"CAOTCtrl",A="FL:::/Kernel/KernelA.HH,2036"$ +$LK,"VM_VIRTUALBOX",A="FL:::/Kernel/KernelA.HH,3893"$ +$LK,"SCF_NEW_KEY",A="FL:::/Kernel/KernelA.HH,3498"$ $LK,"TASK_CONTEXT_SAVE",A="FL:::/Kernel/Sched.HC.Z,56"$ -$LK,"SCf_NEW_KEY",A="FL:::/Kernel/KernelA.HH,3530"$ -$LK,"CDirContext",A="FL:::/Kernel/KernelA.HH,2773"$ -$LK,"BootDVDProbeAll",A="FL:::/Kernel/BlkDev/DskATAId.HC.Z,29",BI=340$ -$LK,"SysThrowBreak",A="FL:::/Kernel/KExcept.HC.Z,122",BI=341$ +$LK,"SCf_NEW_KEY",A="FL:::/Kernel/KernelA.HH,3483"$ +$LK,"CDirContext",A="FL:::/Kernel/KernelA.HH,2761"$ +$LK,"BootDVDProbeAll",A="FL:::/Kernel/BlkDev/DskATAId.HC.Z,29",BI=335$ $LK,"_MEMCPY",A="FL:::/Kernel/KUtils.HC.Z,55"$ $LK,"_D3_DIST_SQR",A="FL:::/Kernel/KMathA.HC.Z,61"$ -$LK,"ARGT_XMM64",A="FL:::/Kernel/KernelA.HH,1942"$ -$LK,"ATAWriteBlks",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,461",BI=342$ -$LK,"RT_U8",A="FL:::/Kernel/KernelA.HH,1554"$ -$LK,"DOCEf_USER_DATA",A="FL:::/Kernel/KernelA.HH,1069"$ -$LK,"DOCEF_USER_DATA",A="FL:::/Kernel/KernelA.HH,981"$ +$LK,"ARGT_XMM64",A="FL:::/Kernel/KernelA.HH,1929"$ +$LK,"ATAWriteBlks",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,464",BI=336$ +$LK,"RT_U8",A="FL:::/Kernel/KernelA.HH,1542"$ +$LK,"RLf_16MEG_SYS_CODE_BP",A="FL:::/Kernel/KernelA.HH,444"$ +$LK,"DOCEf_USER_DATA",A="FL:::/Kernel/KernelA.HH,1057"$ +$LK,"DOCEF_USER_DATA",A="FL:::/Kernel/KernelA.HH,969"$ $LK,"COPY_BUF_BLKS",A="FL:::/Kernel/BlkDev/DskCopy.HC.Z,22"$ -$LK,"FAT32FileWrite",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,813",BI=343$ -$LK,"CISO1Date",A="FL:::/Kernel/KernelA.HH,2453"$ -$LK,"EDf_BAIL",A="FL:::/Kernel/KernelA.HH,1254"$ -$LK,"EDF_BAIL",A="FL:::/Kernel/KernelA.HH,1248"$ -$LK,"ChkCodePtr",A="FL:::/Kernel/KDbg.HC.Z,16",BI=344$ +$LK,"FAT32FileWrite",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,801",BI=337$ +$LK,"CISO1Date",A="FL:::/Kernel/KernelA.HH,2440"$ +$LK,"EDf_BAIL",A="FL:::/Kernel/KernelA.HH,1242"$ +$LK,"EDF_BAIL",A="FL:::/Kernel/KernelA.HH,1236"$ +$LK,"ChkCodePtr",A="FL:::/Kernel/KDbg.HC.Z,16",BI=338$ $LK,"SYS_RAM_REBOOT",A="FL:::/Kernel/KStart64.HC.Z,74"$ -$LK,"ISO1T_BOOT_RECORD",A="FL:::/Kernel/KernelA.HH,2478"$ -$LK,"FileFind",A="FL:::/Kernel/BlkDev/DskFind.HC.Z,57",BI=345$ +$LK,"ISO1T_BOOT_RECORD",A="FL:::/Kernel/KernelA.HH,2465"$ +$LK,"FileFind",A="FL:::/Kernel/BlkDev/DskFind.HC.Z,57",BI=339$ $LK,"SYS_FIND_PCI_SERVICES",A="FL:::/Kernel/PCIBIOS.HC.Z,38"$ -$LK,"VGAP_ATTR_DATA_WRITE",A="FL:::/Kernel/KernelA.HH,3725"$ -$LK,"FUF_WHOLE_LABELS_BEFORE",A="FL:::/Kernel/KernelA.HH,2620"$ -$LK,"TK_MUL_EQU",A="FL:::/Kernel/KernelA.HH,2091"$ -$LK,"TK_NOT_EQU",A="FL:::/Kernel/KernelA.HH,2083"$ +$LK,"VGAP_ATTR_DATA_WRITE",A="FL:::/Kernel/KernelA.HH,3678"$ +$LK,"FUF_WHOLE_LABELS_BEFORE",A="FL:::/Kernel/KernelA.HH,2607"$ +$LK,"TK_MUL_EQU",A="FL:::/Kernel/KernelA.HH,2078"$ +$LK,"TK_NOT_EQU",A="FL:::/Kernel/KernelA.HH,2070"$ $LK,"MIN_U32",A="FL:::/Kernel/KernelA.HH,34"$ $LK,"MIN_U16",A="FL:::/Kernel/KernelA.HH,30"$ -$LK,"CFileNameTo",A="FL:::/Kernel/BlkDev/DskStrB.HC.Z,1",BI=346$ -$LK,"IntNop",A="FL:::/Kernel/KInts.HC.Z,143",BI=347$ +$LK,"CFileNameTo",A="FL:::/Kernel/BlkDev/DskStrB.HC.Z,1",BI=340$ +$LK,"IntNop",A="FL:::/Kernel/KInts.HC.Z,143",BI=341$ $LK,"_D3_MUL_EQU",A="FL:::/Kernel/KMathA.HC.Z,273"$ -$LK,"DISPLAYf_SHOW",A="FL:::/Kernel/KernelA.HH,3299"$ -$LK,"DOF_DONT_SHOW",A="FL:::/Kernel/KernelA.HH,1222"$ -$LK,"HTF_PUBLIC",A="FL:::/Kernel/KernelA.HH,703"$ -$LK,"HTf_PUBLIC",A="FL:::/Kernel/KernelA.HH,673"$ +$LK,"DISPLAYf_SHOW",A="FL:::/Kernel/KernelA.HH,3259"$ +$LK,"DOF_DONT_SHOW",A="FL:::/Kernel/KernelA.HH,1210"$ +$LK,"HTF_PUBLIC",A="FL:::/Kernel/KernelA.HH,691"$ +$LK,"HTf_PUBLIC",A="FL:::/Kernel/KernelA.HH,661"$ $LK,"SYS_HASH_SINGLE_TABLE_FIND",A="FL:::/Kernel/KHashA.HC.Z,41"$ -$LK,"OC_OP_SIZE_PREFIX",A="FL:::/Kernel/KernelA.HH,1755"$ -$LK,"CCF_UNRESOLVED",A="FL:::/Kernel/KernelA.HH,2146"$ -$LK,"MLF_FUN",A="FL:::/Kernel/KernelA.HH,778"$ -$LK,"TaskMsg",A="FL:::/Kernel/SrvCmd.HC.Z,119",BI=348$ -$LK,"RBlks",A="FL:::/Kernel/BlkDev/DskBlk.HC.Z,31",BI=349$ -$LK,"DOCEF_ZERO_BASED",A="FL:::/Kernel/KernelA.HH,1015"$ -$LK,"HTF_UNRESOLVED",A="FL:::/Kernel/KernelA.HH,709"$ -$LK,"FAT32Cd",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,399",BI=350$ -$LK,"DOCEf_ZERO_BASED",A="FL:::/Kernel/KernelA.HH,1101"$ -$LK,"HTf_UNRESOLVED",A="FL:::/Kernel/KernelA.HH,679"$ -$LK,"CAP16BitInit",A="FL:::/Kernel/KernelA.HH,526"$ -$LK,"ATAPIWriteBlks",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,535",BI=351$ +$LK,"OC_OP_SIZE_PREFIX",A="FL:::/Kernel/KernelA.HH,1742"$ +$LK,"CCF_UNRESOLVED",A="FL:::/Kernel/KernelA.HH,2133"$ +$LK,"MLF_FUN",A="FL:::/Kernel/KernelA.HH,766"$ +$LK,"TaskMsg",A="FL:::/Kernel/Job.HC.Z,119",BI=342$ +$LK,"RBlks",A="FL:::/Kernel/BlkDev/DskBlk.HC.Z,31",BI=343$ +$LK,"DOCEF_ZERO_BASED",A="FL:::/Kernel/KernelA.HH,1003"$ +$LK,"HTF_UNRESOLVED",A="FL:::/Kernel/KernelA.HH,697"$ +$LK,"FAT32Cd",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,387",BI=344$ +$LK,"DOCEf_ZERO_BASED",A="FL:::/Kernel/KernelA.HH,1089"$ +$LK,"HTf_UNRESOLVED",A="FL:::/Kernel/KernelA.HH,667"$ +$LK,"CAP16BitInit",A="FL:::/Kernel/KernelA.HH,529"$ +$LK,"ATAPIWriteBlks",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,538",BI=345$ $LK,"cnts",A="FL:::/Kernel/KGlbls.HC.Z,21"$ -$LK,"chars_bmp_displayable",A="FL:::/Kernel/StrA.HC.Z,386"$ $LK,"SYS_HEAP_INIT_FLAG",A="FL::/Tmp.DD.Z,1"$ -$LK,"FUF_WHOLE_LABELS",A="FL:::/Kernel/KernelA.HH,2619"$ -$LK,"ScanChar",A="FL:::/Kernel/SerialDev/Message.HC.Z,110",BI=352$ +$LK,"FUF_WHOLE_LABELS",A="FL:::/Kernel/KernelA.HH,2606"$ +$LK,"ScanChar",A="FL:::/Kernel/SerialDev/Message.HC.Z,110",BI=346$ $LK,"RepInU32",A="FL:::/Kernel/KernelB.HH,84"$ $LK,"RepInU16",A="FL:::/Kernel/KernelB.HH,82"$ $LK,"loge_2",A="FL:::/Kernel/KernelA.HH,56"$ $LK,"MIN_U64",A="FL:::/Kernel/KernelA.HH,38"$ -$LK,"chars_bmp_white_space",A="FL:::/Kernel/StrA.HC.Z,356"$ -$LK,"FAT32FileFind",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,298",BI=353$ -$LK,"GSF_SHIFT_ESC_EXIT",A="FL:::/Kernel/KernelA.HH,3782"$ -$LK,"SFG_WHOLE_LABELS",A="FL:::/Kernel/KernelA.HH,3803"$ -$LK,"FUf_WHOLE_LABELS",A="FL:::/Kernel/KernelA.HH,2592"$ -$LK,"DOCf_DO_FULL_REFRESH",A="FL:::/Kernel/KernelA.HH,1316"$ -$LK,"DOCf_DONT_SHOW",A="FL:::/Kernel/KernelA.HH,1310"$ -$LK,"DOCF_DONT_SHOW",A="FL:::/Kernel/KernelA.HH,1274"$ -$LK,"DirTreeDel2",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,49",BI=354$ -$LK,"FUF_JUST_TXT",A="FL:::/Kernel/KernelA.HH,2609"$ -$LK,"FUf_JUST_TXT",A="FL:::/Kernel/KernelA.HH,2582"$ -$LK,"DOCT_DFT_BACKGROUND",A="FL:::/Kernel/KernelA.HH,919"$ -$LK,"DOCT_DFT_FOREGROUND",A="FL:::/Kernel/KernelA.HH,918"$ -$LK,"BOOT_SRC_HARDDRV",A="FL:::/Kernel/KernelA.HH,3887"$ +$LK,"FAT32FileFind",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,286",BI=347$ +$LK,"GSF_SHIFT_ESC_EXIT",A="FL:::/Kernel/KernelA.HH,3735"$ +$LK,"SFG_WHOLE_LABELS",A="FL:::/Kernel/KernelA.HH,3756"$ +$LK,"SEMA_SINGLE_USER",A="FL:::/Kernel/KernelA.HH,604"$ +$LK,"FUf_WHOLE_LABELS",A="FL:::/Kernel/KernelA.HH,2579"$ +$LK,"DOCf_DO_FULL_REFRESH",A="FL:::/Kernel/KernelA.HH,1304"$ +$LK,"DOCf_DONT_SHOW",A="FL:::/Kernel/KernelA.HH,1298"$ +$LK,"DOCF_DONT_SHOW",A="FL:::/Kernel/KernelA.HH,1262"$ +$LK,"MsHardSpeedSet",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,186",BI=348$ +$LK,"DirTreeDel2",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,49",BI=349$ +$LK,"FUF_JUST_TXT",A="FL:::/Kernel/KernelA.HH,2596"$ +$LK,"FUf_JUST_TXT",A="FL:::/Kernel/KernelA.HH,2569"$ +$LK,"DOCT_DFT_BACKGROUND",A="FL:::/Kernel/KernelA.HH,907"$ +$LK,"DOCT_DFT_FOREGROUND",A="FL:::/Kernel/KernelA.HH,906"$ +$LK,"BOOT_SRC_HARDDRV",A="FL:::/Kernel/KernelA.HH,3842"$ $LK,"HashFind",A="FL:::/Kernel/KHashA.HC.Z,255"$ $LK,"D3Cross",A="FL:::/Kernel/KernelB.HH,148"$ -$LK,"MAX_PTR_STARS",A="FL:::/Kernel/KernelA.HH,772"$ -$LK,"DOCEF_ESC",A="FL:::/Kernel/KernelA.HH,1000"$ +$LK,"MAX_PTR_STARS",A="FL:::/Kernel/KernelA.HH,760"$ +$LK,"DOCEF_ESC",A="FL:::/Kernel/KernelA.HH,988"$ $LK,"_FREE",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,224"$ -$LK,"SrcLineNum",A="FL:::/Kernel/FunSeg.HC.Z,184",BI=355$ -$LK,"ATAPIClose",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,521",BI=356$ -$LK,"DOCT_MACRO",A="FL:::/Kernel/KernelA.HH,934"$ -$LK,"CH_SHIFT_ESC",A="FL:::/Kernel/KernelA.HH,3514"$ -$LK,"Dbg",A="FL:::/Kernel/KDbg.HC.Z,634",BI=357$ +$LK,"SrcLineNum",A="FL:::/Kernel/FunSeg.HC.Z,184",BI=350$ +$LK,"ATAPIClose",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,524",BI=351$ +$LK,"DOCT_MACRO",A="FL:::/Kernel/KernelA.HH,922"$ +$LK,"CH_SHIFT_ESC",A="FL:::/Kernel/KernelA.HH,3467"$ +$LK,"Dbg",A="FL:::/Kernel/KDbg.HC.Z,649",BI=352$ $LK,"Abs",A="FL:::/Kernel/KernelB.HH,96"$ $LK,"CDATE_YEAR_DAYS",A="FL:::/Kernel/KernelA.HH,183"$ $LK,"RFLAGf_OVERFLOW",A="FL:::/Kernel/KernelA.HH,316"$ $LK,"SYS_POW",A="FL:::/Kernel/KMathA.HC.Z,462"$ $LK,"StrNICmp",A="FL:::/Kernel/StrA.HC.Z,315"$ -$LK,"DOCf_NULL_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HH,1314"$ -$LK,"DOCEf_RIGHT_X",A="FL:::/Kernel/KernelA.HH,1078"$ -$LK,"DOCEF_RIGHT_X",A="FL:::/Kernel/KernelA.HH,990"$ -$LK,"DCF_FILL_NOT_COLOR",A="FL:::/Kernel/KernelA.HH,3641"$ -$LK,"DOCEF_LEN",A="FL:::/Kernel/KernelA.HH,967"$ -$LK,"FileAttr",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,238",BI=358$ +$LK,"DOCf_NULL_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HH,1302"$ +$LK,"DOCEf_RIGHT_X",A="FL:::/Kernel/KernelA.HH,1066"$ +$LK,"DOCEF_RIGHT_X",A="FL:::/Kernel/KernelA.HH,978"$ +$LK,"DCF_FILL_NOT_COLOR",A="FL:::/Kernel/KernelA.HH,3594"$ +$LK,"WIF_FOCUS_TASK_MS_WHEEL",A="FL:::/Kernel/KernelA.HH,1415"$ +$LK,"DOCEF_LEN",A="FL:::/Kernel/KernelA.HH,955"$ +$LK,"FileAttr",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,238",BI=353$ $LK,"_MEMSET",A="FL:::/Kernel/KUtils.HC.Z,3"$ -$LK,"ROP_COLLISION",A="FL:::/Kernel/KernelA.HH,2946"$ -$LK,"TK_PLUS_PLUS",A="FL:::/Kernel/KernelA.HH,2076"$ -$LK,"sys_heap_init_val",A="FL:::/Kernel/KernelB.HH,182"$ -$LK,"DOCEF_DEREF_DATA",A="FL:::/Kernel/KernelA.HH,1012"$ -$LK,"VGAP_REG_WRITE",A="FL:::/Kernel/KernelA.HH,3732"$ -$LK,"FUF_EXPAND",A="FL:::/Kernel/KernelA.HH,2605"$ -$LK,"FUf_EXPAND",A="FL:::/Kernel/KernelA.HH,2578"$ -$LK,"DOCEf_DEREF_DATA",A="FL:::/Kernel/KernelA.HH,1098"$ -$LK,"Del",A="FL:::/Kernel/BlkDev/DskCopy.HC.Z,82",BI=359$ +$LK,"ROP_COLLISION",A="FL:::/Kernel/KernelA.HH,2914"$ +$LK,"TK_PLUS_PLUS",A="FL:::/Kernel/KernelA.HH,2063"$ +$LK,"char_bmp_safe_dollar",A="FL:::/Kernel/StrA.HC.Z,386"$ +$LK,"sys_heap_init_val",A="FL:::/Kernel/KernelB.HH,181"$ +$LK,"DOCEF_DEREF_DATA",A="FL:::/Kernel/KernelA.HH,1000"$ +$LK,"VGAP_REG_WRITE",A="FL:::/Kernel/KernelA.HH,3685"$ +$LK,"FUF_EXPAND",A="FL:::/Kernel/KernelA.HH,2592"$ +$LK,"FUf_EXPAND",A="FL:::/Kernel/KernelA.HH,2565"$ +$LK,"DOCEf_DEREF_DATA",A="FL:::/Kernel/KernelA.HH,1086"$ +$LK,"Del",A="FL:::/Kernel/BlkDev/DskCopy.HC.Z,82",BI=354$ $LK,"C:/Doc/Que.DD.Z",A="FL:::/Kernel/KernelB.HH,65"$ $LK,"IDTET_TASK",A="FL:::/Kernel/KernelA.HH,281"$ -$LK,"TaskValidate",A="FL:::/Kernel/KTask.HC.Z,19",BI=360$ -$LK,"LAPIC_ARIBITRATION_PRIORITY",A="FL:::/Kernel/KernelA.HH,483"$ +$LK,"TaskValidate",A="FL:::/Kernel/KTask.HC.Z,22",BI=355$ +$LK,"FAT32Init",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,22",BI=356$ +$LK,"LAPIC_ARIBITRATION_PRIORITY",A="FL:::/Kernel/KernelA.HH,486"$ $LK,"fp_set_std_palette",A="FL:::/Kernel/KGlbls.HC.Z,35"$ $LK,"keydev",A="FL:::/Kernel/KGlbls.HC.Z,27"$ $LK,"HashBucketFind",A="FL:::/Kernel/KHashA.HC.Z,260"$ -$LK,"OCF_ALIAS",A="FL:::/Kernel/KernelA.HH,1947"$ -$LK,"IC_BODY_SIZE",A="FL:::/Kernel/KernelA.HH,1621"$ -$LK,"chars_bmp_alpha_numeric",A="FL:::/Kernel/StrA.HC.Z,330"$ +$LK,"OCF_ALIAS",A="FL:::/Kernel/KernelA.HH,1934"$ +$LK,"IC_BODY_SIZE",A="FL:::/Kernel/KernelA.HH,1609"$ $LK,"_LOG2",A="FL:::/Kernel/KMathA.HC.Z,603"$ -$LK,"ROPB_COLLISION",A="FL:::/Kernel/KernelA.HH,2937"$ -$LK,"HTT_WORD",A="FL:::/Kernel/KernelA.HH,690"$ -$LK,"HTt_WORD",A="FL:::/Kernel/KernelA.HH,660"$ -$LK,"FUG_FILE_FIND",A="FL:::/Kernel/KernelA.HH,2626"$ +$LK,"ROPB_COLLISION",A="FL:::/Kernel/KernelA.HH,2905"$ +$LK,"HTT_WORD",A="FL:::/Kernel/KernelA.HH,678"$ +$LK,"HTt_WORD",A="FL:::/Kernel/KernelA.HH,648"$ +$LK,"SEMA_DSK_CACHE",A="FL:::/Kernel/KernelA.HH,605"$ +$LK,"MsHardHndlr",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,235",BI=357$ +$LK,"FUG_FILE_FIND",A="FL:::/Kernel/KernelA.HH,2613"$ $LK,"I_PAGE_FAULT",A="FL:::/Kernel/KernelA.HH,291"$ -$LK,"DrvUnlock",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,14",BI=361$ -$LK,"CProgress",A="FL:::/Kernel/KernelA.HH,3906"$ +$LK,"DrvUnlock",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,14",BI=358$ +$LK,"CProgress",A="FL:::/Kernel/KernelA.HH,3861"$ $LK,"Arg",A="FL:::/Kernel/KernelB.HH,122"$ -$LK,"FSt_ISO9660",A="FL:::/Kernel/KernelA.HH,2691"$ +$LK,"FSt_ISO9660",A="FL:::/Kernel/KernelA.HH,2678"$ $LK,"CallExtNum",A="FL:::/Kernel/KernelB.HH,55"$ -$LK,"DirFile",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,294",BI=362$ -$LK,"DOCEF_TAG",A="FL:::/Kernel/KernelA.HH,966"$ +$LK,"DirFile",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,294",BI=359$ +$LK,"DOCEF_TAG",A="FL:::/Kernel/KernelA.HH,954"$ $LK,"Btc",A="FL:::/Kernel/KernelB.HH,16"$ -$LK,"CCF_KEEP_NEW_LINES",A="FL:::/Kernel/KernelA.HH,2133"$ -$LK,"MDF_RIP_DISP32",A="FL:::/Kernel/KernelA.HH,1583"$ -$LK,"Dir",A="FL:::/Kernel/BlkDev/DskDirB.HC.Z,105",BI=363$ +$LK,"CCF_KEEP_NEW_LINES",A="FL:::/Kernel/KernelA.HH,2120"$ +$LK,"MDF_RIP_DISP32",A="FL:::/Kernel/KernelA.HH,1571"$ +$LK,"Dir",A="FL:::/Kernel/BlkDev/DskDirB.HC.Z,105",BI=360$ $LK,"Bsf",A="FL:::/Kernel/KernelB.HH,10"$ -$LK,"MDf_RIP_DISP32",A="FL:::/Kernel/KernelA.HH,1575"$ -$LK,"ECF_HAS_PUSH_CMP",A="FL:::/Kernel/KernelA.HH,1623"$ -$LK,"WIf_SELF_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HH,1442"$ -$LK,"DOCT_PAGE_BREAK",A="FL:::/Kernel/KernelA.HH,905"$ -$LK,"SYS_SEMA_RECORD_MACRO",A="FL:::/Kernel/KernelA.HH,595"$ -$LK,"IPVarsUpdate",A="FL:::/Kernel/SerialDev/InputPointer.HC.Z,9",BI=364$ -$LK,"MLF_LASTCLASS",A="FL:::/Kernel/KernelA.HH,776"$ -$LK,"_R8",A="FL:::/Kernel/KernelA.HH,3430"$ -$LK,"_R9",A="FL:::/Kernel/KernelA.HH,3431"$ -$LK,"FileRead",A="FL:::/Kernel/BlkDev/DskFile.HC.Z,1",BI=365$ -$LK,"DOCf_HIGHLIGHT",A="FL:::/Kernel/KernelA.HH,1320"$ -$LK,"DOCF_HIGHLIGHT",A="FL:::/Kernel/KernelA.HH,1283"$ -$LK,"DOCT_HIGHLIGHT",A="FL:::/Kernel/KernelA.HH,921"$ +$LK,"MDf_RIP_DISP32",A="FL:::/Kernel/KernelA.HH,1563"$ +$LK,"ECF_HAS_PUSH_CMP",A="FL:::/Kernel/KernelA.HH,1611"$ +$LK,"WIf_SELF_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HH,1430"$ +$LK,"DOCT_PAGE_BREAK",A="FL:::/Kernel/KernelA.HH,893"$ +$LK,"MLF_LASTCLASS",A="FL:::/Kernel/KernelA.HH,764"$ +$LK,"_R8",A="FL:::/Kernel/KernelA.HH,3390"$ +$LK,"_R9",A="FL:::/Kernel/KernelA.HH,3391"$ +$LK,"FileRead",A="FL:::/Kernel/BlkDev/DskFile.HC.Z,1",BI=361$ +$LK,"DOCf_HIGHLIGHT",A="FL:::/Kernel/KernelA.HH,1308"$ +$LK,"DOCF_HIGHLIGHT",A="FL:::/Kernel/KernelA.HH,1271"$ +$LK,"DOCT_HIGHLIGHT",A="FL:::/Kernel/KernelA.HH,909"$ $LK,"_FAR_CALL32",A="FL:::/Kernel/PCIBIOS.HC.Z,69"$ -$LK,"KbdMouseCmdAck",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,65",BI=366$ -$LK,"CAOTHeapGlblRef",A="FL:::/Kernel/KernelA.HH,1982"$ -$LK,"DOCEF_SEL",A="FL:::/Kernel/KernelA.HH,1044"$ -$LK,"IEF_IMM_NOT_REL",A="FL:::/Kernel/KernelA.HH,405"$ -$LK,"FAT32DirFill",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,241",BI=367$ -$LK,"QueCopy",A="FL:::/Kernel/KDataTypes.HC.Z,53",BI=368$ -$LK,"Carry",A="FL:::/Kernel/KernelB.HH,244"$ +$LK,"CAOTHeapGlblRef",A="FL:::/Kernel/KernelA.HH,1969"$ +$LK,"DOCEF_SEL",A="FL:::/Kernel/KernelA.HH,1032"$ +$LK,"IEF_IMM_NOT_REL",A="FL:::/Kernel/KernelA.HH,404"$ +$LK,"FAT32DirFill",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,229",BI=362$ +$LK,"QueCopy",A="FL:::/Kernel/KDataTypes.HC.Z,53",BI=363$ +$LK,"Carry",A="FL:::/Kernel/KernelB.HH,250"$ $LK,"Cos",A="FL:::/Kernel/KernelB.HH,98"$ -$LK,"Clamp",A="FL:::/Kernel/KMathB.HC.Z,1",BI=369$ -$LK,"BDF_FMT",A="FL:::/Kernel/KernelA.HH,2645"$ -$LK,"Name2DirCluster",A="FL:::/Kernel/BlkDev/DskStrB.HC.Z,10",BI=370$ +$LK,"Clamp",A="FL:::/Kernel/KMathB.HC.Z,1",BI=364$ +$LK,"BDF_FMT",A="FL:::/Kernel/KernelA.HH,2632"$ +$LK,"Name2DirCluster",A="FL:::/Kernel/BlkDev/DskStrB.HC.Z,10",BI=365$ $LK,"Bsr",A="FL:::/Kernel/KernelB.HH,12"$ -$LK,"SYS_PROGRESS1_MAX",A="FL:::/Kernel/KStart32.HC.Z,32"$ -$LK,"GR_Z_ALL",A="FL:::/Kernel/KernelA.HH,3620"$ -$LK,"CMasterBoot",A="FL:::/Kernel/KernelA.HH,2314"$ -$LK,"Fix",A="FL:::/Kernel/EdLite.HC.Z,337",BI=371$ +$LK,"SYS_PROGRESS1_MAX",A="FL:::/Kernel/KStart32.HC.Z,42"$ +$LK,"GR_Z_ALL",A="FL:::/Kernel/KernelA.HH,3573"$ +$LK,"CMasterBoot",A="FL:::/Kernel/KernelA.HH,2301"$ +$LK,"Fix",A="FL:::/Kernel/EdLite.HC.Z,337",BI=366$ $LK,"Btr",A="FL:::/Kernel/KernelB.HH,18"$ $LK,"_LN",A="FL:::/Kernel/KMathA.HC.Z,614"$ -$LK,"OPTf_WARN_UNUSED_VAR",A="FL:::/Kernel/KernelA.HH,1535"$ -$LK,"DOCF_SUPERSCRIPT_MODE",A="FL:::/Kernel/KernelA.HH,1292"$ +$LK,"OPTf_WARN_UNUSED_VAR",A="FL:::/Kernel/KernelA.HH,1523"$ +$LK,"DOCF_SUPERSCRIPT_MODE",A="FL:::/Kernel/KernelA.HH,1280"$ $LK,"RFLAGf_CARRY",A="FL:::/Kernel/KernelA.HH,308"$ -$LK,"FAT32FileRead",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,367",BI=372$ -$LK,"DirFilesFlatten",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,136",BI=373$ -$LK,"FileExtDot",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,1",BI=374$ +$LK,"FAT32FileRead",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,355",BI=367$ +$LK,"DirFilesFlatten",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,136",BI=368$ +$LK,"FileExtDot",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,1",BI=369$ $LK,"Bts",A="FL:::/Kernel/KernelB.HH,20"$ -$LK,"CMemBlk",A="FL:::/Kernel/KernelA.HH,2860"$ -$LK,"DOCEF_LST",A="FL:::/Kernel/KernelA.HH,1018"$ -$LK,"Man",A="FL:::/Kernel/FunSeg.HC.Z,324",BI=375$ -$LK,"Mem512Alloc",A="FL:::/Kernel/Mem/Mem512.HC.Z,11",BI=376$ -$LK,"TK_SHR_EQU",A="FL:::/Kernel/KernelA.HH,2090"$ -$LK,"CDATE_FREQ",A="FL:::/Kernel/KernelA.HH,552"$ -$LK,"FilesFind",A="FL:::/Kernel/BlkDev/DskFind.HC.Z,30",BI=377$ +$LK,"CMemBlk",A="FL:::/Kernel/KernelA.HH,2828"$ +$LK,"DOCEF_LST",A="FL:::/Kernel/KernelA.HH,1006"$ +$LK,"Man",A="FL:::/Kernel/FunSeg.HC.Z,324",BI=370$ +$LK,"TK_SHR_EQU",A="FL:::/Kernel/KernelA.HH,2077"$ +$LK,"CDATE_FREQ",A="FL:::/Kernel/KernelA.HH,555"$ +$LK,"FilesFind",A="FL:::/Kernel/BlkDev/DskFind.HC.Z,30",BI=371$ $LK,"_HASH_FIND",A="FL:::/Kernel/KHashA.HC.Z,129"$ $LK,"MSize",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,384"$ -$LK,"CSysFixedArea",A="FL:::/Kernel/KernelA.HH,3471"$ -$LK,"Fmt",A="FL:::/Kernel/BlkDev/DskFmt.HC.Z,53",BI=378$ -$LK,"ExeCmdLine",A="FL:::/Kernel/KTask.HC.Z,287",BI=379$ +$LK,"CSysFixedArea",A="FL:::/Kernel/KernelA.HH,3427"$ +$LK,"Fmt",A="FL:::/Kernel/BlkDev/DskFmt.HC.Z,55",BI=372$ +$LK,"ExeCmdLine",A="FL:::/Kernel/KTask.HC.Z,302",BI=373$ $LK,"Log10",A="FL:::/Kernel/KernelB.HH,135"$ -$LK,"FifoI64Flush",A="FL:::/Kernel/KDataTypes.HC.Z,304",BI=380$ -$LK,"InvlPg",A="FL:::/Kernel/KernelB.HH,277"$ +$LK,"FifoI64Flush",A="FL:::/Kernel/KDataTypes.HC.Z,304",BI=374$ +$LK,"InvlPg",A="FL:::/Kernel/KernelB.HH,283"$ $LK,"CallExtStr",A="FL:::/Kernel/KernelB.HH,46"$ -$LK,"VGAM_GRAPHICS",A="FL:::/Kernel/KernelA.HH,3720"$ -$LK,"DCF_LOCATE_NEAREST",A="FL:::/Kernel/KernelA.HH,3637"$ -$LK,"Ff_ARGPOP",A="FL:::/Kernel/KernelA.HH,850"$ -$LK,"SCF_ALT",A="FL:::/Kernel/KernelA.HH,3541"$ -$LK,"CViewAngles",A="FL:::/Kernel/KernelA.HH,3109"$ -$LK,"CArrayDim",A="FL:::/Kernel/KernelA.HH,783"$ -$LK,"DOCEf_NUM_FLAGS",A="FL:::/Kernel/KernelA.HH,1113"$ -$LK,"Ff_INTERNAL",A="FL:::/Kernel/KernelA.HH,852"$ -$LK,"Drv",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,253",BI=381$ +$LK,"VGAM_GRAPHICS",A="FL:::/Kernel/KernelA.HH,3673"$ +$LK,"DCF_LOCATE_NEAREST",A="FL:::/Kernel/KernelA.HH,3590"$ +$LK,"Ff_ARGPOP",A="FL:::/Kernel/KernelA.HH,838"$ +$LK,"SCF_ALT",A="FL:::/Kernel/KernelA.HH,3494"$ +$LK,"CViewAngles",A="FL:::/Kernel/KernelA.HH,3071"$ +$LK,"CArrayDim",A="FL:::/Kernel/KernelA.HH,771"$ +$LK,"DOCEf_NUM_FLAGS",A="FL:::/Kernel/KernelA.HH,1101"$ +$LK,"Ff_INTERNAL",A="FL:::/Kernel/KernelA.HH,840"$ +$LK,"Drv",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,263",BI=375$ $LK,"Fclex",A="FL:::/Kernel/KernelB.HH,129"$ -$LK,"MDF_DISP",A="FL:::/Kernel/KernelA.HH,1581"$ -$LK,"MDf_DISP",A="FL:::/Kernel/KernelA.HH,1573"$ -$LK,"Blink",A="FL:::/Kernel/KMisc.HC.Z,130",BI=382$ -$LK,"CDbgInfo",A="FL:::/Kernel/KernelA.HH,719"$ -$LK,"IET_ZEROED_DATA_HEAP",A="FL:::/Kernel/KernelA.HH,415"$ +$LK,"MDF_DISP",A="FL:::/Kernel/KernelA.HH,1569"$ +$LK,"MDf_DISP",A="FL:::/Kernel/KernelA.HH,1561"$ +$LK,"KbdMsHndlr",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,313",BI=376$ +$LK,"Blink",A="FL:::/Kernel/KMisc.HC.Z,130",BI=377$ +$LK,"CDbgInfo",A="FL:::/Kernel/KernelA.HH,707"$ +$LK,"IET_ZEROED_DATA_HEAP",A="FL:::/Kernel/KernelA.HH,414"$ $LK,"RFLAGf_V8086",A="FL:::/Kernel/KernelA.HH,321"$ $LK,"IDTET_TRAP",A="FL:::/Kernel/KernelA.HH,283"$ -$LK,"SetRBP",A="FL:::/Kernel/KernelB.HH,252"$ -$LK,"LTGREEN",A="FL:::/Kernel/KernelA.HH,2970"$ -$LK,"DOCf_BLINK",A="FL:::/Kernel/KernelA.HH,1322"$ -$LK,"DOCF_BLINK",A="FL:::/Kernel/KernelA.HH,1285"$ -$LK,"DOCEf_HIGHLIGHT",A="FL:::/Kernel/KernelA.HH,1046"$ -$LK,"DOCEF_HIGHLIGHT",A="FL:::/Kernel/KernelA.HH,1040"$ -$LK,"SysSymImportsResolve",A="FL:::/Kernel/KLoad.HC.Z,55",BI=383$ -$LK,"RS_ATTR_HIDDEN",A="FL:::/Kernel/KernelA.HH,2527"$ +$LK,"SetRBP",A="FL:::/Kernel/KernelB.HH,258"$ +$LK,"LTGREEN",A="FL:::/Kernel/KernelA.HH,2938"$ +$LK,"DOCf_BLINK",A="FL:::/Kernel/KernelA.HH,1310"$ +$LK,"DOCF_BLINK",A="FL:::/Kernel/KernelA.HH,1273"$ +$LK,"DOCEf_HIGHLIGHT",A="FL:::/Kernel/KernelA.HH,1034"$ +$LK,"DOCEF_HIGHLIGHT",A="FL:::/Kernel/KernelA.HH,1028"$ +$LK,"SysSymImportsResolve",A="FL:::/Kernel/KLoad.HC.Z,55",BI=378$ +$LK,"RS_ATTR_HIDDEN",A="FL:::/Kernel/KernelA.HH,2514"$ $LK,"TaskEndNow",A="FL:::/Kernel/Sched.HC.Z,285"$ -$LK,"Max",A="FL:::/Kernel/KMathB.HC.Z,18",BI=384$ +$LK,"Max",A="FL:::/Kernel/KMathB.HC.Z,18",BI=379$ $LK,"SYS_HASH_FIND",A="FL:::/Kernel/KHashA.HC.Z,89"$ -$LK,"ROPF_DITHER",A="FL:::/Kernel/KernelA.HH,2955"$ -$LK,"ICF_PREV_DELETED",A="FL:::/Kernel/KernelA.HH,1617"$ -$LK,"WIG_DBL_CLICK",A="FL:::/Kernel/KernelA.HH,1431"$ -$LK,"SYS_SEMA_FIX",A="FL:::/Kernel/KernelA.HH,615"$ +$LK,"ROPF_DITHER",A="FL:::/Kernel/KernelA.HH,2923"$ +$LK,"ICF_PREV_DELETED",A="FL:::/Kernel/KernelA.HH,1605"$ +$LK,"WIG_DBL_CLICK",A="FL:::/Kernel/KernelA.HH,1419"$ $LK,"ToF64",A="FL:::/Kernel/KernelB.HH,120"$ -$LK,"SYS_PROGRESS2_MAX",A="FL:::/Kernel/KStart32.HC.Z,36"$ -$LK,"CH_SHIFT_SPACE",A="FL:::/Kernel/KernelA.HH,3515"$ -$LK,"ROPBF_DITHER",A="FL:::/Kernel/KernelA.HH,2941"$ -$LK,"FF_WRITE",A="FL:::/Kernel/KernelA.HH,2782"$ -$LK,"SetRAX",A="FL:::/Kernel/KernelB.HH,251"$ -$LK,"Min",A="FL:::/Kernel/KMathB.HC.Z,10",BI=385$ -$LK,"mp_cnt",A="FL:::/Kernel/KernelB.HH,232"$ +$LK,"SYS_PROGRESS2_MAX",A="FL:::/Kernel/KStart32.HC.Z,47"$ +$LK,"Break",A="FL:::/Kernel/KExcept.HC.Z,117",BI=380$ +$LK,"CH_SHIFT_SPACE",A="FL:::/Kernel/KernelA.HH,3468"$ +$LK,"JOBT_CALL",A="FL:::/Kernel/KernelA.HH,3157"$ +$LK,"ROPBF_DITHER",A="FL:::/Kernel/KernelA.HH,2909"$ +$LK,"FF_WRITE",A="FL:::/Kernel/KernelA.HH,2770"$ +$LK,"SetRAX",A="FL:::/Kernel/KernelB.HH,257"$ +$LK,"ICF_RES_TO_F64",A="FL:::/Kernel/KernelA.HH,1577"$ +$LK,"Min",A="FL:::/Kernel/KMathB.HC.Z,10",BI=381$ +$LK,"mp_cnt",A="FL:::/Kernel/KernelB.HH,238"$ $LK,"Exp",A="FL:::/Kernel/KernelB.HH,128"$ -$LK,"DCF_RECORD_EXTENTS",A="FL:::/Kernel/KernelA.HH,3642"$ -$LK,"FAT32FilesFind",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,846",BI=386$ -$LK,"ISO1Cd",A="FL:::/Kernel/BlkDev/FileSysISO.HC.Z,159",BI=387$ +$LK,"DCF_RECORD_EXTENTS",A="FL:::/Kernel/KernelA.HH,3595"$ +$LK,"FAT32FilesFind",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,834",BI=382$ +$LK,"ISO1Cd",A="FL:::/Kernel/BlkDev/FileSysISO.HC.Z,159",BI=383$ $LK,"_HASH_ADD_AFTER",A="FL:::/Kernel/KHashA.HC.Z,191"$ $LK,"QueInit",A="FL:::/Kernel/KernelB.HH,66"$ -$LK,"SrvTaskCont",A="FL:::/Kernel/KTask.HC.Z,353",BI=388$ -$LK,"RS_ATTR_READ_ONLY",A="FL:::/Kernel/KernelA.HH,2526"$ -$LK,"ICF_USE_UNSIGNED",A="FL:::/Kernel/KernelA.HH,1596"$ -$LK,"ATAGetDevId",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,163",BI=389$ -$LK,"WBlks",A="FL:::/Kernel/BlkDev/DskBlk.HC.Z,71",BI=390$ -$LK,"DOCT_ERROR",A="FL:::/Kernel/KernelA.HH,943"$ -$LK,"CopySingle",A="FL:::/Kernel/BlkDev/DskCopy.HC.Z,23",BI=391$ -$LK,"EXT_WIN_TO_TOP",A="FL:::/Kernel/KernelA.HH,576"$ -$LK,"MouseIPSet",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,195",BI=392$ -$LK,"ATAPIReadCapacity",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,253",BI=393$ -$LK,"MkDir",A="FL:::/Kernel/BlkDev/DskDirB.HC.Z,165",BI=394$ -$LK,"IsDir",A="FL:::/Kernel/BlkDev/DskDirB.HC.Z,90",BI=395$ -$LK,"SetMSR",A="FL:::/Kernel/KernelB.HH,262"$ +$LK,"SrvTaskCont",A="FL:::/Kernel/KTask.HC.Z,368",BI=384$ +$LK,"RS_ATTR_READ_ONLY",A="FL:::/Kernel/KernelA.HH,2513"$ +$LK,"ICF_USE_UNSIGNED",A="FL:::/Kernel/KernelA.HH,1584"$ +$LK,"ATAGetDevId",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,163",BI=385$ +$LK,"WBlks",A="FL:::/Kernel/BlkDev/DskBlk.HC.Z,71",BI=386$ +$LK,"DOCT_ERROR",A="FL:::/Kernel/KernelA.HH,931"$ +$LK,"CopySingle",A="FL:::/Kernel/BlkDev/DskCopy.HC.Z,23",BI=387$ +$LK,"EXT_WIN_TO_TOP",A="FL:::/Kernel/KernelA.HH,579"$ +$LK,"ATAPIReadCapacity",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,257",BI=388$ +$LK,"MkDir",A="FL:::/Kernel/BlkDev/DskDirB.HC.Z,165",BI=389$ +$LK,"IsDir",A="FL:::/Kernel/BlkDev/DskDirB.HC.Z,90",BI=390$ +$LK,"SetMSR",A="FL:::/Kernel/KernelB.HH,268"$ +$LK,"mem_heap_limit",A="FL:::/Kernel/KernelB.HH,194"$ $LK,"ToI64",A="FL:::/Kernel/KernelB.HH,121"$ -$LK,"IET_MAIN",A="FL:::/Kernel/KernelA.HH,416"$ -$LK,"ScanCode2KeyName",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,248",BI=396$ -$LK,"DOCf_INVERT",A="FL:::/Kernel/KernelA.HH,1323"$ -$LK,"DOCF_INVERT",A="FL:::/Kernel/KernelA.HH,1286"$ -$LK,"sys_heap_limit",A="FL:::/Kernel/KernelB.HH,194"$ -$LK,"FileExtRem",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,10",BI=397$ +$LK,"IET_MAIN",A="FL:::/Kernel/KernelA.HH,415"$ +$LK,"ScanCode2KeyName",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,248",BI=391$ +$LK,"DOCf_INVERT",A="FL:::/Kernel/KernelA.HH,1311"$ +$LK,"DOCF_INVERT",A="FL:::/Kernel/KernelA.HH,1274"$ +$LK,"SEMA_FAR_CALL32",A="FL:::/Kernel/KernelA.HH,606"$ +$LK,"FileExtRem",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,10",BI=392$ $LK,"Tan",A="FL:::/Kernel/KernelB.HH,118"$ -$LK,"SYS_PROGRESS3_MAX",A="FL:::/Kernel/KStart32.HC.Z,40"$ -$LK,"SUF_REM_LEADING",A="FL:::/Kernel/KernelA.HH,3788"$ -$LK,"OPTf_USE_IMM64",A="FL:::/Kernel/KernelA.HH,1545"$ -$LK,"Raw",A="FL:::/Kernel/KMisc.HC.Z,255",BI=398$ -$LK,"Msg",A="FL:::/Kernel/SrvCmd.HC.Z,258",BI=399$ -$LK,"OPTf_GLBLS_ON_DATA_HEAP",A="FL:::/Kernel/KernelA.HH,1542"$ -$LK,"KbdInit",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,424",BI=400$ -$LK,"chars_bmp_zero_tab_ff_cr_nl_cursor_dollar",A="FL:::/Kernel/StrA.HC.Z,368"$ +$LK,"SYS_PROGRESS3_MAX",A="FL:::/Kernel/KStart32.HC.Z,52"$ +$LK,"SUF_REM_LEADING",A="FL:::/Kernel/KernelA.HH,3741"$ +$LK,"OPTf_USE_IMM64",A="FL:::/Kernel/KernelA.HH,1533"$ +$LK,"Raw",A="FL:::/Kernel/KMisc.HC.Z,271",BI=393$ +$LK,"Msg",A="FL:::/Kernel/Job.HC.Z,259",BI=394$ +$LK,"MemPagAlloc",A="FL:::/Kernel/Mem/MemPag.HC.Z,11",BI=395$ +$LK,"OPTf_GLBLS_ON_DATA_HEAP",A="FL:::/Kernel/KernelA.HH,1530"$ +$LK,"KbdInit",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,424",BI=396$ $LK,"ToBool",A="FL:::/Kernel/KernelB.HH,119"$ -$LK,"TASKf_KILL_AFTER_DBG",A="FL:::/Kernel/KernelA.HH,3294"$ -$LK,"IRQMouse",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,13",BI=401$ +$LK,"TASKf_KILL_AFTER_DBG",A="FL:::/Kernel/KernelA.HH,3254"$ $LK,"PUT_HEX_U16",A="FL:::/Kernel/StrA.HC.Z,37"$ $LK,"PUT_HEX_U32",A="FL:::/Kernel/StrA.HC.Z,30"$ -$LK,"ATAPIStartStop",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,144",BI=402$ +$LK,"ATAPIStartStop",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,144",BI=397$ $LK,"_SIGN",A="FL:::/Kernel/KMathA.HC.Z,347"$ -$LK,"PRTF_NEG_E",A="FL:::/Kernel/KernelA.HH,3924"$ -$LK,"REGT_R8",A="FL:::/Kernel/KernelA.HH,740"$ +$LK,"PRTF_NEG_E",A="FL:::/Kernel/KernelA.HH,3879"$ +$LK,"REGT_R8",A="FL:::/Kernel/KernelA.HH,728"$ +$LK,"SEMA_DEV_MEM",A="FL:::/Kernel/KernelA.HH,607"$ $LK,"log10_2",A="FL:::/Kernel/KernelA.HH,55"$ -$LK,"PrintErr",A="FL:::/Kernel/StrPrint.HC.Z,906",BI=403$ -$LK,"ROPF_TWO_SIDED",A="FL:::/Kernel/KernelA.HH,2952"$ -$LK,"BDF_READ_CACHE",A="FL:::/Kernel/KernelA.HH,2644"$ -$LK,"SCF_INS",A="FL:::/Kernel/KernelA.HH,3549"$ -$LK,"CPUf_RAN_A_TASK",A="FL:::/Kernel/KernelA.HH,3440"$ -$LK,"BDf_READ_CACHE",A="FL:::/Kernel/KernelA.HH,2654"$ -$LK,"Snd",A="FL:::/Kernel/KMisc.HC.Z,163",BI=404$ -$LK,"GetChar",A="FL:::/Kernel/SerialDev/Message.HC.Z,182",BI=405$ +$LK,"PrintErr",A="FL:::/Kernel/StrPrint.HC.Z,906",BI=398$ +$LK,"ROPF_TWO_SIDED",A="FL:::/Kernel/KernelA.HH,2920"$ +$LK,"BDF_READ_CACHE",A="FL:::/Kernel/KernelA.HH,2631"$ +$LK,"SCF_INS",A="FL:::/Kernel/KernelA.HH,3502"$ +$LK,"CPUf_RAN_A_TASK",A="FL:::/Kernel/KernelA.HH,3400"$ +$LK,"BDf_READ_CACHE",A="FL:::/Kernel/KernelA.HH,2641"$ +$LK,"Snd",A="FL:::/Kernel/KMisc.HC.Z,179",BI=399$ +$LK,"GetChar",A="FL:::/Kernel/SerialDev/Message.HC.Z,182",BI=400$ $LK,"Sin",A="FL:::/Kernel/KernelB.HH,105"$ -$LK,"TK_OR_OR",A="FL:::/Kernel/KernelA.HH,2087"$ +$LK,"TK_OR_OR",A="FL:::/Kernel/KernelA.HH,2074"$ +$LK,"SEMA_TMBEAT",A="FL:::/Kernel/KernelA.HH,614"$ $LK,"SYS_PCIBIOS_SERVICE_CALL",A="FL:::/Kernel/PCIBIOS.HC.Z,46"$ -$LK,"Now",A="FL:::/Kernel/KDate.HC.Z,191",BI=406$ +$LK,"Now",A="FL:::/Kernel/KDate.HC.Z,191",BI=401$ $LK,"Fldcw",A="FL:::/Kernel/KernelB.HH,130"$ -$LK,"TTS_ED_FILENAME",A="FL:::/Kernel/KernelA.HH,3277"$ -$LK,"WIf_FOCUS_TASK_BORDER",A="FL:::/Kernel/KernelA.HH,1453"$ -$LK,"IA32_EFER",A="FL:::/Kernel/KernelA.HH,522"$ -$LK,"SetRSP",A="FL:::/Kernel/KernelB.HH,254"$ -$LK,"Pop",A="FL:::/Kernel/KernelB.HH,249"$ -$LK,"sys_progresses",A="FL:::/Kernel/KernelB.HH,227"$ -$LK,"CMenuEntry",A="FL:::/Kernel/KernelA.HH,3141"$ -$LK,"OC_NOP2",A="FL:::/Kernel/KernelA.HH,1762"$ -$LK,"DOCT_RIGHT_MARGIN",A="FL:::/Kernel/KernelA.HH,912"$ +$LK,"TTS_ED_FILENAME",A="FL:::/Kernel/KernelA.HH,3237"$ +$LK,"WIf_FOCUS_TASK_BORDER",A="FL:::/Kernel/KernelA.HH,1441"$ +$LK,"IA32_EFER",A="FL:::/Kernel/KernelA.HH,525"$ +$LK,"SetRSP",A="FL:::/Kernel/KernelB.HH,260"$ +$LK,"Pop",A="FL:::/Kernel/KernelB.HH,255"$ +$LK,"sys_progresses",A="FL:::/Kernel/KernelB.HH,233"$ +$LK,"CMenuEntry",A="FL:::/Kernel/KernelA.HH,3103"$ +$LK,"OC_NOP2",A="FL:::/Kernel/KernelA.HH,1749"$ +$LK,"DOCT_RIGHT_MARGIN",A="FL:::/Kernel/KernelA.HH,900"$ $LK,"PUT_HEX_U64",A="FL:::/Kernel/StrA.HC.Z,23"$ $LK,"SYS_KERNEL",A="FL:::/Kernel/KStart16.HC.Z,17"$ $LK,"RFLAGf_PARITY",A="FL:::/Kernel/KernelA.HH,309"$ -$LK,"SYS_PROGRESS4_MAX",A="FL:::/Kernel/KStart32.HC.Z,44"$ -$LK,"PRTF_PAD_ZERO",A="FL:::/Kernel/KernelA.HH,3914"$ -$LK,"SUF_TO_UPPER",A="FL:::/Kernel/KernelA.HH,3792"$ -$LK,"MBR_PT_REDSEA",A="FL:::/Kernel/KernelA.HH,2709"$ -$LK,"MBR_PT_NTFS",A="FL:::/Kernel/KernelA.HH,2708"$ -$LK,"MouseHandler",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,158",BI=407$ -$LK,"SCF_IP_L_DOWN",A="FL:::/Kernel/KernelA.HH,3546"$ -$LK,"SCf_IP_L_DOWN",A="FL:::/Kernel/KernelA.HH,3531"$ -$LK,"MSG_IP_L_DOWN",A="FL:::/Kernel/KernelA.HH,3232"$ -$LK,"LAPIC_TASK_PRIORITY",A="FL:::/Kernel/KernelA.HH,482"$ -$LK,"REGT_MM",A="FL:::/Kernel/KernelA.HH,746"$ -$LK,"DOCEf_POPUP",A="FL:::/Kernel/KernelA.HH,1106"$ -$LK,"DOCEF_POPUP",A="FL:::/Kernel/KernelA.HH,1020"$ -$LK,"SYS_SEMA_VGA",A="FL:::/Kernel/KernelA.HH,608"$ +$LK,"SYS_PROGRESS4_MAX",A="FL:::/Kernel/KStart32.HC.Z,57"$ +$LK,"PRTF_PAD_ZERO",A="FL:::/Kernel/KernelA.HH,3869"$ +$LK,"SUF_TO_UPPER",A="FL:::/Kernel/KernelA.HH,3745"$ +$LK,"MBR_PT_REDSEA",A="FL:::/Kernel/KernelA.HH,2696"$ +$LK,"MBR_PT_NTFS",A="FL:::/Kernel/KernelA.HH,2695"$ +$LK,"LAPIC_TASK_PRIORITY",A="FL:::/Kernel/KernelA.HH,485"$ +$LK,"REGT_MM",A="FL:::/Kernel/KernelA.HH,734"$ +$LK,"RLF_FULL_HEAPS",A="FL:::/Kernel/KernelA.HH,467"$ +$LK,"DOCEf_POPUP",A="FL:::/Kernel/KernelA.HH,1094"$ +$LK,"DOCEF_POPUP",A="FL:::/Kernel/KernelA.HH,1008"$ +$LK,"RLf_FULL_HEAPS",A="FL:::/Kernel/KernelA.HH,447"$ $LK,"ODEF_PAUSED",A="FL:::/Kernel/KernelA.HH,242"$ -$LK,"FATNameXSum",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,157",BI=408$ +$LK,"FATNameXSum",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,145",BI=402$ $LK,"Pow",A="FL:::/Kernel/KernelB.HH,137"$ $LK,"sys_boot_patch_table_base",A="FL:::/Kernel/KernelB.HH,39"$ -$LK,"WIF_SELF_BORDER",A="FL:::/Kernel/KernelA.HH,1415"$ -$LK,"DOCF_UNDO_DIRTY",A="FL:::/Kernel/KernelA.HH,1294"$ -$LK,"MStrUtil",A="FL:::/Kernel/StrB.HC.Z,58",BI=409$ +$LK,"MEM_HEAP_LIMIT",A="FL:::/Kernel/KStart32.HC.Z,7"$ +$LK,"WIF_SELF_BORDER",A="FL:::/Kernel/KernelA.HH,1403"$ +$LK,"DOCF_UNDO_DIRTY",A="FL:::/Kernel/KernelA.HH,1282"$ +$LK,"MStrUtil",A="FL:::/Kernel/StrB.HC.Z,58",BI=403$ $LK,"_D3_CROSS",A="FL:::/Kernel/KMathA.HC.Z,82"$ -$LK,"VGAP_INPUT_STAT",A="FL:::/Kernel/KernelA.HH,3736"$ -$LK,"DOCf_UNDO_DIRTY",A="FL:::/Kernel/KernelA.HH,1331"$ -$LK,"SYS_HEAP_LIMIT",A="FL:::/Kernel/KStart32.HC.Z,7"$ -$LK,"WIf_SELF_BORDER",A="FL:::/Kernel/KernelA.HH,1441"$ +$LK,"VGAP_INPUT_STAT",A="FL:::/Kernel/KernelA.HH,3689"$ +$LK,"DOCf_UNDO_DIRTY",A="FL:::/Kernel/KernelA.HH,1319"$ +$LK,"WIf_SELF_BORDER",A="FL:::/Kernel/KernelA.HH,1429"$ $LK,"text",A="FL:::/Kernel/KGlbls.HC.Z,30"$ -$LK,"ATA_READ_NATIVE_MAX_EXT",A="FL:::/Kernel/KernelA.HH,2261"$ -$LK,"MPrintQ",A="FL:::/Kernel/StrPrint.HC.Z,56",BI=410$ +$LK,"ATA_READ_NATIVE_MAX_EXT",A="FL:::/Kernel/KernelA.HH,2248"$ +$LK,"MPrintQ",A="FL:::/Kernel/StrPrint.HC.Z,56",BI=404$ $LK,"MHeapCtrl",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,386"$ -$LK,"CCF_CMD_LINE",A="FL:::/Kernel/KernelA.HH,2125"$ -$LK,"RECALCt_FIND_CURSOR",A="FL:::/Kernel/KernelA.HH,1348"$ -$LK,"SYS_SEMA_SND",A="FL:::/Kernel/KernelA.HH,599"$ -$LK,"CCF_RAX",A="FL:::/Kernel/KernelA.HH,2155"$ -$LK,"DskCacheInvalidate",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,211",BI=411$ -$LK,"DOCG_BL_IV_UL",A="FL:::/Kernel/KernelA.HH,952"$ +$LK,"CCF_CMD_LINE",A="FL:::/Kernel/KernelA.HH,2112"$ +$LK,"RECALCt_FIND_CURSOR",A="FL:::/Kernel/KernelA.HH,1336"$ +$LK,"CCF_RAX",A="FL:::/Kernel/KernelA.HH,2142"$ +$LK,"DskCacheInvalidate",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,218",BI=405$ +$LK,"DOCG_BL_IV_UL",A="FL:::/Kernel/KernelA.HH,940"$ $LK,"HashSingleTableFind",A="FL:::/Kernel/KHashA.HC.Z,257"$ +$LK,"mem_heap_base",A="FL:::/Kernel/KernelB.HH,193"$ $LK,"sys_data_bp",A="FL:::/Kernel/KernelB.HH,190"$ $LK,"SYS_PCI_BUSES",A="FL:::/Kernel/KStart16.HC.Z,36"$ -$LK,"sys_heap_base",A="FL:::/Kernel/KernelB.HH,193"$ $LK,"_CLAMP_I64",A="FL:::/Kernel/KUtils.HC.Z,121"$ -$LK,"VGAP_MISC_OUTPUT",A="FL:::/Kernel/KernelA.HH,3727"$ -$LK,"BDf_READ_ONLY_OVERRIDE",A="FL:::/Kernel/KernelA.HH,2652"$ -$LK,"Spaces2Tabs",A="FL:::/Kernel/StrA.HC.Z,477",BI=412$ -$LK,"Drv2Let",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,153",BI=413$ -$LK,"ROPBF_TWO_SIDED",A="FL:::/Kernel/KernelA.HH,2940"$ -$LK,"MEM_E820_ENTRY_SIZE",A="FL:::/Kernel/KernelA.HH,358"$ -$LK,"KDRawPutS",A="FL:::/Kernel/KeyDev.HC.Z,97",BI=414$ +$LK,"VGAP_MISC_OUTPUT",A="FL:::/Kernel/KernelA.HH,3680"$ +$LK,"BDf_READ_ONLY_OVERRIDE",A="FL:::/Kernel/KernelA.HH,2639"$ +$LK,"Spaces2Tabs",A="FL:::/Kernel/StrA.HC.Z,472",BI=406$ +$LK,"Drv2Let",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,153",BI=407$ +$LK,"ROPBF_TWO_SIDED",A="FL:::/Kernel/KernelA.HH,2908"$ +$LK,"KDRawPutS",A="FL:::/Kernel/KeyDev.HC.Z,97",BI=408$ $LK,"Sqr",A="FL:::/Kernel/KernelB.HH,106"$ -$LK,"REG_RDI",A="FL:::/Kernel/KernelA.HH,1781"$ -$LK,"REG_ALLOC",A="FL:::/Kernel/KernelA.HH,1786"$ -$LK,"DOCf_SUPERSCRIPT_MODE",A="FL:::/Kernel/KernelA.HH,1329"$ -$LK,"SrvCmdsHandler",A="FL:::/Kernel/SrvCmd.HC.Z,351",BI=415$ -$LK,"progress1_max",A="FL:::/Kernel/KernelB.HH,209"$ -$LK,"CCF_ARRAY",A="FL:::/Kernel/KernelA.HH,2154"$ -$LK,"REG_RBP",A="FL:::/Kernel/KernelA.HH,1779"$ -$LK,"DOCEF_FILTER_SKIP",A="FL:::/Kernel/KernelA.HH,1022"$ -$LK,"FifoU8Flush",A="FL:::/Kernel/KDataTypes.HC.Z,219",BI=416$ -$LK,"InStr",A="FL:::/Kernel/SrvCmd.HC.Z,466",BI=417$ -$LK,"SYS_PROGRESSES",A="FL:::/Kernel/KStart32.HC.Z,31"$ -$LK,"SUF_REM_SPACES",A="FL:::/Kernel/KernelA.HH,3790"$ -$LK,"CCF_PMT",A="FL:::/Kernel/KernelA.HH,2126"$ -$LK,"DOCEf_FILTER_SKIP",A="FL:::/Kernel/KernelA.HH,1108"$ -$LK,"DskCacheHash",A="FL:::/Kernel/BlkDev/DskCache.HC.Z,40",BI=418$ -$LK,"SCF_NUM",A="FL:::/Kernel/KernelA.HH,3543"$ -$LK,"ACD_DEF_FILENAME",A="FL:::/Kernel/KernelA.HH,1497"$ +$LK,"REG_RDI",A="FL:::/Kernel/KernelA.HH,1768"$ +$LK,"REG_ALLOC",A="FL:::/Kernel/KernelA.HH,1773"$ +$LK,"DOCf_SUPERSCRIPT_MODE",A="FL:::/Kernel/KernelA.HH,1317"$ +$LK,"CTRL_ALT_C",A="FL:::/Kernel/KernelA.HH,619"$ +$LK,"progress1_max",A="FL:::/Kernel/KernelB.HH,211"$ +$LK,"CCF_ARRAY",A="FL:::/Kernel/KernelA.HH,2141"$ +$LK,"REG_RBP",A="FL:::/Kernel/KernelA.HH,1766"$ +$LK,"DOCEF_FILTER_SKIP",A="FL:::/Kernel/KernelA.HH,1010"$ +$LK,"FifoU8Flush",A="FL:::/Kernel/KDataTypes.HC.Z,219",BI=409$ +$LK,"InStr",A="FL:::/Kernel/Job.HC.Z,464",BI=410$ +$LK,"SYS_PROGRESSES",A="FL:::/Kernel/KStart32.HC.Z,41"$ +$LK,"SUF_REM_SPACES",A="FL:::/Kernel/KernelA.HH,3743"$ +$LK,"CCF_PMT",A="FL:::/Kernel/KernelA.HH,2113"$ +$LK,"DOCEf_FILTER_SKIP",A="FL:::/Kernel/KernelA.HH,1096"$ +$LK,"DskCacheHash",A="FL:::/Kernel/BlkDev/DskCache.HC.Z,40",BI=411$ +$LK,"SCF_NUM",A="FL:::/Kernel/KernelA.HH,3496"$ +$LK,"ACD_DEF_FILENAME",A="FL:::/Kernel/KernelA.HH,1485"$ $LK,"fp_doc_put",A="FL:::/Kernel/KGlbls.HC.Z,34"$ -$LK,"DskCacheFind",A="FL:::/Kernel/BlkDev/DskCache.HC.Z,64",BI=419$ -$LK,"IsRaw",A="FL:::/Kernel/KMisc.HC.Z,262",BI=420$ -$LK,"TK_DBL_COLON",A="FL:::/Kernel/KernelA.HH,2079"$ -$LK,"ATAPIReadTrackInfo",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,277",BI=421$ -$LK,"CATARep",A="FL:::/Kernel/KernelA.HH,2250"$ -$LK,"REG_RAX",A="FL:::/Kernel/KernelA.HH,1774"$ -$LK,"ATAReadBlks",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,350",BI=422$ +$LK,"DskCacheFind",A="FL:::/Kernel/BlkDev/DskCache.HC.Z,64",BI=412$ +$LK,"IsRaw",A="FL:::/Kernel/KMisc.HC.Z,278",BI=413$ +$LK,"TK_DBL_COLON",A="FL:::/Kernel/KernelA.HH,2066"$ +$LK,"ATAPIReadTrackInfo",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,281",BI=414$ +$LK,"CATARep",A="FL:::/Kernel/KernelA.HH,2237"$ +$LK,"REG_RAX",A="FL:::/Kernel/KernelA.HH,1761"$ +$LK,"ATAReadBlks",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,353",BI=415$ $LK,"D3AddEqu",A="FL:::/Kernel/KernelB.HH,146"$ $LK,"ToUpper",A="FL:::/Kernel/KernelB.HH,58"$ -$LK,"REG_RBX",A="FL:::/Kernel/KernelA.HH,1777"$ -$LK,"SCR_DONE",A="FL:::/Kernel/SrvCmd.HC.Z,264"$ -$LK,"MDG_MASK",A="FL:::/Kernel/KernelA.HH,1584"$ -$LK,"ACD_EXTRA_CHAR",A="FL:::/Kernel/KernelA.HH,1517"$ -$LK,"Reboot",A="FL:::/Kernel/KEnd.HC.Z,119",BI=423$ +$LK,"REG_RBX",A="FL:::/Kernel/KernelA.HH,1764"$ +$LK,"MDG_MASK",A="FL:::/Kernel/KernelA.HH,1572"$ +$LK,"ACD_EXTRA_CHAR",A="FL:::/Kernel/KernelA.HH,1505"$ +$LK,"Reboot",A="FL:::/Kernel/KEnd.HC.Z,120",BI=416$ $LK,"acd",A="FL:::/Kernel/KGlbls.HC.Z,18"$ -$LK,"REG_RCX",A="FL:::/Kernel/KernelA.HH,1775"$ -$LK,"Ff_DOT_DOT_DOT",A="FL:::/Kernel/KernelA.HH,854"$ -$LK,"CHashClass",A="FL:::/Kernel/KernelA.HH,834"$ +$LK,"REG_RCX",A="FL:::/Kernel/KernelA.HH,1762"$ +$LK,"Ff_DOT_DOT_DOT",A="FL:::/Kernel/KernelA.HH,842"$ +$LK,"CHashClass",A="FL:::/Kernel/KernelA.HH,822"$ $LK,"ZERO_BUF_SIZE",A="FL:::/Kernel/BlkDev/DskBlk.HC.Z,1"$ -$LK,"LoadKernel",A="FL:::/Kernel/KLoad.HC.Z,240",BI=424$ -$LK,"SCF_KEY_UP",A="FL:::/Kernel/KernelA.HH,3538"$ -$LK,"SCf_KEY_UP",A="FL:::/Kernel/KernelA.HH,3523"$ -$LK,"MSG_IP_R_D_DOWN",A="FL:::/Kernel/KernelA.HH,3238"$ -$LK,"ICF_BY_VAL",A="FL:::/Kernel/KernelA.HH,1600"$ -$LK,"REG_RDX",A="FL:::/Kernel/KernelA.HH,1776"$ -$LK,"ATAPIReadBlks",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,413",BI=425$ -$LK,"REG_RIP",A="FL:::/Kernel/KernelA.HH,1783"$ -$LK,"DOCEF_FROM_START",A="FL:::/Kernel/KernelA.HH,1002"$ -$LK,"SEMA_STRUCT_SIZE",A="FL:::/Kernel/KernelA.HH,585"$ -$LK,"SCR_CONT",A="FL:::/Kernel/SrvCmd.HC.Z,265"$ -$LK,"progress2_max",A="FL:::/Kernel/KernelB.HH,214"$ -$LK,"DOCEf_FROM_START",A="FL:::/Kernel/KernelA.HH,1090"$ -$LK,"SYS_SEMA_TMBEAT",A="FL:::/Kernel/KernelA.HH,614"$ -$LK,"RLF_WINMGR",A="FL:::/Kernel/KernelA.HH,471"$ -$LK,"RLf_WINMGR",A="FL:::/Kernel/KernelA.HH,452"$ +$LK,"LoadKernel",A="FL:::/Kernel/KLoad.HC.Z,240",BI=417$ +$LK,"SCF_KEY_UP",A="FL:::/Kernel/KernelA.HH,3491"$ +$LK,"SCf_KEY_UP",A="FL:::/Kernel/KernelA.HH,3476"$ +$LK,"ICF_BY_VAL",A="FL:::/Kernel/KernelA.HH,1588"$ +$LK,"REG_RDX",A="FL:::/Kernel/KernelA.HH,1763"$ +$LK,"SEMA_TT",A="FL:::/Kernel/KernelA.HH,610"$ +$LK,"ATAPIReadBlks",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,416",BI=418$ +$LK,"REG_RIP",A="FL:::/Kernel/KernelA.HH,1770"$ +$LK,"DOCEF_FROM_START",A="FL:::/Kernel/KernelA.HH,990"$ +$LK,"progress2_max",A="FL:::/Kernel/KernelB.HH,217"$ +$LK,"DOCEf_FROM_START",A="FL:::/Kernel/KernelA.HH,1078"$ +$LK,"SEMA_JUST_PUMP_MSGS",A="FL:::/Kernel/KernelA.HH,613"$ +$LK,"RLF_WINMGR",A="FL:::/Kernel/KernelA.HH,474"$ +$LK,"RLf_WINMGR",A="FL:::/Kernel/KernelA.HH,454"$ $LK,"C:/Doc/D3.DD.Z",A="FL:::/Kernel/KernelB.HH,145"$ -$LK,"SUF_SCALE_INDENT",A="FL:::/Kernel/KernelA.HH,3796"$ -$LK,"CT_7_BIT",A="FL:::/Kernel/KernelA.HH,3745"$ -$LK,"PUSH_REGS",A="FL:::/Kernel/KernelA.HH,1767"$ +$LK,"SUF_SCALE_INDENT",A="FL:::/Kernel/KernelA.HH,3749"$ +$LK,"CT_7_BIT",A="FL:::/Kernel/KernelA.HH,3698"$ +$LK,"PUSH_REGS",A="FL:::/Kernel/KernelA.HH,1754"$ $LK,"MAX_I8",A="FL:::/Kernel/KernelA.HH,25"$ -$LK,"KbdMouseHandler",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,236",BI=426$ -$LK,"Color2Str",A="FL:::/Kernel/KDefine.HC.Z,127",BI=427$ -$LK,"MAllocIdent",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,407",BI=428$ -$LK,"EDF_COLLAPSE",A="FL:::/Kernel/KernelA.HH,1249"$ -$LK,"LAPIC_DFR",A="FL:::/Kernel/KernelA.HH,487"$ +$LK,"Color2Str",A="FL:::/Kernel/KDefine.HC.Z,127",BI=419$ +$LK,"MAllocIdent",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,407",BI=420$ +$LK,"EDF_COLLAPSE",A="FL:::/Kernel/KernelA.HH,1237"$ +$LK,"CTRL_ALT_X",A="FL:::/Kernel/KernelA.HH,620"$ +$LK,"LAPIC_DFR",A="FL:::/Kernel/KernelA.HH,490"$ $LK,"CDATE_BASE_DAY_OF_WEEK",A="FL:::/Kernel/KernelA.HH,185"$ -$LK,"StrFirstOcc",A="FL:::/Kernel/StrA.HC.Z,572",BI=429$ -$LK,"MSG_NULL",A="FL:::/Kernel/KernelA.HH,3227"$ -$LK,"CCF_QUESTION_HELP",A="FL:::/Kernel/KernelA.HH,2128"$ -$LK,"EDf_COLLAPSE",A="FL:::/Kernel/KernelA.HH,1255"$ -$LK,"MPrintq",A="FL:::/Kernel/StrPrint.HC.Z,113",BI=430$ -$LK,"AMAllocIdent",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,418",BI=431$ -$LK,"MEM_DFT_STK",A="FL:::/Kernel/KernelA.HH,2889"$ +$LK,"StrFirstOcc",A="FL:::/Kernel/StrA.HC.Z,567",BI=421$ +$LK,"MSG_NULL",A="FL:::/Kernel/KernelA.HH,3187"$ +$LK,"CCF_QUESTION_HELP",A="FL:::/Kernel/KernelA.HH,2115"$ +$LK,"EDf_COLLAPSE",A="FL:::/Kernel/KernelA.HH,1243"$ +$LK,"MPrintq",A="FL:::/Kernel/StrPrint.HC.Z,113",BI=422$ +$LK,"AMAllocIdent",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,418",BI=423$ +$LK,"MEM_DFT_STK",A="FL:::/Kernel/KernelA.HH,2857"$ $LK,"sys_font_cyrillic",A="FL:::/Kernel/FontCyrillic.HC.Z,3"$ -$LK,"SYS_FOCUS_TASK",A="FL:::/Kernel/KStart32.HC.Z,49"$ -$LK,"DYING_JIFFIES",A="FL:::/Kernel/KernelA.HH,3315"$ -$LK,"FUF_JUST_DD",A="FL:::/Kernel/KernelA.HH,2610"$ -$LK,"FUf_JUST_DD",A="FL:::/Kernel/KernelA.HH,2583"$ +$LK,"SYS_FOCUS_TASK",A="FL:::/Kernel/KStart32.HC.Z,63"$ +$LK,"DYING_JIFFIES",A="FL:::/Kernel/KernelA.HH,3276"$ +$LK,"FUF_JUST_DD",A="FL:::/Kernel/KernelA.HH,2597"$ +$LK,"FUf_JUST_DD",A="FL:::/Kernel/KernelA.HH,2570"$ $LK,"dbg",A="FL:::/Kernel/KGlbls.HC.Z,22"$ -$LK,"QSort",A="FL:::/Kernel/QSort.HC.Z,85",BI=432$ +$LK,"QSort",A="FL:::/Kernel/QSort.HC.Z,85",BI=424$ $LK,"OutU32",A="FL:::/Kernel/KernelB.HH,79"$ $LK,"OutU16",A="FL:::/Kernel/KernelB.HH,78"$ -$LK,"SYS_SEMA_JUST_PUMP_MSGS",A="FL:::/Kernel/KernelA.HH,613"$ -$LK,"LAPIC_ICR_HIGH",A="FL:::/Kernel/KernelA.HH,497"$ -$LK,"LMF_IGNORE_CASE",A="FL:::/Kernel/KernelA.HH,3806"$ -$LK,"SFF_IGNORE_CASE",A="FL:::/Kernel/KernelA.HH,3800"$ +$LK,"LAPIC_ICR_HIGH",A="FL:::/Kernel/KernelA.HH,500"$ +$LK,"LMF_IGNORE_CASE",A="FL:::/Kernel/KernelA.HH,3759"$ +$LK,"SFF_IGNORE_CASE",A="FL:::/Kernel/KernelA.HH,3753"$ $LK,"HashRemDel",A="FL:::/Kernel/KHashA.HC.Z,264"$ -$LK,"REG_RSI",A="FL:::/Kernel/KernelA.HH,1780"$ +$LK,"REG_RSI",A="FL:::/Kernel/KernelA.HH,1767"$ $LK,"HashAdd",A="FL:::/Kernel/KHashA.HC.Z,262"$ -$LK,"mp_cnt_lock",A="FL:::/Kernel/KernelB.HH,234"$ -$LK,"MLF_DOT_DOT_DOT",A="FL:::/Kernel/KernelA.HH,779"$ -$LK,"IsSuspended",A="FL:::/Kernel/KTask.HC.Z,76",BI=433$ -$LK,"CAlloc",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,395",BI=434$ -$LK,"BDF_INITIALIZED",A="FL:::/Kernel/KernelA.HH,2640"$ -$LK,"CAsmUnresolvedRef",A="FL:::/Kernel/KernelA.HH,1854"$ -$LK,"BDf_INITIALIZED",A="FL:::/Kernel/KernelA.HH,2650"$ -$LK,"DOCT_SPRITE",A="FL:::/Kernel/KernelA.HH,938"$ -$LK,"WClustersBlks",A="FL:::/Kernel/BlkDev/DskCluster.HC.Z,92",BI=435$ -$LK,"RClustersBlks",A="FL:::/Kernel/BlkDev/DskCluster.HC.Z,46",BI=436$ +$LK,"mp_cnt_lock",A="FL:::/Kernel/KernelB.HH,240"$ +$LK,"MLF_DOT_DOT_DOT",A="FL:::/Kernel/KernelA.HH,767"$ +$LK,"IsSuspended",A="FL:::/Kernel/KTask.HC.Z,91",BI=425$ +$LK,"CAlloc",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,395",BI=426$ +$LK,"BDF_INITIALIZED",A="FL:::/Kernel/KernelA.HH,2627"$ +$LK,"CAsmUnresolvedRef",A="FL:::/Kernel/KernelA.HH,1841"$ +$LK,"BDf_INITIALIZED",A="FL:::/Kernel/KernelA.HH,2637"$ +$LK,"DOCT_SPRITE",A="FL:::/Kernel/KernelA.HH,926"$ +$LK,"WClustersBlks",A="FL:::/Kernel/BlkDev/DskCluster.HC.Z,92",BI=427$ +$LK,"RClustersBlks",A="FL:::/Kernel/BlkDev/DskCluster.HC.Z,46",BI=428$ $LK,"sys_neg_pows_lets",A="FL:::/Kernel/StrPrint.HC.Z,201"$ -$LK,"progress3_max",A="FL:::/Kernel/KernelB.HH,219"$ +$LK,"progress3_max",A="FL:::/Kernel/KernelB.HH,223"$ $LK,"SqrI64",A="FL:::/Kernel/KernelB.HH,107"$ -$LK,"BDF_INIT_IN_PROGRESS",A="FL:::/Kernel/KernelA.HH,2646"$ -$LK,"OPTF_ECHO",A="FL:::/Kernel/KernelA.HH,1547"$ -$LK,"OPTf_ECHO",A="FL:::/Kernel/KernelA.HH,1533"$ -$LK,"LAPIC_EOI",A="FL:::/Kernel/KernelA.HH,485"$ +$LK,"BDF_INIT_IN_PROGRESS",A="FL:::/Kernel/KernelA.HH,2633"$ +$LK,"OPTF_ECHO",A="FL:::/Kernel/KernelA.HH,1535"$ +$LK,"OPTf_ECHO",A="FL:::/Kernel/KernelA.HH,1521"$ +$LK,"LAPIC_EOI",A="FL:::/Kernel/KernelA.HH,488"$ $LK,"sys_pos_pows_lets",A="FL:::/Kernel/StrPrint.HC.Z,200"$ -$LK,"QueSize",A="FL:::/Kernel/KDataTypes.HC.Z,76",BI=437$ +$LK,"QueSize",A="FL:::/Kernel/KDataTypes.HC.Z,76",BI=429$ $LK,"LIN_CONGRUE_A",A="FL:::/Kernel/KMathB.HC.Z,74"$ -$LK,"CT_8_BIT",A="FL:::/Kernel/KernelA.HH,3746"$ -$LK,"REG_RSP",A="FL:::/Kernel/KernelA.HH,1778"$ -$LK,"CtrlAltDel",A="FL:::/Kernel/KeyDev.HC.Z,128",BI=438$ +$LK,"VM_NATIVE",A="FL:::/Kernel/KernelA.HH,3890"$ +$LK,"OS_NATIVE",A="FL:::/Kernel/KernelA.HH,3885"$ +$LK,"CT_8_BIT",A="FL:::/Kernel/KernelA.HH,3699"$ +$LK,"REG_RSP",A="FL:::/Kernel/KernelA.HH,1765"$ +$LK,"CtrlAltDel",A="FL:::/Kernel/KeyDev.HC.Z,128",BI=430$ $LK,"LIN_CONGRUE_C",A="FL:::/Kernel/KMathB.HC.Z,75"$ -$LK,"CTRLF_CAPTURE_LEFT_IP",A="FL:::/Kernel/KernelA.HH,3096"$ -$LK,"LFSF_DEFINE",A="FL:::/Kernel/KernelA.HH,2034"$ -$LK,"OPTf_WARN_HEADER_MISMATCH",A="FL:::/Kernel/KernelA.HH,1538"$ -$LK,"BLK_SIZE_BITS",A="FL:::/Kernel/KernelA.HH,2296"$ -$LK,"AOT_BIN_BLK_BITS",A="FL:::/Kernel/KernelA.HH,1795"$ -$LK,"HTT_FUN",A="FL:::/Kernel/KernelA.HH,689"$ +$LK,"LFSF_DEFINE",A="FL:::/Kernel/KernelA.HH,2021"$ +$LK,"OPTf_WARN_HEADER_MISMATCH",A="FL:::/Kernel/KernelA.HH,1526"$ +$LK,"BLK_SIZE_BITS",A="FL:::/Kernel/KernelA.HH,2283"$ +$LK,"AOT_BIN_BLK_BITS",A="FL:::/Kernel/KernelA.HH,1782"$ +$LK,"HTT_FUN",A="FL:::/Kernel/KernelA.HH,677"$ $LK,"I_DIV_ZERO",A="FL:::/Kernel/KernelA.HH,287"$ -$LK,"SrvCtrlInit",A="FL:::/Kernel/SrvCmd.HC.Z,18",BI=439$ -$LK,"DOCEF_DEFINE",A="FL:::/Kernel/KernelA.HH,969"$ -$LK,"DOCEf_DEFINE",A="FL:::/Kernel/KernelA.HH,1057"$ -$LK,"HeapCtrlInit",A="FL:::/Kernel/Mem/HeapCtrl.HC.Z,1",BI=440$ -$LK,"progress1",A="FL:::/Kernel/KernelB.HH,206"$ +$LK,"DOCEF_DEFINE",A="FL:::/Kernel/KernelA.HH,957"$ +$LK,"DOCEf_DEFINE",A="FL:::/Kernel/KernelA.HH,1045"$ +$LK,"HeapCtrlInit",A="FL:::/Kernel/Mem/HeapCtrl.HC.Z,1",BI=431$ +$LK,"SEMA_DBG_MODE",A="FL:::/Kernel/KernelA.HH,598"$ +$LK,"progress1",A="FL:::/Kernel/KernelB.HH,208"$ $LK,"Floor",A="FL:::/Kernel/KernelB.HH,131"$ -$LK,"CIPStateGlbls",A="FL:::/Kernel/KernelA.HH,3047"$ -$LK,"SYSf_CTRL_ALT_C",A="FL:::/Kernel/KernelA.HH,619"$ -$LK,"progress2",A="FL:::/Kernel/KernelB.HH,211"$ +$LK,"progress2",A="FL:::/Kernel/KernelB.HH,214"$ $LK,"_CLAMP_U64",A="FL:::/Kernel/KUtils.HC.Z,133"$ -$LK,"progress3",A="FL:::/Kernel/KernelB.HH,216"$ -$LK,"FUF_JUST_GR",A="FL:::/Kernel/KernelA.HH,2614"$ -$LK,"FUf_JUST_GR",A="FL:::/Kernel/KernelA.HH,2587"$ -$LK,"MPN_VECT",A="FL:::/Kernel/KernelA.HH,506"$ +$LK,"CMsStateGlbls",A="FL:::/Kernel/KernelA.HH,3012"$ +$LK,"progress3",A="FL:::/Kernel/KernelB.HH,220"$ +$LK,"FUF_JUST_GR",A="FL:::/Kernel/KernelA.HH,2601"$ +$LK,"FUf_JUST_GR",A="FL:::/Kernel/KernelA.HH,2574"$ +$LK,"ICF_RES_TO_INT",A="FL:::/Kernel/KernelA.HH,1578"$ +$LK,"MPN_VECT",A="FL:::/Kernel/KernelA.HH,509"$ $LK,"MAX_U8",A="FL:::/Kernel/KernelA.HH,27"$ $LK,"RAWDR_COL",A="FL:::/Kernel/KDbg.HC.Z,289"$ -$LK,"progress4",A="FL:::/Kernel/KernelB.HH,221"$ -$LK,"CtrlAltCBSet",A="FL:::/Kernel/KeyDev.HC.Z,178",BI=441$ -$LK,"SysTimerRead",A="FL:::/Kernel/KMisc.HC.Z,61",BI=442$ +$LK,"progress4",A="FL:::/Kernel/KernelB.HH,226"$ +$LK,"CtrlAltCBSet",A="FL:::/Kernel/KeyDev.HC.Z,178",BI=432$ +$LK,"SysTimerRead",A="FL:::/Kernel/KMisc.HC.Z,61",BI=433$ $LK,"dev",A="FL:::/Kernel/KGlbls.HC.Z,23"$ -$LK,"MSG_IP_L_D_UP",A="FL:::/Kernel/KernelA.HH,3235"$ -$LK,"FunSegCacheFind",A="FL:::/Kernel/FunSeg.HC.Z,114",BI=443$ -$LK,"HTT_REG",A="FL:::/Kernel/KernelA.HH,695"$ -$LK,"StrFirstRem",A="FL:::/Kernel/StrA.HC.Z,582",BI=444$ +$LK,"FunSegCacheFind",A="FL:::/Kernel/FunSeg.HC.Z,114",BI=434$ +$LK,"MsUpdate",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,9",BI=435$ +$LK,"CInsReg",A="FL:::/Kernel/KernelA.HH,3896"$ +$LK,"HTT_REG",A="FL:::/Kernel/KernelA.HH,683"$ +$LK,"StrFirstRem",A="FL:::/Kernel/StrA.HC.Z,577",BI=436$ +$LK,"CTRLF_CAPTURE_LEFT_MS",A="FL:::/Kernel/KernelA.HH,3058"$ $LK,"SYS_VAR_INIT_VAL",A="FL::/Tmp.DD.Z,1"$ -$LK,"DCF_COMPRESSED",A="FL:::/Kernel/KernelA.HH,3624"$ -$LK,"ans",A="FL:::/Kernel/KernelA.HH,3418"$ -$LK,"ICF_DEL_PREV_INS",A="FL:::/Kernel/KernelA.HH,1616"$ -$LK,"LAPIC_LDR",A="FL:::/Kernel/KernelA.HH,488"$ -$LK,"BptFind",A="FL:::/Kernel/KDbg.HC.Z,344",BI=445$ +$LK,"DCF_COMPRESSED",A="FL:::/Kernel/KernelA.HH,3577"$ +$LK,"ans",A="FL:::/Kernel/KernelA.HH,3378"$ +$LK,"ICF_DEL_PREV_INS",A="FL:::/Kernel/KernelA.HH,1604"$ +$LK,"LAPIC_LDR",A="FL:::/Kernel/KernelA.HH,491"$ +$LK,"BptFind",A="FL:::/Kernel/KDbg.HC.Z,344",BI=437$ $LK,"kbd",A="FL:::/Kernel/KGlbls.HC.Z,26"$ -$LK,"progress4_max",A="FL:::/Kernel/KernelB.HH,224"$ -$LK,"MouseUpdatePost",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,126",BI=446$ -$LK,"HashDel",A="FL:::/Kernel/KHashB.HC.Z,59",BI=447$ -$LK,"CKbdStateGlbls",A="FL:::/Kernel/KernelA.HH,3004"$ +$LK,"progress4_max",A="FL:::/Kernel/KernelB.HH,229"$ +$LK,"HashDel",A="FL:::/Kernel/KHashB.HC.Z,59",BI=438$ +$LK,"ISOInit",A="FL:::/Kernel/BlkDev/DskCDDVD.HC.Z,5",BI=439$ +$LK,"CKbdStateGlbls",A="FL:::/Kernel/KernelA.HH,2972"$ $LK,"sys_font_std",A="FL:::/Kernel/FontStd.HC.Z,3"$ -$LK,"LinkedLstCopy",A="FL:::/Kernel/KDataTypes.HC.Z,11",BI=448$ -$LK,"IP_NULL",A="FL:::/Kernel/KernelA.HH,3045"$ -$LK,"MDF_NULL",A="FL:::/Kernel/KernelA.HH,1577"$ -$LK,"SYS_SEMA_DEV_MEM",A="FL:::/Kernel/KernelA.HH,607"$ -$LK,"ICF_A1_WAS_STK",A="FL:::/Kernel/KernelA.HH,1605"$ -$LK,"Let2Drv",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,177",BI=449$ -$LK,"fat_long_name_map",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,183"$ -$LK,"DskCacheInit",A="FL:::/Kernel/BlkDev/DskCache.HC.Z,1",BI=450$ -$LK,"CCF_NO_ABSS",A="FL:::/Kernel/KernelA.HH,2161"$ -$LK,"DOC_COLOR_MACRO",A="FL:::/Kernel/KernelA.HH,1138"$ -$LK,"LAPIC_LOG_DST",A="FL:::/Kernel/KernelA.HH,486"$ -$LK,"RLF_ADAM_SERVER",A="FL:::/Kernel/KernelA.HH,475"$ -$LK,"RClusters",A="FL:::/Kernel/BlkDev/DskCluster.HC.Z,87",BI=451$ -$LK,"VGAP_IDX",A="FL:::/Kernel/KernelA.HH,3728"$ -$LK,"ISO1CDirFill",A="FL:::/Kernel/BlkDev/FileSysISO.HC.Z,56",BI=452$ -$LK,"RLf_ADAM_SERVER",A="FL:::/Kernel/KernelA.HH,456"$ -$LK,"SCR_EXIT",A="FL:::/Kernel/SrvCmd.HC.Z,266"$ -$LK,"QueDel",A="FL:::/Kernel/KDataTypes.HC.Z,41",BI=453$ -$LK,"ICF_DONT_RESTORE",A="FL:::/Kernel/KernelA.HH,1618"$ -$LK,"RedSeaDirNew",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,352",BI=454$ -$LK,"IET_REL64_EXPORT",A="FL:::/Kernel/KernelA.HH,409"$ -$LK,"IET_REL32_EXPORT",A="FL:::/Kernel/KernelA.HH,407"$ -$LK,"CExcept",A="FL:::/Kernel/KernelA.HH,3167"$ +$LK,"LinkedLstCopy",A="FL:::/Kernel/KDataTypes.HC.Z,11",BI=440$ +$LK,"MDF_NULL",A="FL:::/Kernel/KernelA.HH,1565"$ +$LK,"char_bmp_alpha",A="FL:::/Kernel/StrA.HC.Z,325"$ +$LK,"Let2Drv",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,188",BI=441$ +$LK,"fat_long_name_map",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,171"$ +$LK,"DskCacheInit",A="FL:::/Kernel/BlkDev/DskCache.HC.Z,1",BI=442$ +$LK,"CCF_NO_ABSS",A="FL:::/Kernel/KernelA.HH,2148"$ +$LK,"DOC_COLOR_MACRO",A="FL:::/Kernel/KernelA.HH,1126"$ +$LK,"LAPIC_LOG_DST",A="FL:::/Kernel/KernelA.HH,489"$ +$LK,"RLF_ADAM_SERVER",A="FL:::/Kernel/KernelA.HH,478"$ +$LK,"RClusters",A="FL:::/Kernel/BlkDev/DskCluster.HC.Z,87",BI=443$ +$LK,"VGAP_IDX",A="FL:::/Kernel/KernelA.HH,3681"$ +$LK,"ISO1CDirFill",A="FL:::/Kernel/BlkDev/FileSysISO.HC.Z,56",BI=444$ +$LK,"RLf_ADAM_SERVER",A="FL:::/Kernel/KernelA.HH,458"$ +$LK,"QueDel",A="FL:::/Kernel/KDataTypes.HC.Z,41",BI=445$ +$LK,"Let2Let",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,161",BI=446$ +$LK,"ICF_DONT_RESTORE",A="FL:::/Kernel/KernelA.HH,1606"$ +$LK,"RedSeaDirNew",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,352",BI=447$ +$LK,"IET_REL64_EXPORT",A="FL:::/Kernel/KernelA.HH,408"$ +$LK,"IET_REL32_EXPORT",A="FL:::/Kernel/KernelA.HH,406"$ +$LK,"SYS_INIT_16MEG_SYS_CODE_BP",A="FL:::/Kernel/Mem/PageTables.HC.Z,157"$ +$LK,"CExcept",A="FL:::/Kernel/KernelA.HH,3129"$ $LK,"QueInsRev",A="FL:::/Kernel/KernelB.HH,70"$ -$LK,"SYSf_CTRL_ALT_X",A="FL:::/Kernel/KernelA.HH,620"$ -$LK,"SYS_EXTERN_TABLE",A="FL:::/Kernel/KStart32.HC.Z,25"$ -$LK,"PRTF_SLASH",A="FL:::/Kernel/KernelA.HH,3919"$ -$LK,"FUF_CLUSTER_ORDER",A="FL:::/Kernel/KernelA.HH,2616"$ -$LK,"DOCT_HTML_CODE",A="FL:::/Kernel/KernelA.HH,942"$ -$LK,"LAPIC_IRR",A="FL:::/Kernel/KernelA.HH,495"$ -$LK,"chars_bmp_getkey",A="FL:::/Kernel/StrA.HC.Z,371"$ +$LK,"SYS_EXTERN_TABLE",A="FL:::/Kernel/KStart32.HC.Z,35"$ +$LK,"PRTF_SLASH",A="FL:::/Kernel/KernelA.HH,3874"$ +$LK,"FUF_CLUSTER_ORDER",A="FL:::/Kernel/KernelA.HH,2603"$ +$LK,"DOCT_HTML_CODE",A="FL:::/Kernel/KernelA.HH,930"$ +$LK,"LAPIC_IRR",A="FL:::/Kernel/KernelA.HH,498"$ +$LK,"char_bmp_hex_numeric",A="FL:::/Kernel/StrA.HC.Z,353"$ $LK,"sys_run_level",A="FL:::/Kernel/KernelB.HH,41"$ -$LK,"JIFFY_FREQ",A="FL:::/Kernel/KernelA.HH,551"$ +$LK,"JIFFY_FREQ",A="FL:::/Kernel/KernelA.HH,554"$ $LK,"COrder2D3",A="FL:::/Kernel/KernelA.HH,201"$ -$LK,"TaskRegAddr",A="FL:::/Kernel/KDbg.HC.Z,266",BI=455$ -$LK,"DCSF_COMPRESSED",A="FL:::/Kernel/KernelA.HH,3646"$ -$LK,"LAPIC_ISR",A="FL:::/Kernel/KernelA.HH,493"$ +$LK,"TaskRegAddr",A="FL:::/Kernel/KDbg.HC.Z,266",BI=448$ +$LK,"DCSF_COMPRESSED",A="FL:::/Kernel/KernelA.HH,3599"$ +$LK,"LAPIC_ISR",A="FL:::/Kernel/KernelA.HH,496"$ $LK,"c32_eflags",A="FL:::/Kernel/PCIBIOS.HC.Z,158"$ $LK,"Pow10",A="FL:::/Kernel/KernelB.HH,138"$ -$LK,"ATA_WRITE_MULTI_EXT",A="FL:::/Kernel/KernelA.HH,2267"$ -$LK,"CCF_PREDEC",A="FL:::/Kernel/KernelA.HH,2153"$ +$LK,"ATA_WRITE_MULTI_EXT",A="FL:::/Kernel/KernelA.HH,2254"$ +$LK,"CCF_PREDEC",A="FL:::/Kernel/KernelA.HH,2140"$ $LK,"inf",A="FL:::/Kernel/KernelA.HH,48"$ $LK,"MIN_I8",A="FL:::/Kernel/KernelA.HH,24"$ $LK,"sys_macro_head",A="FL:::/Kernel/KGlbls.HC.Z,4"$ -$LK,"XTalk",A="FL:::/Kernel/SrvCmd.HC.Z,447",BI=456$ +$LK,"XTalk",A="FL:::/Kernel/Job.HC.Z,445",BI=449$ $LK,"SYS_ENTER_LONG_MODE",A="FL:::/Kernel/KStart64.HC.Z,44"$ $LK,"eps",A="FL:::/Kernel/KernelA.HH,58"$ -$LK,"LstSub",A="FL:::/Kernel/StrA.HC.Z,402",BI=457$ -$LK,"RLF_PATCHED",A="FL:::/Kernel/KernelA.HH,461"$ -$LK,"TaskDerivedValsUpdate",A="FL:::/Kernel/KTask.HC.Z,271",BI=458$ +$LK,"LstSub",A="FL:::/Kernel/StrA.HC.Z,397",BI=450$ +$LK,"RLF_PATCHED",A="FL:::/Kernel/KernelA.HH,463"$ +$LK,"TaskDerivedValsUpdate",A="FL:::/Kernel/KTask.HC.Z,286",BI=451$ $LK,"_HASH_ADD",A="FL:::/Kernel/KHashA.HC.Z,170"$ -$LK,"FRBlks",A="FL:::/Kernel/BlkDev/DskCFile.HC.Z,129",BI=459$ -$LK,"__TIME__",A="FL:::/Kernel/KernelA.HH,2024"$ -$LK,"RLf_PATCHED",A="FL:::/Kernel/KernelA.HH,442"$ -$LK,"FUf_CLUSTER_ORDER",A="FL:::/Kernel/KernelA.HH,2589"$ -$LK,"ACD_WORD_FILENAME",A="FL:::/Kernel/KernelA.HH,1496"$ -$LK,"ATTRf_BLINK",A="FL:::/Kernel/KernelA.HH,895"$ -$LK,"ATTRF_BLINK",A="FL:::/Kernel/KernelA.HH,890"$ -$LK,"XchgU8",A="FL:::/Kernel/KernelB.HH,267"$ -$LK,"TTS_TASK_NAME",A="FL:::/Kernel/KernelA.HH,3276"$ -$LK,"CKernel",A="FL:::/Kernel/KernelA.HH,419"$ -$LK,"IET_IMM_I64",A="FL:::/Kernel/KernelA.HH,404"$ +$LK,"FRBlks",A="FL:::/Kernel/BlkDev/DskCFile.HC.Z,129",BI=452$ +$LK,"MEM_E801",A="FL:::/Kernel/KStart16.HC.Z,31"$ +$LK,"__TIME__",A="FL:::/Kernel/KernelA.HH,2011"$ +$LK,"RLf_PATCHED",A="FL:::/Kernel/KernelA.HH,443"$ +$LK,"FUf_CLUSTER_ORDER",A="FL:::/Kernel/KernelA.HH,2576"$ +$LK,"MEM_E820",A="FL:::/Kernel/KStart16.HC.Z,32"$ +$LK,"ACD_WORD_FILENAME",A="FL:::/Kernel/KernelA.HH,1484"$ +$LK,"ATTRf_BLINK",A="FL:::/Kernel/KernelA.HH,883"$ +$LK,"ATTRF_BLINK",A="FL:::/Kernel/KernelA.HH,878"$ +$LK,"XchgU8",A="FL:::/Kernel/KernelB.HH,273"$ +$LK,"TTS_TASK_NAME",A="FL:::/Kernel/KernelA.HH,3236"$ +$LK,"CKernel",A="FL:::/Kernel/KernelA.HH,418"$ +$LK,"IET_IMM_I64",A="FL:::/Kernel/KernelA.HH,403"$ $LK,"log2_10",A="FL:::/Kernel/KernelA.HH,53"$ -$LK,"LTBLUE",A="FL:::/Kernel/KernelA.HH,2969"$ -$LK,"FAT32AllocClusters",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,456",BI=460$ -$LK,"DOCEf_TOP_Y",A="FL:::/Kernel/KernelA.HH,1079"$ -$LK,"DOCEF_TOP_Y",A="FL:::/Kernel/KernelA.HH,991"$ +$LK,"LTBLUE",A="FL:::/Kernel/KernelA.HH,2937"$ +$LK,"FAT32AllocClusters",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,444",BI=453$ +$LK,"DOCEf_TOP_Y",A="FL:::/Kernel/KernelA.HH,1067"$ +$LK,"DOCEF_TOP_Y",A="FL:::/Kernel/KernelA.HH,979"$ +$LK,"MsSet",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,42",BI=454$ $LK,"_CALLEXTNUM",A="FL:::/Kernel/KUtils.HC.Z,362"$ -$LK,"SCF_KEY_DESC",A="FL:::/Kernel/KernelA.HH,3551"$ -$LK,"SCf_KEY_DESC",A="FL:::/Kernel/KernelA.HH,3536"$ -$LK,"MSG_CMD",A="FL:::/Kernel/KernelA.HH,3228"$ +$LK,"SCF_KEY_DESC",A="FL:::/Kernel/KernelA.HH,3504"$ +$LK,"SCf_KEY_DESC",A="FL:::/Kernel/KernelA.HH,3489"$ +$LK,"MSG_CMD",A="FL:::/Kernel/KernelA.HH,3188"$ $LK,"IDTET_IRQ",A="FL:::/Kernel/KernelA.HH,282"$ -$LK,"CCF_LOCAL",A="FL:::/Kernel/KernelA.HH,2147"$ -$LK,"QueCnt",A="FL:::/Kernel/KDataTypes.HC.Z,65",BI=461$ -$LK,"chars_bmp_alpha",A="FL:::/Kernel/StrA.HC.Z,325"$ +$LK,"CCF_LOCAL",A="FL:::/Kernel/KernelA.HH,2134"$ +$LK,"QueCnt",A="FL:::/Kernel/KDataTypes.HC.Z,65",BI=455$ $LK,"SwapI64",A="FL:::/Kernel/KernelB.HH,111"$ $LK,"SqrU64",A="FL:::/Kernel/KernelB.HH,108"$ -$LK,"OPTf_NO_BUILTIN_CONST",A="FL:::/Kernel/KernelA.HH,1544"$ -$LK,"HTG_SRC_SYM",A="FL:::/Kernel/KernelA.HH,713"$ -$LK,"LAPIC_LVT_THERMAL",A="FL:::/Kernel/KernelA.HH,500"$ +$LK,"Panic",A="FL:::/Kernel/KDbg.HC.Z,638",BI=456$ +$LK,"OPTf_NO_BUILTIN_CONST",A="FL:::/Kernel/KernelA.HH,1532"$ +$LK,"HTG_SRC_SYM",A="FL:::/Kernel/KernelA.HH,701"$ +$LK,"LAPIC_LVT_THERMAL",A="FL:::/Kernel/KernelA.HH,503"$ $LK,"RFLAGf_IOPL0",A="FL:::/Kernel/KernelA.HH,317"$ -$LK,"IntsInit",A="FL:::/Kernel/KInts.HC.Z,129",BI=462$ +$LK,"IntsInit",A="FL:::/Kernel/KInts.HC.Z,129",BI=457$ $LK,"_XCHG_U8",A="FL:::/Kernel/KUtils.HC.Z,208"$ -$LK,"DOCEF_CHECK_COLLAPSABLE",A="FL:::/Kernel/KernelA.HH,1007"$ +$LK,"DOCEF_CHECK_COLLAPSABLE",A="FL:::/Kernel/KernelA.HH,995"$ $LK,"RFLAGf_IOPL1",A="FL:::/Kernel/KernelA.HH,318"$ -$LK,"FAT32FilesDel",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,726",BI=463$ -$LK,"DOCT_MENU_VAL",A="FL:::/Kernel/KernelA.HH,935"$ -$LK,"Bcd2Bin",A="FL:::/Kernel/KDate.HC.Z,123",BI=464$ -$LK,"CAllocAligned",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,434",BI=465$ -$LK,"MAllocAligned",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,423",BI=466$ +$LK,"FAT32FilesDel",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,714",BI=458$ +$LK,"DOCT_MENU_VAL",A="FL:::/Kernel/KernelA.HH,923"$ +$LK,"Bcd2Bin",A="FL:::/Kernel/KDate.HC.Z,123",BI=459$ +$LK,"CAllocAligned",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,434",BI=460$ +$LK,"MAllocAligned",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,423",BI=461$ $LK,"ext",A="FL:::/Kernel/KernelB.HH,53"$ -$LK,"FUN_SEG_CACHE_SIZE",A="FL:::/Kernel/KernelA.HH,3846"$ -$LK,"ACf_INIT_IN_PROGRESS",A="FL:::/Kernel/KernelA.HH,1481"$ -$LK,"RawDm",A="FL:::/Kernel/KDbg.HC.Z,250",BI=467$ -$LK,"ICf_DONT_POP_FLOAT0",A="FL:::/Kernel/KernelA.HH,1611"$ -$LK,"DskCacheAdd",A="FL:::/Kernel/BlkDev/DskCache.HC.Z,76",BI=468$ -$LK,"MPNMInt",A="FL:::/Kernel/MultiProc.HC.Z,159",BI=469$ +$LK,"FUN_SEG_CACHE_SIZE",A="FL:::/Kernel/KernelA.HH,3800"$ +$LK,"ACf_INIT_IN_PROGRESS",A="FL:::/Kernel/KernelA.HH,1469"$ +$LK,"RawDm",A="FL:::/Kernel/KDbg.HC.Z,250",BI=462$ +$LK,"ICf_DONT_POP_FLOAT0",A="FL:::/Kernel/KernelA.HH,1599"$ +$LK,"DskCacheAdd",A="FL:::/Kernel/BlkDev/DskCache.HC.Z,76",BI=463$ +$LK,"MPNMInt",A="FL:::/Kernel/MultiProc.HC.Z,159",BI=464$ $LK,"_MSIZE2",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,353"$ -$LK,"LTPURPLE",A="FL:::/Kernel/KernelA.HH,2973"$ -$LK,"RawDr",A="FL:::/Kernel/KDbg.HC.Z,291",BI=470$ +$LK,"LTPURPLE",A="FL:::/Kernel/KernelA.HH,2941"$ +$LK,"RawDr",A="FL:::/Kernel/KDbg.HC.Z,291",BI=465$ $LK,"StrICmp",A="FL:::/Kernel/StrA.HC.Z,311"$ -$LK,"ATAR0_DATA",A="FL:::/Kernel/KernelA.HH,2276"$ +$LK,"ATAR0_DATA",A="FL:::/Kernel/KernelA.HH,2263"$ $LK,"MIN_U8",A="FL:::/Kernel/KernelA.HH,26"$ -$LK,"OPTf_TRACE",A="FL:::/Kernel/KernelA.HH,1534"$ -$LK,"HTG_FLAGS_MASK",A="FL:::/Kernel/KernelA.HH,711"$ -$LK,"DirFilesSort",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,92",BI=471$ -$LK,"HashLstAdd",A="FL:::/Kernel/KHashB.HC.Z,185",BI=472$ -$LK,"ACAlloc",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,402",BI=473$ -$LK,"SYS_PROGRESS1_T0",A="FL:::/Kernel/KStart32.HC.Z,33"$ +$LK,"OPTf_TRACE",A="FL:::/Kernel/KernelA.HH,1522"$ +$LK,"HTG_FLAGS_MASK",A="FL:::/Kernel/KernelA.HH,699"$ +$LK,"DirFilesSort",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,92",BI=466$ +$LK,"HashLstAdd",A="FL:::/Kernel/KHashB.HC.Z,185",BI=467$ +$LK,"ACAlloc",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,402",BI=468$ +$LK,"SYS_PROGRESS1_T0",A="FL:::/Kernel/KStart32.HC.Z,43"$ $LK,"SYS_RUN_LEVEL",A="FL:::/Kernel/KStart16.HC.Z,26"$ -$LK,"SCF_SCROLL",A="FL:::/Kernel/KernelA.HH,3544"$ -$LK,"SCf_SCROLL",A="FL:::/Kernel/KernelA.HH,3529"$ -$LK,"SndRst",A="FL:::/Kernel/KMisc.HC.Z,190",BI=474$ -$LK,"BDf_INIT_IN_PROGRESS",A="FL:::/Kernel/KernelA.HH,2656"$ -$LK,"TK_SUB_EQU",A="FL:::/Kernel/KernelA.HH,2097"$ -$LK,"TK_DIV_EQU",A="FL:::/Kernel/KernelA.HH,2092"$ -$LK,"OC_BPT",A="FL:::/Kernel/KernelA.HH,1759"$ -$LK,"DOCF_HIDE_CURSOR",A="FL:::/Kernel/KernelA.HH,1270"$ -$LK,"IOREDTAB",A="FL:::/Kernel/KernelA.HH,516"$ +$LK,"SCF_SCROLL",A="FL:::/Kernel/KernelA.HH,3497"$ +$LK,"SCf_SCROLL",A="FL:::/Kernel/KernelA.HH,3482"$ +$LK,"SndRst",A="FL:::/Kernel/KMisc.HC.Z,206",BI=469$ +$LK,"BDf_INIT_IN_PROGRESS",A="FL:::/Kernel/KernelA.HH,2643"$ +$LK,"TK_SUB_EQU",A="FL:::/Kernel/KernelA.HH,2084"$ +$LK,"TK_DIV_EQU",A="FL:::/Kernel/KernelA.HH,2079"$ +$LK,"OC_BPT",A="FL:::/Kernel/KernelA.HH,1746"$ +$LK,"DOCF_HIDE_CURSOR",A="FL:::/Kernel/KernelA.HH,1258"$ +$LK,"IOREDTAB",A="FL:::/Kernel/KernelA.HH,519"$ $LK,"Fstcw",A="FL:::/Kernel/KernelB.HH,132"$ -$LK,"MSG_IP_L_DOWN_UP",A="FL:::/Kernel/KernelA.HH,3242"$ -$LK,"LAPIC_TMR",A="FL:::/Kernel/KernelA.HH,494"$ +$LK,"MSG_MS_L_DOWN_UP",A="FL:::/Kernel/KernelA.HH,3202"$ +$LK,"LAPIC_TMR",A="FL:::/Kernel/KernelA.HH,497"$ $LK,"C32_EFLAGS",A="FL:::/Kernel/PCIBIOS.HC.Z,64"$ -$LK,"sys_compile_time",A="FL:::/Kernel/KernelB.HH,201"$ +$LK,"sys_compile_time",A="FL:::/Kernel/KernelB.HH,203"$ $LK,"_D3_DIV_EQU",A="FL:::/Kernel/KMathA.HC.Z,289"$ $LK,"_D3_SUB_EQU",A="FL:::/Kernel/KMathA.HC.Z,256"$ -$LK,"TASKf_SUSPENDED",A="FL:::/Kernel/KernelA.HH,3283"$ -$LK,"FUF_DIFF",A="FL:::/Kernel/KernelA.HH,2597"$ -$LK,"FUf_DIFF",A="FL:::/Kernel/KernelA.HH,2570"$ -$LK,"DOCf_HIDE_CURSOR",A="FL:::/Kernel/KernelA.HH,1306"$ -$LK,"CHashImport",A="FL:::/Kernel/KernelA.HH,765"$ -$LK,"CMT_LABEL",A="FL:::/Kernel/KernelA.HH,1685"$ +$LK,"TASKf_SUSPENDED",A="FL:::/Kernel/KernelA.HH,3243"$ +$LK,"FUF_DIFF",A="FL:::/Kernel/KernelA.HH,2584"$ +$LK,"FUf_DIFF",A="FL:::/Kernel/KernelA.HH,2557"$ +$LK,"DOCf_HIDE_CURSOR",A="FL:::/Kernel/KernelA.HH,1294"$ +$LK,"CHashImport",A="FL:::/Kernel/KernelA.HH,753"$ +$LK,"CMT_LABEL",A="FL:::/Kernel/KernelA.HH,1672"$ $LK,"C32_ADD",A="FL:::/Kernel/PCIBIOS.HC.Z,122"$ -$LK,"MEM_PAGE_BITS",A="FL:::/Kernel/KernelA.HH,2878"$ -$LK,"MBS_USED_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,2858"$ -$LK,"HeapCtrlDel",A="FL:::/Kernel/Mem/HeapCtrl.HC.Z,15",BI=475$ +$LK,"MBS_USED_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,2826"$ +$LK,"HeapCtrlDel",A="FL:::/Kernel/Mem/HeapCtrl.HC.Z,15",BI=470$ $LK,"_CALLEXTSTR",A="FL:::/Kernel/KUtils.HC.Z,392"$ -$LK,"SYS_PROGRESS2_T0",A="FL:::/Kernel/KStart32.HC.Z,37"$ -$LK,"FF_USE_OLD_DATETIME",A="FL:::/Kernel/KernelA.HH,2787"$ -$LK,"BDT_ISO_FILE_READ",A="FL:::/Kernel/KernelA.HH,2634"$ -$LK,"CCf_PAREN",A="FL:::/Kernel/KernelA.HH,2163"$ -$LK,"CCF_PAREN",A="FL:::/Kernel/KernelA.HH,2162"$ -$LK,"ACD_BLK_SIZE",A="FL:::/Kernel/KernelA.HH,1510"$ +$LK,"SYS_PROGRESS2_T0",A="FL:::/Kernel/KStart32.HC.Z,48"$ +$LK,"FF_USE_OLD_DATETIME",A="FL:::/Kernel/KernelA.HH,2775"$ +$LK,"BDT_ISO_FILE_READ",A="FL:::/Kernel/KernelA.HH,2621"$ +$LK,"CCf_PAREN",A="FL:::/Kernel/KernelA.HH,2150"$ +$LK,"CCF_PAREN",A="FL:::/Kernel/KernelA.HH,2149"$ +$LK,"ACD_BLK_SIZE",A="FL:::/Kernel/KernelA.HH,1498"$ $LK,"CSysLimitBase",A="FL:::/Kernel/KernelA.HH,350"$ -$LK,"DVD_BLK_SIZE",A="FL:::/Kernel/KernelA.HH,2298"$ +$LK,"DVD_BLK_SIZE",A="FL:::/Kernel/KernelA.HH,2285"$ $LK,"QueIns",A="FL:::/Kernel/KernelB.HH,68"$ -$LK,"CGrSym",A="FL:::/Kernel/KernelA.HH,3651"$ -$LK,"ATAR0_FEAT",A="FL:::/Kernel/KernelA.HH,2277"$ -$LK,"RLF_HOME",A="FL:::/Kernel/KernelA.HH,473"$ -$LK,"RLf_HOME",A="FL:::/Kernel/KernelA.HH,454"$ +$LK,"CGrSym",A="FL:::/Kernel/KernelA.HH,3604"$ +$LK,"ATAR0_FEAT",A="FL:::/Kernel/KernelA.HH,2264"$ +$LK,"RLF_HOME",A="FL:::/Kernel/KernelA.HH,476"$ +$LK,"RLf_HOME",A="FL:::/Kernel/KernelA.HH,456"$ $LK,"snd",A="FL:::/Kernel/KGlbls.HC.Z,29"$ -$LK,"SC_ENTER",A="FL:::/Kernel/KernelA.HH,3559"$ -$LK,"LTCYAN",A="FL:::/Kernel/KernelA.HH,2971"$ -$LK,"FUF_WHOLE_LABELS_AFTER",A="FL:::/Kernel/KernelA.HH,2621"$ -$LK,"CCF_PREINC",A="FL:::/Kernel/KernelA.HH,2152"$ -$LK,"RECALCt_TO_SCRN",A="FL:::/Kernel/KernelA.HH,1349"$ -$LK,"HTT_IMPORT_SYS_SYM",A="FL:::/Kernel/KernelA.HH,684"$ -$LK,"HTT_EXPORT_SYS_SYM",A="FL:::/Kernel/KernelA.HH,683"$ -$LK,"FunSegCacheAdd",A="FL:::/Kernel/FunSeg.HC.Z,92",BI=476$ -$LK,"CTRLT_GENERIC",A="FL:::/Kernel/KernelA.HH,3089"$ -$LK,"CCF_KEEP_AT_SIGN",A="FL:::/Kernel/KernelA.HH,2136"$ -$LK,"RS_ATTR_DIR",A="FL:::/Kernel/KernelA.HH,2530"$ -$LK,"CCF_POSTDEC",A="FL:::/Kernel/KernelA.HH,2151"$ -$LK,"DirContextDel",A="FL:::/Kernel/BlkDev/DskDirContext.HC.Z,1",BI=477$ -$LK,"StrPrintFlags",A="FL:::/Kernel/StrB.HC.Z,177",BI=478$ -$LK,"SYS_PROGRESS3_T0",A="FL:::/Kernel/KStart32.HC.Z,41"$ -$LK,"TK_IFNDEF",A="FL:::/Kernel/KernelA.HH,2100"$ -$LK,"CMT_FLOAT_CONSTS",A="FL:::/Kernel/KernelA.HH,1690"$ -$LK,"CBinFile",A="FL:::/Kernel/KernelA.HH,373"$ -$LK,"SpawnQue",A="FL:::/Kernel/MultiProc.HC.Z,248",BI=479$ -$LK,"LAPIC_SVR",A="FL:::/Kernel/KernelA.HH,491"$ -$LK,"CMouseStateGlbls",A="FL:::/Kernel/KernelA.HH,3025"$ -$LK,"StrPrintFunSeg",A="FL:::/Kernel/FunSeg.HC.Z,134",BI=480$ -$LK,"ISO1_ATTR_DIR",A="FL:::/Kernel/KernelA.HH,2522"$ -$LK,"HashVal",A="FL:::/Kernel/KHashB.HC.Z,9",BI=481$ -$LK,"DOCEF_DFT_RAW_TYPE",A="FL:::/Kernel/KernelA.HH,1026"$ -$LK,"IET_IMM_U32",A="FL:::/Kernel/KernelA.HH,402"$ -$LK,"IET_IMM_U16",A="FL:::/Kernel/KernelA.HH,400"$ +$LK,"SC_ENTER",A="FL:::/Kernel/KernelA.HH,3512"$ +$LK,"LTCYAN",A="FL:::/Kernel/KernelA.HH,2939"$ +$LK,"FUF_WHOLE_LABELS_AFTER",A="FL:::/Kernel/KernelA.HH,2608"$ +$LK,"CCF_PREINC",A="FL:::/Kernel/KernelA.HH,2139"$ +$LK,"RECALCt_TO_SCRN",A="FL:::/Kernel/KernelA.HH,1337"$ +$LK,"HTT_IMPORT_SYS_SYM",A="FL:::/Kernel/KernelA.HH,672"$ +$LK,"HTT_EXPORT_SYS_SYM",A="FL:::/Kernel/KernelA.HH,671"$ +$LK,"char_bmp_filename",A="FL:::/Kernel/StrA.HC.Z,345"$ +$LK,"FunSegCacheAdd",A="FL:::/Kernel/FunSeg.HC.Z,92",BI=471$ +$LK,"CTRLT_GENERIC",A="FL:::/Kernel/KernelA.HH,3051"$ +$LK,"CCF_KEEP_AT_SIGN",A="FL:::/Kernel/KernelA.HH,2123"$ +$LK,"RS_ATTR_DIR",A="FL:::/Kernel/KernelA.HH,2517"$ +$LK,"CCF_POSTDEC",A="FL:::/Kernel/KernelA.HH,2138"$ +$LK,"ICF_ARG1_WAS_STK",A="FL:::/Kernel/KernelA.HH,1593"$ +$LK,"MEM_PHYSICAL_SPACE",A="FL:::/Kernel/KStart16.HC.Z,33"$ +$LK,"DirContextDel",A="FL:::/Kernel/BlkDev/DskDirContext.HC.Z,1",BI=472$ +$LK,"StrPrintFlags",A="FL:::/Kernel/StrB.HC.Z,177",BI=473$ +$LK,"SYS_PROGRESS3_T0",A="FL:::/Kernel/KStart32.HC.Z,53"$ +$LK,"TK_IFNDEF",A="FL:::/Kernel/KernelA.HH,2087"$ +$LK,"CMT_FLOAT_CONSTS",A="FL:::/Kernel/KernelA.HH,1677"$ +$LK,"CBinFile",A="FL:::/Kernel/KernelA.HH,372"$ +$LK,"SpawnQue",A="FL:::/Kernel/MultiProc.HC.Z,247",BI=474$ +$LK,"LAPIC_SVR",A="FL:::/Kernel/KernelA.HH,494"$ +$LK,"SEMA_NUM_SEMAS",A="FL:::/Kernel/KernelA.HH,616"$ +$LK,"StrPrintFunSeg",A="FL:::/Kernel/FunSeg.HC.Z,134",BI=475$ +$LK,"ISO1_ATTR_DIR",A="FL:::/Kernel/KernelA.HH,2509"$ +$LK,"HashVal",A="FL:::/Kernel/KHashB.HC.Z,9",BI=476$ +$LK,"DOCEF_DFT_RAW_TYPE",A="FL:::/Kernel/KernelA.HH,1014"$ +$LK,"IET_IMM_U32",A="FL:::/Kernel/KernelA.HH,401"$ +$LK,"IET_IMM_U16",A="FL:::/Kernel/KernelA.HH,399"$ +$LK,"KbdMsInit",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,348",BI=477$ $LK,"QueRem",A="FL:::/Kernel/KernelB.HH,72"$ -$LK,"TASKf_DISABLE_BPTS",A="FL:::/Kernel/KernelA.HH,3289"$ -$LK,"BDT_NULL",A="FL:::/Kernel/KernelA.HH,2631"$ +$LK,"SYS_PROGRESS1_TF",A="FL:::/Kernel/KStart32.HC.Z,44"$ +$LK,"TASKf_DISABLE_BPTS",A="FL:::/Kernel/KernelA.HH,3249"$ +$LK,"BDT_NULL",A="FL:::/Kernel/KernelA.HH,2618"$ $LK,"FarCall32",A="FL:::/Kernel/PCIBIOS.HC.Z,161"$ -$LK,"SYS_PROGRESS4_T0",A="FL:::/Kernel/KStart32.HC.Z,45"$ -$LK,"SCF_NO_SHIFT",A="FL:::/Kernel/KernelA.HH,3550"$ -$LK,"SCf_NO_SHIFT",A="FL:::/Kernel/KernelA.HH,3535"$ -$LK,"ARGT_MOFFS32",A="FL:::/Kernel/KernelA.HH,1914"$ -$LK,"ARGT_MOFFS16",A="FL:::/Kernel/KernelA.HH,1913"$ -$LK,"sys_heap_dbg",A="FL:::/Kernel/KernelB.HH,180"$ -$LK,"PRTF_LEFT_JUSTIFY",A="FL:::/Kernel/KernelA.HH,3915"$ -$LK,"FUF_SINGLE",A="FL:::/Kernel/KernelA.HH,2606"$ -$LK,"FUf_SINGLE",A="FL:::/Kernel/KernelA.HH,2579"$ -$LK,"DOCEf_DFT_RAW_TYPE",A="FL:::/Kernel/KernelA.HH,1112"$ -$LK,"DVDImageWriteTask",A="FL:::/Kernel/BlkDev/DskCDDVD.HC.Z,117",BI=482$ -$LK,"LTGRAY",A="FL:::/Kernel/KernelA.HH,2967"$ -$LK,"CoreAPSethInit",A="FL:::/Kernel/MultiProc.HC.Z,276",BI=483$ -$LK,"IRQKbd",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,411",BI=484$ -$LK,"QueVectU8Del",A="FL:::/Kernel/KDataTypes.HC.Z,132",BI=485$ +$LK,"SYS_PROGRESS4_T0",A="FL:::/Kernel/KStart32.HC.Z,58"$ +$LK,"SCF_NO_SHIFT",A="FL:::/Kernel/KernelA.HH,3503"$ +$LK,"SCf_NO_SHIFT",A="FL:::/Kernel/KernelA.HH,3488"$ +$LK,"ARGT_MOFFS32",A="FL:::/Kernel/KernelA.HH,1901"$ +$LK,"ARGT_MOFFS16",A="FL:::/Kernel/KernelA.HH,1900"$ +$LK,"sys_heap_dbg",A="FL:::/Kernel/KernelB.HH,179"$ +$LK,"PRTF_LEFT_JUSTIFY",A="FL:::/Kernel/KernelA.HH,3870"$ +$LK,"FUF_SINGLE",A="FL:::/Kernel/KernelA.HH,2593"$ +$LK,"FUf_SINGLE",A="FL:::/Kernel/KernelA.HH,2566"$ +$LK,"DOCEf_DFT_RAW_TYPE",A="FL:::/Kernel/KernelA.HH,1100"$ +$LK,"DVDImageWriteTask",A="FL:::/Kernel/BlkDev/DskCDDVD.HC.Z,117",BI=478$ +$LK,"LTGRAY",A="FL:::/Kernel/KernelA.HH,2935"$ +$LK,"CoreAPSethInit",A="FL:::/Kernel/MultiProc.HC.Z,275",BI=479$ +$LK,"IRQKbd",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,411",BI=480$ +$LK,"QueVectU8Del",A="FL:::/Kernel/KDataTypes.HC.Z,132",BI=481$ $LK,"SwapU32",A="FL:::/Kernel/KernelB.HH,115"$ $LK,"SwapU16",A="FL:::/Kernel/KernelB.HH,113"$ -$LK,"ARf_MESH_ED",A="FL:::/Kernel/KernelA.HH,3899"$ -$LK,"CAsmUndefHash",A="FL:::/Kernel/KernelA.HH,1811"$ -$LK,"HTt_IMPORT_SYS_SYM",A="FL:::/Kernel/KernelA.HH,654"$ -$LK,"HTt_EXPORT_SYS_SYM",A="FL:::/Kernel/KernelA.HH,653"$ +$LK,"ARf_MESH_ED",A="FL:::/Kernel/KernelA.HH,3854"$ +$LK,"CAsmUndefHash",A="FL:::/Kernel/KernelA.HH,1798"$ +$LK,"HTt_IMPORT_SYS_SYM",A="FL:::/Kernel/KernelA.HH,642"$ +$LK,"HTt_EXPORT_SYS_SYM",A="FL:::/Kernel/KernelA.HH,641"$ $LK,"C32_EDI",A="FL:::/Kernel/PCIBIOS.HC.Z,63"$ $LK,"pow10_I64",A="FL:::/Kernel/KGlbls.HC.Z,15"$ $LK,"sys_num_spawned_tasks",A="FL:::/Kernel/KGlbls.HC.Z,9"$ -$LK,"LAPIC_LVT_LINT0",A="FL:::/Kernel/KernelA.HH,502"$ -$LK,"Cluster2Blk",A="FL:::/Kernel/BlkDev/DskCluster.HC.Z,32",BI=486$ -$LK,"ArcFinishCompression",A="FL:::/Kernel/Compress.HC.Z,155",BI=487$ -$LK,"LAPIC_LVT_LINT1",A="FL:::/Kernel/KernelA.HH,503"$ +$LK,"LAPIC_LVT_LINT0",A="FL:::/Kernel/KernelA.HH,505"$ +$LK,"Cluster2Blk",A="FL:::/Kernel/BlkDev/DskCluster.HC.Z,32",BI=482$ +$LK,"ArcFinishCompression",A="FL:::/Kernel/Compress.HC.Z,155",BI=483$ +$LK,"LAPIC_LVT_LINT1",A="FL:::/Kernel/KernelA.HH,506"$ $LK,"sys_winmgr_task",A="FL:::/Kernel/KGlbls.HC.Z,11"$ -$LK,"SC_CAPS",A="FL:::/Kernel/KernelA.HH,3563"$ +$LK,"SYS_PROGRESS2_TF",A="FL:::/Kernel/KStart32.HC.Z,49"$ +$LK,"SC_CAPS",A="FL:::/Kernel/KernelA.HH,3516"$ $LK,"SYS_RAM_REBOOT_END",A="FL:::/Kernel/KStart64.HC.Z,99"$ -$LK,"REG_R8",A="FL:::/Kernel/KernelA.HH,1782"$ -$LK,"CMT_ARRAY_DIM",A="FL:::/Kernel/KernelA.HH,1691"$ -$LK,"ACD_POS_CHAR",A="FL:::/Kernel/KernelA.HH,1516"$ -$LK,"REGT_FSTK",A="FL:::/Kernel/KernelA.HH,745"$ -$LK,"ARGT_MOFFS64",A="FL:::/Kernel/KernelA.HH,1915"$ -$LK,"DOCF_COLOR_NAMES",A="FL:::/Kernel/KernelA.HH,1265"$ -$LK,"CRAXRBCRCXRDX",A="FL:::/Kernel/KernelA.HH,569"$ +$LK,"REG_R8",A="FL:::/Kernel/KernelA.HH,1769"$ +$LK,"CMT_ARRAY_DIM",A="FL:::/Kernel/KernelA.HH,1678"$ +$LK,"ACD_POS_CHAR",A="FL:::/Kernel/KernelA.HH,1504"$ +$LK,"REGT_FSTK",A="FL:::/Kernel/KernelA.HH,733"$ +$LK,"ARGT_MOFFS64",A="FL:::/Kernel/KernelA.HH,1902"$ +$LK,"DOCF_COLOR_NAMES",A="FL:::/Kernel/KernelA.HH,1253"$ +$LK,"CRAXRBCRCXRDX",A="FL:::/Kernel/KernelA.HH,572"$ $LK,"_SAVE_EXCEPT_REGS",A="FL:::/Kernel/KExcept.HC.Z,26"$ -$LK,"MDf_IMM",A="FL:::/Kernel/KernelA.HH,1571"$ -$LK,"DOCf_COLOR_NAMES",A="FL:::/Kernel/KernelA.HH,1301"$ -$LK,"RoundI64",A="FL:::/Kernel/KMathB.HC.Z,47",BI=488$ -$LK,"CSndGlbls",A="FL:::/Kernel/KernelA.HH,3838"$ -$LK,"EXT_HEAPLOG_FREE",A="FL:::/Kernel/KernelA.HH,579"$ -$LK,"DrvSerialNum",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,279",BI=489$ +$LK,"MDf_IMM",A="FL:::/Kernel/KernelA.HH,1559"$ +$LK,"DOCf_COLOR_NAMES",A="FL:::/Kernel/KernelA.HH,1289"$ +$LK,"RoundI64",A="FL:::/Kernel/KMathB.HC.Z,47",BI=484$ +$LK,"CSndGlbls",A="FL:::/Kernel/KernelA.HH,3792"$ +$LK,"EXT_HEAPLOG_FREE",A="FL:::/Kernel/KernelA.HH,582"$ +$LK,"DrvSerialNum",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,289",BI=485$ $LK,"Fstsw",A="FL:::/Kernel/KernelB.HH,133"$ -$LK,"TASKf_TASK_LOCK",A="FL:::/Kernel/KernelA.HH,3281"$ -$LK,"BDT_ATA",A="FL:::/Kernel/KernelA.HH,2633"$ +$LK,"TASKf_TASK_LOCK",A="FL:::/Kernel/KernelA.HH,3241"$ +$LK,"BDT_ATA",A="FL:::/Kernel/KernelA.HH,2620"$ $LK,"RFLAGf_RESUME",A="FL:::/Kernel/KernelA.HH,320"$ $LK,"C32_EAX",A="FL:::/Kernel/PCIBIOS.HC.Z,58"$ -$LK,"PortNop",A="FL:::/Kernel/KMisc.HC.Z,1",BI=490$ +$LK,"PortNop",A="FL:::/Kernel/KMisc.HC.Z,1",BI=486$ $LK,"StrNCmp",A="FL:::/Kernel/StrA.HC.Z,313"$ -$LK,"FUF_PUBLIC",A="FL:::/Kernel/KernelA.HH,2603"$ -$LK,"FUf_PUBLIC",A="FL:::/Kernel/KernelA.HH,2576"$ -$LK,"CFAT32FileInfoSect",A="FL:::/Kernel/KernelA.HH,2369"$ +$LK,"FUF_PUBLIC",A="FL:::/Kernel/KernelA.HH,2590"$ +$LK,"FUf_PUBLIC",A="FL:::/Kernel/KernelA.HH,2563"$ +$LK,"CFAT32FileInfoSect",A="FL:::/Kernel/KernelA.HH,2356"$ +$LK,"SYS_PROGRESS3_TF",A="FL:::/Kernel/KStart32.HC.Z,54"$ $LK,"SYS_HEAP_INIT_VAL",A="FL::/Tmp.DD.Z,1"$ -$LK,"CATAPITrack",A="FL:::/Kernel/KernelA.HH,2421"$ +$LK,"CATAPITrack",A="FL:::/Kernel/KernelA.HH,2408"$ $LK,"C32_EBX",A="FL:::/Kernel/PCIBIOS.HC.Z,59"$ -$LK,"CCF_HAS_MISC_DATA",A="FL:::/Kernel/KernelA.HH,2143"$ -$LK,"LFSF_DOC",A="FL:::/Kernel/KernelA.HH,2033"$ -$LK,"ACD_PRONUNCIATION_CHAR",A="FL:::/Kernel/KernelA.HH,1515"$ -$LK,"ACD_PRONUNCIATION",A="FL:::/Kernel/KernelA.HH,1504"$ +$LK,"CCF_HAS_MISC_DATA",A="FL:::/Kernel/KernelA.HH,2130"$ +$LK,"LFSF_DOC",A="FL:::/Kernel/KernelA.HH,2020"$ +$LK,"ACD_PRONUNCIATION_CHAR",A="FL:::/Kernel/KernelA.HH,1503"$ +$LK,"ACD_PRONUNCIATION",A="FL:::/Kernel/KernelA.HH,1492"$ $LK,"C32_ECX",A="FL:::/Kernel/PCIBIOS.HC.Z,60"$ -$LK,"FifoU8Peek",A="FL:::/Kernel/KDataTypes.HC.Z,205",BI=491$ +$LK,"FifoU8Peek",A="FL:::/Kernel/KDataTypes.HC.Z,205",BI=487$ +$LK,"JobsHndlr",A="FL:::/Kernel/Job.HC.Z,349",BI=488$ $LK,"C32_EDX",A="FL:::/Kernel/PCIBIOS.HC.Z,61"$ -$LK,"LoadPass1",A="FL:::/Kernel/KLoad.HC.Z,67",BI=492$ -$LK,"LoadPass2",A="FL:::/Kernel/KLoad.HC.Z,154",BI=493$ -$LK,"ARf_MANAGE_SLIDER",A="FL:::/Kernel/KernelA.HH,3901"$ -$LK,"CSndData",A="FL:::/Kernel/KernelA.HH,3831"$ -$LK,"SC_PAGE_DOWN",A="FL:::/Kernel/KernelA.HH,3571"$ -$LK,"OC_NOP",A="FL:::/Kernel/KernelA.HH,1758"$ -$LK,"MSG_KEY_UP",A="FL:::/Kernel/KernelA.HH,3230"$ -$LK,"SYS_SEMA_SINGLE_USER",A="FL:::/Kernel/KernelA.HH,604"$ -$LK,"TimeStampFreqCal",A="FL:::/Kernel/KMisc.HC.Z,85",BI=494$ -$LK,"QueVectU8Get",A="FL:::/Kernel/KDataTypes.HC.Z,140",BI=495$ -$LK,"DOCF_CARRIAGE_RETURN",A="FL:::/Kernel/KernelA.HH,1263"$ -$LK,"PostMsg",A="FL:::/Kernel/SrvCmd.HC.Z,241",BI=496$ -$LK,"SVCT_CALL",A="FL:::/Kernel/KernelA.HH,3195"$ -$LK,"MDf_REG",A="FL:::/Kernel/KernelA.HH,1572"$ -$LK,"ATAPISeek",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,131",BI=497$ -$LK,"MPrintDate",A="FL:::/Kernel/StrPrint.HC.Z,49",BI=498$ +$LK,"LoadPass1",A="FL:::/Kernel/KLoad.HC.Z,67",BI=489$ +$LK,"JOB_DONE",A="FL:::/Kernel/Job.HC.Z,265"$ +$LK,"LoadPass2",A="FL:::/Kernel/KLoad.HC.Z,154",BI=490$ +$LK,"MemPagTaskAlloc",A="FL:::/Kernel/Mem/MemPag.HC.Z,114",BI=491$ +$LK,"ARf_MANAGE_SLIDER",A="FL:::/Kernel/KernelA.HH,3856"$ +$LK,"CSndData",A="FL:::/Kernel/KernelA.HH,3785"$ +$LK,"SC_PAGE_DOWN",A="FL:::/Kernel/KernelA.HH,3524"$ +$LK,"OC_NOP",A="FL:::/Kernel/KernelA.HH,1745"$ +$LK,"IntCore0TimerHndlr",A="FL:::/Kernel/KMisc.HC.Z,47",BI=492$ +$LK,"SYS_PROGRESS4_TF",A="FL:::/Kernel/KStart32.HC.Z,59"$ +$LK,"MSG_KEY_UP",A="FL:::/Kernel/KernelA.HH,3190"$ +$LK,"TimeStampFreqCal",A="FL:::/Kernel/KMisc.HC.Z,85",BI=493$ +$LK,"QueVectU8Get",A="FL:::/Kernel/KDataTypes.HC.Z,140",BI=494$ +$LK,"char_bmp_macro",A="FL:::/Kernel/StrA.HC.Z,371"$ +$LK,"DOCF_CARRIAGE_RETURN",A="FL:::/Kernel/KernelA.HH,1251"$ +$LK,"PostMsg",A="FL:::/Kernel/Job.HC.Z,242",BI=495$ +$LK,"MDf_REG",A="FL:::/Kernel/KernelA.HH,1560"$ +$LK,"ATAPISeek",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,131",BI=496$ +$LK,"MPrintDate",A="FL:::/Kernel/StrPrint.HC.Z,49",BI=497$ $LK,"_BIT_FIELD_EXT_U32",A="FL:::/Kernel/KUtils.HC.Z,167"$ -$LK,"SC_F10",A="FL:::/Kernel/KernelA.HH,3585"$ -$LK,"SC_F11",A="FL:::/Kernel/KernelA.HH,3586"$ -$LK,"SYS_SEMA_TT",A="FL:::/Kernel/KernelA.HH,610"$ -$LK,"Silent",A="FL:::/Kernel/KMisc.HC.Z,235",BI=499$ -$LK,"SC_F12",A="FL:::/Kernel/KernelA.HH,3587"$ -$LK,"WIF_FOCUS_TASK_CTRLS",A="FL:::/Kernel/KernelA.HH,1422"$ -$LK,"CCF_POSTINC",A="FL:::/Kernel/KernelA.HH,2150"$ -$LK,"CCF_IN_IF",A="FL:::/Kernel/KernelA.HH,2131"$ -$LK,"DrvMakeFreeSlot",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,38",BI=500$ +$LK,"SC_F10",A="FL:::/Kernel/KernelA.HH,3538"$ +$LK,"SC_F11",A="FL:::/Kernel/KernelA.HH,3539"$ +$LK,"JOB_CONT",A="FL:::/Kernel/Job.HC.Z,266"$ +$LK,"Silent",A="FL:::/Kernel/KMisc.HC.Z,251",BI=498$ +$LK,"SC_F12",A="FL:::/Kernel/KernelA.HH,3540"$ +$LK,"WIF_FOCUS_TASK_CTRLS",A="FL:::/Kernel/KernelA.HH,1410"$ +$LK,"CCF_POSTINC",A="FL:::/Kernel/KernelA.HH,2137"$ +$LK,"CCF_IN_IF",A="FL:::/Kernel/KernelA.HH,2118"$ +$LK,"DrvMakeFreeSlot",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,38",BI=499$ $LK,"HashStr",A="FL:::/Kernel/KHashA.HC.Z,254"$ -$LK,"CHashExport",A="FL:::/Kernel/KernelA.HH,760"$ -$LK,"FifoU8Del",A="FL:::/Kernel/KDataTypes.HC.Z,167",BI=501$ -$LK,"DrvIsWritable",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,199",BI=502$ -$LK,"MDf_SIB",A="FL:::/Kernel/KernelA.HH,1574"$ -$LK,"chars_bmp_printable",A="FL:::/Kernel/StrA.HC.Z,381"$ +$LK,"CHashExport",A="FL:::/Kernel/KernelA.HH,748"$ +$LK,"FifoU8Del",A="FL:::/Kernel/KDataTypes.HC.Z,167",BI=500$ +$LK,"DrvIsWritable",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,206",BI=501$ +$LK,"MDf_SIB",A="FL:::/Kernel/KernelA.HH,1562"$ +$LK,"Freq2Ona",A="FL:::/Kernel/KMisc.HC.Z,171",BI=502$ $LK,"FWBlks",A="FL:::/Kernel/BlkDev/DskCFile.HC.Z,181",BI=503$ -$LK,"RLF_COMPILER",A="FL:::/Kernel/KernelA.HH,469"$ -$LK,"RLf_COMPILER",A="FL:::/Kernel/KernelA.HH,450"$ +$LK,"RLF_COMPILER",A="FL:::/Kernel/KernelA.HH,472"$ +$LK,"RLf_COMPILER",A="FL:::/Kernel/KernelA.HH,452"$ $LK,"SYS_INIT_PAGE_TABLES",A="FL:::/Kernel/Mem/PageTables.HC.Z,6"$ -$LK,"TASK_NAME_LEN",A="FL:::/Kernel/KernelA.HH,3307"$ -$LK,"COLORROP_COLORS_MASK",A="FL:::/Kernel/KernelA.HH,2989"$ +$LK,"TASK_NAME_LEN",A="FL:::/Kernel/KernelA.HH,3267"$ +$LK,"COLORROP_COLORS_MASK",A="FL:::/Kernel/KernelA.HH,2957"$ $LK,"C32_ESI",A="FL:::/Kernel/PCIBIOS.HC.Z,62"$ $LK,"BlkPoolsInit",A="FL:::/Kernel/Mem/BlkPool.HC.Z,29",BI=504$ -$LK,"SYS_DATA_BP",A="FL:::/Kernel/KStart32.HC.Z,28"$ -$LK,"VGAP_PALETTE_DATA",A="FL:::/Kernel/KernelA.HH,3733"$ -$LK,"ATAR0_HCYL",A="FL:::/Kernel/KernelA.HH,2281"$ -$LK,"DOCET_SEL",A="FL:::/Kernel/KernelA.HH,950"$ +$LK,"SYS_DATA_BP",A="FL:::/Kernel/KStart32.HC.Z,38"$ +$LK,"VGAP_PALETTE_DATA",A="FL:::/Kernel/KernelA.HH,3686"$ +$LK,"ATAR0_HCYL",A="FL:::/Kernel/KernelA.HH,2268"$ +$LK,"DOCET_SEL",A="FL:::/Kernel/KernelA.HH,938"$ $LK,"sys_code_bp",A="FL:::/Kernel/KernelB.HH,189"$ $LK,"RepOutU32",A="FL:::/Kernel/KernelB.HH,90"$ $LK,"RepOutU16",A="FL:::/Kernel/KernelB.HH,88"$ -$LK,"TK_SUBSCRIPT",A="FL:::/Kernel/KernelA.HH,2069"$ -$LK,"WIG_TASK_DFT",A="FL:::/Kernel/KernelA.HH,1432"$ -$LK,"REGT_NONE",A="FL:::/Kernel/KernelA.HH,739"$ -$LK,"ARf_PSALMODY_JUKEBOX",A="FL:::/Kernel/KernelA.HH,3898"$ -$LK,"DOCEf_HTML_LINK",A="FL:::/Kernel/KernelA.HH,1058"$ -$LK,"DOCEF_HTML_LINK",A="FL:::/Kernel/KernelA.HH,970"$ +$LK,"TK_SUBSCRIPT",A="FL:::/Kernel/KernelA.HH,2056"$ +$LK,"WIG_TASK_DFT",A="FL:::/Kernel/KernelA.HH,1420"$ +$LK,"REGT_NONE",A="FL:::/Kernel/KernelA.HH,727"$ +$LK,"ARf_PSALMODY_JUKEBOX",A="FL:::/Kernel/KernelA.HH,3853"$ +$LK,"DOCEf_HTML_LINK",A="FL:::/Kernel/KernelA.HH,1046"$ +$LK,"DOCEF_HTML_LINK",A="FL:::/Kernel/KernelA.HH,958"$ $LK,"NORMAL_KEY_SCAN_DECODE_TABLE",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,3"$ $LK,"LinkedLstSize",A="FL:::/Kernel/KDataTypes.HC.Z,31",BI=505$ $LK,"SSF_NO_COMPRESSION",A="FL:::/Kernel/KernelA.HH,225"$ +$LK,"RLF_16MEG_ADAM_HEAP_CTRL",A="FL:::/Kernel/KernelA.HH,466"$ +$LK,"RLf_16MEG_ADAM_HEAP_CTRL",A="FL:::/Kernel/KernelA.HH,446"$ $LK,"DirContextNew",A="FL:::/Kernel/BlkDev/DskDirContext.HC.Z,23",BI=506$ $LK,"_SET_MSR",A="FL:::/Kernel/KUtils.HC.Z,458"$ -$LK,"HClf_LOCKED",A="FL:::/Kernel/KernelA.HH,2906"$ -$LK,"ACD_EXTRA_END",A="FL:::/Kernel/KernelA.HH,1509"$ -$LK,"SetRFlags",A="FL:::/Kernel/KernelB.HH,253"$ -$LK,"GetRFlags",A="FL:::/Kernel/KernelB.HH,247"$ -$LK,"DOCEF_RIGHT_MACRO",A="FL:::/Kernel/KernelA.HH,974"$ -$LK,"MSG_IP_MOVE",A="FL:::/Kernel/KernelA.HH,3231"$ -$LK,"SVCT_TEXT_INPUT",A="FL:::/Kernel/KernelA.HH,3191"$ -$LK,"DOClf_LOCKED",A="FL:::/Kernel/KernelA.HH,1334"$ -$LK,"CallStkGrow",A="FL:::/Kernel/KTask.HC.Z,95",BI=507$ -$LK,"ATAR0_NSECT",A="FL:::/Kernel/KernelA.HH,2278"$ -$LK,"DOCEf_RIGHT_MACRO",A="FL:::/Kernel/KernelA.HH,1062"$ -$LK,"RLF_DOC",A="FL:::/Kernel/KernelA.HH,470"$ -$LK,"chars_bmp_macro",A="FL:::/Kernel/StrA.HC.Z,376"$ +$LK,"JOBT_TEXT_INPUT",A="FL:::/Kernel/KernelA.HH,3153"$ +$LK,"HClf_LOCKED",A="FL:::/Kernel/KernelA.HH,2874"$ +$LK,"ACD_EXTRA_END",A="FL:::/Kernel/KernelA.HH,1497"$ +$LK,"SetRFlags",A="FL:::/Kernel/KernelB.HH,259"$ +$LK,"GetRFlags",A="FL:::/Kernel/KernelB.HH,253"$ +$LK,"DOCEF_RIGHT_MACRO",A="FL:::/Kernel/KernelA.HH,962"$ +$LK,"DOClf_LOCKED",A="FL:::/Kernel/KernelA.HH,1322"$ +$LK,"CallStkGrow",A="FL:::/Kernel/KTask.HC.Z,110",BI=507$ +$LK,"KbdMsEvtTime",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,486",BI=508$ +$LK,"ATAR0_NSECT",A="FL:::/Kernel/KernelA.HH,2265"$ +$LK,"DOCEf_RIGHT_MACRO",A="FL:::/Kernel/KernelA.HH,1050"$ +$LK,"RLF_DOC",A="FL:::/Kernel/KernelA.HH,473"$ $LK,"OutU8",A="FL:::/Kernel/KernelB.HH,80"$ -$LK,"PRTF_QUESTION",A="FL:::/Kernel/KernelA.HH,3920"$ -$LK,"DCF_ALIAS",A="FL:::/Kernel/KernelA.HH,3639"$ -$LK,"CoreAPSethTask",A="FL:::/Kernel/MultiProc.HC.Z,194",BI=508$ -$LK,"Ff_HASERRCODE",A="FL:::/Kernel/KernelA.HH,849"$ -$LK,"REGG_LOCAL_NON_PTR_VARS",A="FL:::/Kernel/KernelA.HH,1793"$ -$LK,"DOCF_PLAIN_TEXT",A="FL:::/Kernel/KernelA.HH,1260"$ -$LK,"RawPutChar",A="FL:::/Kernel/Display.HC.Z,1",BI=509$ -$LK,"FifoU8Cnt",A="FL:::/Kernel/KDataTypes.HC.Z,227",BI=510$ -$LK,"DOCf_PLAIN_TEXT",A="FL:::/Kernel/KernelA.HH,1296"$ -$LK,"CArcEntry",A="FL:::/Kernel/KernelA.HH,3747"$ -$LK,"BDT_ISO_FILE_WRITE",A="FL:::/Kernel/KernelA.HH,2635"$ -$LK,"AOT_BIN_BLK_SIZE",A="FL:::/Kernel/KernelA.HH,1796"$ -$LK,"DOCf_FORM",A="FL:::/Kernel/KernelA.HH,1304"$ -$LK,"DOCF_FORM",A="FL:::/Kernel/KernelA.HH,1268"$ -$LK,"CHashTable",A="FL:::/Kernel/KernelA.HH,643"$ -$LK,"QueVectU8New",A="FL:::/Kernel/KDataTypes.HC.Z,87",BI=511$ -$LK,"MEM_INTERRUPT_STK",A="FL:::/Kernel/KernelA.HH,2888"$ -$LK,"BDT_RAM",A="FL:::/Kernel/KernelA.HH,2632"$ -$LK,"CMF_POP_CMP",A="FL:::/Kernel/KernelA.HH,1694"$ -$LK,"ICF_POP_CMP",A="FL:::/Kernel/KernelA.HH,1608"$ -$LK,"DOCf_CARRIAGE_RETURN",A="FL:::/Kernel/KernelA.HH,1299"$ -$LK,"MLMF_IS_STR",A="FL:::/Kernel/KernelA.HH,789"$ -$LK,"SYS_TIMER0_PERIOD",A="FL:::/Kernel/KernelA.HH,554"$ +$LK,"PRTF_QUESTION",A="FL:::/Kernel/KernelA.HH,3875"$ +$LK,"DCF_ALIAS",A="FL:::/Kernel/KernelA.HH,3592"$ +$LK,"CoreAPSethTask",A="FL:::/Kernel/MultiProc.HC.Z,194",BI=509$ +$LK,"Ff_HASERRCODE",A="FL:::/Kernel/KernelA.HH,837"$ +$LK,"REGG_LOCAL_NON_PTR_VARS",A="FL:::/Kernel/KernelA.HH,1780"$ +$LK,"DOCF_PLAIN_TEXT",A="FL:::/Kernel/KernelA.HH,1248"$ +$LK,"RawPutChar",A="FL:::/Kernel/Display.HC.Z,1",BI=510$ +$LK,"FifoU8Cnt",A="FL:::/Kernel/KDataTypes.HC.Z,227",BI=511$ +$LK,"JOBf_FOCUS_MASTER",A="FL:::/Kernel/KernelA.HH,3143"$ +$LK,"DOCf_PLAIN_TEXT",A="FL:::/Kernel/KernelA.HH,1284"$ +$LK,"CArcEntry",A="FL:::/Kernel/KernelA.HH,3700"$ +$LK,"BDT_ISO_FILE_WRITE",A="FL:::/Kernel/KernelA.HH,2622"$ +$LK,"AOT_BIN_BLK_SIZE",A="FL:::/Kernel/KernelA.HH,1783"$ +$LK,"DOCf_FORM",A="FL:::/Kernel/KernelA.HH,1292"$ +$LK,"DOCF_FORM",A="FL:::/Kernel/KernelA.HH,1256"$ +$LK,"CHashTable",A="FL:::/Kernel/KernelA.HH,632"$ +$LK,"QueVectU8New",A="FL:::/Kernel/KDataTypes.HC.Z,87",BI=512$ +$LK,"MEM_INTERRUPT_STK",A="FL:::/Kernel/KernelA.HH,2856"$ +$LK,"BDT_RAM",A="FL:::/Kernel/KernelA.HH,2619"$ +$LK,"CMF_POP_CMP",A="FL:::/Kernel/KernelA.HH,1681"$ +$LK,"ICF_POP_CMP",A="FL:::/Kernel/KernelA.HH,1596"$ +$LK,"DOCf_CARRIAGE_RETURN",A="FL:::/Kernel/KernelA.HH,1287"$ +$LK,"MLMF_IS_STR",A="FL:::/Kernel/KernelA.HH,777"$ +$LK,"SYS_TIMER0_PERIOD",A="FL:::/Kernel/KernelA.HH,557"$ $LK,"SET_FS_BASE",A="FL:::/Kernel/KUtils.HC.Z,445"$ -$LK,"CISO1PriDesc",A="FL:::/Kernel/KernelA.HH,2484"$ -$LK,"PutHex",A="FL:::/Kernel/StrA.HC.Z,12",BI=512$ -$LK,"PopUp",A="FL:::/Kernel/SrvCmd.HC.Z,378",BI=513$ -$LK,"SCF_IP_R_DOWN",A="FL:::/Kernel/KernelA.HH,3547"$ -$LK,"SCf_IP_R_DOWN",A="FL:::/Kernel/KernelA.HH,3532"$ -$LK,"MSG_IP_R_DOWN",A="FL:::/Kernel/KernelA.HH,3236"$ -$LK,"SVCT_EXE_STR",A="FL:::/Kernel/KernelA.HH,3193"$ -$LK,"DOCF_OVERSTRIKE",A="FL:::/Kernel/KernelA.HH,1290"$ -$LK,"IOAPICARB",A="FL:::/Kernel/KernelA.HH,515"$ -$LK,"DOCf_OVERSTRIKE",A="FL:::/Kernel/KernelA.HH,1327"$ +$LK,"CISO1PriDesc",A="FL:::/Kernel/KernelA.HH,2471"$ +$LK,"PutHex",A="FL:::/Kernel/StrA.HC.Z,12",BI=513$ +$LK,"PopUp",A="FL:::/Kernel/Job.HC.Z,376",BI=514$ +$LK,"DOCF_OVERSTRIKE",A="FL:::/Kernel/KernelA.HH,1278"$ +$LK,"IOAPICARB",A="FL:::/Kernel/KernelA.HH,518"$ +$LK,"DOCf_OVERSTRIKE",A="FL:::/Kernel/KernelA.HH,1315"$ $LK,"COREAP_16BIT_INIT_END",A="FL:::/Kernel/MultiProc.HC.Z,27"$ -$LK,"SCF_SHIFT",A="FL:::/Kernel/KernelA.HH,3539"$ -$LK,"SCf_SHIFT",A="FL:::/Kernel/KernelA.HH,3524"$ -$LK,"WIF_SELF_FOCUS",A="FL:::/Kernel/KernelA.HH,1407"$ -$LK,"StrLastOcc",A="FL:::/Kernel/StrA.HC.Z,599",BI=514$ -$LK,"WIf_SELF_FOCUS",A="FL:::/Kernel/KernelA.HH,1436"$ -$LK,"FClose",A="FL:::/Kernel/BlkDev/DskCFile.HC.Z,73",BI=515$ -$LK,"MDf_STK",A="FL:::/Kernel/KernelA.HH,1570"$ -$LK,"PRTF_AUX_FMT_NUM",A="FL:::/Kernel/KernelA.HH,3921"$ -$LK,"IEF_GOTO_LABEL",A="FL:::/Kernel/KernelA.HH,1956"$ -$LK,"CMT_GOTO_LABEL",A="FL:::/Kernel/KernelA.HH,1687"$ +$LK,"SCF_SHIFT",A="FL:::/Kernel/KernelA.HH,3492"$ +$LK,"SCf_SHIFT",A="FL:::/Kernel/KernelA.HH,3477"$ +$LK,"WIF_SELF_FOCUS",A="FL:::/Kernel/KernelA.HH,1395"$ +$LK,"StrLastOcc",A="FL:::/Kernel/StrA.HC.Z,594",BI=515$ +$LK,"WIf_SELF_FOCUS",A="FL:::/Kernel/KernelA.HH,1424"$ +$LK,"FClose",A="FL:::/Kernel/BlkDev/DskCFile.HC.Z,73",BI=516$ +$LK,"MDf_STK",A="FL:::/Kernel/KernelA.HH,1558"$ +$LK,"PRTF_AUX_FMT_NUM",A="FL:::/Kernel/KernelA.HH,3876"$ +$LK,"IEF_GOTO_LABEL",A="FL:::/Kernel/KernelA.HH,1943"$ +$LK,"CMT_GOTO_LABEL",A="FL:::/Kernel/KernelA.HH,1674"$ $LK,"mon_start_days1",A="FL:::/Kernel/KDate.HC.Z,3"$ -$LK,"HTF_GOTO_LABEL",A="FL:::/Kernel/KernelA.HH,707"$ +$LK,"JOBT_MSG",A="FL:::/Kernel/KernelA.HH,3154"$ +$LK,"HTF_GOTO_LABEL",A="FL:::/Kernel/KernelA.HH,695"$ $LK,"mon_start_days2",A="FL:::/Kernel/KDate.HC.Z,5"$ -$LK,"FONT_HEIGHT",A="FL:::/Kernel/KernelA.HH,3611"$ -$LK,"SVCf_FOCUS_MASTER",A="FL:::/Kernel/KernelA.HH,3181"$ -$LK,"HTf_GOTO_LABEL",A="FL:::/Kernel/KernelA.HH,677"$ -$LK,"DFT_CACHE_LINE_WIDTH",A="FL:::/Kernel/KernelA.HH,584"$ -$LK,"ATAR0_LCYL",A="FL:::/Kernel/KernelA.HH,2280"$ -$LK,"MemPagePresentMark",A="FL:::/Kernel/Mem/PageTables.HC.Z,143",BI=516$ -$LK,"ICf_DONT_PUSH_FLOAT0",A="FL:::/Kernel/KernelA.HH,1610"$ +$LK,"FONT_HEIGHT",A="FL:::/Kernel/KernelA.HH,3564"$ +$LK,"HTf_GOTO_LABEL",A="FL:::/Kernel/KernelA.HH,665"$ +$LK,"DFT_CACHE_LINE_WIDTH",A="FL:::/Kernel/KernelA.HH,587"$ +$LK,"ATAR0_LCYL",A="FL:::/Kernel/KernelA.HH,2267"$ +$LK,"ICf_DONT_PUSH_FLOAT0",A="FL:::/Kernel/KernelA.HH,1598"$ +$LK,"JOB_EXIT",A="FL:::/Kernel/Job.HC.Z,267"$ $LK,"Sleep",A="FL:::/Kernel/KMisc.HC.Z,155",BI=517$ $LK,"RedSeaMkDir",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,604",BI=518$ $LK,"PutKey",A="FL:::/Kernel/KeyDev.HC.Z,1",BI=519$ $LK,"_HASH_STR",A="FL:::/Kernel/KHashA.HC.Z,120"$ -$LK,"FUf_ALL",A="FL:::/Kernel/KernelA.HH,2572"$ +$LK,"CMsHardStateGlbls",A="FL:::/Kernel/KernelA.HH,2993"$ +$LK,"FUf_ALL",A="FL:::/Kernel/KernelA.HH,2559"$ $LK,"sys_macro_task",A="FL:::/Kernel/KGlbls.HC.Z,5"$ -$LK,"CArcCompress",A="FL:::/Kernel/KernelA.HH,3773"$ -$LK,"CHashOpcode",A="FL:::/Kernel/KernelA.HH,1948"$ +$LK,"CArcCompress",A="FL:::/Kernel/KernelA.HH,3726"$ +$LK,"CHashOpcode",A="FL:::/Kernel/KernelA.HH,1935"$ +$LK,"CTRL_ALT_DEL",A="FL:::/Kernel/KernelA.HH,618"$ $LK,"FifoU8Ins",A="FL:::/Kernel/KDataTypes.HC.Z,173",BI=520$ -$LK,"CGridGlbls",A="FL:::/Kernel/KernelA.HH,3072"$ -$LK,"FATFromName",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,168",BI=521$ -$LK,"AAT_ADD_U32",A="FL:::/Kernel/KernelA.HH,1971"$ -$LK,"AAT_ADD_U16",A="FL:::/Kernel/KernelA.HH,1969"$ -$LK,"SC_PAUSE",A="FL:::/Kernel/KernelA.HH,3588"$ -$LK,"TRANSPARENT",A="FL:::/Kernel/KernelA.HH,2959"$ -$LK,"XTalkStrWait",A="FL:::/Kernel/SrvCmd.HC.Z,498",BI=522$ -$LK,"CArcCtrl",A="FL:::/Kernel/KernelA.HH,3755"$ -$LK,"SC_CTRL",A="FL:::/Kernel/KernelA.HH,3561"$ -$LK,"RS_ATTR_LONG_NAME_MASK",A="FL:::/Kernel/KernelA.HH,2534"$ -$LK,"ATAR1_CTRL",A="FL:::/Kernel/KernelA.HH,2285"$ -$LK,"ICF_A1_TO_F64",A="FL:::/Kernel/KernelA.HH,1591"$ -$LK,"RECALCF_ADD_CURSOR",A="FL:::/Kernel/KernelA.HH,1353"$ -$LK,"DOC_COLOR_BIN",A="FL:::/Kernel/KernelA.HH,1142"$ -$LK,"Ff_NOARGPOP",A="FL:::/Kernel/KernelA.HH,851"$ -$LK,"EdLiteFileLine",A="FL:::/Kernel/EdLite.HC.Z,316",BI=523$ -$LK,"FifoU8New",A="FL:::/Kernel/KDataTypes.HC.Z,155",BI=524$ -$LK,"SC_HOME",A="FL:::/Kernel/KernelA.HH,3572"$ -$LK,"SYS_SEMA_DBG_MODE",A="FL:::/Kernel/KernelA.HH,598"$ -$LK,"ATAPIWritePktWord",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,106",BI=525$ -$LK,"FilesFindMatch",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,40",BI=526$ -$LK,"BlkDevsRelease",A="FL:::/Kernel/BlkDev/DskBlkDev.HC.Z,109",BI=527$ -$LK,"DOC_COLOR_LINK",A="FL:::/Kernel/KernelA.HH,1137"$ -$LK,"AAT_ADD_U64",A="FL:::/Kernel/KernelA.HH,1973"$ -$LK,"HTT_CLASS",A="FL:::/Kernel/KernelA.HH,687"$ -$LK,"HTt_CLASS",A="FL:::/Kernel/KernelA.HH,657"$ -$LK,"Cd2DirEntry",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,221",BI=528$ -$LK,"IET_IMM_U0",A="FL:::/Kernel/KernelA.HH,396"$ -$LK,"FifoU8Rem",A="FL:::/Kernel/KDataTypes.HC.Z,190",BI=529$ -$LK,"StrLastRem",A="FL:::/Kernel/StrA.HC.Z,609",BI=530$ -$LK,"RedSeaDrvInit",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,58",BI=531$ +$LK,"IntFaultHndlrsNew",A="FL:::/Kernel/KInts.HC.Z,166",BI=521$ +$LK,"CGridGlbls",A="FL:::/Kernel/KernelA.HH,3034"$ +$LK,"FATFromName",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,156",BI=522$ +$LK,"char_bmp_zero_tab_cr_nl_cursor_dollar",A="FL:::/Kernel/StrA.HC.Z,368"$ +$LK,"AAT_ADD_U32",A="FL:::/Kernel/KernelA.HH,1958"$ +$LK,"AAT_ADD_U16",A="FL:::/Kernel/KernelA.HH,1956"$ +$LK,"SC_PAUSE",A="FL:::/Kernel/KernelA.HH,3541"$ +$LK,"TRANSPARENT",A="FL:::/Kernel/KernelA.HH,2927"$ +$LK,"XTalkStrWait",A="FL:::/Kernel/Job.HC.Z,496",BI=523$ +$LK,"mem_physical_space",A="FL:::/Kernel/KernelB.HH,196"$ +$LK,"CArcCtrl",A="FL:::/Kernel/KernelA.HH,3708"$ +$LK,"SC_CTRL",A="FL:::/Kernel/KernelA.HH,3514"$ +$LK,"RS_ATTR_LONG_NAME_MASK",A="FL:::/Kernel/KernelA.HH,2521"$ +$LK,"ATAR1_CTRL",A="FL:::/Kernel/KernelA.HH,2272"$ +$LK,"RECALCF_ADD_CURSOR",A="FL:::/Kernel/KernelA.HH,1341"$ +$LK,"DOC_COLOR_BIN",A="FL:::/Kernel/KernelA.HH,1130"$ +$LK,"Ff_NOARGPOP",A="FL:::/Kernel/KernelA.HH,839"$ +$LK,"EdLiteFileLine",A="FL:::/Kernel/EdLite.HC.Z,316",BI=524$ +$LK,"FifoU8New",A="FL:::/Kernel/KDataTypes.HC.Z,155",BI=525$ +$LK,"SC_HOME",A="FL:::/Kernel/KernelA.HH,3525"$ +$LK,"ATAPIWritePktWord",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,106",BI=526$ +$LK,"FilesFindMatch",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,40",BI=527$ +$LK,"BlkDevsRelease",A="FL:::/Kernel/BlkDev/DskBlkDev.HC.Z,114",BI=528$ +$LK,"DOC_COLOR_LINK",A="FL:::/Kernel/KernelA.HH,1125"$ +$LK,"AAT_ADD_U64",A="FL:::/Kernel/KernelA.HH,1960"$ +$LK,"HTT_CLASS",A="FL:::/Kernel/KernelA.HH,675"$ +$LK,"HTt_CLASS",A="FL:::/Kernel/KernelA.HH,645"$ +$LK,"Cd2DirEntry",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,221",BI=529$ +$LK,"IET_IMM_U0",A="FL:::/Kernel/KernelA.HH,395"$ +$LK,"FifoU8Rem",A="FL:::/Kernel/KDataTypes.HC.Z,190",BI=530$ +$LK,"StrLastRem",A="FL:::/Kernel/StrA.HC.Z,604",BI=531$ $LK,"BlkDevAdd",A="FL:::/Kernel/BlkDev/DskAddDev.HC.Z,27",BI=532$ -$LK,"REGG_CLOBBERED",A="FL:::/Kernel/KernelA.HH,1789"$ -$LK,"ROPF_HALF_RANGE_COLOR",A="FL:::/Kernel/KernelA.HH,2951"$ -$LK,"DirLongNameFill",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,199",BI=533$ -$LK,"QueVectU8Put",A="FL:::/Kernel/KDataTypes.HC.Z,96",BI=534$ -$LK,"StrFind",A="FL:::/Kernel/StrA.HC.Z,624",BI=535$ -$LK,"CMemRange",A="FL:::/Kernel/KernelA.HH,2870"$ -$LK,"WIf_FOCUS_TASK_CTRLS",A="FL:::/Kernel/KernelA.HH,1447"$ +$LK,"REGG_CLOBBERED",A="FL:::/Kernel/KernelA.HH,1776"$ +$LK,"ROPF_HALF_RANGE_COLOR",A="FL:::/Kernel/KernelA.HH,2919"$ +$LK,"DirLongNameFill",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,187",BI=533$ +$LK,"Ona2Freq",A="FL:::/Kernel/KMisc.HC.Z,163",BI=534$ +$LK,"QueVectU8Put",A="FL:::/Kernel/KDataTypes.HC.Z,96",BI=535$ +$LK,"StrFind",A="FL:::/Kernel/StrA.HC.Z,619",BI=536$ +$LK,"CMemRange",A="FL:::/Kernel/KernelA.HH,2838"$ +$LK,"WIf_FOCUS_TASK_CTRLS",A="FL:::/Kernel/KernelA.HH,1435"$ $LK,"C32_RSP",A="FL:::/Kernel/PCIBIOS.HC.Z,66"$ -$LK,"OutStr",A="FL:::/Kernel/StrPrint.HC.Z,20",BI=536$ -$LK,"DOCEf_CHECK_COLLAPSABLE",A="FL:::/Kernel/KernelA.HH,1095"$ -$LK,"DOCEF_PAGE_REL_Y",A="FL:::/Kernel/KernelA.HH,996"$ -$LK,"TimersInit",A="FL:::/Kernel/KEnd.HC.Z,86",BI=537$ -$LK,"ATAR0_SECT",A="FL:::/Kernel/KernelA.HH,2279"$ -$LK,"__CMD_LINE__",A="FL:::/Kernel/KernelA.HH,2027"$ -$LK,"WIF_SELF_CTRLS",A="FL:::/Kernel/KernelA.HH,1409"$ -$LK,"DOCEf_PAGE_REL_Y",A="FL:::/Kernel/KernelA.HH,1084"$ -$LK,"IET_IMM_U8",A="FL:::/Kernel/KernelA.HH,398"$ -$LK,"SC_ALT",A="FL:::/Kernel/KernelA.HH,3562"$ -$LK,"ARGT_MOFFS8",A="FL:::/Kernel/KernelA.HH,1912"$ -$LK,"WIf_SELF_CTRLS",A="FL:::/Kernel/KernelA.HH,1437"$ -$LK,"EXT_NUM_ENTRIES",A="FL:::/Kernel/KernelA.HH,581"$ -$LK,"DefineMatch",A="FL:::/Kernel/KDefine.HC.Z,85",BI=538$ -$LK,"CLexHashTableContext",A="FL:::/Kernel/KernelA.HH,2112"$ -$LK,"RLF_RAW",A="FL:::/Kernel/KernelA.HH,465"$ -$LK,"WZeroBlks",A="FL:::/Kernel/BlkDev/DskBlk.HC.Z,2",BI=539$ -$LK,"ATAPISetMaxSpeed",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,118",BI=540$ -$LK,"StkRep",A="FL:::/Kernel/KDbg.HC.Z,104",BI=541$ +$LK,"OutStr",A="FL:::/Kernel/StrPrint.HC.Z,20",BI=537$ +$LK,"DOCEf_CHECK_COLLAPSABLE",A="FL:::/Kernel/KernelA.HH,1083"$ +$LK,"DOCEF_PAGE_REL_Y",A="FL:::/Kernel/KernelA.HH,984"$ +$LK,"TimersInit",A="FL:::/Kernel/KEnd.HC.Z,87",BI=538$ +$LK,"ATAR0_SECT",A="FL:::/Kernel/KernelA.HH,2266"$ +$LK,"__CMD_LINE__",A="FL:::/Kernel/KernelA.HH,2014"$ +$LK,"WIF_SELF_CTRLS",A="FL:::/Kernel/KernelA.HH,1397"$ +$LK,"DOCEf_PAGE_REL_Y",A="FL:::/Kernel/KernelA.HH,1072"$ +$LK,"IET_IMM_U8",A="FL:::/Kernel/KernelA.HH,397"$ +$LK,"SC_ALT",A="FL:::/Kernel/KernelA.HH,3515"$ +$LK,"ARGT_MOFFS8",A="FL:::/Kernel/KernelA.HH,1899"$ +$LK,"WIf_SELF_CTRLS",A="FL:::/Kernel/KernelA.HH,1425"$ +$LK,"EXT_NUM_ENTRIES",A="FL:::/Kernel/KernelA.HH,584"$ +$LK,"DefineMatch",A="FL:::/Kernel/KDefine.HC.Z,85",BI=539$ +$LK,"CLexHashTableContext",A="FL:::/Kernel/KernelA.HH,2099"$ +$LK,"RLF_RAW",A="FL:::/Kernel/KernelA.HH,468"$ +$LK,"WZeroBlks",A="FL:::/Kernel/BlkDev/DskBlk.HC.Z,2",BI=540$ +$LK,"ATAPISetMaxSpeed",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,118",BI=541$ +$LK,"StkRep",A="FL:::/Kernel/KDbg.HC.Z,104",BI=542$ $LK,"SwapU8",A="FL:::/Kernel/KernelB.HH,117"$ -$LK,"FUN_SEG_CACHE_STR_LEN",A="FL:::/Kernel/KernelA.HH,3854"$ -$LK,"DCF_TRANSFORMATION",A="FL:::/Kernel/KernelA.HH,3628"$ -$LK,"FF_CONTIGUOUS",A="FL:::/Kernel/KernelA.HH,2786"$ -$LK,"TTS_CONST",A="FL:::/Kernel/KernelA.HH,3274"$ -$LK,"ISO1T_VOL_DRV_DESC",A="FL:::/Kernel/KernelA.HH,2481"$ +$LK,"FUN_SEG_CACHE_STR_LEN",A="FL:::/Kernel/KernelA.HH,3808"$ +$LK,"DCF_TRANSFORMATION",A="FL:::/Kernel/KernelA.HH,3581"$ +$LK,"FF_CONTIGUOUS",A="FL:::/Kernel/KernelA.HH,2774"$ +$LK,"SEMA_MUTE",A="FL:::/Kernel/KernelA.HH,611"$ +$LK,"TTS_CONST",A="FL:::/Kernel/KernelA.HH,3234"$ +$LK,"ISO1T_VOL_DRV_DESC",A="FL:::/Kernel/KernelA.HH,2468"$ $LK,"SaveExceptRegs",A="FL:::/Kernel/KExcept.HC.Z,43"$ -$LK,"SC_END",A="FL:::/Kernel/KernelA.HH,3573"$ -$LK,"CAOTHeapGlbl",A="FL:::/Kernel/KernelA.HH,1988"$ -$LK,"ArcExpandBuf",A="FL:::/Kernel/Compress.HC.Z,165",BI=542$ -$LK,"FUf_MAP",A="FL:::/Kernel/KernelA.HH,2577"$ -$LK,"DOCf_MORE",A="FL:::/Kernel/KernelA.HH,1312"$ -$LK,"DOCF_MORE",A="FL:::/Kernel/KernelA.HH,1276"$ -$LK,"chars_bmp_non_eol_white_space",A="FL:::/Kernel/StrA.HC.Z,359"$ -$LK,"CISO1PathEntry",A="FL:::/Kernel/KernelA.HH,2469"$ -$LK,"REGG_SAVED",A="FL:::/Kernel/KernelA.HH,1790"$ -$LK,"SF_ARG1",A="FL:::/Kernel/KernelA.HH,560"$ -$LK,"RLF_VGA",A="FL:::/Kernel/KernelA.HH,459"$ -$LK,"COLOR_MONO",A="FL:::/Kernel/KernelA.HH,2979"$ -$LK,"ACD_END_CHAR",A="FL:::/Kernel/KernelA.HH,1512"$ -$LK,"WIF_FOCUS_TASK_IP_WHEEL",A="FL:::/Kernel/KernelA.HH,1427"$ -$LK,"DOCET_INVERT",A="FL:::/Kernel/KernelA.HH,949"$ -$LK,"SF_ARG2",A="FL:::/Kernel/KernelA.HH,561"$ -$LK,"SC_SCROLL",A="FL:::/Kernel/KernelA.HH,3565"$ -$LK,"DISPLAYf_NOT_RAW",A="FL:::/Kernel/KernelA.HH,3300"$ -$LK,"DOCEt_INVERT",A="FL:::/Kernel/KernelA.HH,955"$ -$LK,"ATTRf_INVERT",A="FL:::/Kernel/KernelA.HH,896"$ -$LK,"ATTRF_INVERT",A="FL:::/Kernel/KernelA.HH,891"$ -$LK,"SF_ARG3",A="FL:::/Kernel/KernelA.HH,562"$ -$LK,"IsDbgMode",A="FL:::/Kernel/KMisc.HC.Z,282",BI=543$ -$LK,"ACD_PRONUNCIATION_END",A="FL:::/Kernel/KernelA.HH,1505"$ -$LK,"SF_ARG4",A="FL:::/Kernel/KernelA.HH,563"$ -$LK,"SF_ARG5",A="FL:::/Kernel/KernelA.HH,564"$ +$LK,"SC_END",A="FL:::/Kernel/KernelA.HH,3526"$ +$LK,"CAOTHeapGlbl",A="FL:::/Kernel/KernelA.HH,1975"$ +$LK,"ArcExpandBuf",A="FL:::/Kernel/Compress.HC.Z,165",BI=543$ +$LK,"FUf_MAP",A="FL:::/Kernel/KernelA.HH,2564"$ +$LK,"DOCf_MORE",A="FL:::/Kernel/KernelA.HH,1300"$ +$LK,"DOCF_MORE",A="FL:::/Kernel/KernelA.HH,1264"$ +$LK,"CISO1PathEntry",A="FL:::/Kernel/KernelA.HH,2456"$ +$LK,"REGG_SAVED",A="FL:::/Kernel/KernelA.HH,1777"$ +$LK,"SF_ARG1",A="FL:::/Kernel/KernelA.HH,563"$ +$LK,"RLF_VGA",A="FL:::/Kernel/KernelA.HH,461"$ +$LK,"COLOR_MONO",A="FL:::/Kernel/KernelA.HH,2947"$ +$LK,"ACD_END_CHAR",A="FL:::/Kernel/KernelA.HH,1500"$ +$LK,"DOCET_INVERT",A="FL:::/Kernel/KernelA.HH,937"$ +$LK,"SF_ARG2",A="FL:::/Kernel/KernelA.HH,564"$ +$LK,"SC_SCROLL",A="FL:::/Kernel/KernelA.HH,3518"$ +$LK,"DISPLAYf_NOT_RAW",A="FL:::/Kernel/KernelA.HH,3260"$ +$LK,"DOCEt_INVERT",A="FL:::/Kernel/KernelA.HH,943"$ +$LK,"ATTRf_INVERT",A="FL:::/Kernel/KernelA.HH,884"$ +$LK,"ATTRF_INVERT",A="FL:::/Kernel/KernelA.HH,879"$ +$LK,"SF_ARG3",A="FL:::/Kernel/KernelA.HH,565"$ +$LK,"IsDbgMode",A="FL:::/Kernel/KMisc.HC.Z,298",BI=544$ +$LK,"ACD_PRONUNCIATION_END",A="FL:::/Kernel/KernelA.HH,1493"$ +$LK,"SF_ARG4",A="FL:::/Kernel/KernelA.HH,566"$ +$LK,"SF_ARG5",A="FL:::/Kernel/KernelA.HH,567"$ $LK,"ODEF_STARTED",A="FL:::/Kernel/KernelA.HH,243"$ -$LK,"TaskFocusNext",A="FL:::/Kernel/Sched.HC.Z,38",BI=544$ -$LK,"Print",A="FL:::/Kernel/StrPrint.HC.Z,890",BI=545$ -$LK,"SFF_WHOLE_LABELS_BEFORE",A="FL:::/Kernel/KernelA.HH,3801"$ -$LK,"FUF_RISKY",A="FL:::/Kernel/KernelA.HH,2602"$ -$LK,"FUf_RISKY",A="FL:::/Kernel/KernelA.HH,2575"$ -$LK,"CAOTAbsAddr",A="FL:::/Kernel/KernelA.HH,1975"$ -$LK,"SF_ARG6",A="FL:::/Kernel/KernelA.HH,565"$ -$LK,"SC_ESC",A="FL:::/Kernel/KernelA.HH,3556"$ -$LK,"ACD_WORD_CHAR",A="FL:::/Kernel/KernelA.HH,1513"$ -$LK,"SF_ARG7",A="FL:::/Kernel/KernelA.HH,566"$ -$LK,"FAT32DrvValidate",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,48",BI=546$ +$LK,"TaskFocusNext",A="FL:::/Kernel/Sched.HC.Z,38",BI=545$ +$LK,"Print",A="FL:::/Kernel/StrPrint.HC.Z,890",BI=546$ +$LK,"SFF_WHOLE_LABELS_BEFORE",A="FL:::/Kernel/KernelA.HH,3754"$ +$LK,"FUF_RISKY",A="FL:::/Kernel/KernelA.HH,2589"$ +$LK,"FUf_RISKY",A="FL:::/Kernel/KernelA.HH,2562"$ +$LK,"CAOTAbsAddr",A="FL:::/Kernel/KernelA.HH,1962"$ +$LK,"ICF_ARG1_TO_F64",A="FL:::/Kernel/KernelA.HH,1579"$ +$LK,"SF_ARG6",A="FL:::/Kernel/KernelA.HH,568"$ +$LK,"SC_ESC",A="FL:::/Kernel/KernelA.HH,3509"$ +$LK,"ACD_WORD_CHAR",A="FL:::/Kernel/KernelA.HH,1501"$ +$LK,"SF_ARG7",A="FL:::/Kernel/KernelA.HH,569"$ $LK,"StrCmp",A="FL:::/Kernel/StrA.HC.Z,309"$ -$LK,"DOF_INTERCEPT_TASK_END",A="FL:::/Kernel/KernelA.HH,1217"$ -$LK,"SF_ARG8",A="FL:::/Kernel/KernelA.HH,567"$ -$LK,"BlkDevDel",A="FL:::/Kernel/BlkDev/DskBlkDev.HC.Z,154",BI=547$ -$LK,"ST_ERR_ST",A="FL:::/Kernel/KernelA.HH,3518"$ -$LK,"BlkDevChk",A="FL:::/Kernel/BlkDev/DskBlkDev.HC.Z,163",BI=548$ -$LK,"MSG_IP_L_UP",A="FL:::/Kernel/KernelA.HH,3233"$ -$LK,"FSt_REDSEA",A="FL:::/Kernel/KernelA.HH,2689"$ -$LK,"CPCIDev",A="FL:::/Kernel/KernelA.HH,2240"$ -$LK,"DOCEf_DFT_LEN",A="FL:::/Kernel/KernelA.HH,1111"$ -$LK,"DOCEF_DFT_LEN",A="FL:::/Kernel/KernelA.HH,1025"$ +$LK,"DOF_INTERCEPT_TASK_END",A="FL:::/Kernel/KernelA.HH,1205"$ +$LK,"SF_ARG8",A="FL:::/Kernel/KernelA.HH,570"$ +$LK,"BlkDevDel",A="FL:::/Kernel/BlkDev/DskBlkDev.HC.Z,159",BI=547$ +$LK,"ST_ERR_ST",A="FL:::/Kernel/KernelA.HH,3471"$ +$LK,"BlkDevChk",A="FL:::/Kernel/BlkDev/DskBlkDev.HC.Z,168",BI=548$ +$LK,"FSt_REDSEA",A="FL:::/Kernel/KernelA.HH,2676"$ +$LK,"CPCIDev",A="FL:::/Kernel/KernelA.HH,2227"$ +$LK,"DOCEf_DFT_LEN",A="FL:::/Kernel/KernelA.HH,1099"$ +$LK,"DOCEF_DFT_LEN",A="FL:::/Kernel/KernelA.HH,1013"$ $LK,"RepOutU8",A="FL:::/Kernel/KernelB.HH,92"$ $LK,"DrvBlkDevDel",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,78",BI=549$ -$LK,"VGAP_PALETTE_MASK",A="FL:::/Kernel/KernelA.HH,3730"$ -$LK,"NUM_SYS_SEMAS",A="FL:::/Kernel/KernelA.HH,616"$ -$LK,"ATAPISync",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,501",BI=550$ +$LK,"VGAP_PALETTE_MASK",A="FL:::/Kernel/KernelA.HH,3683"$ +$LK,"ATAPISync",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,504",BI=550$ $LK,"TO_UPPER",A="FL:::/Kernel/StrA.HC.Z,110"$ $LK,"RFLAGG_NORMAL",A="FL:::/Kernel/KernelA.HH,328"$ -$LK,"KERNEL_MODULE_NAME",A="FL:::/Kernel/KernelA.HH,717"$ -$LK,"SYS_SEMA_DSK_CACHE",A="FL:::/Kernel/KernelA.HH,605"$ -$LK,"MEM_PAGE_SIZE",A="FL:::/Kernel/KernelA.HH,2879"$ +$LK,"KERNEL_MODULE_NAME",A="FL:::/Kernel/KernelA.HH,705"$ +$LK,"MEM_PAGE_SIZE",A="FL:::/Kernel/KStart32.HC.Z,8"$ $LK,"SleepUntil",A="FL:::/Kernel/KMisc.HC.Z,147",BI=551$ -$LK,"Spawn",A="FL:::/Kernel/KTask.HC.Z,227",BI=552$ -$LK,"CTaskDying",A="FL:::/Kernel/KernelA.HH,3316"$ -$LK,"MSG_IP_R_D_UP",A="FL:::/Kernel/KernelA.HH,3239"$ -$LK,"CRedSeaBoot",A="FL:::/Kernel/KernelA.HH,2323"$ -$LK,"WIF_SELF_KEY_DESC",A="FL:::/Kernel/KernelA.HH,1419"$ +$LK,"Spawn",A="FL:::/Kernel/KTask.HC.Z,242",BI=552$ +$LK,"CTaskDying",A="FL:::/Kernel/KernelA.HH,3277"$ +$LK,"CRedSeaBoot",A="FL:::/Kernel/KernelA.HH,2310"$ +$LK,"WIF_SELF_KEY_DESC",A="FL:::/Kernel/KernelA.HH,1407"$ $LK,"SET_GS_BASE",A="FL:::/Kernel/KUtils.HC.Z,433"$ +$LK,"CTRL_ALT_TAB",A="FL:::/Kernel/KernelA.HH,621"$ $LK,"RFLAGf_VINT_PENDING",A="FL:::/Kernel/KernelA.HH,324"$ $LK,"DirEntryDel2",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,26",BI=553$ $LK,"DefineLoad",A="FL:::/Kernel/KDefine.HC.Z,1",BI=554$ $LK,"INT_FAULT_ERR_CODE_BITMAP",A="FL:::/Kernel/KInts.HC.Z,94"$ -$LK,"ICF_NO_RIP",A="FL:::/Kernel/KernelA.HH,1615"$ -$LK,"SUF_REM_CTRL_CHARS",A="FL:::/Kernel/KernelA.HH,3787"$ -$LK,"SC_SHIFT",A="FL:::/Kernel/KernelA.HH,3560"$ -$LK,"ATA_SET_MAX_EXT",A="FL:::/Kernel/KernelA.HH,2263"$ -$LK,"StrOcc",A="FL:::/Kernel/StrA.HC.Z,467",BI=555$ +$LK,"ICF_NO_RIP",A="FL:::/Kernel/KernelA.HH,1603"$ +$LK,"SUF_REM_CTRL_CHARS",A="FL:::/Kernel/KernelA.HH,3740"$ +$LK,"SC_SHIFT",A="FL:::/Kernel/KernelA.HH,3513"$ +$LK,"ATA_SET_MAX_EXT",A="FL:::/Kernel/KernelA.HH,2250"$ +$LK,"StrOcc",A="FL:::/Kernel/StrA.HC.Z,462",BI=555$ $LK,"StrCpy",A="FL:::/Kernel/StrA.HC.Z,321"$ -$LK,"DOCT_INS_BIN",A="FL:::/Kernel/KernelA.HH,939"$ +$LK,"DOCT_INS_BIN",A="FL:::/Kernel/KernelA.HH,927"$ $LK,"StrMatch",A="FL:::/Kernel/StrA.HC.Z,317"$ $LK,"FlushMsgs",A="FL:::/Kernel/SerialDev/Message.HC.Z,87",BI=556$ -$LK,"CMT_JMP_TABLE",A="FL:::/Kernel/KernelA.HH,1689"$ -$LK,"RLF_MP",A="FL:::/Kernel/KernelA.HH,468"$ -$LK,"SC_GUI",A="FL:::/Kernel/KernelA.HH,3589"$ -$LK,"RLF_INTERRUPTS",A="FL:::/Kernel/KernelA.HH,466"$ +$LK,"CMT_JMP_TABLE",A="FL:::/Kernel/KernelA.HH,1676"$ +$LK,"RLF_MP",A="FL:::/Kernel/KernelA.HH,471"$ +$LK,"SC_GUI",A="FL:::/Kernel/KernelA.HH,3542"$ +$LK,"RLF_INTERRUPTS",A="FL:::/Kernel/KernelA.HH,469"$ $LK,"StrLen",A="FL:::/Kernel/KernelB.HH,61"$ -$LK,"ATA_READ_NATIVE_MAX",A="FL:::/Kernel/KernelA.HH,2260"$ -$LK,"PUSH_C_REGS",A="FL:::/Kernel/KernelA.HH,1764"$ -$LK,"IEF_REX_XOR_LIKE",A="FL:::/Kernel/KernelA.HH,1733"$ -$LK,"WIf_SELF_KEY_DESC",A="FL:::/Kernel/KernelA.HH,1445"$ -$LK,"RLf_INTERRUPTS",A="FL:::/Kernel/KernelA.HH,447"$ +$LK,"ATA_READ_NATIVE_MAX",A="FL:::/Kernel/KernelA.HH,2247"$ +$LK,"PUSH_C_REGS",A="FL:::/Kernel/KernelA.HH,1751"$ +$LK,"IEF_REX_XOR_LIKE",A="FL:::/Kernel/KernelA.HH,1720"$ +$LK,"WIf_SELF_KEY_DESC",A="FL:::/Kernel/KernelA.HH,1433"$ +$LK,"SEMA_HEAPLOG_LOCK",A="FL:::/Kernel/KernelA.HH,601"$ +$LK,"RLf_INTERRUPTS",A="FL:::/Kernel/KernelA.HH,449"$ $LK,"ISO1DateStruct2CDate",A="FL:::/Kernel/BlkDev/FileSysISO.HC.Z,14",BI=557$ -$LK,"DOCF_SEL",A="FL:::/Kernel/KernelA.HH,1287"$ -$LK,"RLF_REGISTRY",A="FL:::/Kernel/KernelA.HH,472"$ -$LK,"RLf_REGISTRY",A="FL:::/Kernel/KernelA.HH,453"$ -$LK,"SC_INS",A="FL:::/Kernel/KernelA.HH,3574"$ -$LK,"TK_DOT_DOT",A="FL:::/Kernel/KernelA.HH,2106"$ -$LK,"RT_NUM_IT",A="FL:::/Kernel/KernelA.HH,1566"$ +$LK,"DOCF_SEL",A="FL:::/Kernel/KernelA.HH,1275"$ +$LK,"RLF_REGISTRY",A="FL:::/Kernel/KernelA.HH,475"$ +$LK,"RLf_REGISTRY",A="FL:::/Kernel/KernelA.HH,455"$ +$LK,"SC_INS",A="FL:::/Kernel/KernelA.HH,3527"$ +$LK,"TK_DOT_DOT",A="FL:::/Kernel/KernelA.HH,2093"$ +$LK,"RT_NUM_IT",A="FL:::/Kernel/KernelA.HH,1554"$ $LK,"AbsI64",A="FL:::/Kernel/KernelB.HH,97"$ -$LK,"SC_TAB",A="FL:::/Kernel/KernelA.HH,3558"$ -$LK,"IOAPICVER",A="FL:::/Kernel/KernelA.HH,514"$ -$LK,"LAPIC_LVT_TIMER",A="FL:::/Kernel/KernelA.HH,499"$ -$LK,"sys_mem_init_flag",A="FL:::/Kernel/KernelB.HH,183"$ -$LK,"RWF_IN_DOLLAR",A="FL:::/Kernel/KernelA.HH,3595"$ -$LK,"DISPLAYf_CHILDREN_NOT_ON_TOP",A="FL:::/Kernel/KernelA.HH,3304"$ +$LK,"SC_TAB",A="FL:::/Kernel/KernelA.HH,3511"$ +$LK,"IOAPICVER",A="FL:::/Kernel/KernelA.HH,517"$ +$LK,"LAPIC_LVT_TIMER",A="FL:::/Kernel/KernelA.HH,502"$ +$LK,"sys_mem_init_flag",A="FL:::/Kernel/KernelB.HH,182"$ +$LK,"RWF_IN_DOLLAR",A="FL:::/Kernel/KernelA.HH,3548"$ +$LK,"DISPLAYf_CHILDREN_NOT_ON_TOP",A="FL:::/Kernel/KernelA.HH,3264"$ $LK,"RedSeaFmt",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,94",BI=558$ $LK,"sys_var_init_flag",A="FL:::/Kernel/KernelB.HH,185"$ -$LK,"PRTF_DECIMAL",A="FL:::/Kernel/KernelA.HH,3922"$ -$LK,"IOAPIC_DATA",A="FL:::/Kernel/KernelA.HH,511"$ +$LK,"PRTF_DECIMAL",A="FL:::/Kernel/KernelA.HH,3877"$ +$LK,"IOAPIC_DATA",A="FL:::/Kernel/KernelA.HH,514"$ $LK,"SysGetStr2",A="FL:::/Kernel/KDbg.HC.Z,337",BI=559$ $LK,"fp_getstr2",A="FL:::/Kernel/KGlbls.HC.Z,32"$ $LK,"KDRawPutKey",A="FL:::/Kernel/KeyDev.HC.Z,88",BI=560$ -$LK,"DOCF_SUBSCRIPT_MODE",A="FL:::/Kernel/KernelA.HH,1293"$ +$LK,"DOCF_SUBSCRIPT_MODE",A="FL:::/Kernel/KernelA.HH,1281"$ $LK,"Dos2CDate",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,9",BI=561$ $LK,"SYS_START_CR0",A="FL:::/Kernel/KernelA.HH,306"$ $LK,"QSortI64",A="FL:::/Kernel/QSort.HC.Z,1",BI=562$ $LK,"RawPrint",A="FL:::/Kernel/KDbg.HC.Z,217",BI=563$ -$LK,"CTextGlbls",A="FL:::/Kernel/KernelA.HH,3600"$ -$LK,"CDevGlbls",A="FL:::/Kernel/KernelA.HH,2923"$ -$LK,"chars_bmp_zero_cr_nl_cursor",A="FL:::/Kernel/StrA.HC.Z,362"$ +$LK,"CTextGlbls",A="FL:::/Kernel/KernelA.HH,3553"$ +$LK,"CDevGlbls",A="FL:::/Kernel/KernelA.HH,2891"$ $LK,"AreYouSure",A="FL:::/Kernel/StrB.HC.Z,109",BI=564$ -$LK,"DOCf_IN_DOLLAR",A="FL:::/Kernel/KernelA.HH,1328"$ -$LK,"DOCF_IN_DOLLAR",A="FL:::/Kernel/KernelA.HH,1291"$ +$LK,"DOCf_IN_DOLLAR",A="FL:::/Kernel/KernelA.HH,1316"$ +$LK,"DOCF_IN_DOLLAR",A="FL:::/Kernel/KernelA.HH,1279"$ $LK,"_REP_IN_U16",A="FL:::/Kernel/KUtils.HC.Z,264"$ $LK,"_REP_IN_U32",A="FL:::/Kernel/KUtils.HC.Z,253"$ -$LK,"CH_FORM_FEED",A="FL:::/Kernel/KernelA.HH,3512"$ -$LK,"MP_VECT_ADDR",A="FL:::/Kernel/KernelA.HH,507"$ +$LK,"MP_VECT_ADDR",A="FL:::/Kernel/KernelA.HH,510"$ $LK,"I_WAKE",A="FL:::/Kernel/KernelA.HH,296"$ $LK,"Yield",A="FL:::/Kernel/Sched.HC.Z,284"$ -$LK,"CKeyDevGlbls",A="FL:::/Kernel/KernelA.HH,3819"$ -$LK,"MRT_DEV",A="FL:::/Kernel/KernelA.HH,2868"$ -$LK,"CBlkDevGlbls",A="FL:::/Kernel/KernelA.HH,2758"$ -$LK,"CMBRPrt",A="FL:::/Kernel/KernelA.HH,2302"$ +$LK,"CKeyDevGlbls",A="FL:::/Kernel/KernelA.HH,3772"$ +$LK,"MRT_DEV",A="FL:::/Kernel/KernelA.HH,2836"$ +$LK,"CBlkDevGlbls",A="FL:::/Kernel/KernelA.HH,2746"$ +$LK,"CMBRPrt",A="FL:::/Kernel/KernelA.HH,2289"$ $LK,"StrNew",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,446",BI=565$ -$LK,"HTT_GLBL_VAR",A="FL:::/Kernel/KernelA.HH,686"$ -$LK,"HTt_GLBL_VAR",A="FL:::/Kernel/KernelA.HH,656"$ -$LK,"WIF_FOCUS_TASK_IP_L_D",A="FL:::/Kernel/KernelA.HH,1424"$ -$LK,"HTT_HELP_FILE",A="FL:::/Kernel/KernelA.HH,698"$ -$LK,"HTt_HELP_FILE",A="FL:::/Kernel/KernelA.HH,668"$ +$LK,"HTT_GLBL_VAR",A="FL:::/Kernel/KernelA.HH,674"$ +$LK,"HTt_GLBL_VAR",A="FL:::/Kernel/KernelA.HH,644"$ +$LK,"HTT_HELP_FILE",A="FL:::/Kernel/KernelA.HH,686"$ +$LK,"HTt_HELP_FILE",A="FL:::/Kernel/KernelA.HH,656"$ $LK,"Round",A="FL:::/Kernel/KernelB.HH,139"$ -$LK,"TaskRstAwaitingMsg",A="FL:::/Kernel/SrvCmd.HC.Z,25",BI=566$ -$LK,"MSG_IP_L_D_DOWN",A="FL:::/Kernel/KernelA.HH,3234"$ -$LK,"ATAR0_STAT",A="FL:::/Kernel/KernelA.HH,2283"$ -$LK,"DOC_COLOR_PMT",A="FL:::/Kernel/KernelA.HH,1141"$ -$LK,"HPET_GEN_CONF",A="FL:::/Kernel/KernelA.HH,535"$ +$LK,"VM_OTHER",A="FL:::/Kernel/KernelA.HH,3889"$ +$LK,"TaskRstAwaitingMsg",A="FL:::/Kernel/Job.HC.Z,25",BI=566$ +$LK,"ATAR0_STAT",A="FL:::/Kernel/KernelA.HH,2270"$ +$LK,"DOC_COLOR_PMT",A="FL:::/Kernel/KernelA.HH,1129"$ +$LK,"HPET_GEN_CONF",A="FL:::/Kernel/KernelA.HH,538"$ $LK,"MPHalt",A="FL:::/Kernel/MultiProc.HC.Z,164",BI=567$ $LK,"UnusedStk",A="FL:::/Kernel/KDbg.HC.Z,46",BI=568$ +$LK,"CCF_CLASS_DOL_OFFSET",A="FL:::/Kernel/KernelA.HH,2151"$ $LK,"DirEntryCompareName",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,62",BI=569$ +$LK,"sys_staff_mode_flag",A="FL:::/Kernel/KernelB.HH,184"$ $LK,"BFieldExtU32",A="FL:::/Kernel/KernelB.HH,30"$ -$LK,"DOCf_SUBSCRIPT_MODE",A="FL:::/Kernel/KernelA.HH,1330"$ -$LK,"TASKf_CMD_LINE_PMT",A="FL:::/Kernel/KernelA.HH,3285"$ -$LK,"ATAS_DF",A="FL:::/Kernel/KernelA.HH,2272"$ -$LK,"ROPBF_PROBABILITY_DITHER",A="FL:::/Kernel/KernelA.HH,2942"$ +$LK,"DOCf_SUBSCRIPT_MODE",A="FL:::/Kernel/KernelA.HH,1318"$ +$LK,"TASKf_CMD_LINE_PMT",A="FL:::/Kernel/KernelA.HH,3245"$ +$LK,"ATAS_DF",A="FL:::/Kernel/KernelA.HH,2259"$ +$LK,"ROPBF_PROBABILITY_DITHER",A="FL:::/Kernel/KernelA.HH,2910"$ $LK,"StrScan",A="FL:::/Kernel/StrScan.HC.Z,212",BI=570$ -$LK,"CONSERVATIVE_16MEG_SIZE",A="FL:::/Kernel/Mem/PageTables.HC.Z,96"$ -$LK,"ACD_DEF_FILENAME_Z",A="FL:::/Kernel/KernelA.HH,1498"$ +$LK,"ACD_DEF_FILENAME_Z",A="FL:::/Kernel/KernelA.HH,1486"$ $LK,"ATARepFind",A="FL:::/Kernel/BlkDev/DskATAId.HC.Z,194",BI=571$ $LK,"QSort2a",A="FL:::/Kernel/QSort.HC.Z,32",BI=572$ $LK,"num_lock_map",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,179"$ +$LK,"ms_hard_last",A="FL:::/Kernel/KGlbls.HC.Z,28"$ $LK,"QSort2b",A="FL:::/Kernel/QSort.HC.Z,55",BI=573$ -$LK,"KDF_HAS_DESCS",A="FL:::/Kernel/KernelA.HH,3810"$ -$LK,"CBlkPool",A="FL:::/Kernel/KernelA.HH,2895"$ -$LK,"SC_NUM",A="FL:::/Kernel/KernelA.HH,3564"$ -$LK,"MSG_IP_R_UP",A="FL:::/Kernel/KernelA.HH,3237"$ -$LK,"IEF_DONT_SWITCH_MODES",A="FL:::/Kernel/KernelA.HH,1728"$ +$LK,"KDF_HAS_DESCS",A="FL:::/Kernel/KernelA.HH,3763"$ +$LK,"CBlkPool",A="FL:::/Kernel/KernelA.HH,2863"$ +$LK,"RedSeaInit",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,58",BI=574$ +$LK,"SC_NUM",A="FL:::/Kernel/KernelA.HH,3517"$ +$LK,"MEM_BOOT_BASE",A="FL:::/Kernel/KStart16.HC.Z,30"$ +$LK,"IEF_DONT_SWITCH_MODES",A="FL:::/Kernel/KernelA.HH,1715"$ $LK,"I_TIMER",A="FL:::/Kernel/KernelA.HH,293"$ $LK,"IRQ_TIMER",A="FL:::/Kernel/KInts.HC.Z,16"$ -$LK,"DOC_COLOR_TREE",A="FL:::/Kernel/KernelA.HH,1140"$ -$LK,"DOCEf_HAS_BIN",A="FL:::/Kernel/KernelA.HH,1063"$ -$LK,"DOCEF_HAS_BIN",A="FL:::/Kernel/KernelA.HH,975"$ -$LK,"SYS_BOOT_BASE",A="FL:::/Kernel/KStart16.HC.Z,30"$ -$LK,"VGAP_CRTC_INDEX",A="FL:::/Kernel/KernelA.HH,3734"$ -$LK,"ATTRF_SEL",A="FL:::/Kernel/KernelA.HH,892"$ -$LK,"DrvNextFreeLet",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,51",BI=574$ -$LK,"SFF_WHOLE_LABELS_AFTER",A="FL:::/Kernel/KernelA.HH,3802"$ -$LK,"CDIR_FILENAME_LEN",A="FL:::/Kernel/KernelA.HH,2551"$ +$LK,"DOC_COLOR_TREE",A="FL:::/Kernel/KernelA.HH,1128"$ +$LK,"DOCEf_HAS_BIN",A="FL:::/Kernel/KernelA.HH,1051"$ +$LK,"DOCEF_HAS_BIN",A="FL:::/Kernel/KernelA.HH,963"$ +$LK,"VGAP_CRTC_INDEX",A="FL:::/Kernel/KernelA.HH,3687"$ +$LK,"ATTRF_SEL",A="FL:::/Kernel/KernelA.HH,880"$ +$LK,"DrvNextFreeLet",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,51",BI=575$ +$LK,"SFF_WHOLE_LABELS_AFTER",A="FL:::/Kernel/KernelA.HH,3755"$ +$LK,"CDIR_FILENAME_LEN",A="FL:::/Kernel/KernelA.HH,2538"$ $LK,"CFifoI64",A="FL:::/Kernel/KernelA.HH,176"$ -$LK,"PCIReadU32",A="FL:::/Kernel/PCIBIOS.HC.Z,201",BI=575$ -$LK,"PCIReadU16",A="FL:::/Kernel/PCIBIOS.HC.Z,182",BI=576$ -$LK,"YearStartDate",A="FL:::/Kernel/KDate.HC.Z,8",BI=577$ -$LK,"ACD_H1_END",A="FL:::/Kernel/KernelA.HH,1501"$ +$LK,"PCIReadU32",A="FL:::/Kernel/PCIBIOS.HC.Z,201",BI=576$ +$LK,"PCIReadU16",A="FL:::/Kernel/PCIBIOS.HC.Z,182",BI=577$ +$LK,"YearStartDate",A="FL:::/Kernel/KDate.HC.Z,8",BI=578$ +$LK,"ACD_H1_END",A="FL:::/Kernel/KernelA.HH,1489"$ $LK,"_REP_IN_U8",A="FL:::/Kernel/KUtils.HC.Z,275"$ $LK,"SHIFT_KEY_SCAN_DECODE_TABLE",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,9"$ -$LK,"DOCF_BREAK_UNLOCKED",A="FL:::/Kernel/KernelA.HH,1281"$ -$LK,"REG_UNDEF",A="FL:::/Kernel/KernelA.HH,1787"$ -$LK,"VGAFlush",A="FL:::/Kernel/Display.HC.Z,88",BI=578$ -$LK,"FILEMASK_AOT",A="FL:::/Kernel/KernelA.HH,2289"$ -$LK,"SysDbg",A="FL:::/Kernel/KMisc.HC.Z,245",BI=579$ -$LK,"FramePtrAdd",A="FL:::/Kernel/KHashB.HC.Z,225",BI=580$ -$LK,"FF_NEEDS_WRITE",A="FL:::/Kernel/KernelA.HH,2785"$ -$LK,"WIF_FOCUS_TASK_IP_R_D",A="FL:::/Kernel/KernelA.HH,1426"$ -$LK,"DOCF_DBL_DOLLARS",A="FL:::/Kernel/KernelA.HH,1264"$ -$LK,"LAPIC_APIC_ID",A="FL:::/Kernel/KernelA.HH,480"$ -$LK,"MPrintTime",A="FL:::/Kernel/StrPrint.HC.Z,42",BI=581$ -$LK,"CatPrint",A="FL:::/Kernel/StrPrint.HC.Z,881",BI=582$ -$LK,"TK_CHAR_CONST",A="FL:::/Kernel/KernelA.HH,2074"$ -$LK,"TASKf_AWAITING_MSG",A="FL:::/Kernel/KernelA.HH,3290"$ -$LK,"ICF_A1_TO_INT",A="FL:::/Kernel/KernelA.HH,1592"$ -$LK,"DOCf_DBL_DOLLARS",A="FL:::/Kernel/KernelA.HH,1300"$ -$LK,"EDF_UNCOLLAPSE",A="FL:::/Kernel/KernelA.HH,1250"$ -$LK,"DOCEG_HAS_ALLOC",A="FL:::/Kernel/KernelA.HH,1028"$ -$LK,"CHashSrcSym",A="FL:::/Kernel/KernelA.HH,725"$ -$LK,"HashPublic",A="FL:::/Kernel/KHashB.HC.Z,170",BI=583$ -$LK,"HEAP_CTRL_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,2908"$ -$LK,"EDf_UNCOLLAPSE",A="FL:::/Kernel/KernelA.HH,1256"$ -$LK,"CDocSettings",A="FL:::/Kernel/KernelA.HH,1148"$ -$LK,"BlkDevInit",A="FL:::/Kernel/BlkDev/DskBlkDev.HC.Z,31",BI=584$ -$LK,"CTaskStk",A="FL:::/Kernel/KernelA.HH,3308"$ -$LK,"CWinMgrTimingGlbls",A="FL:::/Kernel/KernelA.HH,1456"$ -$LK,"FAT32_ENTRIES_PER_BLK",A="FL:::/Kernel/KernelA.HH,2408"$ -$LK,"ATARBlks",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,442",BI=585$ -$LK,"GVF_ALIAS",A="FL:::/Kernel/KernelA.HH,871"$ -$LK,"CTaskSettings",A="FL:::/Kernel/KernelA.HH,3249"$ -$LK,"IEF_ENDING_ZERO",A="FL:::/Kernel/KernelA.HH,1735"$ +$LK,"DOCF_BREAK_UNLOCKED",A="FL:::/Kernel/KernelA.HH,1269"$ +$LK,"REG_UNDEF",A="FL:::/Kernel/KernelA.HH,1774"$ +$LK,"VGAFlush",A="FL:::/Kernel/Display.HC.Z,88",BI=579$ +$LK,"FILEMASK_AOT",A="FL:::/Kernel/KernelA.HH,2276"$ +$LK,"SysDbg",A="FL:::/Kernel/KMisc.HC.Z,261",BI=580$ +$LK,"FramePtrAdd",A="FL:::/Kernel/KHashB.HC.Z,225",BI=581$ +$LK,"FF_NEEDS_WRITE",A="FL:::/Kernel/KernelA.HH,2773"$ +$LK,"DOCF_DBL_DOLLARS",A="FL:::/Kernel/KernelA.HH,1252"$ +$LK,"LAPIC_APIC_ID",A="FL:::/Kernel/KernelA.HH,483"$ +$LK,"MPrintTime",A="FL:::/Kernel/StrPrint.HC.Z,42",BI=582$ +$LK,"CatPrint",A="FL:::/Kernel/StrPrint.HC.Z,881",BI=583$ +$LK,"TK_CHAR_CONST",A="FL:::/Kernel/KernelA.HH,2061"$ +$LK,"TASKf_AWAITING_MSG",A="FL:::/Kernel/KernelA.HH,3250"$ +$LK,"DOCf_DBL_DOLLARS",A="FL:::/Kernel/KernelA.HH,1288"$ +$LK,"EDF_UNCOLLAPSE",A="FL:::/Kernel/KernelA.HH,1238"$ +$LK,"DOCEG_HAS_ALLOC",A="FL:::/Kernel/KernelA.HH,1016"$ +$LK,"CHashSrcSym",A="FL:::/Kernel/KernelA.HH,713"$ +$LK,"HashPublic",A="FL:::/Kernel/KHashB.HC.Z,170",BI=584$ +$LK,"HEAP_CTRL_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,2876"$ +$LK,"EDf_UNCOLLAPSE",A="FL:::/Kernel/KernelA.HH,1244"$ +$LK,"CDocSettings",A="FL:::/Kernel/KernelA.HH,1136"$ +$LK,"BlkDevInit",A="FL:::/Kernel/BlkDev/DskBlkDev.HC.Z,31",BI=585$ +$LK,"CTaskStk",A="FL:::/Kernel/KernelA.HH,3269"$ +$LK,"CWinMgrTimingGlbls",A="FL:::/Kernel/KernelA.HH,1444"$ +$LK,"KbdMsCmdAck",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,65",BI=586$ +$LK,"FAT32_ENTRIES_PER_BLK",A="FL:::/Kernel/KernelA.HH,2395"$ +$LK,"ATARBlks",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,445",BI=587$ +$LK,"GVF_ALIAS",A="FL:::/Kernel/KernelA.HH,859"$ +$LK,"CTaskSettings",A="FL:::/Kernel/KernelA.HH,3209"$ +$LK,"IEF_ENDING_ZERO",A="FL:::/Kernel/KernelA.HH,1722"$ +$LK,"char_bmp_displayable",A="FL:::/Kernel/StrA.HC.Z,381"$ $LK,"PUT_CHARS",A="FL:::/Kernel/StrA.HC.Z,51"$ -$LK,"CMemE820",A="FL:::/Kernel/KernelA.HH,359"$ -$LK,"DVD_BOOT_LOADER_SIZE",A="FL:::/Kernel/KernelA.HH,2299"$ -$LK,"ATAS_DRQ",A="FL:::/Kernel/KernelA.HH,2271"$ -$LK,"DOCF_BORDER_DOC",A="FL:::/Kernel/KernelA.HH,1267"$ -$LK,"DrvEnable",A="FL:::/Kernel/BlkDev/DskAddDev.HC.Z,160",BI=586$ -$LK,"BlkDevLock",A="FL:::/Kernel/BlkDev/DskBlkDev.HC.Z,1",BI=587$ -$LK,"BDT_NUM_TYPES",A="FL:::/Kernel/KernelA.HH,2637"$ -$LK,"DOCf_BORDER_DOC",A="FL:::/Kernel/KernelA.HH,1303"$ -$LK,"MRT_RAM",A="FL:::/Kernel/KernelA.HH,2867"$ -$LK,"FSt_NUM_TYPES",A="FL:::/Kernel/KernelA.HH,2696"$ -$LK,"ATAS_BSY",A="FL:::/Kernel/KernelA.HH,2274"$ -$LK,"HTt_NUM_TYPES",A="FL:::/Kernel/KernelA.HH,670"$ -$LK,"ICF_R_WAS_STK",A="FL:::/Kernel/KernelA.HH,1604"$ -$LK,"DOCf_BREAK_UNLOCKED",A="FL:::/Kernel/KernelA.HH,1317"$ -$LK,"sys_mem_init_val",A="FL:::/Kernel/KernelB.HH,184"$ -$LK,"SYS_SEMA_FORCE_WINMGR",A="FL:::/Kernel/KernelA.HH,612"$ -$LK,"ATAS_ERR",A="FL:::/Kernel/KernelA.HH,2270"$ -$LK,"Struct2Date",A="FL:::/Kernel/KDate.HC.Z,14",BI=588$ -$LK,"ISO1T_TERMINATOR",A="FL:::/Kernel/KernelA.HH,2482"$ -$LK,"SF_RBP",A="FL:::/Kernel/KernelA.HH,558"$ -$LK,"SYS_MP_CNT",A="FL:::/Kernel/KStart32.HC.Z,51"$ -$LK,"CMF_U8_JMP_TABLE",A="FL:::/Kernel/KernelA.HH,1697"$ -$LK,"CMF_I8_JMP_TABLE",A="FL:::/Kernel/KernelA.HH,1696"$ -$LK,"EdLiteUpdate",A="FL:::/Kernel/EdLite.HC.Z,7",BI=589$ +$LK,"SEMA_SYS_TIMER",A="FL:::/Kernel/KernelA.HH,596"$ +$LK,"CMemE820",A="FL:::/Kernel/KernelA.HH,358"$ +$LK,"DVD_BOOT_LOADER_SIZE",A="FL:::/Kernel/KernelA.HH,2286"$ +$LK,"ATAS_DRQ",A="FL:::/Kernel/KernelA.HH,2258"$ +$LK,"DOCF_BORDER_DOC",A="FL:::/Kernel/KernelA.HH,1255"$ +$LK,"DrvEnable",A="FL:::/Kernel/BlkDev/DskAddDev.HC.Z,170",BI=588$ +$LK,"char_bmp_white_space",A="FL:::/Kernel/StrA.HC.Z,356"$ +$LK,"BlkDevLock",A="FL:::/Kernel/BlkDev/DskBlkDev.HC.Z,1",BI=589$ +$LK,"MEM_PML2",A="FL:::/Kernel/KStart32.HC.Z,13"$ +$LK,"BDT_NUM_TYPES",A="FL:::/Kernel/KernelA.HH,2624"$ +$LK,"DOCf_BORDER_DOC",A="FL:::/Kernel/KernelA.HH,1291"$ +$LK,"MEM_PML3",A="FL:::/Kernel/KStart32.HC.Z,14"$ +$LK,"MRT_RAM",A="FL:::/Kernel/KernelA.HH,2835"$ +$LK,"FSt_NUM_TYPES",A="FL:::/Kernel/KernelA.HH,2683"$ +$LK,"ATAS_BSY",A="FL:::/Kernel/KernelA.HH,2261"$ +$LK,"HTt_NUM_TYPES",A="FL:::/Kernel/KernelA.HH,658"$ +$LK,"MEM_PML4",A="FL:::/Kernel/KStart32.HC.Z,15"$ +$LK,"DOCf_BREAK_UNLOCKED",A="FL:::/Kernel/KernelA.HH,1305"$ +$LK,"sys_mem_init_val",A="FL:::/Kernel/KernelB.HH,183"$ +$LK,"ATAS_ERR",A="FL:::/Kernel/KernelA.HH,2257"$ +$LK,"Struct2Date",A="FL:::/Kernel/KDate.HC.Z,14",BI=590$ +$LK,"ISO1T_TERMINATOR",A="FL:::/Kernel/KernelA.HH,2469"$ +$LK,"SF_RBP",A="FL:::/Kernel/KernelA.HH,561"$ +$LK,"SYS_MP_CNT",A="FL:::/Kernel/KStart32.HC.Z,65"$ +$LK,"CMF_U8_JMP_TABLE",A="FL:::/Kernel/KernelA.HH,1684"$ +$LK,"CMF_I8_JMP_TABLE",A="FL:::/Kernel/KernelA.HH,1683"$ +$LK,"EdLiteUpdate",A="FL:::/Kernel/EdLite.HC.Z,7",BI=591$ $LK,"_ARC_ENTRY_GET",A="FL:::/Kernel/Compress.HC.Z,43"$ -$LK,"DOCT_NUM_TYPES",A="FL:::/Kernel/KernelA.HH,945"$ -$LK,"SYS_CTRL_ALT_FLAGS",A="FL:::/Kernel/KStart32.HC.Z,24"$ -$LK,"BOOT_RAM_BASE",A="FL:::/Kernel/KernelA.HH,3880"$ -$LK,"MT_DVD",A="FL:::/Kernel/KernelA.HH,2544"$ -$LK,"FramePtrDel",A="FL:::/Kernel/KHashB.HC.Z,240",BI=590$ -$LK,"chars_bmp_filename",A="FL:::/Kernel/StrA.HC.Z,345"$ -$LK,"CICType",A="FL:::/Kernel/KernelA.HH,1625"$ -$LK,"ICF_A2_WAS_STK",A="FL:::/Kernel/KernelA.HH,1606"$ -$LK,"FILEMASK_JIT",A="FL:::/Kernel/KernelA.HH,2288"$ -$LK,"ATAS_DRDY",A="FL:::/Kernel/KernelA.HH,2273"$ -$LK,"ARGT_AL",A="FL:::/Kernel/KernelA.HH,1917"$ -$LK,"CIntermediateCodeBase",A="FL:::/Kernel/KernelA.HH,1644"$ -$LK,"CAutoCompleteDictGlbls",A="FL:::/Kernel/KernelA.HH,1520"$ -$LK,"SYS_CODE_BP",A="FL:::/Kernel/KStart32.HC.Z,27"$ -$LK,"WClusters",A="FL:::/Kernel/BlkDev/DskCluster.HC.Z,129",BI=591$ -$LK,"LXchgI64",A="FL:::/Kernel/KernelB.HH,257"$ -$LK,"MSG_KEY_DOWN_UP",A="FL:::/Kernel/KernelA.HH,3241"$ -$LK,"TASKf_NONTIMER_RAND",A="FL:::/Kernel/KernelA.HH,3296"$ -$LK,"ARGT_CL",A="FL:::/Kernel/KernelA.HH,1922"$ -$LK,"ARGT_M8",A="FL:::/Kernel/KernelA.HH,1902"$ -$LK,"ChkOnStk",A="FL:::/Kernel/KDbg.HC.Z,31",BI=592$ -$LK,"TaskQueInsChild",A="FL:::/Kernel/Sched.HC.Z,314",BI=593$ -$LK,"TK_F64",A="FL:::/Kernel/KernelA.HH,2075"$ -$LK,"RLF_BOOT_HEAP",A="FL:::/Kernel/KernelA.HH,463"$ -$LK,"RLf_BOOT_HEAP",A="FL:::/Kernel/KernelA.HH,444"$ +$LK,"DOCT_NUM_TYPES",A="FL:::/Kernel/KernelA.HH,933"$ +$LK,"SYS_CTRL_ALT_FLAGS",A="FL:::/Kernel/KStart32.HC.Z,34"$ +$LK,"BOOT_RAM_BASE",A="FL:::/Kernel/KernelA.HH,3835"$ +$LK,"JOBf_HIGHEST_PRIORITY",A="FL:::/Kernel/KernelA.HH,3146"$ +$LK,"MT_DVD",A="FL:::/Kernel/KernelA.HH,2531"$ +$LK,"FramePtrDel",A="FL:::/Kernel/KHashB.HC.Z,240",BI=592$ +$LK,"CICType",A="FL:::/Kernel/KernelA.HH,1613"$ +$LK,"FILEMASK_JIT",A="FL:::/Kernel/KernelA.HH,2275"$ +$LK,"ATAS_DRDY",A="FL:::/Kernel/KernelA.HH,2260"$ +$LK,"ARGT_AL",A="FL:::/Kernel/KernelA.HH,1904"$ +$LK,"CIntermediateCodeBase",A="FL:::/Kernel/KernelA.HH,1632"$ +$LK,"CAutoCompleteDictGlbls",A="FL:::/Kernel/KernelA.HH,1508"$ +$LK,"SYS_CODE_BP",A="FL:::/Kernel/KStart32.HC.Z,37"$ +$LK,"WClusters",A="FL:::/Kernel/BlkDev/DskCluster.HC.Z,129",BI=593$ +$LK,"LXchgI64",A="FL:::/Kernel/KernelB.HH,263"$ +$LK,"MSG_KEY_DOWN_UP",A="FL:::/Kernel/KernelA.HH,3201"$ +$LK,"TASKf_NONTIMER_RAND",A="FL:::/Kernel/KernelA.HH,3256"$ +$LK,"ARGT_CL",A="FL:::/Kernel/KernelA.HH,1909"$ +$LK,"ARGT_M8",A="FL:::/Kernel/KernelA.HH,1889"$ +$LK,"ChkOnStk",A="FL:::/Kernel/KDbg.HC.Z,31",BI=594$ +$LK,"TaskQueInsChild",A="FL:::/Kernel/Sched.HC.Z,314",BI=595$ +$LK,"TK_F64",A="FL:::/Kernel/KernelA.HH,2062"$ +$LK,"ICF_ARG1_TO_INT",A="FL:::/Kernel/KernelA.HH,1580"$ $LK,"I_USER",A="FL:::/Kernel/KernelA.HH,302"$ -$LK,"FAT32CDirFill",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,226",BI=594$ -$LK,"BlkPoolAdd",A="FL:::/Kernel/Mem/BlkPool.HC.Z,1",BI=595$ -$LK,"TK_NORMALSCRIPT",A="FL:::/Kernel/KernelA.HH,2070"$ -$LK,"SF_RIP",A="FL:::/Kernel/KernelA.HH,559"$ -$LK,"IOAPIC_REG",A="FL:::/Kernel/KernelA.HH,510"$ +$LK,"FAT32CDirFill",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,214",BI=596$ +$LK,"BlkPoolAdd",A="FL:::/Kernel/Mem/BlkPool.HC.Z,1",BI=597$ +$LK,"TK_NORMALSCRIPT",A="FL:::/Kernel/KernelA.HH,2057"$ +$LK,"SF_RIP",A="FL:::/Kernel/KernelA.HH,562"$ +$LK,"IOAPIC_REG",A="FL:::/Kernel/KernelA.HH,513"$ $LK,"Complex",A="FL:::/Kernel/KernelA.HH,116"$ $LK,"Trunc",A="FL:::/Kernel/KernelB.HH,141"$ -$LK,"ROPB_EQU",A="FL:::/Kernel/KernelA.HH,2935"$ -$LK,"HTf_IMM",A="FL:::/Kernel/KernelA.HH,676"$ +$LK,"ROPB_EQU",A="FL:::/Kernel/KernelA.HH,2903"$ +$LK,"HTf_IMM",A="FL:::/Kernel/KernelA.HH,664"$ $LK,"sys_pci_services",A="FL:::/Kernel/PCIBIOS.HC.Z,159"$ -$LK,"CStreamBlk",A="FL:::/Kernel/KernelA.HH,2009"$ -$LK,"ARGT_M32",A="FL:::/Kernel/KernelA.HH,1904"$ -$LK,"ARGT_M16",A="FL:::/Kernel/KernelA.HH,1903"$ -$LK,"MEM_EXTRA_HASH2_PAGES",A="FL:::/Kernel/KernelA.HH,2884"$ -$LK,"ARGT_CS",A="FL:::/Kernel/KernelA.HH,1932"$ -$LK,"ICF_R_TO_F64",A="FL:::/Kernel/KernelA.HH,1589"$ -$LK,"DOC_COLOR_QUOTE",A="FL:::/Kernel/KernelA.HH,1146"$ -$LK,"DOCSS_DBL_QUOTE",A="FL:::/Kernel/KernelA.HH,1131"$ +$LK,"CStreamBlk",A="FL:::/Kernel/KernelA.HH,1996"$ +$LK,"ARGT_M32",A="FL:::/Kernel/KernelA.HH,1891"$ +$LK,"ARGT_M16",A="FL:::/Kernel/KernelA.HH,1890"$ +$LK,"char_bmp_zero_cr_nl_cursor",A="FL:::/Kernel/StrA.HC.Z,362"$ +$LK,"ARGT_CS",A="FL:::/Kernel/KernelA.HH,1919"$ +$LK,"DOC_COLOR_QUOTE",A="FL:::/Kernel/KernelA.HH,1134"$ +$LK,"DOCSS_DBL_QUOTE",A="FL:::/Kernel/KernelA.HH,1119"$ $LK,"SYS_PCI_SERVICES",A="FL:::/Kernel/PCIBIOS.HC.Z,5"$ $LK,"_STRCMP",A="FL:::/Kernel/StrA.HC.Z,86"$ -$LK,"ARGT_AX",A="FL:::/Kernel/KernelA.HH,1918"$ -$LK,"LAPIC_PROCESSOR_PRIORITY",A="FL:::/Kernel/KernelA.HH,484"$ -$LK,"Core0Init",A="FL:::/Kernel/MultiProc.HC.Z,355",BI=596$ -$LK,"ARGT_DS",A="FL:::/Kernel/KernelA.HH,1927"$ -$LK,"ARGT_R8",A="FL:::/Kernel/KernelA.HH,1892"$ -$LK,"AStrNew",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,461",BI=597$ -$LK,"ARGT_ES",A="FL:::/Kernel/KernelA.HH,1928"$ -$LK,"ICF_A2_TO_F64",A="FL:::/Kernel/KernelA.HH,1593"$ -$LK,"DOCF_PLAIN_TEXT_TABS",A="FL:::/Kernel/KernelA.HH,1261"$ -$LK,"Cf_INTERNAL_TYPE",A="FL:::/Kernel/KernelA.HH,832"$ -$LK,"FAT32DrvInit",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,22",BI=598$ -$LK,"DOCT_ANCHOR",A="FL:::/Kernel/KernelA.HH,928"$ -$LK,"KbdPktRead",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,388",BI=599$ -$LK,"KbdCmdRead",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,36",BI=600$ +$LK,"ARGT_AX",A="FL:::/Kernel/KernelA.HH,1905"$ +$LK,"LAPIC_PROCESSOR_PRIORITY",A="FL:::/Kernel/KernelA.HH,487"$ +$LK,"Core0Init",A="FL:::/Kernel/MultiProc.HC.Z,354",BI=598$ +$LK,"ARGT_DS",A="FL:::/Kernel/KernelA.HH,1914"$ +$LK,"ARGT_R8",A="FL:::/Kernel/KernelA.HH,1879"$ +$LK,"AStrNew",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,461",BI=599$ +$LK,"JOBf_DONT_FILTER",A="FL:::/Kernel/KernelA.HH,3145"$ +$LK,"ARGT_ES",A="FL:::/Kernel/KernelA.HH,1915"$ +$LK,"DOCF_PLAIN_TEXT_TABS",A="FL:::/Kernel/KernelA.HH,1249"$ +$LK,"Cf_INTERNAL_TYPE",A="FL:::/Kernel/KernelA.HH,820"$ +$LK,"DOCT_ANCHOR",A="FL:::/Kernel/KernelA.HH,916"$ +$LK,"KbdPktRead",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,388",BI=600$ +$LK,"KbdCmdRead",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,36",BI=601$ $LK,"D3DivEqu",A="FL:::/Kernel/KernelB.HH,152"$ -$LK,"ARGT_FS",A="FL:::/Kernel/KernelA.HH,1929"$ -$LK,"TK_I64",A="FL:::/Kernel/KernelA.HH,2073"$ -$LK,"ARGT_DX",A="FL:::/Kernel/KernelA.HH,1923"$ -$LK,"ARGT_M64",A="FL:::/Kernel/KernelA.HH,1905"$ -$LK,"DOCE_LEN_DFT",A="FL:::/Kernel/KernelA.HH,1180"$ -$LK,"DOC_COLOR_KEYWORD2",A="FL:::/Kernel/KernelA.HH,1144"$ +$LK,"ARGT_FS",A="FL:::/Kernel/KernelA.HH,1916"$ +$LK,"TK_I64",A="FL:::/Kernel/KernelA.HH,2060"$ +$LK,"ARGT_DX",A="FL:::/Kernel/KernelA.HH,1910"$ +$LK,"ARGT_M64",A="FL:::/Kernel/KernelA.HH,1892"$ +$LK,"DOCE_LEN_DFT",A="FL:::/Kernel/KernelA.HH,1168"$ +$LK,"DOC_COLOR_KEYWORD2",A="FL:::/Kernel/KernelA.HH,1132"$ $LK,"CD2I32",A="FL:::/Kernel/KernelA.HH,138"$ -$LK,"DrvLock",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,1",BI=601$ -$LK,"ARGT_GS",A="FL:::/Kernel/KernelA.HH,1931"$ -$LK,"CICTreeLinks",A="FL:::/Kernel/KernelA.HH,1637"$ -$LK,"DOC_COLOR_COMMENT",A="FL:::/Kernel/KernelA.HH,1145"$ -$LK,"SYS_MEM_E801",A="FL:::/Kernel/KStart16.HC.Z,31"$ -$LK,"ATA_NOP",A="FL:::/Kernel/KernelA.HH,2257"$ -$LK,"SVCf_DONT_FILTER",A="FL:::/Kernel/KernelA.HH,3183"$ -$LK,"IET_REL_I0",A="FL:::/Kernel/KernelA.HH,395"$ -$LK,"OC_ADDR_SIZE_PREFIX",A="FL:::/Kernel/KernelA.HH,1756"$ -$LK,"SYS_MEM_E820",A="FL:::/Kernel/KStart16.HC.Z,32"$ -$LK,"SUF_SINGLE_SPACE",A="FL:::/Kernel/KernelA.HH,3791"$ +$LK,"DrvLock",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,1",BI=602$ +$LK,"ARGT_GS",A="FL:::/Kernel/KernelA.HH,1918"$ +$LK,"CICTreeLinks",A="FL:::/Kernel/KernelA.HH,1625"$ +$LK,"DOC_COLOR_COMMENT",A="FL:::/Kernel/KernelA.HH,1133"$ +$LK,"ATA_NOP",A="FL:::/Kernel/KernelA.HH,2244"$ +$LK,"IET_REL_I0",A="FL:::/Kernel/KernelA.HH,394"$ +$LK,"OC_ADDR_SIZE_PREFIX",A="FL:::/Kernel/KernelA.HH,1743"$ +$LK,"SUF_SINGLE_SPACE",A="FL:::/Kernel/KernelA.HH,3744"$ $LK,"RFLAGG_START",A="FL:::/Kernel/KernelA.HH,327"$ -$LK,"CKeyDevEntry",A="FL:::/Kernel/KernelA.HH,3811"$ -$LK,"MSG_IP_R_D_DOWN_UP",A="FL:::/Kernel/KernelA.HH,3245"$ -$LK,"MSG_IP_L_D_DOWN_UP",A="FL:::/Kernel/KernelA.HH,3243"$ -$LK,"XTalkWait",A="FL:::/Kernel/SrvCmd.HC.Z,456",BI=602$ -$LK,"MemPageTable",A="FL:::/Kernel/Mem/PageTables.HC.Z,127",BI=603$ -$LK,"CCF_KEEP_NUM_SIGN",A="FL:::/Kernel/KernelA.HH,2135"$ -$LK,"ARGT_MM",A="FL:::/Kernel/KernelA.HH,1936"$ -$LK,"chars_bmp_alpha_numeric_no_at",A="FL:::/Kernel/StrA.HC.Z,335"$ -$LK,"SysHlt",A="FL:::/Kernel/KernelB.HH,263"$ -$LK,"FUF_JUST_DIRS",A="FL:::/Kernel/KernelA.HH,2607"$ +$LK,"CKeyDevEntry",A="FL:::/Kernel/KernelA.HH,3764"$ +$LK,"XTalkWait",A="FL:::/Kernel/Job.HC.Z,454",BI=603$ +$LK,"MemPageTable",A="FL:::/Kernel/Mem/PageTables.HC.Z,199",BI=604$ +$LK,"MSG_MS_R_D_DOWN_UP",A="FL:::/Kernel/KernelA.HH,3205"$ +$LK,"MSG_MS_L_D_DOWN_UP",A="FL:::/Kernel/KernelA.HH,3203"$ +$LK,"CCF_KEEP_NUM_SIGN",A="FL:::/Kernel/KernelA.HH,2122"$ +$LK,"ARGT_MM",A="FL:::/Kernel/KernelA.HH,1923"$ +$LK,"SysHlt",A="FL:::/Kernel/KernelB.HH,269"$ +$LK,"FUF_JUST_DIRS",A="FL:::/Kernel/KernelA.HH,2594"$ $LK,"CD2I64",A="FL:::/Kernel/KernelA.HH,142"$ $LK,"CD3I32",A="FL:::/Kernel/KernelA.HH,128"$ +$LK,"MsHardPktRead",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,78",BI=605$ $LK,"_STRCPY",A="FL:::/Kernel/StrA.HC.Z,65"$ -$LK,"RedSeaDrvValidate",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,82",BI=604$ -$LK,"YELLOW",A="FL:::/Kernel/KernelA.HH,2974"$ -$LK,"FUf_JUST_DIRS",A="FL:::/Kernel/KernelA.HH,2580"$ -$LK,"RedSeaFreeFreeLst",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,3",BI=605$ -$LK,"IPVarsInit",A="FL:::/Kernel/SerialDev/InputPointer.HC.Z,68",BI=606$ -$LK,"IET_REL_I8",A="FL:::/Kernel/KernelA.HH,397"$ -$LK,"MouseGetDevType",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,26",BI=607$ -$LK,"ARGT_R32",A="FL:::/Kernel/KernelA.HH,1894"$ -$LK,"ARGT_R16",A="FL:::/Kernel/KernelA.HH,1893"$ -$LK,"DOC_DFT",A="FL:::/Kernel/KernelA.HH,1158"$ -$LK,"CMemberLstMeta",A="FL:::/Kernel/KernelA.HH,790"$ -$LK,"DISPLAYf_WIN_ON_TOP",A="FL:::/Kernel/KernelA.HH,3303"$ -$LK,"CAutoCompleteGlbls",A="FL:::/Kernel/KernelA.HH,1483"$ -$LK,"CAOTImportExport",A="FL:::/Kernel/KernelA.HH,1957"$ -$LK,"MEM_SETH_STK",A="FL:::/Kernel/KernelA.HH,2887"$ -$LK,"DOCEF_HAS_TERMINATOR",A="FL:::/Kernel/KernelA.HH,1014"$ +$LK,"YELLOW",A="FL:::/Kernel/KernelA.HH,2942"$ +$LK,"FUf_JUST_DIRS",A="FL:::/Kernel/KernelA.HH,2567"$ +$LK,"RedSeaFreeFreeLst",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,3",BI=606$ +$LK,"IET_REL_I8",A="FL:::/Kernel/KernelA.HH,396"$ +$LK,"ARGT_R32",A="FL:::/Kernel/KernelA.HH,1881"$ +$LK,"ARGT_R16",A="FL:::/Kernel/KernelA.HH,1880"$ +$LK,"DOC_DFT",A="FL:::/Kernel/KernelA.HH,1146"$ +$LK,"CMemberLstMeta",A="FL:::/Kernel/KernelA.HH,778"$ +$LK,"DISPLAYf_WIN_ON_TOP",A="FL:::/Kernel/KernelA.HH,3263"$ +$LK,"CAutoCompleteGlbls",A="FL:::/Kernel/KernelA.HH,1471"$ +$LK,"char_bmp_non_eol",A="FL:::/Kernel/StrA.HC.Z,391"$ +$LK,"CAOTImportExport",A="FL:::/Kernel/KernelA.HH,1944"$ +$LK,"MEM_SETH_STK",A="FL:::/Kernel/KernelA.HH,2855"$ +$LK,"DOCEF_HAS_TERMINATOR",A="FL:::/Kernel/KernelA.HH,1002"$ $LK,"CD3I64",A="FL:::/Kernel/KernelA.HH,146"$ $LK,"c32_edi",A="FL:::/Kernel/PCIBIOS.HC.Z,157"$ $LK,"_CALL_IND",A="FL:::/Kernel/KUtils.HC.Z,332"$ -$LK,"PURPLE",A="FL:::/Kernel/KernelA.HH,2965"$ -$LK,"TASKf_BREAK_LOCKED",A="FL:::/Kernel/KernelA.HH,3291"$ -$LK,"FILEMASK_SRC",A="FL:::/Kernel/KernelA.HH,2290"$ -L8G«ß«ßµßÉßËßÙßÛßìßàà+àYà]à]àbàDVc£%£%§%¶%Â%Î%Ú%è%ô%û%&&&&@4@S$S$[$_$v$�$¤$³$¿$Í$Ô$å$æ$ê$,‡ŽºSºS¾SÏSÔSØST„Õ0�0�4�L�Y�^�g�l�q�v�{�€�…���¾�Ï�é�ö�ÿ�ž žž,žž<žAžIžgžgžlž|ž‚žŒž‘žšžŸž¤ž´žÅžúžÿž&Ÿ+Ÿ0Ÿ5ŸVŸTŸdŸpŸ‡Ÿ�Ÿ—Ÿ£Ÿ¯ŸÑŸÑŸØŸߟäŸëŸôŸõŸþŸ ¸ <#####6#P#i#v#}###ˆ#–#D™¦ããñÿ '::Cˆ/MJ´J´Z´e´p´w´w´š´¦´µ´´Ï´Ô´Ú´é´ï´ö´ö´ú´ú´ú´ú´µ -µµ 0ÎÖ{—{—•—­—À———̗ -Ì ;X9X9p9v9�9“9Ÿ9´9º9À9Æ9å9ê9ò9ò9:: :0:6:8:G:K:Z:`:c:e:t:x:‡:�:�:’:¢:¦:º:½:À:Â:Ñ:Ô:à: Ä¥Òà6à67 77 777A7G7J7M7P7Œ7�7’7”7§7ª7­7µ7»7À7À7Æ7Ò7Ô7Ý7Ý7Ý7Ý7ã7æ7ë7î7ö78 ˆCa:¿:¿`¿d¿l¿r¿{¿ƒ¿‰¿Œ¿˜¿˜¿Æ¿Ó¿Ý¿à¿ã¿ê¿ò¿ø¿ÀÀÀ h"§"§+§9§H§S§c§s§ƒ§“§¢§±§Á§ѧò§ô§¨¨"¨2¨^¨^¨c¨4æïS˜S˜m˜{˜“˜¦˜¨˜¨˜²˜h:PÈaÈaÖaØaåaòaùabb b#b?bSbbbjbsbubub}b44=hIhIvI’I’I•I¯I¯IµI TX›û›û©û·û(-3$$ $%$-$B$D$N$HÜêqxqx‘xžx£x¯xÏxÕxÛxèxñxòxþx(Z`VÜVÜp܂܊Ü�ܘÜ$üZ‰Z‰c‰k‰q‰v‰0¯·2Õ2ÕHÕSÕdÕfÕnÕ8– xdxd†d�d˜d�dŸd¶d¶d¿dÅdPr‚pcpc~c…c�c•cžc­c³cºc¼c¿cÊcÐc€[wbÄbÄ�ĔĘįĿÄÕÄëÄýÄýÄÅÅ&Å,Å/Å6Å:Å>ÅBÅFÅFÅFÅôÅà:.rˆrˆ‹ˆ“ˆ®ˆ¹ˆÀˆ͈Úˆçˆûˆ‰,‰7‰E‰U‰^‰a‰k‰o‰Љ�‰–‰ž‰°‰³‰Á‰Љá‰ç‰í‰ù‰Š Š$Š)Š<Š\ŠkŠrŠyŠyŠ€ŠˆŠ•Š—Š©Š±Š³Š½ŠÄŠÄŠÄŠËŠÓŠÝŠèŠôŠ‹‹G‹G‹k‹k‹r‹|‹’‹´‹¹‹¹‹À‹È‹Þ‹ŒŒŒŒ'Œ*Œ6Œ9Œ<ŒZŒZŒ_Œ_ŒgŒlŒpŒ€ŒƒŒœŒœŒ¡Œ¡Œ´Œ»ŒÅŒÛŒùŒüŒþŒþŒ�� �6�T�W�Y�Y�t�w�—�²�»�Ä�È�Ö�Ü�Ü�ù�ù�ù�þ�þ�þ� -ŽŽ(Ž9Ž<Ž?ŽDŽDŽIŽaŽdŽŠŽŽŽ©ŽÂŽËŽÔŽØŽæŽìŽïŽôŽôŽ�� -��!�'�*�/�/�C�O�[�k�ƒ�¨�µ�¹�Ï�é�û��� � ��!�3�8�@�G�S�p�s�u�†���™�²�¿�Â�É�Ì�Î�æ�ù�‘‘‘‘‘!‘+‘9‘B‘H‘O‘Z‘c‘r‘�‘�‘°‘¹‘#’4×àÓ—Ó—ç—õ— ˜˜˜˜"˜@@LÃÃËÒßîý&5>]a`ˆœc'c'q'~'ˆ'ˆ'›'£'¶'¸'Ë'Ë'Ï'Ù'Þ'Þ'ä'|w’¦¦:¦J¦U¦Z¦\¦b¦t¦†¦–¦§¦·¦¹¦¹¦¹¦¿¦ئõ¦§§§§§ XÓå£9£9¯9±9À9Ö9â9é9::::::$: @8D‚Š‚Š�Š’Š´ŠÁŠÁŠËŠ!|ÿû û , / = F F ] n ƒ ˆ › Ÿ ° à Ì Ü ä ô !!;!"¬Elè‚è‚þ‚ƒƒ"ƒ4ƒHƒSƒYƒqƒqƒ…ƒ“ƒ�ƒ¬ƒ±ƒ±ƒ½ƒ½ƒÃÃ-„2„2„Z„Z„h„k„n„|„‚„‹„³„# †ŠÈ\È\Ñ\Þ\ã\$H—¥nn‰‹œ¨­¹¹½Ç%Œ¬Ëæøæøù -ùù/ùBùBùMùRùZùtù|ù�ù™ùžùªù°ù·ùÄùÇùÐùÓùÖùÛùú& lp–˖˪˸˾Ë'D6Cx—x—”—–—©—®—¾—Ë—Ñ—Ô—à—(p¼ÔNN\j€�”¤¦¬µ½Èâò÷)h#9XwXwnwpww“w•wžw w w£w¿wÿw xx&x0x;x>xLx*$glÐyÐyÔyäyïy -z+œd‡&&1&:&G&T&a&y&�&�&£&£&«&À&Í&Í&Ú&â&ñ&' ' '1'9'M'T'T'^',|9aaa a0a:aAaHaQaYaqaxaa‰a‘a˜aŸa§a­a¸a¼a¾a¾aÂa-Xü§ü§¨¨#¨&¨/¨:¨M¨W¨_¨c¨f¨f¨l¨o¨}¨.D ,UQUQiQyQ€Q•QœQ£Q¤Q¬Q/”9K K S w † ’ � « ½ Ë Ó á õ ( -* -. -. -9 -D -S -b -‚ -� -’ -¤ -« -« -½ -¾ - -0Xßñ^lzz’˜¡©´¾ÅÝÝÝääåë1Pz‰z‰Ž‰ž‰¤‰©‰©‰º‰¾‰Ã‰Ã‰Ë‰2 $(èHèHöH -II3Œ«Êúšúš››(›8›E›I›M›p›}›‰›”› ›©›è›ð›œ&œ4œ;œBœIœjœpœwœzœ�œ4ŒýÒÌÒÌÜÌÞÌöÌÍÍ ÍNÍQÍZ͈͋Í�͔ͧ͠ÍÉÍÌÍÎÍÕÍ÷ÍúÍúÍýÍÎÎÎ5@-9­Q­Q½QÆQÍQÔQÛQÜQäQ6 ªŸªŸ®ŸןéŸ7<ðûòˆòˆ‰‰ ‰0‰8‰@‰H‰K‰S‰84aj0K0K8KFK…K•K¢K¶KºK¼K94MVJJJ&JeJuJ‚J–J›J�J: £Çƒýƒý¤ý®ý¸ýÏýåýêý÷ýüýþ7þ<þOþTþYþsþˆþŠþ¤þ¹þ¹þÀþÀþÀþgÿ;$“˜««´Â×Ü< PT~ì~ì‚ì”ì–ì=L¡°rÚrÚ|Ú’Ú¡Ú§Ú¶Ú¼ÚËÚÑÚàÚæÚõÚûÚýÚÛ>H!Ò‰Ò‰à‰ì‰ñ‰ñ‰ŠŠŠŠ Š?,````&`3`9`>`@Lùšžšž¨ž«ž·žÁžÇžÔžèžèž -Ÿ -Ÿ'Ÿ+Ÿ/Ÿ5ŸA …‰..2AEB\˜«>ø>øRø`øeøkøvøøø�ø›øŸø·ø¾øÁøÃøæøC4Š“FFJTd…šššžD4u~PLPLYLcL�L­L¹LÉLÌLÏLE¸�Çð8ð8ø89 9*939I9]9g9s9~9~9�9®9Ó9à9è9þ9 ::: :A:f:s:{:‘:œ:®:®:¼:Ã:Õ:Õ:ã:ã:ä:÷:F ”˜žž¢ÅÉGpu�:Ù:ÙTÙfققىًًٙٛٛ٧٧٭ٵٹÙÄÙÜÙöÙöÙöÙÚH DX}X}`}l}”}¨}¬}»}Ç}Õ}ä})~)~U~r~|~‹~‰~¸~¸~Þ~Þ~ã~è~è~÷~ 0KY{“®·»½½ÉÉËËÛççëðù €€ €/€g€p€‚€‚€ˆ€ã‚I|7ËËãíô (+3GQgmprx„J4•žâ~â~ì~î~'(-K,'.NëNëXëZëbë|ë�ë‡ëLXƒ•ÐcÐcâcåcðcõcdddd1d;dDdZdedldvdM�Qq€b€bšb¥bªb³bÆbÞbæbîbûbc cccc&c,c5c9cBcHcKcYc[cicN­éƒƒ�¤µ¸Ùìù0IU\^agk|†Œ�’” °¸¾ËÎÑßð +1>RUX```hovv„œO ™�ÎÎÒçëP„ *žÙžÙ¸Ù»ÙÎÙÛÙ÷ÙúÙÚ ÚÚÚ-ÚCÚGÚbÚeÚkÚxÚ„Ú†Ú†Ú–Ú™Ú¯ÚQˆ +ç+ç3ç>çNç]çiç�ç�ç�ç•çšçšç¾çÍçîçèèèèèè.è5è5èGèLèTèR,æí+:+:/:H:O:Q:S ž¢îîòTTFW¦¦ÉÐÚÞâæððú *U £§ -V ðôòòò(ò*òWHú‘y‘y±y¾yÃyÏyïyõyûyzzzzXHëùyy!y.y3y?y_yeykyxy�y‚yŽyY ¨¬"'+Z ­±..2AE[<æñÚÜÚÜëÜ÷ÜûÜÝ ÝÝÝ"Ý*Ý\dq†K]K]S]W]W]f]…]”]�]¦]½]Ï]Ø]ß]^ ^^ ^!^]´¥Î¸T¸TÃTÔT÷TUU U-UFU]UaUeUmUuU~UœU¤U»U¿UÃUÇUÏU×UàUþUVV+V2V2VCVLV^0&̢̢բբ좣££_dÆÛKhKhYh^hnhsh‚h‡h‰h�hžh£h¥h´h¿hÃhÉh`8 “.“.­.±.´.¿.Ü.à.å./a :T:TCTNT]TbDÀÍÀeÀeÚeñeþeþef(f2fcLš©RWRW`WeWgWvWxW†W‘WšWšW›W¡Wd4ktÀKÀKÈKÖKL%L2LFLILKLe4W` J J¨J¶JõJKK&K+K-Kf0ËÓ’œ’œ¦œåœìœòœÿœ��g[;!;!C!N!V!w!†!�!£!³!Æ!Ó!æ!" ""&"2"7"T"Y"Y"f"p"„"‘"ª"¹"Ì"é"ô"ü"#"#7#U#a#j#o#Œ#•#¢#±#Æ#à#ë#ó#þ#þ#þ#$$$#$.$3$:$h4ˆÐLÐLÙLãLM-M9MIMLMOMi$üÃiÃiãiðiøijj$+0¶Ú¶Ú¿ÚÐÚâÚÛk¨Ci*ª*ªSªXªbªlªvª‚ª‚ªŠª³ª¼ªÁªʪͪÒªÒªêªÿª«« «««E«I«Q«S«^«^«c«c«r«‚«l<$/ê¨ê¨ø¨©©©$©.©]©_©e©mü§âëUëUÿUVV'V6VEVEVkV€V‹V’VµVÂVÐVÞVìVúVWW&W8WCWUWgWnWuW‚W‰W‘W¡W©W¹WÅWïWXXXX!X/Xn@nzÔ¥Ô¥á¥é¥ì¥ú¥þ¥¦¦¦¦ ¦o(b²‚²‚ł˂ڂä‚é‚é‚õ‚ü‚ƒ ƒƒ-ƒAƒCƒ^ƒŽƒ¥ƒ¾ƒɃÛƒÿƒ„„$„=„G„`„j„u„ƒ„Š„˜„˜„¢„»„ã„î„… -… ……2…;…C…^…pD/<ŽëŽë—ë¬ë¸ëÃëÌëÚëåëíëòëq<³¾ q q!q4qHqQqkqrqˆqŽq”qÊqr,CCGt›ÈÝßs<bmŒ¥Œ¥™¥¡¥¤¥²¥¶¥º¥È¥Ì¥Ñ¥t|0Ž Ž Ÿ © · Ï ç ü  - -. -; -F -M -^ -h -h -y -� +$LK,"PURPLE",A="FL:::/Kernel/KernelA.HH,2933"$ +$LK,"TASKf_BREAK_LOCKED",A="FL:::/Kernel/KernelA.HH,3251"$ +$LK,"FILEMASK_SRC",A="FL:::/Kernel/KernelA.HH,2277"$ +4BK3à3à=àFàUàsà¡à¥à¥àªàDVcË Ë Ï Þ ê ö    # ( 9 : > @4@{{ƒ‡žµÌÛçõü   L…Ôx�x�|�”�¡�¦�«�°�µ�º�¿�×�ø� ž#ž0ž9ž>žCžHžfžQžvž{žƒž¡ž¡ž¦ž¶ž¼žÆžËžÔžÙžÞžîžÿž4Ÿ9Ÿ`ŸeŸjŸoŸ�ŸŽŸžŸªŸÁŸÊŸÑŸÝŸéŸ       % . / 8 = ò <#KK^x‘ž¥§§°¾D‰–ûû %-3=PPY„3Pú³ú³ +´´ ´'´'´J´V´e´r´´„´Š´™´Ÿ´¦´¦´ª´ª´ª´ª´·´º´Ê´0ÎÖK—K—e—}—�—’—’—œ— Ì6”9”9¬9²9Ì9Ï9Û9ð9ö9ü9:!:&:.:.:<:B:G:l:r:t:ƒ:‡:–:œ:Ÿ:¡:°:´:Ã:É:Ì:Î:Þ:â:ö:ù:ü:þ: ;;; +Ä Í77>7H7K7[7s7}7ƒ7†7‰7Œ7È7Ë7Î7Ð7ã7æ7é7ñ7÷7ü7ü78888888 8"8'8*828D8 ˆFdê¾ê¾¿¿¿"¿+¿3¿9¿<¿H¿H¿v¿ƒ¿�¿�¿“¿š¿¢¿¨¿µ¿µ¿Ë¿ hÚ¦Ú¦ã¦ñ¦§ §§+§;§K§Z§i§y§‰§ª§¬§»§ʧڧꧨ¨¨ @Zf³:³:Á:È:Î:Õ:é:ð:ò:÷:;4æï#˜#˜=˜K˜c˜v˜x˜x˜‚˜44=`I`InIŠIŠI�I§I§I­I TXKüKüYügü(-3++3MUjlvHÜê9x9xYxfxkxwx—x�x£x°x¹xºxÆx(Z`&Ü&Ü@ÜRÜZÜ`ÜhÜ$ü2‰2‰;‰C‰I‰N‰0´¼’Õ’Õ¨Õ³ÕÄÕÆÕÎÕ8‰LdLdZdadldqdsdŠdŠd“d™dP[kDcDcRcYcdcicrc�c‡cŽc�c“cžc¤c€[wÄÄ@ÄDÄHÄ_ÄoąěĭĭÄÅÄÊÄÖÄÜÄßÄæÄêÄîÄòÄöÄöÄöĤÅà:.*ˆ*ˆCˆKˆfˆqˆxˆ…ˆ’ˆŸˆ³ˆƈäˆïˆýˆ ‰‰‰#‰'‰B‰G‰N‰V‰h‰k‰y‰ˆ‰™‰Ÿ‰¥‰±‰À‰؉܉á‰ô‰Š#Š*Š1Š1Š8Š@ŠMŠOŠaŠiŠkŠuŠ|Š|Š|ŠƒŠ‹Š•Š Š¬ŠºŠЊÿŠÿŠ#‹#‹*‹4‹J‹l‹q‹q‹x‹€‹–‹¸‹½‹½‹À‹ß‹â‹î‹ñ‹ô‹ŒŒŒŒ Œ$Œ(Œ8Œ;ŒTŒTŒYŒYŒlŒsŒ}Œ“Œ±Œ´Œ¶Œ¶ŒÉŒÐŒØŒîŒ ����,�/�O�j�s�|�€�Ž�”�”�±�±�±�¶�¶�¶�Â�Õ�à�ñ�ô�÷�ü�ü�ŽŽŽBŽFŽaŽzŽƒŽŒŽ�ŽžŽ¤Ž§Ž¬Ž¬Ž¼Ž¿ŽÂŽÐŽÙŽߎâŽçŽçŽûŽ��#�;�`�m�q�‡�¡�³�¼�À�Ã�Ã�Ó�Ù�ë�ð�ø�ÿ� �(�+�-�>�E�Q�j�w�z���„�†�ž�±�¸�Æ�Æ�Æ�Í�Ù�ã�ñ�ú�‘‘‘‘*‘9‘H‘h‘q‘Û‘4×ࣗ£—·—Å—Ý—è—ê—ê—ò—@@L££«²¿ÎÝò=A`ˆœ‹!‹!™!¦!°!°!Ã!Ë!Þ!à!ó!ó!÷!""" "|w’Ò¥Ò¥ò¥¦ ¦¦¦¦,¦>¦N¦_¦o¦q¦q¦q¦w¦�¦­¦½¦¿¦¿¦ȦÔ¦XÓåË3Ë3×3Ù3è3þ3 +44(4*4A4A4C4F4L4 @8DZŠZŠhŠjŠŒŠ™Š™Š£Š |ÿ« « Ü ß í ö ö  !!3!8!K!O!`!s!|!Œ!”!¤!³!¶!ë!!¬El0ƒ0ƒFƒWƒ[ƒjƒ|ƒ�ƒ›ƒ¡ƒ¹ƒ¹ƒ̓Ûƒåƒôƒùƒùƒ„„ „ „u„z„z„¢„¢„°„³„¶„Ąʄӄû„"ŒËê›>›>¤>Ï>ú>%?t?�?ƒ?›?›?ê?÷?ù?@@!@A@H@M@W@„@‹@�@’@•@# †ŠT]T]]]j]o]$H—¥öö$05AAEO%Œ¬Ënùnù�ù’ù›ù·ùÊùÊùÕùÚùâùüùúú!ú&ú2ú8ú?úLúOúXú[ú^úcúŠú& lpfËfËzˈˎË'D6C¸—¸—Ô—Ö—é—î—þ— ˜˜˜ ˜(p¼ÔÖÖäò,.4=EPjz‰‰���)h#90w0wFwHwWwkwmwvwxwxw{w—w×wäwîwþwxxx$x*$gl¨y¨y¬y¼yÇyây+œd‡C C Y b o | ‰ ¡ µ · Ë Ë Ó è õ õ ! +!!+!3!G!Y!a!u!|!|!†!,|9”a”aža«a¼aÆaÍaÔaÝaåaýab bbb$b+b3b9bDbHbJbJbNb-X̧̧ë§î§ó§ö§ÿ§ +¨¨'¨/¨3¨6¨6¨<¨?¨M¨.D ,MQMQaQqQxQ�Q”Q›QœQ¤Q/”9û û  +' +6 +B +M +[ +m +{ +ƒ +‘ +¥ +Ø +Ú +Þ +Þ +é +ô +  2 = B T [ [ m n r 0Xßñæô )1<FMeeellms1PR‰R‰f‰v‰|‰�‰�‰’‰–‰›‰›‰£‰2 $(àHàHîHII3Œ«Ê²š²šÑšÍšàšðšýš››(›5›A›L›X›a› ›¨›Ç›Þ›ì›ó›ú›œ"œ(œ/œ2œHœ4Œý’̶̜̞̒ÌÄÌ×ÌàÌÍÍÍHÍKÍOÍTÍ`Íg͉͎͕͌ͷͺͺͽÍÈÍÏÍÖÍ5@-9¥Q¥QµQ¾QÅQÌQÓQÔQÜQ6<R]£ £ µ Å å   +    7 bŸbŸfŸ�Ÿ¡Ÿ8<ðûʈʈވìˆ÷ˆ‰‰‰ ‰#‰+‰94aj(K(K0K>K}K�KšK®K²K´K:4MVJJJJ]JmJzJŽJ“J•J; £Ç3þ3þTþ^þhþþ•þšþ§þ¬þÈþçþìþÿþÿ ÿ#ÿ8ÿ:ÿTÿiÿiÿpÿpÿpÿ<$ƒˆÃÃÌÚïô= PTNìNìRìdìfì>L¬»2Û2Û<ÛEÛTÛZÛiÛoÛ~Û„Û“Û™Û¨Û®Û°ÛµÛ?H!ª‰ª‰¸‰Ä‰É‰É‰Ú‰ì‰ñ‰ñ‰÷‰@,P`P`Y`b`n`{`�`†`ALùRžRž`žcžožyžžŒž ž žžžßžãžçžížB …‰ööú  C\˜«ÆøÆøÚøèøíøóøþøùùù#ù'ù?ùFùIùKùnùD4Š“,MbbbfE4u~HLHLQL[L•L¥L±LÁLÄLÇLF¸‘»8989@9H9S9r9{9‘9¥9¯9»9Æ9Æ9Õ9ö9:(:0:F:Q:Y:Y:h:‰:®:»:Ã:Ù:ä:ö:ö:; ;;;+;+;,;?;G ”˜ffj�‘Hpu�’ْ٬پÙÚÙÚÙáÙãÙãÙñÙóÙóÙÿÙÿÙÚÚÚ"Ú=ÚZÚZÚZÚgÚI|7{{“�¤°³ÁÄÈÊÍÐØÛã÷ "(4J4•ž¢~¢~¬~®~À~Ç~ç~è~í~K,'.ëë(ë*ë2ëLëQëWëLXl~¤c¤c¶c¹cÄcÉcÖcècècñcddd/d:dAdKdM�:ZTbTbnbyb~b‡bšb²bºbÂbÏbÙbàbçbëbïbúbc c ccc c-c/c=cN­é33MTeh‰œ©·àù ,6<?BDP`hn{~�� °¼¾ÎÛáî        & & 4 L O ™�––š¯³P„ *nÙnوًٞ٫ÙÇÙÊÙÐÙÙÙåÙçÙýÙÚÚ2Ú5Ú;ÚHÚTÚVÚVÚfÚiÚÚQˆ sçsç{ç†ç–ç¥ç±çÕçÕçÕçÝçâçâçèè6èNèVèXèXèdèdèvè}è}è�è”èœèR ž¢¶¶ºÉÍSTFWnn‘˜¢¦ª®¸¸ÂÕáäòT £§ÎÎÒßãU vòvòzò�ò’òVHúYyYyyy†y‹y—y·y½yÃyÐyÙyÚyæyWHëùÉxÉxéxöxûxy'y-y3y@yIyJyVyX ¨¬ææêïóY ­±ööú  ZHíûbÝbÝsÝ݃Ý�ݗݣݩݰݶݾÝ[d€•»]»]Ã]Ç]Ç]Ö]õ]^ ^^-^?^H^O^s^|^ƒ^�^‘^\´™ÂUU UU?UNUYUhUuUŽU¥U©U­UµU½UÆUäUìUVV VVV V(VFVYVbVsVzVzV‹V”V]0&œ¢œ¢¥¢¥¢¼¢ß¢ß¢ä¢^dÇÜShShahfhvh{hŠh�h‘h—h¦h«h­h¼hÇhËhÑh_8 //(/,///:/W/[/`/{/` ¾T¾TÇTÔTãTaD©¶”e”e®eÅeÒeÒeÜeüefb4kt¸K¸KÀKÎK LL*L>LALCLc4W`˜J˜J J®JíJýJ +KK#K%Kd0ËÓJœJœ^œ�œ¤œªœ·œÊœÖœe[ë!ë!ó!þ!"'"6"?"S"c"v"ƒ"–"´"½"Ê"Ö"â"ç"# # ## #4#A#Z#i#|#™#¤#¬#Ç#Ò#ç#$$$ $<$E$R$a$v$�$›$£$®$®$®$³$Á$Ì$Ó$Þ$ã$ê$f4ˆÈLÈLÑLÛLM%M1MAMDMGMg$ýËiËiëiøij jh$+0†Ú†Ú�Ú Ú²ÚîÚi¨Ciâ©â© ªªª$ª.ª:ª:ªBªkªtªyª‚ª…ªŠªŠª¢ª·ªºª½ªêʪΪýª« « «««««*«:«j<$/¢¨¢¨°¨¸¨À¨Шܨ権©©kü¶ñ[V[VoV~V�V—V¦VµVµVÛVðVûVW%W2W@WNW\WjWŠW€W–W¨W³WÅW×WÞWåWòWùWXXX)X5X_XuX†X†XŽX‘XŸXl@nz¤¥¤¥±¥¹¥¼¥Ê¥Î¥Ò¥Õ¥ã¥ê¥ï¥m(aj‚j‚}‚ƒ‚’‚œ‚¡‚¡‚­‚´‚¹‚ÂÔ‚å‚ù‚û‚ƒFƒ]ƒvƒ�ƒ“ƒ·ƒ¹ƒÒƒ܃õƒÿƒ„"„-„;„B„P„P„Z„s„›„¦„½„„Ä„΄ê„ó„û„…n<±¼ÓpÓpépüpqq3q:qPqVq\q’qo,{4{44¬4Ó4555p<bm\¥\¥i¥q¥t¥‚¥†¥Š¥˜¥œ¥¡¥qˆ3 + + +) +3 +A +Y +q † -� -š -® -¹ -uLš©»•»•וޕå•ñ•ú•– –$–-–C–R–\–\–q–v8XX0X=XOXiXwX€XŠXw  #^ó^óbó{óxÔ._ËËÓÛéü !,:IZv~Š’šš¥§¼ÈÚî 1>YvxŠ““¥¥³ºÌÌÚÚßãy4©²‹p‹pŸp±pºpÔpÛpñp÷p -qz0U]KTKTSTiTtTƒT�T¥T{PZjû“û“ ”””+”0”3”9”<”A”L”R”\”|d¦»ÎÎçêøø $/58;=AM}H<J.õ.õ>õDõOõXõ[õhõqõqõuõxõ€õ~$@E~~‡•› 4ÕÞþþ "-FKRX€¬LsÊ{Ê{Ü{ë{ñ{||/|B|Y|l|ƒ|š|±|Ì|Ð|×|Ý|á|ó| }} }:}>}E}K}O}a}z}‡}�}�}š}�?ˆ=ˆ=�=˜=©=¸=Â=Î=Î=Ò=Ú=Þ=÷=1>C>W>{>„>�>�>’>¥>ª>µ>Ë>ß>æ>?K?\?l?‚?–?�?Ï?@@#@#@*@<@<@J@J@K@]@]@k@o@s@‚P˜¨ãoãoùo pp7pApCpQpjpup{pp‡pƒ0lt––¤³¾ÄÆÆÌ„<KVÐxÐxÙxãxóxõx(y/y/y/y2y…˜òîîôò‡ †4ŠÓ†Ñ†ÑžÑ¦Ñ´Ñ¿ÑÃÑÉÑÏÑÝÑòÑ÷ÑýÑÒÒ Ò6Ò;ÒAÒXÒ]ÒcÒqÒuÒ‘Ò¤Ò·Ò¼ÒËÒØÒèÒ÷ÒÓÓÓ$Ó&Ó9ÓSÓZÓhÓzÓzÓ�Ó�Ó¢Ó¤Ó·Ó¹ÓÌÓÌÓèÓÿÓÔ ÔÔ:Ô‡H~ó~ó‡ó¢ó«ó·ó¹ó»óÊóÊóÙóÛóÛóàóˆ`ÜðËhËhâhðhûhýhii$i/i:iK»S»SÐSÞSÞSæSüSTTT T�¤6[0Ž0ŽJŽRŽVŽ^ŽjŽqŽxŽ}ޒޣާާ޴޻ŽÀŽ׎ÚŽãŽéŽìŽîŽøŽýŽ��� �$�2�Ž81;ÛÛ,ÛCÛNÛNÛYÛ]Û]ÛcÛ�$<�³(³(»(Ë(Û(í(ü())!)()3)?)T)b)j))Œ)¡)®)Ã)Í)â)ì)* * *.*.*<*H*T*h*�*ž*­*»*Ç*Ó*ä*ù*+ +)+;+M+_+q+¤+²+Ç+ì+, ,,6,M,V,a,h,s,},†,–,�0‡�#^#^'^8^T^i^n^ˆ^‘02:Ã’Ã’×’â’ô’ü’ÿ’“’¼KvƒdƒdŸdÀdÒdÙdædòdúde ee%eIeXe_efeweye�eŒe—e¦e­e°e²e¸e¾eÖeßeßeãeüe“,ÑØ&ú&ú4ú@úWú[ú]úqú”P Y@`@`Z`]`c`o`q`€`‡`�`¶`½`ê`ñ`õ` aa6a?a?a?aLa…a‘a�aªa½aËaÜaïaüa b$b*bqbƒb°b·bÖbÝbèbcccccc c c,c.c.c>cAcAcMcYcrc~c‡c’c¨c¶c¶c¶cÇcàcçcîcôc÷c?d•P&@–@–`–s––‹–¡–§–²–¸–½–¿–Ø––4# H H©H¾H¾HËHàHàHåH— ÌÐúúúú#ú˜0ÔÜ"�"�6�u�|�‚�š���©�™¼ -5���"�)�0�=�K�T�W�]�c�j�q�s�}�‚�Œ�š� �¯�»�¾�Á�É�Î�ä�ð�ó�ö�ö�ö�ö�ù�Ž ŽŽŽ)Žš0HPÿÿÿ"ÿ*ÿMÿfÿŽÿ›€¨Y¨Y¼YÃYËYÓYïYïYýYÿYÿYZZZ Z!Z!Z1Z9Z9ZBZNZkZkZ}Z}Z�Z¨ZœXbb b!b2b=bYb\bjbpbsb„bŸb£b�@¡­ÈdÒdÚdòdòdûdeee:e>ež@$0[ú[úiúnúqúƒú‰úŒúŽú”úŸ(äêÃsÃsÙsõst t(t  óó(ó;ó@ó¡H&4ßß/ß;ß>ßGßSß[ßx߇ß�ß�ߜߢ úþVòVòZògòiò£ä{°�z�z®z·zÚzäzözùz{{ -{ {{+{8{>{K{V{[{a{s{s{‚{…{�{’{ž{°{½{Ã{Ð{Û{à{æ{ø{ø{ø{ø{|||¤ Ñõ“L“L²L´LÅLÊLØLùLMM M8M?MAMAMSMYM_MaMgMmMpMvMxM�M�M–M–M–M�M®M¥T…–ææ - /?JP[[[_m¦`p„NNkq“ž¢©¬¶½ÍÑÑÑÕá§HîüBÌBÌį̶̠̤̬̇̕ÌÀÌÀÌÂÌÐ̨D"/"Š"Š0Š<ŠAŠAŠRŠWŠWŠ]Š©t¹Òs8s8{8Œ8°8·8È8ì8ú899$9+959C9Y9o9q9‡9�9�9�9Ÿ9ªX{�ÃIÃIÜIìIJJJJ.J4J4J@JLJNJNJVJ«XÙë+C4C;CQCfC|C„C›C¥CÂCÇCÎCãCêCòC÷C¬,ÜãSsSsas„sos”sšsÀs­8x‚úÅúÅÆþÅÆ,Æ8Æ:Æ:ƾƮ8>H¸I¸IÆIÌIÓIéIéIðI -JJ¯<u€b¶b¶}¶‹¶’¶–¶™¶�¶¤¶ȶض°`«¿rrv�¿ò €€)€.€4€6€±LSùSùnùŠùŠù—ù—ù¤ù¤ù´ù¸ù¸ùÈùÊùÊùú²d@Õx@x@ƒ@™@ @¾@Ï@Þ@ë@ú@A&A>AQAgArAœA·AÔAùAþAB,BLBcBsBuB«BCÓBÑB!C2C9CYCnCˆCˆC¯C¯CÎCÕCD DDPDNDžD¥DªDÀDÈDÈDíDýDEdE1E9E$E�E¿EÇEÇEçEüEF'F>FFF1FšFšFšFŸFŸF°FËFÙFñF -G#G>GVGlG„G’G�G�G°GÉGÝGòGHHHbHpH€HŽH¦HÁHÌHäHúHúHQI"I IpI~IŽI©IÁI×IÙI#JôIòIBJBJKJTJiJiJzJ�J–J–J§J§JªJ®J³4 -rƒrƒ€ƒ…ƒˆƒŽƒ‘ƒ“ƒ™ƒ´,sz@z@zDzIzSzczczŽzµT®¿@e@eNe[ehe†e‰e�e—e¥e©e«eµe½e¶Ô%V³G³GÓGáGæGðGðG÷GHHHHH$H'H+H7H7HCHIHVHdHfHfHfHiHnHzHzH†HŸH¢HµHµH¸H»HËH·4mvû=û=>>5>K>‡>•>™>¸À6b;ï;ïFïJïnïyïˆï”ï¨ïÇïÏïçï÷ïðð?ðAðAðeðgðgð‹ð�ð�ð™ð™ð¡ð¡ð­ðÁðÑðÙðÙðëðòðòðñññ@ñ¹ÈÉ÷ë)ë)* ***0*5*5*G*L*L*^*c*c*u*z*z*Œ*‘*‘*‘*‘*˜*�*�*¯*´*´*Æ*Ë*Ë*â*+$+$+6+=+D+M+\+¿+ºˆTrâUâUøUýU V VVV%V0V9VAVFVHVLV[VfVnVvVwVwV�V»(w}›>›>¤>«>Ë>Ò>Õ>¼üF� 0;DZnz’¥Æü3<>FNemx…‰��¢©¼ÌÓéÿ"+=DDV\q½„a~žÜžÜ¢Ü±Ü±ÜÀÜÀÜÏÜÏÜÞÜíÜíÜÝüÜÝ ÝÝÝ)Ý)Ý8ݦᾨs™‚V‚VœV´VÉVÐVÛVáVáVäVëVöVúVÿVWWWWW W#W#W(W7W:WLW¿Ltƒš}š}®}»}¾}Â}Ð}Û}ä}~~~~!~3~ÀTÊÛ.å.å<åCåNåqåå‰å�å™åžå¬å²åµå»åÁ¼žÉVãVãhãnã|ã|ã™ã£ã»ã¿ã×ãÛãõãõãäää%ä2ä;äPäZägäpäräxä�ä‡ä¬ä¯äÇä×äèäìäðäûäûäÿäÿäÿä(åÂ4âƒâƒðƒòƒ÷ƒúƒýƒ„„Ô"8v8vRvqv}v�v–v§v¯v³v¿vÐvÝvãvævévìvñvóv÷vww#w)w,w/w2w2wÌ>ÌTÌgÌrÌxÌ{ÌƒÌØ¨ï••"•%•=•H•X•j•n•|•…•§•­•­•¹•ĕҕܕä•è•è•è•ë•í•ñ•ñ•ö•–– –%–'–'–=–ÙLêùûû:ûFû`ûkûxûŒû’ûžûÚ óó -óóóÛ`#ÛDÛDßDöDEE)E0EGEWEgExE‰EšE»EÜEóEþE FCFÜTƒQƒQ‡Q£Q²QÄQÉQßQæQøQ RR8RHRMRMRORÝ`Èxáxãxëxyy#y2y7yJyaygysyƒyƒy•yÕyÞH_mII#I1I7IKIQIVI^IaImIß4‰’PMPMYMcM�M­M¹MÉMåMðMàÀnšË‹Ë‹ã‹ê‹ò‹ŒŒŒ+Œ1Œ1Œ;ŒBŒMŒRŒ\ŒpŒrŒ}Œ}ŒŒŒ”ŒŸŒ£Œ¨Œ¬Œ·Œ½ŒÀŒÃŒÈŒÏŒÙŒéŒá@/;*’*’H’T’a’l’x’…’‹’Ž’‘’£’â0 'ڔڔ蔕3•9•;•;•A•ã�k‹c”c”y”|”ˆ”ˆ”Š”—”¥”ª”­”¸”»”À”Ö”è”ó”ÿ” • •••••• •$•2•ä<“žðMðMþM NNN'N'N-NJNPNå8%"Ö"Ö,Ö4ÖHÖ]ÖeÖhÖjÖnÖæ”x™²Ó²ÓÉÓËÓÕÓìÓìÓýÓÔÔÔÔ Ô&Ô/ÔFÔFÔKÔMÔMÔQÔSÔSÔWÔ^Ô^ÔcÔsÔ…Ô‡Ô—Ô瀂žss~†‘œ§°ÆÚã÷4NVr~‰¡¬³¾ÃØèLN]µµ#µ#µ2µAµRµVµfµ}µ�µ�µ†µé85?¤¤*¤F¤R¤V¤Z¤^¤j¤r¤êœ$CFCFKFQFbFqF�F¨F¨F´FÅFÐFÜFÜFéFûFG'G.G?GIGNGNGNGnGŽG¨G­G²Gëx‚œ›,›,¯,¹,¿,Ë,Û,Þ,â,ë,û,þ,- ---B-J-S-S-Y-…-Š-�-�-ì8ÃbÃbÓbÖbÛbÞbìbòbõb÷bÿbíD&þêþêëëëë&ë.ë6ë>ëFëJëNëîdavr¥r¥‚¥’¥�¥¢¥¯¥¸¥¼¥Â¥È¥Ð¥Ø¥ä¥¦¦¦¦¦ï@nzîéîéêê'ê-ê/êDêwê}ê}ê‰êð(.4Ú£Ú£ã£ñ£¤¤¤ñ0r”r”€”˜”˔єӔӔٔòDŒ™3•3•_•m•x•|•€•„•ˆ•”•¡•¤•´•ó€Ïëccnv�Œ— ¶ÊÓç$>Fbny‘œ£®³Çô< S:S:[:y:Š:š:«:º:Ô:ì:î:ð:õLÁÐLL-L@LUL[LaLpL~L~L�LŒLöˆú���=�O�O�a�l�‚�‚�’�”�”�”�¥�°�·�»�Ã�Ç�Ï�Õ�Û�Û�Þ�ì�÷|"À"À4ÀCÀFÀgÀŠÀšÀÃÀÓÀàÀÁ Á,Á<ÁBÁRÁRÁdÁgÁlÁlÁ|Á‚Á…ÁéÁø8 :Ÿ:ŸHŸSŸ^Ÿ�Ÿ—ŸšŸ¥Ÿù=x˜x˜�˜�˜�˜ª˜»˜̘ݘò˜ù˜ ™ ™1™9™Z™n™q™y™‰™š™Á™Ô™æ™šš.š:š?šaštš€šŸšúH'5ؖؖò–——3—9—?—?—G—I—u—û("‹R‹R™RµRºRÆRÌRü8JTÖÛÖÛäÛûÛÜÜÜÜÜ ÜýDìùËËÝéÿ$$5EGrþl>U š š¤šµšÆšßšøš› ››:›K›U›W›b›m›v››’›¥›¶›À›À››ÿ$ôùã�ã�ì�õ�û��  -bTbTkTvT‡TDØå~ñ~ñ�ñ’ñ›ñ¬ñ­ñÀñÃñÉñh-ƒƒ2ƒ2«2­2¶2Ê2Í2Ò2Ö2õ2 3 33&3-3L3U3W3v3333„3º3Ä3Î3Ø3â3é3õ34 4 4 4,4,4547474@4B4B4K4M4M4R4T4T4Y4Y4Y4]4x4Ž4™4°4¹4¾4È4Ô4à4ì4ÿ45(5,575M5]55œ5º5º5º5º5º5Ä5Í5Ô5T6LÈ×kÿkÿÿ†ÿ‹ÿ¡ÿ£ÿ´ÿ¸ÿËÿÑÿþÿ4ÆêÆêÎêÖêÞêæêîêöêúêþê,žêžê¦ê®ê¶ê¾êÂêÆêx7NNbgqx‹¤¤³ÉÒáèèëõ %| -Ðkž¯ž¯¿¯Á¯Ø¯á¯ì¯÷¯ù¯ °°%°0°D°O°R°X°\°_°e°i°l°o°‚°—°Ÿ°¢°º°Ê°Í°Ó°Ö°é°þ°± ±!±1±6±6±>±>±a±a±a±e±g±g±k±m±m±q±s±s±w±w±w±z±|±|±±„±Š±�±‘±“±™±œ±´±È±Í±Ó±Ö±Û±î± ² ²!²!²!²&²&²(²(²-²0²V²V²V²n²t²‹²š²©²¾²Ð²õ²ú²ú²³0³5³5³M³k³m³m³…³¡³£³£³»³×³×³õ³´´´´5´:´:´R´n´s´s´w´�´­´±´³´³´·´Ï´í´ñ´ñ´µµµ,µCµJµOµOµgµ~µ…µ“µ£µÇµÎµÐµÐµÞµæµ¶¶¶)¶J¶i¶n¶n¶†¶›¶½¶±¶Õ¶ô¶····5·L·V·[·l·l·r·}·’·—·¡·±·±·ç·õ·û·¸¸#¸#¸/¸3¸3¸<¸K¸T¸T¸]¸g¸ƒ¸¡¸¾¸Í¸Ó¸è¸ð¸ü¸¹¹¹ ¹+¹C¹E¹e¹e¹j¹j¹ ¹®¹·¹·¹Ã¹Ç¹Ç¹Ð¹ß¹è¹è¹ñ¹÷¹ºº6º8ºCº[º]ºyºyºyº‰ºªº¬º¬ºÄºÛºàºàºøº»»»4»4»K»K»W»[»a»j»y»‚»‚»‹»–»®»°»Ì»×»ò»ô»ô»ý»¼ ¼6¼C¼K¼l¼n¼v¼�¼“¼œ¼¡¼Â¼Ì¼Ì¼ç¼ñ¼ü¼½+½B½J½T½T½]½a½x½°½»½»½»½Ï½Ø½Ü½ó½+¾+¾-¾-¾I¾S¾[¾[¾d¾h¾¾·¾È¾Î¾å¾í¾ú¾ÿ¾ÿ¾¿ ¿#¿[¿l¿u¿z¿z¿…¿‰¿¡¿¸¿Â¿Ç¿Ý¿õ¿õ¿ À)À)ÀFÀJÀ]ÀeÀlÀwÀ|ÀƒÀƒÀˆÀ»ÀÏÀíÀÁÁÁÁ(ÁRÁbÁtÁ€Á„ÁžÁ°Á¼ÁÀÁÀÁÀÁÀÁÄÁÉÁÉÁÔÁØÁðÁÂÂÂ,ÂDÂDÂnÂxÂ�¢¢¢­±ÂÉÂàÂêÂïÂÃÃÃÃOÃYÃvÃ}ÈÃ�Ã²Ã¸ÃØÃêÃòÃôà ÄÄ8ÄHÄHÄuÄwġģĿÄÊÄÔÄÞÄåÄÅ Å Å8ÅPÅSÅnÅnÅnÅsÅxūſÅÝÅôÅùÅÆ Æ:ÆNÆQÆhÆhÆhÆhÆrÆˆÆŸÆ©Æ®Æ®ÆÆÆÝÆçÆ÷Æ÷ÆÇ'Ç*Ç<ÇFÇLÇcÇkÇtÇyÇyÇyǕǩǬǾÇÐÇÕÇÕÇíÇÈÈÈÈ:ÈNÈQÈcÈmÈsȊȒțȠȠȠȼÈÐÈÓÈåÈ÷ÈüÈüÈüÈÉ+É5ÉEÉEÉjÉ{ɅɋɢɪɳɸɸɸÉÝÉîÉÊÊÊÊÊÊ6Ê6ÊPÊWÊ”Ë@%êŸêŸþŸ     > I M [ ^ f  0EM¢×¢×«×¾×Ä×Ð×Ù׿×ë× -|�œÚ¶Ú¶÷¶ù¶···(·P·s·�·‘·´·œ·ηî·¸¸¸¸¸¸)¸ 8Ž˜ -Ú -ÚÚ'Ú8Ú<Ú<ÚAÚAÚGÚ ¨°Öƒöƒö™ö¯ö­ö½öÅöÌöÐöØöèööö÷ ÷÷ ÷%÷%÷,÷0÷0÷2÷�ø 4GPú’ú’“$“/“4“B“O“X“i“p+Cà à ã ô û    ) ) 7 ? M U U € « Ö ã !!!!!!D¦³Ú�Ú�æ�ý�‚‚‚‚0‚7‚<‚B‚œTw››²¼Ìç8Sn‰¤·Èõ×Í/KP[er|Š�œ£¯ð0-5  eG)‰À@  -5=EMU]c˜£Åƒgƒg›gªg¸gÈgÎgÎgÙgägçgìgögh h hhh$h'h0h1h1h=h?hKhX7‰NÏNÏlÏrÏyωÏ�ϘϞϥϻÏÉÏÍÏÒÏØÏæÏéÏîÏñÏñÏÐÐÐ&Ð(Ð5Ð:ÐAÐCÐPÐRÐRÐbÐsÐvÐxЄІЦЫвлÐÁÐÇÐÎÐÑÐÑÐáÐòÐôÐ ÑAÑCÑJÑLÑXÑXÑlÑpÑpцÑ@›§__)_K_S_X_k_x_~_�_‰_0úú úúú ú ú%ú,;Bê©ê©ù©ªªª!ª'ª8ˆ’®î®î¼îÈîóîïï ïïïïä6fÍf͇̈́͊ͦͭ͞ÍÁÍÄÍÆÍéÍéÍìÍüÍþÍþÍÎÎÎÎÎ2ÎMÎWÎaÎiÎiÎiÎkÎkÎpÎ�ΕΤδÎÈÎØÎÚÎìÎüÎÏÏ Ï ÏÏÏÏHÏ8òü*Ý*Ý9ÝOÝ^Ý|݆݈݈݀ݎÝô…¾l¦l¦~¦�¦‹¦˜¦œ¦¢¦¢¦©¦¯¦³¦·¦¾¦Ä¦Ë¦Ñ¦Ø¦Þ¦å¦ë¦ò¦ø¦ÿ¦§ §§ §%§,§5§=§=§F§G§X§k§m§}§„§�§š§¥§°§»§Æ§Æ§Ð§LWf8y8yAyQyQyoyuy…y‹y‘y¡y£y£y£yÊyhÝó#�#�8�G�L�\�d�d�r�|�‹�“�Ÿ�®�º�Å�Ë�Ö�Ù�á�D<IfÛfÛzÛ–Û¤Û´Û¶Û¸ÛÃÛÇÛÇÛÏÛ P„”:~:~I~R~\~a~s~s~s~u~‡~Ž~¿~Û~Ü~â~ 0�—“o“o©o¼oÎoÔo×oßo!<al¢¢°ÁÉÍÙÞâè"\ÉÜffj}�£®ÂÓõ2Mhƒž¹Ô�#Tct’ؒؠزظØÂØÚØàØâØíØÙÙ)Ù/Ù/Ù/Ù/Ù5Ù$X£µ‘v‘v±v¾vÃvÏvïvõvwww w#w/w%X†˜ƒìƒìžì¦ì±ìÍìÍìÖìÖìÛìììõìíí íí&,’™öÌöÌ -ÍÍ!Í2Í_Í'ä6™™5™8™;™A™U™\™_™z™„™‰™�™•™•™¦™˜™´™Ë™×™ë™ô™ü™ š š ššš+š-š8š>š]šmšuš‡š�š¡š©š»š¾š¾š¾š¾šÊš ›(  HPoPopoo‹o–o¡oµoÈoÓoßoðoõopp -pp,p8p8pSpepxp†p›p¡pÅpÍpÍpÙpÝpápùpq2q qAqLqcqgqpququqŠq�q¯q´q´qÀqÆqÌqÎqÞq) Hlcàcàwà‡à›à¨à¬àµà¼àÂàÄà×àßà)ááéà9áHáZáaápá‚á‰á•á©áÉáÓá«â*LrÎrÎ�ΉΉΖΨδμÎÂÎÇÎÍÎÏÎÏÎÕÎ+<|‡ -† -††1†<†C†m†K†{†dž,˜Õ÷²€²€Ü€í€ÿ€ ��$�(�,�0�4�<�D�V�d�n�s�ƒ�Œ�¡�§�«�½�- GK’{’{¡{¾{Ä{.Ü4X‰X‰v‰‚‰‹‰©‰©‰«‰²‰²‰Éʉ׉ê‰ó‰ÿ‰ŠŠ'ŠBŠBŠXŠZŠZŠpŠrŠrŠ~Š~Š“Š¤ŠªŠ­Š­Š°ŠµŠ½ŠΊÕŠÛŠìŠïŠ ‹ ‹‹‹‹,‹/lªò—ò—˜"˜2˜2˜F˜P˜T˜X˜e˜v˜x˜Œ˜•˜™˜¨˜»˜Á˜Șטژ嘙&™2™:™D™R™c™v™ƒ™”™§™­™ô™šš*š9šDšZšhšhštš˜š¤š¯š¶š¼šÚ̚Ϛöš04Yb:Ø:ØCØKØWØhØpØxØ‹Ø�Ø1 �´H=H=b=h=h=w=ƒ=Š=�=�=š=£=£=©=­=°=º=Å=Å=Ô=Ý=Ý=è=í=ð=ó=ö=ù=>>>>>>2 æêÎñÎñÒñßñáñ3¤“ø˜…˜…®…º…Â…Ó…×…ë…ý… ††"†(†-†D†M†e†u†u†‚†�†œ†¬†¾†¾††ȆІÚ†Ú†Þ†â†ñ†‡‡*‡*‡9‡;‡A‡I‡[‡p‡z‡‰‡އއš‡š‡¨‡±‡±‡À‡î‡ò‡õ‡ù‡ˆ ˆ!ˆ6ˆEˆTˆ_ˆaˆgˆtˆzˆ�ˆŽˆ”ˆ”ˆ›ˆ´ˆ¹ˆÁˆɈÒˆÙˆâˆQ‰4,%l‹;‹;“;—;ž;¥;°;¸;¿;¿;Î;Ó;ß;ë;û;<$<)<1<8<I<c<w<~<�<�<³<¸<Ê<Ï<ò<ö<ÿ<==/=6=G=H=L=n==”=Ÿ=¬=¬=³=Õ=æ=ì=ö=5,’’ ’'’-’-’2’64ÏØãBãBçBìBøBCCC"C$C7(ëñ+t+tEtWtctitqt8»ü -¯ -¯¯ ¯%¯+¯S¯v¯~¯†¯‘¯–¯¬¯¹¯¯ǯö¯ý¯°°° °&°L°L°U°l°{°œ°¤°·°ǰ×°ç°ö°±±&±@±E±M±M±R±`±o±�±›±ª±º±ʱÚ±ô±ô±ô±²²9”ÌíúÊúÊË Ë)Ë5Ë<ËEËXËrËxË€Ë�ˣˣ˲˹˾ËÜËßËèËíË ÌÌÌÌÌÌ.Ì1ÌAÌ:8�š‹^‹^�^ ^¼^Ñ^â^ë^ð^ _;p !!z!z5zBzGzSzYz`z|z²z»zÄzÐz<ƒÁÂÆÂÆæÆùÆÇÇÇÇÇ#Ç5Ç>Ç^ÇcÇ|ǃǃǘǤǤÇËÇÎÇíÇ ÈÈ.ÈDÈFÈRÈhÈ~È�ȼÈÈÈÞÈôÈùÈÉÉ1É1É9ÉCÉOÉeÉ{ɇÉ�ɳɽÉÅÉÌÉâÉëÉÃÊ=8uÎÎÜëõ>80:j©j©s©›©¾©Ê©שá©æ©?,¨¯‹_‹_”_�_°_¶_»_@0 ÀŒÀŒÎŒØŒìŒòŒôŒúŒA,8?&&:L]kqwB,0o0o9oDoFoFoKoC\m€êê €€€-€9€B€a€m€v€|€€€Ž€D€ð_ð_```&`M`W`a`i`q`y`…`—`©`Ã`Ï`Ø`æ`ì`ò`õ`ü`aEX°»_»_Ç_Ð_Ù_ß_ë_÷_ÿ_` ``!`,`4`M`_`j`s`s`x`}`‹`’`—`—`�`¤`©`µ`½`Æ`Æ`Î`Ý`á`î`û`a -a -aaa&a1aMaMaMaUa\acajaqaxaa†a�a”aša£a©a¼aÍaéaøaûabF|Kf†õ†õ¥õ³õÃõÏõÕõÞõåõìõñõýõö ö ööööö%ö3ö:ö:ö:öHöG,Ã%Ã%Û%æ% &0&8&HX ^CjCjKjVjhjnjvj€j£j£jµjÂjÖjãjëjùj4kBkzkkk‘kžk²k¿kÄkÓkll l&l+l+l=lJl^lklpll³lºlËlÑlÓlÓlÛlÛlèlýlmm:mGmWm\mbmomzm€m‹m‹m‘mšm¥mµmºmÙmæmómømømümnIàÊþ››£ÃÒÜåö&9W`my……’œÂÕô  ' 4 i U z  ‘ • � � « ¶ Ä Ë Ö ä ä é õ JLRa4¥4¥A¥I¥L¥Z¥]¥d¥h¥k¥o¥}¥„¥‰¥K8GQì¤ì¤ù¤¥¥¥¥$¥(¥-¥L0&&/4CGINMP×çƒøƒø�ø ø³ø»øQùN(MSccky‹”–Oœ'Jscsc�c®cÀcÇcÔcàcècócþc dd#d*d.d.d4d:dRd[dadjdodododsd}dP8ˆ’ccl|‰‰�Ÿ¦¦«Q¼W‚@m@mfmimwm’m m§m´m·m»mÅmÒmòmòmnnn0n2n2nBnDnDnTnTnxnnˆn’n–n¯n±nÖnßnçnîn0oR<#j¨j¨x¨€¨ˆ¨˜¨¤¨®¨ݨߨå¨S$£b£b¬bµb»bÀbTZêÁêÁþÁÂÂÂÂ2Â>Âe„£¯ÂÃÂÇÂÍÂÛÂßÂåÂóÂóÂóÂÃ1ÃEÃ]ÃaÃgÃuÃyÃÑÑÑÑÔÙÞäøüÃÂÃÍÃÑÃ×ÃâÃâÃâÃçÃíÃÄÄ ÄÄÄ Ä)Ä)Ä)Ä^ÄUDz‡óó÷ 07<AHZZ\V¬ÍôJºJºlºqºzºzº†º•º¢º¦º°ºƺƺÖºâºçºçº» »»»*»*»*»2»@»N»X»[»`»m»z»z»Œ»W�-MhOhO•O˜O¦O¯O¯OÆO×OìOñOPPPP+PUP]PaPfPnP€P�P’PÆPXHæóæóïóô ôôôô,ô,ô;ô=ô=ôBôY¸9£H[H[i[l[o[Œ[°[·[Â[Ð[Ú[ð[ø[þ[ \\/\4\C\V\v\\v\‘\“\œ\“\®\°\¹\°\Ë\Í\Í\Ý\Ý\ë\ü\]-]T]T]\]_]„]Œ]’]Ÿ]¯]Ã]È]×]ê] ^^,^L^Y^L^g^l^y^l^‡^Œ^™^Œ^§^¬^¬^¼^¼^Ï^à^å^__8_8_@_C_Q_V_i_t_ƒ_ƒ_Œ_`Z0 íí)í3í9íBíIíMíSí[(�•Ú€Ú€æ€ì€ò€ ��\¼w¢ff-f0fLf^fefrf~f�f‘f•f�f§f¶f¿fØfØfßfåfìfùfggggg#g)gAgJgJgQglgog�g]¬ F£ã£ã«ã¯ã»ãËãÖãåãñãúãä8äDäLäjäuä”ä”ä»ä½ä½ä½äÖäØäØäØäðäðäå -å%å%å%å7å>å>åPåVå`å^D�œH8H8Z8f8|8–8¡8¡8²8Â8Ä8î8_¼B½½(½0½:½F½T½d½Œ½¯½¾½é½í½õ½ÿ½'¾J¾X¾h¾s¾ž¾®¾³¾»¾æ¾ê¾ü¾¿¿¿&¿&¿0¿:¿`@nzsIsI{IœI I³I¼IÀIÂIa *n°3°3»3¿3Ç3è3õ344404C4X4l4x4�4 4³4»4Ü4ñ4ü45+505:5L5e5t5�5–5Ž5±5É5Í5Ò5Ò5ã5ã5ö566163636F6N6N6N6`6`6i6{6‚6‚6”6š6À6b@1=›ú›ú©ú®ú±úÃúÉúÌúÎúÔúcè¸îH“H“b“z“†“–“¨“¬“¯“¸“»“̓̓̓ӓà“ã“è“å“B”Y”\”^”u”x”z”‚”’”’”›”ª”¸”Ȕ֔ߔæ”ë”ë”ë”ñ”•dD b¼b¼v¼ž¼Á¼μۼ漽 -½½e4zƒ^^lu|…f8îøZžZžhžnžwž}žƒžŒž�ž•žgtRkP|P|u|w|�|°|¶|°|Í|Ï|Õ|Ï|ì|î|î|þ|}}}}}V}h0SRSR\RnR|R€R„R„R‰Ri@ÊÕÊÕÙÕáÕõÕÿÕÖÖÖÖÖÖ"ÖjØ&Xj j € � š ¬ ààÔ ì ù  ¡¡#¡3¡U¡W¡t¡�¡�¡�¡’¡¾¡Å¡ΡÔ¡Û¡á¡æ¡ì¡ð¡÷¡¢¢2¢küi¤ÀdÀdßdádðdüdee"e+e2e@eNededegeleveve€eƒe™e±e­e¿eÄeâeûeff -ff3f5fQfKf}f}f‘f¥f¬f²fµfºfÊfÑfÔfªgl” *ãã-U}‹ÎTVdr€€š´Ñãó ! 3 C X q x  › · à mdV8i8iLiNi^iliviši¾iÆiØiæiñijjj%j*jCjcjcj„j†j†j§j©j©jÊjÌjÌjÜjÜjäjçjìjk -kk(kKkWk~k~kŸk¡k¡kÂkÇkÇkèkíkíkýkýk -l ll+l;lGlglglslwlƒl‘lšl®lÂlÉlÐlÓl;mn`AUë$ë$ó$ %%%%(%4%O%X%_%d%u%†%˜%œ%¡%£%oðñ) 0 0¾0Á0Ä0Î0Ü0ç0ÿ01171D1O1a1v1‡1’1¿1Ä1Ê1ô1þ1222 212F2Z2b2ˆ2�2“2¶2»2Ï2ç2þ2303F3X3X3„3š3�3¯3p<5@ЄЄ¢„±„¸„½„Ȅ݄à„å„ñ„q0 (H(H,H@H@HTHXH\Hr¼ -5SíSí^íbí†í‘í í¬í¸í×íïíÿí î î@îBîBîcîeîeî†îˆîˆî”î”îœîœî¨î¼îÌîÔîÔîæîíîíîÿî ïïï;ïs\Qdj“j“z“|“‡“Œ“Ÿ“¨“­“²““ϓϓՓà“tŒoŽÀ6À6Ë6Ó6Þ6é6ô6ý67'707D7k7�7›7£7¹7Á7ß7ë7ö788 8+808C8uxˆ¢óüóüýýý$ý*ý-ý5ý>ýMýUýUý`ý`ýhýjýjýqýtý€ýv0 â“â“ð“ú“””” ”wLDSà—à—ø—ú—˜-˜;˜=˜R˜]˜c˜x˜x0 SŠTŠT¢T¤T°T°T¼TÉTÖTÞTãTéTëTïTÿT UU(U-U-U4U4U?U?U^UlUwUyUU�UƒU…U…U�U’UšU U¢U¢U®U¸U»U»U»U»UÆUÆUÎUÒUÞUyx8¨Z¨Z¾ZÛZâZîZýZ[[[*[2[8[;[E[z´5^0‹0‹T‹_‹g‹v‹{‹€‹�‹•‹°‹°‹¾‹Å‹Ë‹Ò‹Ú‹è‹î‹ð‹ŒŒŒ ŒŒŒ*Œ0Œ2Œ2ŒBŒDŒDŒTŒ¹Œ{ `3Z3ZMZ[ZtZZ–Z£ZµZÊZÚZáZòZýZ [[3[3[7[B[N[P[P[P[V[V[Y[c[c[~[‹[‹[�[ [³[¹[Â[Ì[Ü[ð[\)\4\4\F\F\F\\\l\ƒ\Œ\’\¢\¦\¦\«\«\Á\|,07bŠbŠkŠuŠvŠ{Š}tý’ݒݣݯݽÝÉÝÕÝáÝáÝóÝùÝùÝÞÞ/ÞKÞKÞKÞKÞQÞQÞaÞcÞcÞŒÞ~$‚‡VîVîZîgî�î©î<7B››'›'›C›K›[›b›d›l›€,€H€H„H˜HœHœH H�, -`H`HdHxH|H|H€H‚hN¤ÈPÈPÓPÞPîPöPQ&Q7Q@QTQlQ|Q�QŸQ§QÈQÝQèQòQRR&R3RER^RmRmR”R£R­RÊRÕRÝRøRSS!S;SJSVS_SdS�SŽS”S­S©SÃSÎSÖSáSáSáSìSìSýSýST"T5T>T>TQTaTiTiTiTwT‚T‰T”T•T©T­T´TƒDŸ¬ÛÛíù)44EUWƒ„LapÃ\Ã\Ì\Ñ\Ø\Ø\÷\]!]0]?]D]F]H]H]…l£ºú­ú­®®(®7®7®_®‚®�®—® ®°®¼®É®å®ë®ï®÷®û®¯†¬Gncåcåkåoå{å‹å–å¥å±åºåÖåèåýå&æ2æ=æ\æ\æƒæ…æ…æ…æžæ æ æ æ¸æ¸æÊæÒæíæíæíæÿæççç(ç‡øQØyöyz*z.z@zIzRzYzbzkzƒz’zªz½zÆzÏzÝzõz{{%{){/{8{>{I{K{N{V{k{€{ƒ{Ž{”{œ{ {²{¸{¾{Å{Ë{Û{á{ó{ú{ü{L|ˆ<ÃÎBB;BKBPBvBœBÂBÉBÐBÕBáB‰lý -² -²²'²8²`²ƒ²’²Ÿ²ª²DzÚ²ó²ó² ³ ³³(³2³:³Š ¥É°g°gÈgÊgØgägýghh,h1hGhChShshshŠhŒhŒh£h¥h¥hµh·h·hÇhÇhÎhÎhÖh8i‹HZh@d@dTdidsd‡d�d•d™dŸd¦d©dºdŒàø,Ã+Ã+Ö+Ý+û+û+,,7,7,U,j,v, ,¦,«,Ò,ï, -)-F-c-€-�-º-×-ô-...K.h.….¢.¿.Ü.ù./3/P/m/Š/¤/¾/Ø/ò/ -0 -0 -00�2�< -"”"”6”E”U”X”Z”b”e”m”Ž(ÿnònòxò‚ò¬ò±ò�$ j j%jAj�P¨¸Ë7Ë7Ï7Þ7ã7ï7û7888#8(898P8h8j8‘@ ó:ó:;;;;);0;2;7;D;’X�¢B­B­W­a­e­e­�­°­»­Ù­ê­ì­ì­ô­“,Š‘†Ì†ÌšÌ¬Ì±ÌÂÌÈÌïÌ”x£½¶ï¶ï¿ïÌïÛïìï÷ïð2ð8ð>ðEðXðzðzðŽð˜ð ð©ðÁðÊðÊðßð•8¶À³K³KÏKÜKáK÷KúKL–(¿Åԧԧܧæ§ü§— žÂÛ@Û@é@î@ö@þ@ AA'A,A>ASAiAA•A§A®A®AÄAÑAÑAçAöAöAýAB BBB˜8�§£-£-±-¹-Á-â-ø-..™P:JPxPxhxtx|xƒxŒx’x•x•x©x¶x¼x¿xËxšð8p<ª<ªVªfªmªuª|ª˜ª³ª³ª¹ªÂªËªÍªÖªßªáªáªêªùªûªûª« ««««$«)«)«2«;«@«@«@«I«R«W«W«c«l«q«ˆ«Œ«Œ«¦«¨«¨«¶«º«,¬›XÓåÜÜ -ÜÜ!Ü0Ü<ÜEÜMÜ\ÜxܩܩܻÜÂÜÂÜÔÜÕÜÙÜœÈÝ P8P8l8r8|888ˆ8“8�8§8³8µ8»8Â8Å8È8Ð8Ü8â8ç8í8ð8ò8ý89 9999#9)92929292989@9C9S9�,™ JÚJÚSÚ_ÚgÚlÚqÚž8akVVdnxƒ‹��“Ÿx_ynn1n8nFnFnRn]n�n�n’n”n”n™n™n›n›n›n�n�n�n¦n©n¬n¹n ,Û₈‚ˆ‹ˆ•ˆ–ˆ›ˆ¡4ÒÛërërÿrs s1sDsJsSs¢$(-ª£ª£¸£À£Ò£Ø££<@Kr¤r¤ˆ¤’¤–¤›¤§¤¬¤°¤´¤¾¤¤  -¶ò¶òºòÚòÜò¥t.:³:³J³V³_³p³˜³»³ʳ׳ë³â³ ´ ´&´(´*´0´2´?´B´J´¦h^tе嬵²µ»µ»µĵӵ൶¶"¶$¶6¶6¶6¶G¶T¶T¶b¶§@wƒèœèœìœíœüœ� ���)�.�0�¨<ðûÛ Û ð ß ÿ '¡©€�¹*¸*¸H¸Y¸a¸t¸†¸‘¸œ¸²¸¾¸Ô¸ê¸ò¸ò¸A¹F¹F¹i¹i¹€¹ ¹§¹ɹª˜ìûCûC DDD D D.D3DLDUD`DbDcDcDoDzD|D‹D�D™D£D±D¶DÅDÌDÎDÎDÎDÔD«€›¦á¦á¯á²áÉáÉáàáôáââ,â?âJâ[ârârâ‰â�â»â½âÕâèâèâëâDã¬8—¡@]@]V]_]i]t]}]€]Š]­4<Eà:à:ô:;;; ; ;';®hqÇ,¬,¬J¬Z¬a¬i¬p¬Œ¬�¬¯¬¯¬Ñ¬Ñ¬Ñ¬Ú¬Ü¬Ü¬å¬ç¬ç¬ð¬ò¬ò¬û¬ý¬ý¬­­­­­­­­­'­)­)­2­2­5­:­:­:­=­@­I­c­s­Š­�­Ÿ­¢­¤­§­²­·­·­À­À­Å­Å­Î­Û­à­à­é­ý­®®®®®® ®û®¯ ¢¦�]�]™]¦]«]°`UiQQ3Q>QDQOQQQbQoQuQuQ�Q±0LTTTT*T0TATCTCTHT²(‹‘è\è\ü\]]]]³ \€ÓêÓêÛêæêöêëë5ë5ëJëRëWëWëdëzë†ëŽë–ë¨ëÕëáëôëüëìì ì ì ì&ì&ì8ì=ìDì´°.V»è»èÃèÎèÞèíèùèééJéoétété‰é‘é–é–é½éÅéÍéßé êê+ê3ê8êMêOêOê[ê[êmêtêtê†ê‹ê—êµ8LV"…"…2…5…7…<…E…H…M…U…¶ €„)-·(cc cc!c)c.c¸D0_0_D_V_]_a_d_o_w_‹_Ž_–_¹h²ÈFFh‰�³×ññ*DDWWcºX=Oöëöëììì ì@ìGìTìTìkìtìxì|ì»\r…(�(�>�E�T�[�d�d�~�‰�‘�¥�®�´�¿�¿�Ý�¼PFV(;(;F;L;Q;m;s;x;–;˜;¦;¬;¯;½;½lXoÆÿÆÿçÿêÿøÿøÿ $)).137G¾Œ~�Û>Û>ä>?:?e?´?Á?Ã?Û?Û?*@7@9@Q@Q@a@�@ˆ@�@—@Ä@Ë@Í@Ò@Õ@¿ˆ;Y “ ““““.“;“D“M“V“_“s“s“~“„“†“•“�“¬“µ“¾“Þ“Þ“à“ð“ö“û“À4 šƒšƒ®ƒ½ƒÂƒÐƒÓƒÙƒáƒÁd±ÆÛÛÛ$Û)Û7Û9ÛJÛ`ÛoÛ€Û†Û†Û¡Û©Û±Û¨'2¢2¢D¢O¢T¢b¢n¢z¢ƒ¢Ž¢™¢¤¢©¢·¢Å¢Ó¢ò¢ý¢££4£@£H£S£U£f£q£x£†£•£—£ £ª£Ã W[›ê›êµêÇêÑêÄD8E‹‹Ÿ©»ÂÉÙäòõýÅ<)4:„:„Q„T„Y„\„o„u„x„z„„„Æ´`Éããî%2?Nbrˆ•¨ÉØåîî*K~ƒ�±ÍØø $6Vk~˜­ÇÓåêü&6BUUˆ“ž¸ÆÒÞÞãóDKPpwœœ¿Îøúúÿ!,,:OO`g||���˜Çh - üü,üGüSü_ükütü}ü†ü�ü˜ü¡üªü³ü¼üÅüÎü×üàüàüøüÈ0¿ÇËqËqéqrr(r.r4rSrÉX’¤€6€6Ž6—6£6©6¬6±6·6º6¿6¿6Ì6Ð6Ó6Ó6Ù6ÊLÃYÃYÒYàYàYêYôYZZ%Z+Z,Z2ZËÜ�´ØsØsþstt't't=tEtUtdtdtit‡tŠt�t�t±t¸tÂtÂt×t×títûtu uu2uOIOWOWO\OhOÐ4{„$¦$¦4¦6¦>¦R¦Y¦^¦f¦Ñ<²½(^(^L^P^i^€^Š^”^—^§^Ò8§±°]°]Ô]Ø]ñ]^^^%^ÓLú žûžûºûÆûàûéûöû -üüüÔ`L`¤¤â¤î¤ù¤þ¤ ¥¥&¥,¥=¥A¥E¥K¥N¥U¥`¥`¥l¥Õ Ÿ£226OQÖ #Gþüþüýý$ý2ý2ý:ýSývýxý—ý®ýÍýóýþþ&þ4þLþdþmþmþ†þ�þ©þ·þ¹þÀþÇþÿ×¼\‡»û»û×ûÚûãûìûöûü üüü&ü)ü<ü<üPüRüRüfüfüiülüzü~ü”üšü¡ü¨ü«ü°üÅüÈüÊüÊüßüßüßüñüØ`¹Íó–ó–————&—+—7—?—K—O—W—c—e—e—h—t—Ù ’– ] ])]6];]Ú<¾Éæðæðêðóðúðñ -ñññññÛ\"˜_˜_¨_­_·_¿_È_Ë_Ò_Õ_Ý_ä_ì_Üd\q8�8�P�Y�t�ƒ�˜�ž�¦�É�×�û� ����&�ÝdPVPVeVoVtV{V�VŠV˜V£V¥VµVÁVÞVÞVçVðVöVWÞ<±¼||,|/|8|H|M|a|r|ß|øÂ�Â�ø�ì�‚‚‚"‚3‚7‚;‚E‚J‚Z‚`‚g‚j‚|‚àÔ†·à�à�‘ ‘‘‘/‘9‘D‘F‘Z‘g‘p‘t‘t‘}‘�‘˜‘¬‘²‘ܑ󑒒-’4’9’?’i’’Ÿ’Ÿ’·’·’¹’¹’¹’Ô’é’é’G“á° 13’3’<’W’W’]’]’c’c’c’c’c’c’c’c’h’h’t’z’z’€’…’Ž’Ž’¡’¡’¡’¡’¡’¡’§’§’§’§’©’©’Á’â„u’¸„¸„΄Õ„ã„ý„……&…+…2…>…>…H…M…T…_…m…q…t…w…€…“…ã,‚‚‚‚†‚‹‚¥‚ª‚¬‚ä@›§s7s7�7ˆ7�7™7 7¢7´7¹7Æ7å,„‹š†š†£†¨†°†¶†¶†»†æD -[è[èièqè�è�è’è’è’èŸèŸè«è«èµèç4›¤ëŒëŒôŒ���$�&�&�+�è /3@I@INIbIhIéH%’Þ’Þ§Þ³Þ¶Þ¿ÞËÞÓÞðÞÿÞßßßê$ŽêŽê’ê–ê˜êëDÍÚJˆJˆXˆdˆiˆiˆvˆ{ˆ{ˆ�ˆìhC™s›s›�›�›¨›´›¸›Ô›ï›ï›ï›ï›ï›û›œœœ œ+œ;œEœJœJœSœcœhœhœyœ~œ�œ�œžœ®œ°œ°œ°œÍœÏœÏœìœìœòœþœ -���%�(�4�E�V�X�X�n�p�p�†�†�Œ�˜�¤�«�¯�¿�Â�Î�ß�ñ�ó�ó�ó�ø�<žíxš´CžCž[žjžpžsžŽž©ž©ž³žµžµž¿žÁžÁžÁžÌžÎžÎžÎžÙžÙžÙžÞžðžî Uy®ì®ì·ìÇìÕìùì í í.í@í@íUíWímí…íŒíŒí�í�í›í¦í²í´íÀíËíÛíãíöíïHŒšÂ†Â†Ö†Ý†ï†ò†ò†ù†‡‡‡‡%‡ð8ñûSiSisi~iŒi„iŸi°i°i°i¼iñ@ƒ�’¬’¬ ¬Ȭë¬ø¬­­2­:­@­ò(17Ô©Ô©á©ö©"ª6ªó ëïæñæñðñòòô@&2rÖrÖƒÖšÖ¨Ö´ÖÈÖÕÖÜÖßÖçÖõ$§¬Š‡Š‡“‡›‡¡‡¦‡ö<ÇÒ²Û²ÛÈÛÞÛïÛóÛóÛøÛøÛÜ÷dµ -ØuØuúuþuvvv-v6vFvFvRvavfv‚v…vŠv�vŸvªv±vµv¹vÇvÛvâvìvòvõvw ww0w2w5w5w7wQw]wcwlwxw™w�w©w°w·w½wÀwÎwäwäwäwéwõw xxx x"x(x+x9xOxOxOxWxcx{xxŠx�x”x¥x¥x¬xÂxøÀIŠXŠXžX«X±X¹XÆXÈXÞXæXæXðX YY Y+Y6Y9Y@YEYMYRY_YdYvY}Y£Y¦YÁYÁYÁYÅYÊYØYù4 ( -„ -„„„ „(„+„0„6„úXWWW!W:WFWXWbWrWuW‚W¯W²W¶WáWäWïWúW XX'X5XDXVX_XlX{X‘X˜X©X©XµXÀXÀXÓXÖXæXóXüX YY!Y+Y;YDYTY`Y`Y`YfYmYrYzY|Y¡Yû$_¤«T«T³TÃTÒT×TëTU!U>UFUeUxU”UâUäUèUüXÂÔ:€:€C€S€S€T€Y€Y€c€v€†€Œ€›€ €¯€±€±€ýhW¾å¾åÖåßåååîåöåÿåæ æ ææææ!æ/æ/æ5æ<æ<æRæZæaæhæoæzæ�æ—æ§æ©æ½æåæûæçOç7çmçžç¬ç¶çÓçÖçÚçßçèçñç(èèè9è4èOègèuèèè”èžè¨è½èÆèÝèáèèèêèëèòèòèéþ@ã¢ˆ°ˆ²ˆÔˆáˆáˆåˆëˆÿ0W_Z…Z…h…w…~…Ž…’…•…›…, /// /3/H/Q/`zŽ»n»n×nünooooo,o;oCoOocokowo{o{o�o4W`À;À;Ö;Ø;â;ï;ø;ý;<tIbàqàqîq÷qüqrrr5rCrCr_rxr€rŽrŽršr£r©r©r¯r<�šÚSÚSñSûSTT T&T3T,›¢vïvïï‰ï¯ï¯ï´ï˜\~;$;$C$T$o$~$‹$š$¤$½$Ë$Ý$ì$û$ %% %,%8%D%S%b%t%‡%�%ž%¥%¥%³%¼%X††š¤«ºÓÓäóÿ#P­½ª‡ª‡¿‡Ï‡Õ‡Ú‡Ú‡ä‡è‡í‡í‡õ‡ H¨¶ . .#.&.;.D.[.r.€.�.š.±.Ã.Ê.Ö. -,òùstst�t t«t±tÁt 8<Fª’ª’¾’Î’à’é’ì’ô’ <›¦*‡*‡>‡L‡W‡b‡j‡r‡z‡}‡…‡ <ju‚«‚«–«�«§«°«Å«Ñ«׫Ý«(kB•B•\•Ž•²•µ•À•͕ޕï•÷•–– -– – ––,–/–4–>–D–U–X–]–]–j–q–ƒ–†–‹–’–¤–§–¬–³–Å–È–Ê–Ñ–ã–æ–è–ï–——— — —"—$—*—*—*—*—/—/—6—=—D—J—M—í—8mwbÓbÓlÓtÓ…ÓšÓ¢Ó¥Ó§Ó«ÓPÝíª�ª�¾�Ç�à�ñ�žž3ž=žJžJžLžTžH¾Ìú‡ú‡ˆˆˆˆ&ˆ8ˆ=ˆ=ˆCˆHao<<"<3<C<F<H<U<Y<\<f<l:Qà -à -Î -Ý -ì -  % 3 < K ] | Ž ³ ¼ Ñ Ø Ø í î ò  Ÿãñãñòòò%ò>òBòJò\òzòzòzòzò‡ò�ò•ò¡ò¦ò¦ò­ò³ò¿òÄòËòÒòÙòâòôòó óóóó'ó7ó>óKójó€ó™ó�ó¼óÔóôôôôô ô ô ô ô ô ô ô4ô;ô>ôNôTô\ôbôdôdôkôtôvôvôvôyô{ô{ô‚ô…ô‹ô‹ôŽô¤ô±ô±ô¼ôÐô×ôÝôòôõôõõõõõ!õ*õ2õ2õ2õ=õEõHõóõxÇáè.è.// // /Ì"<0;K(K(](m(�(¡(§(©(©(¯(#0š¢šÔšÔ£Ô©Ô²Ô»ÔÄÔÎÔÓÔ$<£®ÚÔÚÔéÔîÔ Õ Õ$Õ$Õ)Õ)Õ/Õ%8NXò×òר -ØØ*Ø-Ø/Ø7Ø&\õ’»’» »¥»­»´»¹»á»¼¼¼)¼F¼N¼U¼U¼X¼^¼',“šïï,ïFïSïXïkïqï(¼ã3X3X_XeX~X–X�X©XµX¹XÇXæXæXYYYY&Y0Y8YLY]YnYƒYŠY“Y™Y¡Y¡Y¥YÂY)4#+ú+ú4ú9úBúKúQúQúVú*< ÙÙ*Ù=ÙJÙVÙ^ÙzÙŠÙ�Ù�Ù+4ÓÜ8888'8'848<8A8I8,,W^ËHËHÙHÛHíHõHúHI-Dccp~†Žœ¤¬´¼ÆË.^šc c k { � œ ¥ ³ Á Í Þ ó   . N ] p ~ “ ª ³  Ý û &3AMbw‰Žš¦´ÉÛôý$-1/(QWŽÿŽÿ™ÿ­ÿ¼ÿÀÿ00X`..7AGMOOT1@ ;&;&O&]&k&u&†&—&¡&«&µ&»&2ˆ ³M³MÓMÝMàMèMøMøM NN,N6N8NWN\NmN{N†N—N¥N¯N¯N¯N¿N3PÙévúvú”ú§ú³úÍúÞúëúÿúû ûû4$mrzzz$z)z9z5H¾Ì¨^¨^¾^Ã^Ü^ç^ð^ò^þ^___6D&3c3cSÛúÛúôúøúûûûûûû,û;ûJû\ûqû{ûŠûŠû”û:ÔT>Ô>Ô\Ô`ÔcÔtÔ‡Ô‘Ô—Ô›ÔžÔ Ô¦ÔªÔ­Ô³Ô¶ÔÉÔáÔéÔìÔýÔÕÕ"Õ&Õ9Õ<ÕHÕMÕSÕ[ÕnÕˆÕ�Õ“Õ¤Õ¼ÕÃÕÃÕÒÕàÕúÕÖ&Ö&Ö7ÖOÖ\ÖaÖaÖrÖ†Ö�Ö’Ö’Ö£Ö·ÖÎÖÓÖÓÖÙÖêÖþÖ×"×"×(×9×M×l×q×qׂזףרר׹×Í×Ú×ß×ß×ð×ØØØØØØØ$Ø<ØKØMØMØ^ØrØ{Ø{Ø�Ø�؊؊ØÙ;4ÂËÊÊÊÊØÊÝÊèÊëÊïÊõÊ<l 7ÃNÃNáNäNìNOOO O6O@OBOaOfOwO…O�O¡O¯O¹O¹OÇO=ˆ7UËOËOñOõOøOP!P!P4P=PRP[PbPgPqPzP„P‡PŠP�P§PµPÆPàPîPþPþPQ>T3DêÖêÖûÖ×*×6×6×T×a×r×z×z׆גהל×?XÉÛÑwÑwñwþwxx/x5xBxMxTx]xaxmx@X¶È1w1wQw^wcwow�w•w¢w¯w¶w¿wÃwÏwA$ \¡\¡r¡¬¡Ë¡Ù¡B X\éé -éééC õù.ò.ò8òKòPòD áå#˜#˜7˜I˜Q˜E(*0t©t©�©–©»©Ï©F0qy¾Ë¾ËØËÛËÛËäËõËøËÌGHª¸s–s–Ž–«–µ–¼–¼–Û–à–â–â–ì–HD lÚÎÚÎåÎþÎÏÏ%ÏHÏHÏUÏwϘϩÏÔÏäÏõÏ ÐÐÐÐ5ÐMЇЎПбÐÂÐíÐÑÑÑÑÑÑÑ@Ñ+ÑXÑrÑzÑ�ѺÑËÑöÑÒÒÒÒ#Ò2ÒAÒFÒFÒUÒiÒ�Ò—Ò¯Ò¾ÒÕÒõÒõÒõÒ ÓÓ&Ó/Ó7Ó]ÓIXºÌʹʹì¹ð¹ö¹ù¹ººº"º,º/º2º8ºFºJ0 ¨óõóõ öö@öBöBöJöKDÎÎ#Î+Î+Î8ÎJÎRÎWÎcÎiÎkÎkÎpÎLLܡܡì¡ú¡ -¢¢;¢_¢p¢»¢¿¢Ç¢MØ9ʆʆä†ë†ï†ó†þ†‡‡1‡=‡@‡I‡T‡k‡p‡y‡|‡†‡އ‘‡”‡¨‡¿‡LJÞ‡å‡î‡ñ‡ó‡ˆˆˆˆ ˆ#ˆ*ˆ-ˆSˆZˆlˆN<ðû³˜³˜É˜Ë˜Ù˜ö˜ú˜ -™™O �…KìKìeìwì�ìPH -FôFôZô\ôcôqô™ôžôµôºôºô¾ôÆôQ@:FåQåQõQR RR%R,R5RRHâð0020?0O0d0k0t0‘0”0ž0SP¢W¢W¶WØWØWäWïWóWúWX XXXXTpc{b…b…j…v…�…š…¨…¶…Ü…ñ…ö…ý…†††U ÍÑ___+_Vt/»&»&Æ&Õ&ä&ò& '0'S't'…'¨'»'Ì'Õ'â'ù'()(0(0(E(F(J(Wh„šk6k6s6‘6¢6²6¹6Ý6î6777173737F7W7o7q7q7s7X0$,›#›#£#½#Å#Ý#é#ò#ü#Y@ rÕrÕ{ՃՌՠժկջÕÁÕÃÕÃÕÈÕZ4ÈÑSrSrqr�r¤r°r¶r¼rÅrär[,†zSzSƒS¡S³S³S¸S\<R]ó ó   5 T Z \ \ b ]`££«ºÆÚëöÿ   - 4 4 F G K ^TDU#!#!'!>!U!`!k!’!¿!Ê!ñ!ø!ÿ! -""+"2"_8$K;K;T;d;l;y;{;ˆ;ˆ;‹; \ No newline at end of file +† +� +© +° +Á +Î +Ù +à +ñ +û +û +    - A L rLš©‹•‹•§•®•µ•Á•Ê•ä•ï•ô•ý•–"–,–,–A–s8žXžX´XÁXÓXíXûXYYt$/4ÆóÆóÏóàóôuÔ._{{ƒ‹™¬»ÅÑÜêù +&.:BJJUWlxŠžÐáî &(:CCUUcj||ŠŠ�“v4§°SpSpgpyp‚pœp£p¹p¿pÒpw0dl»T»TÃTÙTäTóT UUxPZj˓˓ݓä“í“û“”” ” ”””"”,”yd¦»VVor€€‰”™œ¬·½ÀÃÅÉÕzH<J¶õ¶õÆõÌõ×õàõãõðõùõùõýõöö{$@EFFO]ch|4ÕÞ††”¢ªµÎÓÚà}¬LsŠ{Š{œ{«{±{Å{Ø{ï{||,|C|Z|q|Œ|�|—|�|¡|³|Ì|Ù|ß|ú|þ|} }}!}:}G}M}P}Z}~ö3Ð=Ð=Ø=à=ñ=> +>>>>">&>?>y>‹>Ÿ>Ã>Ì>Õ>Õ>Ú>í>ò>ý>?'?.?`?“?¤?´?Ê?Þ?å?@J@[@k@k@r@„@„@’@’@“@¥@¥@³@·@»@P–¦«o«oÁoÔoæoÿo p pp2p=pCpGpOp€(cc$c.c9cAcFc�0lt^^l{†ŒŽŽ”‚<KV¨x¨x±x»xËxÍxyyyy +yƒ˜òvv|zŠ +„4ŠÓVÑVÑnÑvÑ„Ñ�ѓљџѭÑÂÑÇÑÍÑäÑéÑïÑÒ ÒÒ(Ò-Ò3ÒAÒEÒaÒt҇ҌқҨҸÒÇÒÔÒçÒíÒôÒöÒ Ó#Ó*Ó8ÓJÓJÓ]Ó_ÓrÓtӇӉӜӜӸÓÏÓÕÓÛÓæÓ +Ô…Hôôô,ô5ôAôCôEôTôTôcôeôeôjô†`ÝñÓhÓhêhøhii ii,i7iBiDiIiKiLiLiVi‡(³¹ÛöÛöæöúö ÷ ÷ˆDÚç†ñ†ñ–ñœñ«ñ·ñ¾ñÍñÙñÙñßñ‰8ÛbÛbëbîbóböbc +c cccŠt‹ñ‹ñ›ñµñµñ·ñ·ñ·ñËñÍñÍñÍñÖñçñðñò òòòòòòò$ò‹DMZ+T+T@TNTNTVTlTpTpTtT|TŒ¤6[pŽpŽŠŽ’Ž–ŽžŽªŽ±Ž¸Ž½ŽÒŽãŽçŽçŽôŽûŽ���#�)�,�.�8�=�T�W�Y�`�d�r��81;îÚîÚüÚÛÛÛ)Û-Û-Û3ÛŽ$0uû(û())#)5)D)M)[)i)p){)‡)œ)ª)²)Ç)Ô)é)ö) ****4*I*S*h*v*v*„*�*œ*°*×*æ*õ*+++,+A+V+g+q+ƒ+•+§+¹+ì+ú+,4,K,T,c,~,•,ž,©,°,»,Å,Î,Þ,�,–�“^“^—^¨^¸^½^Ì^�02:“’“’§’²’Ä’Ì’Ï’×’‘¼Kv“d“d¯dÐdâdédódÿdeee%e2eVeeelese„e†eŽe™e¤e³eºe½e¿eÅeËeãeìeìeðe f’,ÑØ®ú®ú¼úÈúßúãúåúùú“P Yˆ`ˆ`¢`¥`«`·`¹`È`Ï`Õ`þ`a2a9a=aUaaa~a‡a‡a‡a”aÍaÙaåaòabb$b7bDbUblbrb¹bËbøbÿbc%c0cLcLcXcZcZcfchchctcvcvc†c‰c‰c•c¡cºcÆcÏcÚcðcþcþcþcd(d/d6dûDûž(âè‹s‹s¡s½sÏsÕsðsŸ %)†ó†ó�ó£ó¨ó H0>¢ß¢ß·ßÃ߯ßÏßÛßãßàààà$à¡  +¾ò¾òÂòÏòÑò¢ä{°hzhz†z�z²z¼zÎzÑzÙzÜzâzåzñz{{{#{.{3{9{K{K{Z{]{g{j{v{ˆ{•{›{¨{³{¸{¾{Ð{Ð{Ð{Ð{Û{Û{é{£ ÑõSLSLrLtL…LŠL˜L¹LÇLÕLàLøLÿLMMMM M!M'M-M0M6M8MAMPMVMVMVM]MnM¤T…–nn’•££·ÇÒØãããçõ¥`p„ÖÖóù&*14>EUYYY]i¦HîüòËòËÌ7ÌEÌPÌTÌXÌ\ÌqÌ{Ì{Ì}̧̋D"/ú‰ú‰ŠŠŠŠ*Š/Š/Š5ЍX{�ƒIƒIœI¬IÄIÐIÜIÜIîIôIôIJ JJJJ©,Úáss)sLs7s\sbsˆsª8x‚ªÅªÅ°Å®Å¾ÅÜÅèÅêÅêÅnÆ«8>H°I°I¾IÄIËIáIáIèIJJ¬<xƒ¶¶-¶;¶B¶F¶I¶M¶T¶x¶ˆ¶­`«¿226M²ËÚéîôö®Lúúú:ú:úGúGúTúTúdúhúhúxúzúzú±ú¯d4ÉÀ@À@Ë@á@è@AA&A3ABAVAnA†A™A¯AºAäAÿABABFB_BtB”B«B»B½BóBJCCCiCzC�C¡C¶CÐCÐC÷C÷CDDYDgDÇD˜D–DæDíDòDEEE5EEEfE¬EyE�ElEÕEFFF/FDFeFoF†FŽFyFâFâFâFçFçFøFG!G9GRGkG†GžG´GÌGÚGåGåGøGH%H:HXH\HZHªH¸HÈHÖHîH II,IBIBI™IjIhI¸IÆIÖIñI J J!JkJãLãLãiãsã‹ã�ã§ã«ãÅãÅãØãáãìãõãä ä ä*ä7ä@äBäHäQäWä|ää—ä§ä¸ä¼äÀäËäËäÏäÏäÏäøä»4ºƒºƒÈƒÊƒÏƒÒƒÕƒÚƒàƒ¼”"vv*vIvUvhvnvv‡v‹v—v¨vµv»v¾vÁvÄvÉvËvÏvÛvìvûvwww +w +www)w½„c€ørørs s,s1s5sHsisssss‰s•sœs¯s´s¸sËsìsösös +t +t tt¾P]mæèæèïèýèýèé+é:éSéoé~é—é³é´é¹é¿L–¥ò€ò€� ��(�<�@�N�c�u�~�ƒ�•�«�ÀˆSqfVfV|V�V�V�V™V¡V©V´V½VÅVÊVÌVÐVßVêVòVúVûVûVWÁÜ›Îããëï(1GZoƒ�Ÿ²¿Òðù+5E[q‰¢¦¨­²»ÍÔÔæìÂ,z�ÆíÆíÊíîîî"îÃ,fmk‹k‹y‹‹‹‹—‹›‹¡‹ÄH´Â‚‚#‚/‚B‚M‚e‚g‚m‚x‚|‚€‚ƒ‚ÅdÃØŠ‚Š‚“‚«‚¶‚҂Ԃꂃƒ)ƒCƒGƒÆ¬޵JJ7J9JSJbJ�J™JžJÍJÔJÖJÖJåJïJúJÿJKKK%K>KEKEKWKcKgKqKÇ€0LcScSSŽS“S™S£S¨S¯S¾SÄSÄSÍSØSêSóSþSTTT T T T!T+TÈ  FóFóPócóhóÉŒ'Fä¢ä¢ô¢ø¢££*£/£2£@£E£d£l£–£š£º£¼£Ä£î£ò£¤¤#¤9¤T¤p¤Œ¤¨¤¯¤·¤Ê´T}Î Î ì ó ý    6 @ U Z d n x v † ¤ ¾ ´ Î Ø ò #7?ELSZarwwïËøµïÞÞážòžŸ ŸŸŸ"Ÿ1Ÿ8Ÿ>ŸPŸPŸcŸsŸzŸ‰ŸœŸ¨Ÿ¿ŸÁŸÙŸÛŸÞŸàŸàŸäŸäŸðŸ÷Ÿ÷ŸûŸ      E [ l ƒ Š � “ « ÌÜú-##+/:HQg{…‘œª¹Ùö+CRVamx‡–¶ÄÓÿ //=DVVddeyÍ4&/SSS$S.SASISSSUSbSÎŒ4SN N W y „ • © Á Ö ë ô ù ù    $ ; ^ n n n � † ‡ Ë Ï8ˆ’~î~îŒî˜îÃîÐîÒîÙîáîãîéîЀ5Ã�Ã�ã�ï�û�ÿ�‘‘&‘.‘4‘H‘W‘c‘o‘s‘v‘x‘Š‘˜‘œ‘¦‘ª‘³‘¹‘Ì‘Ñ$).IIII1I7IÒ,‚‰ÌÌ$Ì7ÌBÌHÌKÌSÌÓ¨ïH•H•b•e•}•ˆ•˜•ª•®•¼•Å•ç•í•í•ù•–––$–(–(–(–+–-–1–1–6–D–R–`–e–g–g–}–ÔLêù¦û¦ûÂûÎûèûóûüüü&üÕ  $nónóróó�óÖX&8ëBôBûBC&CL>LALLLòˆúÛ�Û�ñ���$�$�6�A�W�W�g�i�i�i�z�…�Œ���˜�œ�¤�ª�°�°�³�Á�ó|Ò¿Ò¿ä¿ó¿ö¿À:ÀJÀsÀƒÀ�ÀÀÀÏÀÜÀìÀòÀÁÁÁÁÁÁ,Á2Á5Á™Áô8 òžòžŸ ŸŸ9ŸOŸRŸ]Ÿõ>¸˜¸˜Á˜͘ݘê˜û˜ ™™2™9™L™_™q™y™š™®™±™¹™É™Ú™šš&š[š]šdšuš�šˆš™š§šºšÆšåšöH'5——2—E—^—s—y———‡—‰—µ—÷L \KjKjSj^jpjvj~jˆj«j«j½jÊj×jßjíj(k6knksksk…k’kŸk¤k³kèkïkll l ll*l7l<O<P<s<x<Š<�<²<¶<¿<Ç<Ð<ï<ö<== =.=?=T=_=l=l=s=•=¦=¬=¶=ú8JT¦Û¦Û´ÛËÛÖÛÖÛáÛéÛéÛïÛûDìù{{�™¯ÉÔÔåõ÷"ü$»b»bÄbÍbÓbØbýl?Vèšèšìšýš›'›@›I›T›_›‚›“›�›Ÿ›ª›µ›¾›Ç›Ú›í›þ›œœ +œþ$ôù»�»�Ä�Í�Ó�Ø�ÿ  +æTæTïTüT UDèõæñæñõñúñòòò(ò+ò1ò4%£B£B§B¬B¸BÄBÐBÛBâBäBh-ƒ«,«,Ó,Õ,Þ,ò,õ,ú,þ,-1-4-F-N-U-t-}--ž-§-§-§-¬-â-ì-ö-. +...).3.3.3.T.T.]._._.h.j.j.s.u.u.z.|.|.�.�.�.…. .¶.Á.Ø.á.æ.ð.ü.//'/>/P/T/_/u/…/§/Ä/â/â/â/â/â/ì/õ/ü/|0LÈ×/6;QSdh{�®4–ê–êžê¦ê®ê¶ê¾êÆêÊêÎê,nênêvê~ê†êŽê’ê–êL™¨ÖWÖWäWéWëWúWüW +XXXX X%Xx7*/9@Sll{‘š©°°³½ÓÚÜßááí| +Ðkn¯n¯�¯‘¯¨¯±¯¼¯Ç¯É¯Ü¯ê¯õ¯°° °"°(°,°/°5°9°<°?°R°g°o°r°Š°š°�°£°¦°¹°Î°Ö°Ù°ñ°±±±±±1±1±1±5±7±7±;±=±=±A±C±C±G±G±G±J±L±L±O±T±Z±]±a±c±i±l±„±˜±�±£±¦±«±¾±Ù±Û±ñ±ñ±ñ±ö±ö±ø±ø±ý±²&²&²&²>²D²[²j²y²Ž² ²Å²Ê²Ê²â²³³³³;³=³=³U³q³s³s³‹³§³§³Å³Ñ³Ö³Ö³î³´ +´ +´"´>´C´C´G´_´}´�´ƒ´ƒ´‡´Ÿ´½´Á´Á´ß´ä´ä´ü´µµ µ µ7µNµUµcµsµ—µžµ µ µ®µ¶µßµáµáµùµ¶9¶>¶>¶V¶k¶�¶�¶¥¶Ä¶å¶è¶í¶í¶··&·+·<·<·B·M·b·g·q·�·�···Å·Ë·â·ê·ó·ó·ÿ·¸¸ ¸¸$¸$¸-¸7¸S¸q¸Ž¸�¸£¸¸¸À¸Ì¸Ö¸Ö¸î¸ð¸û¸¹¹5¹5¹:¹:¹p¹~¹‡¹‡¹“¹—¹—¹ ¹¯¹¸¹¸¹Á¹Ç¹ã¹î¹ººº+º-ºIºIºIºYºzº|º|º”º«º°º°ºÈºßºéºîº»»»»'»+»1»:»I»R»R»[»f»~»€»œ»§»Â»Ä»Ä»Í»å»ð»¼¼¼<¼>¼F¼`¼c¼l¼q¼’¼œ¼œ¼·¼Á¼Ì¼è¼û¼½½$½$½-½1½H½€½‹½‹½‹½Ÿ½¨½¬½Ã½û½û½ý½ý½¾#¾+¾+¾4¾8¾O¾‡¾˜¾ž¾µ¾½¾Ê¾Ï¾Ï¾Ø¾Ü¾ó¾+¿<¿E¿J¿J¿U¿Y¿q¿ˆ¿’¿—¿­¿Å¿Å¿ï¿ù¿ù¿ÀÀ-À5À<ÀGÀLÀSÀSÀXÀ‹ÀŸÀ½ÀÔÀÞÀèÀèÀøÀ"Á2ÁDÁPÁTÁnÁ€ÁŒÁ�Á�Á�Á�Á”Á™Á™Á¤Á¨ÁÀÁ×ÁáÁæÁüÁÂÂ>ÂHÂmÂrÂrÂrÂ}Â�™°º¿ÂÕÂÕÂíÂí Ã)ÃFÃMÃXÃ]ÂÈèúÃÂÃÄÃÝÃëÃÄÄÄEÄGÄqÄsÄ�ĚĤĮĵÄÒÄÛÄÛÄÅ Å#Å>Å>Å>ÅCÅHÅ{Å�Å­ÅÄÅÉÅÓÅÝÅ +ÆÆ!Æ8Æ8Æ8Æ8ÆBÆXÆoÆyÆ~Æ~Æ–Æ­Æ·ÆÇÆÇÆãÆ÷ÆúÆ ÇÇÇ3Ç;ÇDÇIÇIÇIÇeÇyÇ|ǎǠǥǥǽÇÔÇÞÇîÇîÇ +ÈÈ!È3È=ÈCÈZÈbÈkÈpÈpÈpȌȠȣȵÈÇÈÌÈÌÈÌÈäÈûÈÉÉÉ:ÉKÉUÉ[ÉrÉzɃɈɈɈɭɾÉÐÉÕÉÕÉêÉêÉêÉÊÊ Ê'ÊdË @%¢Ÿ¢Ÿ¶ŸÄŸÄŸÑŸöŸ      +0EMê×ê×óר ØØ!Ø.Ø3Ø |„Ÿжж§¶©¶·¶·¶Ŷض·#·1·A·d·L·~·ž·³·¸·¸·¸·Ê·Í·Ù· 8Ž˜jÚjÚyÚ‡Ú˜ÚœÚœÚ¡Ú¡Ú§Ú ¨ºà÷÷)÷?÷=÷M÷U÷\÷`÷h÷x÷†÷•÷›÷£÷¯÷µ÷µ÷¼÷À÷À÷Â÷ù4GP²’²’Æ’Ü’ç’ì’ú’““!“ˆTr{{”ž®¶äù +C‰¥ªµ¿ÌÖäêöý O0-5ÓÓ×?ñi @ ³³ÅÐÝåíõý ˜¤Æ‹g‹g£g²gÀgÐgÖgÖgágìgïgôgþg hhh h&h,h/h8h9h9hEhGhShX7‰ÏÏ<ÏBÏIÏYÏ`ÏhÏnÏuϋϙÏ�ϢϨ϶ϹϾÏÁÏÁÏÑÏâÏäÏöÏøÏÐ +ÐÐÐ Ð"Ð"Ð2ÐCÐFÐHÐTÐVÐvÐ{ЂЋБЗОССбÐÂÐÄÐïÐÑÑÑÑ(Ñ(Ñ<Ñ@Ñ@ÑVÑ@¨´+_+_A_c_k_p_ƒ_�_–_™_¡_0³ú³ú¼úÁúÊúÐúÐúÕú,;B¢©¢©±©½©Ë©Ô©Ù©ß©ä66Í6ÍTÍWÍZÍnÍvÍ}͔͖͑͹͹ͼÍÌÍÎÍÎÍÑÍÓÍÓÍÖÍíÍÎÎ'Î1Î9Î9Î9Î;Î;Î@Î_ÎeÎt΄ΘΨΪμÎÌÎÑÎÑÎÝÎÝÎêÎíÎíÎÏ8üÂÝÂÝÑÝÚÝéÝÞ ÞÞÞÞÞô…¾<¦<¦N¦Q¦[¦h¦l¦r¦r¦y¦¦ƒ¦‡¦Ž¦”¦›¦¡¦¨¦®¦µ¦»¦Â¦È¦Ï¦Õ¦Ü¦â¦ï¦õ¦ü¦§ § §§§(§;§=§M§T§_§j§u§€§‹§–§–§ §LWfyyy)y)yGyMy]ycyiyyy{y{y{y¢yhÝóûŽûŽ� �$�4�<�<�J�T�c�k�w�†�’���£�®�±�¹�D<I6Û6ÛJÛfÛtÛ„Û†ÛˆÛ“Û—Û—ÛŸÛP„”ú}ú} ~~~!~3~3~3~5~G~N~~›~œ~¢~0�•[o[oqo„o–oœoŸo§o <alzzˆ™¡¥±¶ºÀ \ÉÜ..2EXkvŠ›½ßú0Kf�œX!TctâØâØðØÙ ÙÙ1Ù7Ù9ÙDÙ_ÙkنٌٌٌٌْÙ"X£µYvYvyv†v‹v—v·v½vÊv×vÞvçvëv÷v#X†˜ËìËìæìîìùìíííí#í4í=íHíHíTíaí$,’™ÆÌÆÌÚÌìÌñÌÍ/Í%ä6ë˜ë˜™™ ™™%™,™/™J™T™Y™`™e™e™v™h™„™›™§™»™Ä™Ì™Ý™Ý™Ý™æ™í™û™ý™šš-š=šEšWš`šqšyš‹šŽšŽšŽšŽšššÝš&  H˜o˜o¸oÇoÓoÞoéoýopp'p8p=pIpNpRp[ptp€p€p›p­pÀpÎpãpép qqq!q%q)qAqOqzqUq‰q”q«q¯q¸q½q½qÒqØq÷qüqüqrrrr&r' Lp«à«à¿àÏàãàðàôàýàá +á á á'áqáLá1á�á�á¢á©á¸áÊáÑáÝáñáââóâ(L2Î2ÎAÎIÎIÎVÎhÎtÎ|΂·Î�Î�Î�ΕÎ)<{†Â…Â…Ð…é…ô…û…%††3†€†*”Õör€r€œ€­€¿€É€Ù€á€å€é€í€õ€ý€��'�,�<�E�Z�`�d�v�+ GKR{R{a{~{„{,ä6 ‰ ‰¾‰ȉÔ‰݉û‰û‰ý‰ŠŠŠŠ)Š<ŠEŠQŠTŠYŠiŠ„Š„ŠšŠœŠœŠ²Š´Š´ŠÀŠÀŠÕŠæŠìŠïŠïŠòŠ÷ŠÿŠ‹‹‹.‹1‹N‹N‹S‹S‹S‹n‹-lªª—ª—¾—Ú—ê—ê—þ—˜ ˜˜˜.˜0˜D˜M˜Q˜`˜s˜y˜€˜�˜’˜�˜Ò˜Þ˜ê˜ò˜ü˜ +™™.™;™L™_™e™¬™¾™Ì™â™ñ™ü™š š š,šPš\šgšnštš{š„š‡š®š.4Yb‚؂؋ؓ؟ذػØÃØÖØÛØ/ ‹¯„=„=ž=¤=¤=³=¿=Æ=Ì=Ì=Ö=ß=ß=å=é=ì=ö=>>>>>$>)>,>/>2>5><><><><><>J>0 öú6ò6ò:òGòIò1¤“øà…à…ö…† +†† †3†E†S†e†j†p†u†Œ†•†­†½†½†ʆ؆ä†ô†‡‡ +‡‡‡"‡"‡&‡*‡9‡I‡M‡r‡r‡�‡ƒ‡‰‡‘‡£‡¸‡‡чÖ‡Ö‡â‡â‡ð‡ù‡ù‡ˆ6ˆ:ˆ=ˆAˆHˆSˆiˆ~ˆ�ˆœˆ§ˆ©ˆ¯ˆ¼ˆˆɈÖˆ܈܈ãˆüˆ‰ ‰‰‰!‰*‰™‰2,Ó‘Ó‘Ü‘÷‘ý‘ý‘’3(éïósós t t+t1t9t4Âʮʮخà®å®ë®¯6¯>¯F¯Q¯V¯l¯y¯‚¯‡¯¶¯½¯ůÓ¯Ú¯°° ° °/°P°X°k°{°‹°›°ª°º°ʰÚ°ô°ù°±±±±#±D±O±^±n±~±ޱ¨±¨±¨±´±º±5(ÄÊ[>[>d>k>‹>’>•>6”ÌíªÊªÊÂÊÏÊÙÊåÊìÊõÊË"Ë(Ë0ËMËSËSËbËiËnËŒË�˘Ë�˻˾˾˾ËÁËÎËÞËáËñË74ž§Ó^Ó^×^è^ø^ ___'_8p !éyéyýy +zzz!z(zDzzzƒzŒz˜z9ƒÁrÆrƖƩƵƵÆÄÆËÆËÆÓÆåÆîÆÇÇ,Ç3Ç3ÇHÇTÇTÇ{Ç~Ç�ǼÇÈÇÞÇôÇöÇÈÈ.ÈMÈlÈxȎȤȩȵÈËÈáÈáÈéÈóÈÿÈÉ+É7ÉMÉcÉmÉuÉ|É’É›ÉsÊ:8u––¤³½ÎÖØØÞ;80:"©"©+©S©v©‚©�©™©ž©<,µ¼£_£_¬_µ_È_Î_Ó_=0 ����,�2�4�:�>,8?îî%39??,xoxo�oŒoŽoŽo“o@\m€ÂÂäèô€€€9€E€N€T€X€f€A€|`|`Œ`“`¦`²`Ù`ã`í`õ`ý`aa#a5aOa[adaraxa~a�aˆa�aBX½Ó_Ó_ß_è_ñ_÷_````#`+`9`D`L`e`w`„`�`�`’`—`¥`¬`±`±`·`¾`Ã`Ï`×`à`à`è`÷`û`aaa$a$a-a4a@aKagagagaoava}a„a‹a’a™a a§a®a´a½aÃaÖaçabbbbC|Kföö-ö;öKöWö]öfömötöyö…ö‰ö“ö“öšö�ö£ö£ö­ö»öÂöÂöÂöÐöD,s&s&‹&–&¼&à&è&EàÊþKKSs‚Œ•¦¶ÉÖé   ) 5 5 B L r … ¤ · · × ä   * / A E M M [ f t { † ” ” ™ ¥ FLRa¥¥¥¥¥*¥-¥4¥8¥;¥?¥M¥T¥Y¥G8GQ¼¤¼¤É¤Ñ¤Ô¤â¤æ¤ô¤ø¤ý¤H0îî÷ü IPáñùùù0ùCùKùÿùJ(MSCCKYktvKœ'J‹c‹c¥cÆcØcßcécõcýcdd d/d8d?dCdCdIdOdgdpdvdd„d„d„dˆd’dL¼W‚ˆmˆm®m±m¿mÚmèmïmümÿmn nn:n:nXnZnZnxnznznŠnŒnŒnœnœnÀnÇnÐnÚnÞn÷nùno'o/o6oxoM<#"¨"¨0¨8¨@¨P¨\¨f¨•¨—¨�¨NH?M#9#9'9>9U9|9©9Ð9×9Þ9é9ù9 +:::OZšÁšÁ®ÁµÁÅÁÌÁÌÁâÁîÁÂ4ÂSÂ_ÂsÂwÂ}‹Â�•£££ÂÂÂáÂõ ÃÃÃ%Ã)Ã/ÃAÃAÃAÃAÃDÃIÃNÃTÃhÃlÃrÃ}Ã�ÇÒÒÒ×Ã�Ã±ÃµÃ»ÃÆÃÊÃÐÃÙÃÙÃÙÃÄP¬Ð÷ú¹ú¹º!º*º*º6ºEºRºVº`ºvºvº†º’º—º—º°º»ºúȺÚºÚºÚºâºðºþº» »»»*»*»<»Q�!A°O°OÝOàOîO÷O÷OP P4P9PLPYP^PbPsP�P¥P©P®P¶PÈP×PÚPQRHnônôwôŒô•ô¡ô£ô¥ô´ô´ôÃôÅôÅôÊôS¸9£�[�[±[´[·[Ô[ø[ÿ[ +\\"\8\@\F\S\c\w\|\‹\ž\¾\Ç\¾\Ù\Û\ä\Û\ö\ø\]ø\]]]%]%]3]D]I]u]œ]œ]¤]§]Ì]Ô]Ú]ç]÷] ^^ ^2^U^a^t^”^¡^”^¯^´^Á^´^Ï^Ô^á^Ô^ï^ô^ô^___(_-_Y_[_€_€_ˆ_‹_™_ž_±_¼_Ë_Ë_Ô_P`T0 cícíqí{í�íŠí‘í•í›íU(�•²€²€¾€Ä€Ê€ã€î€VÀw£ f f5f8fTfffmfwfƒf’f–fšf¢f¬f»fÄfÝfÝfäfêfñfþf ggg g"g(g.gFgOgOgVgqgtg†gW¬ Fëãëãóã÷ãäää-ä9äBäWä€äŒä”ä²ä½äÜäÜäååååå å å å8å8åJåRåmåmåmåå†å†å˜åžå¨åXDƒ��8�8¢8®8Ä8Þ8é8é8ú8 +9 969Y¼E¼¼ؼà¼ê¼ö¼½½<½_½n½™½�½¥½¯½×½ú½¾¾#¾N¾^¾c¾k¾–¾š¾¬¾±¾¾¾ȾÖ¾Ö¾à¾ê¾Z@nz3I3I;I\I`IsI|I€I‚I[ bø3ø344404=4N4Y4b4x4‹4 4´4À4Ø4è4û45$595D5N5s5x5‚5”5­5¼5É5Þ5Ö5ù56666+6+6>6P6c6y6{6{6Ž6–6–6–6¨6¨6±6Ã6Ê6Ê6Ü6â67\4ºÃ»=»=Å=Å=õ= >G>U>Y>]@1=KûKûYû^ûaûsûyû|û~û„û^è¸îˆ“ˆ“¢“º“Ɠ֓è“ì“ï“ø“û“ ” ” ”” ”#”(”%”‚”™”œ”ž”µ”¸”º””Ò”Ò”Û”ê”ø”•• •&•+•+•+•1•E•_D ¼¼&¼N¼q¼~¼‹¼–¼²¼º¼¼` ‰�..<Ka8îøžž ž&ž/ž5ž;žDžGžMžbtRk˜|˜|½|¿|Ø|ø|þ|ø|}}}}4}6}6}F}H}H}X}X}`}ž}c0ƒRƒRŒRžR¬R°R´R´R¹Rdt/k'k'v'…'”'¢'½'à'($(5(X(k(|(…(’(©(Ä(Ù(à(à(õ(ö(ú(e ë›@›@©@®@¶@¾@Ë@Ý@ç@ì@þ@A)A?AUAgAnAnA„A‘A‘A§A¶A¶A½AÄAËAÐAØAf@*Ö*Ö9ÖAÖUÖ_ÖgÖoÖtÖzÖ|Ö|Ö‚ÖgØ&X" " 8 G R d { { Œ ¤ ± Ä РÛ ë  ¡¡,¡9¡9¡9¡J¡v¡}¡†¡Œ¡“¡™¡ž¡¤¡¨¡¯¡º¡À¡ê¡hüi¤ee'e)e8eDePeeejesezeˆe–e¬e¬e¯e´e¾e¾eÈeËeáeùeõef f*fCfLfOfRfWf{f}f™f“fÅfÅfÙfífôfúfýfggggògidV€i€i”i–i¦i´i¾iâijj j.j9jJjOjejmjrj‹j«j«jÌjÎjÎjïjñjñjkkk$k$k,k/k4kJkRkWkpk“kŸkÆkÆkçkékék +lll0l5l5lElElRlUl_lslƒl�l¯l¯l»l¿lËlÙlâlöl +mmmmƒmjðåè0è01 1 11$1/1G1O1Y11Œ1—1©1¾1Ï1Ú12 22<2F2L2O2\2g2y2Ž2¢2ª2Ð2Õ2Û2þ233/3F3]3x3Ž3 3 3Ì3â3å3÷3k<5@b„b„z„‰„�„•„ „µ„¸„½„É„l0 H H$H8H8HLHPHTHm¼ +5›í›í¦íªíÎíÙíèíôíî î7îGîgîgîˆîŠîŠî«î­î­îÎîÐîÐîÜîÜîäîäîðîïïïï.ï5ï5ïGïTï`ïdïƒïn\Qd"“"“2“4“?“D“W“`“e“j“z“‡“‡“�“˜“oŒc‚7777&717<7E7[7o7x7Œ7³7É7ã7ë78 8'838>8V8a8h8s8x8‹8pxˆ¢£ý£ý¿ýÄýÇýÔýÚýÝýåýîýýýþþþþþþþ!þ$þ0þq0 š“š“¨“²“ɓϓѓדrLDS ˜ ˜8˜:˜D˜m˜{˜}˜’˜�˜£˜¸˜sx8ðZðZ[#[*[6[E[K[O[d[r[z[€[ƒ[�[t´7`p‹p‹”‹Ÿ‹§‹¶‹»‹À‹ЋÕ‹ð‹ð‹þ‹Œ ŒŒŒ(Œ.Œ0Œ@Œ@ŒGŒMŒTŒ\ŒjŒpŒrŒrŒ‚Œ„Œ„Œ”ŒùŒu.o£Z£Z½ZËZäZïZ[[%[:[J[Q[b[m[|[‡[£[£[§[²[¾[À[À[À[Æ[Æ[É[Ó[Ó[î[û[û[\\#\)\2\<\L\`\ˆ\™\¤\¤\¶\¶\¶\Ì\Ü\ó\ü\]]]]]]1]v,07:Š:ŠCŠMŠNŠSŠwt ÞÞ+Þ7ÞEÞQÞ]ÞiÞiÞ{Þ�Þ�ÞŽÞšÞ·ÞÓÞÓÞÓÞÓÞÙÞÙÞéÞëÞëÞßx˜9[»C»CËCÕCÚCßCßCîCóC DD D"D#D#D/D:DQ_QnQQˆQœQ´QÄQ×QçQïQR%R0R:R_RdRnR{R�R¦RµRµRÜRëRõRSS%S@SKS`SiSƒS’SžS§S¬SÉSÖSÜSõSñS TTT)T)T)T4T4TETETXTjT}T†T†T™T©T±T±T±T¿TÊTÑTÜTÝTñTõTüTDŸ¬‹‹�©¿Ùääõ3€Lp3]3]<]A]H]H]g]Š]‘] ]¯]´]¶]¸]¸]�ˆ£Á²­²­É­Ì­έÜ­ë­ë­®6®A®P®`®l®n®{®’®�®Ÿ®¥®§®§®§®¬®µ®¹®¼®Æ®‚¬Gn«å«å³å·åÃåÓåÞåíåùåææ0æEænæzæ…æ¤æ¤æËæÍæÍæÍæææèæèæèæçççç5ç5ç5çGçNçNç`çpçƒøQ z>zXzrzvzˆz‘zšz¡zªz³zËzÚzòz{{{%{={P{Y{m{q{w{€{†{‘{“{–{ž{³{È{Ë{Ö{Ü{ä{è{ú{|| ||#|)|;|B|D|”|„lº±º±αױ豲3²B²O²Z²w²в£²£²¹²¹²Ʋزâ²ê²… ¥Éøgøghh h,hEhVh_hthyh�h‹h›h»h»hÒhÔhÔhëhíhíhýhÿhÿhiiiii€i†HZhˆdˆdœd±d»dÏdØdÝdádçdîdñde‡àø,ë%ë%þ%&#&#&A&A&_&_&}&’&ž&È&Î&Ó&ú&'4'Q'n'‹'¨'Å'â'ÿ'(9(V(s(�(­(Ê(ç()!)>)[)x)•)²)Ì)æ)**2*2*2*A*©,ˆ< +Ú“Ú“î“ý“ ”””””%”‰(ÖòÖòàòêòóóŠ$jj-jIj‹, RUU&U(U4U4U@UMUZUbUgUmUoUsUƒU‘U¡U¬U±U±U¸U¸UÃUÃUâUðUûUýUVVV V VVVV$V&V&V2Vð>ðMðZðiðoðvðŽð�ð¤ðÉðÏðÕðÜðïðñ ñññ2ñ;ñ;ñIñ�8¶ÀsKsK�KœK¡K·KºKÏK‘(¿Å¤§¤§¬§¶§Ì§’8‘›ë-ë-ù-. .*.@.I.O.“P:J(x(x@xLxTx[xdxjxmxmx�xŽx”x—x£x”ð8p ª ª&ª6ª=ªEªLªhªƒªƒª‰ª’ª›ª�ª¦ª¯ª±ª±ªºªÉªËªËªÔªÝªâªâªëªôªùªùª« «««««"«'«'«3«<«A«X«\«\«v«x«x«†«Š«ü«•XÚìŠÜŠÜ’ܞܩܸÜÄÜÍÜÕÜäÜÝ1Ý1ÝCÝJÝJÝ\Ý]ÝaÝ–ÈØŒ8Œ8¨8®8¸8»8»8Ä8Ï8Ù8ã8ï8ñ8÷8þ899 999#9)9,9.999?9E9N9N9V9_9e9n9n9n9n9t9|99�9—,™ ªÚªÚ³Ú¿ÚÇÚÌÚÑÚ˜8ak,6@KSUU[™,ÛâZˆZˆcˆmˆnˆsˆš4ÐÙ³r³rÇrÙrèrùr sss›$(-b£b£p£x£Š£�£œ<@K*¤*¤@¤J¤N¤S¤_¤d¤h¤l¤v¤� óó"óBóDóžt2ê²ê²ú²³³ ³H³k³z³‡³›³’³¼³гÖ³سÚ³à³â³ï³ò³ú³Ÿhaw:µ:µ\µbµkµkµtµƒµ�µ¿µʵÒµÔµæµæµæµ÷µ¶¶¶ @x„0�0�4�5�D�M�S�W�[�q�v�x�¡<ðû« « À ¯ Ï ÷ ¢€ ¼Ú·Ú·ø· ¸¸$¸6¸A¸L¸b¸n¸„¸š¸¢¸¢¸ñ¸ö¸ö¸¹¹0¹P¹W¹y¹£€›váváá‚á™á™á°áÄáâáäáüáââ+âBâBâYâmâ‹â�â¥â¸â¸â»âã¤8—¡Ì]Ì]â]ë]õ]^ ^ ^^¥47@;;0;L;N;Y;[;[;c;¦hqÇü«ü«¬*¬1¬9¬@¬\¬`¬¬¬¡¬¡¬¡¬ª¬¬¬¬¬µ¬·¬·¬À¬Â¬Â¬Ë¬Í¬Í¬Ö¬Ø¬Ø¬á¬ã¬ã¬ì¬î¬î¬÷¬ù¬ù¬­­­ +­ +­ +­ ­­­3­C­Z­m­o­r­t­w­‚­‡­‡­�­�­•­•­ž­«­°­°­¹­Í­Ð­Õ­Õ­Þ­Þ­ì­ð­Ë®§ ¢¦^^%^2^7^¨`UiÓPÓPóPþPQQQ"Q/Q5Q5QAQ©0[cƒTƒTŒTšT T±T³T³T¸Tª(‹‘t]t]ˆ]“]œ]Ÿ]§]« \€ëë#ë.ë>ëMëYë}ë}ë’ëšëŸëŸë¬ëÂëÎëÖëÞëðëì)ì<ìDìIìIìUìUìgìnìnì€ì…ìŒì¬°.Véé éé&é5éAéeéeé’é·é¼é¼éÑéÙéÞéÞéê êê'êTê`êsê{ê€ê•ê—ê—ê£ê£êµê¼ê¼êÎêÓêßê­8LVú„ú„ +… ………… …%…-…® €„ÞÞâñõ¯D¼_¼_Ð_â_é_í_ð_û_```"`°h²È0GQe{Ÿ¹¹Ïò    +±X=OÆëÆëÐëÒëçëïëìì$ì$ì;ìDìHìLì²\r…h�h�~�…�”�›�¤�¤�¾�É�Ñ�å�î�ô�ÿ�ÿ�‘³� )55=5e5�5µ5Ã56I6Œ6Ž6œ6ª6¸6¸6Ò6ì6þ67#7<7N7^7s7Œ7“7š7¶7Ò7Þ7´PAQd;d;‚;ˆ;�;©;¯;´;Ò;Ô;â;è;ë;ù;µlXoNNor€€Œ“˜›¡¤¬±±¶¹»¿Ï¶ˆ;YÛ’Û’ä’î’î’þ’ “““&“/“C“C“N“T“V“e“m“|“…“Ž“®“®“°“À“Ɠ˓· D } }¨}´}Ü}ð}ô}~~~,~q~q~�~º~Ä~Ó~Ñ~&&+00?d�¯Çâ뀀€€€€€€%€1€1€5€:€C€U€\€j€y€±€º€Ì€Ì€Ò€-ƒ¸4 rƒrƒ†ƒ•ƒšƒ¨ƒ«ƒ±ƒ¹ƒ¹T¼ÍºÛºÛÐÛÜÛÞÛçÛöÛÜ Ü Ü(Ü0Ü8ܺ¨'ê¡ê¡ü¡¢ ¢¢&¢2¢;¢F¢Q¢\¢a¢o¢}¢‹¢ª¢µ¢¼¢Тì¢ø¢£ £ ££)£0£>£M£O£X£b£» W[ãêãêýêëë¼D8E;;OYkry‰”¢¥­½<)4„„)„,„1„4„G„M„P„R„\„¾8¡«ÒÚÒÚÜÚðÚòÚÛÛÛ&Û+Û¿´`É““ž¿ÆÕâïþ"8EXyˆ•žž·Úû.3Ma}ˆ¨±¹ÂÔæ.H]wƒ•š¬¾Öæò8CNhv‚ŽŽ“£±Êôû 'LLo~¨ªª¯ÊÑÜÜêÿÿ,,==@HÀh + ¦ü¦ü´üÏüÛüçüóüüüýýý ý)ý2ý;ýDýMýVý_ýhýhý€ýÁ0½Å“q“q±qÍqäqðqöqüqrÂX�Ÿ¼6¼6Ê6Ó6ß6å6è6í6ó6ö6û6û67 7777ÃL-3Z3ZBZPZPZZZdZ�ZŒZ•Z›ZœZ¢ZÄÜ�´ t tFtNtZtotot…t�t�t¬t¬t±tÏtÒt×tåtùtu +u +u u u5uCuIuQu\uzu„u‡uŠu�u�u³u½uÀuÃuËuÙuïuùuüuüuvvvÅô¼õ@;@;H;L;T;e;t;~;Š;Å;×;é;é;í;ü;<<!<%<4<Q<V<V<l<t<‡<–<»<È<Ð<Õ<è<÷<=)=4=J=`={=‚=”=”=¢=¢=£=µ=µ=Ã=Ç=Ë=Æ`*>ã7ã7888,83838I8I8W8_8m8u8u8 8Ë8ö8999Ç8AKʄʄڄ݄߄ä„ç„ê„ï„÷„È8~ˆöö "%-ÉD�Žj€j€n€t€z€€€†€Œ€’€˜€ž€¤€ª€¬€ÊhÊ øJøJKK,K;KEKNK_KwK�KŸK²KºKÛKðKLL5L:LDLULgL~L~L¢LÀLÊLÊLéLüLMM#M3MQM‘MdMlMWM·MÐMØMØMòMN%N/NBNJN5N•N•N•NËNËNÜNÜNïNO OO4OGOOOOO]OfOqOO†O‘OŸOŸO¤O°OË4{„ô¥ô¥¦¦¦"¦)¦.¦6¦Ì<²½´^´^Ø^Ü^õ^ __ _#_3_Í8§±<^<^`^d^}^”^ž^¡^±^ÎLú &ü&üBüNühüqü~ü’ü˜ü¤üÏ`L`z¤z¤š¤¦¤±¤¶¤ĤϤÞ¤ä¤õ¤ù¤ý¤¥¥ ¥¥¥$¥Ð Ÿ£ò~ò~ö~Ñ #G†ý†ý›ý¢ý¬ýºýºýÂýÛýþýþ þ6þUþ{þšþ¤þ®þ¼þÔþìþõþõþÿÿ1ÿ?ÿAÿHÿOÿˆÿÒ¼\‡kükü‡üŠü“üœü¦ü¸ü»ü¾üÃüÖüÙüìüìüýýýýýýý*ý.ýDýJýQýXý[ý`ýuýxýzýzý�ý�ý�ý¡ýÓ`¹ÍÖÖߖâ–ç–í–ö–û–——— —'—3—5—5—8—D—Ô ’–¬]¬]µ]Â]Ç]Õ<ÎÙNñNñRñ[ñbñkñrñ{ñ{ñ‚ñ„ñÖ\"$`$`4`9`C`K`T`W`^`a`i`p`x`×d\qx�x���™�´�Ã�Ø�Þ�æ� ��;�K�Q�Z�Z�f�Ød˜V˜V­V·V¼VÃVÉVÒVàVëVíVýV W&W&W/W8W>WHWÙ<±¼ð{ð{||| |%|9|J|Ú|÷z�z�°�¤�À�Æ�Õ�Ú�ë�ï�ó�ý�‚‚‚ ‚"‚4‚ÛÔ†· ‘ ‘F‘I‘R‘[‘o‘y‘„‘†‘š‘§‘°‘´‘´‘½‘ϑؑì‘ò‘’3’T’T’m’t’y’’©’¿’ß’ß’÷’÷’ù’ù’ù’“)“)“‡“ܰ 1’’ ’'’'’-’-’3’3’3’3’3’3’3’3’8’8’D’J’J’P’U’^’^’q’q’q’q’q’q’w’w’w’w’y’y’‘’Ý`\p›D›DŸD¶DÆDÖDéDðDEE'E8EIEZE{EœE³E¾EÉEFÞ„u’…………+…E…Z…`…n…s…z…†…†…�…•…œ…§…µ…¹…¼…¿…È…Û…ß,:‚:‚>‚C‚]‚b‚d‚à@›§›1›1©1°1·1Á1È1Ê1Ü1á1î1á,„‹r†r†{†€†ˆ†Ž†Ž†“†âD -£è£è±è¹èÕèÕèÚèÚèÚèçèçèóèóèýèã4›¤ÃŒÃŒÌŒÚŒîŒöŒüŒþŒþŒ�ä /38I8IFIZI`IåH!/ßß/ß;ß>ßGßSß[ßx߇ß�ß�ßœßæ$^ê^êbêfêhêçDÍÚ"ˆ"ˆ0ˆ<ˆAˆAˆNˆSˆSˆYˆèx]wãmãmùmnnnn%nWnWnZn\n\nanancncncnenenennnqntn�néhC™C›C›]›_›x›„›ˆ›¤›¿›¿›¿›¿›¿›Ë›×›Þ›ì›ð›û› œœœœ#œ3œ8œ8œIœNœQœ]œnœ~œ€œ€œ€œ�œŸœŸœ¼œ¼œÂœÎœÚœáœåœõœøœ��&�(�(�>�@�@�V�V�\�h�t�{����’�ž�¯�Á�Ã�Ã�Ã�È� žêxš´žž+ž:ž@žCž^žyžyžƒž…ž…ž�ž‘ž‘ž‘žœžžžžžžž©ž©ž©ž®žÀžë¨r˜WW W8WMWTW_WeWeWhWoWzW~WƒW‰W–WœWŸW¡W¤W§W§W¬W»W¾WÐWìD/<^ë^ëgë|ëˆë“ëœëªëµë½ëÂëí Uy~ì~ì‡ì—ì¥ìÉìÛìÝìþìíí%í'í=íUí\í\í]í]íkíví‚í„í�í›í«í³íÆíîHŒšš†š†®†µ†Ç†Ê†Ê†Ñ†ë†î†ó†õ†ý†ï8òü[i[i{i†i”iŒi§i¸i¸i¸iÄið@ƒ�J¬J¬X¬€¬£¬°¬½¬Ȭê¬ò¬ø¬ñ(17¤©¤©±©Æ©ò©ªò ûÿNòNòXòkòpòó@&2ÒÖÒÖãÖîÖüÖ××)×0×3×;×ô$§¬b‡b‡k‡s‡y‡~‡õ<ÎÙ:Ü:ÜPÜfÜwÜ{Ü{܀܀܈Üö,«²ÞïÞïâï ð&ð&ð:ð÷dµ + v vBvFvNv_v_vuv~vŽvŽvšv©v®vÊvÍvÒv×vçvòvùvývww#w*w4w:w=wKwQwawxwzw}w}ww™w¥w«w´wÀwáwåwñwøwÿwxxx,x,x,x1x=xUxYxdxgxjxpxsx�x—x—x—xŸx«xÃxÇxÒxÕxÜxíxíxôx +yøÄJYY"Y/Y5Y=YJYLYbYjYjYtY�Y›Y¤Y¯YºY½YÄYÉYÑYÖYãYèYúYZ'Z*ZEZEZEZIZNZeZù4 (âƒâƒðƒòƒ÷ƒ„„„„úXHWHWcWiW‚WŽW WªWºW½WÊW÷WúWþW)X,X7XBXTX\XoX}XŒXžX§X´XÃXÙXàXñXñXýXYYYY.Y;YDYTYVYiYsYƒYŒYœY¨Y¨Y¨Y®YµYºYÂYÄYéYû$n³UU#U3UBUGU[UxU‘U®U¶UÕUèUVRVTVXVü,æíS4S4W4p4w4y4ýXÂÔúú€€€€€€#€6€F€L€[€`€o€q€q€þhWŽåŽå¦å¯åµå¾åÆåÏå×åÜåÜåäåéåéåñåÿåÿåæ æ æ"æ*æ1æ8æ?æJæQægæwæyæ�æµæËæØæ çç=çnç|ç†ç£ç¦çªç¯ç¸çÁçøçéçäç èè è7èEèOèOèdènèxè�è–è­è±è¸èºè»èÂèÂèÒèÿ@ãïzˆzˆˆˆŠˆ¬ˆ¹ˆ¹ˆ½ˆÃˆ0W_2…2…@…O…V…f…j…m…s…, ~/~/�/›/®/Ã/Ì/`xŒƒnƒnŸnÄnÉnØnànänänôno oo+o5oAoEoEoYo4R[ü;ü;<<<+<4<9<C<tIb(r(r6r?rDr]rarfr}r‹r‹r§rÀrÈrÖrÖrârërñrñr÷r,›¢FïFïOïYïïï„ï˜\~ë$ë$ó$% %.%;%J%T%m%{%�%œ%«%½%Â%Ð%Ü%è%ô%&&$&7&@&N&U&U&c&l&XNNbls‚››¬»ÇÜÞáãããëP­½‚‡‚‡—‡§‡­‡²‡²‡¼‡À‡Å‡Å‡Í‡ D¦³²�²�¾�Õ�à�æ�ì�ò�‚‚‚‚ +HœªS.S.k.n.ƒ.Œ.£.º.È.Ø.â.ù. /// ,ð÷;t;tUthtstyt‰t 8<Fb’b’v’†’˜’¡’¤’¬’ <›¦‡‡‡$‡/‡:‡B‡J‡R‡U‡]‡<ju:«:«N«U«_«h«}«‰«�«•«(kú”ú”•F•j•m•x•…•–•§•¯•½•¿••ŕŕҕä•ç•ì•ö•ü• ––––"–)–;–>–C–J–\–_–d–k–}–€–‚–‰–›–ž– –§–¹–¼–¾–Å–×–Ú–Ü–â–â–â–â–ç–ç–î–õ–ü–——¥—8r|ÂÓÂÓÌÓÔÓåÓúÓÔÔÔ ÔPÝíb�b�v��˜�©�Î�Ñ�ë�õ�žžž žH¾ÌÒ‡Ò‡à‡ì‡ñ‡ñ‡þ‡ˆˆˆˆH\jD<D<^<o<<‚<„<‘<•<˜<¢<H©+ò+òLòRòYòoò†òŠò’ò¤òÂòÂòÂòÂòÉòÓòÙòáòíòòòòòùòÿò óóóó%ó)ó2óDóVó[ó^ófóuó‡ó—óžóºóÙóñó +ôô-ôEôyôyô€ô„ô�ô“ô˜ô˜ô˜ô˜ô˜ô˜ô˜ô¬ô³ô·ôºôÊôÐôØôÞôàôàôçôëôôôöôöôöôùôûôûôõõ õõõõõ+õ8õ8õCõWõ^õeõzõ~õŸõŸõ¤õ¤õ¤õ«õ¯õ¸õÀõÀõÀõËõÓõÖõ�öx»Õ0/0/L/O/T/_/g/„/�/–/�/Å/Å/Í/ó/þ/00 070B0G0G0K0Z0,£ª†ï†ï�ïšïÅïÅïÚïœ`ƒz…z…•…œ…§…­…°…°…·…½…Ñ…Ö…Ù…Þ…ç…ç…ç…ë…õ…† †!†,†B†F†H†]†a†a†a†k†ŒkФ<¤<Â<Å<Ý<Ý<ß<ð<ý<==%=(=3=7=7=<=W=Z=e=i=i=r=u=ƒ=d)T¨T¨|¨„¨ž¨©¨¬¨²¨º¨Î¨Þ¨ë¨í¨û¨©©,©.©.©>©�Wwœœœ œ'œ-œFœkœœœ‘œ˜œ°œÉœâœôœøœ����'�'�+� UYöÛöÛ +ÜÜ!Ü€óâóâã ã7ãIã^ãdãiãoãrã€ãŒã�ã’ãžã£ã¬ã±ã¸ãÑãÑãçã@v‚š«š«£«Ë«î«û«¬¬6¬>¬C¬Ìh—ÖöÖöñöûö ÷÷÷÷&÷,÷0÷3÷5÷<÷C÷M÷Y÷b÷v÷Ž÷«÷›÷À÷À÷Î÷ö÷ø÷ø ø#ø/ø7ø9øSønøzøŠøÀø ì¥Ü���%�-�<�M�O�f�x�t�‡�—���£�ª�³�Ñ�Í�à�ð�ŽŽŽ Ž&ŽFŽ\ŽiŽpŽ{ŽŽ„Ž�ŽšŽ Ž£Ž©Ž¸ŽÉŽÎŽÚŽåŽ÷Ž  *.®ó®ó²ó¿óÁó!L&5HNHNRNYNdNpNwNwN}N„N”N–N�N¢N¦N",z�ÖËÖËêËüËÌÌÌ#0Ÿ§úÔúÔÕ ÕÕÕ$Õ.Õ3Õ$<¨³:Õ:ÕIÕNÕiÕ€Õ„Õ„Õ‰Õ‰Õ�Õ%8NX:Ø:ØJØRØfØrØuØwØØ&\ø B»B»P»U»]»d»i»‘»´»Á»λÙ»ö»þ»¼¼¼¼',“šîîîîüîï#ï(ï;ïAï(¼ò£X£XÏXÕXîXY YY%Y)Y7YVYVYuYY‡YŽY–Y Y¨Y¼YÍYÞYóYúYZ ZZZZ2Z)4#ÛúÛúäúéúòúûúûûû*< æØæØúØ ÙÙ&Ù.ÙJÙZÙ]ÙmÙ+4Î×D8D8X8Z8c8c8p8x8}8…8,,W^‹H‹H™H›H­HµHºHÀH-D .6>LT\dlv{.^š   + = L U c q } Ž £ ¸ Ï Þ þ   .CZcr�«ÂÖãñý'9>JVdy‹¤­¸¿ÊÔÝá/(QW!5DH00X`ööÿ 1@ ë&ë&ÿ& ''%'6'G'Q'['e'k'2ˆ sMsM“M�M M¨M¸M¸MÌMÖMìMöMøMNN-N;NFNWNeNoNoNoNN3PÙéþúþúû/û;ûUûfûsû‡ûŽû”û£û4$mrèyèyìyüyzz5H¾Ì4_4_J_O_h_s_|_~_Š_�_�_š_6D&KcKcTcbcbcdcjcucuc„c…cŠc7(¤ª!&028D.;NõNõ\õjõjõrõ‘õ«õ«õ¯õµõ9d>S‹û‹û¤û¨û´û´ûÀûÀûÍûÍûÜûëûúû ü!ü+ü:ü:üDü:ÔTÔÔ,Ô0Ô3ÔDÔWÔaÔgÔkÔnÔpÔvÔzÔ}ÔƒÔ†Ô™Ô±Ô¹Ô¼ÔÍÔáÔèÔòÔöÔ Õ ÕÕÕ#Õ+Õ>ÕXÕ`ÕcÕtՌՓՓբհÕÊÕ×ÕöÕöÕÖ Ö,Ö1Ö1ÖBÖVÖ]ÖbÖbÖsÖ‡ÖžÖ£Ö£Ö©ÖºÖÎÖíÖòÖòÖøÖ ××<×A×A×R×f×s×x×x׉×�תׯׯ×À×Ô×á×ã×ã×ã×ã×ã×ô× ØØØØ.ØBØKØKØQØQØZØZØãØ;4ÂËzÊzʈÊ�ʘʛʟʥÊ<l 7ƒNƒN¡N¤N¬NÀNÀNÕNßNöNOO!O&O7OEOPOaOoOyOyO‡O=ˆ7U‹O‹O±OµO¸OÈOáOáOôOýOPP"P'P1P:PDPGPJPOPgPuP†P P®P¾P¾PÐP>l:Qs s ~ � œ · É Õ ã ì û  , > c l � ˆ ˆ � ž ¢ ?T3DB×B×S×h×vׂׂנ׭׾ׯׯ×Ò×Þ×à×è×@XÉÛ™w™w¹wÆwËw×w÷wýw +xxx%x)x5xAX¶Èùvùvw&w+w7wWw]wjwww~w‡w‹w—wB$ ,¡,¡B¡|¡›¡©¡C X\ÖèÖèÚèãèåèD  –ò–ò ò³ò¸òE áåó—󗘘!˜F(*0D©D©Q©f©‹©Ÿ©G0qyŽËŽË¨Ë«Ë«Ë´ËÅËÈËÐËHHª¸C–C–^–{–…–Œ–Œ–«–°–²–²–¼–IX qšÎšÎ¥Î¾ÎÅÎØÎåÎÏÏÏ7ÏXÏiϔϤϵÏÉÏÐÏÕÏÕÏõÏ ÐGÐNÐXÐqЂДХÐÐÐåÐñÐøÐ Ñ Ñ ÑÑÑ4Ñ ÑLÑfÑnуѮѿÑêÑüÑ Ò&Ò+Ò+Ò:ÒIÒXÒ]Ò]ÒlÒ€Ò¦Ò®ÒÆÒÕÒìÒ Ó Ó Ó$Ó0Ó=ÓFÓNÓ½ÓJ`AU   1 9 9 A P \ w € ‡ Œ � ® À Ä É Ë KX½Ïz¹z¹œ¹ ¹¦¹©¹´¹´¹ŹÒ¹ܹß¹â¹è¹ö¹L0ª²ƒöƒö™ö¥öÐöÒöÒöÚöMDÚÍÚÍãÍëÍëÍøÍ +ÎÎÎ#Î)Î+Î+Î0ÎNL¬¡¬¡¼¡Ê¡Ú¡à¡ ¢/¢@¢‹¢�¢—¢OØ9‚†‚†œ†£†§†«†¶†džÕ†é†õ†ø†‡ ‡#‡(‡1‡4‡>‡F‡I‡L‡`‡w‡‡–‡�‡¦‡©‡«‡»‡¾‡À‡LJׇÛ‡â‡å‡ ˆˆ$ˆP<ðûƒ˜ƒ˜™˜›˜©˜Æ˜Ê˜Ú˜ç˜Q �…“ì“ì­ì¿ìÉìRH -ÎôÎôâôäôëôùô!õ&õ=õBõBõFõNõS@:FÝQÝQíQúQRRR$R-RTHÖä`0`0z0‡0—0¬0³0¼0Ù0Ü0æ0UP&X&X:X\X\XhXsXwX~X‰X�X•X–XžXVpbz……"….…G…R…`…n…”…©…®…µ…º…º…¼…W ÍÑœ_œ_¥_·_Xh„š“0“0›0¹0Ê0Ú0á011)101A1Y1[1[1n11—1™1™1›1Y0$,ÃÃËåí$Z@ ÒÕÒÕÛÕãÕìÕÖ +ÖÖÖ!Ö#Ö#Ö(Ö[4ÆÏrr9rUrlrxr~r„r�r¬r\,ÇÎ~T~T‡T‘T¥T·T¼T]<NY:::9:J:Z:k:z:”:¬:®:°:^`S S [ j v Š › ¦ ¯ · ¹ Ë Ý ä ä ö ÷ û  \ No newline at end of file diff --git a/Kernel/Kernel.PRJ b/Kernel/Kernel.PRJ index 20beca7..6525633 100644 --- a/Kernel/Kernel.PRJ +++ b/Kernel/Kernel.PRJ @@ -50,7 +50,7 @@ #include "SerialDev/MakeSerialDev" #include "QSort" #include "KTask" -#include "SrvCmd" +#include "Job" #include "PCIBIOS" #include "MultiProc" #include "EdLite" diff --git a/Kernel/KernelA.HH b/Kernel/KernelA.HH index d82bcc5..0f57bae 100644 --- a/Kernel/KernelA.HH +++ b/Kernel/KernelA.HH @@ -13,7 +13,7 @@ extern class CHashClass; extern class CHashFun; extern class CHeapCtrl; extern class CIntermediateCode; -extern class CSrvCtrl; +extern class CJobCtrl; extern class CTask; #define NULL 0 @@ -355,7 +355,6 @@ class CSysLimitBase #help_index "Memory/Info" #define MEM_NUM_E820_ENTRIES 48 -#define MEM_E820_ENTRY_SIZE 20 class CMemE820 { U8 *base; @@ -402,7 +401,7 @@ class CPatchTableAbsAddr #define IET_IMM_U32 9 #define IET_REL_I64 10 #define IET_IMM_I64 11 -#define IEF_IMM_NOT_REL 1 +#define IEF_IMM_NOT_REL 1 //reserved #define IET_REL32_EXPORT 16 #define IET_IMM32_EXPORT 17 @@ -417,7 +416,7 @@ class CPatchTableAbsAddr #help_index "Boot" class CKernel -{//Must match $LK,"OSStartUp",A="FF:::/Kernel/KStart16.HC,SYS_BOOT_BASE"$ +{//Must match $LK,"OSStartUp",A="FF:::/Kernel/KStart16.HC,MEM_BOOT_BASE"$ CBinFile h; U32 jmp, boot_src, @@ -428,10 +427,12 @@ class CKernel U0 start; U32 boot_base; - U16 sys_mem_E801[2]; - CMemE820 sys_mem_E820[MEM_NUM_E820_ENTRIES]; + U16 mem_E801[2]; + CMemE820 mem_E820[MEM_NUM_E820_ENTRIES]; + U64 mem_physical_space; CSysLimitBase sys_gdt_ptr; U16 sys_pci_busses; + ;$$=($$+15)&-16; CGDT sys_gdt; }; @@ -440,39 +441,41 @@ class CKernel #define RLf_VGA 1 #define RLf_32BIT 2 #define RLf_PATCHED 3 -#define RLf_64BIT 4 -#define RLf_BOOT_HEAP 5 -#define RLf_FULL_HEAP 6 -#define RLf_RAW 7 -#define RLf_INTERRUPTS 8 -#define RLf_BLKDEV 9 -#define RLf_MP 10 -#define RLf_COMPILER 11 -#define RLf_DOC 12 -#define RLf_WINMGR 13 -#define RLf_REGISTRY 14 -#define RLf_HOME 15 -#define RLf_AUTO_COMPLETE 16 -#define RLf_ADAM_SERVER 17 +#define RLf_16MEG_SYS_CODE_BP 4 +#define RLf_64BIT 5 +#define RLf_16MEG_ADAM_HEAP_CTRL 6 +#define RLf_FULL_HEAPS 7 +#define RLf_RAW 8 +#define RLf_INTERRUPTS 9 +#define RLf_BLKDEV 10 +#define RLf_MP 11 +#define RLf_COMPILER 12 +#define RLf_DOC 13 +#define RLf_WINMGR 14 +#define RLf_REGISTRY 15 +#define RLf_HOME 16 +#define RLf_AUTO_COMPLETE 17 +#define RLf_ADAM_SERVER 18 #define RLF_16BIT 0x00001 #define RLF_VGA 0x00002 #define RLF_32BIT 0x00004 #define RLF_PATCHED 0x00008 -#define RLF_64BIT 0x00010 -#define RLF_BOOT_HEAP 0x00020 -#define RLF_FULL_HEAP 0x00040 -#define RLF_RAW 0x00080 -#define RLF_INTERRUPTS 0x00100 -#define RLF_BLKDEV 0x00200 -#define RLF_MP 0x00400 -#define RLF_COMPILER 0x00800 -#define RLF_DOC 0x01000 -#define RLF_WINMGR 0x02000 -#define RLF_REGISTRY 0x04000 -#define RLF_HOME 0x08000 -#define RLF_AUTO_COMPLETE 0x10000 -#define RLF_ADAM_SERVER 0x20000 +#define RLF_16MEG_SYS_CODE_BP 0x00010 +#define RLF_64BIT 0x00020 +#define RLF_16MEG_ADAM_HEAP_CTRL 0x00040 +#define RLF_FULL_HEAPS 0x00050 +#define RLF_RAW 0x00100 +#define RLF_INTERRUPTS 0x00200 +#define RLF_BLKDEV 0x00400 +#define RLF_MP 0x00800 +#define RLF_COMPILER 0x01000 +#define RLF_DOC 0x02000 +#define RLF_WINMGR 0x04000 +#define RLF_REGISTRY 0x08000 +#define RLF_HOME 0x10000 +#define RLF_AUTO_COMPLETE 0x20000 +#define RLF_ADAM_SERVER 0x40000 #help_index "Processor" #define LAPIC_BASE 0xFEE00000 @@ -582,62 +585,48 @@ class CRAXRBCRCXRDX #help_index "Processor" #define DFT_CACHE_LINE_WIDTH 128 -#define SEMA_STRUCT_SIZE DFT_CACHE_LINE_WIDTH //Semaphores class CSema -{//I read you're supposed to use one cache line. -//I don't know why. Might be silly. - Bool val; - U8 pad[SEMA_STRUCT_SIZE-sizeof(Bool)]; +{ + Bool val,pad[DFT_CACHE_LINE_WIDTH-1]; }; -#define SYS_SEMA_DEBUG 0 -#define SYS_SEMA_RECORD_MACRO 1 -#define SYS_SEMA_SYS_TIMER 2 -#define SYS_SEMA_SYS_DATE 3 -#define SYS_SEMA_DBG_MODE 4 -#define SYS_SEMA_SND 5 -#define SYS_SEMA_HEAPLOG_ACTIVE 6 -#define SYS_SEMA_HEAPLOG_LOCK 7 -#define SYS_SEMA_REFRESH_IN_PROGRESS 8 -#define SYS_SEMA_FLUSH_VGA_IMAGE 9 -#define SYS_SEMA_SINGLE_USER 10 -#define SYS_SEMA_DSK_CACHE 11 -#define SYS_SEMA_FAR_CALL32 12 -#define SYS_SEMA_DEV_MEM 13 -#define SYS_SEMA_VGA 14 -#define SYS_SEMA_UPDATE_WIN_Z_BUF 15 -#define SYS_SEMA_TT 16 -#define SYS_SEMA_MUTE 17 -#define SYS_SEMA_FORCE_WINMGR 18 -#define SYS_SEMA_JUST_PUMP_MSGS 19 -#define SYS_SEMA_TMBEAT 20 -#define SYS_SEMA_FIX 21 -#define NUM_SYS_SEMAS 22 +#define SEMA_DEBUG 0 +#define SEMA_RECORD_MACRO 1 +#define SEMA_SYS_TIMER 2 +#define SEMA_SYS_DATE 3 +#define SEMA_DBG_MODE 4 +#define SEMA_SND 5 +#define SEMA_HEAPLOG_ACTIVE 6 +#define SEMA_HEAPLOG_LOCK 7 +#define SEMA_REFRESH_IN_PROGRESS 8 +#define SEMA_FLUSH_VGA_IMAGE 9 +#define SEMA_SINGLE_USER 10 +#define SEMA_DSK_CACHE 11 +#define SEMA_FAR_CALL32 12 +#define SEMA_DEV_MEM 13 +#define SEMA_VGA 14 +#define SEMA_UPDATE_WIN_Z_BUF 15 +#define SEMA_TT 16 +#define SEMA_MUTE 17 +#define SEMA_FORCE_WINMGR 18 +#define SEMA_JUST_PUMP_MSGS 19 +#define SEMA_TMBEAT 20 +#define SEMA_FIX 21 +#define SEMA_NUM_SEMAS 22 -#define SYSf_CTRL_ALT_DEL 0 -#define SYSf_CTRL_ALT_C 1 -#define SYSf_CTRL_ALT_X 2 -#define SYSf_CTRL_ALT_TAB 3 +#define CTRL_ALT_DEL 0 +#define CTRL_ALT_C 1 +#define CTRL_ALT_X 2 +#define CTRL_ALT_TAB 3 #help_index "Hash" public class CHash -{ -//Hash entries are not removed. New entries eclipse old by being - //in front for searches. Old function code is not freed - //because a reference might use it. +{//See $LK,"Hash",A="HI:Hash"$ CHash *next; U8 *str; - U32 type,use_cnt; -//use_cnt is never decremented. It is incremented - //each time a node is found in a hash search. - //One place it is used is to tell if a externed function was unused - //before being defined. It is also used for popularity measures - //in autocomplete. You can do a $LK,"Who",A="MN:Who"$() to see - //roughly how many times a symbol has been - //referenced. Beware of instances where - //a hash entry is continuously searched for and - //racks-up huge use_cnt numbers. + U32 type, + use_cnt; // inc'ed every time search found, never dec'ed. }; public class CHashTable @@ -648,8 +637,7 @@ public class CHashTable }; #help_index "Hash/System" -//Hash table types -//$LK,"ST_HTT_TYPES",A="FF:::/Kernel/KDefine.HC,ST_HTT_TYPES"$ +//Hash table types: $LK,"ST_HTT_TYPES",A="FF:::/Kernel/KDefine.HC,ST_HTT_TYPES"$ #define HTt_EXPORT_SYS_SYM 0 #define HTt_IMPORT_SYS_SYM 1 #define HTt_DEFINE_STR 2 @@ -809,7 +797,7 @@ public class CMemberLst CArrayDim dim; U8 *static_data; union { - I64 static_data_ip; + I64 static_data_rip; I64 dft_val; } CHashFun *fun_ptr; @@ -818,7 +806,7 @@ public class CMemberLst class CExternUsage { CExternUsage *next; - I64 ip; + I64 rip; }; #help_index "Hash/System;Compiler/Internal" @@ -832,7 +820,7 @@ public class CHashDefineStr:CHashSrcSym #define Cf_INTERNAL_TYPE 1 public class CHashClass:CHashSrcSym -{//See $LK,"PrsClassNew",A="MN:PrsClassNew"$(). base_class of $LK,"CHashFun",A="MN:CHashFun"$ +{//See $LK,"PrsClassNew",A="MN:PrsClassNew"$(). base_class of $LK,"CHashFun",A="MN:CHashFun"$ I64 size,neg_offset; U32 member_cnt; U8 ptr_stars_cnt,raw_type; @@ -879,7 +867,7 @@ public class CHashGlblVar:CHashSrcSym CArrayDim dim; U8 *data_addr; union { - I64 data_addr_ip; + I64 data_addr_rip; CAOTHeapGlbl *heap_glbl; } }; @@ -927,7 +915,7 @@ public class CHashGlblVar:CHashSrcSym #define DOCT_CURSOR_MOVEMENT 26 #define DOCT_ANCHOR 27 #define DOCT_LINK 28 -#define DOCT_BUTTON 29 +#define DOCT_BTTN 29 #define DOCT_DATA 30 #define DOCT_CHECK_BOX 31 #define DOCT_LST 32 @@ -1121,7 +1109,7 @@ public class CDocBin U32 num,flags,size,use_cnt; U0 end; U8 *data; - U0 pad;#assert !($$&7) //(compiler lags one token) + ;#assert !($$&7) //(compiler lags one token) }; #define DOC_SCROLL_SPEED 8 @@ -1174,7 +1162,7 @@ public class CDocEntryBase U32 min_col,max_col; CDocSettings settings; I64 user_data; - U0 pad;#assert !($$&7) //(compiler lags one token) + ;#assert !($$&7) //(compiler lags one token) }; #define DOCE_LEN_DFT 64 @@ -1209,7 +1197,7 @@ public class CDocEntry:CDocEntryBase U8 raw_type,pad[3]; CDocBin *bin_data; U8 *data; - U0 pad;#assert !($$&7) //(compiler lags one token) + ;#assert !($$&7) //(compiler lags one token) }; //$LK,"DocForm",A="MN:DocForm"$() $LK,"DocMenu",A="MN:DocMenu"$() $LK,"DocEd",A="MN:DocEd"$() $LK,"PopUpMenu",A="MN:PopUpMenu"$() @@ -1393,7 +1381,7 @@ public class CDoc //Linked Text File header CDocUndo undo_head; I64 user_data; - U0 pad;#assert !($$&7) //(compiler lags one token) + ;#assert !($$&7) //(compiler lags one token) }; #help_index "Windows" @@ -1407,11 +1395,11 @@ tries to do something. #define WIF_SELF_FOCUS 0x0001 //If active this task cannot have focus //MENU 0x0002 #define WIF_SELF_CTRLS 0x0004 -#define WIF_SELF_IP_L 0x0008 - //IP_L_D 0x0010 -#define WIF_SELF_IP_R 0x0020 - //IP_R_D 0x0040 -#define WIF_SELF_IP_WHEEL 0x0080 //Does nothing, yet +#define WIF_SELF_MS_L 0x0008 + //MS_L_D 0x0010 +#define WIF_SELF_MS_R 0x0020 + //MS_R_D 0x0040 +#define WIF_SELF_MS_WHEEL 0x0080 //Does nothing, yet #define WIF_SELF_BORDER 0x0100 #define WIF_SELF_GRAB_SCROLL 0x0200 #define WIF_SELF_DOC 0x0400 @@ -1420,24 +1408,24 @@ tries to do something. //FOCUS 0x00010000 #define WIF_FOCUS_TASK_MENU 0x00020000 #define WIF_FOCUS_TASK_CTRLS 0x00040000 -#define WIF_FOCUS_TASK_IP_L 0x00080000 -#define WIF_FOCUS_TASK_IP_L_D 0x00100000 -#define WIF_FOCUS_TASK_IP_R 0x00200000 -#define WIF_FOCUS_TASK_IP_R_D 0x00400000 -#define WIF_FOCUS_TASK_IP_WHEEL 0x00800000 //Does nothing, yet +#define WIF_FOCUS_TASK_MS_L 0x00080000 +#define WIF_FOCUS_TASK_MS_L_D 0x00100000 +#define WIF_FOCUS_TASK_MS_R 0x00200000 +#define WIF_FOCUS_TASK_MS_R_D 0x00400000 +#define WIF_FOCUS_TASK_MS_WHEEL 0x00800000 //Does nothing, yet #define WIF_FOCUS_TASK_BORDER 0x01000000 #define WIF_FOCUS_TASK_GRAB_SCROLL 0x02000000 -#define WIG_DBL_CLICK (WIF_FOCUS_TASK_IP_L_D|WIF_FOCUS_TASK_IP_R_D) +#define WIG_DBL_CLICK (WIF_FOCUS_TASK_MS_L_D|WIF_FOCUS_TASK_MS_R_D) #define WIG_TASK_DFT (WIF_FOCUS_TASK_MENU|WIG_DBL_CLICK|\ 0xFFFF-WIF_SELF_DOC-WIF_SELF_ODE) #define WIG_USER_TASK_DFT WIF_SELF_KEY_DESC #define WIf_SELF_FOCUS 0 #define WIf_SELF_CTRLS 2 -#define WIf_SELF_IP_L 3 -#define WIf_SELF_IP_R 5 -#define WIf_SELF_IP_WHEEL 7 +#define WIf_SELF_MS_L 3 +#define WIf_SELF_MS_R 5 +#define WIf_SELF_MS_WHEEL 7 #define WIf_SELF_BORDER 8 #define WIf_SELF_GRAB_SCROLL 9 #define WIf_SELF_DOC 10 @@ -1445,11 +1433,11 @@ tries to do something. #define WIf_SELF_KEY_DESC 12 #define WIf_FOCUS_TASK_MENU 17 #define WIf_FOCUS_TASK_CTRLS 18 -#define WIf_FOCUS_TASK_IP_L 19 -#define WIf_FOCUS_TASK_IP_L_D 20 -#define WIf_FOCUS_TASK_IP_R 21 -#define WIf_FOCUS_TASK_IP_R_D 22 -#define WIf_FOCUS_TASK_IP_WHEEL 23 +#define WIf_FOCUS_TASK_MS_L 19 +#define WIf_FOCUS_TASK_MS_L_D 20 +#define WIf_FOCUS_TASK_MS_R 21 +#define WIf_FOCUS_TASK_MS_R_D 22 +#define WIf_FOCUS_TASK_MS_WHEEL 23 #define WIf_FOCUS_TASK_BORDER 24 #define WIf_FOCUS_TASK_GRAB_SCROLL 25 @@ -1586,12 +1574,12 @@ public class CAutoCompleteDictGlbls #define MDG_DISP_SIB_RIP (MDF_DISP|MDF_SIB|MDF_RIP_DISP32) #define MDG_REG_DISP_SIB_RIP (MDF_REG|MDG_DISP_SIB_RIP) -#define ICF_R_TO_F64 0x000000001 -#define ICF_R_TO_INT 0x000000002 -#define ICF_A1_TO_F64 0x000000004 -#define ICF_A1_TO_INT 0x000000008 -#define ICF_A2_TO_F64 0x000000010 -#define ICF_A2_TO_INT 0x000000020 +#define ICF_RES_TO_F64 0x000000001 +#define ICF_RES_TO_INT 0x000000002 +#define ICF_ARG1_TO_F64 0x000000004 +#define ICF_ARG1_TO_INT 0x000000008 +#define ICF_ARG2_TO_F64 0x000000010 +#define ICF_ARG2_TO_INT 0x000000020 #define ICF_USE_F64 0x000000040 #define ICF_USE_UNSIGNED 0x000000080 #define ICF_USE_INT 0x000000100 //highest priority @@ -1601,9 +1589,9 @@ public class CAutoCompleteDictGlbls #define ICF_SHORT_JMP 0x000001000 #define ICF_PUSH_RES 0x000002000 #define ICF_PASS_TRACE 0x000004000 -#define ICF_R_WAS_STK 0x000008000 -#define ICF_A1_WAS_STK 0x000010000 -#define ICF_A2_WAS_STK 0x000020000 +#define ICF_RES_WAS_STK 0x000008000 +#define ICF_ARG1_WAS_STK 0x000010000 +#define ICF_ARG2_WAS_STK 0x000020000 #define ICF_PUSH_CMP 0x000040000 //for 50last_cc->lex_include_stk->line_num);} #define __CMD_LINE__ #exe{StreamPrint("%d",Fs->last_cc->flags&CCF_CMD_LINE &&\ - Fs->last_cc->lex_include_stk->depth<2);} + Fs->last_cc->lex_include_stk->depth<1);} #define __FILE__ #exe{StreamPrint("\"%s\"",\ Fs->last_cc->lex_include_stk->full_name);} #define __DIR__ #exe{StreamDir;} @@ -2048,7 +2035,7 @@ class CLexFile class CAOTCtrl { - I64 ip; //Inst ptr + I64 rip; //Inst ptr CAsmArg arg1,arg2; CAOTBinBlk *bin; I64 num_bin_U8s, @@ -2056,7 +2043,7 @@ class CAOTCtrl CAsmUnresolvedRef *local_unresolved,*glbl_unresolved; CAOTAbsAddr *abss; CAOTHeapGlbl *heap_glbls; - I64 lst_col,lst_last_ip; + I64 lst_col,lst_last_rip; U8 *last_label,*lst_last_line; CLexFile *lst_last_lfn; I64 seg_size; @@ -2161,7 +2148,7 @@ class CLexHashTableContext #define CCF_NO_ABSS 0x1000000000 #define CCF_PAREN 0x2000000000 #define CCf_PAREN 37 -#define CCF_CLASS_IP 0x4000000000 +#define CCF_CLASS_DOL_OFFSET 0x4000000000 #define CCF_DONT_MAKE_RES 0x8000000000 public class CCmpCtrl @@ -2173,14 +2160,14 @@ public class CCmpCtrl F64 cur_f64; U8 *cur_str; I64 cur_str_len, - class_ip; + class_dol_offset; U8 *dollar_buf; I64 dollar_cnt; U8 *cur_help_idx; I64 last_U16, min_line,max_line,last_line_num, lock_cnt; - U32 *chars_bmp_alpha_numeric; + U32 *char_bmp_alpha_numeric; CLexHashTableContext htc; CHashGeneric *hash_entry; CAbsCntsI64 abs_cnts; @@ -2207,7 +2194,7 @@ public class CCmpCtrl CPrsStk *ps; CAOTCtrl *aotc; I64 aot_depth,pmt_line; - U0 pad;#assert !($$&7) //(compiler lags one token) + ;#assert !($$&7) //(compiler lags one token) }; #help_index "Compiler" @@ -2727,6 +2714,7 @@ public class CDrv U16 fs_type; I64 drv_offset, size, + prt_num, file_system_info_sect, fat1,fat2, root_cluster, @@ -2833,34 +2821,14 @@ class CMemUsed #endif #help_index "Memory/BlkPool" -/*TempleOS does not mess with page tables after setting them up -during boot -- $LK,"SYS_INIT_PAGE_TABLES",A="MN:SYS_INIT_PAGE_TABLES"$. - -$LK,"MEM_PAGE_SIZE",A="MN:MEM_PAGE_SIZE"$, the unit size for alloications, is arbitrary, -and is not related to CPU hardware. - -All virtual addresses are ident to physical at all times. -text.vga_alias is not identity-mapped, however. - -There is no high kernel memory because RAM's physical -addresses are low. (All motherboards that I know of -put RAM in low addresses of 64-bit address space.) -It's ring-0-only so all (or none) is kernel, remember. -2Meg hardware pages are used. Only the caching bits matter. -Remember, it is ring-0-only and identity-mapped! - -All code is placed in just the lowest 2Gig, so the CALL REL32 -inst always works. It never changes out of ring-0, remember, -so I don't need to waste cycles on use SYSCALL or software interrupts. -Everything just uses CALL REL32. -*/ +#help_file "::/Doc/Pags" #define MBS_USED_SIGNATURE_VAL 'MBUs' #define MBS_UNUSED_SIGNATURE_VAL 'MBUn' class CMemBlk { CMemBlk *next,*last; - U32 mb_signature,pages; + U32 mb_signature,pags; }; #define MRT_UNUSED 0 @@ -2875,18 +2843,18 @@ class CMemRange I64 size; }; -#define MEM_PAGE_BITS 9 -#define MEM_PAGE_SIZE (1< #define MSG_KEY_UP 3 //($LK,"ASCII",A="MN:CH_CTRLA"$,$LK,"scan code",A="FI:::/Doc/CharOverview.DD"$) Press -#define MSG_IP_MOVE 4 //(x,y) -#define MSG_IP_L_DOWN 5 //(x,y) -#define MSG_IP_L_UP 6 //(x,y) -#define MSG_IP_L_D_DOWN 7 //(x,y) -#define MSG_IP_L_D_UP 8 //(x,y) -#define MSG_IP_R_DOWN 9 //(x,y) -#define MSG_IP_R_UP 10 //(x,y) -#define MSG_IP_R_D_DOWN 11 //(x,y) -#define MSG_IP_R_D_UP 12 //(x,y) +#define MSG_MS_MOVE 4 //(x,y) +#define MSG_MS_L_DOWN 5 //(x,y) +#define MSG_MS_L_UP 6 //(x,y) +#define MSG_MS_L_D_DOWN 7 //(x,y) +#define MSG_MS_L_D_UP 8 //(x,y) +#define MSG_MS_R_DOWN 9 //(x,y) +#define MSG_MS_R_UP 10 //(x,y) +#define MSG_MS_R_D_DOWN 11 //(x,y) +#define MSG_MS_R_D_UP 12 //(x,y) #define MSG_KEY_DOWN_UP -2 //Down & UP -#define MSG_IP_L_DOWN_UP -5 //Down & Up -#define MSG_IP_L_D_DOWN_UP -7 //Down & Up -#define MSG_IP_R_DOWN_UP -9 //Down & Up -#define MSG_IP_R_D_DOWN_UP -11 //Down & Up +#define MSG_MS_L_DOWN_UP -5 //Down & Up +#define MSG_MS_L_D_DOWN_UP -7 //Down & Up +#define MSG_MS_R_DOWN_UP -9 //Down & Up +#define MSG_MS_R_D_DOWN_UP -11 //Down & Up #help_index "Task/Settings" #define TSF_SAME_SONG 1 @@ -3261,7 +3221,7 @@ public class CTaskSettings border_attr,border_src, task_title[STR_LEN]; Bool border,hide_cursor,highlight_cursor,scroll,autocomplete,pad[3]; - U0 pad;#assert !($$&7) //(compiler lags one token) + ;#assert !($$&7) //(compiler lags one token) }; #help_index "Task" @@ -3305,6 +3265,7 @@ public class CTaskSettings #define TASK_SIGNATURE_VAL 'TskS' #define TASK_NAME_LEN 32 +#define TASK_EXCEPT_CALLERS 8 class CTaskStk { CTaskStk *next_stk; @@ -3323,7 +3284,7 @@ public class CTask //The Fs segment reg points to current CTask. { CTask *addr; //Self-addressed ptr U32 task_signature,win_inhibit; -U0 pad;#assert $$==offset(CTaskDying.wake_jiffy) + ;#assert $$==offset(CTaskDying.wake_jiffy) I64 wake_jiffy; U32 task_flags,display_flags; @@ -3371,8 +3332,7 @@ U0 pad;#assert $$==offset(CTaskDying.wake_jiffy) CExcept *next_except,*last_except; I64 except_rbp, //throw routine's RBP except_ch; //throw(ch) - U8 *except_caller1,*except_caller2,*except_caller3,*except_caller4, - *except_caller5,*except_caller6,*except_caller7,*except_caller8; + U8 *except_callers[TASK_EXCEPT_CALLERS]; Bool catch_except; Bool new_answer; @@ -3387,7 +3347,7 @@ U0 pad;#assert $$==offset(CTaskDying.wake_jiffy) F64 last_ode_time; CHashTable *hash_table; - CSrvCtrl srv_ctrl; + CJobCtrl srv_ctrl; CCmpCtrl *next_cc,*last_cc; CHashFun *last_fun; @@ -3401,7 +3361,7 @@ U0 pad;#assert $$==offset(CTaskDying.wake_jiffy) CWinScroll horz_scroll,vert_scroll; I64 user_data; - U0 pad;#assert !($$&7) //(compiler lags one token) + ;#assert !($$&7) //(compiler lags one token) }; class CTSS @@ -3456,28 +3416,22 @@ public class CCPU //The Gs segment reg points to current CCPU. I64 kill_jiffy; CTSS *tss; I64 start_stk[16]; - U0 pad;#assert !($$&7) //(compiler lags one token) + ;#assert !($$&7) //(compiler lags one token) }; #help_index "Memory/Page Tables" #define MEM_MIN_MEG 512 //512 Meg minimum. -#define MEM_MAPPED_SPACE 0x4000000000 //Arbitrarily set to 256 Gig. -#define MEM_NUM_2MEG (MEM_MAPPED_SPACE>>21) -#define MEM_NUM_USED_1GIG (MEM_MAPPED_SPACE>>(21+9)) -#define MEM_NUM_1GIG (0x1000/8) -#define MEM_NUM_512GIG (0x1000/8) -#define SYS_FIXED_AREA 0x100000 +#define SYS_FIXED_AREA 0x100000 +#define SYS_16MEG_AREA_LIMIT 0x1000000 public class CSysFixedArea { - U8 pml2[MEM_NUM_2MEG*8],pml3[MEM_NUM_1GIG*8],pml4[MEM_NUM_512GIG*8]; - $$=($$+15)&-16; CFPU init_fpu_mmx; CCPU boot_cpu; CTask adam; - CBlkPool adam_bp; + CBlkPool sys_code_bp; CHeapCtrl adam_hc; - $$=($$+MEM_PAGE_SIZE-1)&-MEM_PAGE_SIZE; + $$=($$+0x1000-1)&-0x1000; }; #help_index "Char" @@ -3509,7 +3463,6 @@ public class CSysFixedArea #define CH_CTRLZ 0x1A #define CH_CURSOR 0x05 #define CH_BACKSPACE 0x08 -#define CH_FORM_FEED 0x0C #define CH_ESC 0x1B #define CH_SHIFT_ESC 0x1C #define CH_SHIFT_SPACE 0x1F @@ -3528,8 +3481,8 @@ public class CSysFixedArea #define SCf_NUM 13 #define SCf_SCROLL 14 #define SCf_NEW_KEY 15 -#define SCf_IP_L_DOWN 16 -#define SCf_IP_R_DOWN 17 +#define SCf_MS_L_DOWN 16 +#define SCf_MS_R_DOWN 17 #define SCf_DELETE 18 #define SCf_INS 19 #define SCf_NO_SHIFT 30 @@ -3543,8 +3496,8 @@ public class CSysFixedArea #define SCF_NUM (1<. ch=ToUpper(ch)-'A'; if (ch<26) { - keydev.fp_ctrl_alt_cbs[ch]=fp_handler; + keydev.fp_ctrl_alt_cbs[ch]=fp_hndlr; Free(keydev.ctrl_alt_no_shift_descs[ch]); if (no_shift_desc) diff --git a/Kernel/Mem/BlkPool.HC b/Kernel/Mem/BlkPool.HC index b4bec7c..0d73bcb 100644 --- a/Kernel/Mem/BlkPool.HC +++ b/Kernel/Mem/BlkPool.HC @@ -1,35 +1,35 @@ -U0 BlkPoolAdd(CBlkPool *bp,CMemBlk *m,I64 pages512) +U0 BlkPoolAdd(CBlkPool *bp,CMemBlk *m,I64 pags) {//Add mem to BlkPool. if (sys_mem_init_flag) - MemSet(m,sys_mem_init_val,pages512*512); + MemSet(m,sys_mem_init_val,pags*MEM_PAG_SIZE); PUSHFD CLI while (LBts(&bp->locked_flags,BPlf_LOCKED)) PAUSE m->next=bp->mem_free_lst; - m->pages=pages512; + m->pags=pags; m->mb_signature=MBS_UNUSED_SIGNATURE_VAL; - bp->alloced_u8s+=pages512<alloced_u8s+=pags<mem_free_lst=m; LBtr(&bp->locked_flags,BPlf_LOCKED); POPFD } -U0 BlkPoolInit(CBlkPool *bp,I64 pages512) +U0 BlkPoolInit(CBlkPool *bp,I64 pags) {//Make mem chunk into a BlkPool. I64 num; CMemBlk *m; MemSet(bp,0,sizeof(CBlkPool)); - m=(bp(U8 *)+sizeof(CBlkPool)+MEM_PAGE_SIZE-1)&~(MEM_PAGE_SIZE-1); - num=(bp(U8 *)+pages512<>MEM_PAGE_BITS; - bp->alloced_u8s=(pages512-num)<>MEM_PAG_BITS; + bp->alloced_u8s=(pags-num)<>MEM_PAGE_BITS); - sys_heap_limit=i+0x1000000-1; + i=code_heap_limit-SYS_16MEG_AREA_LIMIT; //See $LK,"RLf_16MEG_SYS_CODE_BP",A="FF:::/Kernel/Mem/PageTables.HC,RLf_16MEG_SYS_CODE_BP"$ + BlkPoolAdd(sys_code_bp,SYS_16MEG_AREA_LIMIT,i>>MEM_PAG_BITS); + mem_heap_limit=i+SYS_16MEG_AREA_LIMIT-1; if (code_heap_limittype) { @@ -58,15 +58,16 @@ U0 BlkPoolsInit() } if (code_heap_limit<=lo>MEM_PAGE_BITS); + BlkPoolInit(lo,(hi-lo)>>MEM_PAG_BITS); sys_data_bp=lo; Fs->data_heap=HeapCtrlInit(,Fs,sys_data_bp); first=FALSE; } else - BlkPoolAdd(sys_data_bp,lo,(hi-lo)>>MEM_PAGE_BITS); + BlkPoolAdd(sys_data_bp,lo,(hi-lo)>>MEM_PAG_BITS); } } m20++; } } + LBts(&sys_run_level,RLf_FULL_HEAPS); } diff --git a/Kernel/Mem/HeapCtrl.HC b/Kernel/Mem/HeapCtrl.HC index d4e2939..758fea1 100644 --- a/Kernel/Mem/HeapCtrl.HC +++ b/Kernel/Mem/HeapCtrl.HC @@ -23,7 +23,7 @@ U0 HeapCtrlDel(CHeapCtrl *hc) m=hc->next_mem_blk; while (m!=&hc->next_mem_blk) { m1=m->next; - Mem512TaskFree(m,hc); + MemPagTaskFree(m,hc); m=m1; } LBtr(&hc->locked_flags,HClf_LOCKED); diff --git a/Kernel/Mem/MAllocFree.HC b/Kernel/Mem/MAllocFree.HC index 76c5bc7..9a7fc3d 100644 --- a/Kernel/Mem/MAllocFree.HC +++ b/Kernel/Mem/MAllocFree.HC @@ -51,20 +51,20 @@ _MALLOC:: JMP I32 MALLOC_ALMOST_DONE //Big allocation -@@30: ADD RAX,sizeof(CMemBlk)+MEM_PAGE_SIZE-1 - SHR RAX,MEM_PAGE_BITS +@@30: ADD RAX,sizeof(CMemBlk)+MEM_PAG_SIZE-1 + SHR RAX,MEM_PAG_BITS PUSH RDX //preserve HeapCtrl PUSH RDX PUSH RAX - CALL &Mem512TaskAlloc + CALL &MemPagTaskAlloc POP RDX TEST RAX,RAX JZ @@45 //Out of memory MOV RSI,RAX - MOV EAX,U32 CMemBlk.pages[RSI] + MOV EAX,U32 CMemBlk.pags[RSI] - SHL RAX,MEM_PAGE_BITS + SHL RAX,MEM_PAG_BITS SUB RAX,sizeof(CMemBlk) ADD RSI,sizeof(CMemBlk) JMP I32 MALLOC_ALMOST_DONE @@ -77,13 +77,13 @@ _MALLOC:: TEST RSI,RSI JNZ I32 @@60 PUSH RAX //-**** save byte size - ADD RAX,16*MEM_PAGE_SIZE-1 - SHR RAX,MEM_PAGE_BITS + ADD RAX,16*MEM_PAG_SIZE-1 + SHR RAX,MEM_PAG_BITS PUSH RDX //preserve HeapCtrl PUSH RDX PUSH RAX - CALL &Mem512TaskAlloc + CALL &MemPagTaskAlloc POP RDX TEST RAX,RAX JNZ @@50 @@ -99,8 +99,8 @@ _MALLOC:: JMP I32 MALLOC_FINAL_EXIT //Never gets here, hopefully. @@50: MOV RSI,RAX - MOV EAX,U32 CMemBlk.pages[RSI] - SHL RAX,MEM_PAGE_BITS + MOV EAX,U32 CMemBlk.pags[RSI] + SHL RAX,MEM_PAG_BITS //Can it be combined with last chunk? (Never Free these chunks.) MOV RDI,U64 CHeapCtrl.last_mergable[RDX] @@ -109,8 +109,8 @@ _MALLOC:: JNE @@55 PUSH RAX - MOV EAX,U32 CMemBlk.pages[RDI] - ADD U32 CMemBlk.pages[RSI],EAX + MOV EAX,U32 CMemBlk.pags[RDI] + ADD U32 CMemBlk.pags[RSI],EAX //QueRem MOV RAX,U64 CMemBlk.next[RDI] MOV RBX,U64 CMemBlk.last[RDI] @@ -161,7 +161,7 @@ MALLOC_ALMOST_DONE: //Caller1/Caller2 PUSH RDX - MOV RDX,U64 [SYS_HEAP_LIMIT] + MOV RDX,U64 [MEM_HEAP_LIMIT] MOV RDI,U64 SF_RIP[RBP] CMP RDI,RDX JB @@80 @@ -190,7 +190,7 @@ MALLOC_ALMOST_DONE: MOV U64 CMemUsed.hc[RSI],RDX LEA RAX,U64 CMemUsed.start[RSI] - TEST U8 [SYS_SEMAS+SYS_SEMA_HEAPLOG_ACTIVE*SEMA_STRUCT_SIZE],1 + TEST U8 [SYS_SEMAS+SEMA_HEAPLOG_ACTIVE*DFT_CACHE_LINE_WIDTH],1 JZ @@105 PUSH RAX PUSH RAX @@ -221,13 +221,13 @@ MALLOC_FINAL_EXIT: RET1 16 //************************************ _FREE:: -//Be aware of $LK,"heap_hash",A="FF:::/Kernel/Mem/MAllocFree.HC,heap_hash"$ in $LK,"Mem512TaskAlloc",A="MN:Mem512TaskAlloc"$(). +//Be aware of $LK,"heap_hash",A="FF:::/Kernel/Mem/MAllocFree.HC,heap_hash"$ in $LK,"MemPagTaskAlloc",A="MN:MemPagTaskAlloc"$(). PUSH RBP MOV RBP,RSP PUSH RSI PUSH RDI - TEST U8 [SYS_SEMAS+SYS_SEMA_HEAPLOG_ACTIVE*SEMA_STRUCT_SIZE],1 + TEST U8 [SYS_SEMAS+SEMA_HEAPLOG_ACTIVE*DFT_CACHE_LINE_WIDTH],1 JZ @@15 MOV RBX,U64 SF_ARG1[RBP] TEST RBX,RBX @@ -285,7 +285,7 @@ _FREE:: MOV U64 CMemUsed.next[RDI],RDX //Caller1/Caller2 - MOV RDX,U64 [SYS_HEAP_LIMIT] + MOV RDX,U64 [MEM_HEAP_LIMIT] MOV RDI,U64 SF_RIP[RBP] CMP RDI,RDX JB @@35 @@ -321,7 +321,7 @@ _FREE:: PUSH RDX PUSH RDX PUSH RSI - CALL &Mem512TaskFree + CALL &MemPagTaskFree POP RDX @@55: LOCK diff --git a/Kernel/Mem/MakeMem.HC b/Kernel/Mem/MakeMem.HC index 2df9982..e2ea650 100644 --- a/Kernel/Mem/MakeMem.HC +++ b/Kernel/Mem/MakeMem.HC @@ -1,6 +1,6 @@ #exe {Cd(__DIR__);}; #include "PageTables" -#include "Mem512" +#include "MemPag" #include "BlkPool" #include "MAllocFree" #include "HeapCtrl" diff --git a/Kernel/Mem/Mem512.HC b/Kernel/Mem/MemPag.HC similarity index 58% rename from Kernel/Mem/Mem512.HC rename to Kernel/Mem/MemPag.HC index 4693ae3..43c7e38 100644 --- a/Kernel/Mem/Mem512.HC +++ b/Kernel/Mem/MemPag.HC @@ -1,18 +1,17 @@ U0 SysBadFree(I64 *ptr) { - Dbg("Bad Free:",ptr); + Panic("Bad Free:",ptr); } U0 SysBadMAlloc(I64 *ptr) { - Dbg("Bad MAlloc:",ptr); + Panic("Bad MAlloc:",ptr); } -U8 *Mem512Alloc(I64 pages512,CBlkPool *bp=NULL) -{/*Alloc 512Byte pages from BlkPool. Don't link to task. +U8 *MemPagAlloc(I64 pags,CBlkPool *bp=NULL) +{/*Alloc pags from BlkPool. Don't link to task. (Linking to a task means they will be freed when the task dies.) -It might give you more than you asked for -so a ptr to a page count is passed. +It might give you more than you asked for. Return: NULL if out of memory. */ @@ -23,23 +22,23 @@ Return: NULL if out of memory. CLI while (LBts(&bp->locked_flags,BPlf_LOCKED)) PAUSE - if (pages512free_page_hash[pages512]) { - bp->free_page_hash[pages512]=res->next; + if (pagsfree_pag_hash[pags]) { + bp->free_pag_hash[pags]=res->next; goto at_done; } - i=Bsr(MEM_FREE_PAGE_HASH_SIZE)+1; + i=Bsr(MEM_FREE_PAG_HASH_SIZE)+1; } else { //We'll now round-up to a power of two. //There is some overhead on allocations and //we wouldn't want to round to the next //power of two if a power of two was requested. //So we use a little more than a power of two. - pages512-=MEM_EXTRA_HASH2_PAGES; - i=Bsr(pages512)+1; - pages512=1<free_page_hash2[i]) { - bp->free_page_hash2[i]=res->next; + pags-=MEM_EXTRA_HASH2_PAGS; + i=Bsr(pags)+1; + pags=1<free_pag_hash2[i]) { + bp->free_pag_hash2[i]=res->next; goto at_done; } } @@ -49,84 +48,84 @@ Return: NULL if out of memory. //We're probably out of luck, but lets search for a //freed larger size block... and, screw-it, return the whole thing. do { - if (res=bp->free_page_hash2[++i]) { - pages512=1<free_page_hash2[i]=res->next; + if (res=bp->free_pag_hash2[++i]) { + pags=1<free_pag_hash2[i]=res->next; goto at_done; } - } while (i<64-MEM_PAGE_BITS-1); - pages512=0; + } while (i<64-MEM_PAG_BITS-1); + pags=0; res=NULL; //Out of memory goto at_done2; } - if (res->pagespagspages==pages512) { + if (res->pags==pags) { m->next=res->next; goto at_done; } else { - res->pages-=pages512; - res(U8 *)+=res->pages<pages=pages512; + res->pags-=pags; + res(U8 *)+=res->pags<pags=pags; goto at_done; } } } at_done: - bp->used_u8s+=res->pages<used_u8s+=res->pags<locked_flags,BPlf_LOCKED); POPFD return res; } -U0 Mem512Free(CMemBlk *m,CBlkPool *bp=NULL) -{//Return non-task 512Byte pages to BlkPool. - I64 i,pages512; +U0 MemPagFree(CMemBlk *m,CBlkPool *bp=NULL) +{//Return non-task pags to BlkPool. + I64 i,pags; if (m) { if (!bp) bp=sys_code_bp; PUSHFD CLI while (LBts(&bp->locked_flags,BPlf_LOCKED)) PAUSE - pages512=m->pages; + pags=m->pags; m->mb_signature=MBS_UNUSED_SIGNATURE_VAL; - bp->used_u8s-=pages512<next=bp->free_page_hash[pages512]; - bp->free_page_hash[pages512]=m; + bp->used_u8s-=pags<next=bp->free_pag_hash[pags]; + bp->free_pag_hash[pags]=m; } else { //We'll now round-up to a power of two. //There is some overhead on allocations and //we wouldn't want to round to the next //power of two if a power of two was requested. //So we use a little more than a power of two. - pages512-=MEM_EXTRA_HASH2_PAGES; - i=Bsr(pages512); - m->next=bp->free_page_hash2[i]; - bp->free_page_hash2[i]=m; + pags-=MEM_EXTRA_HASH2_PAGS; + i=Bsr(pags); + m->next=bp->free_pag_hash2[i]; + bp->free_pag_hash2[i]=m; } LBtr(&bp->locked_flags,BPlf_LOCKED); POPFD } } -CMemBlk *Mem512TaskAlloc(I64 pages512,CHeapCtrl *hc) -{/*hc must be locked. Interrupts should probably be off +CMemBlk *MemPagTaskAlloc(I64 pags,CHeapCtrl *hc) +{/*hc must be locked. Don't preempt this routine. Currently, this is only called from $LK,"MAlloc",A="MN:MAlloc"$(). Return: NULL if out of memory. */ CMemBlk *res; I64 threshold,cnt,size; CMemUnused *uum,**_uum,**_ptr; - if (res=Mem512Alloc(pages512,hc->bp)) { + if (res=MemPagAlloc(pags,hc->bp)) { QueIns(res,hc->last_mem_blk); res->mb_signature=MBS_USED_SIGNATURE_VAL; - hc->alloced_u8s+=res->pages<alloced_u8s+=res->pags<>4; #assert MEM_HEAP_HASH_SIZE>>4>=sizeof(U8 *) do { @@ -151,7 +150,7 @@ Return: NULL if out of memory. return res; } -U0 Mem512TaskFree(CMemBlk *m,CHeapCtrl *hc) +U0 MemPagTaskFree(CMemBlk *m,CHeapCtrl *hc) {//hc must be locked if (m) { PUSHFD @@ -160,8 +159,8 @@ U0 Mem512TaskFree(CMemBlk *m,CHeapCtrl *hc) SysBadFree(m); else { QueRem(m); - hc->alloced_u8s-=m->pages<bp); + hc->alloced_u8s-=m->pags<bp); } POPFD } diff --git a/Kernel/Mem/MemPhysical.HC b/Kernel/Mem/MemPhysical.HC index 62ea122..bf895b4 100644 --- a/Kernel/Mem/MemPhysical.HC +++ b/Kernel/Mem/MemPhysical.HC @@ -30,7 +30,7 @@ Bool Mem32DevIns(CMemRange *tmpmr) U0 Mem32DevInit() { CMemRange *tmpmr; - CMemE820 *m20=SYS_MEM_E820; + CMemE820 *m20=MEM_E820; QueInit(&dev.mem32_head); tmpmr=AMAlloc(sizeof(CMemRange)); @@ -55,36 +55,13 @@ U0 Mem32DevInit() } } -U0 MemPagesNotPresentMark() -{ - U8 *a,*max_physical=NULL; - U16 *m01=SYS_MEM_E801; - CMemE820 *m20=SYS_MEM_E820; - while (m20->type) { - a=m20->base+m20->len; - if (a>max_physical) - max_physical=a; - m20++; - } - if (max_physical>=0x1000000+m01[1]<<16) { - if (sys_gig_pages) - a=(max_physical+0x3FFFFFFF)&~0x3FFFFFFF; - else - a=(max_physical+0x1FFFFF)&~0x1FFFFF; - while (asize=size; if (!Mem32DevIns(tmpmr)) { Free(tmpmr); - LBtr(&sys_semas[SYS_SEMA_DEV_MEM],0); + LBtr(&sys_semas[SEMA_DEV_MEM],0); return NULL; } - LBtr(&sys_semas[SYS_SEMA_DEV_MEM],0); + LBtr(&sys_semas[SEMA_DEV_MEM],0); return tmpmr->base; } tmpmr1=tmpmr1->next; } - LBtr(&sys_semas[SYS_SEMA_DEV_MEM],0); + LBtr(&sys_semas[SEMA_DEV_MEM],0); return NULL; } @@ -115,7 +92,7 @@ U0 Mem32DevFree(U8 *base) {//Free 32-bit device address space. CMemRange *tmpmr; if (!base) return; - while (LBts(&sys_semas[SYS_SEMA_DEV_MEM],0)) + while (LBts(&sys_semas[SEMA_DEV_MEM],0)) Yield; tmpmr=dev.mem32_head.next; while (tmpmr!=&dev.mem32_head) { @@ -125,14 +102,14 @@ U0 Mem32DevFree(U8 *base) } tmpmr=tmpmr->next; } - LBtr(&sys_semas[SYS_SEMA_DEV_MEM],0); + LBtr(&sys_semas[SEMA_DEV_MEM],0); } U8 *Mem64DevAlloc(I64 *_pages1Gig) {//Alloc 64-bit addr space for device. U8 *a; I64 i=*_pages1Gig,*pte; - while (LBts(&sys_semas[SYS_SEMA_DEV_MEM],0)) + while (LBts(&sys_semas[SEMA_DEV_MEM],0)) Yield; while (i--) { a=dev.mem64_ptr-=1<<30; @@ -140,22 +117,22 @@ U8 *Mem64DevAlloc(I64 *_pages1Gig) pte=MemPageTable(a); *pte=*pte&~0x18 |0x11; //Uncached and present InvlPg(dev.mem64_ptr); - a+=MemPageSize(a); + a+=mem_page_size; } while (a-dev.mem64_ptr<1<<30); } - LBtr(&sys_semas[SYS_SEMA_DEV_MEM],0); + LBtr(&sys_semas[SEMA_DEV_MEM],0); return dev.mem64_ptr; } U0 Mem64DevFree(U8 *base,I64 pages1Gig) {//Free 64-bit device address space. if (!base) return; - while (LBts(&sys_semas[SYS_SEMA_DEV_MEM],0)) + while (LBts(&sys_semas[SEMA_DEV_MEM],0)) Yield; if (base==dev.mem64_ptr) dev.mem64_ptr+=pages1Gig*1<<30; //else not freed - LBtr(&sys_semas[SYS_SEMA_DEV_MEM],0); + LBtr(&sys_semas[SEMA_DEV_MEM],0); } U0 UncachedAliasAlloc() //Make uncached alias for 4 lowest Gig. @@ -167,15 +144,15 @@ U0 UncachedAliasAlloc() //Make uncached alias for 4 lowest Gig. pte=MemPageTable(a); *pte=0x197+a-dev.uncached_alias; InvlPg(a); - a+=MemPageSize(a); + a+=mem_page_size; } while (a-dev.uncached_alias<1<<32); } I64 BIOSTotalMem() { I64 r01,r20; - U16 *m01=SYS_MEM_E801; - CMemE820 *m20=SYS_MEM_E820; + U16 *m01=MEM_E801; + CMemE820 *m20=MEM_E820; r01=0x100000+m01[0]<<10+m01[1]<<16; r20=0; @@ -201,4 +178,4 @@ I64 Scale2Mem(I64 min,I64 max,I64 limit=2*1024*1024*1024) return max; else return min+(max-min)*i/limit; - } +} diff --git a/Kernel/Mem/PageTables.HC b/Kernel/Mem/PageTables.HC index be8720f..e185145 100644 --- a/Kernel/Mem/PageTables.HC +++ b/Kernel/Mem/PageTables.HC @@ -3,152 +3,203 @@ asm { USE32 SYS_INIT_PAGE_TABLES:: -//Set page tables to identity map everything. +//Check 1Gig page capability and set page size. + MOV EAX,0x80000001 + CPUID + MOV EAX,1<<21 + BT EDX,26 + JNC @@05 + MOV EAX,1<<30 +@@05: MOV U32 [MEM_PAGE_SIZE],EAX + +//Set mapped space limit + MOV EAX,[MEM_PHYSICAL_SPACE] + MOV EDX,[MEM_PHYSICAL_SPACE+4] + BT U32 [MEM_PAGE_SIZE],30 //Round-up to 1Gig boundary? + JNC @@10 + ADD EAX,0x3FFFFFFF + ADC EDX,0 + AND EAX,~0x3FFFFFFF +@@10: INC EDX //Need 4Gig extra for uncached alias up at top of space. + MOV [MEM_MAPPED_SPACE],EAX + MOV [MEM_MAPPED_SPACE+4],EDX + +//How many 2Meg pages? + MOV CL,21 + ADD EAX,0x1FFFFF + ADC EDX,0 + SHRD EAX,EDX + SHR EDX,CL + MOV [MEM_NUM_2MEG],EAX + MOV [MEM_NUM_2MEG+4],EDX + +//How many 1Gig pages? + MOV CL,9 + ADD EAX,0x1FF + ADC EDX,0 + SHRD EAX,EDX + SHR EDX,CL + MOV [MEM_NUM_1GIG],EAX + MOV [MEM_NUM_1GIG+4],EDX + +//How many 512Gig pages? + MOV CL,9 + ADD EAX,0x1FF + ADC EDX,0 + SHRD EAX,EDX + SHR EDX,CL + MOV [MEM_NUM_512GIG],EAX + MOV [MEM_NUM_512GIG+4],EDX + +//Set $LK,"CSysFixedArea",A="MN:CSysFixedArea"$ to zero MOV EDI,SYS_FIXED_AREA XOR EAX,EAX MOV ECX,sizeof(CSysFixedArea)/4 - REP_STOSD //Init entire SYS_FIXED_AREA to zero + REP_STOSD - MOV EAX,0x80000001 - CPUID - BT EDX,26 + MOV U32 [MEM_PML2],EDI +//Check for 1Gig page capability. + BT U32 [MEM_PAGE_SIZE],30 JC @@15 +//Find PML2 Size + MOV EAX,U32 [MEM_NUM_2MEG] + ADD EAX,0x1FF + AND EAX,~0x1FF + SHL EAX,3 + ADD EDI,EAX - MOV U8 [SYS_GIG_PAGES],FALSE -//PML2: Use 2Meg PAges +//Find PML3 Size +@@15: MOV U32 [MEM_PML3],EDI + MOV EAX,U32 [MEM_NUM_1GIG] + ADD EAX,0x1FF + AND EAX,~0x1FF + SHL EAX,3 + ADD EDI,EAX + +//Find PML4 Size + MOV U32 [MEM_PML4],EDI + MOV EAX,U32 [MEM_NUM_512GIG] + ADD EAX,0x1FF + AND EAX,~0x1FF + SHL EAX,3 + ADD EAX,EDI + + MOV U32 [MEM_HEAP_BASE],EAX + +//Set page tables to zero + MOV EDI,U32 [MEM_PML2] + SUB EAX,EDI + MOV ECX,EAX + SHR ECX,2 + XOR EAX,EAX + REP_STOSD + +//Check for 1Gig page capability. + BT U32 [MEM_PAGE_SIZE],30 + JC @@30 + +//PML2: Use 2Meg Pages MOV EAX,0x87 //bit 7 is page size (2Meg) XOR EDX,EDX - MOV EDI,SYS_FIXED_AREA+CSysFixedArea.pml2 - MOV ECX,MEM_NUM_2MEG -@@05: MOV U32 [EDI],EAX + MOV EDI,[MEM_PML2] + MOV ECX,[MEM_NUM_2MEG] +@@20: MOV U32 [EDI],EAX ADD EDI,4 MOV U32 [EDI],EDX ADD EDI,4 ADD EAX,0x200000 ADC EDX,0 - LOOP @@05 + LOOP @@20 //PML3: Use 2Meg Pages - MOV EAX,SYS_FIXED_AREA+CSysFixedArea.pml2+7 + MOV EAX,[MEM_PML2] + OR EAX,7 XOR EDX,EDX - MOV EDI,SYS_FIXED_AREA+CSysFixedArea.pml3 - MOV ECX,MEM_NUM_USED_1GIG -@@10: MOV U32 [EDI],EAX + MOV EDI,[MEM_PML3] + MOV ECX,[MEM_NUM_1GIG] +@@25: MOV U32 [EDI],EAX ADD EDI,4 MOV U32 [EDI],EDX ADD EDI,4 ADD EAX,0x1000 ADC EDX,0 - LOOP @@10 - JMP @@25 + LOOP @@25 + JMP @@40 -@@15: MOV U8 [SYS_GIG_PAGES],TRUE //PML3: Use 1Gig Pages - MOV EAX,0x87 //bit 7 is page size (1Gig) +@@30: MOV EAX,0x87 //bit 7 is page size (1Gig) XOR EDX,EDX - MOV EDI,SYS_FIXED_AREA+CSysFixedArea.pml3 - MOV ECX,MEM_NUM_USED_1GIG -@@20: MOV U32 [EDI],EAX + MOV EDI,[MEM_PML3] + MOV ECX,[MEM_NUM_1GIG] +@@35: MOV U32 [EDI],EAX ADD EDI,4 MOV U32 [EDI],EDX ADD EDI,4 ADD EAX,0x40000000 ADC EDX,0 - LOOP @@20 + LOOP @@35 //PML4 -@@25: MOV EAX,SYS_FIXED_AREA+CSysFixedArea.pml3+7 +@@40: MOV EAX,[MEM_PML3] + OR EAX,7 XOR EDX,EDX - MOV EDI,SYS_FIXED_AREA+CSysFixedArea.pml4 - MOV ECX,MEM_NUM_1GIG/(0x1000/8) -@@30: MOV U32 [EDI],EAX + MOV EDI,[MEM_PML4] + MOV ECX,[MEM_NUM_512GIG] +@@45: MOV U32 [EDI],EAX ADD EDI,4 MOV U32 [EDI],EDX ADD EDI,4 ADD EAX,0x1000 ADC EDX,0 - LOOP @@30 + LOOP @@45 + RET - MOV U32 [SYS_CODE_BP],SYS_FIXED_AREA+CSysFixedArea.adam_bp +SYS_INIT_16MEG_SYS_CODE_BP:: +// Init sys_code_bp to BIOS E801 lowest 16Meg val. +// $LK,"BlkPoolsInit",A="MN:BlkPoolsInit"$() adds the rest. + MOV U32 [SYS_CODE_BP],SYS_FIXED_AREA+CSysFixedArea.sys_code_bp MOV U32 [SYS_CODE_BP+4],0 MOV U32 [SYS_DATA_BP],0 MOV U32 [SYS_DATA_BP+4],0 XOR EAX,EAX - MOV AX,U16 [SYS_MEM_E801] //1 Kb blks between 1M and 16M + MOV AX,U16 [MEM_E801] //1 Kb blks between 1M and 16M SHL EAX,10 ADD EAX,0x100000 - MOV EBX,U32 [SYS_HEAP_BASE] //SYS_FIXED_AREA+sizeof(CSysFixedArea) - SUB EAX,EBX + MOV EDI,U32 [MEM_HEAP_BASE] + SUB EAX,EDI -/*$AN,"ExpandHeap",A="ExpandHeap"$ -TempleOS initializes the heap to the val -of the BIOS E801 lowest 16Meg val. It -later adds the rest to the heap. There -are a few allocations which occur while -it is set to this small val. - -At some point, it might be nice to -initialize to the full val but it is a -pain without MAlloc up-and-running. -*/ - -#define CONSERVATIVE_16MEG_SIZE 0xF00000 -#define ESTIMATED_MISC_ALLOCS 0x100000 - -#assert CONSERVATIVE_16MEG_SIZE- - (SYS_FIXED_AREA+sizeof(CSysFixedArea))>MEM_ADAM_STK+ - ESTIMATED_MISC_ALLOCS - -//EBX=BASE EAX=SIZE +//EDI=BASE EAX=SIZE TEST U8 [SYS_MEM_INIT_FLAG],1 - JZ @@35 + JZ @@05 PUSH EAX - MOV EDI,EBX + PUSH EDI MOV ECX,EAX MOV AL,U8 [SYS_MEM_INIT_VAL] REP_STOSB + POP EDI POP EAX -@@35: SHR EAX,MEM_PAGE_BITS - MOV ESI,SYS_FIXED_AREA+CSysFixedArea.adam_bp - MOV EDI,U32 CBlkPool.mem_free_lst[ESI] - MOV U32 CMemBlk.next[EBX],EDI - MOV U32 CMemBlk.next+4[EBX],0 - MOV U32 CBlkPool.mem_free_lst[ESI],EBX +@@05: SHR EAX,MEM_PAG_BITS + MOV ESI,SYS_FIXED_AREA+CSysFixedArea.sys_code_bp + MOV EBX,U32 CBlkPool.mem_free_lst[ESI] + MOV U32 CMemBlk.next[EDI],EBX + MOV U32 CMemBlk.next+4[EDI],0 + MOV U32 CBlkPool.mem_free_lst[ESI],EDI MOV U32 CBlkPool.mem_free_lst+4[ESI],0 - MOV U32 CMemBlk.mb_signature[EBX],MBS_UNUSED_SIGNATURE_VAL - MOV U32 CMemBlk.pages[EBX],EAX - SHL EAX,MEM_PAGE_BITS + MOV U32 CMemBlk.mb_signature[EDI],MBS_UNUSED_SIGNATURE_VAL + MOV U32 CMemBlk.pags[EDI],EAX + SHL EAX,MEM_PAG_BITS ADD U32 CBlkPool.alloced_u8s[ESI],EAX + + BTS U32 [SYS_RUN_LEVEL],RLf_16MEG_SYS_CODE_BP RET } I64 *MemPageTable(U8 *a) {//Point to page table entry for addr. - if (sys_gig_pages) - return SYS_FIXED_AREA+offset(CSysFixedArea.pml3)+a>>30*8; + if (Bt(&mem_page_size,30)) + return *MEM_PML3(U64 *)+a>>30*8; else - return SYS_FIXED_AREA+offset(CSysFixedArea.pml2)+a>>21*8; + return *MEM_PML2(U64 *)+a>>21*8; } - -I64 MemPageSize(U8 *) -{//Page table entry size for addr. - if (sys_gig_pages) - return 1<<30; //1Gig - else - return 1<<21; //2Meg -} - -Bool MemPagePresentMark(U8 *a,Bool val) -{//Mark an addr's page present or not-present. - I64 *pte=MemPageTable(a); - Bool res=*pte&1; - if (val) - *pte=*pte|1; //Mark present - else - *pte=*pte&~1; //Mark not present - InvlPg(a); - return res; -} - diff --git a/Kernel/MultiProc.HC b/Kernel/MultiProc.HC index 49e597d..9c9e004 100644 --- a/Kernel/MultiProc.HC +++ b/Kernel/MultiProc.HC @@ -120,7 +120,7 @@ CCPU *CPUStructInit(I64 num,CCPU *c,CTask *seth_task) c->num=num; c->idle_factor=0.01; QueInit(&c->next_dying); - if (Bt(&sys_run_level,RLf_BOOT_HEAP)) { + if (Bt(&sys_run_level,RLf_16MEG_ADAM_HEAP_CTRL)) { c->idle_task=Spawn(0,NULL,"Idle Task",,Fs,,0); LBts(&c->idle_task->task_flags,TASKf_IDLE); c->tss=TSSNew(num); @@ -165,7 +165,7 @@ U0 MPHalt() {//Halt all other cores. mp_cnt=1; MPNMInt; - BusyWait(10000); + Busy(10000); } U0 MPAPICInit() @@ -189,45 +189,44 @@ U0 MPAPICInit() } } -#assert !offset(CSrvCtrl.next_waiting) +#assert !offset(CJobCtrl.next_waiting) U0 CoreAPSethTask() { - CSrvCtrl *ctrl=&Fs->srv_ctrl; + CJobCtrl *ctrl=&Fs->srv_ctrl; while (TRUE) { STI do { TaskKillDying; do PAUSE - while (LBts(&ctrl->flags,SVCRf_LOCKED)); - } while (ctrl->next_waiting!=ctrl && SrvCmdRunOne(GetRFlags,ctrl)); + while (LBts(&ctrl->flags,JOBCf_LOCKED)); + } while (ctrl->next_waiting!=ctrl && JobRunOne(GetRFlags,ctrl)); CLI LBts(&Fs->task_flags,TASKf_AWAITING_MSG); - LBtr(&ctrl->flags,SVCRf_LOCKED); + LBtr(&ctrl->flags,JOBCf_LOCKED); LBts(&Fs->task_flags,TASKf_IDLE); Yield; LBtr(&Fs->task_flags,TASKf_IDLE); } } -CSrvCmd *JobQue(I64 (*fp_addr)(U8 *data),U8 *data=NULL, - I64 target_cpu=1,I64 flags=1<aux_str=AStrNew(aux_str); - tmpc->cmd_code=cmd_code; + tmpc->job_code=job_code; tmpc->addr=fp_addr; tmpc->fun_arg=data; - tmpc->target_cpu=target_cpu; tmpc->flags=flags; tmpc->aux1=aux1; tmpc->aux2=aux2; @@ -235,26 +234,26 @@ CSrvCmd *JobQue(I64 (*fp_addr)(U8 *data),U8 *data=NULL, tmpc->ctrl=ctrl=&seth->srv_ctrl; PUSHFD CLI - while (LBts(&ctrl->flags,SVCRf_LOCKED)) + while (LBts(&ctrl->flags,JOBCf_LOCKED)) Yield; if (ctrl->next_waiting==ctrl && LBtr(&seth->task_flags,TASKf_AWAITING_MSG)) MPInt(I_WAKE,target_cpu); QueIns(tmpc,ctrl->last_waiting); - LBtr(&ctrl->flags,SVCRf_LOCKED); + LBtr(&ctrl->flags,JOBCf_LOCKED); POPFD return tmpc; } CTask *SpawnQue(U0 (*fp_addr)(U8 *data),U8 *data=NULL,U8 *task_name=NULL, I64 target_cpu, CTask *parent=NULL, //NULL means adam - I64 stk_size=0,I64 flags=1<flags,SVCf_DONE)) { + while (!Bt(&tmpc->flags,JOBf_DONE)) { LBts(&Fs->task_flags,TASKf_IDLE); Yield; } @@ -264,12 +263,12 @@ CTask *SpawnQue(U0 (*fp_addr)(U8 *data),U8 *data=NULL,U8 *task_name=NULL, ctrl=tmpc->ctrl; PUSHFD CLI - while (LBts(&ctrl->flags,SVCRf_LOCKED)) + while (LBts(&ctrl->flags,JOBCf_LOCKED)) Yield; QueRem(tmpc); - LBtr(&ctrl->flags,SVCRf_LOCKED); + LBtr(&ctrl->flags,JOBCf_LOCKED); POPFD - SrvCmdDel(tmpc); + JobDel(tmpc); return res; } @@ -301,8 +300,8 @@ U0 Core0StartMP() MPHalt; //sets mp_cnt to 1 for (i=1;iseth_task->srv_ctrl.next_waiting); - SrvCmdQueDel(&c->seth_task->srv_ctrl.next_done); + JobQueDel(&c->seth_task->srv_ctrl.next_waiting); + JobQueDel(&c->seth_task->srv_ctrl.next_done); } } MemSet(&cpu_structs[1],0,sizeof(CCPU)*(MP_MAX_PROCESSORS-1)); @@ -320,13 +319,13 @@ U0 Core0StartMP() WBINVD //Not sure why this is needed. Might just need delay. $LK,"MemCpy",A="MN:MemCpy"$ above? *(dev.uncached_alias+LAPIC_ICR_LOW)(U32 *)=0xC4500; //assert init IPI - BusyWait(10000); + Busy(10000); *(dev.uncached_alias+LAPIC_ICR_LOW)(U32 *)=0xC4600+MPN_VECT; //start-up - BusyWait(200); + Busy(200); *(dev.uncached_alias+LAPIC_ICR_LOW)(U32 *)=0xC4600+MPN_VECT; - BusyWait(100000); + Busy(100000); for (i=0;i<10000;i++) LBts(&mp_cnt_lock,0); //Don't let more through my_mp_cnt=mp_cnt_initial; @@ -335,7 +334,7 @@ U0 Core0StartMP() my_mp_cnt=MP_MAX_PROCESSORS; for (i=1;irflags=RFLAGG_START; //$LK,"CTask",A="MN:CTask"$ alloced off this core's seth_task's heap (Which is Adam) @@ -384,7 +383,7 @@ interrupt U0 IntMPCrash() mp_cnt=1; Raw(ON); text.raw_flags|=RWF_SHOW_DOLLAR; - "MP Crash CPU#%02X Task:%08X\n" + "MP Crash CPU%02X Task:%08X\n" "RIP:%P\n",dbg.mp_crash->cpu_num,dbg.mp_crash->task,dbg.mp_crash->rip; - Dbg(dbg.mp_crash->msg,dbg.mp_crash->msg_num); + Panic(dbg.mp_crash->msg,dbg.mp_crash->msg_num); } diff --git a/Kernel/PCIBIOS.HC b/Kernel/PCIBIOS.HC index 4a46d56..37dd199 100644 --- a/Kernel/PCIBIOS.HC +++ b/Kernel/PCIBIOS.HC @@ -165,7 +165,7 @@ U8 PCIReadU8(I64 bus,I64 dev,I64 fun,I64 rg) I64 res; PUSHFD CLI - while (LBts(&sys_semas[SYS_SEMA_FAR_CALL32],0)) + while (LBts(&sys_semas[SEMA_FAR_CALL32],0)) Yield; c32_eax=0xB108; c32_ebx=bus<<8+dev<<3+fun; @@ -174,7 +174,7 @@ U8 PCIReadU8(I64 bus,I64 dev,I64 fun,I64 rg) res=c32_ecx.u8[0]; else res=0xFF; - LBtr(&sys_semas[SYS_SEMA_FAR_CALL32],0); + LBtr(&sys_semas[SEMA_FAR_CALL32],0); POPFD return res; } @@ -184,7 +184,7 @@ U16 PCIReadU16(I64 bus,I64 dev,I64 fun,I64 rg) I64 res; PUSHFD CLI - while (LBts(&sys_semas[SYS_SEMA_FAR_CALL32],0)) + while (LBts(&sys_semas[SEMA_FAR_CALL32],0)) Yield; c32_eax=0xB109; c32_ebx=bus<<8+dev<<3+fun; @@ -193,7 +193,7 @@ U16 PCIReadU16(I64 bus,I64 dev,I64 fun,I64 rg) res=c32_ecx.u16[0]; else res=0xFFFF; - LBtr(&sys_semas[SYS_SEMA_FAR_CALL32],0); + LBtr(&sys_semas[SEMA_FAR_CALL32],0); POPFD return res; } @@ -203,7 +203,7 @@ U32 PCIReadU32(I64 bus,I64 dev,I64 fun,I64 rg) I64 res; PUSHFD CLI - while (LBts(&sys_semas[SYS_SEMA_FAR_CALL32],0)) + while (LBts(&sys_semas[SEMA_FAR_CALL32],0)) Yield; c32_eax=0xB10A; c32_ebx=bus<<8+dev<<3+fun; @@ -212,7 +212,7 @@ U32 PCIReadU32(I64 bus,I64 dev,I64 fun,I64 rg) res=c32_ecx; else res=0xFFFFFFFF; - LBtr(&sys_semas[SYS_SEMA_FAR_CALL32],0); + LBtr(&sys_semas[SEMA_FAR_CALL32],0); POPFD return res; } @@ -221,14 +221,14 @@ U0 PCIWriteU8(I64 bus,I64 dev,I64 fun,I64 rg,I64 val) {//Write U8 in PCI configspace at bus,dev,fun,reg. PUSHFD CLI - while (LBts(&sys_semas[SYS_SEMA_FAR_CALL32],0)) + while (LBts(&sys_semas[SEMA_FAR_CALL32],0)) Yield; c32_eax=0xB10B; c32_ebx=bus<<8+dev<<3+fun; c32_edi=rg; c32_ecx=val; FarCall32(sys_pci_services); - LBtr(&sys_semas[SYS_SEMA_FAR_CALL32],0); + LBtr(&sys_semas[SEMA_FAR_CALL32],0); POPFD } @@ -236,14 +236,14 @@ U0 PCIWriteU16(I64 bus,I64 dev,I64 fun,I64 rg,I64 val) {//Write U16 in PCI configspace at bus,dev,fun,reg. PUSHFD CLI - while (LBts(&sys_semas[SYS_SEMA_FAR_CALL32],0)) + while (LBts(&sys_semas[SEMA_FAR_CALL32],0)) Yield; c32_eax=0xB10C; c32_ebx=bus<<8+dev<<3+fun; c32_edi=rg; c32_ecx=val; FarCall32(sys_pci_services); - LBtr(&sys_semas[SYS_SEMA_FAR_CALL32],0); + LBtr(&sys_semas[SEMA_FAR_CALL32],0); POPFD } @@ -251,14 +251,14 @@ U0 PCIWriteU32(I64 bus,I64 dev,I64 fun,I64 rg,I64 val) {//Write U32 in PCI configspace at bus,dev,fun,reg. PUSHFD CLI - while (LBts(&sys_semas[SYS_SEMA_FAR_CALL32],0)) + while (LBts(&sys_semas[SEMA_FAR_CALL32],0)) Yield; c32_eax=0xB10D; c32_ebx=bus<<8+dev<<3+fun; c32_edi=rg; c32_ecx=val; FarCall32(sys_pci_services); - LBtr(&sys_semas[SYS_SEMA_FAR_CALL32],0); + LBtr(&sys_semas[SEMA_FAR_CALL32],0); POPFD } @@ -273,7 +273,7 @@ else bus,dev,fun. I64 res; PUSHFD CLI - while (LBts(&sys_semas[SYS_SEMA_FAR_CALL32],0)) + while (LBts(&sys_semas[SEMA_FAR_CALL32],0)) Yield; c32_eax=0xB103; c32_esi=n; @@ -282,7 +282,7 @@ else bus,dev,fun. res=c32_ebx.u8[1]<<16+(c32_ebx&0xF8)<<5+c32_ebx&7; else res=-1; - LBtr(&sys_semas[SYS_SEMA_FAR_CALL32],0); + LBtr(&sys_semas[SEMA_FAR_CALL32],0); POPFD return res; } diff --git a/Kernel/Sched.HC b/Kernel/Sched.HC index ec14d9f..a86b99a 100644 --- a/Kernel/Sched.HC +++ b/Kernel/Sched.HC @@ -155,7 +155,7 @@ _TASK_END_NOW:: _YIELD:: PUSHFD - TEST U8 [SYS_SEMAS+SYS_SEMA_SINGLE_USER*SEMA_STRUCT_SIZE],1 + TEST U8 [SYS_SEMAS+SEMA_SINGLE_USER*DFT_CACHE_LINE_WIDTH],1 JZ @@05 POPFD //If single user, don't change task. RET @@ -169,8 +169,8 @@ _YIELD:: MOV RSI,U64 CTask.next_task[RSI] RESTORE_RSI_TASK: - TEST U64 [SYS_CTRL_ALT_FLAGS],1<=text.cols) { - ip.pos_text.x=text.cols-1; - ip.pos.x=text.cols*FONT_WIDTH-1; - } - ip.pos_text.y=ip.pos.y/FONT_HEIGHT; - if (ip.pos_text.y>=text.rows) { - ip.pos_text.y=text.rows-1; - ip.pos.y=text.rows*FONT_HEIGHT-1; - } - ip.lb=l; - ip.rb=r; - LBEqu(&kbd.scan_code,SCf_IP_L_DOWN,ip.lb); - LBEqu(&kbd.scan_code,SCf_IP_R_DOWN,ip.rb); -} - -U0 IPSet(I64 x=MAX_I64,I64 y=MAX_I64,I64 z=MAX_I64,I64 l=MAX_I64,I64 r=MAX_I64) -{//Note: Generates a message. See $LK,"IPSet",A="FF:::/Demo/Games/Zing.HC,IPSet"$(). - if (!(0<=x>3; - ip.offset.x=ip.offset.y=ip.offset.z=0; - ip.scale.x=ip.scale.y=ip.scale.z=1.0; - ip.dev=IP_NULL; - ip.pos_text.x=ip.pos_text.y=ip.pos_text.z=0; - ip.has_wheel=FALSE; - ip.show=TRUE; - ip.speed=0; - ip.timestamp=GetTSC; - ip.dbl_time=0.350; - GridInit; -} diff --git a/Kernel/SerialDev/Keyboard.HC b/Kernel/SerialDev/Keyboard.HC index bd3f35b..ff370b3 100644 --- a/Kernel/SerialDev/Keyboard.HC +++ b/Kernel/SerialDev/Keyboard.HC @@ -62,7 +62,7 @@ U0 KbdLEDsSet(I64 sc) Fs->catch_except=TRUE; } -U0 KbdMouseCmdAck(...) +U0 KbdMsCmdAck(...) { I64 i,ack,timeout; for (i=0;ikbd.timestamp) - return mouse.timestamp; + if (ms_hard.timestamp>kbd.timestamp) + return ms_hard.timestamp; else return kbd.new_key_timestamp; } diff --git a/Kernel/SerialDev/MakeSerialDev.HC b/Kernel/SerialDev/MakeSerialDev.HC index c465c45..dc609f6 100644 --- a/Kernel/SerialDev/MakeSerialDev.HC +++ b/Kernel/SerialDev/MakeSerialDev.HC @@ -1,5 +1,4 @@ #exe {Cd(__DIR__);}; -#include "InputPointer" #include "Keyboard" #include "Mouse" #include "Message" diff --git a/Kernel/SerialDev/Message.HC b/Kernel/SerialDev/Message.HC index 50a59ee..e94f246 100644 --- a/Kernel/SerialDev/Message.HC +++ b/Kernel/SerialDev/Message.HC @@ -1,6 +1,6 @@ U0 InputFilterTask() { - CSrvCmd *tmpc,*tmpc1; + CJob *tmpc,*tmpc1; Bool old_filter; I64 old_flags=GetRFlags; Fs->win_inhibit=WIG_USER_TASK_DFT; @@ -9,20 +9,20 @@ U0 InputFilterTask() LBEqu(&Fs->task_flags,TASKf_FILTER_INPUT,old_filter); while (TRUE) { CLI - SrvCmdsHandler(old_flags); + JobsHndlr(old_flags); tmpc1=&Fs->srv_ctrl.next_waiting; tmpc=tmpc1->next; if (tmpc==tmpc1) break; else { - if (tmpc->cmd_code==SVCT_TEXT_INPUT) { + if (tmpc->job_code==JOBT_TEXT_INPUT) { QueRem(tmpc); SetRFlags(old_flags); try ExePrint("%s",tmpc->aux_str); catch Fs->catch_except=TRUE; - SrvCmdDel(tmpc); + JobDel(tmpc); } else break; } @@ -34,7 +34,7 @@ U0 InputFilterTask() SetRFlags(old_flags); } -I64 ScanMsg(I64 *_a1=NULL,I64 *_a2=NULL,I64 mask=~1,CTask *task=NULL) +I64 ScanMsg(I64 *_arg1=NULL,I64 *_arg2=NULL,I64 mask=~1,CTask *task=NULL) {/*Check for a message of type specified by a one in the mask. Throw-out messages not in mask. If no message fit mask, return NULL immediately. @@ -42,27 +42,27 @@ Remove desired message, return $LK,"msg_code",A="MN:MSG_CMD"$. Note: This delivers messages from parent down to pop-up. */ I64 res,old_flags; - CSrvCmd *tmpc,*tmpc1; + CJob *tmpc,*tmpc1; if (!task) task=Fs; old_flags=GetRFlags; tmpc1=&task->srv_ctrl.next_waiting; while (TRUE) { CLI if (task==Fs) - SrvCmdsHandler(old_flags); + JobsHndlr(old_flags); tmpc=tmpc1->next; if (tmpc==tmpc1) break; else { - if (tmpc->cmd_code==SVCT_MSG) { + if (tmpc->job_code==JOBT_MSG) { QueRem(tmpc); SetRFlags(old_flags); res=tmpc->msg_code; - if (_a1) - *_a1=tmpc->aux1; - if (_a2) - *_a2=tmpc->aux2; - SrvCmdDel(tmpc); + if (_arg1) + *_arg1=tmpc->aux1; + if (_arg2) + *_arg2=tmpc->aux2; + JobDel(tmpc); if ((res!=MSG_KEY_DOWN || !(tmpc->aux2&SCF_KEY_DESC) || !Bt(&task->win_inhibit,WIf_SELF_KEY_DESC)) && Bt(&mask,res)) goto sm_done; @@ -71,13 +71,13 @@ Note: This delivers messages from parent down to pop-up. SetRFlags(old_flags); } res=MSG_NULL; - if (_a1) - *_a1=0; - if (_a2) - *_a2=0; + if (_arg1) + *_arg1=0; + if (_arg2) + *_arg2=0; if (task->parent_task&&task->parent_task->popup_task==task) { SetRFlags(old_flags); - return ScanMsg(_a1,_a2,mask,task->parent_task); + return ScanMsg(_arg1,_arg2,mask,task->parent_task); } sm_done: SetRFlags(old_flags); @@ -86,20 +86,20 @@ sm_done: I64 FlushMsgs(CTask *task=NULL) {//Throw away all messages. Return count. - I64 res=0,a1,a2; - while (ScanMsg(&a1,&a2,~1,task)) + I64 res=0,arg1,arg2; + while (ScanMsg(&arg1,&arg2,~1,task)) res++; return res; } -I64 GetMsg(I64 *_a1=NULL,I64 *_a2=NULL,I64 mask=~1,CTask *task=NULL) +I64 GetMsg(I64 *_arg1=NULL,I64 *_arg2=NULL,I64 mask=~1,CTask *task=NULL) {//Wait for a message of type specified by a one in the mask. //Throw-out all messages not in mask. //Returns $LK,"msg_code",A="MN:MSG_CMD"$. See $LK,"::/Demo/MsgLoop.HC"$. I64 res; if (!task) task=Fs; LBtr(&task->task_flags,TASKf_IDLE); - while (!(res=ScanMsg(_a1,_a2,mask,task))) { + while (!(res=ScanMsg(_arg1,_arg2,mask,task))) { LBts(&task->task_flags,TASKf_IDLE); Yield; } @@ -111,13 +111,13 @@ I64 ScanChar() {//Checks for $LK,"MSG_KEY_DOWN",A="MN:MSG_KEY_DOWN"$ and returns 0 immediately if no key. //Waits for $LK,"MSG_KEY_UP",A="MN:MSG_KEY_UP"$ of non-zero $LK,"ASCII",A="MN:CH_CTRLA"$ key and returns $LK,"ASCII",A="MN:CH_CTRLA"$ if key. //$LK,"ScanMsg",A="MN:ScanMsg"$() throws away other message types. - I64 a1a,a2a,a1b,a2b; - if (!ScanMsg(&a1a,&a2a,1<mouse.timestamp+cnts.time_stamp_freq>>3) - FifoU8Flush(mouse.fifo); - mouse.timestamp=GetTSC; - FifoU8Ins(mouse.fifo,InU8(KBD_PORT)); - if (FifoU8Cnt(mouse.fifo)==mouse.pkt_size) - while (FifoU8Rem(mouse.fifo,&j)) - FifoU8Ins(mouse.fifo2,j); +U0 GridInit() +{//Init mouse grid struct. See $LK,"::/Demo/Graphics/Grid.HC"$. + ms_grid.x=ms_grid.y=ms_grid.z=8; + ms_grid.x_offset=ms_grid.y_offset=ms_grid.z_offset=0; + ms_grid.x_speed =ms_grid.y_speed =ms_grid.z_speed =1; + ms_grid.show=ms_grid.snap=FALSE; } -interrupt U0 IRQMouse() +U0 MsUpdate(I64 x,I64 y,I64 z,Bool l,Bool r) +{ + ms.presnap.x=ToI64(ms.scale.x*x)+ms.offset.x; + ms.presnap.y=ToI64(ms.scale.y*y)+ms.offset.y; + ms.presnap.z=ToI64(ms.scale.z*z)+ms.offset.z; + if (ms_grid.snap) { + ms.pos.x=Trunc(ms.presnap.x/ms_grid.x)*ms_grid.x+ms_grid.x_offset; + ms.pos.y=Trunc(ms.presnap.y/ms_grid.y)*ms_grid.y+ms_grid.y_offset; + ms.pos.z=Trunc(ms.presnap.z/ms_grid.z)*ms_grid.z+ms_grid.z_offset; + } else { + ms.pos.x=ms.presnap.x; + ms.pos.y=ms.presnap.y; + ms.pos.z=ms.presnap.z; + } + + ms.pos.x=ClampI64(ms.pos.x,0,GR_WIDTH-1); + ms.pos.y=ClampI64(ms.pos.y,0,GR_HEIGHT-1); + ms.pos_text.x=ms.pos.x/FONT_WIDTH; + if (ms.pos_text.x>=text.cols) { + ms.pos_text.x=text.cols-1; + ms.pos.x=text.cols*FONT_WIDTH-1; + } + ms.pos_text.y=ms.pos.y/FONT_HEIGHT; + if (ms.pos_text.y>=text.rows) { + ms.pos_text.y=text.rows-1; + ms.pos.y=text.rows*FONT_HEIGHT-1; + } + ms.lb=l; + ms.rb=r; + LBEqu(&kbd.scan_code,SCf_MS_L_DOWN,ms.lb); + LBEqu(&kbd.scan_code,SCf_MS_R_DOWN,ms.rb); +} + +U0 MsSet(I64 x=MAX_I64,I64 y=MAX_I64,I64 z=MAX_I64,I64 l=MAX_I64,I64 r=MAX_I64) +{//Note: Generates a message. See $LK,"MsSet",A="FF:::/Demo/Games/Zing.HC,MsSet"$(). + if (!(0<=xms_hard.timestamp+cnts.time_stamp_freq>>3) + FifoU8Flush(ms_hard.fifo); + ms_hard.timestamp=GetTSC; + FifoU8Ins(ms_hard.fifo,InU8(KBD_PORT)); + if (FifoU8Cnt(ms_hard.fifo)==ms_hard.pkt_size) + while (FifoU8Rem(ms_hard.fifo,&j)) + FifoU8Ins(ms_hard.fifo2,j); +} + +interrupt U0 IRQMsHard() { CLD OutU8(0xA0,0x20); OutU8(0x20,0x20); - mouse.irqs_working=TRUE; - if (mouse.install_in_progress || !mouse.installed) { + ms_hard.irqs_working=TRUE; + if (ms_hard.install_in_progress || !ms_hard.installed) { kbd.rst=TRUE; return; } - MousePktRead; + MsHardPktRead; } -U0 MouseGetDevType() +U0 MsHardGetType() { I64 b; - KbdMouseCmdAck(0xF2); + KbdMsCmdAck(0xF2); b=KbdCmdRead; if (b==3) - mouse.has_wheel=TRUE; + ms_hard.has_wheel=TRUE; else if (b==4) - mouse.has_ext_buttons=TRUE; + ms_hard.has_ext_bttns=TRUE; } -Bool MouseRst() +Bool MsHardRst() { U8 b,*_b; F64 timeout; Bool res=FALSE; - mouse.has_wheel=FALSE; - mouse.has_ext_buttons=FALSE; + ms_hard.has_wheel=FALSE; + ms_hard.has_ext_bttns=FALSE; if (*0x40E(U16 *)==0x9FC0) { _b=0x9FC00+0x30; @@ -54,7 +131,7 @@ Bool MouseRst() KbdCmdSend(KBD_CTRL,0xAD); //Disable Kbd KbdCmdSend(KBD_CTRL,0xA8); //Enable Mouse - KbdMouseCmdAck(0xFF); //Rst + KbdMsCmdAck(0xFF); //Rst timeout=tS+10.0; do @@ -70,11 +147,11 @@ Bool MouseRst() catch Fs->catch_except=TRUE; - KbdMouseCmdAck(0xF3,200,0xF3,100,0xF3,80); - MouseGetDevType; - KbdMouseCmdAck(0xF3,10); - MouseGetDevType; - KbdMouseCmdAck(0xE8,0x03,0xE6,0xF3,100,0xF4); + KbdMsCmdAck(0xF3,200,0xF3,100,0xF3,80); + MsHardGetType; + KbdMsCmdAck(0xF3,10); + MsHardGetType; + KbdMsCmdAck(0xE8,0x03,0xE6,0xF3,100,0xF4); res=TRUE; //Enable IRQ 12 @@ -94,10 +171,10 @@ Bool MouseRst() KbdCmdSend(KBD_CTRL,0xAE); //Enable Keyboard catch Fs->catch_except=TRUE; - if (mouse.has_wheel || mouse.has_ext_buttons) - mouse.pkt_size=4; + if (ms_hard.has_wheel || ms_hard.has_ext_bttns) + ms_hard.pkt_size=4; else - mouse.pkt_size=3; + ms_hard.pkt_size=3; if (!res) try KbdCmdSend(KBD_CTRL,0xA7); //Disable Mouse @@ -106,147 +183,147 @@ Bool MouseRst() return res; } -U0 MouseSpeedSet() +U0 MsHardSpeedSet() { I64 dd,tmp; - if ((dd=SqrI64(mouse_last.pos.x-mouse.pos.x) - +SqrI64(mouse_last.pos.y-mouse.pos.y)) && - (tmp=mouse.timestamp-mouse_last.timestamp)) - mouse.speed=Sqrt(dd)*cnts.time_stamp_freq/tmp; - mouse_last.timestamp=mouse.timestamp; + if ((dd=SqrI64(ms_hard_last.pos.x-ms_hard.pos.x) + +SqrI64(ms_hard_last.pos.y-ms_hard.pos.y)) && + (tmp=ms_hard.timestamp-ms_hard_last.timestamp)) + ms_hard.speed=Sqrt(dd)*cnts.time_stamp_freq/tmp; + ms_hard_last.timestamp=ms_hard.timestamp; } -U0 MouseUpdatePre() +U0 MsHardSetPre() { - I64 old_timestamp=mouse_last.timestamp; - MemCpy(&mouse_last,&mouse,sizeof(CMouseStateGlbls)); - mouse_last.timestamp=old_timestamp; + I64 old_timestamp=ms_hard_last.timestamp; + MemCpy(&ms_hard_last,&ms_hard,sizeof(CMsHardStateGlbls)); + ms_hard_last.timestamp=old_timestamp; } -U0 MouseUpdatePost() +U0 MsHardSetPost() { I64 i; - mouse.pos.x=mouse.prescale.x*mouse.scale.x*ip_grid.x_speed; - mouse.pos.y=mouse.prescale.y*mouse.scale.y*ip_grid.y_speed; - mouse.pos.z=mouse.prescale.z*mouse.scale.z*ip_grid.z_speed; + ms_hard.pos.x=ms_hard.prescale.x*ms_hard.scale.x*ms_grid.x_speed; + ms_hard.pos.y=ms_hard.prescale.y*ms_hard.scale.y*ms_grid.y_speed; + ms_hard.pos.z=ms_hard.prescale.z*ms_hard.scale.z*ms_grid.z_speed; - i=Trunc(ip.scale.x*mouse.pos.x/ip_grid.x)*ip_grid.x+ip.offset.x; -//TODO ip_grid.x_offset? + i=Trunc(ms.scale.x*ms_hard.pos.x/ms_grid.x)*ms_grid.x+ms.offset.x; +//TODO ms_grid.x_offset? if (i<0) - ip.offset.x-=i; + ms.offset.x-=i; else if (i>=GR_WIDTH) - ip.offset.x+=GR_WIDTH-1-i; + ms.offset.x+=GR_WIDTH-1-i; - i=Trunc(ip.scale.y*mouse.pos.y/ip_grid.y)*ip_grid.y+ip.offset.y; + i=Trunc(ms.scale.y*ms_hard.pos.y/ms_grid.y)*ms_grid.y+ms.offset.y; if (i<0) - ip.offset.y-=i; + ms.offset.y-=i; else if (i>=GR_HEIGHT) - ip.offset.y+=GR_HEIGHT-1-i; + ms.offset.y+=GR_HEIGHT-1-i; - if (mouse.pos.x!=mouse_last.pos.x || mouse.pos.y!=mouse_last.pos.y || - mouse.pos.z!=mouse_last.pos.z) { - mouse.evt=TRUE; - MouseSpeedSet; + if (ms_hard.pos.x!=ms_hard_last.pos.x || ms_hard.pos.y!=ms_hard_last.pos.y || + ms_hard.pos.z!=ms_hard_last.pos.z) { + ms_hard.evt=TRUE; + MsHardSpeedSet; } else for (i=0;i<5;i++) - if (mouse.buttons[i]!=mouse_last.buttons[i]) { - mouse.evt=TRUE; + if (ms_hard.bttns[i]!=ms_hard_last.bttns[i]) { + ms_hard.evt=TRUE; break; } } -U0 MouseHandler() +U0 MsHardHndlr() { I64 i,dx,dy,dz; - U8 mouse_buf[4]; + U8 ms_buf[4]; - MouseUpdatePre; + MsHardSetPre; for (i=0;i<4;i++) - mouse_buf[i]=0; - for (i=0;i> 1; - mouse.buttons[2] = (mouse_buf[0] & 4) >> 2; - mouse.buttons[3] = (mouse_buf[3] & 0x10) >> 4; - mouse.buttons[4] = (mouse_buf[3] & 0x20) >> 5; - if (mouse_buf[0] & 0x10) - dx=mouse_buf[1]-256; + ms_hard.bttns[0] = ms_buf[0] & 1; + ms_hard.bttns[1] = (ms_buf[0] & 2) >> 1; + ms_hard.bttns[2] = (ms_buf[0] & 4) >> 2; + ms_hard.bttns[3] = (ms_buf[3] & 0x10) >> 4; + ms_hard.bttns[4] = (ms_buf[3] & 0x20) >> 5; + if (ms_buf[0] & 0x10) + dx=ms_buf[1]-256; else - dx=mouse_buf[1]; - if (mouse_buf[0] & 0x20) - dy=256-mouse_buf[2]; + dx=ms_buf[1]; + if (ms_buf[0] & 0x20) + dy=256-ms_buf[2]; else - dy=-mouse_buf[2]; - if (mouse_buf[3] & 0x08) - dz=mouse_buf[3]&7-8; + dy=-ms_buf[2]; + if (ms_buf[3] & 0x08) + dz=ms_buf[3]&7-8; else - dz=mouse_buf[3]&7; + dz=ms_buf[3]&7; - mouse.prescale.x+=dx; - mouse.prescale.y+=dy; - mouse.prescale.z+=dz; + ms_hard.prescale.x+=dx; + ms_hard.prescale.y+=dy; + ms_hard.prescale.z+=dz; - MouseUpdatePost; + MsHardSetPost; } -U0 MouseIPSet(I64 x,I64 y,I64 z,I64 l,I64 r) +U0 MsHardSet(I64 x,I64 y,I64 z,I64 l,I64 r) { - mouse.timestamp=GetTSC; - MouseUpdatePre; - mouse.prescale.x=x/mouse.scale.x/ip_grid.x_speed; - mouse.prescale.y=y/mouse.scale.y/ip_grid.y_speed; - mouse.prescale.z=z/mouse.scale.z/ip_grid.z_speed; - mouse.buttons[0]=l; - mouse.buttons[1]=r; - MouseUpdatePost; + ms_hard.timestamp=GetTSC; + MsHardSetPre; + ms_hard.prescale.x=x/ms_hard.scale.x/ms_grid.x_speed; + ms_hard.prescale.y=y/ms_hard.scale.y/ms_grid.y_speed; + ms_hard.prescale.z=z/ms_hard.scale.z/ms_grid.z_speed; + ms_hard.bttns[0]=l; + ms_hard.bttns[1]=r; + MsHardSetPost; } -U0 KbdMouseRst() +U0 KbdMsRst() { KbdCmdFlush; FifoU8Flush(kbd.fifo2); - FifoU8Flush(mouse.fifo2); + FifoU8Flush(ms_hard.fifo2); FifoI64Flush(kbd.scan_code_fifo); kbd.scan_code=0; kbd.rst=FALSE; } -Bool MouseDriverInstall(I64 dummy=0) //can be spawned +Bool MsHardDrvrInstall(I64 dummy=0) //can be spawned { no_warn dummy; I64 i; - mouse.install_in_progress=TRUE; + ms_hard.install_in_progress=TRUE; OutU8(0xA1,InU8(0xA1)|0x10); - mouse.installed=mouse.irqs_working=FALSE; - IntEntrySet(0x2C,&IRQMouse); + ms_hard.installed=ms_hard.irqs_working=FALSE; + IntEntrySet(0x2C,&IRQMsHard); for(i=0;i<5;i++) - mouse.buttons[i]=0; - if (i=MouseRst) + ms_hard.bttns[i]=0; + if (i=MsHardRst) OutU8(0xA1,InU8(0xA1)&~0x10); - KbdMouseRst; - mouse.install_attempts++; - mouse.installed=mouse.evt=i; - mouse.install_in_progress=FALSE; - return mouse.installed; + KbdMsRst; + ms_hard.install_attempts++; + ms_hard.installed=ms_hard.evt=i; + ms_hard.install_in_progress=FALSE; + return ms_hard.installed; } -U0 KbdMouseHandler(Bool poll_kbd,Bool poll_mouse) +U0 KbdMsHndlr(Bool poll_kbd,Bool poll_ms) { - if (mouse.install_in_progress) { + if (ms_hard.install_in_progress) { Yield; return; } if (kbd.rst) - KbdMouseRst; + KbdMsRst; else { - if (poll_mouse && mouse.installed && !mouse.irqs_working) { + if (poll_ms && ms_hard.installed && !ms_hard.irqs_working) { PUSHFD CLI while (InU8(KBD_CTRL)&1) - MousePktRead; + MsHardPktRead; POPFD } @@ -255,36 +332,36 @@ U0 KbdMouseHandler(Bool poll_kbd,Bool poll_mouse) KbdPktRead; if (kbd.rst) - KbdMouseRst; + KbdMsRst; else { while (FifoU8Cnt(kbd.fifo2)) - KbdHandler; - while (FifoU8Cnt(mouse.fifo2)) - if (mouse.installed) - MouseHandler; + KbdHndlr; + while (FifoU8Cnt(ms_hard.fifo2)) + if (ms_hard.installed) + MsHardHndlr; else - KbdMouseRst; + KbdMsRst; } } } -U0 KbdMouseVarsInit() +U0 KbdMsInit() { MemSet(&kbd,0,sizeof(CKbdStateGlbls)); kbd.fifo=FifoU8New(8); kbd.fifo2=FifoU8New(64); kbd.scan_code_fifo=FifoI64New(128); kbd.irqs_working=FALSE; - MemSet(&mouse,0,sizeof(CMouseStateGlbls)); - mouse.fifo=FifoU8New(8); - mouse.fifo2=FifoU8New(64); - mouse.scale.x=0.5; - mouse.scale.y=0.5; - mouse.scale.z=1.0; - mouse.prescale.x=GR_WIDTH/mouse.scale.x/2.0; - mouse.prescale.y=GR_HEIGHT/mouse.scale.y/2.0; - mouse.prescale.z=0/mouse.scale.z; - mouse.pos.x=GR_WIDTH>>1; - mouse.pos.y=GR_HEIGHT>>1; - MemCpy(&mouse_last,&mouse,sizeof(CMouseStateGlbls)); + MemSet(&ms_hard,0,sizeof(CMsHardStateGlbls)); + ms_hard.fifo=FifoU8New(8); + ms_hard.fifo2=FifoU8New(64); + ms_hard.scale.x=0.5; + ms_hard.scale.y=0.5; + ms_hard.scale.z=1.0; + ms_hard.prescale.x=GR_WIDTH/ms_hard.scale.x/2.0; + ms_hard.prescale.y=GR_HEIGHT/ms_hard.scale.y/2.0; + ms_hard.prescale.z=0/ms_hard.scale.z; + ms_hard.pos.x=GR_WIDTH>>1; + ms_hard.pos.y=GR_HEIGHT>>1; + MemCpy(&ms_hard_last,&ms_hard,sizeof(CMsHardStateGlbls)); } diff --git a/Kernel/StrA.HC b/Kernel/StrA.HC index 97d6217..5db105d 100644 --- a/Kernel/StrA.HC +++ b/Kernel/StrA.HC @@ -322,78 +322,73 @@ _extern _STRCPY U0 StrCpy( //These bitmaps go to 0-511 so that $LK,"Lex",A="MN:Lex"$() can use them with $LK,"Token Codes",A="MN:TK_EOF"$. U32 - chars_bmp_alpha[16]= + char_bmp_alpha[16]= {0x0000000,0x00000000,0x87FFFFFF,0x07FFFFFE, 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0,0,0,0,0,0,0,0}, - chars_bmp_alpha_numeric[16]= + char_bmp_alpha_numeric[16]= {0x0000000,0x03FF0000,0x87FFFFFF,0x07FFFFFE, 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0,0,0,0,0,0,0,0}, - chars_bmp_alpha_numeric_no_at[16]= + char_bmp_alpha_numeric_no_at[16]= {0x0000000,0x03FF0000,0x87FFFFFE,0x07FFFFFE, 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0,0,0,0,0,0,0,0}, - chars_bmp_word[16]= + char_bmp_word[16]= {0x0000000,0x03FF0080,0x87FFFFFE,0x07FFFFFE, 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0,0,0,0,0,0,0,0}, - chars_bmp_filename[16]= + char_bmp_filename[16]= {0x0000000,0x03FF73FB,0xEFFFFFFF,0x6FFFFFFF, 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0,0,0,0,0,0,0,0}, - chars_bmp_dec_numeric[16]= + char_bmp_dec_numeric[16]= {0x0000000,0x03FF0000,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, - chars_bmp_hex_numeric[16]= + char_bmp_hex_numeric[16]= {0x0000000,0x03FF0000,0x7E,0x7E,0,0,0,0,0,0,0,0,0,0,0,0}, - chars_bmp_white_space[16]= - {0x80003600,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + char_bmp_white_space[16]= + {0x80002600,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, - chars_bmp_non_eol_white_space[16]= - {0x80001200,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + char_bmp_non_eol_white_space[16]= + {0x80000200,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, - chars_bmp_zero_cr_nl_cursor[16]= + char_bmp_zero_cr_nl_cursor[16]= {0x00002421,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, - chars_bmp_zero_tab_ff_cr_nl_cursor[16]= - {0x00003621,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + char_bmp_zero_tab_cr_nl_cursor[16]= + {0x00002621,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, - chars_bmp_zero_tab_ff_cr_nl_cursor_dollar[16]= - {0x00003621,0x10,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + char_bmp_zero_tab_cr_nl_cursor_dollar[16]= + {0x00002621,0x10,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, - chars_bmp_getkey[16]= - {0x80002600,0xFFFFFFFF,0xFFFFFFFF,0x7FFFFFFF, - 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, - 0,0,0,0,0,0,0,0}, - - chars_bmp_macro[16]= + char_bmp_macro[16]= {0x80002600,0xFFFFFFDF,0xFFFFFFFF,0x7FFFFFFF, 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0,0,0,0,0,0,0,0}, - chars_bmp_printable[16]= - {0x80003600,0xFFFFFFFF,0xFFFFFFFF,0x7FFFFFFF, + char_bmp_printable[16]= + {0x80002600,0xFFFFFFFF,0xFFFFFFFF,0x7FFFFFFF, 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0,0,0,0,0,0,0,0}, - chars_bmp_displayable[16]= + char_bmp_displayable[16]= {0x80000000,0xFFFFFFFF,0xFFFFFFFF,0x7FFFFFFF, 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0,0,0,0,0,0,0,0}, - chars_bmp_safe_dollar[16]= + char_bmp_safe_dollar[16]= {0x80000000,0xFFFFFFEF,0xFFFFFFFF,0x7FFFFFFF, 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0,0,0,0,0,0,0,0},//same but no dollar sign - chars_bmp_non_eol[16]= + char_bmp_non_eol[16]= {0xFFFFDBFE,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, @@ -527,14 +522,14 @@ U8 *StrUtil(U8 *_src,I64 flags) I64 ch; if (flags & SUF_REM_LEADING) - while (Bt(chars_bmp_white_space,*src)) + while (Bt(char_bmp_white_space,*src)) src++; while (ch=*src++) - if (Bt(chars_bmp_white_space,ch)) { + if (Bt(char_bmp_white_space,ch)) { if (!(flags & SUF_REM_SPACES)) { if (flags & SUF_SINGLE_SPACE) { *dst++ = CH_SPACE; - while ((ch=*src++) && Bt(chars_bmp_white_space,ch)); + while ((ch=*src++) && Bt(char_bmp_white_space,ch)); src--; } else *dst++ = ch; @@ -544,7 +539,7 @@ U8 *StrUtil(U8 *_src,I64 flags) *dst=0; if (flags & SUF_REM_TRAILING) - while (dst!=_src && (!*dst || Bt(chars_bmp_white_space,*dst))) + while (dst!=_src && (!*dst || Bt(char_bmp_white_space,*dst))) *dst-- =0; if (flags & SUF_TO_UPPER) for (dst=_src;*dst;dst++) { @@ -561,7 +556,7 @@ U8 *StrUtil(U8 *_src,I64 flags) if (flags & SUF_SAFE_DOLLAR) for (dst=_src;*dst;dst++) { ch=*dst; - if (!Bt(chars_bmp_safe_dollar,*dst)) + if (!Bt(char_bmp_safe_dollar,*dst)) *dst='.'; } if (flags & SUF_S2T) @@ -634,7 +629,7 @@ U8 *StrFind(U8 *needle,U8 *haystack_str,I64 flags=0) haystack_str=StrMatch(needle,haystack_str); if (haystack_str && flags & SFF_WHOLE_LABELS_BEFORE && haystack_str!=saved_haystack_str && - Bt(chars_bmp_alpha_numeric,*(haystack_str-1))) { + Bt(char_bmp_alpha_numeric,*(haystack_str-1))) { haystack_str++; if (*haystack_str) cont=TRUE; @@ -642,7 +637,7 @@ U8 *StrFind(U8 *needle,U8 *haystack_str,I64 flags=0) haystack_str=NULL; } if (haystack_str && flags & SFF_WHOLE_LABELS_AFTER && - Bt(chars_bmp_alpha_numeric,*(haystack_str+plen))) { + Bt(char_bmp_alpha_numeric,*(haystack_str+plen))) { haystack_str++; if (*haystack_str) cont=TRUE; diff --git a/Kernel/StrPrint.HC b/Kernel/StrPrint.HC index bc82467..a57f257 100644 --- a/Kernel/StrPrint.HC +++ b/Kernel/StrPrint.HC @@ -162,7 +162,7 @@ U8 *MPrintq(U8 *ptr,I64 flags) ptr++; for (j=0;j<2;j++) { ch1=ToUpper(*ptr++); - if (Bt(chars_bmp_hex_numeric,ch1)) { + if (Bt(char_bmp_hex_numeric,ch1)) { if (ch1<='9') i=i<<4+ch1-'0'; else diff --git a/Kernel/StrScan.HC b/Kernel/StrScan.HC index 738ab91..8e92b55 100644 --- a/Kernel/StrScan.HC +++ b/Kernel/StrScan.HC @@ -8,7 +8,7 @@ I64 Str2I64(U8 *st,I64 radix=10,U8 **_end_ptr=NULL) if (_end_ptr) *_end_ptr=st; return 0; } - while (Bt(chars_bmp_white_space,*st)) + while (Bt(char_bmp_white_space,*st)) st++; while (TRUE) switch (*st) { @@ -66,7 +66,7 @@ to avoid this. Bool neg=FALSE,neg_e=FALSE; ch=*src++; - while (Bt(chars_bmp_white_space,ch)) + while (Bt(char_bmp_white_space,ch)) ch=*src++; if (ch=='-') { neg=TRUE; @@ -84,7 +84,7 @@ to avoid this. } i=0; while (TRUE) { - if (Bt(chars_bmp_dec_numeric,ch)) + if (Bt(char_bmp_dec_numeric,ch)) i=i*10+ch-'0'; else { if (ch=='.' || ch=='e' || ch=='E') @@ -98,7 +98,7 @@ to avoid this. ch=*src++; k=0; while (TRUE) { - if (Bt(chars_bmp_dec_numeric,ch)) { + if (Bt(char_bmp_dec_numeric,ch)) { i=i*10+ch-'0'; k++; } else { @@ -116,7 +116,7 @@ to avoid this. } j=0; while (TRUE) { - if (Bt(chars_bmp_dec_numeric,ch)) + if (Bt(char_bmp_dec_numeric,ch)) j=j*10+ch-'0'; else { if (neg_e) diff --git a/Misc/DoDistro.HC b/Misc/DoDistro.HC index 07713c6..cbf4907 100644 --- a/Misc/DoDistro.HC +++ b/Misc/DoDistro.HC @@ -1,6 +1,6 @@ //Make Your own Distro by #include-ing this file. -#define STD_DISTRO_DVD_CFG "Tb\nScale2Mem(2048,0x40000)\nt \n\n\n\n" +#define STD_DISTRO_DVD_CFG "TB\nScale2Mem(2048,0x40000)\nT \n\n\n\n" U0 MakeMyISO(U8 *_out_iso_filename) {//Does everything with current drive. diff --git a/Misc/OSInstall.HC b/Misc/OSInstall.HC index 860fe76..3b19d75 100644 --- a/Misc/OSInstall.HC +++ b/Misc/OSInstall.HC @@ -20,8 +20,7 @@ U0 InstallDrv(U8 drv_let) Bool VMPrtDsk(CTask *task,CATARep *ata_drv) { if (ata_drv) { - XTalkWait(task,"PrtDsk;\nYCp%d\nYYY",ata_drv->num); - XTalkWait(task,"%d\nY\nY\n",(drv_dsk_dsk_size-DRV_HEADER)/2); + XTalkWait(task,"PrtDsk(,0.5,0.5);\nC\np%d\nY",ata_drv->num); return TRUE; } else return FALSE; @@ -33,7 +32,7 @@ U0 VMInstallDrv(CTask *task,U8 drv_let, InstallDrv(drv_let); XTalkWait(task,"BootHDIns('%C');\n\nB\n0x20000\n",drv_let); if (ata_drv) - XTalkWait(task,"Cp%d\n",ata_drv->num); + XTalkWait(task,"C\np%d\n",ata_drv->num); if (atapi_drv) XTalkWait(task,"Tp%d\n",atapi_drv->num); XTalkWait(task,"\n\n\n"); //Exit Drives,Dsk Cache,Options @@ -90,7 +89,7 @@ U0 RegularInstallWiz() WinVert(Fs->win_top,(Fs->win_top+Fs->win_bottom)>>2-1,task); WinVert(task->win_bottom+3,Fs->win_bottom); WinToTop(Fs); - XTalk(task,"Mount;\nCp"); + XTalk(task,"Mount;\nC\np"); num_hints=ATARep(FALSE,,&head); "\nInclude '$$PURPLE$$0x$$FG$$' for hexidecimal numbers.\n\n"; @@ -126,7 +125,10 @@ U0 RegularInstallWiz() DrvRep; do { st=GetStr("\nDestination Partition Letter: "); - drv_let=ToUpper(*st); + if (*st) + drv_let=Let2Let(*st); + else + drv_let=0; Free(st); } while (!('A'<=drv_let<='Z')); '\n'; @@ -148,7 +150,7 @@ U0 RegularInstallWiz() } InstallDrv(drv_let); XTalkWait(task,"BootHDIns('%C');\n\nB\n0x20000\n" - "Cs%s\n%s\n%C\n\n\n", //Exit Drives,Dsk Cache,Options + "C\ns%s\n%s\n%C\n\n\n", //Exit Drives,Dsk Cache,Options drv_let,base0,base1,'0'+unit); "$$RED$$Install Master Boot loader?$$FG$$"; if (YorN) { diff --git a/Misc/OSTestSuite.HC b/Misc/OSTestSuite.HC index 1536113..5e6df29 100644 --- a/Misc/OSTestSuite.HC +++ b/Misc/OSTestSuite.HC @@ -1,32 +1,47 @@ -U0 TS(I64 i,F64 t0) -{ - progress4=i; - progress4_max=172; - progress4_t0=t0; +I64 ts_i; +F64 ts_t0; + +U0 TS(U8 *desc) +{//We must set these because an app can call $LK,"ProgressBarsRst",A="MN:ProgressBarsRst"$. + U8 *st=MStrPrint("%d. %s",ts_i,desc); + if (*desc) + progress3_max=1; + else + progress3_max=0; + StrPrint(progress3_desc,"%*hc%s", + (PROGRESS_DESC_LEN-StrLen(st))>>1,CH_SPACE,st); + Free(st); + progress4=ts_i++; + progress4_max=170; + progress4_t0=ts_t0; *progress4_desc=0; + RegExe("TempleOS/OSTestSuite"); } -U0 TSFile(U8 *name,I64 ms=750) + +U0 TSFile(U8 *name,I64 mS=750) { - CTask *task=User("#include \"%s\";Sleep(%d);\n",name,ms); + CTask *task=User("#include \"%s\";Sleep(%d);\n",name,mS); DeathWait(&task,TRUE); } -U0 TSFileChar(U8 *name,I64 ms=750,I64 ch=CH_SPACE,Bool wait=TRUE) + +U0 TSFileChar(U8 *name,I64 mS=750,I64 ch=CH_SPACE,Bool wait=TRUE) { CTask *task=User; if (wait) XTalkWait(task,"#include \"%s\";\n",name); else XTalk(task,"#include \"%s\";\n",name); - Sleep(ms); + Sleep(mS); if (ch) PostMsgWait(task,MSG_KEY_DOWN_UP,ch,0); DeathWait(&task,TRUE); } + /* -U0 DoInputPointer() +U0 DoMouseDemo() { CTask *task=User; - XTalkWait(task,"#include \"::/Demo/Graphics/InputPointer\";\n"); + XTalkWait(task,"#include \"::/Demo/Graphics/MouseDemo\";\n"); Sleep(500); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); DeathWait(&task,TRUE); @@ -232,8 +247,8 @@ U0 DoDoodle() { CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Doodle\";\n"); - PostMsgWait(task,MSG_IP_L_DOWN,10,10); - PostMsgWait(task,MSG_IP_L_UP,100,200); + PostMsgWait(task,MSG_MS_L_DOWN,10,10); + PostMsgWait(task,MSG_MS_L_UP,100,200); Sleep(500); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); DeathWait(&task,TRUE); @@ -244,16 +259,16 @@ U0 DoSpeedLine() I64 i=PURPLE+1; //+1 because TRANSPARENT CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Speedline\";\n"); - PostMsgWait(task,MSG_IP_L_DOWN,10,10); - PostMsgWait(task,MSG_IP_L_UP,100,200); - PostMsg(task,MSG_IP_R_DOWN_UP,0,0); + PostMsgWait(task,MSG_MS_L_DOWN,10,10); + PostMsgWait(task,MSG_MS_L_UP,100,200); + PostMsg(task,MSG_MS_R_DOWN_UP,0,0); BirthWait(&task->popup_task); while (i--) PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_ESC,0); TaskWait(task); - PostMsgWait(task,MSG_IP_L_DOWN,50,10); - PostMsgWait(task,MSG_IP_L_UP,150,200); + PostMsgWait(task,MSG_MS_L_DOWN,50,10); + PostMsgWait(task,MSG_MS_L_UP,150,200); Sleep(1000); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); DeathWait(&task,TRUE); @@ -271,13 +286,6 @@ U0 DoKeyBitMap() DeathWait(&task,TRUE); } -U0 DoMountain() -{ - CTask *task=User("#include \"::/Demo/Graphics/Mountain\";\n"); - Sleep(1500); - Kill(task); -} - U0 DoDigits() { CTask *task=User; @@ -297,14 +305,14 @@ U0 DoSymmetry() { CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Symmetry\";\n"); - PostMsgWait(task,MSG_IP_R_DOWN,100,100); - PostMsgWait(task,MSG_IP_R_UP,200,200); + PostMsgWait(task,MSG_MS_R_DOWN,100,100); + PostMsgWait(task,MSG_MS_R_UP,200,200); Sleep(100); - PostMsgWait(task,MSG_IP_L_DOWN,10,10); - PostMsgWait(task,MSG_IP_L_UP,100,200); + PostMsgWait(task,MSG_MS_L_DOWN,10,10); + PostMsgWait(task,MSG_MS_L_UP,100,200); Sleep(250); - PostMsgWait(task,MSG_IP_L_DOWN,100,200); - PostMsgWait(task,MSG_IP_L_UP,400,400); + PostMsgWait(task,MSG_MS_L_DOWN,100,200); + PostMsgWait(task,MSG_MS_L_UP,400,400); Sleep(250); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); DeathWait(&task,TRUE); @@ -314,10 +322,10 @@ U0 DoBSpline() { CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/BSpline\";\n"); - PostMsgWait(task,MSG_IP_L_DOWN_UP,50,50); - PostMsgWait(task,MSG_IP_L_DOWN_UP,300,100); - PostMsgWait(task,MSG_IP_L_DOWN_UP,150,300); - PostMsgWait(task,MSG_IP_R_DOWN_UP,0,0); + PostMsgWait(task,MSG_MS_L_DOWN_UP,50,50); + PostMsgWait(task,MSG_MS_L_DOWN_UP,300,100); + PostMsgWait(task,MSG_MS_L_DOWN_UP,150,300); + PostMsgWait(task,MSG_MS_R_DOWN_UP,0,0); Sleep(1500); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); DeathWait(&task,TRUE); @@ -342,11 +350,11 @@ U0 DoStadium() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/Stadium/Stadium\";\n"); Sleep(50); - PostMsgWait(task,MSG_IP_L_DOWN_UP,100,10); + PostMsgWait(task,MSG_MS_L_DOWN_UP,100,10); Sleep(300); - PostMsgWait(task,MSG_IP_L_DOWN_UP,320,20); + PostMsgWait(task,MSG_MS_L_DOWN_UP,320,20); Sleep(300); - PostMsgWait(task,MSG_IP_L_DOWN_UP,520,10); + PostMsgWait(task,MSG_MS_L_DOWN_UP,520,10); Sleep(300); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); DeathWait(&task,TRUE); @@ -472,7 +480,7 @@ U0 DoFlatTops() TaskWait(task->popup_task); PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); DeathWait(&task->popup_task); - PostMsgWait(task,MSG_IP_R_DOWN_UP,RandI16%400+200,RandI16%300+150); + PostMsgWait(task,MSG_MS_R_DOWN_UP,RandI16%400+200,RandI16%300+150); Sleep(1500); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); DeathWait(&task,TRUE); @@ -566,8 +574,8 @@ U0 DoPixCollision() XTalkWait(task,"#include \"::/Demo/Graphics/Collision\";\n"); w=task->pix_width>>1 +task->pix_left+task->scroll_x; h=task->pix_height>>1+task->pix_top +task->scroll_y; - IPSet(w-35,h-35); - InSetIP(10,w+35,w+35); + MsSet(w-35,h-35); + InSetMs(10,w+35,w+35); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); DeathWait(&task,TRUE); } @@ -631,16 +639,16 @@ U0 DoCtrlR1() PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); PostMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); DeathWait(&task->popup_task); - PostMsgWait(task,MSG_IP_L_DOWN,150,150); - PostMsgWait(task,MSG_IP_L_UP,150,95); + PostMsgWait(task,MSG_MS_L_DOWN,150,150); + PostMsgWait(task,MSG_MS_L_UP,150,95); Sleep(250); - PostMsgWait(task,MSG_IP_L_DOWN,150,150); - PostMsgWait(task,MSG_IP_L_UP,190,190); + PostMsgWait(task,MSG_MS_L_DOWN,150,150); + PostMsgWait(task,MSG_MS_L_UP,190,190); Sleep(250); - PostMsgWait(task,MSG_IP_L_DOWN,150,150); - PostMsgWait(task,MSG_IP_L_UP,110,190); + PostMsgWait(task,MSG_MS_L_DOWN,150,150); + PostMsgWait(task,MSG_MS_L_UP,110,190); Sleep(250); - PostMsg(task,MSG_IP_R_DOWN_UP,100,100); + PostMsg(task,MSG_MS_R_DOWN_UP,100,100); //Color task_num=BirthWait(&task->popup_task,task_num); @@ -661,10 +669,10 @@ U0 DoCtrlR1() PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); PostMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); DeathWait(&task->popup_task); - PostMsgWait(task,MSG_IP_L_DOWN,150,150); - PostMsgWait(task,MSG_IP_L_UP,190,190); + PostMsgWait(task,MSG_MS_L_DOWN,150,150); + PostMsgWait(task,MSG_MS_L_UP,190,190); Sleep(250); - PostMsg(task,MSG_IP_R_DOWN_UP,100,100); + PostMsg(task,MSG_MS_R_DOWN_UP,100,100); //Exit BirthWait(&task->popup_task); @@ -691,7 +699,7 @@ U0 DoF2Macro() PostMsgWait(sys_macro_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); PostMsgWait(sys_macro_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_RIGHT); PostMsgWait(sys_macro_task,MSG_KEY_DOWN_UP,CH_SPACE,0); //Press RECORD - while (!Bt(&sys_semas[SYS_SEMA_RECORD_MACRO],0)) + while (!Bt(&sys_semas[SEMA_RECORD_MACRO],0)) Yield; while (*ptr) @@ -804,9 +812,9 @@ U0 DoBattleLines() TaskWait(task->popup_task); PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); DeathWait(&task->popup_task); - IPSet(430,300,,TRUE); - InSetIP(10,530,400); - IPSet(,,,FALSE); + MsSet(430,300,,TRUE); + InSetMs(10,530,400); + MsSet(,,,FALSE); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); DeathWait(&task,TRUE); } @@ -854,11 +862,11 @@ U0 DoDunGen() DeathWait(&task,TRUE); } -U0 DoTimeOut() +U0 DoTitanium() { I64 i; CTask *task=User; - XTalkWait(task,"#include \"::/Apps/TimeOut/Run\";\n"); + XTalkWait(task,"#include \"::/Apps/Titanium/Run\";\n"); Sleep(200); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); for (i=0;i<3;i++) { @@ -954,61 +962,61 @@ U0 DoStrut() PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); - IPSet(200,200,,TRUE); - PostMsgWait(task,MSG_IP_L_DOWN,0,0); + MsSet(200,200,,TRUE); + PostMsgWait(task,MSG_MS_L_DOWN,0,0); Refresh(2); - IPSet(GR_WIDTH-200,200,,TRUE); - PostMsgWait(task,MSG_IP_L_DOWN,0,0); + MsSet(GR_WIDTH-200,200,,TRUE); + PostMsgWait(task,MSG_MS_L_DOWN,0,0); - IPSet(GR_WIDTH/2,400,,TRUE); - PostMsgWait(task,MSG_IP_L_DOWN,0,0); + MsSet(GR_WIDTH/2,400,,TRUE); + PostMsgWait(task,MSG_MS_L_DOWN,0,0); PostMsgWait(task,MSG_KEY_DOWN_UP,'s',0); - IPSet(200,200,,TRUE); - PostMsgWait(task,MSG_IP_L_DOWN,0,0); - IPSet(GR_WIDTH-200,200,,TRUE); - PostMsgWait(task,MSG_IP_L_UP,0,0); + MsSet(200,200,,TRUE); + PostMsgWait(task,MSG_MS_L_DOWN,0,0); + MsSet(GR_WIDTH-200,200,,TRUE); + PostMsgWait(task,MSG_MS_L_UP,0,0); - IPSet(200,200,,TRUE); - PostMsgWait(task,MSG_IP_L_DOWN,0,0); - IPSet(GR_WIDTH/2,400,,TRUE); - PostMsgWait(task,MSG_IP_L_UP,0,0); + MsSet(200,200,,TRUE); + PostMsgWait(task,MSG_MS_L_DOWN,0,0); + MsSet(GR_WIDTH/2,400,,TRUE); + PostMsgWait(task,MSG_MS_L_UP,0,0); - IPSet(GR_WIDTH-200,200,,TRUE); - PostMsgWait(task,MSG_IP_L_DOWN,0,0); - IPSet(GR_WIDTH/2,400,,TRUE); - PostMsgWait(task,MSG_IP_L_UP,0,0); + MsSet(GR_WIDTH-200,200,,TRUE); + PostMsgWait(task,MSG_MS_L_DOWN,0,0); + MsSet(GR_WIDTH/2,400,,TRUE); + PostMsgWait(task,MSG_MS_L_UP,0,0); - IPSet(GR_WIDTH/2,GR_HEIGHT/2,,TRUE); - PostMsgWait(task,MSG_IP_L_DOWN,0,0); - IPSet(GR_WIDTH-200,200,,TRUE); - PostMsgWait(task,MSG_IP_L_UP,0,0); + MsSet(GR_WIDTH/2,GR_HEIGHT/2,,TRUE); + PostMsgWait(task,MSG_MS_L_DOWN,0,0); + MsSet(GR_WIDTH-200,200,,TRUE); + PostMsgWait(task,MSG_MS_L_UP,0,0); - IPSet(GR_WIDTH/2,GR_HEIGHT/2,,TRUE); - PostMsgWait(task,MSG_IP_L_DOWN,0,0); - IPSet(GR_WIDTH/2,400,,TRUE); - PostMsgWait(task,MSG_IP_L_UP,0,0); + MsSet(GR_WIDTH/2,GR_HEIGHT/2,,TRUE); + PostMsgWait(task,MSG_MS_L_DOWN,0,0); + MsSet(GR_WIDTH/2,400,,TRUE); + PostMsgWait(task,MSG_MS_L_UP,0,0); - IPSet(GR_WIDTH/2,GR_HEIGHT/2,,TRUE); - PostMsgWait(task,MSG_IP_L_DOWN,0,0); - IPSet(200,200,,TRUE); - PostMsgWait(task,MSG_IP_L_UP,0,0); + MsSet(GR_WIDTH/2,GR_HEIGHT/2,,TRUE); + PostMsgWait(task,MSG_MS_L_DOWN,0,0); + MsSet(200,200,,TRUE); + PostMsgWait(task,MSG_MS_L_UP,0,0); PostMsgWait(task,MSG_KEY_DOWN_UP,'t',0); - IPSet(GR_WIDTH/2,400,,TRUE); - PostMsgWait(task,MSG_IP_L_DOWN,0,0); - IPSet(GR_WIDTH-200,200,,TRUE); - PostMsgWait(task,MSG_IP_L_UP,0,0); + MsSet(GR_WIDTH/2,400,,TRUE); + PostMsgWait(task,MSG_MS_L_DOWN,0,0); + MsSet(GR_WIDTH-200,200,,TRUE); + PostMsgWait(task,MSG_MS_L_UP,0,0); - IPSet(GR_WIDTH/2,400,,TRUE); - PostMsgWait(task,MSG_IP_L_DOWN,0,0); - IPSet(200,200,,TRUE); - PostMsgWait(task,MSG_IP_L_UP,0,0); + MsSet(GR_WIDTH/2,400,,TRUE); + PostMsgWait(task,MSG_MS_L_DOWN,0,0); + MsSet(200,200,,TRUE); + PostMsgWait(task,MSG_MS_L_UP,0,0); - IPSet(,,,FALSE); + MsSet(,,,FALSE); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); LBts(kbd.down_bitmap,Char2ScanCode('1')); @@ -1036,28 +1044,6 @@ U0 DoRawHide() DeathWait(&task,TRUE); } -U0 DoAfterEgypt() -{ - CTask *task=User("#include \"::/Apps/AfterEgypt/Run\";\n"); - BirthWait(&task->popup_task); - Sleep(600); //It flushes messages! - PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); - DeathWait(&task->popup_task); - TaskWait(task); - Sleep(1000); - PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); //Camp - PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); - PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); - PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); - PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); - PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); //Map - Sleep(1000); - PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); //Map - PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); //Camp - PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); //Main Menu - DeathWait(&task,TRUE); -} - U0 DoPoleZeros() { CTask *task=User("#include \"::/Demo/Graphics/PoleZeros\";\n"); @@ -1073,11 +1059,11 @@ U0 DoWhap() { CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/Whap\";\n"); - IPSet(300,200); + MsSet(300,200); Sleep(500); - InSetIP(3,350,300); + InSetMs(3,350,300); Sleep(500); - InSetIP(3,450,200); + InSetMs(3,450,200); Sleep(500); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); DeathWait(&task,TRUE); @@ -1086,14 +1072,14 @@ U0 DoWhap() U0 DoGrid() { CTask *task=User("#include \"::/Demo/Graphics/Grid\";\n"); - IPSet(200,200); + MsSet(200,200); Sleep(150); - InSetIP(2,400,400); - InSetIP(2,200,400); - InSetIP(2,200,200); - IPSet(,,,TRUE); + InSetMs(2,400,400); + InSetMs(2,200,400); + InSetMs(2,200,200); + MsSet(,,,TRUE); Sleep(50); - IPSet(,,,FALSE); + MsSet(,,,FALSE); DocBottom(DocPut(task)); DeathWait(&task,TRUE); } @@ -1102,11 +1088,11 @@ U0 DoPick() { CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Pick\";\n"); - IPSet(200,200); + MsSet(200,200); Sleep(500); - IPSet(,,,TRUE); - InSetIP(4,400,400); - IPSet(,,,FALSE); + MsSet(,,,TRUE); + InSetMs(4,400,400); + MsSet(,,,FALSE); Sleep(500); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); DeathWait(&task,TRUE); @@ -1116,11 +1102,11 @@ U0 DoPick3D() { CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Pick3D\";\n"); - IPSet(200,200); + MsSet(200,200); Sleep(500); - IPSet(,,,TRUE); - InSetIP(4,400,400); - IPSet(,,,FALSE); + MsSet(,,,TRUE); + InSetMs(4,400,400); + MsSet(,,,FALSE); Sleep(500); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); DeathWait(&task,TRUE); @@ -1151,9 +1137,9 @@ U0 DoKeepAway() BirthWait(&task->popup_task); TaskWait(task->popup_task); PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); - IPSet(100,100); + MsSet(100,100); Sleep(1500); - PostMsgWait(task,MSG_IP_R_DOWN_UP,ip.pos.x,ip.pos.y); + PostMsgWait(task,MSG_MS_R_DOWN_UP,ms.pos.x,ms.pos.y); Sleep(1000); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); DeathWait(&task,TRUE); @@ -1197,22 +1183,22 @@ U0 DoMassSpring() TaskWait(task->popup_task); PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); DeathWait(&task->popup_task); - PostMsgWait(task,MSG_IP_L_DOWN_UP,50,50); //#1 - PostMsgWait(task,MSG_IP_L_DOWN_UP,50,200); //#2 - PostMsgWait(task,MSG_IP_L_DOWN_UP,210,50); //#3 - PostMsgWait(task,MSG_IP_L_DOWN_UP,310,200);//#4 + PostMsgWait(task,MSG_MS_L_DOWN_UP,50,50); //#1 + PostMsgWait(task,MSG_MS_L_DOWN_UP,50,200); //#2 + PostMsgWait(task,MSG_MS_L_DOWN_UP,210,50); //#3 + PostMsgWait(task,MSG_MS_L_DOWN_UP,310,200);//#4 Sleep(500); - PostMsgWait(task,MSG_IP_R_DOWN,50,50); //1-2 - PostMsgWait(task,MSG_IP_R_UP,50,200); + PostMsgWait(task,MSG_MS_R_DOWN,50,50); //1-2 + PostMsgWait(task,MSG_MS_R_UP,50,200); Sleep(500); - PostMsgWait(task,MSG_IP_R_DOWN,210,50);//3-4 - PostMsgWait(task,MSG_IP_R_UP,310,200); + PostMsgWait(task,MSG_MS_R_DOWN,210,50);//3-4 + PostMsgWait(task,MSG_MS_R_UP,310,200); Sleep(500); - PostMsgWait(task,MSG_IP_R_DOWN,50,200);//2-4 - PostMsgWait(task,MSG_IP_R_UP,310,200); + PostMsgWait(task,MSG_MS_R_DOWN,50,200);//2-4 + PostMsgWait(task,MSG_MS_R_UP,310,200); Sleep(500); - PostMsgWait(task,MSG_IP_R_DOWN,50,50); //1-3 - PostMsgWait(task,MSG_IP_R_UP,210,50); + PostMsgWait(task,MSG_MS_R_DOWN,50,50); //1-3 + PostMsgWait(task,MSG_MS_R_UP,210,50); Sleep(1500); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); DeathWait(&task,TRUE); @@ -1463,10 +1449,10 @@ U0 DoClickCallBack() DeathWait(&task,TRUE); } -U0 DoMenuButton() +U0 DoMenuBttn() { CTask *task=User; - XTalkWait(task,"#include \"::/Demo/DolDoc/MenuButton\";\n"); + XTalkWait(task,"#include \"::/Demo/DolDoc/MenuBttn\";\n"); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(500); PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN,0); @@ -1558,198 +1544,202 @@ U0 DoAsmAndC2() } U0 OSTestSuite() -{ //$MA+LIS-X,"RENUM",LM="I64 i;for (i=0;i<172;i++){if(i)Msg(MSG_KEY_DOWN_UP,0,SC_F3);else\"%cTS(%c\",CH_CTRLF,CH_ESC;Msg(MSG_KEY_DOWN,0,SC_CURSOR_RIGHT);Msg(MSG_KEY_DOWN,0,SC_CURSOR_RIGHT);Msg(MSG_KEY_DOWN,0,SC_CURSOR_RIGHT);\"%03d\",i;Msg(MSG_KEY_DOWN,0,SC_CURSOR_RIGHT);Msg(MSG_KEY_DOWN,0,SC_CURSOR_RIGHT);Msg(MSG_KEY_DOWN,0,SC_CURSOR_RIGHT);\"%c%c%c\",CH_BACKSPACE,CH_BACKSPACE,CH_BACKSPACE;}"$ - F64 t0=tS; +{ CTask *task; - TS(000,t0); DoBlackDiamond; - TS(001,t0); DoTalons; - TS(002,t0); DoFlatTops; - TS(003,t0); DoDunGen; - TS(004,t0); DoFPS; - TS(005,t0); DoZoneOut; - TS(006,t0); DoVaroom; - TS(007,t0); DoRocket; - TS(008,t0); DoRocketScience; - TS(009,t0); DoBattleLines; - TS(010,t0); DoBigGuns; - TS(011,t0); DoFlapBat; - TS(012,t0); DoTimeOut; - TS(013,t0); DoToTheFront; - TS(014,t0); DoPsalmody; - TS(015,t0); DoJukeBox; - TS(016,t0); if (!sys_heap_init_flag) DoSpan; //Has FloodFill - TS(017,t0); DoStrut; - TS(018,t0); DoRawHide; - TS(019,t0); DoKeepAway; - TS(020,t0); DoAfterEgypt; - TS(021,t0); DoXCaliber; - TS(022,t0); DoWenceslas; - TS(023,t0); DoBomberGolf; - TS(024,t0); DoTheDead; - TS(025,t0); DoTreeCheckers; - TS(026,t0); TSFile("::/Demo/RadixSort"); - TS(027,t0); DoMPAdd; - TS(028,t0); TSFile("::/Demo/MultiCore/Primes"); - TS(029,t0); if (FileFind(BIBLE_FILENAME)) - TSFile("::/Demo/MultiCore/Palindrome"); - TS(030,t0); TSFileChar("::/Demo/MultiCore/Clouds"); - TS(031,t0); if (mp_cnt>1) TSFile("::/Demo/MultiCore/MPRadix"); - TS(032,t0); if (mp_cnt>1 && DrvIsWritable(':')) - TSFileChar("::/Demo/MultiCore/LoadTest"); - TS(033,t0); if (mp_cnt>1) TSFile("::/Demo/MultiCore/MPPrint"); - TS(034,t0); if (mp_cnt>1) TSFile("::/Demo/MultiCore/Lock"); - TS(035,t0); if (mp_cnt>1) TSFile("::/Demo/MultiCore/Interrupts"); - TS(036,t0); TSFileChar("::/Demo/Graphics/SpritePlot"); - TS(037,t0); TSFileChar("::/Demo/Graphics/Elephant",,CH_SHIFT_ESC); - TS(038,t0); TSFileChar("::/Demo/Graphics/SpritePlot3D"); - TS(039,t0); TSFile("::/Demo/Graphics/SpritePut"); - TS(040,t0); TSFile("::/Demo/Graphics/SpritePutExt"); - TS(041,t0); TSFile("::/Demo/Graphics/SpriteText"); - TS(042,t0); TSFile("::/Demo/Graphics/SpriteRaw"); - TS(043,t0); TSFile("::/Demo/Graphics/EdSprite"); - TS(044,t0); TSFile("::/Demo/Graphics/Balloon",0); - TS(045,t0); TSFile("::/Demo/Carry"); - TS(046,t0); TSFile("::/Demo/Directives"); - TS(047,t0); DoRandDemo; - TS(048,t0); TSFileChar("::/Demo/Graphics/Extents"); - TS(049,t0); TSFileChar("::/Demo/Graphics/NetOfDots"); - TS(050,t0); TSFileChar("::/Demo/Graphics/SunMoon"); - TS(051,t0); DoLowPassFilter; - TS(052,t0); DoMathAudioDemo; - TS(053,t0); TSFileChar("::/Demo/Graphics/Lines"); - TS(054,t0); TSFileChar("::/Demo/Graphics/Bounce",,CH_SHIFT_ESC,FALSE); - TS(055,t0); DoMsgLoop; - TS(056,t0); DoASCIIOrgan; - TS(057,t0); DoMorseCode; - TS(058,t0); DoPixCollision; - TS(059,t0); DoDoodle; - TS(060,t0); DoMassSpring; - TS(061,t0); DoSpeedLine; - TS(062,t0); DoKeyBitMap; - TS(063,t0); DoMountain; - TS(064,t0); DoBSpline; - TS(065,t0); DoGrModels; - TS(066,t0); TSFileChar("::/Demo/Graphics/Blot",1800); - TS(067,t0); if (DrvIsWritable('~')) DoScrnCapture; - TS(068,t0); DoGrid; - TS(069,t0); DoPick; - TS(070,t0); DoPick3D; - TS(071,t0); DoWhap; - TS(072,t0); DoPalette; - TS(073,t0); TSFile("::/Demo/Print"); - TS(074,t0); TSFileChar("::/Demo/Graphics/Shading",1500); - TS(075,t0); TSFileChar("::/Demo/Graphics/RotateTank",1500); - TS(076,t0); TSFileChar("::/Demo/Graphics/3DPoly",1500); - TS(077,t0); TSFileChar("::/Demo/Graphics/Box",1500); - TS(078,t0); DoSymmetry; - TS(079,t0); TSFileChar("::/Demo/Graphics/Shadow",1500); - TS(080,t0); TSFileChar("::/Demo/Graphics/Transform",,CH_SHIFT_ESC); - TS(081,t0); DoPredatorPrey; - TS(082,t0); DoPoleZeros; - TS(083,t0); DoDigits; - TS(084,t0); DoStadium; - TS(085,t0); DoElephantWalk; - TS(086,t0); DoHalogen; - TS(087,t0); TSFileChar("::/Demo/Games/Maze",,CH_SHIFT_ESC); - TS(088,t0); TSFileChar("::/Demo/Graphics/FontEd",,CH_SHIFT_ESC); - TS(089,t0); DoLattice; - TS(090,t0); DoCtrlR1; - TS(091,t0); DoF2Macro; - TS(092,t0); TSFile("::/Demo/SubIntAccess"); - TS(093,t0); DoDemoDoc; - TS(094,t0); TSFile("::/Demo/DolDoc/TreeDemo"); - TS(095,t0); TSFile("::/Demo/DolDoc/TextDemo"); - TS(096,t0); TSFile("::/Demo/DolDoc/CursorMove"); - TS(097,t0); DoMiniCompiler; - TS(098,t0); TSFile("::/Demo/Lectures/MiniGrLib",0); - TS(099,t0); TSFileChar("::/Demo/TimeIns"); - TS(100,t0); DoPhoneNumWords; - TS(101,t0); TSFile("::/Demo/Dsk/UnusedSpaceRep"); - TS(102,t0); TSFile("::/Demo/Dsk/BlkDevRep"); - TS(103,t0); DoLastClass; - TS(104,t0); if (DrvIsWritable('~')) DoFPrintF; - TS(105,t0); TSFile("::/Demo/Dsk/SerializeTree"); - TS(106,t0); DoExceptions; - TS(107,t0); TSFileChar("::/Demo/ScrnCodes"); - TS(108,t0); TSFile("::/Demo/ExtChars"); - TS(109,t0); TSFile("::/Demo/Graphics/PanText",0); - TS(110,t0); TSFile("::/Demo/Graphics/CharAnimation"); - TS(111,t0); DoCharDemo; - TS(112,t0); TSFile("::/Demo/DateTime"); - TS(113,t0); TSFile("::/Demo/SubSwitch"); - TS(114,t0); TSFile("::/Demo/NullCase"); - TS(115,t0); TSFile("::/Demo/MagicPairs"); - TS(116,t0); TSFileChar("::/Demo/Graphics/Hanoi",3000); - TS(117,t0); DoSquirt; - TS(118,t0); TSFileChar("::/Demo/Graphics/CommonAncestor",1500,CH_SHIFT_ESC); - TS(119,t0); DoCartesian; - TS(120,t0); TSFileChar("::/Demo/Games/RainDrops",,CH_SHIFT_ESC); - TS(121,t0); TSFileChar("::/Demo/Games/Collision",1500); - TS(122,t0); DoLogic; - TS(123,t0); TSFile("::/Demo/CompileDemo"); - TS(124,t0); DoPrompt; - TS(125,t0); if (DrvIsWritable('~')) DoWebLog; - TS(126,t0); if (DrvIsWritable('~')) DoRevFile; - TS(127,t0); if (DrvIsWritable('~')) DoSortFile; - TS(128,t0); if (DrvIsWritable('~')) DoToHtmlToTXT; - TS(129,t0); if (DrvIsWritable('~')) TSFile("::/Demo/RegistryDemo"); - TS(130,t0); DoDefine; - TS(131,t0); TSFile("::/Demo/GlblVars"); - TS(132,t0); DoFileRead; - TS(133,t0); TSFile("::/Demo/ParenWarn"); - TS(134,t0); TSFile("::/Demo/DolDoc/DefineStr"); - TS(135,t0); TSFile("::/Demo/DolDoc/Data"); - TS(136,t0); TSFile("::/Demo/DolDoc/CallBack"); - TS(137,t0); TSFile("::/Demo/ClassMeta"); - TS(138,t0); if (DrvIsWritable('~')) DoNumBible; - TS(139,t0); DoForm; - TS(140,t0); DoClickCallBack; - TS(141,t0); DoMenuButton; - TS(142,t0); DoMenuSprite; - TS(143,t0); DoSuggestedSpelling; - TS(144,t0); TSFileChar("::/Demo/WordSearch"); - TS(145,t0); TSFile("::/Demo/StkGrow"); - TS(146,t0); TSFile("::/Demo/MemDemo"); - TS(147,t0); TSFileChar("::/Demo/Snd/WaterFowl"); - TS(148,t0); TSFile("::/Demo/Asm/AsmHelloWorld"); - TS(149,t0); DoAsmAndC1; - TS(150,t0); DoAsmAndC2; - TS(151,t0); TSFile("::/Demo/Asm/AsmAndC3"); - TS(152,t0); TSFile("::/Demo/Asm/MulByHand"); - TS(153,t0); TSFile("::/Demo/Asm/DivByHand"); - TS(154,t0); TSFile("::/Demo/Asm/BuzzFizz"); - TS(155,t0); TSFile("::/Demo/Asm/PutDec"); + ts_t0=tS; + ts_i=0; + + TS("BlackDiamond"); DoBlackDiamond; + TS("Talons"); DoTalons; + TS("FlatTops"); DoFlatTops; + TS("DunGen"); DoDunGen; + TS("FPS"); DoFPS; + TS("ZoneOut"); DoZoneOut; + TS("Varoom"); DoVaroom; + TS("Rocket"); DoRocket; + TS("RocketScience"); DoRocketScience; + TS("BattleLines"); DoBattleLines; + TS("BigGuns"); DoBigGuns; + TS("FlapBat"); DoFlapBat; + TS("Titanium"); DoTitanium; + TS("ToTheFront"); DoToTheFront; + TS("Psalmody"); DoPsalmody; + TS("JukeBox"); DoJukeBox; + TS("Span"); if (!sys_heap_init_flag) DoSpan; //Has FloodFill + TS("Strut"); DoStrut; + TS("RawHide"); DoRawHide; + TS("KeepAway"); DoKeepAway; + TS("XCaliber"); DoXCaliber; + TS("Wenceslas"); DoWenceslas; + TS("BomberGolf"); DoBomberGolf; + TS("TheDead"); DoTheDead; + TS("TreeCheckers"); DoTreeCheckers; + TS("RadixDort"); TSFile("::/Demo/RadixSort"); + TS("MPAdd"); DoMPAdd; + TS("Primes"); TSFile("::/Demo/MultiCore/Primes"); + TS("Palindrome"); if (FileFind(BIBLE_FILENAME)) + TSFile("::/Demo/MultiCore/Palindrome"); + TS("MPRadix"); if (mp_cnt>1) TSFile("::/Demo/MultiCore/MPRadix"); + TS("LoadTest"); if (mp_cnt>1 && DrvIsWritable(':')) + TSFileChar("::/Demo/MultiCore/LoadTest"); + TS("MPPrint"); if (mp_cnt>1) TSFile("::/Demo/MultiCore/MPPrint"); + TS("Lock"); if (mp_cnt>1) TSFile("::/Demo/MultiCore/Lock"); + TS("Interrupts"); if (mp_cnt>1) TSFile("::/Demo/MultiCore/Interrupts"); + TS("SpritePlot"); TSFileChar("::/Demo/Graphics/SpritePlot"); + TS("Elephants"); TSFileChar("::/Demo/Graphics/Elephant",,CH_SHIFT_ESC); + TS("SpritePlot3D"); TSFileChar("::/Demo/Graphics/SpritePlot3D"); + TS("SpritePut"); TSFile("::/Demo/Graphics/SpritePut"); + TS("SpritePutExt"); TSFile("::/Demo/Graphics/SpritePutExt"); + TS("SpriteText"); TSFile("::/Demo/Graphics/SpriteText"); + TS("SpriteRaw"); TSFile("::/Demo/Graphics/SpriteRaw"); + TS("EdSprite"); TSFile("::/Demo/Graphics/EdSprite"); + TS("Balloon"); TSFile("::/Demo/Graphics/Balloon",0); + TS("Carry"); TSFile("::/Demo/Carry"); + TS("Directives"); TSFile("::/Demo/Directives"); + TS("RandDemo"); DoRandDemo; + TS("Extents"); TSFileChar("::/Demo/Graphics/Extents"); + TS("NetOfDots"); TSFileChar("::/Demo/Graphics/NetOfDots"); + TS("SunMoon"); TSFileChar("::/Demo/Graphics/SunMoon"); + TS("LowPassFilter"); DoLowPassFilter; + TS("MathAudioDemo"); DoMathAudioDemo; + TS("Lines"); TSFileChar("::/Demo/Graphics/Lines"); + TS("Bounce"); TSFileChar("::/Demo/Graphics/Bounce",,CH_SHIFT_ESC,FALSE); + TS("MsgLoop"); DoMsgLoop; + TS("ASCIIOrgan"); DoASCIIOrgan; + TS("MorseCode"); DoMorseCode; + TS("PixCollision"); DoPixCollision; + TS("Doodle"); DoDoodle; + TS("MassSpring"); DoMassSpring; + TS("SpeedLine"); DoSpeedLine; + TS("KeyBitMap"); DoKeyBitMap; + TS("BSpline"); DoBSpline; + TS("GrModels"); DoGrModels; + TS("Blot"); TSFileChar("::/Demo/Graphics/Blot",1800); + TS("ScrnCapture"); if (DrvIsWritable('~')) DoScrnCapture; + TS("Grid"); DoGrid; + TS("Pick"); DoPick; + TS("Pick3D"); DoPick3D; + TS("Whap"); DoWhap; + TS("Palette"); DoPalette; + TS("Print"); TSFile("::/Demo/Print"); + TS("Shading"); TSFileChar("::/Demo/Graphics/Shading",1500); + TS("RotateTank"); TSFileChar("::/Demo/Graphics/RotateTank",1500); + TS("3DPoly"); TSFileChar("::/Demo/Graphics/3DPoly",1500); + TS("Box"); TSFileChar("::/Demo/Graphics/Box",1500); + TS("Symmetry"); DoSymmetry; + TS("Shadow"); TSFileChar("::/Demo/Graphics/Shadow",1500); + TS("Transform"); TSFileChar("::/Demo/Graphics/Transform",,CH_SHIFT_ESC); + TS("PredatorPrey"); DoPredatorPrey; + TS("PoleZeros"); DoPoleZeros; + TS("Digits"); DoDigits; + TS("Stadium"); DoStadium; + TS("ElephantWalk"); DoElephantWalk; + TS("Halogen"); DoHalogen; + TS("Maze"); TSFileChar("::/Demo/Games/Maze",,CH_SHIFT_ESC); + TS("FontEd"); TSFileChar("::/Demo/Graphics/FontEd",,CH_SHIFT_ESC); + TS("Lattice"); DoLattice; + TS("CtrlR1"); DoCtrlR1; + TS("F2Macro"); DoF2Macro; + TS("SubIntAccess"); TSFile("::/Demo/SubIntAccess"); + TS("DemoDoc"); DoDemoDoc; + TS("TreeDemo"); TSFile("::/Demo/DolDoc/TreeDemo"); + TS("TextDemo"); TSFile("::/Demo/DolDoc/TextDemo"); + TS("CursorMove"); TSFile("::/Demo/DolDoc/CursorMove"); + TS("MiniCompiler"); DoMiniCompiler; + TS("MiniGrLib"); TSFile("::/Demo/Lectures/MiniGrLib",0); + TS("TimeIns"); TSFileChar("::/Demo/TimeIns"); + TS("PhoneNumWords"); DoPhoneNumWords; + TS("UnusedSpaceRep"); TSFile("::/Demo/Dsk/UnusedSpaceRep"); + TS("BlkDevRep"); TSFile("::/Demo/Dsk/BlkDevRep"); + TS("LastClass"); DoLastClass; + TS("FPrintF"); if (DrvIsWritable('~')) DoFPrintF; + TS("SerializeTree"); TSFile("::/Demo/Dsk/SerializeTree"); + TS("Exceptions"); DoExceptions; + TS("ScrnDCodes"); TSFileChar("::/Demo/ScrnCodes"); + TS("ExtChars"); TSFile("::/Demo/ExtChars"); + TS("PanText"); TSFile("::/Demo/Graphics/PanText",0); + TS("CharAnimation"); TSFile("::/Demo/Graphics/CharAnimation"); + TS("CharDemo"); DoCharDemo; + TS("DateTime"); TSFile("::/Demo/DateTime"); + TS("SubSwitch"); TSFile("::/Demo/SubSwitch"); + TS("NullCase"); TSFile("::/Demo/NullCase"); + TS("Magicpairs"); TSFile("::/Demo/MagicPairs"); + TS("Hanoi"); TSFileChar("::/Demo/Graphics/Hanoi",3000); + TS("Squirt"); DoSquirt; + TS("CommonAncestor"); + TSFileChar("::/Demo/Graphics/CommonAncestor",1500,CH_SHIFT_ESC); + TS("Cartesian"); DoCartesian; + TS("RainDrops"); TSFileChar("::/Demo/Games/RainDrops",,CH_SHIFT_ESC); + TS("Collision"); TSFileChar("::/Demo/Games/Collision",1500); + TS("Logic"); DoLogic; + TS("CompileDemo"); TSFile("::/Demo/CompileDemo"); + TS("Prompt"); DoPrompt; + TS("WebLog"); if (DrvIsWritable('~')) DoWebLog; + TS("RevFile"); if (DrvIsWritable('~')) DoRevFile; + TS("SortFile"); if (DrvIsWritable('~')) DoSortFile; + TS("ToHtmlToTXT"); if (DrvIsWritable('~')) DoToHtmlToTXT; + TS("RegistryDemo"); if (DrvIsWritable('~')) + TSFile("::/Demo/RegistryDemo"); + TS("Define"); DoDefine; + TS("GlblVars"); TSFile("::/Demo/GlblVars"); + TS("FileRead"); DoFileRead; + TS("ParenWarn"); TSFile("::/Demo/ParenWarn"); + TS("DefineStr"); TSFile("::/Demo/DolDoc/DefineStr"); + TS("Data"); TSFile("::/Demo/DolDoc/Data"); + TS("CallBack"); TSFile("::/Demo/DolDoc/CallBack"); + TS("ClassMeta"); TSFile("::/Demo/ClassMeta"); + TS("NumBible"); if (DrvIsWritable('~')) DoNumBible; + TS("Form"); DoForm; + TS("ClickCallBack"); DoClickCallBack; + TS("MenuBttn"); DoMenuBttn; + TS("MenuSprite");DoMenuSprite; + TS("SuggestedSpelling"); DoSuggestedSpelling; + TS("WordSearch"); TSFileChar("::/Demo/WordSearch"); + TS("StkGrow"); TSFile("::/Demo/StkGrow"); + TS("MemDemo"); TSFile("::/Demo/MemDemo"); + TS("WaterFowl"); TSFileChar("::/Demo/Snd/WaterFowl"); + TS("AsmHelloWorld"); TSFile("::/Demo/Asm/AsmHelloWorld"); + TS("AsmAndC1"); DoAsmAndC1; + TS("AsmAndC2"); DoAsmAndC2; + TS("AsmAndC3"); TSFile("::/Demo/Asm/AsmAndC3"); + TS("MulByHand"); TSFile("::/Demo/Asm/MulByHand"); + TS("DivByHand"); TSFile("::/Demo/Asm/DivByHand"); + TS("BuzzFizz"); TSFile("::/Demo/Asm/BuzzFizz"); + TS("PutDec"); TSFile("::/Demo/Asm/PutDec"); task=User; - TS(156,t0); XTalkWait(task,"DocMax;Prof;HeapLog(ON);\n"); - TS(157,t0); XTalkWait(task,"PCIRep;Sleep(750);\n"); - TS(158,t0); XTalkWait(task,"MemBIOSRep;Sleep(750);\n"); - TS(159,t0); XTalkWait(task,"MemRep;Sleep(750);\n"); - TS(160,t0); XTalkWait(task,"ZipRep;Sleep(750);\n"); - TS(161,t0); XTalkWait(task,"ProfRep;Sleep(750);\n"); - TS(162,t0); XTalkWait(task,"HeapLogSizeRep;Sleep(750);\n"); - TS(163,t0); if (mp_cnt>1) XTalkWait(task,"CPURep(TRUE);Sleep(750);\n"); - TS(164,t0); if (DrvIsWritable(':')) XTalkWait(task,"ChkDsk;Sleep(750);\n"); - TS(165,t0); if (DrvIsWritable(':')) { + TS("Prof"); XTalkWait(task,"DocMax;Prof;HeapLog(ON);\n"); + TS("PCIRep"); XTalkWait(task,"PCIRep;Sleep(750);\n"); + TS("MemBIOSRep"); XTalkWait(task,"MemBIOSRep;Sleep(750);\n"); + TS("MemPageRep"); XTalkWait(task,"MemPageRep;Sleep(750);\n"); + TS("MemRep"); XTalkWait(task,"MemRep;Sleep(750);\n"); + TS("ZipRep"); XTalkWait(task,"ZipRep;Sleep(750);\n"); + TS("ProfRep"); XTalkWait(task,"ProfRep;Sleep(750);\n"); + TS("HeapLogSizeRep"); XTalkWait(task,"HeapLogSizeRep;Sleep(750);\n"); + TS("CPURep"); if (mp_cnt>1) + XTalkWait(task,"CPURep(TRUE);Sleep(750);\n"); + TS("ChkDsk"); if (DrvIsWritable(':')) + XTalkWait(task,"ChkDsk;Sleep(750);\n"); + TS("DrvView"); if (DrvIsWritable(':')) { XTalkWait(task,"DrvView;\n"); Sleep(750); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); } - TS(166,t0); if (DrvIsWritable(':')) { + TS("DskView"); if (DrvIsWritable(':')) { XTalkWait(task,"DskView;\n"); Sleep(250); //Short because ATARep takes time. PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); } - TS(167,t0); XTalkWait(task,"ATARep;\npSleep(750);\n"); - TS(168,t0); XTalkWait(task, + TS("ATARep"); XTalkWait(task,"ATARep;\npSleep(750);\n"); + TS("HashDepthRep"); XTalkWait(task, "HashDepthRep(adam_task->hash_table);Sleep(750);\n"); - TS(169,t0); XTalkWait(task,"Who;Sleep(750);\n"); - TS(170,t0); XTalkWait(task,"DrvRep;Sleep(750);\n"); - TS(171,t0); XTalkWait(task,"TaskRep;Sleep(750);\n"); + TS("Who"); XTalkWait(task,"Who;Sleep(750);\n"); + TS("DrvRep"); XTalkWait(task,"DrvRep;Sleep(750);\n"); + TS("TaskRep"); XTalkWait(task,"TaskRep;Sleep(750);\n"); DeathWait(&task,TRUE); - ProgressBarsRst; - "Elapsed Time:%5.3f\n",tS-t0; + ProgressBarsRst("TempleOS/OSTestSuite"); + "Elapsed Time:%5.3f\n",tS-ts_t0; } OSTestSuite; diff --git a/Misc/PCIDevices.DD b/Misc/PCIDevices.DD index 86075c8..0869f60 100644 --- a/Misc/PCIDevices.DD +++ b/Misc/PCIDevices.DD @@ -212,7 +212,7 @@ 602C SN9C102C home made 602D VID_0C45&PID_6480&MI_00 USB Webcam 6030 USB\VID_0C45&PID_6029\5&18D8BE1C&0&1 USB WebCam - 610C USB\VID_0C45&PID_610B\7&3211544E$$0$$2 usb web camera + 610C USB\VID_0C45&PID_610B\7&3211544E$$$$0$$$$2 usb web camera 6128 USB\VID_0C45&PID_613C&REV_0101 USB веб-камера 6128_ USB\VID_0C45&PID_6148&REV_0101 USB PC Camera Plus 6129 USB\VID_0C45&PID_6128\5&3875c171&0&1 USB WebCam diff --git a/Misc/Tour/Tour.IN b/Misc/Tour/Tour.IN index c804d4d..7e485b9 100644 --- a/Misc/Tour/Tour.IN +++ b/Misc/Tour/Tour.IN @@ -13,8 +13,8 @@ U0 TourPutTask() Fs->border_src=BDS_CONST; Fs->border_attr=LTGRAY<<4+DrvTextAttrGet(':')&15; Fs->text_attr =LTGRAY<<4+BLUE; - Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_BORDER-WIF_SELF_IP_L - -WIF_SELF_IP_R-WIG_DBL_CLICK; + Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_BORDER-WIF_SELF_MS_L + -WIF_SELF_MS_R-WIG_DBL_CLICK; doc=DocPut; doc->flags|=DOCF_FORM; DocCursor(FALSE,doc); @@ -29,13 +29,13 @@ U0 TourPutTask() if (ch==CH_SPACE && doc->cur_entry!=doc) { if (doc->cur_entry->de_flags & DOCEF_LINK) '' CH_SPACE; - else if (doc->cur_entry->type_u8==DOCT_BUTTON) + else if (doc->cur_entry->type_u8==DOCT_BTTN) tour_okay_pressed=TRUE; } DocUnlock(doc); if (tour_okay_pressed) { - Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_BORDER-WIF_SELF_IP_L - -WIF_SELF_IP_R-WIG_DBL_CLICK; + Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_BORDER-WIF_SELF_MS_L + -WIF_SELF_MS_R-WIG_DBL_CLICK; if (sys_focus_task==Fs) WinRefocus; } else { @@ -67,7 +67,7 @@ U0 TourPut(U8 *st,Bool wait_okay=FALSE) DocClear(doc); } } else - ThrowBreak(tour_task); + Kill(tour_task,,TRUE); } public I64 PopUpTourPart() diff --git a/Misc/Tour/Tour1.IN b/Misc/Tour/Tour1.IN index c722ef1..10ba1ea 100644 --- a/Misc/Tour/Tour1.IN +++ b/Misc/Tour/Tour1.IN @@ -45,13 +45,13 @@ U0 RevealPopUpHelp(I64 scf) while (kbd.scan_code&(SCF_CTRL|SCF_ALT|SCF_SHIFT)==scf) { ScanKey(,,TRUE); if (1.0win_inhibit,WIf_SELF_KEY_DESC,old_key_desc); - Snd(0); + Snd; } while (tS-t0<1.0); } diff --git a/DoOnce.HC b/Once.HC similarity index 85% rename from DoOnce.HC rename to Once.HC index f349aff..851790f 100644 --- a/DoOnce.HC +++ b/Once.HC @@ -3,18 +3,19 @@ //This file is executed by the //first terminal window upon start-up. -//See $LK,"DoOnce",A="FF:/Home/HomeSys.HC,DoOnce"$ and $LK,"Home Files",A="FF:::/Doc/GuideLines.DD,/Home Files"$. +//See $LK,"Once",A="FF:/Home/HomeSys.HC,Once"$ and $LK,"Home Files",A="FF:::/Doc/GuideLines.DD,/Home Files"$. //Delete the rest from this file. -U0 DoOnce() +U0 Tmp() { + OnceExe; switch (sys_boot_src.u16[0]) { case BOOT_SRC_ROM: "Continue booting hard drive "; if (YorN) { DocBottom; - ExeFile("C:/Home/DoOnce"); + ExeFile("C:/Home/Once"); } break; case BOOT_SRC_DVD: @@ -51,4 +52,4 @@ U0 DoOnce() } } -DoOnce; +Tmp; diff --git a/PersonalMenu.DD b/PersonalMenu.DD index d9a13d8..6baea9b 100644 Binary files a/PersonalMenu.DD and b/PersonalMenu.DD differ diff --git a/StartOS.HC b/StartOS.HC index 7a27479..24ba9b3 100644 --- a/StartOS.HC +++ b/StartOS.HC @@ -28,6 +28,9 @@ LBts(&Fs->display_flags,DISPLAYf_CHILDREN_NOT_ON_TOP); LBts(&Fs->display_flags,DISPLAYf_SHOW); RegInit; LBts(&sys_run_level,RLf_REGISTRY); +if (!ins_reg.registered) + InsUnreg; + WallPaperInit; if (DrvIsWritable) @@ -40,4 +43,4 @@ LBts(&sys_run_level,RLf_HOME); #help_index "" #include "/Home/MakeHome" -//After this file, the Adam task enters $LK,"server mode",A="HI:Task/Srv"$. +//After this file, the Adam task enters $LK,"server mode",A="HI:Job"$.