§
    FY®js,  ã                  óø   — d Z ddlmZ ddlZddlmc mZ ddl	Z	ddl
Z
ddlmZmZmZ ddlZddlmZmZ ddlmZmZmZmZ ddlmZ  G d„ d	¦  «        Z G d
„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        ZdS )u�  AutoPOE2 - DirectX 12 Hardware Cursor Raycast & Foreground Security Test Suite.
==================================================================================
[MÃ” PHá»ŽNG THUáº¬T TOÃ�N HEADLESS - KHÃ”NG PHáº¢I LIVE GAME] (Rule 5 Compliance)

Domain: QA & Governance Sentinel (SÆ° Ä‘oÃ n 4)
Kiá»ƒm thá»­ báº¥t biáº¿n INV-DX12-HARDWARE-RAYCAST & INV-FOCUS-INTERLOCK-HARDWARE-SAFETY (Doc 74):
1. Khi game unfocused: Cáº¤M tuyá»‡t Ä‘á»‘i di chuyá»ƒn con trá»� pháº§n cá»©ng hoáº·c báº¥m chuá»™t ra desktop
   (0 pixel displacement, 0 mouse event leak).
2. Khi game focused: Báº¯t buá»™c Ä‘á»“ng bá»™ con trá»� pháº§n cá»©ng (SetCursorPos) káº¿t há»£p mouse_event
   cho cÃ¡c tÆ°Æ¡ng tÃ¡c 3D world raycast (Map Device, Portal, Chest).
3. CÆ¡ cháº¿ Alt-key bypass trong ensure_window_focus vÆ°á»£t qua ForegroundLockTimeout trÃªn Windows 10/11.
4. Tháº©m Ä‘á»‹nh Ä‘á»‹nh lÆ°á»£ng qua MasterInvariantsSentinel.
é    )ÚannotationsN)Ú	MagicMockÚcallÚpatch)ÚMasterInvariantsSentinelÚInvariantStatus)ÚclickÚhoverÚset_cursor_posÚset_input_simulation_mode)Úensure_window_focusc                  ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )Ú#TestUnfocusedHardwareCursorLockdownue   Kiá»ƒm tra khÃ³a cháº·n tuyá»‡t Ä‘á»‘i con trá»� vÃ  chuá»™t khi cá»­a sá»• game máº¥t tiÃªu Ä‘iá»ƒm.c           	     ó�  — t          dd¬¦  «        5  t          d¦  «        5 }t          dd¦  «        }d}||u }|s—t          j        d|fd||f¦  «        d	t	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	t          j        |¦  «        d
œz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}}|j
        }d}||k    }|sªt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }	t          t          j	        |	¦  «        ¦  «        ‚dx}x}}ddd¦  «         n# 1 swxY w Y   ddd¦  «         dS # 1 swxY w Y   dS )ug   Khi game unfocused: set_cursor_pos tráº£ vá»� False vÃ  tuyá»‡t Ä‘á»‘i khÃ´ng gá»�i Win32 SetCursorPos.ú+src.common.win32_input._is_physical_allowedF©Úreturn_valueú+src.common.win32_input._user32.SetCursorPosi   iÐ  ©Úis©z%(py0)s is %(py3)sÚres©Úpy0Úpy3úassert %(py5)sÚpy5Nr   ©ú==©z2%(py2)s
{%(py2)s = %(py0)s.call_count
} == %(py5)sÚmock_set_pos©r   Úpy2r   úassert %(py7)sÚpy7)r   r   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚ
call_count©
Úselfr!   r   Ú@py_assert2Ú@py_assert1Ú@py_format4Ú@py_format6Ú@py_assert4Ú@py_assert3Ú@py_format8s
             úAC:\Projects\AutoPOE2\tests\test_dx12_hardware_cursor_interlock.pyÚ6test_unfocused_blocks_set_cursor_pos_zero_displacementzZTestUnfocusedHardwareCursorLockdown.test_unfocused_blocks_set_cursor_pos_zero_displacement*   sŒ  € åÐ@ÈuÐUÑUÔUð 	4ð 	4ÝÐDÑEÔEð 4ÈÝ$ T¨3Ñ/Ô/�Ø#Ð#�s˜e�|Ð#Ð#Ð#Õ#Ô#Ð#Ð#Ð#Ð#�s˜eÐ#Ñ#Ô#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#�sÑ#Ô#Ð#Õ#Ô#�sÑ#Ô#Ð#Ð#Õ#Ô#˜eÑ#Ô#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ø#Ô.Ð3°!Ð3Ð.°!Ò3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3Ð.°!Ð3Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3�|Ñ3Ô3Ð3Õ3Ô3�|Ñ3Ô3Ð3Ð3Õ3Ô3Ð.Ñ3Ô3Õ3Ô3°!Ñ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3ð4ð 4ð 4ñ 4ô 4ð 4ð 4ð 4ð 4ð 4ð 4øøøð 4ð 4ð 4ð 4ð	4ð 	4ð 	4ñ 	4ô 	4ð 	4ð 	4ð 	4ð 	4ð 	4ð 	4ð 	4øøøð 	4ð 	4ð 	4ð 	4ð 	4ð 	4s5   ’F;¢E5F#ÆF;Æ#F'	Æ'F;Æ*F'	Æ+F;Æ;F?ÇF?c                ó¶  — t          dd¬¦  «        5  t          dd¬¦  «        5  t          d¦  «        5 }t          d¦  «        5 }t          ddd¬	¦  «        }d}||u }|s—t          j        d
