Ë
    S>{i‡¸  ã                   ó¦  — 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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Z"d dl#Z#d dl$m%Z%m&Z&m'Z'm(Z(m)Z)mZ d dl*m+Z+ d dl,m-Z- e+r*d dl.m/Z/m0Z0 d dl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z< d dl*m=Z=m>Z>  eddd«      Z? ej€                  d«      ZA ej„                  d«      ZCdZDd„ ZEd„ ZFd„ ZGd„ ZH G d „ d!eI«      ZJ eJ«       ZKd"„ ZLd#„ ZMd$„ ZNd%„ ZOdld&„ZP G d'„ d(eQ«      ZRe( G d)„ d*eI«      «       ZS G d+„ d,eI«      ZT G d-„ d.eI«      ZUe+rd d/l1mVZV  eVd0«      ZWe<eUeWf   ZXd1„ ZYd2„ ZZd3„ Z[d4„ Z\	 	 	 dmd5„Z]	 dld6„Z^d7„ Z_e%rd8„ Z`nd9„ Z`d:„ Za	 	 	 	 dnd;„Zb	 	 	 dod<„Zcd=„ Zdd>„ Ze	 	 	 	 	 dpd?„Zf egehd@«      ZieirdA„ ZjndB„ Zj	 	 	 	 	 dqdC„Zk	 	 drdD„ZldE„ ZmdF„ ZndG„ ZodmdH„ZpdldI„ZqdJ„ Zr	 	 drdK„ZsdL„ ZtdM„ ZudN„ ZvdldO„ZwdP„ ZxdQ„ ZydR„ Zz ez«       \  Z{Z|dSZ}dT„ Z~dU„ Z e|dV«      Z€ G dW„ dXeh«      Z� G dY„ dZe	�j                  «      Zƒd[„ Z„d\„ Z… ed]g d^¢«      Z†dsd_„Z‡ ed`g da¢«      Zˆdtdb„Z‰dc„ ZŠdudd„Z‹de„ ZŒdf„ Z�e'rdg„ ZŽn	e&rdh„ ZŽndi„ ZŽe%rdj„ Z�ydk„ Z�y# e$ r" 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 Y �ŒOw xY w# e$ r dZY �ŒVw xY w# e$ r dZ"Y �ŒOw xY w)vé    N)Ú
namedtuple)Úcopy)ÚDecimal)ÚReal)Úparse_qs)Úunquote)Ú	urlencode)Úurlsplit)Ú
urlunsplit)ÚBaseExceptionGroup)Údatetime)Úpartial)ÚpartialmethodTF)ÚPY2ÚPY33ÚPY37Úimplements_strÚ	text_typeÚurlparse)ÚTYPE_CHECKING)ÚDEFAULT_MAX_VALUE_LENGTH)Ú	FrameTypeÚTracebackType)ÚAnyÚCallableÚContextManagerÚDictÚIteratorÚListÚOptionalÚSetÚTupleÚTypeÚUnion)ÚEndpointTypeÚExcInfoi²  é   zsentry_sdk.errorsz^[a-zA-Z0-9/+=]*$z
[Filtered]c                 óP   — t        j                  | dd¬«      j                  d«      S )zCSerialize data into a compact JSON representation encoded as UTF-8.F)ú,ú:)Ú	allow_nanÚ
separatorsúutf-8)ÚjsonÚdumpsÚencode)Údatas    úN/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sentry_sdk/utils.pyÚ
json_dumpsr3   U   s"   € ô �:‰:�d e¸
ÔC×JÑJÈ7ÓSÐSó    c                   ó   — y ©N© r7   r4   r2   Ú_get_debug_hubr8   [   s   € ð 	r4   c                  ó
  — t         j                  j                  d«      } | r| S t        t         j                  j
                  d«      5 }	 t        j                  g d¢t        j                  ||¬«      j                  «       d   j                  «       j                  d«      } | r| cddd«       S 	 ddd«       dD ]'  }t         j                  j                  |«      } | sŒ%| c S  y# t        t        f$ r Y ŒTw xY w# 1 sw Y   ŒKxY w)	zTry to guess a default release.ÚSENTRY_RELEASEzw+)Úgitz	rev-parseÚHEAD)ÚstdoutÚstderrÚstdinr   r-   N)ÚHEROKU_SLUG_COMMITÚSOURCE_VERSIONÚ!CODEBUILD_RESOLVED_SOURCE_VERSIONÚCIRCLE_SHA1ÚGAE_DEPLOYMENT_ID)ÚosÚenvironÚgetÚopenÚpathÚdevnullÚ
subprocessÚPopenÚPIPEÚcommunicateÚstripÚdecodeÚOSErrorÚIOError)ÚreleaseÚnullÚvars      r2   Úget_default_releaserV   a   sô   € ô �j‰j�n‰nÐ-Ó.€GÙØˆä	Œb�g‰g�o‰o˜tÓ	$ð ¨ð	ä× Ñ Ú0Ü%Ÿ?™?ØØô	÷ ‘“˜qñ"÷ ‘“ß‘˜“ð ñ Ø÷#ñ ð  ÷!ð&ò 	ˆô —*‘*—.‘. Ó%ˆÚØŠNð	ð øô! œÐ!ò 	Ùð	ú÷ð ús1   ÁC9Á
AC$Â!C9Ã$C6Ã3C9Ã5C6Ã6C9Ã9Dc                 óH   — g d¢}|D ]  }|| v sŒdj                  |«      c S  y)zAReturn the SDK name including the name of the used web framework.)ÚdjangoÚflaskÚfastapiÚbottleÚfalconÚquartÚsanicÚ	starletteÚchaliceÚ
serverlessÚpyramidÚtornadoÚaiohttpÚ
aws_lambdaÚgcpÚbeamÚasgiÚwsgizsentry.python.{}zsentry.python)Úformat)Úinstalled_integrationsÚframework_integrationsÚintegrations      r2   Úget_sdk_namern   ˆ   s:   € òÐð* .ò :ˆØÐ0Ò0Ø%×,Ñ,¨[Ó9Ò9ð:ð r4   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚCaptureInternalExceptionr7   c                 ó   — | S r6   r7   ©Úselfs    r2   Ú	__enter__z"CaptureInternalException.__enter__­   s   € àˆr4   c                 ó(   — |�|�t        |||f«       y)NT)Úcapture_internal_exception)rs   ÚtyÚvalueÚtbs       r2   Ú__exit__z!CaptureInternalException.__exit__±   s   € àˆ>˜eÐ/Ü&¨¨E°2 Ô7àr4   N)Ú__name__Ú
__module__Ú__qualname__Ú	__slots__rt   rz   r7   r4   r2   rp   rp   ª   s   „ Ø€Iòór4   rp   c                  ó   — t         S r6   )Ú_CAPTURE_INTERNAL_EXCEPTIONr7   r4   r2   Úcapture_internal_exceptionsr�   ¼   s   € ä&Ð&r4   c                 ó@   — t        «       }|�|j                  | «       y y r6   )r8   Ú_capture_internal_exception)Úexc_infoÚhubs     r2   rv   rv   Á   s"   € ä
Ó
€CØ
€Ø×'Ñ'¨Õ1ð r4   c                 ó0   — | t         z
  j                  «       S r6   )ÚepochÚtotal_seconds©rx   s    r2   Úto_timestamprŠ   È   s   € à”E‰M×(Ñ(Ó*Ð*r4   c                 ó$   — | j                  d«      S )Nz%Y-%m-%dT%H:%M:%S.%fZ)Ústrftimer‰   s    r2   Úformat_timestampr�   Í   s   € à�>‰>Ð1Ó2Ð2r4   c                 ó\   — | €t        j                  «       } nt        | «      } | d   €d} d| iS )z+Creates a hint with the exc info filled in.Nr   r„   )Úsysr„   Úexc_info_from_error©r„   s    r2   Úevent_hint_with_exc_infor’   Ò   s9   € ð ÐÜ—<‘<“>‰ä& xÓ0ˆØ��{ÐØˆØ˜Ð!Ð!r4   c                   ó   — e Zd ZdZy)ÚBadDsnzRaised on invalid DSNs.N©r{   r|   r}   Ú__doc__r7   r4   r2   r”   r”   Þ   s   „ Ú!r4   r”   c                   ó4   — e Zd ZdZd„ Zed„ «       Zdd„Zd„ Zy)ÚDsnzRepresents a DSN.c                 óX  — t        |t        «      rt        |j                  «      | _        y t	        j
                  t        |«      «      }|j                  dvrt        d|j                  z  «      ‚|j                  | _        |j                  €t        d«      ‚|j                  | _
        |j                  €| j                  dk(  xr dxs d| _        n|j                  | _        |j                  st        d«      ‚|j                  | _        |j                  | _        |j                   j#                  dd	«      }	 t        t%        |j'                  «       «      «      | _        dj/                  |«      dz   | _        y # t*        t,        f$ r  t        d
|j                   xs dd	d  z  «      ‚w xY w)N)ÚhttpÚhttpszUnsupported scheme %rzMissing hostnamer›   é»  éP   zMissing public keyú/r'   zInvalid project in DSN (%r)Ú )Ú
isinstancer˜   ÚdictÚ__dict__r   r
   r   Úschemer”   ÚhostnameÚhostÚportÚusernameÚ
