Uname: Linux web3.us.cloudlogin.co 5.10.226-xeon-hst #2 SMP Fri Sep 13 12:28:44 UTC 2024 x86_64
Software: Apache
PHP version: 8.1.31 [ PHP INFO ] PHP os: Linux
Server Ip: 162.210.96.117
Your Ip: 3.129.73.98
User: edustar (269686) | Group: tty (888)
Safe Mode: OFF
Disable Function:
NONE

name : sidebar.cpython-311.pyc
�

TfrO��|�dZddlZddlZddlZddlZddlmZddlm	Z	ddl
mZddlm
Z
d�Zd�Zd	�Zd
�Zejd���ZGd�d
��ZGd�de��ZGd�de��ZGd�de��ZGd�de��Zd�Zedkr'ddlmZeddd���ddlmZee��dSdS)z�Line numbering implementation for IDLE as an extension.
Includes BaseSideBar which can be extended for other sidebar based extensions
�N)�Font)�idleConf)�	Delegator)�macosxc�l�|�|��}|rtt|����ndS)z7Return the line number of an index in a Tk text widget.N)�index�int�float)�textr�
text_indexs   �8/usr/local/python-3.11/lib/python3.11/idlelib/sidebar.py�
get_linenors3�����E�"�"�J�%/�9�3�u�Z� � �!�!�!�T�9�c�"�t|d��S)z7Return the number of the last line in a Tk text widget.zend-1c)r�rs r
�get_end_linenumberrs���d�H�%�%�%rc�T�|�|�d�|�d�d��}|r|dndS)z@Display height, in lines, of a logical line in a Tk text widget.z
 linestartz lineend�displaylinesr)�count)rr�ress   r