|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}}|j
        }d}||k    }	|	sªt          j        d|	fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }
t          t          j	        |
¦  «        ¦  «        ‚dx}x}	}|j
        }d}||k    }	|	sªt          j        d|	fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }
t          t          j	        |
¦  «        ¦  «        ‚dx}x}	}ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   ddd¦  «         dS # 1 swxY w Y   dS )u[   Khi game unfocused: click() khÃ´ng phÃ¡t báº¥t ká»³ mouse_event nÃ o ra mÃ n hÃ¬nh desktop.ú-src.common.win32_input.is_poe2_window_focusedFr   r   ú*src.common.win32_input._user32.mouse_eventr   é~  éX  ©Úis_simulatedr   r   r   r   r   r   Nr   r   r    Úmock_mouse_eventr"   r$   r%   r!   )r   r	   r&   r'   r(   r)   r*   r+   r,   r-   r.   )r0   rA   r!   r   r1   r2   r3   r4   r5   r6   r7   s              r8   Ú1test_unfocused_blocks_mouse_click_and_mouse_eventzUTestUnfocusedHardwareCursorLockdown.test_unfocused_blocks_mouse_click_and_mouse_event2   sB  € åÐBÐQVÐWÑWÔWð 	<ð 	<ÝÐDÐSXÐYÑYÔYð <ð <ÝÐGÑHÔHð <ÐL\ÝÐLÑMÔMð <ÐQ]å# D¨#¸EÐBÑBÔB˜Ø&+Ð+˜s e˜|Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+˜s eÐ+Ñ+Ô+Ð+Õ+Ô+Ñ+Ô+Ð+Ð+Õ+Ô+˜sÑ+Ô+Ð+Õ+Ô+˜sÑ+Ô+Ð+Ð+Õ+Ô+ eÑ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ø/Ô:Ð?¸aÐ?Ð:¸aÒ?Ð?Ð?Ð?Õ?Ô?Ð?Ð?Ð?Ð?Ð:¸aÐ?Ñ?Ô?Ð?Õ?Ô?Ñ?Ô?Ð?Ð?Õ?Ô?Ð/Ñ?Ô?Ð?Õ?Ô?Ð/Ñ?Ô?Ð?Ð?Õ?Ô?Ð:Ñ?Ô?Õ?Ô?¸aÑ?Ô?Ð?Ð?Ñ?Ð?Ð?Ð?Ð?Ð?Ñ?Ð?Õ?Õ?Ô?Ð?Ñ?Ô?Ñ?Ô?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ø+Ô6Ð;¸!Ð;Ð6¸!Ò;Ð;Ð;Ð;Õ;Ô;Ð;Ð;Ð;Ð;Ð6¸!Ð;Ñ;Ô;Ð;Õ;Ô;Ñ;Ô;Ð;Ð;Õ;Ô;˜|Ñ;Ô;Ð;Õ;Ô;˜|Ñ;Ô;Ð;Ð;Õ;Ô;Ð6Ñ;Ô;Õ;Ô;¸!Ñ;Ô;Ð;Ð;Ñ;Ð;Ð;Ð;Ð;Ð;Ñ;Ð;Õ;Õ;Ô;Ð;Ñ;Ô;Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;ð<ð <ð <ñ <ô <ð <ð <ð <ð <ð <ð <øøøð <ð <ð <ð <ð<ð <ð <ñ <ô <ð <ð <ð <ð <ð <ð <øøøð <ð <ð <ð <ð<ð <ð <ñ <ô <ð <ð <ð <ð <ð <ð <øøøð <ð <ð <ð <ð	<ð 	<ð 	<ñ 	<ô 	<ð 	<ð 	<ð 	<ð 	<ð 	<ð 	<ð 	<øøøð 	<ð 	<ð 	<ð 	<ð 	<ð 	<s|   ’K¤J6´JÁH8J	É<JÊJÊJÊJÊJÊJ6ÊJ#Ê#J6Ê&J#Ê'J6Ê*KÊ6J:	Ê:KÊ=J:	Ê>KËKËKc           
     óæ  — t          dd¬¦  «        5  t          dd¬¦  «        5  t          d¦  «        5 }t          ddd¬¦  «        }d}||u }|s—t          j        d	|fd