public_keyÚpasswordÚ
secret_keyrI   ÚrsplitÚintÚpopÚ
project_idÚ
ValueErrorÚ	TypeErrorÚjoin)rs   rx   ÚpartsrI   s       r2   Ú__init__zDsn.__init__æ   s[  € ä�eœSÔ!Ü  §¡Ó0ˆDŒMØÜ×!Ñ!¤)¨EÓ"2Ó3ˆà�<‰<Ð0Ñ0ÜÐ0°5·<±<Ñ?Ó@Ð@Ø—l‘lˆŒà�>‰>Ð!ÜÐ+Ó,Ð,à—N‘NˆŒ	à�:‰:ÐØŸ™ wÑ.Ò6°3Ò<¸"ˆD�IàŸ
™
ˆDŒIà�~Š~ÜÐ-Ó.Ð.àŸ.™.ˆŒØŸ.™.ˆŒà�z‰z× Ñ   aÓ(ˆð	QÜ'¬¨D¯H©H«J«Ó8ˆDŒOð —H‘H˜T“N SÑ(ˆ�	øô œIÐ&ò 	QÜÐ6¸%¿*¹*Ò:JÈÈAÈBÐ9OÑOÓPÐPð	Qús   Ä9'E: Å:/F)c                 ót   — | j                   }| j                  | j                  fdvr|›d| j                  ›�}|S )zThe netloc part of a DSN.))rš   r�   )r›   rœ   r*   )r¥   r£   r¦   ©rs   Úrvs     r2   Únetlocz
Dsn.netloc
  s6   € ð �Y‰YˆØ�K‰K˜Ÿ™Ð#Ð+IÑIÚ §	¢	Ð*ˆBØˆ	r4   Nc           	      óž   — t        | j                  | j                  | j                  | j                  | j
                  | j                  |¬«      S )z*Returns the auth info object for this dsn.)r£   r¥   rI   r®   r¨   rª   Úclient)ÚAuthr£   r·   rI   r®   r¨   rª   )rs   r¹   s     r2   Úto_authzDsn.to_auth  s>   € ô Ø—;‘;Ø—‘Ø—‘Ø—‘Ø—‘Ø—‘Øô
ð 	
r4   c                 óÄ   — | j                   ›d| j                  ›| j                  xr d| j                  z   xs d›d| j                  ›| j                  ›| j
                  ›�S )Nú://ú@rŸ   )r£   r¨   rª   r·   rI   r®   rr   s    r2   Ú__str__zDsn.__str__   sN   € ð �K‹KØ�OŠOØ�O‰OÒ5  d§o¡oÑ 5Ò;¸Ñ;Ø�KŠKØ�IŠIØ�OŠOð
ð 	
r4   r6   )	r{   r|   r}   r–   r³   Úpropertyr·   r»   r¿   r7   r4   r2   r˜   r˜   â   s)   „ áò")ðH ñó ðó
ó	
r4   r˜   c                   ó@   — e Zd ZdZ	 	 	 	 dd„Zed„ «       Z	 dd„Zd„ Zy)	rº   z,Helper object that represents the auth info.Nc	                 ót   — || _         || _        || _        || _        || _        || _        || _        || _        y r6   )r£   r¥   rI   r®   r¨   rª   Úversionr¹   )	rs   r£   r¥   r®   r¨   rª   rÃ   r¹   rI   s	            r2   r³   zAuth.__init__/  s<   € ð ˆŒØˆŒ	ØˆŒ	Ø$ˆŒØ$ˆŒØ$ˆŒØˆŒØˆ�r4   c                 ó&   — | j                  d¬«      S )z^Returns the API url for storing events.

        Deprecated: use get_api_url instead.
        Ústore)Útype)Úget_api_urlrr   s    r2   Ústore_api_urlzAuth.store_api_urlD  s   € ð ×Ñ WÐÓ-Ð-r4   c           	      ór   — | j                   ›d| j                  ›| j                  ›d| j                  ›d|›d�	S )z'Returns the API url for storing events.r½   zapi/rž   )r£   r¥   rI   r®   )rs   rÆ   s     r2   rÇ   zAuth.get_api_urlM  s-   € ð �K‹KØ�IŠIØ�I‹IØ�O‹OÚð
ð 	
r4   c                 ó  — d| j                   fd| j                  fg}| j                  �|j                  d| j                  f«       | j                  �|j                  d| j                  f«       ddj                  d„ |D «       «      z   S )z!Returns the auth header a string.Ú
sentry_keyÚsentry_versionÚsentry_clientÚsentry_secretzSentry z, c              3   ó0   K  — | ]  \  }}|›d |›�–— Œ y­w)ú=Nr7   )Ú.0Úkeyrx   s      r2   ú	<genexpr>z!Auth.to_header.<locals>.<genexpr>b  s   è ø€ Ò$QÁ
ÀÀU²±UÔ%;Ñ$Qùs   ‚)r¨   rÃ   r¹   Úappendrª   r±   rµ   s     r2   Ú	to_headerzAuth.to_headerZ  sy   € ð ˜TŸ_™_Ð-Ð0@À$Ç,Á,Ð/OÐPˆØ�;‰;Ð"Ø�I‰I�¨¯©Ð4Ô5Ø�?‰?Ð&Ø�I‰I�¨¯©Ð8Ô9Ø˜4Ÿ9™9Ñ$QÈbÔ$QÓQÑQÐQr4   )Né   Nrž   )rÅ   )	r{   r|   r}   r–   r³   rÀ   rÈ   rÇ   rÕ   r7   r4   r2   rº   rº   ,  s<   „ Ù6ð ØØØóð* ñ.ó ð.ð ó
óRr4   rº   c                   óJ   — e Zd ZdZdZd„ Zed„ «       Zed„ «       Zed„ «       Z	y)ÚAnnotatedValuea  
    Meta information for a data field in the event payload.
    This is to tell Relay that we have tampered with the fields value.
    See:
    https://github.com/getsentry/relay/blob/be12cd49a0f06ea932ed9b9f93a655de5d6ad6d1/relay-general/src/types/meta.rs#L407-L423
    ©rx   Úmetadatac                 ó    — || _         || _        y r6   rÙ   )rs   rx   rÚ   s      r2   r³   zAnnotatedValue.__init__o  s   € àˆŒ
