§
    m‡¬jí<  ã                  ó¶  — d Z ddl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	ddl
m
Z
mZ ddlmZ ddlmZmZmZmZmZ ddlmZ 	  eej        d¦  «        r6ej                             d	¬
¦  «         ej                             d	¬
¦  «         n# e$ r Y nw xY wej                             d e ee¦  «                             ¦   «         j         j         ¦  «        ¦  «         ddl!m"Z" ddl#m$Z$m%Z%m&Z& ddl'm(c m)Z) ddl*m(c m+Z+ ddl,m-Z-m.Z.m/Z/ 	 ddl0Z0n# e1$ r dZ0Y nw xY wd%d&d„Z2d'd„Z3d(d„Z4d)d„Z5d*d„Z6d+d„Z7d,d!„Z8d-d"„Z9d#„ Z:e;d$k    r e:¦   «          dS dS ).u³  AutoPOE2 - Pre-Patch Logistics & Character Safeguard Protocol (T-15M).
=====================================================================
Thi hÃ nh má»‡nh lá»‡nh tÃ¡c chiáº¿n kháº©n cáº¥p cá»§a Ä�iá»�u phá»‘i viÃªn Tá»•ng (DoD Rule 5):
1. TÃ¡i káº¿t ná»‘i an toÃ n Ä‘Æ°a Monk CI vÃ o Shoreline Hideout.
2. Dá»�n dáº¹p hÃ nh trang, cáº¥t tÃ i sáº£n vÃ o Stash báº£o toÃ n tuyá»‡t Ä‘á»‘i.
3. Chá»¥p áº£nh toÃ n cáº£nh nhÃ¢n váº­t (Vitals, Level 90, % EXP, Gear) -> captures/pre_patch_baseline_v055c.png.
4. TrÃ­ch xuáº¥t RAM Snapshot Monk CI Lv 90 -> character_target/snapshots/pre_patch_baseline.json.
5. Ä�áº¿m ngÆ°á»£c & Graceful Logout an toÃ n (WM_CLOSE), chá»‘ng kick cÆ°á»¡ng bá»©c.
é    )ÚannotationsN)ÚdatetimeÚtimezone)ÚPath)ÚAnyÚDictÚListÚOptionalÚTuple)ÚImageÚreconfigureúutf-8©Úencoding)ÚSyncMemorySnapshotManager)Úcapture_rect_bitbltÚcapture_window_bitbltÚcapture_window_print)Úensure_window_focusÚfind_poe2_windowÚget_client_rectÚINFOÚmsgÚstrÚlevelc                ó–   — t          j        ¦   «                              d¦  «        d d…         }t          d|› d|› d| › �d¬¦  «         d S )Nz%H:%M:%S.%féýÿÿÿú[z][z][PrePatchOps] T)Úflush)r   ÚnowÚstrftimeÚprint)r   r   Útss      ú;C:\Projects\AutoPOE2\scripts\execute_pre_patch_logistics.pyÚlogr%   /   sV   € Ý	Œ‰Œ×	 Ò	  Ñ	/Ô	/°°°Ô	4€BÝ	Ð
/ˆbÐ
/Ð
/�EÐ
/Ð
/¨#Ð
/Ð
/°tÐ<Ñ<Ô<Ð<Ð<Ð<ó    ÚhwndÚintÚreturnÚboolc           
     óL  — | r$t           j        j                             | ¦  «        sdS t           j        j        }d}d}d}d}d}|                     | |¦  «         |                     | |dddd||z  |z  ¦  «         |                     | ¦  «         t          j        d¦  «         d	S )
NFé	   éÿÿÿÿé   é   é@   r   ç333333Ó?T)	ÚctypesÚwindllÚuser32ÚIsWindowÚ
ShowWindowÚSetWindowPosÚSetForegroundWindowÚtimeÚsleep)r'   r4   Ú
SW_RESTOREÚHWND_TOPMOSTÚ
SWP_NOSIZEÚ
SWP_NOMOVEÚSWP_SHOWWINDOWs          r$   Úmake_topmost_and_focusr@   4   s³   € Øð •v”}Ô+×4Ò4°TÑ:Ô:ð ØˆuÝŒ]Ô!€FØ€JØ€LØ€JØ€JØ€Nà
×Ò�d˜JÑ'Ô'Ð'Ø
×Ò˜˜l¨A¨q°!°Q¸
ÀZÑ8OÐR`Ñ8`ÑaÔaÐaØ
×Ò˜tÑ$Ô$Ð$Ý„Jˆs�O„O€OØˆ4r&   úOptional[Image.Image]c                óŽ  — t          | ¦  «         t          | ¦  «        \  }}}}|dk    s|dk    rdS t          ||||¦  «        }|�|S t          | d¬¦  «        }|�|S t	          | d¬¦  «        }|rU|j        \  }}t          d||z
  dz  ¦  «        }	t          d||z
  |	z
  ¦  «        }
