§
    Ý�®j<  ã            
       óº  — d Z ddlZddlmc mZ ddlZddlZddl	Z	ddl
Z
ddlZddlZddlZej                             de
j                             e
j                             e
j                             e¦  «        d¦  «        ¦  «        ¦  «         ddlmZ ddlmZmZ  G d„ dej        ¦  «        Z G d„ dej        ¦  «        Zed	k    r ej        ¦   «          dS dS )
uó  Bá»™ kiá»ƒm thá»­ Ä‘Æ¡n vá»‹ cho thÆ° viá»‡n dÃ¹ng chung src/common/ vÃ  cÃ¡c báº£n vÃ¡ P0 Python.

Kiá»ƒm tra:
1. src/common/win32_window: attach_to_default_desktop, find_poe2_window, get_client_rect, get_dpi_scale.
2. src/common/win32_process: is_poe2_running, get_poe2_pid, find_process_by_name.
3. src/common/screen_capture: capture_rect_bitblt, capture_window_bitblt, capture_window_print.
4. src/common/audio_feedback: beep_bot_toggle, beep_panic, beep_notification.
5. src/common/item_types: ItemData, ItemRarity, AffixData, AffixType.
6. src/common/logging_util: get_logger, log_exception.
7. CoreShmBridge Telemetry: npcs_count, area_code, area_seed, read_limit 256.
8. CÃ¡c trÆ°á»�ng há»£p biÃªn win32_window vÃ  win32_process trong src/common.
é    Nz..)ÚCoreTelemetrySnapshotÚPlayerTelemetryc                   ó6   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )	ÚTestCommonLibraryuM   Kiá»ƒm chá»©ng hoáº¡t Ä‘á»™ng cá»§a toÃ n bá»™ cÃ¡c module trong src/common/.c                 óú  — t          j        ¦   «         }|                      |d up|d u ¦  «         t          j        dg¦  «        }|                      |t
          ¦  «         t          j        |¦  «        }|                      t          |¦  «        d¦  «         |D ]}|                      |t
          ¦  «         Œt          j	        d¦  «        }|                      |t          ¦  «         |                      |d¦  «         d S )NÚNonExistentWindowTitle12345é   r   ç      à?)ÚcommonÚattach_to_default_desktopÚ
assertTrueÚfind_poe2_windowÚassertIsInstanceÚintÚget_client_rectÚassertEqualÚlenÚget_dpi_scaleÚfloatÚassertGreaterEqual)ÚselfÚdeskÚhwndÚrectÚvalÚscales         ú)C:\Projects\AutoPOE2\tests\test_common.pyÚtest_win32_window_functionsz-TestCommonLibrary.test_win32_window_functions"   sö   € åÔ/Ñ1Ô1ˆØ�Š˜ DÐ(Ð8¨D°D¨LÑ9Ô9Ð9õ Ô&Ð(EÐ'FÑGÔGˆØ×Ò˜d¥CÑ(Ô(Ð(õ Ô% dÑ+Ô+ˆØ×Ò�˜T™œ AÑ&Ô&Ð&Øð 	,ð 	,ˆCØ×!Ò! #¥sÑ+Ô+Ð+Ð+õ Ô$ QÑ'Ô'ˆØ×Ò˜e¥UÑ+Ô+Ð+Ø×Ò  sÑ+Ô+Ð+Ð+Ð+ó    c                 ó�  — t          j        ¦   «         }t          j        d¦  «        }|st          j        d¦  «        }|                      |t
          ¦  «         t          j        ¦   «         }|                      |t          ¦  «         t          j        ¦   «         }|  	                    |d u pt          |t          ¦  «        ¦  «         d S )Nz
