Ë )ŒWõ€ü”¯ãó—ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl m Z ddl mZmZddlmZmZm Z mZmZddlmZmZmZe j2rddlmZmZmZmZeeeeef«sJ‚Gd„d ej@«Z!Gd „d ej@«Z"d „Z#d „Z$d„Z%d„Z&d„Z'd!d„Z(d!d„Z)d„Z*d„Z+d"d„Z,d„Z-d„Z.d„Z/d#d„Z0d!d„Z1d#d„Z2d#d„Z3d#d„Z4ejjjlZ7d„Z8d„Z9d „Z:y)$éNé)Ú_)ÚgetattrÚopen)ÚencodingÚerrorÚpycompatÚsslutilÚutil)ÚprocutilÚ stringutilÚurlutil)ÚAnyÚListÚTupleÚUnioncó —eZdZdZdd„Zdd„Zy)ÚSTARTTLSzŒDerived class to verify the peer certificate for STARTTLS. This class allows to pass any keyword arguments to SSL socket creation. Nc ó`—tjj|fi|¤Ž||_||_y©N)ÚsmtplibÚSMTPÚ__init__Ú_uiÚ_host)ÚselfÚuiÚhostÚkwargss ú2usr/lib/python3.12/site-packages/mercurial/mail.pyrzSTARTTLS.__init__4s'€Ü� ‰ ×јdÑ- fÒ-؈ŒØˆ� ócó~—|jd«sd}tj|«‚|jd«\}}|dk(ryt j |j |||j|j¬«|_|j jd«|_ d|_ d|_ i|_ d|_||fS)NÚstarttlsz*STARTTLS extension not supported by serverréÜ©rÚserverhostnameÚrbr)Úhas_extnrÚ SMTPExceptionÚdocmdr Ú wrapsocketÚsockrrÚmakefileÚfileÚ helo_respÚ ehlo_respÚesmtp_featuresÚ does_esmtp)rÚkeyfileÚcertfileÚcontextÚmsgÚrespÚreplys r r#zSTARTTLS.starttls9s©€Ø�}‰}˜ZÔ(Ø>ˆCÜ×'Ñ'¨Ó,Ð ,ØŸ ™  :Ó.‰ ˆˆuØ �3Š;Ü×*Ñ*Ø— ‘ ØØØ—8‘8Ø#Ÿz™zô ˆDŒI🠙 ×*Ñ*¨4Ó0ˆDŒIØ!ˆDŒNØ!ˆDŒNØ"$ˆDÔ ØˆDŒOØ�eˆ}Ðr!r©NNN)Ú__name__Ú __module__Ú __qualname__Ú__doc__rr#©r!r rr.s„ñó ô r!rcó—eZdZdZdd„Zd„Zy)ÚSMTPSz‰Derived class to verify the peer certificate for SMTPS. This class allows to pass any keyword arguments to SSL socket creation. Nc ó¦—||_||_tjj|fi|¤Ž||_tj |_||_yr) r3r4rrrrÚ SMTP_SSL_PORTÚ default_portr)rrr3r4rrs r rzSMTPS.__init__TsC€ØˆŒ Ø ˆŒ Ü� ‰ ×јdÑ- fÒ-؈Œ Ü#×1Ñ1ˆÔ؈�r!cóF—|jdkDr!|jjd||ffz«tj||f|«}t j ||j|j|j|j¬«}|jd«|_ |S)Nrs connect: %r r%r') Ú debuglevelrÚdebugÚsocketÚcreate_connectionr r+r3r4rr-r.)rrÚportÚtimeoutÚ new_sockets r Ú _get_socketzSMTPS._get_socket\s‰€Ø �?‰?˜QÒ Ø �H‰H�N‰NÐ+°°d¨|¨oÑ=Ô >Ü×-Ñ-¨t°T¨l¸GÓDˆ Ü×'Ñ'Ø Ø �L‰LØ �M‰MØ�x‰xØŸ:™:ô  ˆ ð×'Ñ'¨Ó-ˆŒ ØÐr!r9)r:r;r<r=rrLr>r!r r@r@Ns„ñó ó r!r@cóF— ddl}t|dd«y#t$rYywxYw)z9Returns true iff Python has TLS support, false otherwise.rNÚHAS_TLSFT)ÚsslrÚ ImportError)rOs r Ú _pyhastlsrQks+€ðÛä��Y Ô&ØøÜ òÙðús ‚” Ÿ cóp‡ —|jdd«}|jdd«}|dk(xstj|«}|dk(}|s|r(t«st j t d««‚|jdd«}|st j t d««‚|r)|jt d ««t|||¬ «Š n'|rt|||¬ «Š ntj|¬ «Š |rd }nd }tj|jdd|««}|jt d«||fz«‰ j||¬«|rJ|jt d««‰ j«‰ j!«‰ j«|s|r9|jt d««t#j$‰ j&« t)|‰ ||«ˆ fd„} | S#tj*$r-}t j tj,|««‚d}~wwxYw)z;build an smtp connection and return a function to send mailósmtpslocal_hostnamestlssstarttlsssmtpss/can't use TLS: Python SSL support not installedóhosts+smtp.host not configured - cannot send mails(using smtps) )Úlocal_hostnamer)rUiÑésports$sending mail: smtp host %s, port %d )rrIs(using starttls) s(verifying remote certificate) Nc󌕗 ‰j|||«S#tj$r\}|jj «D�cgc]}|d‘Œ ncc}w}}t j ddj|«z«‚d}~wtj$r-}t j tj|««‚d}~wwxYw)Nró ) ÚsendmailrÚSMTPRecipientsRefusedÚ recipientsÚvaluesrÚAbortÚjoinr)r Ú forcebytestr)Úsenderr[r6ÚinstÚrÚss €r Úsendz_smtp..sendŸs¡ø€ð =Ø—:‘:˜f j°#Ó6Ð 6øÜ×,Ñ,ò >Ø(,¯©×(>Ñ(>Ô(@ÓAÑ(@ 1˜!˜A›$Ñ(@ùÒAˆJÐAÜ—+‘+˜e e§j¡j°Ó&<Ñ<Ó=Ð =ûÜ×$Ñ$ò =Ü—+‘+œj×5Ñ5°dÓ;Ó<Ð <ûð =ús,ƒ–C©BÁ AÁ/BÂCÂ(B>Â>C)Úconfigr Ú parseboolrQrr]rÚnoter@rrrrÚgetportÚconnectÚehlor#r Úvalidatesocketr,Ú _smtp_loginr)r_) rrUÚtlsr#ÚsmtpsÚmailhostÚ defaultportÚmailportrardrcs @r Ú_smtprrwsÍø€à—Y‘Y˜wÐ(9Ó:€NØ �)‰)�G˜VÓ $€Cà�kÑ!Ò>¤Z×%9Ñ%9¸#Ó%>€HØ �8‰O€EÙ‘E¤9¤;Ü�k‰kœ!ÐNÓOÓPÐPØ�y‰y˜ 'Ó*€HÙ Ü�k‰kœ!ÐJÓKÓLÐLÙ Ø �‰”Ð$Ó%Ô&Ü �" ^¸(Ô C‰Ù Ü �R¨¸XÔ F‰ä �L‰L¨Ô 7ˆÙ ؉ àˆ Ü�‰˜rŸy™y¨°'¸;ÓGÓH€H؇G�GŒAÐ6Ó 7¸8ÀXÐ:NÑ NÔO؇I�I�8 (€IÔ+ÙØ �‰”Ð'Ó(Ô)Ø �‰ŒØ � ‰ Œ Ø �‰ŒÙ‘5Ø �‰”Ð5Ó6Ô7Ü×јqŸv™vÔ&ð9Ü�B˜˜8 XÔ.ô=ð €Køô × Ñ ò9Ü�k‰kœ*×1Ñ1°$Ó7Ó8Ð8ûð9úsÇ G5Ç5H5È(H0È0H5cób—|jdd«}|jdd«}|r?|rtj|«}n'|j«}|�tj|«}|rH|rE|j t d«|z«tj|«}|j ||«yyy)azA hook for the keyring extension to perform the actual SMTP login. An already connected SMTP object of the proper type is provided, based on the current configuration. The host and port to which the connection was established are provided for accessibility, since the SMTP object doesn't provide an accessor. ``smtplib.SMTPException`` is raised on error. rSsusernamespasswordNs&(authenticating to mail server as %s) )rerÚ strfromlocalÚgetpassrgrÚlogin)rÚsmtprorqÚusernameÚpasswords r rlrl«sœ€ð�y‰y˜ +Ó.€HØ�y‰y˜ +Ó.€HÙÙ Ü×,Ñ,¨XÓ6‰Hà—z‘z“|ˆHØÐ#Ü#×0Ñ0°Ó:�Ù‘HØ �‰”Ð<Ó=ÀÑHÔIÜ×(Ñ(¨Ó2ˆØ � ‰ �8˜XÕ&ð€xr!c ó—|jdd«}d„}d|||«djt||««fz}|jt d«|z«t j |d«}|jtj|««|j«}|r`tjdtjjt j |«d «t j"|«fz«‚y ) zsend mail using sendmail.óemailómethodcóx—tjtjt j |«««Sr)r Ú shellquoter ÚemailrÚ strtolocal)Úxs r Ústremailz_sendmail..stremailÆs)€Ü×"Ñ"¤:×#3Ñ#3´H×4GÑ4GÈÓ4JÓ#KÓLÐLr!s %s -f %s %só ssending mail: %s ówbs%s %srN)rer^Úmaprgrr ÚpopenÚwriter Ú tonativeeolÚcloserr]ÚosÚpathÚbasenameÚ shellsplitÚ explainexit) rr`r[r6Úprogramr‚ÚcmdlineÚfpÚrets r Ú _sendmailr“Âsè€à�i‰i˜ )Ó,€GòMðØÙ�ÓØ � ‰ ”#�h  Ó+Ó,ð ñ€Gð ‡G�GŒAÐ#Ó $ wÑ .Ô/Ü �‰˜ Ó '€B؇H�HŒT× Ñ ˜cÓ "Ô#Ø �(‰(‹*€CÙ Ü�k‰kØ ä—‘× Ñ ¤×!4Ñ!4°WÓ!=¸aÑ!@ÓAÜ×$Ñ$ SÓ)ðñ ó ð ð r!cóR—t|d«5}tjdtj««}|j dt j |«t j |«fz«|j |«|j d«ddd«y#1swYyxYw)zwrite mails to mboxsab+z%a %b %d %H:%M:%S %Ys From %s %s s N)rÚtimeÚstrftimeÚ localtimer‡rr€)Úmboxr`r[r6r‘Údates r Ú_mboxršÜs‚€ô ˆd�FÔ ˜rô�}‰}Ð3´T·^±^Ó5EÓFˆØ �‰Ø Ü×"Ñ" 6Ó*¬H×,?Ñ,?ÀÓ,EÐFñ Gô ð �‰�Œ Ø �‰�Ô÷ × Ñ ús �BBÂB&c󒇇—‰rt‰d«j«ˆfd„S‰jdd«dk(r t‰«Sˆfd„S)znmake a mail connection. return a function to send mail. call as sendmail(sender, list-of-recipients, msg).r„có •—t‰|||«Sr)rš)rcrbÚmr˜s €r Úzconnect..ðsø€œu T¨1¨a°Ô3r!r{r|rScó •—t‰|||«Sr)r“)rcrbr�rs €r ržzconnect..ósø€œ9 R¨¨A¨qÔ1r!)rr‰rerr)rr˜s``r ririësDù€ñ Ü ˆT�5Ó×ÑÔ!Û3Ð3Ø ‡y�y�˜9Ó%¨Ò0Ü�R‹yÐÛ 1Ð1r!có0—t||¬«}||||«S)N)r˜)ri)rr`r[r6r˜rds r rYrYös€Ü �2˜DÔ !€DÙ �˜  CÓ (Ð(r!có@—|jdd«}|dk(r1|jdd«stjtd««‚y t j |«}|r|dnd}|rt j |«s!tjtd«|z«‚y ) z=determine if we have enough config data to try sending email.r{r|rSrTs>smtp specified as email transport, but no smtp host configuredrr!s0%r specified as email transport, but not in PATHN)rerr]rr r�Úfindexe)rÚmethodÚcommands r Úvalidateconfigr¥ûsž€à �Y‰Y�x Ó +€FØ �ÒØ�y‰y˜ 'Ô*Ü—+‘+Üð3óóð ð+ô×%Ñ% fÓ-ˆÙ '�'˜!’*¨SˆÙœH×,Ñ,¨WÔ5Ü—+‘+ÜÐEÓFÈÑPóð ð6r!cóÈ—tjj|«jj «}|j d«r|j d«sd|ddzS|S)Ú Úisoziso-éN)rÚcharsetÚCharsetÚ input_charsetÚlowerÚ startswith)Úcss r Ú codec2ianar°sU€ô �‰× Ñ ˜rÓ "× 0Ñ 0× 6Ñ 6Ó 8€Bð ‡}�}�UÔ B§M¡M°&Ô$9ؘ˜1˜2˜‰ÐØ €Ir!có4—ddtjtj«tjtj«g}|rdg}|D]+} |j |«t ||t |««cSt ||d«S#t$rYŒFwxYw)a2Return MIME message suitable for a patch. Charset will be detected by first trying to decode as us-ascii, then utf-8, and finally the global encodings. If all those fail, fall back to ISO-8859-1, an encoding with that allows all byte sequences. Transfer encodings will be used if necessary.úus-asciiúutf-8z iso-8859-1)r ÚsysstrrÚfallbackencodingÚdecodeÚ mimetextqpr°ÚUnicodeDecodeError)rcÚsubtypeÚdisplayr¯rªs r Ú mimetextpatchr»s•€ð ØÜ�‰œ×)Ñ)Ó*Ü�‰œ×1Ñ1Ó2ð  €Bñ ؈\ˆÛˆð Ø �H‰H�WÔ Ü˜a ¬*°WÓ*=Ó>Ò >ðô �a˜ ,Ó /Ð/øô"ò Ù ð úsÁ&B  BÂBcóT—tjj|«}tjj «}|j d|z«|j «D]1}t|«dkDsŒtjj|_ n|j||«|S)z[Return MIME message. Quoted-printable transfer encoding will be used if necessary. ztext/i¶) rrªr«ÚmessageÚMessageÚset_typeÚ splitlinesÚlenÚQPÚ body_encodingÚ set_payload)Úbodyr¹rªr¯r6Úlines r r·r·4s�€ô �‰× Ñ ˜wÓ '€BÜ �-‰-× Ñ Ó !€C؇L�L�˜7Ñ"Ô#à—‘Ö!ˆÜ ˆt‹9�s‹?Ü$Ÿ}™}×/Ñ/ˆBÔ Ù ð"ð‡O�O�D˜"Ôà €Jr!cóÚ—|jdd«D�cgc]%}tj|j««‘Œ'}}tjtj j««tjtjj««dg}|D]}||vsŒ|j |«Œ|D�cgc]}|jd«rŒ|‘Œc}Scc}wcc}w)z;Obtains charsets to send mail parts not containing patches.r{scharsetsr³Úascii)Ú configlistr r´r­rrµÚappendÚendswith)rr¯ÚcharsetsÚ fallbackss r Ú _charsetsrÎNsÌ€ð —-‘- ¨+Ô6óá6ˆBô �‰˜Ÿ™› Õ#Ø6ð ðô �‰œ×1Ñ1×7Ñ7Ó9Ó:Ü�‰œ×)Ñ)×/Ñ/Ó1Ó2Øð€Ió ˆØ �XÒ Ø �O‰O˜BÕ ðñ"Ó >™�2¨¯©°WÕ)=ŠB˜Ñ >Ð>ùòùò ?s•*C#ÃC(ÃC(c ó —|xs t|«}t|t«s0|D]} |j|«|fcS|jdd«dfS |jd«|dfS#t$rYŒOt $r3|j td«tj|«z«YŒ‰wxYw#t$rËtjtjfD]¢}tj|«} |j|«}n#t$rYŒ6wxYw|D]d} |j|«|fcccYS#t$rYŒ(t $r3|j td«tj|«z«YŒbwxYwŒ¤Y|dfSwxYw)aReturns (converted) string, charset tuple. Finds out best charset by cycling through sendcharsets in descending order. Tries both encoding and fallbackencoding for input. Only as last resort send as is in fake ascii. Caveat: Do not use for mail parts containing patches!s!ignoring invalid sendcharset: %s rÈÚbackslashreplacer²)rÎÚ isinstanceÚbytesÚencodeÚUnicodeEncodeErrorÚ LookupErrorÚwarnrr Úsysbytesr¶r¸rrµr´)rrcrÌÚ sendcharsetsÚocsÚicsÚus r Ú_encoderÜ`s‰€ðÒ,œy¨›}€LÜ �aœÔ ó ˆCð Ø—x‘x “} cÐ)Ò)ð ð—8‘8˜GÐ%7Ó8¸*ÐDÐ DðØ �‰�Ôð& ˆjˆ=ÐøôC&ò ÙÜò Ø—‘ÜÐ;Ó<Ü×'Ñ'¨Ó,ñ-öð ûô òÜ×%Ñ%¤x×'@Ñ'@ÓAˆCÜ—/‘/ #Ó&ˆCð Ø—H‘H˜S“M‘øÜ%ò Ùð úã#�ðØŸ8™8 C›=¨#Ð-Ö-øÜ)òÙÜ"òØ—G‘GÜÐ?Ó@Ü"×+Ñ+¨CÓ0ñ1öðúñ $ñ Bð" ˆjˆ=Ðð%ús~¦A&ÁB/Á& B,Á18B,Â+B,Â/AFÃ1DÄFÄ DÄ FÄDÄFÄD1Ä*FÄ1 E7 Ä:FÄ<8E7 Å4FÅ6E7 Å7FÆFcó¬—|s>t|||«\}}tjj||«j «St j |«S)z4Returns RFC-2047 compliant header from given string.)rÜrÚheaderÚHeaderrÓrrt©rrcrÌrºr¯s r Ú headencoderá“sJ€ñ 䘘A˜xÓ(‰ˆˆ2Ü�|‰|×"Ñ" 1 bÓ)×0Ñ0Ó2Ð2Ü × Ñ  Ó #Ð#r!có|—tj|«}t|||«} |jd«\}}|j d«|j t j tj««jd«}d||fz}tjj|tj |«f«S#t$r"tjtd«|z«‚t$rD |j d«n.#t$r"tjtd«|z«‚wxYwYŒ©wxYw)Nó@rÈÚidnas%s@%ssinvalid email address: %ssinvalid local address: %s)rr€ráÚsplitr¶r r´rÓr¸rr]rÚ ValueErrorrÚutilsÚ formataddrrt)rÚnameÚaddrrÌÚaccÚdoms r Ú_addressencoderí�s€ä × Ñ ˜tÓ $€DÜ �b˜$ Ó )€Dð FØ—:‘:˜dÓ#‰ˆˆSØ � ‰ �7ÔØ�j‰jœŸ™¬×):Ñ):Ó;Ó<×CÑCÀFÓKˆØ˜3 ˜*Ñ$ˆô �;‰;× !Ñ ! 4¬×)>Ñ)>¸tÓ)DÐ"EÓ FÐFøô òBÜ�k‰kœ!Ð8Ó9¸DÑ@ÓAÐAÜ òFð Fà �K‰K˜Õ øÜ!ò FÜ—+‘+œaÐ <Ó=ÀÑDÓEÐ Eð Fúñ !ðFús*¤A-CÃ2D;Ã8D Ä D;Ä +D5Ä5D;Ä:D;có—|s|stj|xsd«Stjj tj|««\}}t ||||«S)z-Turns address into RFC-2047 compliant header.r!)rrtrrçÚ parseaddrrí)rÚaddressrÌrºrérês r Ú addressencoderñ±sR€ñ‘gÜ×$Ñ$ W¢^°Ó4Ð4Ü—‘×&Ñ&¤x×'<Ñ'<¸WÓ'EÓF�J€Dˆ$Ü ˜"˜d D¨(Ó 3Ð3r!cóš—g}|D]@}t|t«s Jd|z«‚|jtj|««ŒB|r/|D�cgc]#}|j «sŒ|j «‘Œ%c}Sg}t jj|«D])\}}|s|sŒ t||||«} |j| «Œ+|Scc}w)z¶Turns a list of addresses into a list of RFC-2047 compliant headers. A single element of input list may contain multiple addresses, but output always has one address per itemz%r unexpectedly not a bytestr) rÑrÒrÊrrtÚstriprrçÚ getaddressesrí) rÚaddrsrÌrºÚstraddrsÚaÚresultrérêrbs r Úaddrlistencoderùºs¼€ð €HÛ ˆÜ˜!œUÔ#ÐHÐ%DÀqÑ%HÓHÐ#Ø�‰œ×-Ñ-¨aÓ0Õ1ðñÙ#+Ó9¡8˜a¨q¯w©w­y�—‘•  8Ñ9Ð9à €FÜ—k‘k×.Ñ.¨xÖ8‰ ˆˆdÙ ’4ܘr 4¨¨xÓ8ˆAØ �M‰M˜!Õ ð9ð €Mùò:s ÁCÁ$CcóD—d}|st|||«\}}t|d|«S)zgcreates mime text object, encodes it if needed, and sets charset and transfer-encoding accordingly.r²Úplain)rÜr·ràs r Ú mimeencoderüÎs-€ð €B٠ܘ˜A˜xÓ(‰ˆˆ2Ü �a˜ "Ó %Ð%r!cóð—tjj«}tj|ddt d«¬«} |j |«|j«S#|j«wxYw)NrÈÚsurrogateescapeé )rÚerrorsÚnewline)rÚparserÚParserÚioÚ TextIOWrapperÚchrÚparseÚdetach)r‘Úeps r rrÛsW€ä �‰× Ñ Ó €Bô × Ñ Ø �WÐ%6ÄÀBÃô €BðØ�x‰x˜‹|à � ‰ � øˆ� ‰ � ús ÁA#Á#A5có`—tjj«}|j|«Sr)rrÚ BytesParserÚ parsebytes)Údatar s r r r ês#€ä �‰× !Ñ !Ó #€BØ �=‰=˜Ó Ðr!cóþ—g}tjj|«D]q\}}|�" |j|j |««Œ*t|td««r|j|«ŒQ |j|j d««Œstjdj|««S#t t f$rYŒwxYw#t $rYnwxYw|j|j d««ŒÝ)zDecodes RFC-2047 headerÚzUTF-8z ISO-8859-1r§) rrÞÚ decode_headerrÊr¶r¸rÕrÑÚtyperÚ unitolocalr^)rcÚupartsÚpartrªs r Ú headdecoderðsâ€ð€FÜŸ™×3Ñ3°AÖ6‰ ˆˆgØ Ð ð Ø— ‘ ˜dŸk™k¨'Ó2Ô3Øô �dœD ›IÔ &Ø �M‰M˜$Ô Ø ð Ø �M‰M˜$Ÿ+™+ gÓ.Ô /Ø ð7ô$ × Ñ ˜tŸy™y¨Ó0Ó 1Ð1øô'¬ Ð4ò Ùð ûô"ò Ù ð úà� ‰ �d—k‘k ,Ó/Õ0s#« B:Á4 CÂ:C à C à CÃCr)rûF)NF);rÚ email.charsetÚemail.generatorÚ email.headerÚ email.messageÚ email.parserrrŠrrGr•Úi18nrr rrrrrr r rçr r rÚ TYPE_CHECKINGÚtypingrrrrÚallrrr@rQrrrlr“ršrirYr¥r°r»r·rÎrÜrárírñrùrüÚ generatorÚBytesGeneratorÚ Generatorrr rr>r!r Úr"s ðó ÛÛÛÛÛÛ Û ÛÛ Û å÷÷õ÷ñð  ×Òß.Ó.ñ ��T˜5 %Ð(Ô )Ð)Ð )ôˆw�|‰|ôô@ˆG�L‰Lôò: ò1òh'ò. ò4 ó2ó)ò ò(ó0ò4ò4?ò$0óf$óGó(4óó(&ð �O‰O× *Ñ *€ ò òó 2r!