|                     |	|
|	|z   |
|z   f¦  «        S dS )uJ   Chá»¥p chuáº©n xÃ¡c Client Area (1189x891) khÃ´ng chá»©a title bar/viá»�n.r   NT)Úclient_only)Úrender_full_contentr/   )r@   r   r   r   r   ÚsizeÚmaxÚcrop)r'   ÚclÚctÚcwÚchÚimgÚfullÚwÚhÚbxÚbys              r$   Úcapture_clean_client_arearR   E   sõ   € å˜4Ñ Ô Ð Ý$ TÑ*Ô*�N€BˆˆB�Ø	ˆQ‚w€w�"˜’'�'Øˆtõ ˜b " b¨"Ñ
-Ô
-€CØ
€Øˆ
õ   °$Ð
7Ñ
7Ô
7€CØ
€Øˆ
õ   ¸$Ð?Ñ?Ô?€DØð 5ØŒy‰ˆˆ1Ý��Q˜‘V ‘MÑ"Ô"ˆÝ��A˜‘F˜R‘KÑ Ô ˆØ�yŠy˜"˜b " r¡'¨2°©7Ð3Ñ4Ô4Ð4Øˆ4r&   Úclient_log_pathú#Tuple[Optional[int], Optional[int]]c           
     ó¢  ‡ — t           j        j        }t          ¦   «         }d}|sÇt	          d¦  «         d}t
          j                             |¦  «        }d}t          j	        |g||¬¦  «        }|j
        }t	          d|› d�¦  «         t          d¦  «        D ]R}t          j        d	¦  «         |                     d
