
    Vh4d                       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mZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dl m!Z! d dl"m#Z#m$Z$m%Z% d dl&m'Z'm(Z( d dl)Z)erd dl*m+Z+  e!       Z,dgZ- e.d      Z/eee#e$fZ0dZ1 ejd                  de1 d      Z3 G d de      Z4d Z5 G d d      Z6d Z7d Z8d Z9e0D ]  Z:e4jw                  e:e9         G d  de      Z<y)!    )annotationsN)TYPE_CHECKING)OrderedDict)MutableMapping)deepcopy)	constants)to_text)	text_type)AnsibleJSONEncoder)AnsibleDumper)AnsibleUnicode)AnsiblePlugin)stringc)Display)AnsibleUnsafeTextNativeJinjaUnsafeText
_is_unsafe)strip_internal_keysmodule_response_deepcopy)
TaskResultCallbackBase)msg	exceptionwarningsdeprecationsu	   
  z +([z])c                  &     e Zd ZddZ fdZ xZS )_AnsibleCallbackDumperc                    || _         y N)_lossy)selflossys     Q/home/dcms/DCMS/lib/python3.12/site-packages/ansible/plugins/callback/__init__.py__init__z_AnsibleCallbackDumper.__init__?   s	        c                &    t        |   |i | | S r   )superr$   )r!   argskwargs	__class__s      r#   __call__z_AnsibleCallbackDumper.__call__B   s     	$)&)r%   F)__name__
__module____qualname__r$   r+   __classcell__)r*   s   @r#   r   r   >   s     r%   r   c                &    t         D ]  }|| v s y y)zeReturns true if string should be in block format based on the existence of various newline separatorsTF)_YAML_BREAK_CHARS)scalarchs     r#   _should_use_blockr5   J   s"       < r%   c                      e Zd Zd Zy)_SpecialCharacterTranslatorc                    |dk(  s:d|cxk  rdk  s/n |dk(  s(d|cxk  rdk  sn d|cxk  rdk  sn d	|cxk  rd
k  r
n y |dk7  r|S y )N
       ~         i  i   i  i   i i   )r!   r4   s     r#   __getitem__z'_SpecialCharacterTranslator.__getitem__T   sZ     "H"OO#I2R 5 R!'!  %KIr%   N)r-   r.   r/   r?   r>   r%   r#   r7   r7   S   s    r%   r7   c                4    | j                  t                     S )zMFilter a string removing any character that libyaml/pyyaml declare as special)	translater7   r3   s    r#   _filter_yaml_specialrC   b   s    79::r%   c                    | j                         } | j                         } t        |       } t        j	                  d|       S )zTModify a string so that analyze_scalar in libyaml/pyyaml will allow block formattingz\1)rstrip
expandtabsrC   _SPACE_BREAK_REsubrB   s    r#   _munge_data_for_lossy_yamlrI   g   s:     ]]_F F!&)Fuf--r%   c                B   t        |      r|j                         }t        |      }t        |      rd}| j                  rt        |      }n| j                  }t        j                  j                  d||      }| j                  || j                  | j                  <   |S )z'Uses block style for multi-line strings|ztag:yaml.org,2002:str)style)r   _strip_unsafer
   r5   r    rI   default_styleyamlrepresenter
ScalarNode	alias_keyrepresented_objects)r!   datarL   nodes       r#   _pretty_represent_strrV   t   s    $!!#T?D;;-d3D""&&'>E&RD~~!37  0Kr%   c                     e Zd ZdZdCdZeZd Zd ZdDdZ	e
d        ZdEdZdFd	Zd
 ZdGdZd Zd Zd Zd Zd Zej,                  fdZd Zd ZdGdZd ZdHdZd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d  Z&dId!Z'd" Z(d# Z)d$ Z*d% Z+d& Z,d' Z-d( Z.dGdJd)Z/dKd*Z0dKd+Z1d, Z2d- Z3d. Z4d/ Z5d0 Z6d1 Z7d2 Z8d3 Z9d4 Z:d5 Z;d6 Z<dId7Z=d8 Z>d9 Z?d: Z@d; ZAd< ZBd= ZCd> ZDd? ZEd@ ZFdA ZGdB ZHy)Lr   z
    This is a base ansible callback class that does nothing. New callbacks should
    use this class as a base and override any callback methods they wish to execute
    custom actions.
    Nc                   |r|| _         nt        | _         | j                   j                  dk\  rst        | dd      }t        | dd      }t        | dd      }| j                   j	                  d|d	|d