||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}}|j
        }d}||k    }|sªt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }	t          t          j	        |	¦  «        ¦  «        ‚dx}x}}ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   ddd¦  «         dS # 1 swxY w Y   dS )uL   Khi game unfocused: hover() tá»« chá»‘i di chuyá»ƒn con trá»� pháº§n cá»©ng.r;   Fr   r   z%src.common.win32_input.set_cursor_poséè  iô  r?   r   r   r   r   r   r   Nr   r   r    r!   r"   r$   r%   )r   r
   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   s
             r8   Ú+test_unfocused_blocks_hover_cursor_movementzOTestUnfocusedHardwareCursorLockdown.test_unfocused_blocks_hover_cursor_movement>   sü  € åÐBÐQVÐWÑWÔWð 	8ð 	8ÝÐDÐSXÐYÑYÔYð 8ð 8ÝÐBÑCÔCð 8À|Ý  c¸Ð>Ñ>Ô>�CØ"'Ð'˜3 %˜<Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'˜3 %Ð'Ñ'Ô'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô'˜3Ñ'Ô'Ð'Õ'Ô'˜3Ñ'Ô'Ð'Ð'Õ'Ô' %Ñ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ø'Ô2Ð7°aÐ7Ð2°aÒ7Ð7Ð7Ð7Õ7Ô7Ð7Ð7Ð7Ð7Ð2°aÐ7Ñ7Ô7Ð7Õ7Ô7Ñ7Ô7Ð7Ð7Õ7Ô7˜<Ñ7Ô7Ð7Õ7Ô7˜<Ñ7Ô7Ð7Ð7Õ7Ô7Ð2Ñ7Ô7Õ7Ô7°aÑ7Ô7Ð7Ð7Ñ7Ð7Ð7Ð7Ð7Ð7Ñ7Ð7Õ7Õ7Ô7Ð7Ñ7Ô7Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7Ð7ð8ð 8ð 8ñ 8ô 8ð 8ð 8ð 8ð 8ð 8ð 8øøøð 8ð 8ð 8ð 8ð8ð 8ð 8ñ 8ô 8ð 8ð 8ð 8ð 8ð 8ð 8øøøð 8ð 8ð 8ð 8ð	8ð 	8ð 	8ñ 	8ô 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8øøøð 	8ð 	8ð 	8ð 	8ð 	8ð 	8sX   ’G&¤G´E7F7Æ+GÆ7F;Æ;GÆ>F;Æ?GÇG&ÇG	ÇG&ÇG	ÇG&Ç&G*Ç-G*N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r9   rB   rE   © ó    r8   r   r   '   sG   € € € € € ØoÐoð4ð 4ð 4ð
<ð 
<ð 
<ð8ð 8ð 8ð 8ð 8rK   r   c                  ó   — e Zd ZdZd„ Zd„ ZdS )Ú"TestFocusedHardwareCursor3dRaycastuj   Kiá»ƒm tra Ä‘á»“ng bá»™ con trá»� pháº§n cá»©ng khi game focused Ä‘á»ƒ kÃ­ch hoáº¡t DX12 3D World Raycast.c                ó  — t          dd¬¦  «        5  t          dd¬¦  «        5  t          dd¬¦  «        5 }t          d¦  «        5 }t          d¦  «        5  t          dd	d
dd¬¦  «        }d}||u }|s—t          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}}| 
                    dd	¦  «         |j        }d}||k    }	|	sªt          j        d|	fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }
t          t          j	        |
¦  «        ¦  «        ‚dx}x}	}|j        }|d         d         d         }d}	||	k    }|slt          j        d|fd||	f¦  «        t          j        |¦  «        t          j        |	¦  «        dœz  }dd |iz  }t          t          j	        |¦  «        ¦  «        ‚dx}x}}	|d!         d         d         }d"}	||	k    }|slt          j        d|fd||	f¦  «        t          j        |¦  «        t          j        |	¦  «        dœz  }dd |iz  }t          t          j	        |¦  «        ¦  «        ‚dx}x}}	ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   ddd¦  «         dS # 1 swxY w Y   dS )#ua   Khi game focused: click(x, y) báº¯t buá»™c gá»�i SetCursorPos(x, y) vÃ  mouse_event(LEFTDOWN/UP).z(src.common.win32_input._is_focus_allowedTr   r   r   r<   ú
time.sleepr=   r>   Úleftgš™™™™™©?gš™™™™™¹?)ÚbuttonÚhold_msÚdelay_afterr   r   r   r   r   r   Né   r   r    rA   r"   r$   r%   r   ©z%(py1)s == %(py4)s©Úpy1Úpy4úassert %(py6)sÚpy6é   é   )r   r	   r&   r'   r(   r)   r*   r+   r,   r-   Úassert_called_once_withr.   Úcall_args_list)r0   r!   rA   r   r1   r2   r3   r4   r5   r6   r7   ÚcallsÚ@py_assert0Ú@py_format5Ú@py_format7s                  r8   Ú?test_focused_synchronizes_hardware_cursor_and_sends_mouse_eventzbTestFocusedHardwareCursor3dRaycast.test_focused_synchronizes_hardware_cursor_and_sends_mouse_eventO   sF  € åÐ=ÈDÐQÑQÔQð 	<ð 	<ÝÐDÐSWÐXÑXÔXð <ð <ÝÐHÐW[Ð\Ñ\Ô\ð <Ð`lÝÐKÑLÔLð 
<ÐP`Ý" <Ñ0Ô0ð 	<ð 	<Ý"'¨¨c¸&È$Ð\_Ð"`Ñ"`Ô"`˜CØ*.Ð. 3¨$ ;Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð. 3¨$Ð.Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô. 3Ñ.Ô.Ð.Õ.Ô. 3Ñ.Ô.Ð.Ð.Õ.Ô.¨$Ñ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.à(×@Ò@ÀÀsÑKÔKÐKà#3Ô#>ÐCÀ!ÐCÐ#>À!Ò#CÐCÐCÐCÕCÔCÐCÐCÐCÐCÐ#>À!ÐCÑCÔCÐCÕCÔCÑCÔCÐCÐCÕCÔCÐ#3ÑCÔCÐCÕCÔCÐ#3ÑCÔCÐCÐCÕCÔCÐ#>ÑCÔCÕCÔCÀ!ÑCÔCÐCÐCÑCÐCÐCÐCÐCÐCÑCÐCÕCÕCÔCÐCÑCÔCÑCÔCÐCÐCÐCÐCÐCÐCÐCØ$4Ô$C˜EØ#(¨¤8¨A¤;¨q¤>Ð;°VÐ; >°VÒ#;Ð;Ð;Ð;Õ;Ô;Ð;Ð;Ð;Ð; >°VÐ;Ñ;Ô;Õ;Ô; >Ñ;Ô;Õ;Ô;°VÑ;Ô;Ð;Ð;Ñ;Ð;Ð;Ð;Ð;Ð;Ñ;Ð;Õ;Õ;Ô;Ð;Ñ;Ô;Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ø#(¨¤8¨A¤;¨q¤>Ð;°VÐ; >°VÒ#;Ð;Ð;Ð;Õ;Ô;Ð;Ð;Ð;Ð; >°VÐ;Ñ;Ô;Õ;Ô; >Ñ;Ô;Õ;Ô;°VÑ;Ô;Ð;Ð;Ñ;Ð;Ð;Ð;Ð;Ð;Ñ;Ð;Õ;Õ;Ô;Ð;Ñ;Ô;Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;ð	<ð 	<ð 	<ñ 	<ô 	<ð 	<ð 	<ð 	<ð 	<ð 	<ð 	<øøøð 	<ð 	<ð 	<ð 	<ð
<ð 
<ð 
<ñ 
<ô 
<ð 
<ð 
<ð 
<ð 
<ð 
<ð 
<øøøð 
<ð 
<ð 
<ð 
<ð<ð <ð <ñ <ô <ð <ð <ð <ð <ð <ð <øøøð <ð <ð <ð <ð<ð <ð <ñ <ô <ð <ð <ð <ð <ð <ð <øøøð <ð <ð <ð <ð	<ð 	<ð 	<ñ 	<ô 	<ð 	<ð 	<ð 	<ð 	<ð 	<ð 	<ð 	<øøøð 	<ð 	<ð 	<ð 	<ð 	<ð 	<s    ’M5¤M¶MÁL/	ÁJ6LÌL/	ÌLÌL/	ÌLÌ L/	Ì#MÌ/L3Ì3MÌ6L3Ì7MÌ:MÍM
Í
MÍM
ÍMÍM5ÍM!	Í!M5Í$M!	Í%M5Í5M9Í<M9c                óÎ  — t          ¦   «         }|                     dddd¬¦  «        }|j        }t          j        }||k    }|sòt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        dt          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        ndt          j
        |¦  «        dœz  }d	d
|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}d}|j        }	||	v }
|
sªt          j        d|
fd||	f¦  «        t          j
        |¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}
}	|                     dddd¬¦  «        }|j        }t          j        }||k    }|sòt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        dt          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        ndt          j
        |¦  «        dœz  }d	d
|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}d}|j        }	||	v }
|
sªt          j        d|
fd||	f¦  «        t          j
        |¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}
}	dS )ug   Quy chuáº©n báº¥t biáº¿n: TÆ°Æ¡ng tÃ¡c 3D Map Device tá»« chá»‘i chá»‰ dÃ¹ng PostMessage Ä‘Æ¡n thuáº§n.TF©Ú
is_focusedÚhardware_cursor_syncedÚmouse_event_sentÚ postmessage_only_for_3d_rejectedr   ©zK%(py2)s
{%(py2)s = %(py0)s.status
} == %(py6)s
{%(py6)s = %(py4)s.BLOCKED
}Úres_failr   ©r   r#   rX   rZ   úassert %(py8)sÚpy8Nu,   Thiáº¿u Ä‘á»“ng bá»™ con trá»� pháº§n cá»©ng©Úin©z0%(py1)s in %(py5)s
{%(py5)s = %(py3)s.evidence
}©rW   r   r   r$   r%   ©zJ%(py2)s
{%(py2)s = %(py0)s.status
} == %(py6)s
{%(py6)s = %(py4)s.PASSED
}Úres_oku8   DirectX 12 Viewport Raycasting nháº­n diá»‡n chÃ­nh xÃ¡c©r   Úaudit_inv_dx12_hardware_raycastÚstatusr   ÚBLOCKEDr&   r'   r(   r)   r*   r+   r,   r-   ÚevidenceÚPASSED)r0   Úsentinelrk   r2   Ú@py_assert5r6   rb   Ú@py_format9r`   r5   r1   r4   r7   rt   s                 r8   Ú<test_map_device_3d_interaction_refuses_pure_postmessage_mockz_TestFocusedHardwareCursor3dRaycast.test_map_device_3d_interaction_refuses_pure_postmessage_mock`   se  € å+Ñ-Ô-ˆð ×;Ò;ØØ#(Ø"Ø-2ð	 <ñ 
ô 
ˆð ŒÐ9¥/Ô"9Ð9ˆÐ"9Ò9Ð9Ð9Ð9Õ9Ô9Ð9Ð9Ð9Ð9ˆÐ"9Ð9Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9ˆxÑ9Ô9Ð9Õ9Ô9ˆxÑ9Ô9Ð9Ð9Õ9Ô9ˆÑ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9¥/Ñ9Ô9Ð9Õ9Ô9¥/Ñ9Ô9Ð9Ð9Õ9Ô9Ð"9Ñ9Ô9Ð9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Õ9Õ9Ô9Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ø=ÐRÀÔARÐRÐ=ÐARÐRÐRÐRÐRÕRÔRÐRÐRÐRÐRÐ=ÐARÐRÑRÔRÕRÔRÐ=ÑRÔRÐRÕRÔRÑRÔRÐRÐRÕRÔRÀÑRÔRÐRÕRÔRÀÑRÔRÐRÐRÕRÔRÐARÑRÔRÐRÐRÑRÐRÐRÐRÐRÐRÑRÐRÕRÕRÔRÐRÑRÔRÑRÔRÐRÐRÐRÐRÐRÐRÐRð ×9Ò9ØØ#'Ø!Ø-1ð	 :ñ 
ô 
ˆð Œ}Ð6¥Ô 6Ð6ˆ}Ð 6Ò6Ð6Ð6Ð6Õ6Ô6Ð6Ð6Ð6Ð6ˆ}Ð 6Ð6Ñ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6ˆvÑ6Ô6Ð6Õ6Ô6ˆvÑ6Ô6Ð6Ð6Õ6Ô6ˆ}Ñ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6¥Ñ6Ô6Ð6Õ6Ô6¥Ñ6Ô6Ð6Ð6Õ6Ô6Ð 6Ñ6Ô6Ð6Ð6Ñ6Ð6Ð6Ð6Ð6Ð6Ñ6Ð6Õ6Õ6Ô6Ð6Ñ6Ô6Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6ØIÐ\ÈVÌ_Ð\ÐIÈ_Ð\Ð\Ð\Ð\Õ\Ô\Ð\Ð\Ð\Ð\ÐIÈ_Ð\Ñ\Ô\Õ\Ô\ÐIÑ\Ô\Ð\Õ\Ô\Ñ\Ô\Ð\Ð\Õ\Ô\ÈVÑ\Ô\Ð\Õ\Ô\ÈVÑ\Ô\Ð\Ð\Õ\Ô\È_Ñ\Ô\Ð\Ð\Ñ\Ð\Ð\Ð\Ð\Ð\Ñ\Ð\Õ\Õ\Ô\Ð\Ñ\Ô\Ñ\Ô\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\rK   N)rF   rG   rH   rI   rc   r~   rJ   rK   r8   rM   rM   L   s=   € € € € € ØtÐtð<ð <ð <ð"]ð ]ð ]ð ]ð ]rK   rM   c                  ó   — e Zd ZdZd„ Zd„ ZdS )Ú#TestAltKeyForegroundBypassInterlocku`   Kiá»ƒm tra cÆ¡ cháº¿ Alt-key bypass trong ensure_window_focus vÆ°á»£t qua ForegroundLockTimeout.c                óô
  — d}t          ¦   «         }t          ¦   «         }d|j        _        d|j        _        d|g|j        _        d|j        _        t          d|¦  «        5  t          d|¦  «        5  t          d¦  «        5  t          d	d¬