Ø ˆ�r4   c                 ó&   — t        ddddggi¬«      S )zxThe value was removed because it could not be parsed. This is done for request body values that are not json nor a form.rŸ   Úremz!rawÚxrÙ   ©rØ   ©Úclss    r2   Úremoved_because_raw_dataz'AnnotatedValue.removed_because_raw_datat  s,   € ô ØààØðððô

ð 
	
r4   c                 ó&   — t        ddddggi¬«      S )z•The actual value was removed because the size of the field exceeded the configured maximum size (specified with the max_request_body_size sdk option)rŸ   rÝ   ú!configrÞ   rÙ   rß   rà   s    r2   Úremoved_because_over_size_limitz.AnnotatedValue.removed_because_over_size_limit„  s,   € ô Øàà!Øðððô

ð 
	
r4   c                 ó.   — t        t        dddggi¬«      S )zHThe actual value was removed because it contained sensitive information.rÝ   rä   ÚsrÙ   )rØ   ÚSENSITIVE_DATA_SUBSTITUTErà   s    r2   Ú+substituted_because_contains_sensitive_dataz:AnnotatedValue.substituted_because_contains_sensitive_data”  s,   € ô Ü+àà!Øðððô

ð 
	
r4   N)
r{   r|   r}   r–   r~   r³   Úclassmethodrâ   rå   ré   r7   r4   r2   rØ   rØ   e  sO   „ ñð &€Iò!ð
 ñ
ó ð
ð ñ
ó ð
ð ñ
ó ñ
r4   rØ   )ÚTypeVarÚTc                 ó:   — t        | dd «      xs t        | dd «      S )Nr}   r{   ©Úgetattrrà   s    r2   Úget_type_namerð   ¬  s   € ä�3˜¨Ó-ÒO´¸¸jÈ$Ó1OÐOr4   c                 ó*   — t        | dd «      }|dvr|S y )Nr|   )NÚbuiltinsÚ__builtins__rî   )rá   Úmods     r2   Úget_type_modulerõ   ±  s!   € ä
�#�| TÓ
*€CØ
Ð4Ñ4Øˆ
Ør4   c                 óÄ   — 	 | j                   d   }|j                  d«      ry	 dD ]  }	 | j                  |   r yŒ y# t        t        f$ r Y Œ+w xY w# t
        $ r Y Œ8w xY w)Nr{   zsentry_sdk.T)Ú__traceback_hide__Ú__tracebackhide__F)Ú	f_globalsÚ
startswithÚAttributeErrorÚKeyErrorÚf_localsÚ	Exception)Úframerô   Ú	flag_names      r2   Úshould_hide_framer  ¹  s„   € ðØ�o‰o˜jÑ)ˆØ�>‰>˜-Ô(Øð )ð
 ?ò ˆ	ð	Ø�~‰~˜iÒ(Ùð )ðð øô œHÐ%ò Ùðûô ò 	Ùð	ús    ‚ > ªA¾AÁAÁ	AÁAc              #   óf   K  — | }|�)t        |j                  «      s|–— |j                  }|�Œ(y y ­wr6   )r  Útb_frameÚtb_next)ry   Útb_s     r2   Úiter_stacksr  Ì  s1   è ø€ à
€CØ
ˆ/Ü  §¡Ô.ØŠIØ�k‰kˆð ‹/ùs   ‚,1¯1c                 óž  — d}d }|�0t        |d«      r$	 |j                  |«      }|�|j	                  «       }|€	 t        j                  | «      }|sg d g fS t        d||z
  «      }t        |dz   |z   t        |«      «      }		 ||| D �
cg c]  }
t        |
j                  d«      |¬«      ‘Œ  }}
t        ||   j                  d«      |¬«      }||dz   |	 D �
cg c]  }
t        |
j                  d«      |¬«      ‘Œ  }}
|||fS # t        t        f$ r d }Y Œîw xY w# t        t        f$ r g d g fcY S w xY wc c}
w c c}
w # t        $ r g d g fcY S w xY w)Né   Ú
get_sourcer   r'   z
)Ú
max_length)Úhasattrr	  ÚImportErrorrR   Ú
splitlinesÚ	linecacheÚgetlinesrQ   ÚmaxÚminÚlenÚstrip_stringrO   Ú
IndexError)ÚfilenameÚlinenor
  ÚloaderÚmoduleÚcontext_linesÚsourceÚ
source_strÚlower_boundÚupper_boundÚlineÚpre_contextÚcontext_lineÚpost_contexts                 r2   Úget_lines_from_filer"  Õ  s   € ð €MØ€FØÐœg f¨lÔ;ð	Ø×*Ñ*¨6Ó2ˆJð Ð!Ø×*Ñ*Ó,ˆFà€~ð	 Ü×'Ñ'¨Ó1ˆFñ Ø�4˜ˆ|Ðä�a˜ -Ñ/Ó0€KÜ�f˜q‘j =Ñ0´#°f³+Ó>€Kðð ˜{¨6Ð2ö
àô ˜Ÿ™ FÓ+¸
ÖCð
ˆð 
ô $ F¨6¡N×$8Ñ$8¸Ó$@ÈZÔXˆð  ¨¡
¨kÐ:ö
àô ˜Ÿ™ FÓ+¸
ÖCð
ˆð 
ð ˜L¨,Ð6Ð6øô7 œWÐ%ò 	ØŠJð	ûô œÐ!ò 	 Ø�t˜R�<Òð	 üò
ùò

øô
 ò à�4˜ˆ|ÒðúsR   ”D  ºD ÂD; Â#D1Â++D; Ã#D6Ã9D; Ä DÄDÄD.Ä-D.Ä1
D; Ä;EÅEc                 ó  — 	 | j                   j                  }	 | j                  d   }	 | j                  d   }|dz
  }|�|rt	        |||||¬«      S g d g fS # t        $ r d }Y ŒKw xY w# t        $ r g d g fcY S w xY w# t        $ r d }Y ŒPw xY w)Nr{   Ú
__loader__r'   )r  r  )Úf_codeÚco_filenamerþ   rù   r"  )rÿ   Ú	tb_linenoÚmax_value_lengthÚabs_pathr  r  r  s          r2   Úget_source_contextr*    s½   € ðØ—<‘<×+Ñ+ˆðØ—‘ Ñ,ˆðØ—‘ Ñ.ˆð ˜‰]€FØÐ™hÜ"Ø�fÐ.°vÀfô
ð 	
ð ˆt�Rˆ<Ðøô ò ØŠðûô ò Ø�4˜ˆ|Òðûô ò ØŠðús3   ‚A ™A' ©A; ÁA$Á#A$Á'A8Á7A8Á;B	ÂB	c                 óN   — 	 t        | «      S # t        $ r t        | «      cY S w xY wr6   )r   rþ   Ú	safe_reprr‰   s    r2   Úsafe_strr-    s,   € ð Ü˜ÓÐøÜò  Ü˜ÓÒð ús   ‚
 �$£$c                 ó¼   — 	 t        | «      j                  dd«      }	 |j                  d«      j                  d«      S # t        $ r |cY S w xY w# t        $ r Y yw xY w)Nr-   ÚreplaceÚlatin1zunicode-escapeú<broken repr>)ÚreprrP   r0   rþ   )rx   r¶   s     r2   r,  r,  '  sh   € ð	#Ü�e“×#Ñ# G¨YÓ7ˆBðð —y‘y Ó*×1Ñ1Ð2BÓCÐCøÜò ð ’	ðûô ò 	#á"ð	#ús,   ‚A ž> ¾AÁ	A ÁAÁA Á	AÁAc                 ó8   — 	 t        | «      S # t        $ r Y yw xY w)Nr1  )r2  rþ   r‰   s    r2   r,  r,  B  s#   € ð	#Ü˜“;ÐøÜò 	#Ù"ð	#ús   ‚
 �	˜c                 ó¸  — |r| s|S 	 |j                  d«      r|d d }| j                  dd«      d   }|| k(  rt        j                  j	                  |«      S t
        j                  |   j                  }|s|S |j                  |j                  t        j                  d«      d   d«      d   j                  t        j                  «      S # t        $ r |cY S w xY w)Nz.pycéÿÿÿÿú.r'   r   é   )ÚendswithÚsplitrE   rI   Úbasenamer�   ÚmodulesÚ__file__r«   ÚsepÚlstriprþ   )r  r)  Úbase_moduleÚbase_module_paths       r2   Úfilename_for_modulerA  J  sÐ   € á™6ØˆðØ×Ñ˜VÔ$Ø  �}ˆHà—l‘l 3¨Ó*¨1Ñ-ˆØ˜&Ò Ü—7‘7×#Ñ# HÓ-Ð-äŸ;™; {Ñ3×<Ñ<ÐÙØˆOà�~‰~Ð.×5Ñ5´b·f±f¸aÓ@ÀÑCÀQÓGÈÑK×RÑRÜ�F‰Fó