�get_displaylinesrsD��
�*�*��)�)�)��'�'�'�#�%�%�C���3�q�6�6�a�rc
��|���}|dkr|���}n-|dkr|���}ntd|�����t	t|jj|d|�d��|�d��g����}t	t|jj|d|�d��|�d��g����}||fS)z;Get the total padding of a Tk widget, including its border.�pack�gridzUnsupported geometry manager: �padx�border�pady)	�
winfo_manager�	pack_info�	grid_info�
ValueError�sum�map�tk�getint�cget)�widget�manager�inforrs     r
�get_widget_paddingr*!s���"�"�$�$�G��&������!�!���	�F�	�	����!�!����C�'�C�C�D�D�D��s�6�9�#��V�����F������H���&�����D�
�s�6�9�#��V�����F������H���&�����D�
��:�rc#��K�|�tj���	dV�|�tj���dS#|�tj���wxYw)N��state)�	configurer$�NORMAL�DISABLEDrs r
�temp_enable_text_widgetr1;sb�����N�N���N�#�#�#�*�
�������R�[��)�)�)�)�)�����R�[��)�)�)�)���s�A
�
"A,c�`�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�ZdS)�BaseSideBarz%A base class for sidebars using Text.c��||_|j|_|j|_d|_|���|_|���|���|�	��dS�NF)
�editwin�
text_frame�parentr�is_shown�init_widgets�main_widget�bind_events�update_font�
update_colors)�selfr6s  r
�__init__zBaseSideBar.__init__Fss������(����L��	���
��,�,�.�.����������������������rc��t�)z<Initialize the sidebar's widgets, returning the main widget.��NotImplementedError�r?s r
r:zBaseSideBar.init_widgetsT���!�!rc��t�)�;Update the sidebar text font, usually after config changes.rBrDs r
r=zBaseSideBar.update_fontXrErc��t�)�=Update the sidebar text colors, usually after config changes.rBrDs r
r>zBaseSideBar.update_colors\rErc��t�)z,Layout the widget, always using grid layout.rBrDs r
rzBaseSideBar.grid`rErc�N�|js|���d|_dSdS)NT)r9rrDs r
�show_sidebarzBaseSideBar.show_sidebards.���}�	!��I�I�K�K�K� �D�M�M�M�	!�	!rc�X�|jr"|j���d|_dSdSr5)r9r;�grid_forgetrDs r
�hide_sidebarzBaseSideBar.hide_sidebaris6���=�	"���(�(�*�*�*�!�D�M�M�M�	"�	"rc��t�)z8Hook for vertical scrolling for sub-classes to override.rB�r?�args�kwargss   r
�
yscroll_eventzBaseSideBar.yscroll_eventnrErc�D�|jjj|�|j|i|��S)�mRedirect vertical scrolling to the main editor text widget.

        The scroll bar is also updated.
        )r6�vbar�setrTrQs   r
�redirect_yscroll_eventz"BaseSideBar.redirect_yscroll_eventrs1��
	�����t�$�$�!�t�!�4�2�6�2�2�2rc�8�|j���dS)z8Redirect focus-in events to the main editor text widget.�break)r�	focus_set�r?�events  r
�redirect_focusin_eventz"BaseSideBar.redirect_focusin_eventzs���	�������wrc�|�|j���|j�|d|j���dS)z<Redirect mouse button events to the main editor text widget.r��x�yr[)rr\�event_generaterc)r?r^�
event_names   r
�redirect_mousebutton_eventz&BaseSideBar.redirect_mousebutton_events:���	�������	� � ��q�E�G� �<�<�<��wrc�V�|j�dd|j|j���dS)z7Redirect mouse wheel events to the editwin text widget.�<MouseWheel>r)rbrc�deltar[)rrdrcrir]s  r
�redirect_mousewheel_eventz%BaseSideBar.redirect_mousewheel_event�s6���	� � ��#$���u�{�	!�	D�	D�	D��wrc����	�
���
��j�jd<�j�d�j���j�d�j���fd�}dD]C}d|�d�d|�d�d	|�d
�fD]}|||����d|�d�d
|�d�fD]}||d|�d������Dd�d�d�	��fd��
�
���fd�}�j�d|�����fd�}�j�d|���
�fd�}�j�d|���	�
���
fd��
�	���
fd�}�j�d|���	�fd�}�j�d|��dS)N�yscrollcommandz	<FocusIn>rhc�t��tj�j|���}�j�||��dS)N)re)�	functools�partialrfr;�bind)re�target_event_name�handlerr?s   �r
�bind_mouse_eventz1BaseSideBar.bind_events.<locals>.bind_mouse_event�sD����'��(G�3D�F�F�F�G���!�!�*�g�6�6�6�6�6r)����z<Button-�>z<ButtonRelease-z<Bz-Motion>)rqz<Double-Button-z<Triple-Button-c�4��t�jd|����}t�|g��\}}�j�ddd���j�d|�d�|dz�d����j�d||kr|n|dz�d���dS)	z6Helper function for drag and selection event handlers.�@0,�sel�1.0�endz.0��insertN)rr�sorted�
tag_remove�tag_add�mark_set)�y_coord�lineno�a�br?�
start_lines    ��r
�%drag_update_selection_and_insert_markzFBaseSideBar.bind_events.<locals>.drag_update_selection_and_insert_mark�s������	�?��?�?�;�;�F��:�v�.�/�/�D�A�q��I� � ���u�5�5�5��I���e��X�X�X�!�A�#�z�z�z�:�:�:��I���x�,2�a�K�K�&�&�V�a�Z�K�K�K�
M�
M�
M�
M�
Mrc���tt�j�d|j���������|j��|j��dS)Nrz)r	r
rrrc)r^r��last_yr?r�s ����r
�b1_mousedown_handlerz5BaseSideBar.bind_events.<locals>.b1_mousedown_handler�sP����U�4�9�?�?�?���?�?�#C�#C�D�D�E�E�J��W�F�1�1�%�'�:�:�:�:�:rz
<Button-1>c�T��d�d��j�dd|j���dS)N�<ButtonRelease-1>rra)rrdrc)r^r�r?r�s ���r
�b1_mouseup_handlerz3BaseSideBar.bind_events.<locals>.b1_mouseup_handler�s5���
�J��F��I�$�$�%8�A���$�I�I�I�I�Irr�c�>����dS|j��|j��dS�N)rc)r^r�r�s ��r
�b1_drag_handlerz0BaseSideBar.bind_events.<locals>.b1_drag_handler�s-����~����W�F�1�1�%�'�:�:�:�:�:rz<B1-Motion>c����}|��j����d�dS|dkr*�j�d|zd���|��n`|�j���krC�j�d|z�j���z
d���|���j�d����dS)z6Mimic Text auto-scrolling when dragging outside of it.Nr����pixelsr~�2)r;�after_cancelr�yview_scroll�winfo_height�after)rc�auto_scrolling_after_idr�r�r?�text_auto_scrolls �����r
r�z1BaseSideBar.bind_events.<locals>.text_auto_scroll�s�����A��y�� �-�-�.E�F�F�F�*.�'����Q����	�&�&�r�A�v�x�8�8�8�5�5�a�8�8�8�8��T�%�2�2�4�4�4�4��	�&�&�q�1�u�t�/?�/L�/L�/N�/N�'N�'/�1�1�1�5�5�a�8�8�8�� �&�&�r�+;�<�<�
$�#�#rc�T����$|j��j�d����dSdS)Nr)rcr;r�)r^r�r�r?r�s ����r
�b1_leave_handlerz1BaseSideBar.bind_events.<locals>.b1_leave_handler�s<���'�.�����$�*�*�1�.>�?�?�(�'�'�/�.rz
<B1-Leave>c�H�����j����d�dSdSr�)r;r�)r^r�r?s ��r
�b1_enter_handlerz1BaseSideBar.bind_events.<locals>.b1_enter_handlers7���'�2�� �-�-�.E�F�F�F�*.�'�'�'�3�2rz
<B1-Enter>)rYrr;rpr_rj)r?rs�buttonrer�r�r�r�r�r�r�r�r�r�s`        @@@@@r
r<zBaseSideBar.bind_events�s���������&*�&A��	�"�#�	
����k�4�+F�G�G�G�	
����n�d�.L�M�M�M�	7�	7�	7�	7�	7�
#�
	I�
	I�F�3�&�3�3�3�:��:�:�:�4�F�4�4�4�!�
K�
K�
�!� ��z�J�J�J�J�J� ;��:�:�:�:��:�:�:�!�
I�
I�
�!� ��3G�f�3G�3G�3G�I�I�I�I�I�
I��
���#'��	M�	M�	M�	M�	M�	M�	;�	;�	;�	;�	;�	;�	;�	;�	
����l�,@�A�A�A�	J�	J�	J�	J�	J�	J�	J�	
����1�3E�F�F�F�	;�	;�	;�	;�	;�	;�	
����m�_�=�=�=�	=�	=�	=�	=�	=�	=�	=�	=�	=�&	@�	@�	@�	@�	@�	@�	@�	@�	
����l�,<�=�=�=�	/�	/�	/�	/�	/�	/�	
����l�,<�=�=�=�=�=rN)�__name__�
__module__�__qualname__�__doc__r@r:r=r>rrLrOrTrYr_rfrjr<�rr
r3r3Ds�������/�/����"�"�"�"�"�"�"�"�"�"�"�"�!�!�!�
"�"�"�
"�"�"�3�3�3����
������|>�|>�|>�|>�|>rr3c�(�eZdZdZd�Zdd�Zdd�ZdS)�EndLineDelegatorz}Generate callbacks with the current end line number.

    The provided callback is called after every insert and delete.
    c�<�tj|��||_dSr�)rr@�changed_callback)r?r�s  r
r@zEndLineDelegator.__init__s!����4� � � � 0����rNc��|j�|||��|�t|j����dSr�)�delegaterr�r)r?r�chars�tagss    r
rzEndLineDelegator.insertsA���
���U�E�4�0�0�0����0���?�?�@�@�@�@�@rc��|j�||��|�t|j����dSr�)r��deleter�r)r?�index1�index2s   r
r�zEndLineDelegator.deletes?���
���V�V�,�,�,����0���?�?�@�@�@�@�@rr�)r�r�r�r�r@rr�r�rr
r�r�
s_��������1�1�1�A�A�A�A�A�A�A�A�A�Arr�c�F��eZdZdZ�fd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
�xZS)	�LineNumbersz(Line numbers support for editor windows.c����t���|��t|j��}|jj�||jj���dS)N�r�)�superr@r��update_sidebar_textr6�per�insertfilterafter�undo)r?r6�end_line_delegator�	__class__s   �r
r@zLineNumbers.__init__sj���
������!�!�!�-�d�.F�G�G��	
���*�*�+=�15��1B�	+�	D�	D�	D�	D�	Drc	��t|j��\}}tj|jdtjd|dd���|_|j�tj���d|_	t|jd��|_t|j��5|j�
ddd	��ddd��n#1swxYwY|j�d
d
���|j�d	tj���t!|j��}|�|��|jS)
Nr~rtr)�width�wraprr�borderwidth�highlightthicknessr,r�r�1�
linenumberF)�	takefocus�exportselection)�justify)r*rr$�Textr8�NONE�sidebar_text�configr0�prev_end�type�_sidebar_width_typer1r�
tag_config�RIGHTrr�)r?�_padxrr}s    r
r:zLineNumbers.init_widgets'sz��(���3�3���t��G�D�K�q�r�w�)*��01�a�I�I�I���	
�� � �r�{� �3�3�3���
�#'��(9�'�(B�#C�#C�� �
$�T�%6�
7�
7�	B�	B���$�$�X�s�L�A�A�A�	B�	B�	B�	B�	B�	B�	B�	B�	B�	B�	B����	B�	B�	B�	B��� � �5�%� �H�H�H���$�$�\�2�8�$�D�D�D� ���+�+��� � ��%�%�%�� � s�&C�C�Cc�T�|j�ddtj���dS)Nr~r��row�column�sticky)r�rr$�NSEWrDs r
rzLineNumbers.grid:s(������1�Q�r�w��?�?�?�?�?rc�P�tj|jdd��}||jd<dS)N�main�EditorWindow�font)r�GetFontrr�)r?r�s  r
r=zLineNumbers.update_font=s+�����	�6�>�B�B��$(���&�!�!�!rc��tjtj��d��}|d}|d}|j�|||||���dS)rIr��
foreground�
background)�fg�bg�selectforeground�selectbackground�inactiveselectbackgroundN)r�GetHighlight�CurrentThemer�r�)r?�colorsr�r�s    r
r>zLineNumbers.update_colorsAsh���&�x�'<�'>�'>��M�M���L�)�
��L�)�
��� � ��j�'�*�%/�	!�	
�	
�	
�	
�	
rc���||jkrdStt|����tt|j����z
}|rItt	|jd����}||z}|�|��|jd<t|j��5||jkrrd�tj
dgttt|jdz|dz��������}|j�
d|d��n!|j�|dz�d�d��ddd��n#1swxYwY||_dS)	z�
        Perform the following action:
        Each line sidebar_text contains the linenumber for that line
        Synchronize with editwin.text so that both sidebar_text and
        editwin.text contain the same number of linesNr��
�r~zend -1cr�z.0 -1c)r��len�strr	r
r�r�r1�join�	itertools�chainr#�rangerr�)r?r}�width_difference�	cur_width�	new_width�new_texts      r
r�zLineNumbers.update_sidebar_textLs����$�-����F��s�3�x�x�=�=�3�s�4�=�/A�/A�+B�+B�B���	M��E�$�"3�G�"<�=�=�>�>�I�!�$4�4�I�)-�)A�)A�)�)L�)L�D��g�&�
$�T�%6�
7�
7�	F�	F��T�]�"�"��9�9�Y�_��D���U�4�=�1�#4�c�A�g�>�>�?�?�&�&�����!�(�(��X�|�L�L�L�L��!�(�(�C��E�)9�)9�)9�9�E�E�E�	F�	F�	F�	F�	F�	F�	F�	F�	F�	F�	F����	F�	F�	F�	F���
�
�
s�+BE�E�Ec�F�|j�|d��dS)Nrr[)r��yview_movetorQs   r
rTzLineNumbers.yscroll_eventgs"����&�&�t�A�w�/�/�/��wr)r�r�r�r�r@r:rr=r>r�rT�
__classcell__�r�s@r
r�r�s��������2�2�D�D�D�D�D�!�!�!�&@�@�@�)�)�)�	
�	
�	
����6������rr�c�$�eZdZd�Zdd�Zdd�ZdS)� WrappedLineHeightChangeDelegatorc�<�tj|��||_dS)z�
        callback - Callable, will be called when an insert, delete or replace
                   action on the text widget may require updating the shell
                   sidebar.
        N)rr@�callback)r?r�s  r
r@z)WrappedLineHeightChangeDelegator.__init__ms ��	��4� � � � ��
�
�
rNc���d|v}|rt||��}|j�|||��|rt||��}||krdS|���dS)Nr�)rr�rr�)r?rr�r��is_single_line�before_displaylines�after_displayliness       r
rz'WrappedLineHeightChangeDelegator.insertvsy���U�*���	@�"2�4��"?�"?���
���U�E�4�0�0�0��	�!1�$��!>�!>��!�%8�8�8����
�
�����rc��|�|dz}t||��t||��k}|rt||��}|j�||��|rt||��}||krdS|���dS)Nz+1c)rrr�r�r�)r?r�r�r�r�rs      r
r�z'WrappedLineHeightChangeDelegator.delete�s����>��e�^�F�#�D�&�1�1�Z��f�5M�5M�M���	A�"2�4��"@�"@���
���V�V�,�,�,��	�!1�$��!?�!?��!�%8�8�8����
�
�����rr�)r�r�r�r@rr�r�rr
r�r�lsK������!�!�!����������rr�c�\��eZdZdZ�fd�Zd�Z�fd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
�xZS)�ShellSidebarz0Sidebar for the PyShell window, for prompts etc.c���d|_i|_t���|��t	|j��}|jjj}|j	|j
ur7|j	|jjjur|j	}|j	|jjju�|jj�||���d|_
dS)Nr�T)�canvas�line_promptsr�r@r��change_callbackr6r��topr�r�bottomr�r9)r?r6�change_delegator�dr�s    �r
r@zShellSidebar.__init__�s����������
������!�!�!�
-�T�-A�B�B�	�
�L�� ���:�T�Y�&�&��*�D�L�$4�$;�;�;��J���*�D�L�$4�$;�;�;����*�*�+;�1�*�E�E�E���
�
�
rc��tj|jdddd���|_|���|���|jS)N�rF)r�r�r�r�)r$�Canvasr8r�update_sidebarrrDs r
r:zShellSidebar.init_widgets�sQ���i���2�,-�!�*/�1�1�1���	
�������	�	�����{�rc���t�����|j�t	j��rdnd|j��dS)Nz
<Button-2>z
<Button-3>)r�r<r;rpr�isAquaTk�context_menu_event)r?r�s �r
r<zShellSidebar.bind_events�sX���
������������"�O�-�-�?�L�L�<��#�	
�	
�	
�	
�	
rc�l��tj�jd���}t�j�dd����}�fd�}|�d|d��|rdnd	�
��|�d|d��|rdnd	�
��|�|j|j	��d
S)Nr)�tearoffr{r|c������fd�S)Nc�8���j����Sr�)rrd��	eventnamer?s��r
�<lambda>z@ShellSidebar.context_menu_event.<locals>.mkcmd.<locals>.<lambda>�s���4�9�3�3�I�>�>�rr�rs`�r
�mkcmdz.ShellSidebar.context_menu_event.<locals>.mkcmd�s����>�>�>�>�>�>r�Copyz<<copy>>�normal�disabled)�label�commandr-zCopy with promptsz<<copy-with-prompts>>r[)
r$�Menur;�boolr�
tag_nextrange�add_command�tk_popup�x_root�y_root)r?r^�rmenu�
has_selectionrs`    r
rzShellSidebar.context_menu_event�s�������(�!�4�4�4���T�Y�4�4�U�E�B�B�C�C�
�	?�	?�	?�	?�	?�
����"'�%�
�"3�"3�,9� I���z�	�	K�	K�	K�	��� 3�"'�%�(?�"@�"@�,9� I���z�	�	K�	K�	K�	���u�|�U�\�2�2�2��wrc�X�|j�ddtjdd���dS)Nr~rrt)r�r�r�rr)rrr$r�rDs r
rzShellSidebar.grid�s+������Q�q���q�q��I�I�I�I�Irc�@�|jr|���dSdSr�)r9rrDs r
rzShellSidebar.change_callback�s.���=�	"����!�!�!�!�!�	"�	"rc	��|j}|j}|j}ix}|_|�t
j��|�d��}|�dd��ddkr|�|�d���}|�	|��x}��|d}||�d���}d|vrdnd	|vrd
nd}	|	rJ|�
d|t
j|	|j|j
d�
��t||��}
|	||
<|�|�d���}|�	|��x}��dSdS)Nz@0,0�.r~�0z+1line linestartz linestart -1c�consolez>>>�stdinz...rtr)�anchorrr��fillz+1line)r�	tag_namesrrr�r$�ALLr�split�	dlineinfo�create_text�NWr�r�r)r?r�
text_tagnamesrrr�lineinforc�prev_newline_tagnames�promptr�s           r
rzShellSidebar.update_sidebar�s{���y����
����+-�-��t�(��
�
�b�f�����
�
�6�"�"���;�;�s�A���q�!�S�(�(��J�J�%�9�9�9�:�:�E��>�>�%�0�0�0�x�=����A�$1�M�U�2J�2J�2J�$K�$K�!�"�&;�;�;��� �$9�9�9����
�
�
.��"�"�1�a���F�(,�	���A��#�H�H�H�#�D�%�0�0��'-��V�$��J�J�%�/�/�/�0�0�E� �>�>�%�0�0�0�x�=�=�=�=�=rc�.�|���dS)rVr[)rrQs   r
rTzShellSidebar.yscroll_event�s��
	
�������wrc���tj|jdd��}t|j|����t	�fd�dD����}|j�|dzdz���||_|���d	S)
rGr�r�)r�c3�B�K�|]}��|��V��dSr�)�measure)�.0�char�tk_fonts  �r
�	<genexpr>z+ShellSidebar.update_font.<locals>.<genexpr>�s/�����F�F�4�����.�.�F�F�F�F�F�Fr)rxr,rurv)r�N)	rr�rr�maxrr.r�r)r?r��
char_widthrBs   @r
r=zShellSidebar.update_font�s�������	�6�>�B�B���t�y�t�,�,�,���F�F�F�F�:�F�F�F�F�F�
�����J��N�Q�$6��7�7�7���	��������rc�.�tjtj��d��}tjtj��d��}|d}|d}||f|_|j�|���|���dS)rIr�r.r�r�)r�N)rr�r�r�rr.r)r?�linenumbers_colors�
prompt_colorsr�r�s     r
r>zShellSidebar.update_colors�s���%�2�8�3H�3J�3J�L�Y�Y�� �-�h�.C�.E�.E�y�Q�Q�
�"�<�0�
�'��5�
�!�:�.���������4�4�4��������r)r�r�r�r�r@r:r<rrrrrTr=r>r�r�s@r
rr�s��������:�:������$���
�
�
�
�
����J�J�J�"�"�"�1�1�1�4������������rrc
���ddlm}tj|��}tj|��}|�tjtjd���|�dd���|�	dd���tj|dd��}tj|d	d
tj
|���}|�ddtj���||��}tj|��|_t%|��}|���|�d
d�d�t-dd��D������dS)Nr)�
Dummy_editwinT)�sider1�expandr~)�weightr�r��P�)r��heightr�r�r�r|r�c3� K�|]	}d|zV��
dS)r�Nr�)r@�is  r
rCz,_sidebar_number_scrolling.<locals>.<genexpr>s&���� >� >�1��Q�� >� >� >� >� >� >r�e)�idlelib.idle_test.test_sidebarrJr$�Toplevel�Framer�LEFT�BOTH�rowconfigure�columnconfigurerr�r�r�rr��	ScrollbarrWr�rLrr�r�)r8rJrr7r�rr6�linenumberss        r
�_sidebar_number_scrollingr]sD��<�<�<�<�<�<�
�+�f�
�
�C���#���J��O�O���r�w�t�O�<�<�<����A�a��(�(�(����q���+�+�+���C���8�8�D�
�7�:�R����t�L�L�L�D��I�I�!�A�b�g�I�.�.�.��m�D�!�!�G��<�
�+�+�G�L��g�&�&�K��������K�K��t�y�y� >� >��a��
�
� >� >� >�>�>�?�?�?�?�?r�__main__)r�zidlelib.idle_test.test_sidebarrtF)�	verbosity�exit)�run)r��
contextlibrnr��tkinterr$�tkinter.fontr�idlelib.configr�idlelib.delegatorr�idlelibrrrrr*�contextmanagerr1r3r�r�r�rr]r��unittestr��idlelib.idle_test.htestrar�rr
�<module>rksR��������������������������#�#�#�#�#�#�'�'�'�'�'�'�������:�:�:�&�&�&�
 � � ����4��*�*���*�C>�C>�C>�C>�C>�C>�C>�C>�LA�A�A�A�A�y�A�A�A�$M�M�M�M�M�+�M�M�M�`&�&�&�&�&�y�&�&�&�Rm�m�m�m�m�;�m�m�m�`@�@�@�,�z����������D�	)�Q�U�C�C�C�C�+�+�+�+�+�+��C�!�"�"�"�"�"��r
© 2025 GrazzMean