¦  «        5  t          d¦  «        5  t          |d¬¦  «        }d}||u }|s—t          j
        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}|j                             d¦  «         |j        j        }	t+          |	¦  «        }d}
||
k    }|sòt          j
        d|fd||
f¦  «        dt          j        ¦   «         v st          j        t*          ¦  «        rt          j        t*          ¦  «        nddt          j        ¦   «         v st          j        |	¦  «        rt          j        |	¦  «        ndt          j        |¦  «        t          j        |
¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}
|	d         d         d         }d}||k    }|slt          j
        d|fd ||f¦  «        t          j        |¦  «        t          j        |¦  «        d!œz  }d"d#|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|	d         d         d         }d}||k    }|slt          j
        d|fd ||f¦  «        t          j        |¦  «        t          j        |¦  «        d!œz  }d"d#|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|	d$         d         d         }d}||k    }|slt          j
        d|fd ||f¦  «        t          j        |¦  «        t          j        |¦  «        d!œz  }d"d#|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|	d$         d         d         }d}||k    }|slt          j
        d|fd ||f¦  «        t          j        |¦  «        t          j        |¦  «        d!œz  }d"d#|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|j                             |¦  «         |j                             |¦  «         ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   ddd¦  «         dS # 1 swxY w Y   dS )%u]   ensure_window_focus thá»±c hiá»‡n chuá»—i Alt down -> SetForegroundWindow -> Alt up an toÃ n.ixV4TFé™™  rD   úctypes.windll.user32zctypes.windll.kernel32z0src.common.win32_window.attach_to_window_desktopz.src.common.win32_window.is_poe2_window_focusedr   rO   éd   )Ú