ð 	
øô ò ØŠðús   ˆAC Á C Á8AC ÃCÃCc                 óÆ  — t        | dd «      }|sd }d }n,| j                  j                  }| j                  j                  }	 | j                  d   }|€| j                  }t        ||«      xs d |rt        j                  j                  |«      nd |xs d||dœ}	|rt        | ||«      \  |	d<   |	d<   |	d<   |rt        | j                  «      |	d<   |	S # t
        $ r d }Y ŒŽw xY w)	Nr%  r{   z	<unknown>)r  r)  Úfunctionr  r  r  r   r!  Úvars)rï   r%  r&  Úco_namerù   rþ   Úf_linenorA  rE   rI   Úabspathr*  r   rý   )
rÿ   r'  Úinclude_local_variablesÚinclude_source_contextr(  r%  r)  rC  r  r¶   s
             r2   Úserialize_framerJ  b  sû   € ô �U˜H dÓ+€FÙØˆØ‰à—<‘<×+Ñ+ˆØ—<‘<×'Ñ'ˆðØ—‘ Ñ,ˆð ÐØ—N‘Nˆ	ô (¨°Ó9ÒA¸TÙ19”B—G‘G—O‘O HÔ-¸tØÒ+ ØØñ
€Bñ ÜDVØ�9Ð.óE
ÑAˆˆ=Ñ˜2˜nÑ-¨r°.Ñ/Añ Ü˜%Ÿ.™.Ó)ˆˆ6‰
à€Iøô- ò ØŠðús   ÁC ÃC ÃC c                 óÎ   — d}g }t        j                  «       }|�8t        |«      s|j                  t	        || ||¬«      «       |j
                  }|�Œ8|j                  «        d|iS )NT)rH  rI  r(  Úframes)r�   Ú	_getframer  rÔ   rJ  Úf_backÚreverse)rH  rI  r(  rø   rL  Úfs         r2   Úcurrent_stacktracerQ  Œ  sp   € ð ÐØ€Fä�‰‹€AØ
ˆ-Ü  Ô#Ø�M‰MÜØØ,CØ+AØ%5ô	ôð �H‰Hˆð ‰-ð ‡N�NÔà�fÐÐr4   c                 ó   — t        | dd «      S )NÚerrnorî   ©Ú	exc_values    r2   Ú	get_errnorV  §  s   € ä�9˜g tÓ,Ð,r4   c                 óT   — t        | dd«      xs t        | dd«      xs t        | «      S )NÚmessagerŸ   Údetail)rï   r-  rT  s    r2   Úget_error_messagerZ  ¬  s3   € ô 	�	˜9 bÓ)ò 	Ü�9˜h¨Ó+ò	ä�IÓðr4   c           
      ó¬  — i }|r|j                  «       ndddœ|d<   |�||d   d<   |�t        |«      }	nd}	|	�5|d   j                  di «      j                  di «      j                  d	|	«       |�||d   d
<   |dk(  }
|
s|�||d   d<   d|d   d<   |
rd|d   vrd|d   d<   t        duxr t	        |t        «      }|rd|d   d<   t        | «      |d<   t        | «      |d<   t        |«      |d<   |€d}d}t        }n|d   }|d   }|d   }t        |«      D �cg c]&  }t        |j                  |j                  |||¬«      ‘Œ( }}|rd|i|d<   |S c c}w )zå
    Creates a dict that goes into the events `exception.values` list and is ingestible by Sentry.

    See the Exception Interface documentation for more details:
    https://develop.sentry.dev/sdk/event-payloads/exception/
    ÚgenericT)rÆ   ÚhandledÚ	mechanismNÚexception_idÚmetarS  Únumberr  r   Ú	parent_idÚchainedrÆ   Úis_exception_groupr  rx   rH  rI  r(  )r'  rH  rI  r(  rL  Ú
stacktrace)r   rV  Ú
setdefaultr   r    rõ   rð   rZ  r   r  rJ  r  r'  )Úexc_typerU  ry   Úclient_optionsr^  r_  rb  r  Úexception_valuerS  Úis_root_exceptionrd  rH  rI  r(  rL  s                   r2   Ú!single_exception_from_error_tuplerk  µ  sè  € ð" €Oá%ˆ	�‰Ô°IÈ$Ñ+Oð �KÑ ð ÐØ7Cˆ˜Ñ$ ^Ñ4àÐÜ˜)Ó$‰àˆàÐØ˜Ñ$×/Ñ/°¸Ó;×FÑFØ�Ró	
ç
‰*�X˜uÔ
%àÐØ17ˆ˜Ñ$ XÑ.à$¨Ñ)ÐÙ Ð!6Ø4=ˆ˜Ñ$ [Ñ1Ø/8ˆ˜Ñ$ VÑ,á˜V¨?¸;Ñ+GÑGØ/8ˆ˜Ñ$ VÑ,ä+°4Ð7ò ¼JØÔ%ó=Ðñ Ø=Aˆ˜Ñ$Ð%9Ñ:ä /°Ó 9€O�HÑÜ+¨HÓ5€O�FÑÜ0°Ó;€O�GÑàÐØ"&ÐØ!%ÐÜ3Ñà"0Ð1JÑ"KÐØ!/Ð0HÑ!IÐØ)Ð*<Ñ=Ðô ˜b“/ö	ð ô 	Ø�K‰KØ—l‘lØ$;Ø#9Ø-ö	
ð	€Fð 	ñ Ø)1°6Ð(:ˆ˜Ñ%àÐùò	s   Ä+EÚ__suppress_context__c              #   óh  K  — | \  }}}g }t        «       }|�š|�—t        |«      |vr‰|||f–— |j                  |«       |j                  t        |«      «       |j                  r|j
                  }n|j                  }|€y t        |«      }|}t        |dd «      }|�|�t        |«      |vrŒ†y y y y y y ­w)NÚ__traceback__)	ÚsetÚidrÔ   Úaddrl  Ú	__cause__Ú__context__rÆ   rï   )r„   rg  rU  ry   Úseen_exceptionsÚseen_exception_idsÚcauses          r2   Úwalk_exception_chainrw  
  sÞ   è ø€ à"*Ñˆ�)˜RàˆÜ ›UÐð Ð ØÐ%Ü�9“Ð%7Ñ7à˜I rÐ)Ò)ð
 ×"Ñ" 9Ô-Ø×"Ñ"¤2 i£=Ô1à×-Ò-Ø!×+Ñ+‘à!×-Ñ-�Øˆ}ØÜ˜E“{ˆHØˆIÜ˜ °Ó6ˆBð) Ð ØÐ%Ü�9“Ð%7Ó7ð &ð !à7ð &ð !ùs   ‚B)B2Â,B2c              #   ó   K  — | –— y ­wr6   r7   r‘   s    r2   rw  rw  *  s   è ø€ à‹ùs   ‚c                 óø  — t        | |||||||¬«      }|g}	|}|dz  }t        |d«      xr |j                  }