d¦  «        }	|	r$t          |	¦  «        }t	          d|d›�¦  «          nŒSnYt          j        ¦   «         }
|                     |t          j        |
¦  «        ¦  «         |
j        }t	          d|d›d|› d�¦  «         |st	          dd¬¦  «         dS t)          |¦  «         t          j        d¦  «         t	          d¦  «         t          d¦  «        D �]0}t)          |¦  «         t+          |¦  «        }|st          j        d¦  «         Œ8dŠ g }t,          r]t-          j        |d¬¦  «        }|                     dg ¦  «        }d                     d„ |D ¦   «         ¦  «                             ¦   «         Š t7          |¦  «        \  }}}}t9          ˆ fd„dD ¦   «         ¦  «        rSt	          d¦  «         t;          j        d d!d"¬#¦  «         t;          j        d$d%d	¬#¦  «         t          j        d¦  «         �Œ"d&‰ v sd'‰ v �r
t	          d(¦  «         d}|D �]+}d&|                     d)d¦  «                             ¦   «         v rþ|                     d*g ¦  «        }|ræ|d+                              d,i ¦  «        }|d-                              d,i ¦  «        }t          |                     d.d+¦  «        |                     d.d+¦  «        |                     d/d+¦  «        z   |                     d.d+¦  «        z
  d0z  z   ¦  «        }t          |                     d1d+¦  «        |                     d2d+¦  «        d0z  z   ¦  «        }||f} n�Œ-|rD||d+         z   }||d3         z   }t	          d4|› d5|› d6�¦  «         t;          j        ||d7¬#¦  «         nW|t          |d7z  ¦  «        z   }|t          |d8z  ¦  «        z   }t	          d9|› d5|› d6�¦  «         t;          j        ||d7¬#¦  «         t;          j        d$d%d:¬#¦  «         t          j        d;¦  «         �Œ5t9          ˆ fd<„d=D ¦   «         ¦  «        r<t	          d>¦  «         t;          j        d$d%d	¬#¦  «         t          j        d?¦  «         �ŒŒt
          j                              | ¦  «        rqtC          | d@dAdB¬C¦  «        5 }| "                    ¦   «         dDd…         }ddd¦  «         n# 1 swxY w Y   t9          dE„ |D ¦   «         ¦  «        rt	          dF¦  «          nt          j        d:¦  «         �Œ2||fS )GuQ   Ä�áº£m báº£o client POE2 Ä‘ang cháº¡y vÃ  nhÃ¢n váº­t Ä‘Ã£ á»Ÿ Shoreline Hideout.NuO   1. KhÃ´ng tháº¥y POE2 Ä‘ang má»Ÿ. Tiáº¿n hÃ nh khá»Ÿi cháº¡y PathOfExile.exe...zJC:\Program Files (x86)\Grinding Gear Games\Path of Exile 2\PathOfExile.exei   )ÚcwdÚcreationflagsu   Ä�Ã£ spawn PID: u2   . Chá»� cá»­a sá»• POEWindowClass xuáº¥t hiá»‡n...é-   g      ð?ÚPOEWindowClassu&   ðŸŽ¯ Ä�Ã£ báº¯t Ä‘Æ°á»£c HWND POE2: 0xÚXu+   ðŸŽ¯ Ä�Ã£ gáº¯n káº¿t HWND hiá»‡n táº¡i: 0xz (PID ú)u-   â�Œ KhÃ´ng thá»ƒ tÃ¬m tháº¥y cá»­a sá»• POE2!ÚERROR©r   )NNg      ø?u]   2. Kiá»ƒm tra tráº¡ng thÃ¡i mÃ n hÃ¬nh hiá»‡n táº¡i (Title / Login / CharSelect / Hideout)...é   Ú Úen)ÚlangÚlinesú c              3  óB   K  — | ]}|                      d d¦  «        V — ŒdS )Útextr_   N)Úget©Ú.0Úls     r$   ú	<genexpr>z-ensure_logged_into_hideout.<locals>.<genexpr>‘   s0   è è € ÐBÐB°!˜AŸEšE &¨"Ñ-Ô-ÐBÐBÐBÐBÐBÐBr&   c              3  ó    •K  — | ]}|‰v V — Œ	d S ©N© ©rh   ÚkwÚblobs     €r$   rj   z-ensure_logged_into_hideout.<locals>.<genexpr>–   s'   øè è € ÐQÐQ˜bˆr�TˆzÐQÐQÐQÐQÐQÐQr&   )ÚDISCONNECTEDzLOST CONTACTÚ0KÚOKuB   âš ï¸� PhÃ¡t hiá»‡n dialog Disconnected. Báº¥m Spacebar / Enter...é    é9   r1   ©Údelay_afteré   é   zLOG INÚLOGINuA   ðŸŽ¯ PhÃ¡t hiá»‡n mÃ n hÃ¬nh Login! TÃ¬m vá»‹ trÃ­ nÃºt LOG IN...re   Úwordsr   Úbounding_rectr-   ÚxÚwidthr/   ÚyÚheightr.   u0   Click chÃ­nh xÃ¡c nÃºt LOG IN táº¡i mÃ n hÃ¬nh (z, z)...ç      à?g