|dt
        j                  | j                     j                         d| _	        d| _
        i | _        || j                  |       d| _        y )N   CALLBACK_NAMEunnamedCALLBACK_TYPEoldCALLBACK_VERSIONz1.0zLoading callback plugin z	 of type z, vz from F)changedfailedskipped
invocationskip_reason)_displayglobal_display	verbositygetattrvvvvsysmodulesr.   __file__disabledwants_implicit_tasks_plugin_optionsset_options_hide_in_debug)r!   displayoptionsnamectypeversions         r#   r$   zCallbackBase.__init__   s    #DM*DM==""a'4)<DD/59Ed$6>GMMW[]bdkmpmxmxy}  zI  zI  nJ  nS  nS   T  U$)!!W%[r%   c                    t         j                  j                  || j                  | j                  ||i      | j
                  |<   y )N)plugin_typeplugin_namedirect)Cconfigget_config_valuerw   
_load_namern   )r!   kvs      r#   
set_optionzCallbackBase.set_option   sM    "#((";";A4K[K[imixix  CD  FG  BH";  #IQr%   c                     | j                   |   S r   )rn   )r!   r~   s     r#   
get_optionzCallbackBase.get_option   s    ##A&&r%   c                ~    t         j                  j                  | j                  | j                  |||      | _        y)z This is different than the normal plugin method as callbacks get called early and really don't accept keywords.
            Also _options was already taken for CLI args and callbacks use _plugin_options instead.
        )keys	variablesry   N)rz   r{   get_plugin_optionsrw   r}   rn   )r!   	task_keysvar_optionsry   s       r#   ro   zCallbackBase.set_options   s>      !xx::4;K;KT__cl  yD  MS:   Tr%   c                   d| j                   j                         z  }| j                  j                  r| j                  j                  | j                   j                         k7  r}|d| j                  j                  z  z  }| j                  j                  di       j                  d| j                  j                        }| j                  j                  |k7  r|d|z  z  }|S )zWReturn label for the hostname (& delegated hostname) of a task
        result.
        z%sz -> %s_ansible_delegated_varsansible_hostz(%s))_hostget_name_taskdelegate_to_resultget)resultlabelahosts      r#   
host_labelzCallbackBase.host_label   s    
 v||,,..<<##(@(@FLLDYDYD[([X 8 888ENN&&'@"EII.Z`ZfZfZrZrsE||''50%'r%   c                    | j                   j                  |kD  xs |j                  j                  dd      du xr |j                  j                  dd      du S )N_ansible_verbose_alwaysFT_ansible_verbose_override)rd   rf   r   r   )r!   r   rf   s      r#   _run_is_verbosezCallbackBase._run_is_verbose   sX    ((94t8J8JKdfk8lpt8t TNN&&'BEJeS	Ur%   c           
        	 | j                  d      }	 | j                  d      }|j                  d      |d u xr |dk7  |du | j                  j                  dkD  f}|st        |      rd}|du rd }t        t        |            }	|s | j                  j                  d	k  rd
|v r|	d
= | j                  j                  d	k  rd|v r|	d= d|	v r|	d= |s|	S |dk(  r	 t        j                  |	t        |d|      S |dk(  rb|dv }
|
rd|	v r	d|	v rd|	d<   d|	v r	d|	v rd|	d<   dt!        j"                  t%        j&                  |	dt)        |
      d|      d|xs dz        z  S y # t        $ r d}Y Yw xY w# t        $ r d }Y Yw xY w# t        $ rN t        s t        j                  t        t        |	j                         t                    t        |dd      cY S w xY w)Nresult_formatjsonpretty_resultsr   T   rY   F   rb   diffr   )clsindentensure_ascii	sort_keys)keyrO   NTstdoutstdout_linesz	<omitted>stderrstderr_linesz
%sr"   allow_unicodeDumperdefault_flow_styler    )r   KeyErrorr   rd   rf   anyr   r   r   dumpsr   	TypeErrorr   sorteditemsr	   textwrapr   rO   dumpr   )r!   r   r   r   keep_invocation	serializer   r   indent_conditionsabridged_resultr"   s              r#   _dump_resultszCallbackBase._dump_results   sJ   	# OOO<M
	"!__-=>N JJ01d">}'>d"MM##a'	
 #/0FU"F ..Fv.NO 4==#:#:Q#><SYCY- ==""Q&6V+;' /), #"F"