|
ri|xr t        |d«      xr |j                  du}|r¯|j                  }t	        t        |«      |t        |dd«      |||d¬«      \  }}|	j                  |«       nh|xr t        |d«      xr |j                  du}|rF|j                  }t	        t        |«      |t        |dd«      |||d¬«      \  }}|	j                  |«       |xr t        |d	«      }|r[t        |j                  «      D ]C  \  }}t	        t        |«      |t        |dd«      ||||d
|z  ¬«      \  }}|	j                  |«       ŒE ||	fS )zö
    Creates the list of exceptions.
    This can include chained exceptions and exceptions from an ExceptionGroup.

    See the Exception Interface documentation for more details:
    https://develop.sentry.dev/sdk/event-payloads/exception/
    )rg  rU  ry   rh  r^  r_  rb  r  r'   rl  rr  Nrn  )rg  rU  ry   rh  r^  r_  r  rs  Ú
exceptionszexceptions[%s])rk  r  rl  rr  Úexceptions_from_errorrÆ   rï   Úextendrs  Ú	enumeraterz  )rg  rU  ry   rh  r^  r_  rb  r  Úparentrz  Úshould_supress_contextÚexception_has_causerv  Úchild_exceptionsÚexception_has_contentÚcontextrd  ÚidxÚes                      r2   r{  r{  /  så  € ô& /ØØØØ%ØØ!ØØô	€Fð �€Jà€IØ�AÑ€Lä$ YÐ0FÓGÒjÈI×LjÑLjÐÙð ò 0Ü˜	 ;Ó/ò0à×#Ñ#¨4Ð/ð 	ñ
 Ø×'Ñ'ˆEÜ/DÜ˜e›ØÜ˜5 /°4Ó8Ø-Ø#Ø)Ø"ô0Ñ,ˆ\Ð+ð ×ÑÐ.Õ/ð ò 2Ü˜	 =Ó1ò2à×%Ñ%¨TÐ1ð 	ñ
 !Ø×+Ñ+ˆGÜ/DÜ˜g›Ø!Ü˜7 O°TÓ:Ø-Ø#Ø)Ø$ô0Ñ,ˆ\Ð+ð ×ÑÐ.Ô/ð #ÒG¤w¨y¸,Ó'GÐÙÜ 	× 4Ñ 4Ó5ò 	0‰FˆC�Ü/DÜ˜a›ØÜ˜1˜o¨tÓ4Ø-Ø#Ø)Ø#Ø'¨#Ñ-ô	0Ñ,ˆ\Ð+ð ×ÑÐ.Õ/ð	0ð ˜*Ð%Ð%r4   c           
      óþ   — | \  }}}t         d uxr t        |t         «      }|rt        |||||dd¬«      \  }}n4g }t        | «      D ]$  \  }}}|j	                  t        |||||«      «       Œ& |j                  «        |S )Nr   )rg  rU  ry   rh  r^  r_  rb  )r   r    r{  rw  rÔ   rk  rO  )	r„   rh  r^  rg  rU  ry   rd  Ú_rz  s	            r2   Úexceptions_from_error_tuplerˆ  �  s¬   € ð 'Ñ€Hˆi˜ä+°4Ð7ò ¼JØÔ%ó=Ðñ Ü/ØØØØ)ØØØô
‰ˆ‰Jð ˆ
Ü';¸HÓ'Eò 	Ñ#ˆH�i Ø×ÑÜ1Ø˜i¨¨^¸Yóõð	ð ×ÑÔàÐr4   c                 óT   — 	 t        | «      S # t        $ r t        | «      dd cY S w xY w)Nr'   r5  )r   ÚUnicodeDecodeErrorr2  r‰   s    r2   Ú	to_stringr‹  ´  s2   € ð!Ü˜ÓÐøÜò !Ü�E‹{˜1˜RÐ Ò ð!ús   ‚
 �'¦'c              #   óØ   K  — d| v r| d   –— d| v r)| d   j                  d«      xs dD ]  }d|v sŒ|d   –— Œ d| v r*| d   j                  d«      xs dD ]  }d|v sŒ|d   –— Œ y y ­w)Nre  ÚthreadsÚvaluesr7   Ú	exception)rG   )ÚeventÚthreadr�  s      r2   Úiter_event_stacktracesr’  ¼  sž   è ø€ à�uÑØ�LÑ!Ò!Ø�EÑØ˜IÑ&×*Ñ*¨8Ó4Ò:¸ò 	+ˆFØ˜vÒ%Ø˜\Ñ*Ó*ð	+ð �eÑØ˜{Ñ+×/Ñ/°Ó9Ò?¸Rò 	.ˆIØ˜yÒ(Ø Ñ-Ó-ñ	.ð ùs   ‚/A*²,A*ÁA*c              #   óh   K  — t        | «      D ]   }|j                  d«      xs dD ]  }|–— Œ Œ" y ­w)NrL  r7   )r’  rG   )r�  re  rÿ   s      r2   Úiter_event_framesr”  Ê  s<   è ø€ ä,¨UÓ3ò ˆ