python.exeÚpython)ÚosÚgetpidr   Úfind_process_by_namer   ÚlistÚis_poe2_runningÚboolÚget_poe2_pidr   Ú
isinstancer   )r   Úcurrent_pidÚpidsÚrunningÚpoe_pids        r   Útest_win32_process_functionsz.TestCommonLibrary.test_win32_process_functions6   s¬   € å”i‘k”kˆåÔ*¨<Ñ8Ô8ˆØð 	9ÝÔ.¨xÑ8Ô8ˆDØ×Ò˜d¥DÑ)Ô)Ð)õ Ô(Ñ*Ô*ˆØ×Ò˜g¥tÑ,Ô,Ð,õ Ô%Ñ'Ô'ˆØ�Š˜ 4˜ÐC­:°g½sÑ+CÔ+CÑDÔDÐDÐDÐDr   c                 ó  — t          j        dddd¦  «        }|                      |¦  «         t          j        d¦  «        }|                      |¦  «         t          j        d¦  «        }|                      |¦  «         d S )Nr   iöÿÿÿ)r   Úcapture_rect_bitbltÚassertIsNoneÚcapture_window_bitbltÚcapture_window_print)r   Úimg_invalidÚ	img_hwnd0Ú
img_print0s       r   Ú test_screen_capture_safe_cleanupz2TestCommonLibrary.test_screen_capture_safe_cleanupG   s~   € åÔ0°°A°s¸CÑ@Ô@ˆØ×Ò˜+Ñ&Ô&Ð&õ Ô0°Ñ3Ô3ˆ	Ø×Ò˜)Ñ$Ô$Ð$õ Ô0°Ñ3Ô3ˆ
Ø×Ò˜*Ñ%Ô%Ð%Ð%Ð%r   c                 ó¢   — t          j        d¦  «         t          j        d¦  «         t          j        ¦   «          t          j        ¦   «          d S )NTF)r   Úbeep_bot_toggleÚ
beep_panicÚbeep_notification)r   s    r   Ú test_audio_feedback_non_blockingz2TestCommonLibrary.test_audio_feedback_non_blockingT   sH   € åÔ˜tÑ$Ô$Ð$ÝÔ˜uÑ%Ô%Ð%ÝÔÑÔÐÝÔ Ñ"Ô"Ð"Ð"Ð"r   c                 ó  — t          j        dt           j        j        ddddg¬¦  «        }|                      |j        d¦  «         |                      |j        t           j        j        ¦  «         t          j        ddd	t           j        j	        d
ddd|g¬¦	  «	        }|  
                    |j        ¦  «         |                      |j        ¦  «         |                      |j        ¦  «         |                      |j        d¦  «         d S )Nz+75 to maximum Lifeé   ÚVigorousÚlifeg     ÀR@)ÚtextÚ