Gzz/7IRXgl  yB  C  C f$ #l2E.>_3T6AON3 .>_3T6AON3HOO		#"&1>',! v{#
 
 
 %q  	#"M	#  	"!N	"R  G #zz+f_5J5J5LRY.Z"[&8/4G GGs5   E E0 F E-,E-0E?>E?AGGc                    t         j                  rfd|v r-|d   r(|d   D ]  }| j                  j                  |        |d= d|v r0|d   r*|d   D ]  } | j                  j                  di |   |d= yyyy)z: display warnings, if enabled and any exist in the result r   r   Nr>   )rz   ACTION_WARNINGSrd   warning
deprecated)r!   resr   s      r#   _handle_warningszCallbackBase._handle_warnings"  s    S S_": 3GMM))'23
O$^)<">2 8G,DMM,,7w78' *=$ r%   c                   d|v rd}t        |d         }| j                  j                  dk  r+|j                         j	                  d      d   }|d|z  z  }nd|z   }|d= | j                  j                  |t        j                  |       y y )	Nr   z-An exception occurred during task execution. r   
z6To see the full traceback, use -vvv. The error was: %szThe full traceback is:
)colorr   )r	   rd   rf   stripsplitrq   rz   COLOR_ERROR)r!   r   
use_stderrr   exception_strerrors         r#   _handle_exceptionzCallbackBase._handle_exception.  s    & AC#F;$78M}}&&*%++-33D9"=ORWWW0=@;'MM!!#Q]]:!N !r%   c           
     Z   	 | j                  d      }	 | j                  d      }|dk(  rt        j                  |ddd      dz   S |d	k(  r?|d
v }dt	        j
                  t        j                  |dt        |      dd      d      z  S y # t        $ r d}Y w xY w# t        $ r d }Y w xY w)Nr   r   r   TrY   ),z: )r   r   
separatorsr   rO   r   z%s
r   Fr   z    )	r   r   r   r   r   r   rO   r   r   )r!   r   r   r   r"   s        r#   _serialize_diffzCallbackBase._serialize_diff=  s    	# OOO<M
	"!__-=>N
 F"::dd1WZ___f$ #l2EHOO		"&1>', 
 
 
	 %  	#"M	#  	"!N	"s"   B B BBB*)B*c           
        t        |t              s|g}g }|D ]7  }d|v r|j                  d       d|v r|j                  d       d|v r|j                  d|d   z         d|v r|j                  d|d   z         d	|v rd
|v rdD ]8  }t        ||   t              r| j	                  ||         ||<   .||   4d||<   : d|v r	d|d   z  }nd	}d|v r	d|d   z  }nd
}|d	   j                  d      }|d
   j                  d      }|r!|d   j                  d      s|dxx   dz  cc<   |r!|d   j                  d      s|dxx   dz  cc<   t        j                  ||||ddt        j                        }	t        |	      }
d}|
D ]  }d}|j                  d      rt        |t        j                        }nW|j                  d      rt        |t        j                        }n+|j                  d      rt        |t        j                        }|j                  |        |r|j                  d       d|v s$|j                  |d          : dj!                  |      S )N
dst_binaryz4diff skipped: destination file appears to be binary

src_binaryz/diff skipped: source file appears to be binary

dst_largerz7diff skipped: destination file size is greater than %d

src_largerz2diff skipped: source file size is greater than %d
beforeafter)r   r    before_headerz
before: %safter_headerz	after: %sTr   r   z
\ No newline at end of file
)fromfiletofilefromfiledate
tofiledatenF+-z@@prepared)
isinstancelistappendr   r   
splitlinesendswithdifflibunified_diffrz   DIFF_CONTEXT
startswithr   COLOR_DIFF_ADDCOLOR_DIFF_REMOVECOLOR_DIFF_LINESjoin)r!   difflistretr   xr   r   before_linesafter_linesdiffer	difflineshas_difflines                r#   	_get_diffzCallbackBase._get_diff\  s   (D) zH 3	-Dt#

STt#

NOt#

VY]^jYkklt#

QTXYeTffg4GtO, %A!$q'>:"&"6"6tAw"?Qa"$Q	%
 #d*$1D4I$IM$-M!T)#/$~2F#FL#+L#H~88>"7m66t<R(8(A(A%(H $(KK${2'?'?'EO'JJO --l.97D5A;>9<01@ !L	 % %D#Ht,&tQ-=-=>.&tQ-@-@A/&tQ-?-?@JJt$% JJt$T!