Ø—^‘^ HÓ-Ò3°ò 	ˆEØ‹Kñ	ñùs   ‚02c                 ób   — t        | «      D ]   }t        |j                  d«      |||¬«       Œ" | S )NrL  )Úin_app_excludeÚin_app_includeÚproject_root)r’  Úset_in_app_in_framesrG   )r�  r–  r—  r˜  re  s        r2   Úhandle_in_apprš  Ñ  s:   € ä,¨UÓ3ò 
ˆ
ÜØ�N‰N˜8Ó$Ø)Ø)Ø%ö		
ð
ð €Lr4   c                 ó  — | sy | D ]‚  }|j                  d«      }|�Œ|j                  d«      }t        ||«      rd|d<   Œ:t        ||«      rd|d<   ŒL|j                  d«      }|€Œ`t        |«      rd|d<   Œqt        ||«      sŒ~d|d<   Œ„ | S )NÚin_appr  TFr)  )rG   Ú_module_in_listÚ_is_external_sourceÚ_is_in_project_root)rL  r–  r—  r˜  rÿ   Úcurrent_in_appr  r)  s           r2   r™  r™  Þ  s¶   € áØàò ˆàŸ™ 8Ó,ˆØÐ%Øà—‘˜8Ó$ˆô ˜6 >Ô2Ø"ˆE�(‰OØô ˜6 >Ô2Ø#ˆE�(‰OØð —9‘9˜ZÓ(ˆØÐØä˜xÔ(Ø#ˆE�(‰OØä˜x¨Õ6Ø"ˆE�(‰OØð;ð> €Mr4   c                 ó6  — t        | t        «      rt        | «      dk(  r| \  }}}npt        | t        «      rIt	        | dd «      }|�t        | «      }| }nCt        j                  «       \  }}}|| ur'd }| }t        | «      }nt        dt        | «      z  «      ‚|||fS )Né   rn  z,Expected Exception object to report, got %s!)	r    Útupler  ÚBaseExceptionrï   rÆ   r�   r„   r¯   )Úerrorrg  rU  ry   s       r2   r�   r�     sž   € ä�%œÔ¤C¨£J°!¢OØ"'Ñˆ�)™RÜ	�Eœ=Ô	)Ü�U˜O¨TÓ2ˆØˆ>Ü˜E“{ˆHØ‰Iä&)§l¡l£nÑ#ˆH�i Ø Ñ%Ø�Ø!�	Ü ›;‘ô ÐGÌ$ÈuË+ÑUÓVÐVà�Y Ð"Ð"r4   c                 óV   — t        | «      } t        | «      }ddt        | ||«      idœ|fS )Nr¥  rŽ  )Úlevelr�  )r�   r’   rˆ  )r„   rh  r^  Úhints       r2   Úevent_from_exceptionr©    sH   € ô # 8Ó,€HÜ# HÓ-€Dð àÔ5Ø˜n¨ióðñ	
ð 	ð
ð 
r4   c                 óT   — | €y|sy|D ]  }|| k(  s| j                  |dz   «      sŒ y y)NFr6  T©rú   )ÚnameÚitemsÚitems      r2   r�  r�  0  s=   € à€|ØáØàò ˆØ�4Š<˜4Ÿ?™?¨4°#©:Õ6Ùðð r4   c                 ó6   — t        j                  d| «      d u}|S )Nz [\\/](?:dist|site)-packages[\\/]©ÚreÚsearch)r)  Úexternal_sources     r2   rž  rž  ?  s%   € ô 	�	‰	Ð5°xÓ@ÈÐLð ð Ðr4   c                 ó.   — |€y| j                  |«      ryy)NFTr«  )r)  r˜  s     r2   rŸ  rŸ  H  s!   € àÐØð ×Ñ˜<Ô(Øàr4   c                 óž   — | s| S |€t         }t        | j                  d«      «      }||kD  r!t        | d |dz
   dz   |dd|dz
  |ggdœ¬«      S | S )Nr-   r¢  z...z!limitrÞ   )r  rÝ   rÙ   )r   r  r0   rØ   )rx   r
  Úlengths      r2   r  r  T  ss   € áØˆàÐÜ-ˆ
ä�—‘˜gÓ&Ó'€Fà�
ÒÜØÐ(˜* q™.Ð)¨EÑ1àØ! 3¨
°Q©¸
ÐCÐDñô
ð 	
ð €Lr4   c                  ób  — 	 ddl } ddlm} t        t	        j
                  d| j                  «      dd D �cg c]  }t        |«      ‘Œ c}«      } |dd«      r#t        j                  dk\  r|d	k\  s	 |d
d«      ryy	 	 ddlm}  |d«      ry	 yc c}w # t        $ r Y Œ"w xY w# t        $ r Y yw xY w)z‡
    Returns whether gevent/eventlet have patched the stdlib in a way where thread locals are now more "correct" than contextvars.
    r   N)Úis_object_patchedz	a|b|rc|\.r7  Ú	threadingÚlocal©r¢  rÖ   )é   é	   ÚcontextvarsÚ
ContextVarFT)Úis_monkey_patchedr‘  )ÚgeventÚgevent.monkeyr¸  r£  r±  r9  Ú__version__r¬   r�   Úversion_infor  Úeventlet.patcherrÀ  )rÁ  r¸  ÚpartÚversion_tuplerÀ  s        r2   Ú_is_contextvars_brokenrÈ  i  sÈ   € ð
ÛÝ3ô Ü#%§8¡8¨L¸&×:LÑ:LÓ#MÈbÈqÐ#QÖR˜4ŒS��YÒRó
ˆñ ˜[¨'Ô2ô ×!Ñ! VÒ+°ÀÒ0Há% m°\ÔBààð 3ð&Ý6á˜XÔ&Øð 'ð
 ùò; Søô$ ò Ùðûô ò Øàðús4   ‚4B ¶BÁ1B Á=B" ÂB Â	BÂBÂ"	B.Â-B.c                 ó*   ‡ —  G ˆ fd„dt         «      }|S )Nc                   ó$   •— e Zd Zˆ fd„Zd„ Zd„ Zy)ú1_make_threadlocal_contextvars.<locals>.ContextVarc                 ó,   •— || _          ‰«       | _        y r6   )Ú_nameÚ_local)rs   r¬  rº  s     €r2   r³   z:_make_threadlocal_contextvars.<locals>.ContextVar.__init__™  s   ø€ àˆDŒJÙ›'ˆD�Kr4   c                 ó0   — t        | j                  d|«      S )Nrx   )rï   rÎ  )rs   Údefaults     r2   rG   z5_make_threadlocal_contextvars.<locals>.ContextVar.getž  s   € ä˜4Ÿ;™;¨°Ó9Ð9r4   c                 ó&   — || j                   _        y r6   )rÎ  rx   )rs   rx   s     r2   ro  z5_make_threadlocal_contextvars.<locals>.ContextVar.set¢  s   € à %ˆD�K‰KÕr4   N)r{   r|   r}   r³   rG   ro  ©rº  s   €r2   r¿  rË  –  s   ø„ ô	"ò
	:ó	&r4   r¿  )Úobject)rº  r¿  s   ` r2   Ú_make_threadlocal_contextvarsrÔ  ”  s   ø€ ö&”Vô &ð  Ðr4   c                  óÊ   — t        «       s)t        j                  dk  r	 ddlm}  d| fS 	 ddlm}  d| fS ddlm} dt        |«      fS # t
        $ r Y Œw xY w# t
        $ r Y Œ-w xY w)zÛ
    Figure out the "right" contextvars installation to use. Returns a
    `contextvars.ContextVar`-like class with a limited API.

    See https://docs.sentry.io/platforms/python/contextvars/ for more information.
    r»  r   )r¿  TrÒ  F)
rÈ  r�   rÄ  Úaiocontextvarsr¿  r  r¾  r¹  rº  rÔ  )r¿  rº  s     r2   Ú_get_contextvarsr×  ©  s}   € ô "Ô#ô
 ×Ñ˜fÒ$ðÝ5à˜ZÐ'Ð'ð
Ý2à˜ZÐ'Ð'õ  àÔ/°Ó6Ð6Ð6øô ò Ùðûô ò Ùðús"   Ÿ	A ª	A Á	AÁAÁ	A"Á!A"zö

With asyncio/ASGI applications, the Sentry SDK requires a functional
installation of `contextvars` to avoid leaking scope/context data across
requests.