affix_typeÚtierÚnameÚcategoryÚvaluesz	Doom StarzExpert Vaal CuirasszBody ArmourséT   é   Té   )	rD   Ú	base_typeÚ
item_classÚrarityÚ
item_levelÚqualityÚ
identifiedÚsocketsÚ	explicits)r   Ú	AffixDataÚ	AffixTypeÚPREFIXr   rC   rB   ÚItemDataÚ
ItemRarityÚRAREr   Úis_rareÚassertFalseÚ	is_normalÚ	is_uniqueÚtotal_affixes_count)r   Úaffix1Úitems      r   Útest_item_typesz!TestCommonLibrary.test_item_types[   s  € åÔ!Ø&ÝÔ'Ô.ØØØØ�6ð
ñ 
ô 
ˆð 	×Ò˜œ aÑ(Ô(Ð(Ø×Ò˜Ô*­FÔ,<Ô,CÑDÔDÐDõ ŒØØ+Ø%ÝÔ$Ô)ØØØØØ�hð

ñ 

ô 

ˆð 	�Š˜œÑ%Ô%Ð%Ø×Ò˜œÑ(Ô(Ð(Ø×Ò˜œÑ(Ô(Ð(Ø×Ò˜Ô1°1Ñ5Ô5Ð5Ð5Ð5r   c                 ó  — t          j        dt          j        ¬¦  «        }|                      |j        t          j        ¦  «         	 t          d¦  «        ‚# t          $ r!}t          j        |d|¦  «         Y d }~d S d }~ww xY w)NÚ
TestLogger)ÚlevelzTest error for loggingu#   Ngá»¯ cáº£nh kiá»ƒm thá»­ unit test)r   Ú
get_loggerÚloggingÚDEBUGr   rb   Ú
ValueErrorÚlog_exception)r   ÚloggerÚerrs      r   Útest_logging_utilz#TestCommonLibrary.test_logging_utily   s”   € ÝÔ" <µw´}ÐEÑEÔEˆØ×Ò˜œ¥w¤}Ñ5Ô5Ð5ð	UÝÐ5Ñ6Ô6Ð6øÝð 	Uð 	Uð 	UÝÔ  Ð)NÐPSÑTÔTÐTÐTÐTÐTÐTÐTÐTøøøøð	Uøøøs   ÁA Á
BÁ A<Á<BN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r.   r7   r<   r_   rj   © r   r   r   r      s|   € € € € € ØWÐWð,ð ,ð ,ð(Eð Eð Eð"&ð &ð &ð#ð #ð #ð6ð 6ð 6ð<Uð Uð Uð Uð Ur   r   c                   ó<   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	S )
ÚTestP0PythonFixesu6   Kiá»ƒm chá»©ng cÃ¡c báº£n sá»­a lá»—i P0 phÃ­a Python.c                 óþ   — t          dddt          dd¬¦  «        dddd	d
dddd¬¦  «        }|                      |j        d
¦  «         |                      |j        d¦  «         |                      |j        d¦  «         dS )ua   Kiá»ƒm chá»©ng CoreTelemetrySnapshot lÆ°u trá»¯ Ä‘áº§y Ä‘á»§ area_code, area_seed vÃ  npcs_count.Té*   iè  iô  )Ú
current_hpÚmax_hpéd   é(   rH   é   é   z
Omen RidgeéH   ÚAct3_Town_01i±hÞ:)Ú	is_onlineÚsnapshot_idÚtimestamp_msÚplayerÚentity_countÚmonsters_countÚitems_countÚportals_countÚ
npcs_countÚ	area_nameÚ
area_levelÚ	area_codeÚ	area_seedN)r   r   r   r„   r‡   rˆ   )r   Úsnaps     r   Ú1test_core_telemetry_snapshot_area_and_npcs_fieldszCTestP0PythonFixes.test_core_telemetry_snapshot_area_and_npcs_fields‡   sš   € å$ØØØÝ"¨c¸#Ð>Ñ>Ô>ØØØØØØ"ØØ$Øð
ñ 
ô 
ˆð 	×Ò˜œ¨"Ñ-Ô-Ð-Ø×Ò˜œ¨Ñ8Ô8Ð8Ø×Ò˜œ¨Ñ3Ô3Ð3Ð3Ð3r   c                 ó  — t          j        d¦  «        }|                      |d¦  «         t          j        d¦  «        }|                      |d¦  «         t          j        g ¦  «        }|                      |t          ¦  «         dS )uN   Kiá»ƒm chá»©ng cÃ¡c trÆ°á»�ng há»£p biÃªn cá»§a win32_window trong src/common.r   )r   r   r   r   r
   N)r   r   r   r   r   r   r   r   )r   r   r   r   s       r   Ú#test_common_win32_window_edge_casesz5TestP0PythonFixes.test_common_win32_window_edge_casesœ   s€   € õ Ô% aÑ(Ô(ˆØ×Ò˜˜|Ñ,Ô,Ð,õ Ô$ QÑ'Ô'ˆØ×Ò  sÑ+Ô+Ð+õ Ô& rÑ*Ô*ˆØ×Ò˜d¥CÑ(Ô(Ð(Ð(Ð(r   c                 ó  — t          j        d¦  «        }|                      |g ¦  «         t          j        ¦   «         }t          j        ¦   «         }|r|                      |¦  «         dS |                      |¦  «         dS )uO   Kiá»ƒm chá»©ng cÃ¡c trÆ°á»�ng há»£p biÃªn cá»§a win32_process trong src/common.z"non_existent_fake_process_9999.exeN)r   r$   r   r&   r(   ÚassertIsNotNoner1   )r   r+   r,   Úpids       r   Ú$test_common_win32_process_edge_casesz6TestP0PythonFixes.test_common_win32_process_edge_casesª   s…   € õ Ô*Ð+OÑPÔPˆØ×Ò˜˜rÑ"Ô"Ð"õ Ô(Ñ*Ô*ˆÝÔ!Ñ#Ô#ˆØð 	#Ø× Ò  Ñ%Ô%Ð%Ð%Ð%à×Ò˜cÑ"Ô"Ð"Ð"Ð"r   c                 ó”  — t          j        ¦   «         }|                      |t          ¦  «         |                      t          |¦  «        d¦  «         |                      |d         t          ¦  «         |                      |d         t          ¦  «         |                      t           j        d¦  «         |                      t           j        d¦  «         |                      t           j	        d¦  «         |                      t           j
        d¦  «         |                      t           j        d¦  «         |                      t           j        d	¦  «         |                      t           j        d