4
+,g3	-h xx}r%   c                t    |j                  dd      rd}|S |j                  d|j                  d            }|S )zV retrieves the value to be displayed as a label for an item entry from a result object_ansible_no_logFz(censored due to no_log)_ansible_item_labelitem)r   )r!   r   r   s      r#   _get_item_labelzCallbackBase._get_item_label  s>    ::'/-D  ::3VZZ5GHDr%   c                    |j                   d= y )Nresults)r   r!   r   s     r#   _process_itemszCallbackBase._process_items  s    NN9%r%   c                   |t         j                  v rsd|v rKt        |j                               D ].  }|t        vs|j                  d      r|j                  |       0 y| j                  D ]  }|j                  |d        yy)z' removes data from results for display r   _N)rz   _ACTION_DEBUGr   r   _DEBUG_ALLOWED_KEYSr   poprp   )r!   r   	task_namer   hidmes        r#   _clean_resultszCallbackBase._clean_results  sz     '. (C"55cnnS>Q

3(
 "00 ,EJJud+, (r%   c                j    |j                         }|r!| j                  j                  d|z  |       y y )Nztask path: %s)r   )get_pathrd   rq   )r!   taskr   paths       r#   _print_task_pathzCallbackBase._print_task_path  s2    }}MM!!"2T"9!G r%   c                     y r   r>   )r!   play_contexts     r#   set_play_contextzCallbackBase.set_play_context      r%   c                     y r   r>   r!   r(   r)   s      r#   on_anyzCallbackBase.on_any  r  r%   c                     y r   r>   )r!   hostr   ignore_errorss       r#   runner_on_failedzCallbackBase.runner_on_failed  r  r%   c                     y r   r>   r!   r  r   s      r#   runner_on_okzCallbackBase.runner_on_ok  r  r%   c                     y r   r>   )r!   r  r   s      r#   runner_on_skippedzCallbackBase.runner_on_skipped  r  r%   c                     y r   r>   r  s      r#   runner_on_unreachablez"CallbackBase.runner_on_unreachable  r  r%   c                     y r   r>   r!   s    r#   runner_on_no_hostszCallbackBase.runner_on_no_hosts  r  r%   c                     y r   r>   )r!   r  r   jidclocks        r#   runner_on_async_pollz!CallbackBase.runner_on_async_poll  r  r%   c                     y r   r>   r!   r  r   r(  s       r#   runner_on_async_okzCallbackBase.runner_on_async_ok  r  r%   c                     y r   r>   r,  s       r#   runner_on_async_failedz#CallbackBase.runner_on_async_failed  r  r%   c                     y r   r>   r%  s    r#   playbook_on_startzCallbackBase.playbook_on_start  r  r%   c                     y r   r>   )r!   r  handlers      r#   playbook_on_notifyzCallbackBase.playbook_on_notify  r  r%   c                     y r   r>   r%  s    r#   playbook_on_no_hosts_matchedz)CallbackBase.playbook_on_no_hosts_matched  r  r%   c                     y r   r>   r%  s    r#   playbook_on_no_hosts_remainingz+CallbackBase.playbook_on_no_hosts_remaining  r  r%   c                     y r   r>   )r!   rs   is_conditionals      r#   playbook_on_task_startz#CallbackBase.playbook_on_task_start  r  r%   c
                     y r   r>   
r!   varnameprivatepromptencryptconfirm	salt_sizesaltdefaultunsafes
             r#   playbook_on_vars_promptz$CallbackBase.playbook_on_vars_prompt  r  r%   c                     y r   r>   r%  s    r#   playbook_on_setupzCallbackBase.playbook_on_setup  r  r%   c                     y r   r>   )r!   r  imported_files      r#   playbook_on_import_for_hostz(CallbackBase.playbook_on_import_for_host  r  r%   c                     y r   r>   )r!   r  missing_files      r#   playbook_on_not_import_for_hostz,CallbackBase.playbook_on_not_import_for_host  r  r%   c                     y r   r>   )r!   rs   s     r#   playbook_on_play_startz#CallbackBase.playbook_on_play_start  r  r%   c                     y r   r>   r!   statss     r#   playbook_on_statszCallbackBase.playbook_on_stats  r  r%   c                     y r   r>   )r!   r  r   s      r#   on_file_diffzCallbackBase.on_file_diff  r  r%   c                (    | j                  ||       y r   )r  r  s      r#   	v2_on_anyzCallbackBase.v2_on_any  s    D&!r%   c                r    |j                   j                         }| j                  ||j                  |       y)a  Get details about a failed task and whether or not Ansible should continue
        running tasks on the host where the failure occurred, then process the details
        as required by the callback (output, profiling, logging, notifications, etc.)

        Note: The 'ignore_errors' directive only works when the task can run and returns
        a value of 'failed'. It does not make Ansible ignore undefined variable errors,
        connection failures, execution issues (for example, missing packages), or syntax errors.

        Customization note: For more information about the attributes and methods of the
        TaskResult class, see lib/ansible/executor/task_result.py.

        :param TaskResult result: An object that contains details about the task
        :param bool ignore_errors: Whether or not Ansible should continue running tasks on the host
        where the failure occurred

        :return: None
        N)r   r   r  r   )r!   r   r  r  s       r#   v2_runner_on_failedz CallbackBase.v2_runner_on_failed  s,    $ ||$$&dFNNMBr%   c                p    |j                   j                         }| j                  ||j                         y)a  Get details about a successful task and process them as required by the callback
        (output, profiling, logging, notifications, etc.)

        Customization note: For more information about the attributes and methods of the
        TaskResult class, see lib/ansible/executor/task_result.py.

        :param TaskResult result: An object that contains details about the task

        :return: None
        N)r   r   r  r   r!   r   r  s      r#   v2_runner_on_okzCallbackBase.v2_runner_on_ok  s*     ||$$&$/r%   c           
         t         j                  rQ|j                  j                         }| j	                  || j                  t        |j                  di                    yy)a  Get details about a skipped task and process them as required by the callback
        (output, profiling, logging, notifications, etc.)

        Customization note: For more information about the attributes and methods of the
        TaskResult class, see lib/ansible/executor/task_result.py.

        :param TaskResult result: An object that contains details about the task

        :return: None
        r  N)rz   DISPLAY_SKIPPED_HOSTSr   r   r!  r   rg   r   r]  s      r#   v2_runner_on_skippedz!CallbackBase.v2_runner_on_skipped!  sN     ""<<((*D""4)=)=gfnnV_ac>d)ef #r%   c                p    |j                   j                         }| j                  ||j                         y r   )r   r   r#  r   r]  s      r#   v2_runner_on_unreachablez%CallbackBase.v2_runner_on_unreachable0  s(    ||$$&""48r%   c                    |j                   j                         }|j                  j                  d      }d}| j	                  ||j                  ||       y )Nansible_job_idr   )r   r   r   r   r*  )r!   r   r  r(  r)  s        r#   v2_runner_on_async_pollz$CallbackBase.v2_runner_on_async_poll4  sF    ||$$&nn  !12!!$UCr%   c                    |j                   j                         }|j                  j                  d      }| j	                  ||j                  |       y )Nre  )r   r   r   r   r-  r!   r   r  r(  s       r#   v2_runner_on_async_okz"CallbackBase.v2_runner_on_async_ok;  s?    ||$$&nn  !12fnnc:r%   c                   |j                   j                         }|j                  j                  d      }|s,d|j                  v r|j                  d   j                  d      }| j	                  ||j                  |       y )Nre  async_result)r   r   r   r   r/  rh  s       r#   v2_runner_on_async_failedz&CallbackBase.v2_runner_on_async_failed@  si    ||$$& nn  !12~7..0445EFC##D&..#>r%   c                $    | j                          y r   )r1  )r!   playbooks     r#   v2_playbook_on_startz!CallbackBase.v2_playbook_on_startI  s     r%   c                (    | j                  ||       y r   )r4  )r!   r3  r  s      r#   v2_playbook_on_notifyz"CallbackBase.v2_playbook_on_notifyL  s    g.r%   c                $    | j                          y r   )r6  r%  s    r#   v2_playbook_on_no_hosts_matchedz,CallbackBase.v2_playbook_on_no_hosts_matchedO  s    ))+r%   c                $    | j                          y r   )r8  r%  s    r#   !v2_playbook_on_no_hosts_remainingz.CallbackBase.v2_playbook_on_no_hosts_remainingR  s    ++-r%   c                <    | j                  |j                  |       y r   )r;  rs   )r!   r  r:  s      r#   v2_playbook_on_task_startz&CallbackBase.v2_playbook_on_task_startU  s    ##DII~>r%   c                     y r   r>   r!   r  s     r#   !v2_playbook_on_cleanup_task_startz.CallbackBase.v2_playbook_on_cleanup_task_startY  r  r%   c                     y r   r>   ry  s     r#   !v2_playbook_on_handler_task_startz.CallbackBase.v2_playbook_on_handler_task_start\  r  r%   c
                6    | j                  |||||||||		       y r   )rG  r=  s
             r#   v2_playbook_on_vars_promptz'CallbackBase.v2_playbook_on_vars_prompt_  s$    $$WgvwQZ\`bikqrr%   c                \    |j                   j                         }| j                  ||       y r   )r   r   rL  )r!   r   rK  r  s       r#   v2_playbook_on_import_for_hostz+CallbackBase.v2_playbook_on_import_for_hostc  s$    ||$$&((}=r%   c                \    |j                   j                         }| j                  ||       y r   )r   r   rO  )r!   r   rN  r  s       r#   "v2_playbook_on_not_import_for_hostz/CallbackBase.v2_playbook_on_not_import_for_hosth  s$    ||$$&,,T<@r%   c                :    | j                  |j                         y r   )rQ  rs   )r!   plays     r#   v2_playbook_on_play_startz&CallbackBase.v2_playbook_on_play_startl  s    ##DII.r%   c                &    | j                  |       y r   )rU  rS  s     r#   v2_playbook_on_statsz!CallbackBase.v2_playbook_on_statso  s    u%r%   c                    d|j                   v r:|j                  j                         }| j                  ||j                   d          y y )Nr   )r   r   r   rW  r]  s      r#   v2_on_file_diffzCallbackBase.v2_on_file_diffr  s>    V^^#<<((*DdFNN6$:; $r%   c                     y r   r>   )r!   included_files     r#   v2_playbook_on_includez#CallbackBase.v2_playbook_on_includew  r  r%   c                     y r   r>   r  s     r#   v2_runner_item_on_okz!CallbackBase.v2_runner_item_on_okz  r  r%   c                     y r   r>   r  s     r#   v2_runner_item_on_failedz%CallbackBase.v2_runner_item_on_failed}  r  r%   c                     y r   r>   r  s     r#   v2_runner_item_on_skippedz&CallbackBase.v2_runner_item_on_skipped  r  r%   c                     y r   r>   r  s     r#   v2_runner_retryzCallbackBase.v2_runner_retry  r  r%   c                     y)zWEvent used when host begins execution of a task

        .. versionadded:: 2.8
        Nr>   )r!   r  r  s      r#   v2_runner_on_startzCallbackBase.v2_runner_on_start  s    
 	r%   )NN)NNN)r   )NTFTr,   r   )TNNFNNNN)r   r   r  boolreturnNone)r   r   r  r  )Ir-   r.   r/   __doc__r$   r   _copy_resultr   r   ro   staticmethodr   r   r   r   r   r   r   r   r  r  rz   COLOR_DEBUGr  r  r  r  r  r!  r#  r&  r*  r-  r/  r1  r4  r6  r8  r;  rG  rI  rL  rO  rQ  rU  rW  rY  r[  r^  ra  rc  rf  ri  rl  ro  rq  rs  ru  rw  rz  r|  r~  r  r  r  r  r  r  r  r  r  r  r  r>   r%   r#   r   r      st   \, LI'T  URh
(O>:x&, ,-== H
"C*0g9D;
?!/,.?s>
A/&<
r%   )=
__future__r   r   r   reri   r   typingr   collectionsr   collections.abcr   copyr   ansibler   rz   +ansible.module_utils.common.text.convertersr	   ansible.module_utils.sixr
   ansible.parsing.ajsonr   ansible.parsing.yaml.dumperr   ansible.parsing.yaml.objectsr   ansible.pluginsr   ansible.utils.colorr   ansible.utils.displayr   ansible.utils.unsafe_proxyr   r   r   ansible.vars.cleanr   r   rO   ansible.executor.task_resultr   re   __all__	frozensetr  _YAML_TEXT_TYPESr2   compilerG   r   r5   r7   rC   rI   rV   	data_typeadd_representerr   r>   r%   r#   <module>r     s   $ #   	 
    # *  " ? . 4 5 7 ) ' ) [ [ L 7 
   PQ ~/@BWX ( "**%6$7r:;	] 	 ;

.$ " I**~= ~r%   