Please refer to https://docs.sentry.io/platforms/python/contextvars/ for more information.
c                 ó\  — d}	 | j                   j                  ›d| j                   j                  ›d| j                  ›�S # t        $ r Y nw xY wd\  }}t        rBt        | d«      r6t        | j                  t        «      rd\  }}| j                  j                  } n7t        | t        «      r't        | j                  d«      rd\  }}| j                  } t        | d«      r| j                  }nt        | d«      r| j                  }|�&t        | d	«      r| j                  dz   |z   }||z   |z   }|S )
zbReturn the qualified name of func. Works with regular function, lambda, partial and partialmethod.Nr6  )rŸ   rŸ   Ú_partialmethod)zpartialmethod(<function ú>)r{   )zpartial(<function rÚ  r}   r|   )Úim_classr|   r{   rþ   Ú_PARTIALMETHOD_AVAILABLEr  r    rÙ  r   Úfuncr   r}   )rÝ  Úfunc_qualnameÚprefixÚsuffixs       r2   Úqualname_from_functionrá  Û  s  € ð €Mðà�M‰M×$Ó$Ø�M‰M×"Ó"Ø�MŠMð
ð 	
øô
 ò Ùðúð �N€FˆFõ 	!Ü�DÐ*Ô+Ü�t×*Ñ*¬MÔ:à9‰ˆ�Ø×"Ñ"×'Ñ'‰Ü	�Dœ'Ô	"¤w¨t¯y©y¸*Ô'EØ3‰ˆ�Ø�y‰yˆäˆt�^Ô$Ø×)Ñ)‰Ü	��zÔ	"ØŸ™ˆð Ð Ü�4˜Ô&Ø ŸO™O¨cÑ1°MÑAˆMØ Ñ.°Ñ7ˆàÐs   „;A  Á 	AÁAc                 ó   — t        | «      S r6   )rá  )rÝ  s    r2   Útransaction_from_functionrã    s   € ä! $Ó'Ð'r4   Údisable_capture_eventc                   ó   — e Zd ZdZy)ÚServerlessTimeoutWarningz>Raised when a serverless method is about to reach its timeout.Nr•   r7   r4   r2   ræ  ræ    s   „ ÙHàr4   ræ  c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ÚTimeoutThreadzˆCreates a Thread which runs (sleeps) for a time duration equal to
    waiting_time and raises a custom ServerlessTimeout exception.
    c                 ó�   — t         j                  j                  | «       || _        || _        t        j
                  «       | _        y r6   )r¹  ÚThreadr³   Úwaiting_timeÚconfigured_timeoutÚEventÚ_stop_event)rs   rë  rì  s      r2   r³   zTimeoutThread.__init__  s5   € ä×Ñ×!Ñ! $Ô'Ø(ˆÔØ"4ˆÔÜ$Ÿ?™?Ó,ˆÕr4   c                 ó8   — | j                   j                  «        y r6   )rî  ro  rr   s    r2   ÚstopzTimeoutThread.stop  s   € à×Ñ×ÑÕr4   c                 ó  — | j                   j                  | j                  «       | j                   j                  «       ry t	        | j
                  «      }|| j
                  k  r|dz   }t        dj                  |«      «      ‚)Nr'   zZWARNING : Function is expected to get timed out. Configured timeout duration = {} seconds.)rî  Úwaitrë  Úis_setr¬   rì  ræ  rj   )rs   Úinteger_configured_timeouts     r2   ÚrunzTimeoutThread.run#  s   € ð 	×Ñ×Ñ˜d×/Ñ/Ô0à×Ñ×"Ñ"Ô$Øä%(¨×)@Ñ)@Ó%AÐ"ð &¨×(?Ñ(?Ò?Ø)CÀaÑ)GÐ&ô 'Øh×oÑoØ*óó
ð 	
r4   N)r{   r|   r}   r–   r³   rð  rõ  r7   r4   r2   rè  rè    s   „ ñò-òó
r4   rè  c                 óô   — d}	 | j                  d«      }t        j                  |«      }|j                  d«      }|S # t        $ r1}t
        j                  dj                  | ¬«      |«       Y d}~|S d}~ww xY w)zO
    Convert a string to base64, via UTF-8. Returns None on invalid input.
    NúUTF-8z"Unable to encode {orig} to base64:)Úorig)r0   Úbase64Ú	b64encoderP   rþ   ÚloggerÚwarningrj   )ÚoriginalÚbase64_stringÚ
utf8_bytesÚbase64_bytesÚerrs        r2   Ú	to_base64r  9  s€   € ð
 €MðXØ—_‘_ WÓ-ˆ
Ü×'Ñ'¨
Ó3ˆØ$×+Ñ+¨GÓ4ˆð Ðøô ò XÜ�‰Ð;×BÑBÈÐBÓQÐSV×WÐWàÐûðXús   „7= ½	A7Á&A2Á2A7c                 ó&  — d}	 t         j                  | «      }|sJ ‚| j                  d«      }t        j                  |«      }|j                  d«      }|S # t        $ r1}t        j                  dj                  | ¬«      |«       Y d}~|S d}~ww xY w)zQ
    Convert a string from base64, via UTF-8. Returns None on invalid input.
    Nr÷  z#Unable to decode {b64} from base64:)Úb64)
ÚBASE64_ALPHABETÚmatchr0   rù  Ú	b64decoderP   rþ   rû  rü  rj   )rþ  Úutf8_stringÚonly_valid_charsr   rÿ  r  s         r2   Úfrom_base64r
  J  sž   € ð
 €Kð

Ü*×0Ñ0°Ó?ÐÙÐÐà$×+Ñ+¨GÓ4ˆÜ×%Ñ% lÓ3ˆ
Ø ×'Ñ'¨Ó0ˆð Ðøô ò 
Ü�‰Ø1×8Ñ8¸]Ð8ÓKÈS÷	
ð 	
ð Ðûð
ús   „AA Á	BÁ&BÂBÚ
Components)r£   r·   rI   ÚqueryÚfragmentc           	      óê  — t        | «      }t        |j                  d¬«      }|rL|j                  j	                  d«      }t        |«      dkD  rt        ›dt        ›d|d   ›�}n|j                  }n|j                  }|r(t        t        |D �ci c]	  }|t        “Œ c}«      «      }	n|j                  }	t        |j                  ||	|j                  |j                  ¬«      }
|r|
S t        |
«      S c c}w )zL
    Removes the authority and query parameter values from a given URL.
    T)Úkeep_blank_valuesr¾   r'   r*   r5  ©r£   r·   r  rI   r  )r
   r   r  r·   r9  r  rè   r   r	   r  r£   rI   r  r   )ÚurlÚremove_authorityÚremove_query_valuesr9  Ú
parsed_urlÚquery_paramsÚnetloc_partsr·   rÒ   Úquery_stringÚ
componentss              r2   Úsanitize_urlr  c  sî   € ô
 ˜#“€JÜ˜J×,Ñ,ÀÔE€Lñ Ø!×(Ñ(×.Ñ.¨sÓ3ˆÜˆ|Ó˜qÒ æ)Þ)Ø˜RÒ ð‰Fð  ×&Ñ&‰Fà×"Ñ"ˆñ ÜÜÀÖN¸#�sÔ5Ñ5ÒNÓOó
‰ð "×'Ñ'ˆäØ× Ñ ØØØ�_‰_Ø×$Ñ$ô€Jñ ØÐä˜*Ó%Ð%ùò! Os   ÂC0Ú	ParsedUrl©r  r  r  c           	      óÒ   — t        | d|d¬«      }t        t        |j                  |j                  d|j
                  d¬«      «      }t        ||j                  |j                  ¬«      S )zí
    Splits a URL into a url (including path), query and fragment. If sanitize is True, the query
    parameters will be sanitized to remove sensitive data. The autority (username and password)
    in the URL will always be removed.
    T)r  r  r9  rŸ   r  r  )	r  r   r  r£   r·   rI   r  r  r  )r  Úsanitizer  Úbase_urls       r2   Ú	parse_urlr  ’  sn   € ô Ø˜d¸Èô€Jô ÜØ×$Ñ$Ø×$Ñ$ØØ—‘Øô	
ó€Hô ØØ×ÑØ×$Ñ$ôð r4   c           	      ó4  — t        | t        t        f«      rt        j                  | «      r1t
        j                  dj                  || t        | «      ¬«      «       yt        | «      } | dk  s| dkD  r't
        j                  dj                  || ¬«      «       yy)	z†
    Checks the given sample rate to make sure it is valid type and value (a
    boolean or a number between 0 and 1, inclusive).
    z|{source} Given sample rate is invalid. Sample rate must be a boolean or a number between 0 and 1. Got {rate} of type {type}.)r  ÚraterÆ   Fr   r'   zW{source} Given sample rate is invalid. Sample rate must be between 0 and 1. Got {rate}.)r  r!  T)
r    r   r   ÚmathÚisnanrû  rü  rj   rÆ   Úfloat)r!  r  s     r2   Úis_valid_sample_rater%  ®  s›   € ô �dœT¤7˜OÔ,´·
±
¸4Ô0@Ü�‰ð K÷  Rñ  RØ D¬t°D«zð Ró ô	
ð
 ô �‹;€DØˆa‚x�4˜!’8Ü�‰Øe×lÑlØ Dð mó ô	