¦  «         |                      t           j        d¦  «         |                      t!          t           j        ¦  «        ¦  «         |                      t!          t           j        ¦  «        ¦  «         |                      t!          t           j        ¦  «        ¦  «         |                      t!          t           j        ¦  «        ¦  «         |                      t!          t           j        ¦  «        ¦  «         |                      t!          t           j        ¦  «        ¦  «         |                      t!          t           j        ¦  «        ¦  «         dS )uF   Kiá»ƒm chá»©ng cÃ¡c hÃ m vÃ  háº±ng sá»‘ Win32 Input trong src/common.rx   r   r>   éW   éA   éS   éD   é    éI   éU   é¾   N)r   Úget_cursor_posr   Útupler   r   r   ÚVK_WÚVK_AÚVK_SÚVK_DÚVK_SPACEÚVK_IÚVK_UÚVK_OEM_PERIODr   ÚcallableÚclickÚhoverÚ
ctrl_clickÚ	press_keyÚdismiss_modalsÚsend_wasd_directionÚmouse_wheel)r   Úposs     r   Útest_common_win32_inputz)TestP0PythonFixes.test_common_win32_input¸   s  € õ Ô#Ñ%Ô%ˆØ×Ò˜c¥5Ñ)Ô)Ð)Ø×Ò�˜S™œ 1Ñ%Ô%Ð%Ø×Ò˜c !œf¥cÑ*Ô*Ð*Ø×Ò˜c !œf¥cÑ*Ô*Ð*ð 	×Ò�œ dÑ+Ô+Ð+Ø×Ò�œ dÑ+Ô+Ð+Ø×Ò�œ dÑ+Ô+Ð+Ø×Ò�œ dÑ+Ô+Ð+Ø×Ò�œ¨$Ñ/Ô/Ð/Ø×Ò�œ dÑ+Ô+Ð+Ø×Ò�œ dÑ+Ô+Ð+Ø×Ò�Ô-¨tÑ4Ô4Ð4ð 	�Š�¥¤Ñ.Ô.Ñ/Ô/Ð/Ø�Š�¥¤Ñ.Ô.Ñ/Ô/Ð/Ø�Š�¥Ô!2Ñ3Ô3Ñ4Ô4Ð4Ø�Š�¥Ô!1Ñ2Ô2Ñ3Ô3Ð3Ø�Š�¥Ô!6Ñ7Ô7Ñ8Ô8Ð8Ø�Š�¥Ô!;Ñ<Ô<Ñ=Ô=Ð=Ø�Š�¥Ô!3Ñ4Ô4Ñ5Ô5Ð5Ð5Ð5r   c                 ó~  — ddl m} |                      t          j        d¦  «        ¦  «         |                      t          j        d¦  «        ¦  «         |                      t          j        dd¦  «        ¦  «         |                      t          j	        dd„ ¦  «        g ¦  «         t          j
        dd¬¦  «        }|                      |d¦  «         t          j        dd¬¦  «        }|                      |d¦  «         t          j        d¦  «        }|                      |d	¦  «         t          j        dd
