+
    gK                     f   ^ RI t ^ RIt^ RIt^ RIHtHt ^ RIHtHtH	t	 ^ RI
HtHtHtHtHtHtHtHt ^ RIHtHtHtHtHtHtHtHtHt ^ RIHtHt ^ RI H!t! ]PD                  ! ]PF                  ! ]$4      4      t%RR	R
R/t&Rt'Rt(Rt)]PT                  ! 4       t+ ! R R4      t,R R lt-RR lt.R R lt/R# )    N)	lru_cachewraps)AnyDictOptional)aptevent_logger
exceptionshttpmessagessnapsystemutil)	APT_NEWS_URLBASE_CONTRACT_URLBASE_LIVEPATCH_URLBASE_SECURITY_URLBASE_VULNERABILITY_DATA_URLCONFIG_DEFAULTSCONFIG_FIELD_ENVVAR_ALLOWLISTDEFAULT_CONFIG_FILEDEFAULT_DATA_DIR)state_filesuser_config_file)	safe_loadavailableResourcesnameresourceEntitlementstype_unsetc                   F  a  ] tR t^Kt o RKtRLtRMtRNV 3R lR llt]V 3R lR l4       t	]V 3R lR l4       t
]V 3R lR	 l4       t]V 3R
 lR l4       t]P                  V 3R lR l4       t]V 3R lR l4       t]P                  V 3R lR l4       t]V 3R lR l4       t]P                  V 3R lR l4       t]V 3R lR l4       t]P                  V 3R lR l4       t]V 3R lR l4       t]P                  V 3R lR l4       t]]! RR7      V 3R lR  l4       4       t]P                  V 3R! lR" l4       t]]! RR7      V 3R# lR$ l4       4       t]P                  V 3R% lR& l4       t]V 3R' lR( l4       t]P                  V 3R) lR* l4       t]V 3R+ lR, l4       t]P                  V 3R- lR. l4       t]V 3R/ lR0 l4       t]P                  V 3R1 lR2 l4       t]V 3R3 lR4 l4       t]P                  V 3R5 lR6 l4       t]V 3R7 lR8 l4       t]P                  V 3R9 lR: l4       t]V 3R; lR< l4       t]P                  V 3R= lR> l4       t]V 3R? lR@ l4       t]P                  V 3RA lRB l4       t]RC 4       t]RD 4       t]V 3RE lRF l4       t]RG 4       tRH t RI t!RJt"V t#R# )OUAConfigNc                   < V ^8  d   QhRS[ S[S[S[3,          ,          RS[ S[P
                  ,          RS[ S[,          RR/# )   cfguser_configseriesreturnN)r   r   strr   r   UserConfigData)format__classdict__s   "1/usr/lib/python3/dist-packages/uaclient/config.py__annotate__UAConfig.__annotate__V   sP     ! !d38n%! .==>! 	!
 
!    c                   V'       d   RV n         Wn        RV n        M1\        4       V n         \	        V P                   4      w  V n        V n        V'       d   W n        M$ \        P
                  P                  4       V n        RV P                  9   dT   \        P                  P                  / V P
                  P                  4       CV P                  R,          CRR7      V n        W0n        R#   \         dQ   p\        P                  RTR7       \        P                  R4       \        P                  ! 4       T n         Rp?LRp?ii ; i) NzError loading user config)exc_infozUsing default config values	ua_configT) optional_type_errors_become_null)cfg_pathr%   invalid_keysget_config_pathparse_configr&   r   read	ExceptionLOGwarningr*   	from_dictto_dictr'   )selfr%   r&   r'   es   &&&& r-   __init__UAConfig.__init__V   s     DMH $D+-DM*6t}}*E'DHd'*E#3#?#?#D#D#F  $(("/>>HHG4##++-G+1FG15  I  D
   E7!D9:#3#B#B#D  Es   #C. .E	9AEE	c                    < V ^8  d   QhRS[ /# r$   r(   r)   )r+   r,   s   "r-   r.   r/   z        ? ?c ?r0   c                B    V P                   P                  R \        4      # )contract_url)r%   getr   r@   s   &r-   rI   UAConfig.contract_urly       xx||N,=>>r0   c                    < V ^8  d   QhRS[ /# rE   rF   )r+   r,   s   "r-   r.   r/   ~   rG   r0   c                B    V P                   P                  R \        4      # )security_url)r%   rJ   r   rK   s   &r-   rP   UAConfig.security_url}   rM   r0   c                    < V ^8  d   QhRS[ /# rE   rF   )r+   r,   s   "r-   r.   r/      s     A As Ar0   c                B    V P                   P                  R \        4      # )livepatch_url)r%   rJ   r   rK   s   &r-   rT   UAConfig.livepatch_url   s    xx||O-?@@r0   c                0   < V ^8  d   QhRS[ S[,          /# rE   r   r)   )r+   r,   s   "r-   r.   r/      s     + +HSM +r0   c                .    V P                   P                  # N)r&   
http_proxyrK   s   &r-   rZ   UAConfig.http_proxy   s    ***r0   c                    < V ^8  d   QhRS[ /# r$   valuerF   )r+   r,   s   "r-   r.   r/      s     = = =r0   c                x    WP                   n        \        P                   P                  V P                   4       R # rY   )r&   rZ   r   writer@   r^   s   &&r-   rZ   r[      s(    &+#$$**4+;+;<r0   c                0   < V ^8  d   QhRS[ S[,          /# rE   rW   )r+   r,   s   "r-   r.   r/      s     , ,Xc] ,r0   c                .    V P                   P                  # rY   )r&   https_proxyrK   s   &r-   rd   UAConfig.https_proxy   s    +++r0   c                    < V ^8  d   QhRS[ /# r]   rF   )r+   r,   s   "r-   r.   r/      s     = = =r0   c                x    WP                   n        \        P                   P                  V P                   4       R # rY   )r&   rd   r   r`   ra   s   &&r-   rd   re      s(    ',$$$**4+;+;<r0   c                0   < V ^8  d   QhRS[ S[,          /# rE   rW   )r+   r,   s   "r-   r.   r/      s     3 3HSM 3r0   c                .    V P                   P                  # rY   )r&   ua_apt_https_proxyrK   s   &r-   rj   UAConfig.ua_apt_https_proxy   s    222r0   c                    < V ^8  d   QhRS[ /# r]   rF   )r+   r,   s   "r-   r.   r/      s     = = =r0   c                x    WP                   n        \        P                   P                  V P                   4       R # rY   )r&   rj   r   r`   ra   s   &&r-   rj   rk      s(    .3+$$**4+;+;<r0   c                0   < V ^8  d   QhRS[ S[,          /# rE   rW   )r+   r,   s   "r-   r.   r/      s     2 28C= 2r0   c                .    V P                   P                  # rY   )r&   ua_apt_http_proxyrK   s   &r-   rp   UAConfig.ua_apt_http_proxy   s    111r0   c                    < V ^8  d   QhRS[ /# r]   rF   )r+   r,   s   "r-   r.   r/      s     = =s =r0   c                x    WP                   n        \        P                   P                  V P                   4       R # rY   )r&   rp   r   r`   ra   s   &&r-   rp   rq      s(    -2*$$**4+;+;<r0   c                    < V ^8  d   QhRS[ /# rE   rF   )r+   r,   s   "r-   r.   r/      s      s r0   c                F    V P                   P                  pVf   \        # V# rY   )r&   vulnerability_data_url_prefixr   r@   vals   & r-   rv   &UAConfig.vulnerability_data_url_prefix   s#    <<;..
r0   c                    < V ^8  d   QhRS[ /# r]   rF   )r+   r,   s   "r-   r.   r/      s     = =3 =r0   c                x    WP                   n        \        P                   P                  V P                   4       R # rY   )r&   rv   r   r`   ra   s   &&r-   rv   ry      s(    9>6$$**4+;+;<r0   )maxsizec                0   < V ^8  d   QhRS[ S[,          /# rE   rW   )r+   r,   s   "r-   r.   r/      s      x} r0   c                    V P                   P                  pV'       d   V# V P                   P                  pV'       d7   \        P	                  \
        P                  P                  R RR7      4       V# R# )apt_http_proxyglobal_apt_http_proxyoldnewN)r&   r   r   eventinfor   WARNING_DEPRECATED_FIELDr+   r@   
global_valold_apt_vals   &  r-   r   UAConfig.global_apt_http_proxy   sh     %%;;
&&55JJ1188(.E 9 
 r0   c                    < V ^8  d   QhRS[ /# r]   rF   )r+   r,   s   "r-   r.   r/      s     = =3 =r0   c                    WP                   n        R V P                   n        \        P                  P                  P                  4        \        P                   P                  V P                   4       R # rY   )r&   r   r   r"   fgetcache_clearr   r`   ra   s   &&r-   r   r      sN    16.*.'&&++779$$**4+;+;<r0   c                0   < V ^8  d   QhRS[ S[,          /# rE   rW   )r+   r,   s   "r-   r.   r/      s       r0   c                    V P                   P                  pV'       d   V# V P                   P                  pV'       d7   \        P	                  \
        P                  P                  R RR7      4       V# R# )apt_https_proxyglobal_apt_https_proxyr   N)r&   r   r   r   r   r   r   r+   r   s   &  r-   r   UAConfig.global_apt_https_proxy   sh     %%<<
&&66JJ1188)/G 9 
 r0   c                    < V ^8  d   QhRS[ /# r]   rF   )r+   r,   s   "r-   r.   r/      s     = =C =r0   c                    WP                   n        R V P                   n        \        P                  P                  P                  4        \        P                   P                  V P                   4       R # rY   )r&   r   r   r"   r   r   r   r`   ra   s   &&r-   r   r      sN    27/+/('',,88:$$**4+;+;<r0   c                    < V ^8  d   QhRS[ /# rE   int)r+   r,   s   "r-   r.   r/      s       r0   c                >    V P                   P                  pVf   R# V# )Ni`T  )r&   update_messaging_timerrw   s   & r-   r   UAConfig.update_messaging_timer   s     55;
r0   c                    < V ^8  d   QhRS[ /# r]   r   )r+   r,   s   "r-   r.   r/      s     = =C =r0   c                x    WP                   n        \        P                   P                  V P                   4       R # rY   )r&   r   r   r`   ra   s   &&r-   r   r      s(    27/$$**4+;+;<r0   c                    < V ^8  d   QhRS[ /# rE   r   )r+   r,   s   "r-   r.   r/      s       r0   c                >    V P                   P                  pVf   R# V# )Ni@8  )r&   metering_timerrw   s   & r-   r   UAConfig.metering_timer   s     --;
r0   c                    < V ^8  d   QhRS[ /# r]   r   )r+   r,   s   "r-   r.   r/      s     = =C =r0   c                x    WP                   n        \        P                   P                  V P                   4       R # rY   )r&   r   r   r`   ra   s   &&r-   r   r      s(    */'$$**4+;+;<r0   c                    < V ^8  d   QhRS[ /# rE   bool)r+   r,   s   "r-   r.   r/      s      d r0   c                >    V P                   P                  pVf   R# V# )NF)r&   poll_for_pro_licenserw   s   & r-   r   UAConfig.poll_for_pro_license   s"    
 33;
r0   c                    < V ^8  d   QhRS[ /# r]   r   )r+   r,   s   "r-   r.   r/     s     = =$ =r0   c                x    WP                   n        \        P                   P                  V P                   4       R # rY   )r&   r   r   r`   ra   s   &&r-   r   r     s(    05-$$**4+;+;<r0   c                    < V ^8  d   QhRS[ /# rE   r   )r+   r,   s   "r-   r.   r/     s      3 r0   c                >    V P                   P                  pVf   R# V# )NiX  )r&   polling_error_retry_delayrw   s   & r-   r   "UAConfig.polling_error_retry_delay  s"     88;
r0   c                    < V ^8  d   QhRS[ /# r]   r   )r+   r,   s   "r-   r.   r/     s     = =s =r0   c                x    WP                   n        \        P                   P                  V P                   4       R # rY   )r&   r   r   r`   ra   s   &&r-   r   r     s(    5:2$$**4+;+;<r0   c                    < V ^8  d   QhRS[ /# rE   r   )r+   r,   s   "r-   r.   r/     s      $ r0   c                >    V P                   P                  pVf   R# V# )NT)r&   apt_newsrw   s   & r-   r   UAConfig.apt_news  s     '';
r0   c                    < V ^8  d   QhRS[ /# r]   r   )r+   r,   s   "r-   r.   r/   "  s     = =d =r0   c                x    WP                   n        \        P                   P                  V P                   4       R # rY   )r&   r   r   r`   ra   s   &&r-   r   r   !  s(    $)!$$**4+;+;<r0   c                    < V ^8  d   QhRS[ /# rE   rF   )r+   r,   s   "r-   r.   r/   '  s      c r0   c                F    V P                   P                  pVf   \        # V# rY   )r&   apt_news_urlr   rw   s   & r-   r   UAConfig.apt_news_url&  s#    ++;
r0   c                    < V ^8  d   QhRS[ /# r]   rF   )r+   r,   s   "r-   r.   r/   .  s     = =# =r0   c                x    WP                   n        \        P                   P                  V P                   4       R # rY   )r&   r   r   r`   ra   s   &&r-   r   r   -  s(    (-%$$**4+;+;<r0   c                4   < V ^8  d   QhRS[ P                  /# rE   r   LXDGuestAttachEnum)r+   r,   s   "r-   r.   r/   3  s      "2"E"E r0   c                n    V P                   P                  pVf   \        P                  P                  # V# rY   )r&   lxd_guest_attachr   r   OFFrw   s   & r-   r   UAConfig.lxd_guest_attach2  s/    //;#66:::
r0   c                4   < V ^8  d   QhRS[ P                  /# r]   r   )r+   r,   s   "r-   r.   r/   :  s     = =&6&I&I =r0   c                    Vf   \         P                  P                  pWP                  n        \         P                  P                  V P                  4       R # rY   )r   r   r   r&   r   r`   ra   s   &&r-   r   r   9  s>    =$77;;E,1)$$**4+;+;<r0   c                B    V P                   P                  R \        4      # )data_dir)r%   rJ   r   rK   s   &r-   r   UAConfig.data_dir@  s    xx||J(899r0   c                    V P                   P                  R R4      p \        \        VP	                  4       4      #   \
         d    \        P                  u # i ; i)	log_levelDEBUG)r%   rJ   getattrloggingupperAttributeErrorr   )r@   r   s   & r-   r   UAConfig.log_levelD  sH    HHLLg6		!7IOO$566 	!== 	!s   < AAc                    < V ^8  d   QhRS[ /# rE   rF   )r+   r,   s   "r-   r.   r/   M  s     E E# Er0   c                P    V P                   P                  R \        R ,          4      # )log_file)r%   rJ   r   rK   s   &r-   r   UAConfig.log_fileL  s    xx||J
(CDDr0   c                    V P                   P                  R4      pV'       d/   \        V\        4      '       d   V# \        P                  RV4       / # )z>Return a dictionary of any features provided in uaclient.conf.featureszDUnexpected uaclient.conf features value. Expected dict, but found %s)r%   rJ   
isinstancedictr<   r=   )r@   r   s   & r-   r   UAConfig.featuresP  sF     88<<
+(D))3
 	r0   c                
   R F^  p\        W4      pVf   \        P                  RV4       K*  \        V\        4      '       d
   V^ 8  g   KI  \
        P                  ! WR7      h	  V P                  '       g   V P                  '       d:   V P                  '       g   V P                  '       d   \
        P                  ! 4       h\        P                  ! RV P                  \        P                  4       \        P                  ! RV P                  \        P                  4       \        P                  ! RV P                  \        P                  4       \        P                  ! RV P                  \        P                  4       \        P                  ! RV P                   \        P"                  4       \        P                  ! RV P$                  \        P&                  4       V P                  '       g   V P                  '       dF   \(        P*                  ! V P                  V P                  \(        P,                  P.                  4       MhV P                  '       g   V P                  '       dE   \(        P*                  ! V P                  V P                  \(        P,                  P0                  4       . p\2        P4                  ! 4       '       d   \2        P6                  ! V P                   V P$                  4       V P                   '       g+   \2        P8                  ! \2        P:                  4      '       g=   V P$                  '       g<   \2        P8                  ! \2        P<                  4      '       d   VP?                  R4       ^ RI H!p ^ RI"H#p V! V 4      PH                  p\J        ;QJ d    R	 V 4       F  '       g   K   R
M	  RM! R	 V 4       4      pV'       d   VPM                  V P                   V P$                  4       V P                   '       g"   VP9                  VP:                  4      '       g4   V P$                  '       g3   VP9                  VP<                  4      '       d   VP?                  R4       \O        V4      ^ 8  d;   RPQ                  V4      p\S        \T        PV                  PY                  VR7      4       ^ RI-H.p	 V P^                  \`        Pb                  Pd                  8w  d4   V	! V 4      Pf                  '       g   \S        \T        Ph                  4       R# \j        Pl                  Po                  \j        Pp                  ! V P^                  R7      4       R# )r   Nz1No config set for %s, default value will be used.keyr^   r   httpsr   )	livepatch)_enabled_servicesc              3   J   "   T F  qP                   R 8X  g   K  Vx  K  	  R# 5i)r   N)r   ).0ents   & r-   	<genexpr>*UAConfig.process_config.<locals>.<genexpr>  s       
+Cxx;/FCC+s   #
#TFr   z, )services)_is_attached)guest_attach)r   r   )9r   r<   debugr   r   r
   InvalidPosIntConfigValuer   r   rp   rj   InvalidProxyCombinationConfigr   validate_proxyPROXY_VALIDATION_APT_HTTP_URLPROXY_VALIDATION_APT_HTTPS_URLrZ   PROXY_VALIDATION_SNAP_HTTP_URLrd   PROXY_VALIDATION_SNAP_HTTPS_URLr   setup_apt_proxyAptProxyScopeGLOBALUACLIENTr   is_snapd_installedconfigure_snap_proxyget_config_option_valueHTTP_PROXY_OPTIONHTTPS_PROXY_OPTIONappenduaclientr   -uaclient.api.u.pro.status.enabled_services.v1r   enabled_servicesanyconfigure_livepatch_proxylenjoinprintr   !PROXY_DETECTED_BUT_NOT_CONFIGUREDr+   (uaclient.api.u.pro.status.is_attached.v1r   r   r   r   r   is_attached-WARNING_LXD_GUEST_ATTACH_SET_BUT_NOT_ATTACHEDr   lxd_pro_config_filer`   LXDProConfig)
r@   propr^   services_with_proxiesr   r   r   livepatch_enabledr   r   s
   &         r-   process_configUAConfig.process_config_  s   
D D'E}		G  s++uqy 99 
 &&&$*E*E*E"""d&=&=&= ::<<&&..	

 	''//	

 	D**D,N,N	
 	##//	

 	DOOT%H%H	
 	T%%t'K'K	
 %%%)D)D)D**++!!((
 ###t'>'>'>&&''!!** !#""$$%%doot7G7GHOOO001G1GHH$$$001H1HII%,,V4&	
 -T2CCC  
+ 
CCC  
+ 
 
 //!1!1 OOO55//  $$$5500  &,,[9$%)yy!67H::AA% B  	J !!%5%H%H%L%LL &222(HHI++11((d6K6KLr0   c                T   V P                   e3   \        V P                   4       F  p\        P                  RV4       K  	  RV P                  9   dW   \        P                  R4       \        P                  R4       \        P                  R4       \        P                  R4       R # R # )Nz&Ignoring invalid uaclient.conf key: %sr4   z)legacy "ua_config" found in uaclient.confzPlease do the following:z  1. run `sudo pro config set field=value` for each field/value pair present under "ua_config" in /etc/ubuntu-advantage/uaclient.confzQ  2. Delete "ua_config" and all sub-fields in /etc/ubuntu-advantage/uaclient.conf)r7   sortedr<   r=   r%   )r@   invalid_keys   & r-   warn_about_invalid_keys UAConfig.warn_about_invalid_keys  s    (%d&7&78<k  9 $((" KKCDKK23KK7
 KK7 #r0   )r%   r6   r7   r'   r&   )rp   rj   )r   r   )r   r   )NNN)$__name__
__module____qualname____firstlineno__ua_scoped_proxy_optionsglobal_scoped_proxy_options&deprecated_global_scoped_proxy_optionsrB   propertyrI   rP   rT   rZ   setterrd   rj   rp   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  __static_attributes____classdictcell__)r,   s   @r-   r"   r"   K   sc    I#.*
! !F ? ? ? ? A A + + = = , , = = 3 3 = = 2 2 = =   #))= *= t   !!= "= t   ""= #=   ""= #=   = =     = !=   %%= &=   __= =   = =   = = : : ! ! E E  tl r0   r"   c                $    V ^8  d   QhR\         /# rE   rF   )r+   s   "r-   r.   r.     s       r0   c                 `    \         P                  P                  R4      p V '       d   V # \        # )z4Get config path to be used when loading config dict.UA_CONFIG_FILE)osenvironrJ   r   )config_files    r-   r8   r8     s$    **..!12Kr0   c                   \         P                   ! \        4      pV '       g   \        4       p \        P	                  RV 4       \
        P                  P                  V 4      '       d/   VP                  \        \        P                  ! V 4      4      4       / p\
        P                  P                  4        F  w  r4VP                  4       pVP                  R4      '       g   K.  VR,          pVP                  R4      '       d   VR,          pVP!                  R4      '       d]   \
        P                  P                  V4      '       d!   \        \        P                  ! V4      4      pM\"        P$                  ! VR7      hRV9  d	   Wd/VR&   K  WAR,          V&   K  V\&        9   g   K  WBV&   K  	  VP                  V4       R	V9   d*   \
        P                  P)                  VR	,          4      VR	&   R FC  p\*        P,                  ! W,          4      '       d   K'  \"        P.                  ! W1V,          R
7      h	  \1        VP3                  4       4      P5                  \6        4      pV F  pVP9                  V4       K  	  W3# )ar  Parse known Pro config file

Attempt to find configuration in cwd and fallback to DEFAULT_CONFIG_FILE.
Any missing configuration keys will be set to CONFIG_DEFAULTS.

Values are overridden by any environment variable with prefix 'UA_'.

@param config_path: Fullpath to pro configfile. If unspecified, use
    DEFAULT_CONFIG_FILE.

@return: Dict of configuration values.
z%Using client configuration file at %sua_:   NN	features_:	   NNyaml)filepathr   r   r   )rI   rP   )copyr   r8   r<   r   r!  pathexistsupdater   r   	load_filer"  itemslower
startswithendswithr
   InvalidFeatureYamlConfigValuer   
expanduserr   is_service_urlInvalidURLConfigValuesetkeys
differenceVALID_UA_CONFIG_KEYSpop)	config_pathr%   env_keysr   r^   
field_namefeature_field_namer7   r  s	   &        r-   r9   r9     s    ))O
$C%'II5{C	ww~~k""

9V--k:;<Hjj&&(
iik>>%  RJ$$[11%/^" >>&))ww~~e,, )&*:*:5*A B(FF%*  S('9&AC
O:?
O$6755',$5 )6 JJxS'',,S_=J/""38,,22sc(KK 0 sxxz?--.BCL# $ r0   c                $    V ^8  d   QhR\         /# )r$   override_keyrF   )r+   s   "r-   r.   r.   3  s       r0   c                   a  V 3R lpV# )a  Decorator used to override function return by config settings.

To identify if we should override the function return, we check
if the config object has the expected override key, we use it
has, we will use the key value as the function return. Otherwise
we will call the function normally.

@param override_key: key to be looked for in the settings_override
 entry in the config dict. If that key is present, we will return
 its value as the function return.
c                 4   <a  \        S 4      V V3R  l4       pV# )c                     < \        4       w  rV P                  R / 4      P                  S\        4      pV\        8w  d   SR8X  d   VR3# V# S! 4       # )settings_overrides
cloud_typeN)r9   rJ   UNSET_SETTINGS_OVERRIDE_KEY)r%   _value_overridefrB  s      r-   new_f>apply_config_settings_override.<locals>.wrapper.<locals>.new_fA  sY    !^FC WW%92>BB9N !<<</*D11%%3Jr0   )r   )rK  rL  rB  s   f r-   wrapper/apply_config_settings_override.<locals>.wrapper@  s     	q	 
	 r0    )rB  rN  s   f r-   apply_config_settings_overriderQ  3  s    " Nr0   )rZ   rd   r   r   rp   rj   r   r   r   r   r   r   rv   r   )
rI   r   r   r   r   rP   rv   rF  r4   rT   rY   )0r+  r   r!  	functoolsr   r   typingr   r   r   r   r   r	   r
   r   r   r   r   r   uaclient.defaultsr   r   r   r   r   r   r   r   r   uaclient.filesr   r   uaclient.yamlr   	getLoggerreplace_top_level_logger_namer  r<   MERGE_ID_KEY_MAPrH  UA_CONFIGURABLE_KEYSr;  get_event_loggerr   r"   r8   r9   rQ  rP  r0   r-   <module>r\     s      	 & & &	 	 	
 
 
 9 #::8DE &F  '  $  	%%'] ]@<~r0   