timeout_msr   r   Úfocusedr   r   r   NrT   )ú>=)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} >= %(py6)sÚlenÚkeybd_calls)r   rW   r   rZ   rm   rn   r   é   r   rU   rV   rY   rZ   r[   )r   ÚIsWindowr   ÚIsIconicÚGetForegroundWindowÚside_effectÚGetCurrentThreadIdr   r   r&   r'   r(   r)   r*   r+   r,   r-   ÚLockSetForegroundWindowÚassert_called_withÚkeybd_eventr^   rˆ   ÚBringWindowToTopÚSetForegroundWindow)r0   Ú	fake_hwndÚmock_user32Úmock_kernel32r†   r1   r2   r3   r4   r‰   r|   r5   rb   r}   r`   r6   ra   s                    r8   Ú9test_ensure_window_focus_executes_alt_key_bypass_sequencez]TestAltKeyForegroundBypassInterlock.test_ensure_window_focus_executes_alt_key_bypass_sequence€   sÁ  € àˆ	å‘k”kˆÝ!™œˆà,0ˆÔÔ)Ø,1ˆÔÔ)Ø7=¸yÐ6IˆÔ'Ô3Ø8<ˆÔ(Ô5åÐ)¨;Ñ7Ô7ð 	Zð 	ZÝÐ/°Ñ?Ô?ð Zð ZÝÐMÑNÔNð Zð ZÝÐOÐ^bÐcÑcÔcð Zð ZÝ" <Ñ0Ô0ð Zð ZÝ&9¸)ÐPSÐ&TÑ&TÔ&T˜GØ.2Ð2 7¨d ?Ð2Ð2Ð2Õ2Ô2Ð2Ð2Ð2Ð2 7¨dÐ2Ñ2Ô2Ð2Õ2Ô2Ñ2Ô2Ð2Ð2Õ2Ô2 7Ñ2Ô2Ð2Õ2Ô2 7Ñ2Ô2Ð2Ð2Õ2Ô2¨dÑ2Ô2Ð2Ð2Ñ2Ð2Ð2Ð2Ð2Ð2Ñ2Ð2Õ2Õ2Ô2Ð2Ñ2Ô2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2ð (Ô?×RÒRÐSTÑUÔUÐUð +6Ô*AÔ*P˜KÝ#& {Ñ#3Ô#3Ð8°qÐ8Ð#3°qÒ#8Ð8Ð8Ð8Õ8Ô8Ð8Ð8Ð8Ð8Ð#3°qÐ8Ñ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8¥3Ñ8Ô8Ð8Õ8Ô8¥3Ñ8Ô8Ð8Ð8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8 {Ñ8Ô8Ð8Õ8Ô8 {Ñ8Ô8Ð8Ð8Õ8Ô8Ð#3Ñ8Ô8Õ8Ô8°qÑ8Ô8Ð8Ð8Ñ8Ð8Ð8Ð8Ð8Ð8Ñ8Ð8Õ8Õ8Ô8Ð8Ñ8Ô8Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8à#.¨q¤>°!Ô#4°QÔ#7Ð?¸4Ð?Ð#7¸4Ò#?Ð?Ð?Ð?Õ?Ô?Ð?Ð?Ð?Ð?Ð#7¸4Ð?Ñ?Ô?Õ?Ô?Ð#7Ñ?Ô?Õ?Ô?¸4Ñ?Ô?Ð?Ð?Ñ?Ð?Ð?Ð?Ð?Ð?Ñ?Ð?Õ?Õ?Ô?Ð?Ñ?Ô?Ñ?Ô?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ø#.¨q¤>°!Ô#4°QÔ#7Ð<¸1Ð<Ð#7¸1Ò#<Ð<Ð<Ð<Õ<Ô<Ð<Ð<Ð<Ð<Ð#7¸1Ð<Ñ<Ô<Õ<Ô<Ð#7Ñ<Ô<Õ<Ô<¸1Ñ<Ô<Ð<Ð<Ñ<Ð<Ð<Ð<Ð<Ð<Ñ<Ð<Õ<Õ<Ô<Ð<Ñ<Ô<Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<à#.¨q¤>°!Ô#4°QÔ#7Ð?¸4Ð?Ð#7¸4Ò#?Ð?Ð?Ð?Õ?Ô?Ð?Ð?Ð?Ð?Ð#7¸4Ð?Ñ?Ô?Õ?Ô?Ð#7Ñ?Ô?Õ?Ô?¸4Ñ?Ô?Ð?Ð?Ñ?Ð?Ð?Ð?Ð?Ð?Ñ?Ð?Õ?Õ?Ô?Ð?Ñ?Ô?Ñ?Ô?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ø#.¨q¤>°!Ô#4°QÔ#7Ð<¸1Ð<Ð#7¸1Ò#<Ð<Ð<Ð<Õ<Ô<Ð<Ð<Ð<Ð<Ð#7¸1Ð<Ñ<Ô<Õ<Ô<Ð#7Ñ<Ô<Õ<Ô<¸1Ñ<Ô<Ð<Ð<Ñ<Ð<Ð<Ð<Ð<Ð<Ñ<Ð<Õ<Õ<Ô<Ð<Ñ<Ô<Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<ð (Ô8×KÒKÈIÑVÔVÐVØ'Ô;×NÒNÈyÑYÔYÐYð'Zð Zð Zñ Zô Zð Zð Zð Zð Zð Zð Zøøøð Zð Zð Zð ZðZð Zð Zñ Zô Zð Zð Zð Zð Zð Zð Zøøøð Zð Zð Zð ZðZð Zð Zñ Zô Zð Zð Zð Zð Zð Zð Zøøøð Zð Zð Zð ZðZð Zð Zñ Zô Zð Zð Zð Zð Zð Zð Zøøøð Zð Zð Zð Zð	Zð 	Zð 	Zñ 	Zô 	Zð 	Zð 	Zð 	Zð 	Zð 	Zð 	Zð 	Zøøøð 	Zð 	Zð 	Zð 	Zð 	Zð 	Zs£   Á!U-Á2UÂT>ÂT'	Â$Q TÔT'	ÔTÔT'	ÔTÔT'	ÔT>Ô'T+Ô+T>Ô.T+Ô/T>Ô2UÔ>UÕUÕUÕUÕ	U-ÕU	ÕU-ÕU	ÕU-Õ-U1Õ4U1c                ó,  — d}t          |¦  «        }d}||u }|sÇt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}x}}t          ¦   «         }d|j
        _        t          d