¬¦  «        }|                      |d¦  «         |                     ddd¬¦  «        }t          dd¦  «        D ]3}t          dd¦  «        D ] }|                     d|z   d|z   fd¦  «         Œ!Œ4t          j	        |d„ dddd¬¦  «        }	|                      t          |	¦  «        d¦  «         |	d         \  }
}}|                      |
d¦  «         |                      |d¦  «         |                      |d¦  «         dS )uL   Kiá»ƒm chá»©ng cÃ¡c hÃ m thá»‹ giÃ¡c mÃ¡y tÃ­nh vÃ  WinOCR trong src/common.r   ©ÚImageNÚTRAVERSEc                 ó   — dS )NTro   ©ÚrÚgÚbs      r   ú<lambda>z:TestP0PythonFixes.test_common_vision_ocr.<locals>.<lambda>Ü   s   € È$€ r   )i—  i…  )Úfallback_pos)iÁ  iÂ  )iú  éð   )i  i<  )Úmap_device_pos)iè  i  ÚRGB©éÈ   r½   )r   r   r   )Úcoloréþÿÿÿé   rv   )r   éÿ   r   c                 ó&   — |dk    o| dk     o|dk     S )Nr½   é2   ro   r³   s      r   r·   z:TestP0PythonFixes.test_common_vision_ocr.<locals>.<lambda>ó   s   € ¨A°ªGÐ,I¸¸BºÐ,IÀ1ÀrÂ6€ r   r>   é
   ry   )Úcolor_predicateÚstepÚcluster_radius_xÚcluster_radius_yÚmin_cluster_sizeé   )ÚPILr°   rY   r   Úis_atlas_ui_openÚis_inventory_openr1   Úfind_button_by_textr   Úfind_color_clustersÚfind_map_device_screen_posÚfind_portal_screen_posÚnewÚrangeÚputpixelr   )r   r°   r¬   Úportal_pos_fallbackÚportal_pos_relativeÚportal_pos_custom_mdÚtest_imgÚdyÚdxÚclustersÚcxÚcyÚcounts                r   Útest_common_vision_ocrz(TestP0PythonFixes.test_common_vision_ocrÔ   si  € àÐÐÐÐÐð 	×Ò�Ô0°Ñ6Ô6Ñ7Ô7Ð7Ø×Ò�Ô1°$Ñ7Ô7Ñ8Ô8Ð8Ø×Ò�&Ô4°T¸:ÑFÔFÑGÔGÐGØ×Ò�Ô3°DÐ:NÐ:NÑOÔOÐQSÑTÔTÐTõ Ô/°À;ÐOÑOÔOˆØ×Ò˜˜kÑ*Ô*Ð*õ %Ô;¸DÈzÐZÑZÔZÐØ×ÒÐ,¨jÑ9Ô9Ð9Ý$Ô;¸DÑAÔAÐØ×ÒÐ,¨jÑ9Ô9Ð9Ý%Ô<¸TÐR\Ð]Ñ]Ô]ÐØ×ÒÐ-¨zÑ:Ô:Ð:ð —9’9˜U J°i�9Ñ@Ô@ˆå˜˜A‘,”,ð 	Eð 	EˆBÝ˜B ‘l”lð Eð E�Ø×!Ò! 3¨¡8¨S°2©XÐ"6¸ÑDÔDÐDÐDðEõ Ô-ØØIÐIØØØØð