ð
 àr4   c                 ój   — |€y|D ]+  }|s|d   dk7  r|dz  }t        j                  || «      }|sŒ+ y y)NFr5  ú$Tr°  )r®  Ú
regex_listÚsubstring_matchingÚitem_matcherÚmatcheds        r2   Úmatch_regex_listr,  Í  sN   € àÐØà"ò ˆÙ! l°2Ñ&6¸#Ò&=Ø˜CÑˆLä—)‘)˜L¨$Ó/ˆÚÙðð r4   c                 óö   — | j                   duxrj | j                   j                  duxrP | j                   j                  j                  duxr, | j                   j                  j                  j                  |v S )zB
    Determines whether the given URL matches the Sentry DSN.
    N)r¹   Ú	transportÚ
parsed_dsnr·   )r…   r  s     r2   Úis_sentry_urlr0  Ý  sn   € ð 	�
‰
˜$Ðò 	:Ø�J‰J× Ñ ¨Ð,ò	:à�J‰J× Ñ ×+Ñ+°4Ð7ò	:ð �J‰J× Ñ ×+Ñ+×2Ñ2°cÐ9ð	r4   c                 óP  — d}t        j                  d|z   dz   t         j                  t         j                  z  «      }	 |j	                  | «      j                  «       d   }t        t        t        |j                  d«      dd «      «      }|S # t        t        t        f$ r Y yw xY w)zÌ
    Parses a version string into a tuple of integers.
    This uses the parsing loging from PEP 440:
    https://peps.python.org/pep-0440/#appendix-b-parsing-version-strings-with-regular-expressions
    a    # noqa: N806
        v?
        (?:
            (?:(?P<epoch>[0-9]+)!)?                           # epoch
            (?P<release>[0-9]+(?:\.[0-9]+)*)                  # release segment
            (?P<pre>                                          # pre-release
                [-_\.]?
                (?P<pre_l>(a|b|c|rc|alpha|beta|pre|preview))
                [-_\.]?
                (?P<pre_n>[0-9]+)?
            )?
            (?P<post>                                         # post release
                (?:-(?P<post_n1>[0-9]+))
                |
                (?:
                    [-_\.]?
                    (?P<post_l>post|rev|r)
                    [-_\.]?
                    (?P<post_n2>[0-9]+)?
                )
            )?
            (?P<dev>                                          # dev release
                [-_\.]?
                (?P<dev_l>dev)
                [-_\.]?
                (?P<dev_n>[0-9]+)?
            )?
        )
        (?:\+(?P<local>[a-z0-9]+(?:[-_\.][a-z0-9]+)*))?       # local version
    z^\s*z\s*$rS   r6  Nr¢  )r±  ÚcompileÚVERBOSEÚ
IGNORECASEr  Ú	groupdictr£  Úmapr¬   r9  r°   r¯   rû   )rÃ   ÚVERSION_PATTERNÚpatternrS   Úrelease_tuples        r2   Úparse_versionr:  ê  s›   € ð€Oô> �j‰jØ�/Ñ! GÑ+Ü
�
‰
”R—]‘]Ñ"ó€Gð
Ø—-‘- Ó(×2Ñ2Ó4°YÑ?ˆÜœc¤# w§}¡}°SÓ'9¸"¸1Ð'=Ó>Ó?ˆð Ðøô ”z¤>Ð2ò Ùðús   ¿AB ÂB%Â$B%c                  ó*   — t        j                  «       S r6   )ÚtimeÚperf_counter_nsr7   r4   r2   Únanosecond_timer>     s   € ä×#Ñ#Ó%Ð%r4   c                  óB   — t        t        j                  «       dz  «      S ©Ng    eÍÍA)r¬   r<  Úperf_counterr7   r4   r2   r>  r>  &  s   € ä”4×$Ñ$Ó&¨Ñ,Ó-Ð-r4   c                  óB   — t        t        j                  «       dz  «      S r@  )r¬   r<  r7   r4   r2   r>  r>  ,  s   € ä”4—9‘9“; Ñ$Ó%Ð%r4   c                  ó*   — t        j                   «       S r6   )r<  r7   r4   r2   ÚnowrD  3  s   € ä�y‰y‹{Ðr4   c                  ó*   — t        j                  «       S r6   )r<  rA  r7   r4   r2   rD  rD  9  s   € ä× Ñ Ó"Ð"r4   r6   )NNN)NTTN)TTN)NNNNN)NNr   r   N)NN)TTF)T)NF)�rù  r.   r  Úloggingr"  rE   r±  rK   r�   r¹  r<  Úcollectionsr   r   Údecimalr   Únumbersr   Úurllib.parser   r   r	   r
   r   r  ÚcgiÚurllibr   rò   r   r   Ú	functoolsr   r   rÜ  Ú
sentry_sdkÚsentry_sdk._compatr   r   r   r   r   Úsentry_sdk._typesr   Úsentry_sdk.constsr   Útypesr   r   Útypingr   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r‡   Ú	getLoggerrû  r2  r  rè   r3   r8   rV   rn   rÓ  rp   r€   r�   rv   rŠ   r�   r’   r¯   r”   r˜   rº   rØ   rë   rì   Ú	Annotatedrð   rõ   r  r  r"  r*  r-  r,  rA  rJ  rQ  rV  rZ  rk  r  rþ   ÚHAS_CHAINED_EXCEPTIONSrw  r{  rˆ  r‹  r’  r”  rš  r™  r�   r©  r�  rž  rŸ  r  rÈ  rÔ  r×  ÚHAS_REAL_CONTEXTVARSr¿  ÚCONTEXTVARS_ERROR_MESSAGErá  rã  rä  ræ  rê  rè  r  r
  r  r  r  r  r%  r,  r0  r:  r>  rD  r7   r4   r2   ú<module>rY     s´  ðÛ Û Û Û Û Û 	Û 	Û Û 
Û Û Ý "Ý Ý Ý ð$å%Ý$Ý&Ý%Ý'ðå+õ
 Ý ð%Ý'à#Ðó ß S× SÝ +Ý 6áß.÷÷ ÷ ñ ÷ 8ñ 	��q˜!Ó€ð 
ˆ×	Ñ	Ð.Ó	/€ð �"—*‘*Ð1Ó2€à(Ð òTò	ò$òNôD˜vô ñ 7Ó8Ð ò'ò
2ò+ò
3ó
	"ô"ˆZô "ð ôF
ˆ&ó F
ó ðF
ôR6Rˆ6ô 6Rôr=
�Vô =
ñ@ Ýá�‹€AØ�n aÐ'Ñ(€IòPò
òò&ð ØØó+ðb óò4 ñ ó#ò6#òð4 Ø ØØó'ðV !ØØóò6-ò
ð ØØØØóNñb ! Ð,BÓCÐ áó7ò@ð ØØØØó]&ðD Øó"òJ!ò.òó
ó$òN#ð0 Øóò*òò	óò*(òVò*#7ñL $4Ó#5Ñ  Ð �jðÐ ò'òT(ñ
 #Ð#:Ó;Ð ô	˜yô 	ô#
�I×$Ò$ô #
òLò"ñ, ˜Ò&WÓX€
ó)&ñX �{Ò$@ÓA€	óò8ó>ò 
ò1ñh ó&ñ 
ó.ò&ñ
 óó#øðA1 ò $åÝÝ Ý!ß#Ð#ð$ûð ò àÓðûð ò %Ø$Óð%ús6   ÁJ Á%J7 Á8K Ê#J4Ê3J4Ê7KËKËKËK