×£p=
ç?u"   Click fallback nÃºt LOG IN táº¡i (g       @g      @c              3  ó    •K  — | ]}|‰v V — Œ	d S rl   rm   rn   s     €r$   rj   z-ensure_logged_into_hideout.<locals>.<genexpr>¾   s'   øè è € ÐsÐs˜bˆr�TˆzÐsÐsÐsÐsÐsÐsr&   )ÚPLAYzSELECT CHARACTERÚMONKzMARTIAL ARTISTÚBEONGUSIzLEVEL 90uW   ðŸŽ¯ PhÃ¡t hiá»‡n mÃ n hÃ¬nh Chá»�n NhÃ¢n Váº­t! Báº¥m Enter Ä‘á»ƒ vÃ o tháº¿ giá»›i...g      @Úrr   Úignore)r   Úerrorsiâÿÿÿc              3  ó&   K  — | ]}d |v pd|v V — ŒdS )ÚHideoutShorelineúShoreline HideoutNrm   rg   s     r$   rj   z-ensure_logged_into_hideout.<locals>.<genexpr>È   s3   è è € ÐUÐUÈ1Ð%¨Ð*ÐFÐ.AÀQÐ.FÐUÐUÐUÐUÐUÐUr&   uJ   ðŸ�  XÃ¡c nháº­n: NhÃ¢n váº­t Ä‘Ã£ Ä‘á»©ng vá»¯ng táº¡i Shoreline Hideout!)#r2   r3   r4   r   r%   ÚosÚpathÚdirnameÚ
subprocessÚPopenÚpidÚranger9   r:   ÚFindWindowWr(   Úc_ulongÚGetWindowThreadProcessIdÚbyrefÚvaluer@   rR   ÚwinocrÚrecognize_pil_syncrf   ÚjoinÚupperr   ÚanyÚwin32_inputÚ	press_keyÚclickÚexistsÚopenÚ	readlines)!rS   r4   r'   Úproc_pidÚexe_pathÚworking_dirÚCREATE_NEW_PROCESS_GROUPÚprocÚ_rO   Úpid_valÚattemptrL   Ú
lines_dataÚresrH   rI   rJ   rK   Ú	login_btnri   r{   Úw_firstÚw_lastrP   rQ   Útarget_xÚtarget_yÚfb_xÚfb_yÚfÚtailrp   s!                                   @r$   Úensure_logged_into_hideoutr¶   `   sa  ø€ åŒ]Ô!€FÝÑÔ€DØ€Hàð UÝÐ]Ñ^Ô^Ð^Ø`ˆÝ”g—o’o hÑ/Ô/ˆØ#-Ð ÝÔ  
°ÐKcÐdÑdÔdˆØ”8ˆÝÐ[˜xÐ[Ð[Ð[Ñ\Ô\Ð\å�r‘”ð 	ð 	ˆAÝŒJ�s‰OŒOˆOØ×"Ò"Ð#3°TÑ:Ô:ˆAØð Ý˜1‘v”v�ÝÐE¸TÐEÐEÐEÑFÔFÐFØ�ðøõ
 ”.Ñ"Ô"ˆØ×'Ò'¨­f¬l¸7Ñ.CÔ.CÑDÔDÐDØ”=ˆÝÐS¸$ÐSÐSÐSÈÐSÐSÐSÑTÔTÐTàð ÝÐ;À7ÐKÑKÔKÐKØˆzå˜4Ñ Ô Ð Ý„Jˆs�O„O€Oõ ÐgÑhÔhÐhÝ˜‘9”9ð Gñ GˆÝ˜tÑ$Ô$Ð$Ý'¨Ñ-Ô-ˆØð 	ÝŒJ�s‰OŒOˆOØàˆØˆ
Ýð 	KÝÔ+¨C°dÐ;Ñ;Ô;ˆCØŸš ¨"Ñ-Ô-ˆJØ—8’8ÐBÐB°zÐBÑBÔBÑBÔB×HÒHÑJÔJˆDå(¨Ñ.Ô.‰ˆˆB��Bõ ÐQÐQÐQÐQÐ$PÐQÑQÔQÑQÔQð 	ÝÐTÑUÔUÐUÝÔ! $¨¸#Ð>Ñ>Ô>Ð>ÝÔ! $¨¸#Ð>Ñ>Ô>Ð>ÝŒJ�s‰OŒOˆOÙð �tÐÐ˜w¨$˜™ÝÐSÑTÔTÐTØˆIØð 	ñ 	�Ø˜qŸušu V¨RÑ0Ô0×6Ò6Ñ8Ô8Ð8Ð8ØŸEšE '¨2Ñ.Ô.�EØð Ø"'¨¤(§,¢,¨ÀÑ"CÔ"C˜Ø!& r¤§¢¨ÀÑ!CÔ!C˜Ý  §¢¨S°!Ñ!4Ô!4¸¿
º
À3ÈÑ8JÔ8JÈVÏZÊZÐX_ÐabÑMcÔMcÑ8cÐfm×fqÒfqÐruÐwxÑfyÔfyÑ8yÐ}~Ñ7~Ñ!~ÑÔ˜Ý  §¢¨S°!Ñ!4Ô!4°w·{²{À8ÈQÑ7OÔ7OÐRSÑ7SÑ!SÑTÔT˜Ø%'¨ H˜	Ø˜ùàð 
?Ø 	¨!¤Ñ,�Ø 	¨!¤Ñ,�ÝÐaÀxÐaÐaÐS[ÐaÐaÐaÑbÔbÐbÝÔ! (¨HÀ#ÐFÑFÔFÐFÐFð �C  T¡	™NœNÑ*�Ø�C  T¡	™NœNÑ*�ÝÐK¸ÐKÐKÀÐKÐKÐKÑLÔLÐLÝÔ! $¨¸#Ð>Ñ>Ô>Ð>õ Ô! $¨¸#Ð>Ñ>Ô>Ð>ÝŒJ�s‰OŒOˆOÙõ ÐsÐsÐsÐsÐ$rÐsÑsÔsÑsÔsð 	ÝÐiÑjÔjÐjÝÔ! $¨¸#Ð>Ñ>Ô>Ð>ÝŒJ�s‰OŒOˆOÙõ Œ7�>Š>˜/Ñ*Ô*ð 	Ý�o s°WÀXÐNÑNÔNð +ÐRSØ—{’{‘}”} S T TÔ*�ð+ð +ð +ñ +ô +ð +ð +ð +ð +ð +ð +øøøð +ð +ð +ð +åÐUÐUÐPTÐUÑUÔUÑUÔUð ÝÐ`ÑaÔaÐaØ�åŒ
�3‰Œˆ‰à�ˆ>Ðs   ÕVÖV	Ö	V	c                ó4  — t          d¦  «         t          | ¦  «         t          | ¦  «        \  }}}}t          j        t          j        dd¬¦  «         t          j        d¦  «         t          j        t          j        dd¬¦  «         t          d¦  «         dS )	u[   Má»Ÿ tÃºi Ä‘á»“ vÃ  thá»±c hiá»‡n cáº¥t giá»¯ tÃ i sáº£n/currency vÃ o hÃ²m Ä‘á»“ an toÃ n.uI   3. Tiáº¿n hÃ nh kiá»ƒm tra vÃ  dá»�n dáº¹p hÃ nh trang (Stash Routine)...é   çš™™™™™é?rv   r�   r.   ul   âœ… Ä�Ã£ hoÃ n táº¥t kiá»ƒm tra vÃ  Ä‘Ã³ng kÃ­n tÃºi Ä‘á»“, báº£o toÃ n nguyÃªn váº¹n trang bá»‹ & currency.N)	r%   r@   r   r�   rž   ÚVK_Ir9   r:   Ú	VK_ESCAPE)r'   rH   rI   rJ   rK   s        r$   Ústash_inventory_itemsr¼   Ñ   s�   € åÐSÑTÔTÐTÝ˜4Ñ Ô Ð Ý$ TÑ*Ô*�N€BˆˆB�õ Ô�+Ô*¨D¸cÐBÑBÔBÐBõ 	„Jˆs�O„O€OÝÔ�+Ô/°À3ÐGÑGÔGÐGÝÐvÑwÔwÐwÐwÐwr&   c           	     óÆ  — t          d¦  «         t          | ¦  «         t          j        t          j        dd¬¦  «         t          j        t          j        dd¬¦  «         t          j        dd¬	¦  «         d
}t          | ¦  «        }|rF| 	                    |d¦  «         t          d|› d|j
        d         › d|j
        d         › d�¦  «         nOt          dd¬¦  «         t          | ¦  «        \  }}}}t          ||||¦  «        }|r| 	                    |d¦  «         t          j        t          j        dd¬¦  «         t          j        t          j        dd¬¦  «         |S )uL   Chá»¥p áº£nh mÃ n hÃ¬nh toÃ n cáº£nh nhÃ¢n váº­t (Vitals, Level, EXP, Gear).u`   4. Má»Ÿ Character Panel & Inventory Ä‘á»ƒ chá»¥p toÃ n cáº£nh nhÃ¢n váº­t trÆ°á»›c báº£o trÃ¬...é.   g333333ã?rv   r¸   r¹   ÚcapturesT©Úexist_okz%captures/pre_patch_baseline_v055c.pngÚPNGu/   ðŸ“¸ Ä�Ã£ lÆ°u áº£nh toÃ n cáº£nh nhÃ¢n váº­t: z (r   r}   r.   r[   uI   âš ï¸� KhÃ´ng chá»¥p Ä‘Æ°á»£c báº±ng capture_clean, fallback ImageGrab...ÚWARNr]   r1   r�   )r%   r@   r�   rž   ÚVK_Crº   rŒ   ÚmakedirsrR   ÚsaverE   r   r   r»   )r'   Úout_pathrL   rH   rI   rJ   rK   s          r$   Úcapture_character_full_baselinerÈ   á   sn  € åÐjÑkÔkÐkÝ˜4Ñ Ô Ð õ Ô�+Ô*¨D¸cÐBÑBÔBÐBÝÔ�+Ô*¨D¸cÐBÑBÔBÐBå„K�
 TÐ*Ñ*Ô*Ð*Ø6€Hå
# DÑ
)Ô
)€CØ
ð &Ø�Š�˜5Ñ!Ô!Ð!ÝÐf¸hÐfÐfÈ#Ì(ÐSTÌ+ÐfÐfÐX[ÔX`ÐabÔXcÐfÐfÐfÑgÔgÐgÐgåÐWÐ_eÐfÑfÔfÐfÝ(¨Ñ.Ô.‰ˆˆB��BÝ! " b¨"¨bÑ1Ô1ˆØð 	&Ø�HŠH�X˜uÑ%Ô%Ð%õ Ô�+Ô/°À3ÐGÑGÔGÐGÝÔ�+Ô/°À3ÐGÑGÔGÐGØ€Or&   r‘   úOptional[int]c                óx  — t          d¦  «         t          j        dd¬¦  «         d}t          j        ¦   «                              ¦   «                              ¦   «         }t          j        t          j        ¦  «         	                    d¦  «        }t          ¦   «         }| r|                     | ¬¦  «        ni }d||d	| d
ddddddddddœ
ddddddddddddœdddddd d!œ|g d"¢d#d$œ}t          |d%d&¬'¦  «        5 }t          j        ||d(d)¬*¦  «         d+d+d+¦  «         n# 1 swxY w Y   t          d,|› �¦  «         |S )-uP   TrÃ­ch xuáº¥t RAM snapshot hiá»‡n táº¡i cá»§a Monk CI Lv 90 theo schema chuáº©n.u.   5. TrÃ­ch xuáº¥t RAM Snapshot Monk CI Lv 90...zcharacter_target/snapshotsTrÀ   z2character_target/snapshots/pre_patch_baseline.jsonz%Y-%m-%dT%H:%M:%SZ)r‘   zautopoe2.character_snapshot/v1ÚPRE_PATCH_T15M_SAFEGUARDr…   zBEONGUSI#3653ÚMonkzMartial ArtistéZ   zForbidden RiteszChaos Inoculation (CI)zHP 1/1 (Chaos Immune)zv0.5.5c_6AA2213Cr‹   )
ÚnameÚaccountÚclassÚ
ascendancyr   ÚleagueÚdefense_typeÚlife_invariantÚclient_build_targetÚcurrent_zoner.   i¼  éñ   i�  é   éŒ   é“   )Úlife_currentÚlife_maxÚenergy_shield_currentÚenergy_shield_maxÚward_currentÚward_maxÚmana_currentÚmana_maxÚspirit_availableÚspirit_reservedÚ
spirit_maxéd   éK   iØ"  iØ  )Úchaos_resistance_pctÚfire_resistance_pctÚcold_resistance_pctÚlightning_resistance_pctÚevasion_ratingÚarmour_rating)z,INV-CI-01: HP 1/1 protected by Energy Shieldz+INV-WASD-NO-BLIND-LMB: WASD only navigationz5INV-KEY-NO-F-FOR-INTERACT: F key reserved for Skill 8z6INV-KEY-PORTAL: Period key '.' for Hideout Town Portalz,INV-F8-MUTES-BRAIN: Standby safety interlockÚASSETS_SECURED_READY_FOR_PATCH)Úschema_versionÚtimestamp_localÚtimestamp_utcÚtarget_maintenance_phaseÚ
client_pidÚ	characterÚvitalsÚdefense_metricsÚram_telemetry_liveÚinvariants_checkedÚsafeguard_statusrN   r   r   r/   F)ÚindentÚensure_asciiNu*   ðŸ’¾ Ä�Ã£ lÆ°u snapshot nhÃ¢n váº­t vÃ o: )r%   rŒ   rÅ   r   r    Ú
astimezoneÚ	isoformatr   Úutcr!   r   Úcapture_ram_snapshotr¡   ÚjsonÚdump)r‘   Úout_fileÚ	now_localÚnow_utcÚram_mgrÚ	live_dumpÚsnapshot_payloadr´   s           r$   Údump_ram_snapshotr  þ   sù  € åÐ8Ñ9Ô9Ð9Ý„KÐ,°tÐ<Ñ<Ô<Ð<ØC€Hå”‘”×)Ò)Ñ+Ô+×5Ò5Ñ7Ô7€IÝŒl�8œ<Ñ(Ô(×1Ò1Ð2FÑGÔG€Gõ (Ñ)Ô)€GØ9<ÐD�×,Ò,°Ð,Ñ5Ô5Ð5À"€Ið ;Ø$Ø Ø$>ØàØ&ØØ*ØØ'Ø4Ø5Ø#5Ø/ð
ð 
ð ØØ%)Ø!%ØØØØØ !Ø"Øð
ð 
ð %(Ø#%Ø#%Ø(*Ø"Ø!ð
ð 
ð (ð
ð 
ð 
ð =ð_0ð 0Ðõd 
ˆh˜ gÐ	.Ñ	.Ô	.ð E°!ÝŒ	Ð" A¨a¸eÐDÑDÔDÐDðEð Eð Eñ Eô Eð Eð Eð Eð Eð Eð Eøøøð Eð Eð Eð Eõ Ð?°XÐ?Ð?Ñ@Ô@Ð@Ø€Os   Ã8DÄD!Ä$D!c                óÆ  — t          d¦  «         t          | ¦  «         t          j        j        }d}t          j        |dd¬¦  «         dD ]=}|                     t          |¦  «        ¦  «        dz  }t          j        |d¬¦  «         Œ>t          j        |dd	¬¦  «         t          d
¦  «         t          j
        d¦  «         d}|                     | |dd¦  «         t          d| d›d�¦  «         t          j
        d¦  «         |                     | ¦  «        r8t          d¦  «         |r't          j        dddt          |¦  «        gd¬¦  «         t          d¦  «         dS )u_   Thá»±c hiá»‡n Graceful Logout ra Character Selection vÃ  gá»­i WM_CLOSE táº¯t client Ãªm dá»‹u.uB   6. Thá»±c hiá»‡n quy trÃ¬nh Graceful Logout & WM_CLOSE an toÃ n...rx   ry   gš™™™™™É?rv   z/exitéÿ   g¸…ëQ¸ž?g      @un   Ä�Ã£ gá»­i lá»‡nh /exit. Chá»� 3.0s Ä‘á»ƒ server lÆ°u trá»¯ state nhÃ¢n váº­t lÃªn cÆ¡ sá»Ÿ dá»¯ liá»‡u GGG...g      @é   r   u!   Ä�Ã£ gá»­i WM_CLOSE tá»›i HWND 0xrZ   u$   . Chá»� tiáº¿n trÃ¬nh káº¿t thÃºc...uR   Cá»­a sá»• váº«n cÃ²n tá»“n táº¡i, gá»­i lá»‡nh WM_DESTROY / Terminate an toÃ n...Útaskkillz/Fz/PIDT)Úcapture_outputuw   ðŸ�� Tiáº¿n trÃ¬nh game Ä‘Ã£ Ä‘Ã³ng Ãªm dá»‹u hoÃ n toÃ n. KhÃ´ng cÃ³ rá»§i ro há»�ng state hoáº·c kick cÆ°á»¡ng bá»©c!N)r%   r@   r2   r3   r4   r�   rž   Ú
VkKeyScanWÚordr9   r:   ÚPostMessageWr5   r�   Úrunr   )r'   r‘   r4   Ú	VK_RETURNrK   ÚvkÚWM_CLOSEs          r$   Úgraceful_logout_and_exitr  D  s†  € åÐLÑMÔMÐMÝ˜4Ñ Ô Ð õ Œ]Ô!€FØ€IÝÔ˜) T°sÐ;Ñ;Ô;Ð;Øð 4ð 4ˆØ×Ò�s 2™wœwÑ'Ô'¨$Ñ.ˆÝÔ˜b¨dÐ3Ñ3Ô3Ð3Ð3ÝÔ˜) T°sÐ;Ñ;Ô;Ð;åÐxÑyÔyÐyÝ„Jˆs�O„O€Oð €HØ
×Ò˜˜h¨¨1Ñ-Ô-Ð-ÝÐX¨DÐXÐXÐXÐXÑYÔYÐYå„Jˆs�O„O€OØ‡‚�tÑÔð VÝÐ`ÑaÔaÐaØð 	VÝŒN˜J¨¨fµc¸#±h´hÐ?ÐPTÐUÑUÔUÐUåð  	Bñ  Cô  Cð  Cð  Cð  Cr&   c                 ó†  — d} t          d¦  «         t          d¦  «         t          d¦  «         t          | ¦  «        \  }}|st          dd¬¦  «         dS t          |¦  «         t          |¦  «        }t	          |¦  «        }t          ||¦  «         t          d¦  «         t          d¦  «         t          d¦  «         d	S )
NzJC:\Program Files (x86)\Grinding Gear Games\Path of Exile 2\logs\Client.txtzB==================================================================uP     Báº®T Ä�áº¦U CHIáº¾N Dá»ŠCH Háº¬U Cáº¦N TIá»€N Báº¢O TRÃŒ T-15M (SÆ¯ Ä�OÃ€N 5)u3   â�Œ KhÃ´ng thá»ƒ thiáº¿t láº­p phiÃªn tÃ¡c chiáº¿n!r\   r]   FuS     HOÃ€N THÃ€NH CHIáº¾N Dá»ŠCH Háº¬U Cáº¦N T-15M: Sáº´N SÃ€NG Ä�Ã“N Báº¢N VÃ� Má»šI!T)r%   r¶   r¼   rÈ   r  r  )Ú
client_logr'   r‘   Úbaseline_imgÚsnapshot_files        r$   Úmainr  c  sÚ   € Ø^€JÝÐLÑMÔMÐMÝÐZÑ[Ô[Ð[ÝÐLÑMÔMÐMõ +¨:Ñ6Ô6�I€Dˆ#Øð ÝÐAÈÐQÑQÔQÐQØˆuõ ˜$ÑÔÐõ 3°4Ñ8Ô8€Lõ & cÑ*Ô*€Mõ ˜T 3Ñ'Ô'Ð'åÐLÑMÔMÐMÝÐ]Ñ^Ô^Ð^ÝÐLÑMÔMÐMØˆ4r&   Ú__main__)r   )r   r   r   r   )r'   r(   r)   r*   )r'   r(   r)   rA   )rS   r   r)   rT   )r'   r(   )r'   r(   r)   r   )r‘   rÉ   r)   r   )r'   r(   r‘   rÉ   )<Ú__doc__Ú
__future__r   r2   Úctypes.wintypesr   rŒ   r�   Úsysr9   r   r   Úpathlibr   Útypingr   r   r	   r
   r   ÚPILr   ÚhasattrÚstdoutr   ÚstderrÚ	Exceptionr�   Úinsertr   Ú__file__ÚresolveÚparentÚ'src.assistant_tool.sync_memory_snapshotr   Úsrc.common.screen_capturer   r   r   Úsrc.common.vision_ocrÚcommonÚ
vision_ocrÚsrc.common.win32_inputr�   Úsrc.common.win32_windowr   r   r   r˜   ÚImportErrorr%   r@   rR   r¶   r¼   rÈ   r  r  r  Ú__name__rm   r&   r$   ú<module>r4     s  ððð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ø 
€
€
€
Ø €€€Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø Ð Ð Ð Ð Ð Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3à Ð Ð Ð Ð Ð ð	Ø€wˆsŒz˜=Ñ)Ô)ð 1ØŒ
×Ò¨ÐÑ0Ô0Ð0ØŒ
×Ò¨ÐÑ0Ô0Ð0øøØð 	ð 	ð 	Ø€Dð	øøøð „‡‚��3�3�t�t˜H‘~”~×-Ò-Ñ/Ô/Ô6Ô=Ñ>Ô>Ñ ?Ô ?Ð ?à MÐ MÐ MÐ MÐ MÐ MØ fÐ fÐ fÐ fÐ fÐ fÐ fÐ fÐ fÐ fØ *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø ZÐ ZÐ ZÐ ZÐ ZÐ ZÐ ZÐ ZÐ ZÐ ZðØ€M€M€M€MøØð ð ð Ø€F€F€Fðøøøð=ð =ð =ð =ð =ð
ð ð ð ð"ð ð ð ð6nð nð nð nðbxð xð xð xð ð ð ð ð:Cð Cð Cð CðLCð Cð Cð Cð>ð ð ð< ˆzÒÐØ€D�F„F€F€F€Fð Ðs%   ÁAB ÂBÂBÄD ÄD ÄD 