|¦  «        5  d}t          |¦  «        }d}||u }|sÇt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}x}}d	d	d	¦  «         d	S # 1 swxY w Y   d	S )uf   ensure_window_focus tráº£ vá»� False an toÃ n khi HWND = 0 hoáº·c khÃ´ng pháº£i cá»­a sá»• há»£p lá»‡.r   Fr   )z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} is %(py7)sr   )r   r#   rX   r%   zassert %(py9)sÚpy9Nrƒ   r‚   )r   r&   r'   r(   r)   r*   r+   r,   r-   r   r‹   r   r   )r0   r2   r6   Ú@py_assert6r|   r7   Ú@py_format10r–   s           r8   Ú5test_ensure_window_focus_fails_safely_on_invalid_hwndzYTestAltKeyForegroundBypassInterlock.test_ensure_window_focus_fails_safely_on_invalid_hwnd¥   s�  € à#$Ð.Õ" 1Ñ%Ô%Ð.¨Ð.Ð%¨Ð.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð%¨Ð.Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô.Õ"Ñ.Ô.Ð.Õ.Ô.Õ"Ñ.Ô.Ð.Ð.Õ.Ô. 1Ñ.Ô.Õ.Ô.Ð%Ñ.Ô.Õ.Ô.¨Ñ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.å‘k”kˆØ,1ˆÔÔ)ÝÐ)¨;Ñ7Ô7ð 	8ð 	8Ø'-Ð7Õ& vÑ.Ô.Ð7°%Ð7Ð.°%Ð7Ð7Ð7Ð7Õ7Ô7Ð7Ð7Ð7Ð7Ð.°%Ð7Ñ7Ô7Ð7Õ7Ô7Ñ7Ô7Ð7Ð7Õ7Ô7Õ&Ñ7Ô7Ð7Õ7Ô7Õ&Ñ7Ô7Ð7Ð7Õ7Ô7 vÑ7Ô7Õ7Ô7Ð.Ñ7Ô7Õ7Ô7°%Ñ7Ô7Ð7Ð7Ñ7Ð7Ð7Ð7Ð7Ð7Ñ7Ð7Õ7Õ7Ô7Ð7Ñ7Ô7Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7ð	8ð 	8ð 	8ñ 	8ô 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8øøøð 	8ð 	8ð 	8ð 	8ð 	8ð 	8s   ÄC)H	È	HÈHN)rF   rG   rH   rI   r˜   r�   rJ   rK   r8   r€   r€   }   s<   € € € € € ØjÐjð#Zð #Zð #ZðJ8ð 8ð 8ð 8ð 8rK   r€   c                  ó   — e Zd ZdZd„ Zd„ ZdS )Ú(TestMasterSentinelInvDx12HardwareRaycastu\   Kiá»ƒm tra tÃ­ch há»£p báº¥t biáº¿n INV-DX12-HARDWARE-RAYCAST vÃ o MasterInvariantsSentinel.c                óÈ  — t          ¦   «         }|                     dd¬¦  «        }|j        }t          j        }||k    }|sòt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        dt          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        ndt          j
        |¦  «        dœz  }d	d
|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}d}|j        }	||	v }
|
sªt          j        d|
fd||	f¦  «        t          j
        |¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}
}	|                     ddd¬¦  «        }|j        }t          j        }||k    }|sòt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        dt          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        ndt          j
        |¦  «        dœz  }d	d
|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}d}|j        }	||	v }
|
sªt          j        d|
fd||	f¦  «        t          j
        |¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}
}	dS )u[   Khi game unfocused: Náº¿u con trá»� bá»‹ dá»‹ch chuyá»ƒn > 0px -> BLOCKED ngay láº­p tá»©c.Fé   )rf   Ú cursor_displacement_on_unfocusedr   rj   Úres_leakr   rl   rm   rn   Nu   Dá»‹ch chuyá»ƒn con trá»�ro   rq   rr   r$   r%   r   )rf   r¢   rh   rs   Úres_safeu/   0 pixel dá»‹ch chuyá»ƒn con trá»� pháº§n cá»©ngru   )r0   r{   r£   r2   r|   r6   rb   r}   r`   r5   r1   r4   r7   r¤   s                 r8   ÚBtest_sentinel_audit_inv_dx12_hardware_raycast_unfocused_protectionzkTestMasterSentinelInvDx12HardwareRaycast.test_sentinel_audit_inv_dx12_hardware_raycast_unfocused_protection¶   s`  € å+Ñ-Ô-ˆð ×;Ò;ØØ-/ð <ñ 
ô 
ˆð ŒÐ9¥/Ô"9Ð9ˆÐ"9Ò9Ð9Ð9Ð9Õ9Ô9Ð9Ð9Ð9Ð9ˆÐ"9Ð9Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9ˆxÑ9Ô9Ð9Õ9Ô9ˆxÑ9Ô9Ð9Ð9Õ9Ô9ˆÑ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9¥/Ñ9Ô9Ð9Õ9Ô9¥/Ñ9Ô9Ð9Ð9Õ9Ô9Ð"9Ñ9Ô9Ð9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Õ9Õ9Ô9Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ø*Ð?¨hÔ.?Ð?Ð*Ð.?Ð?Ð?Ð?Ð?Õ?Ô?Ð?Ð?Ð?Ð?Ð*Ð.?Ð?Ñ?Ô?Õ?Ô?Ð*Ñ?Ô?Ð?Õ?Ô?Ñ?Ô?Ð?Ð?Õ?Ô?¨hÑ?Ô?Ð?Õ?Ô?¨hÑ?Ô?Ð?Ð?Õ?Ô?Ð.?Ñ?Ô?Ð?Ð?Ñ?Ð?Ð?Ð?Ð?Ð?Ñ?Ð?Õ?Õ?Ô?Ð?Ñ?Ô?Ñ?Ô?Ð?Ð?Ð?Ð?Ð?Ð?Ð?ð ×;Ò;ØØ-.Ø"ð <ñ 
ô 
ˆð
 ŒÐ8¥/Ô"8Ð8ˆÐ"8Ò8Ð8Ð8Ð8Õ8Ô8Ð8Ð8Ð8Ð8ˆÐ"8Ð8Ñ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8ˆxÑ8Ô8Ð8Õ8Ô8ˆxÑ8Ô8Ð8Ð8Õ8Ô8ˆÑ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8¥/Ñ8Ô8Ð8Õ8Ô8¥/Ñ8Ô8Ð8Ð8Õ8Ô8Ð"8Ñ8Ô8Ð8Ð8Ñ8Ð8Ð8Ð8Ð8Ð8Ñ8Ð8Õ8Õ8Ô8Ð8Ñ8Ô8Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ø@ÐUÀHÔDUÐUÐ@ÐDUÐUÐUÐUÐUÕUÔUÐUÐUÐUÐUÐ@ÐDUÐUÑUÔUÕUÔUÐ@ÑUÔUÐUÕUÔUÑUÔUÐUÐUÕUÔUÀHÑUÔUÐUÕUÔUÀHÑUÔUÐUÐUÕUÔUÐDUÑUÔUÐUÐUÑUÐUÐUÐUÐUÐUÑUÐUÕUÕUÔUÐUÑUÔUÑUÔUÐUÐUÐUÐUÐUÐUÐUÐUÐUrK   c                óü  — t          ¦   «         }|                     dddd¬¦  «        }|j        }t          j        }||k    }|sòt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        dt          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        ndt          j
        |¦  «        dœz  }dd	|iz  }t          t          j        |¦  «        ¦  «        ‚d
