|
|
|
|
Win32·J½s±Ðµ{¤
±z¬O²Ä
282ÓÂsÄýªÌ
¦³Ãö¥\¯àªí©M¥[³tÁä
¥\¯àªí¬OWindows¼Ð·Ç¤¶±ªº³Ì«nªº²Õ¦¨³¡¤À¡Aµøµ¡ªº¥\¯àªí±ø¦ì©ó¼ÐÃDÄæªº¤U¤è¡A³oÓ¥\\¯àªí³q±`³QºÙ¬°¥D¥\¯àªí¡A¦C¦b¥D¥\\¯àªí¤U±ªº¥\¯àªí¶µ³QºÙ¬°¤U©Ô¦¡µæ³æ¡A©Î¼u¥X¦¡µæ³æ¡B¤l¥\\¯àªíµ¥¡A¦Ó¦b¼ÐÃDÄæ¥ªÃ䪺¹Ï¥Ü¤WÂIÀ»¤]·|¼u¥X¤@Ó¥\¯àªí¡A¥s°µ¨t²Î¥\\¯àªí¡C¥[³tÁä¹ê»Ú¤W¬O¥\¯àªí¶µªº§Ö±¶Áä¡AÀ³¥Îµ{¦¡±`¦b¥\\¯àªí¶µªº¥kÃä¼Ð¥X±Ò°Ê³oÓ¥\¯àªí¶µªº§Ö±¶Áä¡A³o´N¬O¥[³tÁä¡C¥\\¯àªíªºµ²ºc¬O¥i´O®Mªº¡A¤]´N¬O»¡¡A§A¥i¥H¦b¿ï¾Ü¤@Ó¥\¯àªí¶µ®É¼u¥X¥t¤@Ó¥\\¯àªí¡Cµæ³æ¶µªººØÃþ¦³¥¿±`ªº¡B³Q¸T¥Îªº¡B¦Ç¤Æªº¡B¤ô·Ç¤À¹j½uµ¥¡C¥»¸`ªº¥Ü½dµ{¦¡ºt¥Ü¤F¦UºØÃþ«¬ªº¥\¯àªí¡G§A¥i¥H¦b¥D¥\\¯àªí¤¤¬Ý¨ì¥¿±`ªº©M¸T¥Îªº¡B¦Ç¤Æªº¥\¯àªí¡A¥i¥H¥Î¥kÁ䳿À»µøµ¡ªº¥ô¤@³¡¤À¼u¥X¤@Ó¡§¼u¥X¦¡¥\\¯àªí¡¨¡A¤]¥i¥H¬Ý¨ì§Ú¦b¨t²Î¥\¯àªí¤¤²K¥[¤F´X¶µ·sªº¤º®e¡C
¦b½sµ{ªº³B²z¤¤¡A¥\¯àªí¬O¦b¸ê·½Àɮפ¤©w¸qªº¡]·íµM¡A§A¥i¥H¤£¥Î¸ê·½ÀɮסA¦Ó¦bµ{¦¡¤¤¥ÎAppendMenu¤@¶µ¤@¶µªº²K¥[¡A¦ý¨Ï¥Î¸ê·½ÀÉ®×µLºÃ¬O³Ì²³æªº¿ìªk¡^¡AµM«á¦bµ{¦¡¤¤¥ÎLoadMenu¨ÓÀò±o¥\¯àªí±±¨î½X¦A¨Ï¥Î¡C¦b¸ê·½Àɮפ¤©w¸q¥\\¯àªíªº»yªk¦p¤U¡G µæ³æID menu discardable
BEGIN
popup "¥Dµæ³æ¶µ¤@"
BEGIN
menuitem "¼u¥X¦¡µæ³æ¶µ¤@", ©R¥OID [,OPTION]
menuitem "¼u¥X¦¡µæ³æ¶µ¤G", ©R¥OID [,OPTION]
menuitem separator
menuitem "¼u¥X¦¡µæ³æ¶µ¤T", ©R¥OID [,OPTION]
...
END
popup "¥Dµæ³æ¶µ¤G"
BEGIN
menuitem "¼u¥X¦¡µæ³æ¶µ¤@", ©R¥OID [,OPTION]
menuitem "¼u¥X¦¡µæ³æ¶µ¤G", ©R¥OID [,OPTION]
menuitem "¼u¥X¦¡µæ³æ¶µ¤T", ©R¥OID [,OPTION]
...
popup "´O®Mªºµæ³æ¶µ"
BEGIN
menuitem "¼u¥X¦¡µæ³æ¶µ¤@", ©R¥OID [,OPTION]
menuitem "¼u¥X¦¡µæ³æ¶µ¤G", ©R¥OID [,OPTION]
menuitem "¼u¥X¦¡µæ³æ¶µ¤T", ©R¥OID [,OPTION]
...
END
END
...
END
¥\¯àªíID´N¬O§Ú̦bµ{¦¡¤¤¥ÎLoadMenu¸Ë¤J¥\¯àªí¥Î¨ìªº¸ê·½½s¸¹¡Amenuitem separator ©w¸q¤F¤À¹j¥\¯àªí¶µ¥Îªº¤ô¥½u¡A¥\\¯àªí¶µ©w¸q¤¤ªºoption¬OÄݩʡA¦pGRAYED¬O¦Ç¤Æªº¡AINACTIVE¬O³Q¸T¥Îªºµ¥µ¥¡C¦Ó¥[³tÁä¹ê»Ú¤W´N¬O©w¸q¤F¹ïÀ³¤_¦UÓ¥\¯àªí¶µªº¼öÁä¡A©w¸q¤èªk¦p¤U¡G
¥[³tÁäID accelerators
BEGIN
VK_F1, ¹ïÀ³ªº¥\¯àªí©R¥OID, VIRTKEY
VK_F2, ¹ïÀ³ªº¥\¯àªí©R¥OID, VIRTKEY
...
"A", ¹ïÀ³ªº¥\¯àªí©R¥OID, VIRTKEY,CONTROL
"B", ¹ïÀ³ªº¥\¯àªí©R¥OID, VIRTKEY,CONTROL
END
¨ä¤¤¡A¥[³tÁäID¬O§Ú̦bµ{¦¡¤¤¥ÎLoadAccelerator¸Ë¤J¥[³tÁ䪺¸ê·½½s¸¹¡A¤U±ªº¨C¤@¶µ©w¸q¤F¤@ÓÁä¡AVK_F1ªí¥Ü¥ÎF1¡A¡§A¡¨ªí¥ÜÁäA¡A¤U±ªºVIRTKEY¬O¥²»Ýªº¡A¦A¤U±ªºCONTROL¡§©ÎSHIFT¡BALT¡¨ªí¥Ü¥ÎCONTROLÁä²Õ¦X¡A¤]´N¬O»¡¡A¦pªG§A©w¸q¤F¡G"C",IDM_COPY,VIRTKEY,CONTROL ¦Ó¥B¦b¥\¯àªí©w¸q¤¤©w¸q¤F menuitem "«þ¨©",IDM_COPY¡A¨º»ò¡A§A¦bµ{¦¡¤¤«ö¤UCtrl-C¹ê»Ú¤W´N¬O°õ¦æ¤F¥\¯àªí¶µ¡§«þ¨©¡¨¡C
¥\¯àªí©M¥[³tÁ䪺½sµ{¬O«Ü²³æªº¡Aªì©l¤Æªº³¡¤À§A»Ýn°µ¥H¤U¨Æ±¡¡G
¨ú±oµ{¦¡ªº¹ê¨Ò±±¨î½X(hInstance)
¥ÎLoadMenu¸Ë¤J¥\¯àªí¡A±o¨ì¥\\¯àªí±±¨î½X
¥ÎLoadAccelerator¸Ë¤J¥[³tÁä¡A±o¨ì¥[³tÁä±±¨î½X
µù¥Uµøµ¡Ãþ
³Ð«Øµøµ¡®É¦b°Ñ¼Æ¤¤¨î©w¥\¯àªí±±¨î½X
Åã¥Üµøµ¡
µM«á¶i¤J®ø®§°j°é¡A¦b®ø®§°j°é¤¤¥ÎTranslateAccelerator¨Ó¶i¦æ¥[³tÁ䪺ÀË´ú¡]¸Ô¨£®Ú·½µ{¦¡¡^
·íµøµ¡Åã¥Ü«á¡A·í¤@Ó¥\¯àªí¶µ©Î¤@Ó¥[³tÁä³Q«ö¤U®É¡AWindows¦Vµøµ¡¹Lµ{µo°eWM_COMMAND®ø®§¡A¦Ó·í¤@Ó¨t²Î¥\¯àªí¤¤ªº¥\\¯àªí¶µ³Q«ö¤U®É¡AWindows ¦Vµøµ¡¹Lµ{µo°eWM_SYSCOMMAND¡A¥\¯àªí¶µ©R¥OªºID´N¥]¬A¦bwParamªº§C16¦ì¤¤¡A¦b¤@¯ëªº½sµ{¤¤¡A¦pªG§Ṳ́£¹ï¨t²Î¥\¯àªí®ø®§¶i¦æ³B²z¡A¨º»ò¥u»Ý¦bWM_COMMAND®ø®§ªº³B²z¤¤«Ø¥ß¤@¬q .if/.elseif/.elseif .../.endifªº»y¥y¹ï¦UÓ¥\¯àªí©R¥OID¶i¦æ³B²z´N¦æ¤F¡C
¨Ï¥Î¥\¯àªí©M¥[³tÁ䪺®Ú·½µ{¦¡
.386
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Programmed by ù¶³±l, bigluo@telekbird.com.cn
; Website: http://asm.yeah.net
; LuoYunBin's Win32 ASM page (ù¶³±lªº½sµ{¼Ö¶é)
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.model flat, stdcall
option casemap :none ; case sensitive
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include ¼Æ¾Ú
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include user32.inc
include kernel32.inc
include comctl32.inc
include comdlg32.inc
include shell32.inc
include gdi32.inc
includelib user32.lib
includelib kernel32.lib
includelib comctl32.lib
includelib comdlg32.lib
includelib shell32.lib
includelib gdi32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Equ ¼Æ¾Ú
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
IDI_MAIN equ 1000 ;icon
IDA_MAIN equ 2000 ;Accelerator
IDM_MAIN equ 4000
IDM_OPEN equ 4101
IDM_OPTION equ 4102
IDM_EXIT equ 4103
IDM_SETFONT equ 4201
IDM_SETCOLOR equ 4202
IDM_FIND equ 4203
IDM_FINDPREV equ 4204
IDM_FINDNEXT equ 4205
IDM_TOOLBAR equ 4206
IDM_TOOLBARTEXT equ 4207
IDM_INPUTBAR equ 4208
IDM_STATUSBAR equ 4209
IDM_HELP equ 4301
IDM_ABOUT equ 4302
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; ¸ê®Æ¬q
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data?
hIcon dd ?
hInstance dd ?
hWinMain dd ?
hMenu dd ?
hSubMenu dd ?
szBuffer db 256 dup (?)
dwFlag dd ?
;********************************************************************
; ¼Ð»x¦ì¤¸©w¸q
F_TOOLBAR equ 00000001b
F_TOOLBARTEXT equ 00000010b
F_INPUTBAR equ 00000100b
F_STATUSBAR equ 00001000b
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; ¸ê®Æ¬q
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data
szClassName db "Menu Example",0
szCaptionMain db 'µæ³æÀ³¥Î¥Ü¨Ò',0
szMenuHelp db "À°§U¥DÃD(&H)",0
szMenuAbout db "Ãö©ó¥»µ{¦¡(&A)...",0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; ¥N½X¬q
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
include Debug.asm
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; µ{¦¡¶}©l
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
call _WinMain
invoke ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; ¥Dµøµ¡µ{¦¡
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_WinMain proc
local @stWcMain:WNDCLASSEX
local @stMsg:MSG
local @hAccelerator
invoke InitCommonControls
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke LoadIcon,hInstance,IDI_MAIN
mov hIcon,eax
invoke LoadMenu,hInstance,IDM_MAIN
mov hMenu,eax
;*************** µù¥Uµøµ¡Ãþ *****************************************
invoke LoadCursor,0,IDC_ARROW
mov @stWcMain.hCursor,eax
mov @stWcMain.cbSize,sizeof WNDCLASSEX
mov @stWcMain.hIconSm,0
mov @stWcMain.style,CS_HREDRAW or CS_VREDRAW
mov @stWcMain.lpfnWndProc,offset WndMainProc
mov @stWcMain.cbClsExtra,0
mov @stWcMain.cbWndExtra,0
mov eax,hInstance
mov @stWcMain.hInstance,eax
mov @stWcMain.hIcon,0
mov @stWcMain.hbrBackground,COLOR_WINDOW + 1
mov @stWcMain.lpszClassName,offset szClassName
mov @stWcMain.lpszMenuName,0
invoke RegisterClassEx,addr @stWcMain
;*************** «Ø¥ß¿é¥Xµøµ¡ ***************************************
invoke CreateWindowEx,WS_EX_CLIENTEDGE,\
offset szClassName,offset szCaptionMain,\
WS_OVERLAPPEDWINDOW OR WS_VSCROLL OR WS_HSCROLL,\
100,100,550,300,\
NULL,hMenu,hInstance,NULL
invoke ShowWindow,hWinMain,SW_SHOWNORMAL
invoke UpdateWindow,hWinMain
;*************** ®ø®§°j°é *******************************************
invoke LoadAccelerators,hInstance,IDA_MAIN
mov @hAccelerator,eax
.while TRUE
invoke GetMessage,addr @stMsg,NULL,0,0
.break .if eax == 0
invoke TranslateAccelerator,hWinMain,@hAccelerator,addr @stMsg
.if eax == 0
invoke TranslateMessage,addr @stMsg
invoke DispatchMessage,addr @stMsg
.endif
.endw
ret
_WinMain endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
WndMainProc proc uses ebx edi esi, \
hWnd WORD,uMsg WORD,wParam WORD,lParam:DWORD
local @stPos OINT
mov eax,uMsg
.if eax == WM_CREATE
mov eax,hWnd
mov hWinMain,eax
call _Init
;********************************************************************
.elseif eax == WM_COMMAND
.if lParam == 0
mov eax,wParam
movzx eax,ax
.if eax == IDM_EXIT
call _Quit
.elseif eax == IDM_TOOLBAR
xor dwFlag,F_TOOLBAR
call _MenuStatus
.elseif eax == IDM_TOOLBARTEXT
xor dwFlag,F_TOOLBARTEXT
call _MenuStatus
.elseif eax == IDM_INPUTBAR
xor dwFlag,F_INPUTBAR
call _MenuStatus
.elseif eax == IDM_STATUSBAR
xor dwFlag,F_STATUSBAR
call _MenuStatus
.else
_Debug "¥\¯àªí©R¥O\","©R¥OID",eax
.endif
.endif
;********************************************************************
.elseif eax == WM_SYSCOMMAND
mov eax,wParam
movzx eax,ax
.if eax == IDM_HELP || eax == IDM_ABOUT
_Debug "¥\¯àªí©R¥O\","©R¥OID",eax
.else
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.endif
;********************************************************************
; «ö¤U¥kÁä®É¼u¥X¤@ÓPOPUP¥\¯àªí
;********************************************************************
.elseif eax == WM_RBUTTONDOWN
invoke GetCursorPos,addr @stPos
invoke TrackPopupMenu,hSubMenu,TPM_LEFTALIGN,@stPos.x,@stPos.y,NULL,hWnd,NULL
;********************************************************************
.elseif eax == WM_CLOSE
call _Quit
;********************************************************************
.else
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.endif
;********************************************************************
; ª`·N¡GWndProc ³B²z Windows ®ø®§«á¡A¥²¶·¦b Eax ¤¤ªð¦^ 0
; ¦ý¬O¥Ñ DefWindowProc ³B²z«áªºªð¦^Ȥ£¯à§ïÅÜ¡A§_«hµøµ¡
; ±NµLªkÅã¥Ü!
;********************************************************************
xor eax,eax
ret
WndMainProc endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; ¥Dµøµ¡±±¨î°Æµ{¦¡
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_Init proc
local @hSysMenu
invoke SendMessage,hWinMain,WM_SETICON,ICON_SMALL,hIcon
;********************************************************************
; POPUP¥\¯àªín¥Î¨ì¤l¥\\¯àªí¤~¯à¹ê²{
;********************************************************************
invoke GetSubMenu,hMenu,1
mov hSubMenu,eax
call _MenuStatus
;********************************************************************
; ¦b¨t²Î¥\¯àªí¤¤²K¥[¥\\¯àªí¶µ
;********************************************************************
invoke GetSystemMenu,hWinMain,FALSE
mov @hSysMenu,eax
invoke AppendMenu,@hSysMenu,MF_SEPARATOR,0,NULL
invoke AppendMenu,@hSysMenu,MF_STRING,IDM_HELP,offset szMenuHelp
invoke AppendMenu,@hSysMenu,MF_STRING,IDM_ABOUT,offset szMenuAbout
ret
_Init endp
;********************************************************************
; ®Ú¾Ú¼Ð»x¦ì¤¸³]¸m¬ÛÀ³¥\¯àªí¶µªºª¬ºA
;********************************************************************
_MenuStatus proc
test dwFlag,F_INPUTBAR
.if ZERO?
invoke CheckMenuItem,hMenu,IDM_INPUTBAR,MF_UNCHECKED
.else
invoke CheckMenuItem,hMenu,IDM_INPUTBAR,MF_CHECKED
.endif
test dwFlag,F_TOOLBAR
.if ZERO?
invoke CheckMenuItem,hMenu,IDM_TOOLBAR,MF_UNCHECKED
.else
invoke CheckMenuItem,hMenu,IDM_TOOLBAR,MF_CHECKED
.endif
test dwFlag,F_TOOLBARTEXT
.if ZERO?
invoke CheckMenuItem,hMenu,IDM_TOOLBARTEXT,MF_UNCHECKED
.else
invoke CheckMenuItem,hMenu,IDM_TOOLBARTEXT,MF_CHECKED
.endif
test dwFlag,F_STATUSBAR
.if ZERO?
invoke CheckMenuItem,hMenu,IDM_STATUSBAR,MF_UNCHECKED
.else
invoke CheckMenuItem,hMenu,IDM_STATUSBAR,MF_CHECKED
.endif
ret
_MenuStatus endp
;********************************************************************
_Quit proc
invoke DestroyWindow,hWinMain
invoke PostQuitMessage,NULL
ret
_Quit endp
;********************************************************************
end start
µ{¦¡ªº¤ÀªR
Åý§Ų́Ó²³æ¤ÀªR¤@¤U³oÓµ{¦¡¡Aº¥ý³oÓµ{¦¡©M¤W¤@¸`ªº³Ì²³æªºµøµ¡µ{¦¡ªº¤£¦P¤§³B´N¬O®ø®§°j°é¡A¦p¤U¡G
.while TRUE
invoke GetMessage,addr @stMsg,NULL,0,0
.break .if eax == 0
invoke TranslateAccelerator,hWinMain,@hAccelerator,addr @stMsg
.if eax == 0
invoke TranslateMessage,addr @stMsg
invoke DispatchMessage,addr @stMsg
.endif
.endw
¦b°j°é¤¤ªºTranslateAccelerator¥Î¨Ó½T©w¦s©ñ¦bMSGµ²ºc¤¤ªº®ø®§¬O¤£¬OÁä½L®ø®§¡A¦pªG¬O¡A¥¦¬d§ä±±¨î½X@hAccelerator¹ïÀ³ªº¥[³tÁäªí¡A¦pªG§ä¨ì¤F¤@Ӥǰt¶µ¡A¨º»ò¥¦±N¥Î©R¥OID¦Vµøµ¡µo°eWM_COMMAND®ø®§¡A¦P®Éªð¦^«D0È¡A³o®ÉÔªí¥Ü®ø®§¤w¸g³Q³B²z¡A¤£¥Î¦A½Õ¥Î¤U±ªºTranslateMessage ©M DispatchMessage ¤F¡A¦pªG¤£¬O¡A¨º»ò¥¦±Nªð¦^0¡A®ø®§°j°éÄ~Äò¡C
¥t¥~¡An»¡©úªº¬O¼u¥X¦¡¥\¯àªí¡A¦bµ{¦¡¤¤§Ú̦^À³WM_RBUTTONDOWN®ø®§¹ï«ö¤U¥kÁä¶i¦æ³B²z¡A µM«á½Õ¥ÎGetCursorPos¨ú±o·í«e·Æ¹«®y¼Ð¡AµM«á¨Ï¥ÎTrackPopupMenu¦b·Æ¹«¦ì¸m¤W¼u¥X¤@Ó¥\¯àªí¡A¦ý¬O¦b¸ê·½Àɮפ¤¡A¡§¼u¥X¦¡¥\\¯àªí¡¨¬OµLªkª½±µ©w¸qªº¡A©Ò¥H¦bªì©l¤Æ³¡¤À¡A§Ų́ϥÎGetSubMenu ¨ú¥X¼u¥X¦¡¤l¥\¯àªíªº±±¨î½X¨ÑTrackPopupMenu¨Ï¥Î¡C
¹ê¥Î¬ÛÃö·j´M: map nds bus lg car she it pda model ¤ô
|

〓¤¤°ê¶Â«ÈÁp·ù¡]CHU¡^〓«e®Ö¤ß¦¨û¡A²{¬°ºaÅA·|û
〓¤¤°ê¶Â«ÈÁp·ù¡]CHU¡^〓ºôµ¸¹q¤lÂø»x¡m¯x°}¡n½s¿è
·°ó§Þ³N¤u§@«Ç
|
|
|
|