ñ 
ô 
ˆð 	×Ò�˜X™œ¨Ñ*Ô*Ð*Ø  œ‰ˆˆB�Ø×Ò˜˜SÑ!Ô!Ð!Ø×Ò˜˜SÑ!Ô!Ð!Ø×Ò˜ Ñ#Ô#Ð#Ð#Ð#r   c                 ó8  — t          j        ddd¦  «        \  }}|                      |d¦  «         |                      |d¦  «         t          j        ddd¦  «        }|                      |¦  «         t          j        ddd¦  «        }|                      |¦  «         t          j        ddd¦  «        }|                      |¦  «         t          j        dd¦  «        }|                      |¦  «         t          j        d¦  «        }|                      |¦  «         d S )Nr   é–   éú   rv   r–   )	r   Úclient_to_screen_posr   Úpost_message_clickrY   Úpost_message_ctrl_clickÚpost_message_hoverÚpost_message_keyÚsnap_window_to_half)r   ÚxÚyÚress       r   Útest_background_input_functionsz1TestP0PythonFixes.test_background_input_functionsÿ   s  € åÔ*¨1¨c°3Ñ7Ô7‰ˆˆ1Ø×Ò˜˜CÑ Ô Ð Ø×Ò˜˜CÑ Ô Ð õ Ô'¨¨3°Ñ4Ô4ˆØ×Ò˜ÑÔÐõ Ô,¨Q°°SÑ9Ô9ˆØ×Ò˜ÑÔÐõ Ô'¨¨3°Ñ4Ô4ˆØ×Ò˜ÑÔÐõ Ô% a¨Ñ.Ô.ˆØ×Ò˜ÑÔÐõ Ô(¨Ñ+Ô+ˆØ×Ò˜ÑÔÐÐÐr   c                 ó  — ddl }ddlm} ddlm} |                      t          j        d¦  «        ¦  «         d}t          j	         
                    |¦  «        rÁ|                     |¦  «                             d¦  «        }|                     ¦   «          t          j        |¦  «         |                     ¦   «         }|                      t          j        |¦  «        ¦  «         |                     ¦   «         |z
  dz  }|                      |dd	|d
›d�¦  «         d}t          j	         
                    |¦  «        r­|                     |¦  «                             d¦  «        }	|	                     ¦   «          |                     ¦   «         }|                      t          j        |	¦  «        ¦  «         |                     ¦   «         |z
  dz  }|                      |dd|d
›d�¦  «         d}
t          j	         
                    |
¦  «        r'|                      t          j        |
¦  «        ¦  «         d}t          j	         
                    |¦  «        r²|                     |¦  «                             d¦  «        }|                     ¦   «          |                     ¦   «         }t          j        |d¬¦  «        }|                     ¦   «         |z
  dz  }|                      |d¦  «         |                      |dd|d
›d�¦  «         d}t          j	         
                    |¦  «        rVt          j        |¦  «        }|                      |d¦  «         t          j        |d¬¦  «        }|                      |d¦  «         d}t          j	         
                    |¦  «        rVt          j        |¦  «        }|                      |d¦  «         t          j        |d¬¦  «        }|                      |d¦  «         |                     ddd¦  «        }|                      t          j        |¦  «        ¦  «          |d¦  «        5 }t          j        |d¬¦  «         d„ |j        D ¦   «         }|                      t          j        |¦  «         |                      t          j        |¦  «         ddd¦  «         n# 1 swxY w Y   |                     ddd¦  «        }|                      t          j        |¦  «        ¦  «          |d¦  «        5 }t          j        |d¬¦  «         d„ |j        D ¦   «         }|                      t          j        |¦  «         |                      t          j        |¦  «         ddd¦  «         dS # 1 swxY w Y   dS )uf   Kiá»ƒm thá»­ Fast-Path (< 0.5ms) cho is_inventory_open, find_map_device_screen_pos vÃ  dismiss_modals.r   N)Úpatchr¯   zCcaptures/pipeline_run/20260913_215645_161_STAGE1_INVENTORY_OPEN.pngr»   g     @�@g       @u   Fast-Path quÃ¡ cháº­m: z.2fÚmszCcaptures/pipeline_run/20260917_043805_828_STAGE1_INVENTORY_OPEN.pngu   Fast-Path 891p quÃ¡ cháº­m: zAcaptures/pipeline_run/20260913_215718_063_STAGE2_HIDEOUT_SCAN.pngzDcaptures/pipeline_run/20260918_152632_757_STAGE2_MAP_DEVICE_VIEW.pngT)Ú	fast_path)éù   é­   u2   find_map_device_screen_pos fast_path quÃ¡ cháº­m: zDcaptures/pipeline_run/20260918_153346_454_STAGE2_MAP_DEVICE_VIEW.png)i2  éÄ   zDcaptures/pipeline_run/20260918_161010_809_STAGE2_MAP_DEVICE_VIEW.pngr¼   )rH   rH   rH   z src.common.win32_input.press_key)ÚimgÚis_simulatedc                 ó(   — g | ]}|j         d          ‘ŒS ©r   ©Úargs©Ú.0Úcalls     r   ú