x}x}}|j        }d}||k    }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        t          j
        |¦  «        dœz  }	dd|	iz  }
t          t          j        |
¦  «        ¦  «        ‚d
x}x}}d
S )uj   Khi game focused: TuÃ¢n thá»§ Ä‘áº§y Ä‘á»§ tiÃªu chuáº©n Ä‘á»“ng bá»™ con trá»� vÃ  mouse_event -> PASSED.Tre   r   rs   rt   r   rl   rm   rn   NzINV-DX12-HARDWARE-RAYCAST)z,%(py2)s
{%(py2)s = %(py0)s.code
} == %(py5)sr"   r$   r%   )r   rv   rw   r   rz   r&   r'   r(   r)   r*   r+   r,   r-   Úcode)r0   r{   rt   r2   r|   r6   rb   r}   r5   r4   r7   s              r8   Ú@test_sentinel_audit_inv_dx12_hardware_raycast_focused_complianceziTestMasterSentinelInvDx12HardwareRaycast.test_sentinel_audit_inv_dx12_hardware_raycast_focused_complianceË   s9  € å+Ñ-Ô-ˆà×9Ò9ØØ#'Ø!Ø-1ð	 :ñ 
ô 
ˆð Œ}Ð6¥Ô 6Ð6ˆ}Ð 6Ò6Ð6Ð6Ð6Õ6Ô6Ð6Ð6Ð6Ð6ˆ}Ð 6Ð6Ñ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6ˆvÑ6Ô6Ð6Õ6Ô6ˆvÑ6Ô6Ð6Ð6Õ6Ô6ˆ}Ñ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6¥Ñ6Ô6Ð6Õ6Ô6¥Ñ6Ô6Ð6Ð6Õ6Ô6Ð 6Ñ6Ô6Ð6Ð6Ñ6Ð6Ð6Ð6Ð6Ð6Ñ6Ð6Õ6Õ6Ô6Ð6Ñ6Ô6Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6ØŒ{Ð9Ð9Ð9ˆ{Ð9Ò9Ð9Ð9Ð9Õ9Ô9Ð9Ð9Ð9Ð9ˆ{Ð9Ð9Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9ˆvÑ9Ô9Ð9Õ9Ô9ˆvÑ9Ô9Ð9Ð9Õ9Ô9ˆ{Ñ9Ô9Õ9Ô9Ð9Ñ9Ô9Ð9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Õ9Õ9Ô9Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9rK   N)rF   rG   rH   rI   r¥   r¨   rJ   rK   r8   rŸ   rŸ   ³   s;   € € € € € ØfÐfðVð Vð Vð*:ð :ð :ð :ð :rK   rŸ   )rI   Ú
__future__r   Úbuiltinsr(   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter&   ÚctypesÚosÚunittest.mockr   r   r   ÚpytestÚ-src.agentic_engine.master_invariants_sentinelr   r   Úsrc.common.win32_inputr	   r
   r   r   Úsrc.common.win32_windowr   r   rM   r€   rŸ   rJ   rK   r8   ú<module>rµ      s£  ððð ð #Ð "Ð "Ð "Ð "Ð "à  € € € € € € € € € € € € €€€€Ø 	€	€	€	Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø €€€ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð 8Ð 7Ð 7Ð 7Ð 7Ð 7ð8ð 8ð 8ð 8ð 8ñ 8ô 8ð 8ðJ*]ð *]ð *]ð *]ð *]ñ *]ô *]ð *]ðb/8ð /8ð /8ð /8ð /8ñ /8ô /8ð /8ðl#:ð #:ð #:ð #:ð #:ñ #:ô #:ð #:ð #:ð #:rK   