U ��.e$+�@s�ddlmZmZmZddlmZddlmZddl m Z ddl m Z ddl m Z m Z ddl mZmZmZdd l mZmZdd l mZdd lmZdd lmZee �ZGd d�de�ZdS)�)�absolute_import�division�unicode_literals)�unichr)�deque�)�spaceCharacters)�entities)� asciiLetters�asciiUpper2Lower)�digits� hexDigits�EOF)� tokenTypes� tagTokenTypes)�replacementCharacters)�HTMLInputStream)�TriecsdeZdZdZd��fdd� Zdd�Zdd�Zd�d d �Zd d �Zdd�Z dd�Z dd�Z dd�Z dd�Z dd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Zd8d9�Zd:d;�Zdd?�Z!d@dA�Z"dBdC�Z#dDdE�Z$dFdG�Z%dHdI�Z&dJdK�Z'dLdM�Z(dNdO�Z)dPdQ�Z*dRdS�Z+dTdU�Z,dVdW�Z-dXdY�Z.dZd[�Z/d\d]�Z0d^d_�Z1d`da�Z2dbdc�Z3ddde�Z4dfdg�Z5dhdi�Z6djdk�Z7dldm�Z8dndo�Z9dpdq�Z:drds�Z;dtdu�Zdzd{�Z?d|d}�Z@d~d�ZAd�d��ZBd�d��ZCd�d��ZDd�d��ZEd�d��ZFd�d��ZGd�d��ZHd�d��ZId�d��ZJd�d��ZKd�d��ZL�ZMS)�� HTMLTokenizera  This class takes care of tokenizing HTML. * self.currentToken Holds the token that is currently being processed. * self.state Holds a reference to the method to be invoked... XXX * self.stream Points to HTMLInputStream object. Nc sFt|f|�|_||_d|_g|_|j|_d|_d|_t t |�� �dS)NF) r�stream�parserZ escapeFlagZ lastFourChars� dataState�state�escape� currentToken�superr�__init__)�selfrr�kwargs�� __class__��C/usr/lib/python3.8/site-packages/pip/_vendor/html5lib/_tokenizer.pyr"szHTMLTokenizer.__init__ccsPtg�|_|��rL|jjr6td|jj�d�d�Vq|jr |j��Vq6q dS)z� This is where the magic happens. We do our usually processing through the states and when we have a token to return we yield the token which pauses processing until the next token is requested. � ParseErrorr��type�dataN)r� tokenQueuerr�errorsr�pop�popleft�rr!r!r"�__iter__1s  zHTMLTokenizer.__iter__c %Cst}d}|rt}d}g}|j��}||krH|tk rH|�|�|j��}q"td�|�|�}|tkr�t|}|j �t ddd|id���nbd|kr�d ks�n|d kr�d }|j �t ddd|id���n d |kr�d k�s�nd|kr�dk�s�nd|k�rdk�s�nd|k�r,dk�s�n|t ddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d g#�k�r�|j �t ddd|id��z t |�}Wn>t k �r�|d6}t d|d?B�t d7|d8@B�}YnX|d9k�r|j �t dd:d;��|j�|�|S)r#z'expected-tag-name-but-got-right-bracketr$rOz<>�?z'expected-tag-name-but-got-question-markzexpected-tag-namerHT)rr:�markupDeclarationOpenStater�closeTagOpenStater rr� tagNameStater'r;rrA�bogusCommentStaterpr!r!r"rcis@   �  �  �   � zHTMLTokenizer.tagOpenStatecCs�|j��}|tkr0td|gdd�|_|j|_n�|dkrX|j�tddd��|j |_nn|t kr�|j�tddd��|j�td d d��|j |_n0|j�tdd d |id ��|j� |�|j |_dS)NrZF�r%rYr&r[rtr#z*expected-closing-tag-but-got-right-bracketr$z expected-closing-tag-but-got-eofrO�r'r;rrr��scriptDataDoubleEscapedStaterr�r rArpr!r!r"r��s    z.HTMLTokenizer.scriptDataDoubleEscapeStartStatecCs�|j��}|dkr2|j�tddd��|j|_n�|dkrZ|j�tddd��|j|_nt|dkr�|j�tddd��|j�tddd��n>|tkr�|j�tdd d��|j |_n|j�td|d��d S� Nr�rOr$rHr_r#r`r2�eof-in-script-in-scriptT) rr:r'r;r� scriptDataDoubleEscapedDashStater�(scriptDataDoubleEscapedLessThanSignStaterrrpr!r!r"r��s*    � �  � z*HTMLTokenizer.scriptDataDoubleEscapedStatecCs�|j��}|dkr2|j�tddd��|j|_n�|dkrZ|j�tddd��|j|_n�|dkr�|j�tddd��|j�tddd��|j|_nF|t kr�|j�tdd d��|j |_n|j�td|d��|j|_d Sr�) rr:r'r;r�$scriptDataDoubleEscapedDashDashStaterr�r�rrrpr!r!r"r�s.    � �  � z.HTMLTokenizer.scriptDataDoubleEscapedDashStatecCs|j��}|dkr*|j�tddd��n�|dkrR|j�tddd��|j|_n�|dkrz|j�tddd��|j|_n�|dkr�|j�tddd��|j�tdd d��|j|_nF|t kr�|j�tdd d��|j |_n|j�td|d��|j|_d S) Nr�rOr$rHrtr_r#r`r2r�T) rr:r'r;rr�rror�rrrpr!r!r"r�s2    � �  � z2HTMLTokenizer.scriptDataDoubleEscapedDashDashStatecCsP|j��}|dkr8|j�tddd��d|_|j|_n|j�|�|j |_dS)NrsrOr$r/T) rr:r'r;rr�scriptDataDoubleEscapeEndStaterrAr�rpr!r!r"r�0s   z6HTMLTokenizer.scriptDataDoubleEscapedLessThanSignStatecCs�|j��}|ttd�BkrR|j�td|d��|j��dkrH|j |_ q�|j |_ nB|t kr�|j�td|d��|j|7_n|j� |�|j |_ dSr�)rr:rr>r'r;rrr�r�rr�r rArpr!r!r"r�;s    z,HTMLTokenizer.scriptDataDoubleEscapeEndStatecCs0|j��}|tkr$|j�td��n|tkrJ|jd�|dg�|j|_n�|dkr\|� �n�|dkrn|j |_n�|dkr�|j �t ddd ��|jd�|dg�|j|_n�|d kr�|j �t dd d ��|jd�d dg�|j|_nF|t k�r|j �t dd d ��|j|_n|jd�|dg�|j|_dS)NTr&r/rtrs)�'�"rMrHr#�#invalid-character-in-attribute-namer$r_r`r2z#expected-attribute-name-but-got-eof)rr:rrdr rr;�attributeNameStaterr^r}r'rrrrpr!r!r"r|Ks<     �  �   � z&HTMLTokenizer.beforeAttributeNameStatecCs�|j��}d}d}|dkr&|j|_�n.|tkr\|jddd||j�td�7<d}n�|dkrjd}n�|tkr||j|_n�|dkr�|j |_n�|d kr�|j � t d d d ��|jdddd 7<d}n�|dk�r |j � t d dd ��|jddd|7<d}nH|t k�r6|j � t d dd ��|j|_n|jddd|7<d}|�r�|jddd�t�|jddd<|jddd�D]>\}}|jddd|k�r�|j � t d dd ���q�q�|�r�|��dS)NTFrMr&rJrrtrsr_r#r`r$r2�r�r�rHr�zeof-in-attribute-namezduplicate-attribute)rr:�beforeAttributeValueStaterr rrdr�afterAttributeNameStater}r'r;rrrr\r r^)rr&ZleavingThisStateZ emitTokenrY�_r!r!r"r�is^   �   �  �  � � � z HTMLTokenizer.attributeNameStatecCsD|j��}|tkr$|j�td��n|dkr8|j|_�n|dkrJ|��n�|tkrp|jd� |dg�|j |_n�|dkr�|j |_n�|dkr�|j � t dd d ��|jd� d dg�|j |_n�|d kr�|j � t dd d ��|jd� |dg�|j |_nF|tk�r$|j � t ddd ��|j|_n|jd� |dg�|j |_dS)NTrMrtr&r/rsr_r#r`r$r2r�z&invalid-character-after-attribute-namezexpected-end-of-tag-but-got-eof)rr:rrdr�rr^r rr;r�r}r'rrrrpr!r!r"r��s@      �  �   � z%HTMLTokenizer.afterAttributeNameStatecCsh|j��}|tkr$|j�td��n@|dkr8|j|_�n,|dkrX|j|_|j�|��n |dkrj|j|_n�|dkr�|j � t ddd��|� �n�|d kr�|j � t dd d��|j d d d d7<|j|_n�|dk�r|j � t ddd��|j d d d |7<|j|_nL|tk�rB|j � t ddd��|j|_n"|j d d d |7<|j|_dS)NTr�rGr�rtr#z.expected-attribute-value-but-got-right-bracketr$r_r`r&rJrr2)rMrH�`z"equals-in-unquoted-attribute-valuez$expected-attribute-value-but-got-eof)rr:rrd�attributeValueDoubleQuotedStater�attributeValueUnQuotedStaterA�attributeValueSingleQuotedStater'r;rr^rrrrpr!r!r"r��sF    �  �   �   � z'HTMLTokenizer.beforeAttributeValueStatecCs�|j��}|dkr|j|_n�|dkr0|�d�n�|dkrj|j�tddd��|jddd d 7<nN|t kr�|j�tdd d��|j |_n&|jddd ||j� d �7<d S)Nr�rGr_r#r`r$r&rJrr2z#eof-in-attribute-value-double-quote)r�rGr_T� rr:�afterAttributeValueStaterrXr'r;rrrrrdrpr!r!r"r��s&    � �  �z-HTMLTokenizer.attributeValueDoubleQuotedStatecCs�|j��}|dkr|j|_n�|dkr0|�d�n�|dkrj|j�tddd��|jddd d 7<nN|t kr�|j�tdd d��|j |_n&|jddd ||j� d �7<d S)Nr�rGr_r#r`r$r&rJrr2z#eof-in-attribute-value-single-quote)r�rGr_Tr�rpr!r!r"r��s&    � �  �z-HTMLTokenizer.attributeValueSingleQuotedStatecCs|j��}|tkr|j|_n�|dkr0|�d�n�|dkrB|��n�|dkr||j�t ddd��|j ddd |7<n�|d kr�|j�t dd d��|j ddd d 7<nV|t kr�|j�t dd d��|j |_n.|j ddd ||j� td�tB�7<dS)NrGrt)r�r�rMrHr�r#z0unexpected-character-in-unquoted-attribute-valuer$r&rJrr_r`r2z eof-in-attribute-value-no-quotes)rGrtr�r�rMrHr�r_T)rr:rr|rrXr^r'r;rrrrrdr>rpr!r!r"r�s4     � � �  � z)HTMLTokenizer.attributeValueUnQuotedStatecCs�|j��}|tkr|j|_n�|dkr.|��np|dkr@|j|_n^|tkrt|j� t ddd��|j� |�|j |_n*|j� t ddd��|j� |�|j|_dS)Nrtrsr#z$unexpected-EOF-after-attribute-valuer$z*unexpected-character-after-attribute-valueT) rr:rr|rr^r}rr'r;rrArrpr!r!r"r� s&     �   � z&HTMLTokenizer.afterAttributeValueStatecCs�|j��}|dkr&d|jd<|��n^|tkrZ|j�tddd��|j�|�|j |_ n*|j�tddd��|j�|�|j |_ dS)NrtTr[r#z#unexpected-EOF-after-solidus-in-tagr$z)unexpected-character-after-solidus-in-tag) rr:rr^rr'r;rrArrr|rpr!r!r"r}4s     �   � z&HTMLTokenizer.selfClosingStartTagStatecCsD|j�d�}|�dd�}|j�td|d��|j��|j|_dS)Nrtr_r2�Commentr$T) rrd�replacer'r;rr:rrrpr!r!r"ryFs   � zHTMLTokenizer.bogusCommentStatecCs�|j��g}|ddkrR|�|j���|ddkrPtddd�|_|j|_dSn�|ddkr�d}dD](}|�|j���|d|krfd }q�qf|r�td ddddd �|_|j|_dSn�|dd k�rD|jdk �rD|jj j �rD|jj j dj |jj j k�rDd}d D].}|�|j���|d|k�rd }�q2�q|�rD|j |_dS|j�tddd��|�rt|j�|����qZ|j|_dS)NrJr�r�r/r$T)�d�D))�o�O�rD�C��t�T��y�Y��p�P��e�EFZDoctype)r%rY�publicId�systemId�correct�[)r�r��Ar�r�r�r#zexpected-dashes-or-doctype)rr:r;rr�commentStartStater� doctypeStaterZtreeZ openElements� namespaceZdefaultNamespace�cdataSectionStater'rAr)ry)rrC�matched�expectedr!r!r"rvUs\     ����  �z(HTMLTokenizer.markupDeclarationOpenStatecCs�|j��}|dkr|j|_n�|dkrN|j�tddd��|jdd7<n�|dkr�|j�tdd d��|j�|j�|j|_nP|t kr�|j�tdd d��|j�|j�|j|_n|jd|7<|j |_d S) Nr�r_r#r`r$r&r2rt�incorrect-comment�eof-in-commentT) rr:�commentStartDashStaterr'r;rrrr� commentStaterpr!r!r"r��s.   � �  � zHTMLTokenizer.commentStartStatecCs�|j��}|dkr|j|_n�|dkrN|j�tddd��|jdd7<n�|dkr�|j�tdd d��|j�|j�|j|_nT|t kr�|j�tdd d��|j�|j�|j|_n|jdd|7<|j |_d S) Nr�r_r#r`r$r&�-�rtr�r�T) rr:�commentEndStaterr'r;rrrrr�rpr!r!r"r��s.   � �  � z#HTMLTokenizer.commentStartDashStatecCs�|j��}|dkr|j|_n�|dkrN|j�tddd��|jdd7<nT|tkr�|j�tddd��|j�|j�|j |_n|jd||j� d �7<d S) Nr�r_r#r`r$r&r2r�)r�r_T) rr:�commentEndDashStaterr'r;rrrrrdrpr!r!r"r��s$   � �   �zHTMLTokenizer.commentStatecCs�|j��}|dkr|j|_n�|dkrV|j�tddd��|jdd7<|j|_nT|t kr�|j�tddd��|j�|j�|j |_n|jdd|7<|j|_d S) Nr�r_r#r`r$r&r�zeof-in-comment-end-dashT) rr:r�rr'r;rrr�rrrpr!r!r"r��s$   �  � z!HTMLTokenizer.commentEndDashStatecCs,|j��}|dkr*|j�|j�|j|_n�|dkrd|j�tddd��|jdd7<|j|_n�|dkr�|j�tdd d��|j |_n�|d kr�|j�tdd d��|jd|7<nj|t kr�|j�tdd d��|j�|j�|j|_n4|j�tdd d��|jdd|7<|j|_dS)Nrtr_r#r`r$r&u--�rrz,unexpected-bang-after-double-dash-in-commentr�z,unexpected-dash-after-double-dash-in-commentzeof-in-comment-double-dashzunexpected-char-in-commentz--T) rr:r'r;rrrrr��commentEndBangStaterrpr!r!r"r��s@   �  �  � �  �zHTMLTokenizer.commentEndStatecCs�|j��}|dkr*|j�|j�|j|_n�|dkrN|jdd7<|j|_n�|dkr�|j�tddd��|jdd 7<|j |_nT|t kr�|j�tdd d��|j�|j�|j|_n|jdd|7<|j |_d S) Nrtr�r&z--!r_r#r`r$u--!�zeof-in-comment-end-bang-stateT) rr:r'r;rrrr�rr�rrpr!r!r"r��s,    �  � z!HTMLTokenizer.commentEndBangStatecCs�|j��}|tkr|j|_nj|tkr\|j�tddd��d|j d<|j�|j �|j |_n*|j�tddd��|j� |�|j|_dS)Nr#�!expected-doctype-name-but-got-eofr$Fr�zneed-space-after-doctypeT) rr:r�beforeDoctypeNameStaterrr'r;rrrrArpr!r!r"r� s    �   � zHTMLTokenizer.doctypeStatecCs�|j��}|tkrn�|dkrT|j�tddd��d|jd<|j�|j�|j|_n�|dkr�|j�tddd��d |jd <|j |_nR|t kr�|j�tdd d��d|jd<|j�|j�|j|_n||jd <|j |_d S) Nrtr#z+expected-doctype-name-but-got-right-bracketr$Fr�r_r`r2rYr�T) rr:rr'r;rrrr�doctypeNameStaterrpr!r!r"r�s4  �   �   �   z$HTMLTokenizer.beforeDoctypeNameStatecCs|j��}|tkr2|jd�t�|jd<|j|_n�|dkrh|jd�t�|jd<|j� |j�|j |_n�|dkr�|j� t ddd��|jdd7<|j |_nh|t kr�|j� t ddd��d |jd <|jd�t�|jd<|j� |j�|j |_n|jd|7<d S) NrYrtr_r#r`r$r2zeof-in-doctype-nameFr�T)rr:rrr\r �afterDoctypeNameStaterr'r;rrr�rrpr!r!r"r�6s0    �  �  zHTMLTokenizer.doctypeNameStatecCsH|j��}|tkr�n.|dkr8|j�|j�|j|_�n |tkr�d|jd<|j� |�|j�t ddd��|j�|j�|j|_n�|dkr�d}d D]}|j��}||kr�d}q�q�|r�|j |_dSnD|d k�r d}d D]}|j��}||kr�d}q�q�|�r |j |_dS|j� |�|j�t dd d |id��d|jd<|j |_dS)NrtFr�r#�eof-in-doctyper$r�T))�u�U)�b�B)�l�L)�i�Ir���s�S)r�r�r�r�)�m�Mz*expected-space-or-right-bracket-in-doctyper&r1)rr:rr'r;rrrrrAr�afterDoctypePublicKeywordState�afterDoctypeSystemKeywordState�bogusDoctypeState)rr&r�r�r!r!r"r�OsT     �      � z#HTMLTokenizer.afterDoctypeNameStatecCs�|j��}|tkr|j|_n�|dkrP|j�tddd��|j�|�|j|_nT|t kr�|j�tddd��d|j d<|j�|j �|j |_n|j�|�|j|_dS� N)r�r�r#�unexpected-char-in-doctyper$r�Fr�T) rr:r�"beforeDoctypePublicIdentifierStaterr'r;rrArrrrpr!r!r"r��s&   �   �   z,HTMLTokenizer.afterDoctypePublicKeywordStatecCs�|j��}|tkrn�|dkr0d|jd<|j|_n�|dkrLd|jd<|j|_n�|dkr�|j�t ddd��d |jd <|j�|j�|j |_nh|t kr�|j�t dd d��d |jd <|j�|j�|j |_n(|j�t dd d��d |jd <|j |_d S)Nr�r/r�r�rtr#�unexpected-end-of-doctyper$Fr�r�r�T) rr:rr�(doctypePublicIdentifierDoubleQuotedStater�(doctypePublicIdentifierSingleQuotedStater'r;rrrr�rpr!r!r"r��s:      �   �   � z0HTMLTokenizer.beforeDoctypePublicIdentifierStatecCs�|j��}|dkr|j|_n�|dkrN|j�tddd��|jdd7<n�|dkr�|j�tdd d��d |jd <|j�|j�|j|_nR|t kr�|j�tdd d��d |jd <|j�|j�|j|_n|jd|7<d S)Nr�r_r#r`r$r�r2rtr�Fr�r�T� rr:�!afterDoctypePublicIdentifierStaterr'r;rrrrrpr!r!r"r��s0   � �   �  z6HTMLTokenizer.doctypePublicIdentifierDoubleQuotedStatecCs�|j��}|dkr|j|_n�|dkrN|j�tddd��|jdd7<n�|dkr�|j�tdd d��d |jd <|j�|j�|j|_nR|t kr�|j�tdd d��d |jd <|j�|j�|j|_n|jd|7<d S)Nr�r_r#r`r$r�r2rtr�Fr�r�Tr�rpr!r!r"r��s0   � �   �  z6HTMLTokenizer.doctypePublicIdentifierSingleQuotedStatecCs |j��}|tkr|j|_n�|dkr<|j�|j�|j|_n�|dkrn|j�t ddd��d|jd<|j |_n�|dkr�|j�t ddd��d|jd<|j |_nh|t kr�|j�t dd d��d |jd <|j�|j�|j|_n(|j�t ddd��d |jd <|j |_d S) Nrtr�r#r�r$r/r�r�r�Fr�T)rr:r�-betweenDoctypePublicAndSystemIdentifiersStaterr'r;rrr�(doctypeSystemIdentifierDoubleQuotedState�(doctypeSystemIdentifierSingleQuotedStaterr�rpr!r!r"r��s>    �   �   �   � z/HTMLTokenizer.afterDoctypePublicIdentifierStatecCs�|j��}|tkrn�|dkr4|j�|j�|j|_n�|dkrPd|jd<|j|_n�|dkrld|jd<|j |_nh|t kr�|j�t ddd��d |jd <|j�|j�|j|_n(|j�t dd d��d |jd <|j |_d S) Nrtr�r/r�r�r#r�r$Fr�r�T) rr:rr'r;rrrr�r�rrr�rpr!r!r"r�s2       �   � z;HTMLTokenizer.betweenDoctypePublicAndSystemIdentifiersStatecCs�|j��}|tkr|j|_n�|dkrP|j�tddd��|j�|�|j|_nT|t kr�|j�tddd��d|j d<|j�|j �|j |_n|j�|�|j|_dSr�) rr:r�"beforeDoctypeSystemIdentifierStaterr'r;rrArrrrpr!r!r"r�s&   �   �   z,HTMLTokenizer.afterDoctypeSystemKeywordStatecCs�|j��}|tkrn�|dkr0d|jd<|j|_n�|dkrLd|jd<|j|_n�|dkr�|j�t ddd��d |jd <|j�|j�|j |_nh|t kr�|j�t dd d��d |jd <|j�|j�|j |_n(|j�t ddd��d |jd <|j |_d S) Nr�r/r�r�rtr#r�r$Fr�r�T) rr:rrr�rr�r'r;rrrr�rpr!r!r"r�/s:      �   �   � z0HTMLTokenizer.beforeDoctypeSystemIdentifierStatecCs�|j��}|dkr|j|_n�|dkrN|j�tddd��|jdd7<n�|dkr�|j�tdd d��d |jd <|j�|j�|j|_nR|t kr�|j�tdd d��d |jd <|j�|j�|j|_n|jd|7<d S)Nr�r_r#r`r$r�r2rtr�Fr�r�T� rr:�!afterDoctypeSystemIdentifierStaterr'r;rrrrrpr!r!r"r�Ls0   � �   �  z6HTMLTokenizer.doctypeSystemIdentifierDoubleQuotedStatecCs�|j��}|dkr|j|_n�|dkrN|j�tddd��|jdd7<n�|dkr�|j�tdd d��d |jd <|j�|j�|j|_nR|t kr�|j�tdd d��d |jd <|j�|j�|j|_n|jd|7<d S)Nr�r_r#r`r$r�r2rtr�Fr�r�Tr�rpr!r!r"r�ds0   � �   �  z6HTMLTokenizer.doctypeSystemIdentifierSingleQuotedStatecCs�|j��}|tkrn~|dkr4|j�|j�|j|_n^|tkrt|j�t ddd��d|jd<|j�|j�|j|_n|j�t ddd��|j |_dS) Nrtr#r�r$Fr�r�T) rr:rr'r;rrrrrr�rpr!r!r"r�|s$   �   �z/HTMLTokenizer.afterDoctypeSystemIdentifierStatecCsZ|j��}|dkr*|j�|j�|j|_n,|tkrV|j�|�|j�|j�|j|_ndS)NrtT) rr:r'r;rrrrrArpr!r!r"r��s    zHTMLTokenizer.bogusDoctypeStatecCs�g}|�|j�d��|�|j�d��|j��}|tkr>q�q|dksJt�|ddd�dkrv|ddd�|d<q�q|�|�qd�|�}|�d�}|dkr�t|�D]}|j �t d d d ��q�|� dd �}|r�|j �t d |d ��|j |_ dS)N�]rtrJ�����z]]r/r_rr#r`r$r2rOT)r;rrdr:r�AssertionErrorr=�count�ranger'rr�rr)rr&r:Z nullCountr�r!r!r"r��s2       �   �zHTMLTokenizer.cdataSectionState)N)NF)N�__name__� __module__� __qualname__�__doc__rr,rFrWrXr^rrbrjrhrmrorqrcrwrxrir�r�rlr�r�rnr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r|r�r�r�r�r�r�r�r}ryrvr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�� __classcell__r!r!rr"rs� H P#         6 "-3rN)Z __future__rrrZpip._vendor.sixrr?� collectionsrZ constantsrr r r r r rrrrZ _inputstreamrZ_trierrP�objectrr!r!r!r"�s