<listcomp>zVTestP0PythonFixes.test_fast_path_optical_sensors_and_modal_dismiss.<locals>.<listcomp>[  s   € ÐFÐFÐF D�4”9˜Q”<ÐFÐFÐFr   )éx   rv   éP   c                 ó(   — g | ]}|j         d          ‘ŒS r÷   rø   rú   s     r   rý   zVTestP0PythonFixes.test_fast_path_optical_sensors_and_modal_dismiss.<locals>.<listcomp>c  s   € ÐTÐTÐT¨4˜$œ) Aœ,ÐTÐTÐTr   )ÚtimeÚunittest.mockrî   rË   r°   rY   r   rÍ   r"   ÚpathÚexistsÚopenÚconvertÚloadÚperf_counterr   Ú
assertLessrÐ   r   rÒ   Úis_center_modal_presentr©   Úcall_args_listÚassertInÚ	VK_ESCAPEr    ÚassertNotIn)r   r  rî   r°   Úf_1440Úim_1440Út0Údt_msÚf_891Úim_891Úf_closedÚf_stage2Úim_s2r¬   Úf_stage2_454Úpos_454Úpos_454_fastÚf_stage2_809Úpos_809Úpos_809_fastÚ	modal_imgÚ
mock_pressÚvksÚ
normal_imgÚmock_press_normalÚ
vks_normals                             r   Ú0test_fast_path_optical_sensors_and_modal_dismisszBTestP0PythonFixes.test_fast_path_optical_sensors_and_modal_dismiss  s«  € àˆˆˆØ'Ð'Ð'Ð'Ð'Ð'ØÐÐÐÐÐð 	×Ò�Ô1°$Ñ7Ô7Ñ8Ô8Ð8ð WˆÝŒ7�>Š>˜&Ñ!Ô!ð 	QØ—j’j Ñ(Ô(×0Ò0°Ñ7Ô7ˆGØ�LŠL‰NŒNˆNÝÔ$ WÑ-Ô-Ð-Ø×"Ò"Ñ$Ô$ˆBØ�OŠO�FÔ4°WÑ=Ô=Ñ>Ô>Ð>Ø×&Ò&Ñ(Ô(¨2Ñ-°Ñ7ˆEØ�OŠO˜E 3Ð(OÀ%Ð(OÐ(OÐ(OÐ(OÑPÔPÐPð VˆÝŒ7�>Š>˜%Ñ Ô ð 	VØ—Z’Z Ñ&Ô&×.Ò.¨uÑ5Ô5ˆFØ�KŠK‰MŒMˆMØ×"Ò"Ñ$Ô$ˆBØ�OŠO�FÔ4°VÑ<Ô<Ñ=Ô=Ð=Ø×&Ò&Ñ(Ô(¨2Ñ-°Ñ7ˆEØ�OŠO˜E 3Ð(TÀuÐ(TÐ(TÐ(TÐ(TÑUÔUÐUð WˆÝŒ7�>Š>˜(Ñ#Ô#ð 	AØ×Ò�VÔ5°hÑ?Ô?Ñ@Ô@Ð@ð ZˆÝŒ7�>Š>˜(Ñ#Ô#ð 	lØ—J’J˜xÑ(Ô(×0Ò0°Ñ7Ô7ˆEØ�JŠJ‰LŒLˆLØ×"Ò"Ñ$Ô$ˆBÝÔ3°EÀTÐJÑJÔJˆCØ×&Ò&Ñ(Ô(¨2Ñ-°Ñ7ˆEØ×Ò˜S *Ñ-Ô-Ð-Ø�OŠO˜E 3Ð(jÐ]bÐ(jÐ(jÐ(jÐ(jÑkÔkÐkð ^ˆÝŒ7�>Š>˜,Ñ'Ô'ð 	7ÝÔ7¸ÑEÔEˆGØ×Ò˜W jÑ1Ô1Ð1Ý!Ô<¸\ÐUYÐZÑZÔZˆLØ×Ò˜\¨:Ñ6Ô6Ð6à]ˆÝŒ7�>Š>˜,Ñ'Ô'ð 	7ÝÔ7¸ÑEÔEˆGØ×Ò˜W jÑ1Ô1Ð1Ý!Ô<¸\ÐUYÐZÑZÔZˆLØ×Ò˜\¨:Ñ6Ô6Ð6ð —I’I˜e Z°Ñ>Ô>ˆ	Ø�Š�Ô6°yÑAÔAÑBÔBÐBØˆUÐ5Ñ6Ô6ð 	0¸*ÝÔ! i¸dÐCÑCÔCÐCØFÐF¨JÔ,EÐFÑFÔFˆCØ�MŠM�&Ô*¨CÑ0Ô0Ð0Ø�MŠM�&œ/¨3Ñ/Ô/Ð/ð		0ð 	0ð 	0ñ 	0ô 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0øøøð 	0ð 	0ð 	0ð 	0ð —Y’Y˜u j°.ÑAÔAˆ
Ø×Ò�Ô7¸
ÑCÔCÑDÔDÐDØˆUÐ5Ñ6Ô6ð 	7Ð:KÝÔ! j¸tÐDÑDÔDÐDØTÐTÐ3DÔ3SÐTÑTÔTˆJØ×Ò�VÔ-¨zÑ:Ô:Ð:Ø�MŠM�&œ/¨:Ñ6Ô6Ð6ð		7ð 	7ð 	7ñ 	7ô 	7ð 	7ð 	7ð 	7ð 	7ð 	7ð 	7ð 	7øøøð 	7ð 	7ð 	7ð 	7ð 	7ð 	7s&   Ð:A(R.Ò.R2Ò5R2ÔA(U7Õ7U;Õ>U;N)rk   rl   rm   rn   rŠ   rŒ   r�   r­   rß   rì   r$  ro   r   r   rq   rq   „   s‰   € € € € € Ø@Ð@ð4ð 4ð 4ð*)ð )ð )ð#ð #ð #ð6ð 6ð 6ð8)$ð )$ð )$ðVð ð ð4L7ð L7ð L7ð L7ð L7r   rq   Ú__main__)rn   ÚbuiltinsÚ@py_builtinsÚ_pytest.assertion.rewriteÚ	assertionÚrewriteÚ
@pytest_arÚiord   Úmmapr"   ÚstructÚsysÚunittestr  ÚinsertÚabspathÚjoinÚdirnameÚ__file__Ú
src.commonr   Ú"src.assistant_tool.core_shm_bridger   r   ÚTestCaser   rq   rk   Úmainro   r   r   ú<module>r:     s€  ððð ð € € € € € € € € € € € € €	€	€	€	Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø 
€
€
€
Ø €€€à „‡‚��2”7—?’? 2¤7§<¢<°´·²ÀÑ0IÔ0IÈ4Ñ#PÔ#PÑQÔQÑ RÔ RÐ Rà Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ðbUð bUð bUð bUð bU˜Ô)ñ bUô bUð bUðJa7ð a7ð a7ð a7ð a7˜Ô)ñ a7ô a7ð a7ðH ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   