§
    ¦”j­©  ã                  óÞ   — d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	 ddl
ZddlmZ ddlmZ d	„ Zd
„ Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ de¦  «        Zd„ Z G d„ d¦  «        ZdS )a.  
CSS-2.1 parser.

Copyright (C) 2002-2004 TechGame Networks, LLC.

This library is free software; you can redistribute it and/or
modify it under the terms of the BSD style License as found in the
LICENSE file included with this distribution.

Modified by Dirk Holtwick <holtwick@web.de>, 2007-2008

The CSS 2.1 Specification this parser was derived from can be found at http://www.w3.org/TR/CSS21/

Primary Classes:
    * CSSParser
        Parses CSS source forms into results using a Builder Pattern.  Must
        provide concrete implementation of CSSBuilderAbstract.

    * CSSBuilderAbstract
        Outlines the interface between CSSParser and it's rule-builder.
        Compose CSSParser with a concrete implementation of the builder to get
        usable results from the CSS parser.

Dependencies:
    re
é    )ÚannotationsN)Úabstractmethod)ÚClassVar)Ú	landscape)ÚgetSize)Ú
cssSpecialc                ó8   — t          j        d|z   dz   | ¦  «        S )Nz^@z\s*)ÚreÚmatch)ÚsrcÚidents     úf/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/xhtml2pdf/w3c/cssParser.pyÚisAtRuleIdentr   .   s   € ÝŒ8�E˜E‘M FÑ*¨CÑ0Ô0Ð0ó    c                ó.   — t          j        dd| ¦  «        S )Nz^@[a-z\-]+\s*Ú )r
   Úsub©r   s    r   ÚstripAtRuleIdentr   2   s   € ÝŒ6Ð" B¨Ñ,Ô,Ð,r   c                  ó–   — e Zd ZdZed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Z	ed„ ¦   «         Z
dS )	ÚCSSSelectorAbstracta  
    Outlines the interface between CSSParser and it's rule-builder for selectors.

    CSSBuilderAbstract.selector and CSSBuilderAbstract.combineSelectors must
    return concrete implementations of this abstract.

    See css.CSSMutableSelector for an example implementation.
    c                ó   — t           ‚©N©ÚNotImplementedError)ÚselfÚhashIds     r   Ú	addHashIdzCSSSelectorAbstract.addHashId@   ó   € å!Ð!r   c                ó   — t           ‚r   r   )r   Úclass_s     r   ÚaddClasszCSSSelectorAbstract.addClassD   r   r   c                ó   — t           ‚r   r   )r   ÚattrNames     r   ÚaddAttributez CSSSelectorAbstract.addAttributeH   r   r   c                ó   — t           ‚r   r   )r   r$   ÚopÚ
attr_values       r   ÚaddAttributeOperationz)CSSSelectorAbstract.addAttributeOperationL   r   r   c                ó   — t           ‚r   r   ©r   Únames     r   Ú	addPseudozCSSSelectorAbstract.addPseudoP   r   r   c                ó   — t           ‚r   r   ©r   r,   Úvalues      r   ÚaddPseudoFunctionz%CSSSelectorAbstract.addPseudoFunctionT   r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r"   r%   r)   r-   r1   © r   r   r   r   6   sÀ   € € € € € ðð ð ð"ð "ñ „^ð"ð ð"ð "ñ „^ð"ð ð"ð "ñ „^ð"ð ð"ð "ñ „^ð"ð ð"ð "ñ „^ð"ð ð"ð "ñ „^ð"ð "ð "r   r   c                  ón  — e Zd ZdZed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Z	ed„ ¦   «         Z
ed„ ¦   «         Zed	„ ¦   «         Zed
„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed(d„¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zeddœd„¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed)d!„¦   «         Zed"„ ¦   «         Zed#„ ¦   «         Zed$„ ¦   «         Zed%„ ¦   «         Zed&„ ¦   «         Zed'„ ¦   «         Zd S )*ÚCSSBuilderAbstractzó
    Outlines the interface between CSSParser and it's rule-builder.  Compose
    CSSParser with a concrete implementation of the builder to get usable
    results from the CSS parser.

    See css.CSSBuilder for an example implementation
    c                ó   — t           ‚r   r   ©r   s    r   ÚbeginStylesheetz"CSSBuilderAbstract.beginStylesheetd   r   r   c                ó   — t           ‚r   r   )r   Úelementss     r   Ú
stylesheetzCSSBuilderAbstract.stylesheeth   r   r   c                ó   — t           ‚r   r   r:   s    r   ÚendStylesheetz CSSBuilderAbstract.endStylesheetl   r   r   c                ó   — t           ‚r   r   r:   s    r   ÚbeginInlinezCSSBuilderAbstract.beginInlinep   r   r   c                ó   — t           ‚r   r   ©r   Údeclarationss     r   ÚinlinezCSSBuilderAbstract.inlinet   r   r   c                ó   — t           ‚r   r   r:   s    r   Ú	endInlinezCSSBuilderAbstract.endInlinex   r   r   c                ó   — t           ‚r   r   )r   Ú	selectorsrE   s      r   ÚrulesetzCSSBuilderAbstract.ruleset|   r   r   c                ó   — t           ‚r   r   )r   ÚnsPrefixr,   s      r   ÚresolveNamespacePrefixz)CSSBuilderAbstract.resolveNamespacePrefix‚   r   r   c                ó   — t           ‚r   r   )r   Úcharsets     r   Ú	atCharsetzCSSBuilderAbstract.atCharsetˆ   r   r   c                ó   — t           ‚r   r   )r   Úimport_ÚmediumsÚ	cssParsers       r   ÚatImportzCSSBuilderAbstract.atImportŒ   r   r   c                ó   — t           ‚r   r   )r   rM   Úuris      r   ÚatNamespacezCSSBuilderAbstract.atNamespace�   r   r   c                ó   — t           ‚r   r   )r   rT   rK   s      r   ÚatMediazCSSBuilderAbstract.atMedia”   r   r   r,   ÚstrÚ
pseudopageú
str | NoneÚdataÚdictÚisLandscapeÚboolc               ó   — t           ‚r   r   )r   r,   r]   r_   ra   Ú
pageBorders         r   ÚatPagezCSSBuilderAbstract.atPage˜   s
   € õ "Ð!r   c                ó   — t           ‚r   r   rD   s     r   Ú
atFontFacezCSSBuilderAbstract.atFontFace¤   r   r   c                ó   — |t           fS r   )ÚNotImplemented)r   ÚatIdentrU   r   s       r   rj   zCSSBuilderAbstract.atIdent¨   s   € à•NÐ"Ð"r   c                ó   — t           ‚©z0Return value must implement CSSSelectorAbstract.r   )r   Ú	selectorAÚcombinerÚ	selectorBs       r   ÚcombineSelectorsz#CSSBuilderAbstract.combineSelectors®   ó
   € õ "Ð!r   c                ó   — t           ‚rl   r   r+   s     r   ÚselectorzCSSBuilderAbstract.selector³   rq   r   F©Ú	importantc               ó   — t           ‚r   r   )r   r,   r0   ru   s       r   ÚpropertyzCSSBuilderAbstract.propertyº   r   r   c                ó   — t           ‚r   r   )r   ÚtermArn   ÚtermBs       r   ÚcombineTermszCSSBuilderAbstract.combineTerms¾   r   r   c                ó   — t           ‚r   r   ©r   r0   s     r   Ú	termIdentzCSSBuilderAbstract.termIdentÂ   r   r   Nc                ó   — t           ‚r   r   )r   r0   Úunitss      r   Ú
termNumberzCSSBuilderAbstract.termNumberÆ   r   r   c                ó   — t           ‚r   r   r}   s     r   ÚtermRGBzCSSBuilderAbstract.termRGBÊ   r   r   c                ó   — t           ‚r   r   r}   s     r   ÚtermURIzCSSBuilderAbstract.termURIÎ   r   r   c                ó   — t           ‚r   r   r}   s     r   Ú
termStringzCSSBuilderAbstract.termStringÒ   r   r   c                ó   — t           ‚r   r   r}   s     r   ÚtermUnicodeRangez#CSSBuilderAbstract.termUnicodeRangeÖ   r   r   c                ó   — t           ‚r   r   r/   s      r   ÚtermFunctionzCSSBuilderAbstract.termFunctionÚ   r   r   c                ó   — t           ‚r   r   )r   Ú_srcs     r   ÚtermUnknownzCSSBuilderAbstract.termUnknownÞ   r   r   )r,   r\   r]   r^   r_   r`   ra   rb   r   ) r2   r3   r4   r5   r   r;   r>   r@   rB   rF   rH   rK   rN   rQ   rV   rY   r[   re   rg   rj   rp   rs   rw   r{   r~   r�   rƒ   r…   r‡   r‰   r‹   rŽ   r6   r   r   r8   r8   Y   s  € € € € € ðð ð ð"ð "ñ „^ð"ð ð"ð "ñ „^ð"ð ð"ð "ñ „^ð"ð ð"ð "ñ „^ð"ð ð"ð "ñ „^ð"ð ð"ð "ñ „^ð"ð ð"ð "ñ „^ð"ð
 ð"ð "ñ „^ð"ð
 ð"ð "ñ „^ð"ð ð"ð "ñ „^ð"ð ð"ð "ñ „^ð"ð ð"ð "ñ „^ð"ð ð	"ð 	"ð 	"ñ „^ð	"ð ð"ð "ñ „^ð"ð ð#ð #ñ „^ð#ð
 ð"ð "ñ „^ð"ð ð"ð "ñ „^ð"ð Ø16ð "ð "ð "ð "ñ „^ð"ð ð"ð "ñ „^ð"ð ð"ð "ñ „^ð"ð ð"ð "ð "ñ „^ð"ð ð"ð "ñ „^ð"ð ð"ð "ñ „^ð"ð ð"ð "ñ „^ð"ð ð"ð "ñ „^ð"ð ð"ð "ñ „^ð"ð ð"ð "ñ „^ð"ð "ð "r   r8   c                  óž   ‡ — e Zd ZU dZded<   dZded<   dZded<   dZded	<   d
Zded<   d
Z	ded<   d
Z
ded<   ddˆ fd„Zdˆ fd„Zddœd„Zˆ xZS )ÚCSSParseErrorr   r\   r   Úctxsrczbytes | strÚfullsrcFrb   rF   Nz
int | NoneÚ	srcCtxIdxÚ
srcFullIdxÚctxsrcFullIdxÚreturnÚNonec                óâ   •— t          ¦   «                              |¦  «         || _        |p|| _        | j        r3| j                             | j        ¦  «        | _        | j        dk     r| `d S d S d S )Nr   )ÚsuperÚ__init__r   r‘   Úfindr“   )r   Úmsgr   r‘   Ú	__class__s       €r   rš   zCSSParseError.__init__ñ   sv   ø€ Ý‰Œ×Ò˜ÑÔÐØˆŒØ�m ˆŒØŒ;ð 	#Ø!œ[×-Ò-¨d¬hÑ7Ô7ˆDŒNØŒ~ Ò!Ð!Ø�N�N�Nð	#ð 	#à!Ð!r   c           	     ó¾  •— | j         r–| j        r�t          ¦   «                              ¦   «         dz   t	          t          | j         d | j        …         ¦  «        ¦  «        z   dz   t	          t          | j         | j        | j        dz   …         ¦  «        ¦  «        z   dz   S t          ¦   «                              ¦   «         dz   t          | j        d d…         ¦  «        z   S )Nz:: (z, é   ú)z:: é(   )r‘   r“   r™   Ú__str__r\   Úreprr   )r   r�   s    €r   r¢   zCSSParseError.__str__ú   sÑ   ø€ ØŒ;ð 	˜4œ>ð 	å‘”—’Ñ!Ô!Øñå•d˜4œ;Ð'7¨¬Ð'7Ô8Ñ9Ô9Ñ:Ô:ñ;ð ñõ •d˜4œ; t¤~¸¼ÈÑ8KÐ'KÔLÑMÔMÑNÔNñ	Oð
 ñðõ ‰wŒw�ŠÑ Ô  5Ñ(­4°´¸¸"¸´Ñ+>Ô+>Ñ>Ð>r   ©rF   c               óh  — || _         t          | j         t          ¦  «        rt          | j         d¦  «        | _         |r|| _        | j         rd| j                              | j        ¦  «        | _        | j        dk     r| `| j                              | j        ¦  «        | _	        | j	        dk     r| `	d S d S d S )Núutf-8r   )
r’   Ú
isinstanceÚbytesr\   rF   r›   r   r”   r‘   r•   )r   r’   rF   s      r   ÚsetFullCSSSourcezCSSParseError.setFullCSSSource  sº   € ØˆŒÝ�d”l¥EÑ*Ô*ð 	6Ý˜tœ|¨WÑ5Ô5ˆDŒLØð 	!Ø ˆDŒKØŒ<ð 	'Ø"œl×/Ò/°´Ñ9Ô9ˆDŒOØŒ Ò"Ð"Ø�OØ!%¤×!2Ò!2°4´;Ñ!?Ô!?ˆDÔØÔ! AÒ%Ð%ØÐ&Ð&Ð&ð	'ð 	'ð
 &Ð%r   r   ©r–   r—   )r–   r\   )r2   r3   r4   r   Ú__annotations__r‘   r’   rF   r“   r”   r•   rš   r¢   r©   Ú__classcell__)r�   s   @r   r�   r�   è   só   ø€ € € € € € Ø€C€M€M€M�MØ€FÐÐÐÑØ€GÐÐÐÑØ€FÐÐÐÑØ €IÐ Ð Ð Ñ Ø!€JÐ!Ð!Ð!Ñ!Ø $€MÐ$Ð$Ð$Ñ$ð#ð #ð #ð #ð #ð #ð #ð
?ð 
?ð 
?ð 
?ð 
?ð 
?ð 38ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'r   r�   c                 ó,   — d                      | ¦  «        S )z&Small helper to join regex expressionsú|)Újoin)Úargss    r   Úregex_orr±     s   € à�8Š8�D‰>Œ>Ðr   c                  ó¸  — e Zd ZU dZeZg d¢Zded<   dZded<   dd	gZ	ded
<   dZ
ded<   ej        ej        z  ej        z  ZdZdZdez  Z eed¦  «        Z edee¦  «        Z edee¦  «        Zde› de› d�Z ej        ee¦  «        ZdZ ej        ee¦  «        ZdZdZ eee¦  «        Z ej        ee¦  «        Zdedd…         › d�Z  ej        e e¦  «        Z!dedd…         › d�Z" ej        e"e¦  «        Z#dez   Z$ ej        e$e¦  «        Z%dez  Z& ej        e&e¦  «        Z'de› d e› d!e› d"�Z( ej        e(e¦  «        Z)d#Z*d$e*z  Z+ ed%e+ee¦  «        Z,d&e,z  Z-d'e,z  Z. ee-e.¦  «        Z/ ej        e/e¦  «        Z0d( 1                    e/ ed)ee¦  «        ¦  «        Z2 ej        e2e¦  «        Z3d*Z4 ej        e4e¦  «        Z5d+ez  Z6 ej        e6e¦  «        Z7ed,z   Z8 ej        e8e¦  «        Z9d-e8z   Z: ej        e:e¦  «        Z;d.e› d/e› d0�Z<d1Z=e<Z> ej        e>e¦  «        Z?d2Z@ ej        e@e¦  «        ZAd3ZB ej        eBe¦  «        ZCd]d^d7„ZDd8„ ZEd9„ ZF eGeEeF¦  «        ZHd:„ ZId;„ ZJd<„ ZKd]d=„ZLd>„ ZMd?„ ZNeOd@„ ¦   «         ZPdA„ ZQdB„ ZRdC„ ZSdD„ ZTdE„ ZUdF„ ZVdG„ ZWdH„ ZXdI„ ZYdJ„ ZZdK„ Z[dL„ Z\dM„ Z]dN„ Z^dO„ Z_dPdQœdR„Z`dS„ ZadT„ ZbdUdVœdW„ZcdX„ Zdd]dY„Zed_dZ„Zfd[„ ZgeOd`d\„¦   «         Zhd4S )aÚ	CSSParseraö  
    CSS-2.1 parser dependent only upon the re module.

    Implemented directly from http://www.w3.org/TR/CSS21/grammar.html
    Tested with some existing CSS stylesheets for portability.

    CSS Parsing API:
        * setCSSBuilder()
            To set your concrete implementation of CSSBuilderAbstract

        * parseFile()
            Use to parse external stylesheets using a file-like object

            >>> cssFile = open('test.css', 'r')
            >>> stylesheets = myCSSParser.parseFile(cssFile)

        * parse()
            Use to parse embedded stylesheets using source string

            >>> cssSrc = '''
                body,body.body {
                    font: 110%, "Times New Roman", Arial, Verdana, Helvetica, serif;
                    background: White;
                    color: Black;
                }
                a {text-decoration: underline;}
            '''
            >>> stylesheets = myCSSParser.parse(cssSrc)

        * parseInline()
            Use to parse inline stylesheets using attribute source string

            >>> style = 'font: 110%, "Times New Roman", Arial, Verdana, Helvetica, serif; background: White; color: Black'
            >>> stylesheets = myCSSParser.parseInline(style)

        * parseAttributes()
            Use to parse attribute string values into inline stylesheets

            >>> stylesheets = myCSSParser.parseAttributes(
                    font='110%, "Times New Roman", Arial, Verdana, Helvetica, serif',
                    background='White',
                    color='Black')

        * parseSingleAttr()
            Use to parse a single string value into a CSS expression

            >>> fontValue = myCSSParser.parseSingleAttr('110%, "Times New Roman", Arial, Verdana, Helvetica, serif')
    )ú=z~=z|=z&=z^=z!=z<>zClassVar[list[str]]ÚAttributeOperators)ú#ú.ú[ú:zClassVar[tuple[str, ...]]ÚSelectorQualifiersú+ú>ÚSelectorCombiners)ú/r»   ú,ÚExpressionOperatorsz[0-9a-fA-F]u   [Â€-Ã¿]z\\(?:%s){1,6}\s?z\\[ -~\200-\377]z\-[^0-9]|[A-Za-z_]z[-0-9A-Za-z_]z((?:z)(?:z)*)z([^\u0000-\u007f]+)z(\'[^\u0000-\u007f]+\')z(\"[^\u0000-\u007f]+\")é   éÿÿÿÿz)|\*)z)|\*|)\|(?!=)z\.z
#((?:%s)+)z(#z{8}|#z{6}|#z{3})z
|
||z\\(?:%s)z[	 !#$%&(-~]z"((?:%s|')*)"z'((?:%s|")*)'z!url\(\s*(?:(?:{})|((?:{})+))\s*\)z
[!#$%&*-~]z,(([-+]?[0-9]+(?:\.[0-9]+)?)|([-+]?\.[0-9]+))z(%%|%s)?z\(z[-+]?z(?:U\+z{1,6}-z{1,6})zO(?:U\+\?{1,6}|{h}(\?{0,5}|{h}(\?{0,4}|{h}(\?{0,3}|{h}(\?{0,2}|{h}(\??|{h}))))))z"(?:\/\*[^*]*\*+([^/*][^*]*\*+)*\/)z!\s*(important)Nr–   r—   c                ó0   — |                       |¦  «         d S r   )ÚsetCSSBuilder©r   Ú
cssBuilders     r   rš   zCSSParser.__init__¢  s   € Ø×Ò˜:Ñ&Ô&Ð&Ð&Ð&r   c                ó   — | j         S )ú4A concrete instance implementing CSSBuilderAbstract.©Ú_cssBuilderr:   s    r   ÚgetCSSBuilderzCSSParser.getCSSBuilder§  s   € àÔÐr   c                ó   — || _         dS )rÈ   NrÉ   rÅ   s     r   rÄ   zCSSParser.setCSSBuilder«  s   € à%ˆÔÐÐr   c                ó¦   — t          |d¬¦  «        5 }|                     ¦   «         }ddd¦  «         n# 1 swxY w Y   |                      |¦  «        S )zr
        Parses CSS file-like objects using the current cssBuilder.
        Use for external stylesheets.
        r¦   )ÚencodingN)ÚopenÚreadÚparse)r   ÚsrcFileÚfile_handlerÚfile_contents       r   Ú	parseFilezCSSParser.parseFileµ  sŽ   € õ
 �' GÐ,Ñ,Ô,ð 	/°Ø'×,Ò,Ñ.Ô.ˆLð	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/øøøð 	/ð 	/ð 	/ð 	/ð �zŠz˜,Ñ'Ô'Ð's   ’3³7º7c                óX  — | j                              ¦   «          	 t          j        |¦  «        }	 |                      |¦  «        \  }}n(# | j        $ r}|                     |¦  «         ‚ d}~ww xY w	 | j                              ¦   «          n# | j                              ¦   «          w xY w|S )zn
        Parses CSS string source using the current cssBuilder.
        Use for embedded stylesheets.
        N)rÆ   r;   r   Ú
cleanupCSSÚ_parseStylesheetÚ
ParseErrorr©   r@   )r   r   r>   Úerrs       r   rÑ   zCSSParser.parse¿  sÁ   € ð
 	Œ×'Ò'Ñ)Ô)Ð)ð
	,åÔ'¨Ñ,Ô,ˆCðØ"&×"7Ò"7¸Ñ"<Ô"<‘��Z�ZøØ”?ð ð ð Ø×$Ò$ SÑ)Ô)Ð)Øøøøøðøøøð  ð
 ŒO×)Ò)Ñ+Ô+Ð+Ð+øˆDŒO×)Ò)Ñ+Ô+Ð+Ð+øøøØÐs.   ›B °A	 ÁB Á	
A.ÁA)Á)A.Á.B ÂB'c                óŽ  — | j                              ¦   «          	 	 |                      |                     ¦   «         d¬¦  «        \  }}n*# | j        $ r}|                     |d¬¦  «         ‚ d}~ww xY w| j                              |¦  «        }| j                              ¦   «          n# | j                              ¦   «          w xY w|S )z„
        Parses CSS inline source string using the current cssBuilder.
        Use to parse a tag's 'style'-like attribute.
        F©ÚbracesTr¤   N)rÆ   rB   Ú_parseDeclarationGroupÚstriprÙ   r©   rF   rH   )r   r   Ú
propertiesrÚ   Úresults        r   ÚparseInlinezCSSParser.parseInlineÒ  sÓ   € ð
 	Œ×#Ò#Ñ%Ô%Ð%ð		(ðØ"&×"=Ò"=¸c¿iºi¹k¼kÐRWÐ"=Ñ"XÔ"X‘��Z�ZøØ”?ð ð ð Ø×$Ò$ S°Ð$Ñ6Ô6Ð6Øøøøøðøøøð ”_×+Ò+¨JÑ7Ô7ˆFàŒO×%Ò%Ñ'Ô'Ð'Ð'øˆDŒO×%Ò%Ñ'Ô'Ð'Ð'øøøØˆs)   œ,A	 ÁB' Á	
A0ÁA+Á+A0Á0B' Â'Cc                ó(  — |�|ni }|r|                      |¦  «         | j                             ¦   «          	 g }	 |                     ¦   «         D ]E\  }}|                      |                     ¦   «         |¦  «        \  }}|                     |¦  «         ŒFn*# | j        $ r}|                     |d¬¦  «         ‚ d}~ww xY w| j         	                    |¦  «        }| j         
                    ¦   «          n# | j         
                    ¦   «          w xY w|S )zÃ
        Parses CSS attribute source strings, and return as an inline stylesheet.
        Use to parse a tag's highly CSS-based attributes like 'font'.

        See also: parseSingleAttr
        NTr¤   )ÚupdaterÆ   rB   ÚitemsÚ_parseDeclarationPropertyrß   ÚappendrÙ   r©   rF   rH   )	r   Ú
attributesÚkwAttributesrà   Úproperty_namer   Úsingle_propertyrÚ   rá   s	            r   ÚparseAttributeszCSSParser.parseAttributesä  sB  € ð $.Ð#9�Z�Z¸rˆ
Øð 	,Ø×Ò 
Ñ+Ô+Ð+àŒ×#Ò#Ñ%Ô%Ð%ð	(ØˆJð	Ø*6×*<Ò*<Ñ*>Ô*>ð 7ð 7Ñ&�M 3Ø+/×+IÒ+IØŸ	š	™œ ]ñ,ô ,Ñ(�C˜ð ×%Ò% oÑ6Ô6Ð6Ð6ð	7øð ”?ð ð ð Ø×$Ò$ S°Ð$Ñ6Ô6Ð6Øøøøøðøøøð ”_×+Ò+¨JÑ7Ô7ˆFàŒO×%Ò%Ñ'Ô'Ð'Ð'øˆDŒO×%Ò%Ñ'Ô'Ð'Ð'øøøØˆs/   ¸C4 »AB ÂC4 Â
B=Â B8Â8B=Â=C4 Ã4Dc                óz   — |                       |¬¦  «        }d|d         v r|d         d         S |d         d         S )zÌ
        Parse a single CSS attribute source string, and returns the built CSS expression.
        Use to parse a tag's highly CSS-based attributes like 'font'.

        See also: parseAttributes
        )Útemprî   rÁ   r   )rì   )r   r(   Úresultss      r   ÚparseSingleAttrzCSSParser.parseSingleAttr  sG   € ð ×&Ò&¨JÐ&Ñ7Ô7ˆØ�W˜Q”ZÐÐØ˜1”:˜fÔ%Ð%Ø�qŒz˜&Ô!Ð!r   c                ó¦  — t          |t          ¦  «        r|                     ¦   «         }| j                             d|¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        \  }}|                      |¦  «        }g }|r”| 	                    d¦  «        r;|  
                    |¦  «        \  }}|� |t          k    r|                     |¦  «         n-|                      |¦  «        \  }}|                     |¦  «         |                      |¦  «        }|°”| j                             ||¦  «        }||fS )zÉ
        stylesheet
        : [ CHARSET_SYM S* STRING S* ';' ]?
            [S|CDO|CDC]* [ import [S|CDO|CDC]* ]*
            [ [ ruleset | media | page | font_face ] [S|CDO|CDC]* ]*
        ;
        r   ú@)r§   r¨   ÚdecodeÚ
re_commentr   Ú_parseAtCharsetÚ_parseSCDOCDCÚ_parseAtImportsÚ_parseAtNamespaceÚ
startswithÚ_parseAtKeywordri   ÚextendÚ_parseRulesetrç   rÆ   r>   )r   r   ÚstylesheetImportsÚstylesheetElementsÚ	atResultsrK   r>   s          r   rØ   zCSSParser._parseStylesheet  sc  € õ �c�5Ñ!Ô!ð 	Ø—*’*‘,”,ˆCàŒo×!Ò! " cÑ*Ô*ˆð ×"Ò" 3Ñ'Ô'ˆð × Ò  Ñ%Ô%ˆà!%×!5Ò!5°cÑ!:Ô!:ÑˆÐð ×$Ò$ SÑ)Ô)ˆàÐð ð 	*Ø�~Š~˜cÑ"Ô"ð 3à!%×!5Ò!5°cÑ!:Ô!:‘��YØÐ(¨Y½.Ò-HÐ-HØ&×-Ò-¨iÑ8Ô8Ð8øð  $×1Ò1°#Ñ6Ô6‘��WØ"×)Ò)¨'Ñ2Ô2Ð2ð ×$Ò$ SÑ)Ô)ˆCð ð 	*ð ”_×/Ò/Ð0BÐDUÑVÔVˆ
Ø�JˆÐr   c                ó´   — 	 |                       ¦   «         } |                      d¦  «        r| dd…         } n!|                      d¦  «        r| dd…         } nnŒV| S )z[S|CDO|CDC]*.rÁ   z<!--é   Nz-->é   )Úlstriprù   r   s    r   rö   zCSSParser._parseSCDOCDC?  si   € ð	Ø—*’*‘,”,ˆCØ�~Š~˜fÑ%Ô%ð Ø˜!˜"˜"”g��Ø—’ Ñ&Ô&ð Ø˜!˜"˜"”g��àð	ð ˆ
r   c                ó`  — t          |d¦  «        r�t          |¦  «        }|                      |¦  «        \  }}|                     ¦   «         }|dd…         dk    rd}|                      ||| j        ¦  «        ‚|dd…                              ¦   «         }| j                             |¦  «         |S )z"[ CHARSET_SYM S* STRING S* ';' ]?.rP   NrÁ   ú;z#@charset expected a terminating ';')r   r   Ú
_getStringr  rÙ   r‘   rÆ   rQ   )r   r   rP   rœ   s       r   rõ   zCSSParser._parseAtCharsetN  s£   € å˜˜iÑ(Ô(ð 		/Ý" 3Ñ'Ô'ˆCØŸ?š?¨3Ñ/Ô/‰LˆG�SØ—*’*‘,”,ˆCØ�2�A�2Œw˜#Š~ˆ~Ø;�Ø—o’o c¨3°´Ñ<Ô<Ð<Ø�a�b�b”'—.’.Ñ"Ô"ˆCàŒO×%Ò% gÑ.Ô.Ð.Øˆ
r   c                ó  — g }t          |d¦  «        �rn|}t          |¦  «        }|                      |¦  «        \  }}|€d}|                      |||¦  «        ‚g }|                      |                     ¦   «         ¦  «        \  }}|�[|                     |¦  «         |dd…         dk    r5|dd…                              ¦   «         }|                      |¦  «        \  }}nn|­[|sdg}|dd…         dk    rd}|                      |||¦  «        ‚|dd…                              ¦   «         }| j                             ||| ¦  «        }|�|                     |¦  «         |  	                    |¦  «        }t          |d¦  «        �°n||fS )	z[ import [S|CDO|CDC]* ]*.ÚimportNzImport expecting string or urlrÁ   r¿   Úallr  z"@import expected a terminating ';')
r   r   Ú_getStringOrURIrÙ   Ú	_getIdentr  rç   rÆ   rV   rö   )	r   r   rá   r‘   rS   rœ   rT   Úmediumr>   s	            r   r÷   zCSSParser._parseAtImports\  s   € àˆÝ˜C Ñ*Ô*ñ  	*ØˆFÝ" 3Ñ'Ô'ˆCà×/Ò/°Ñ4Ô4‰LˆG�SØˆØ6�Ø—o’o c¨3°Ñ7Ô7Ð7àˆGØŸ.š.¨¯ª©¬Ñ6Ô6‰KˆF�CØÐ$Ø—’˜vÑ&Ô&Ð&Ø�r˜�r”7˜c’>�>Ø˜a˜b˜bœ'Ÿ.š.Ñ*Ô*�CØ"&§.¢.°Ñ"5Ô"5‘K�F˜C˜Càð Ð$ð ð "Ø ˜'�à�2�A�2Œw˜#Š~ˆ~Ø:�Ø—o’o c¨3°Ñ7Ô7Ð7Ø�a�b�b”'—.’.Ñ"Ô"ˆCàœ×1Ò1°'¸7ÀDÑIÔIˆJØÐ%Ø—’˜jÑ)Ô)Ð)à×$Ò$ SÑ)Ô)ˆCõA ˜C Ñ*Ô*ñ  	*ðB �Fˆ{Ðr   c                óÎ  — |                       |¦  «        }t          |d¦  «        �r>|}t          |¦  «        }|                      |¦  «        \  }}|€y|                      |¦  «        \  }}|€d}|                      |||¦  «        ‚|                      |                     ¦   «         ¦  «        \  }}|€d}|                      |||¦  «        ‚nd}|                     ¦   «         }|dd…         dk    rd}|                      |||¦  «        ‚|dd…                              ¦   «         }| j                             ||¦  «         |                       |¦  «        }t          |d¦  «        �°>|S )zW
        Namespace :

        @namespace S* [IDENT S*]? [STRING|URI] S* ';' S*
        Ú	namespaceNz*@namespace expected an identifier or a URIz@namespace expected a URIrÁ   r  z%@namespace expected a terminating ';')	rö   r   r   r
  r  rÙ   r  rÆ   rY   )r   r   r‘   r  rM   rœ   s         r   rø   zCSSParser._parseAtNamespace‚  sp  € ð × Ò  Ñ%Ô%ˆÝ˜C Ñ-Ô-ñ 	*ØˆFÝ" 3Ñ'Ô'ˆCà!×1Ò1°#Ñ6Ô6‰NˆI�sØÐ Ø $§¢¨sÑ 3Ô 3‘�˜#ØÐ#ØF�CØŸ/š/¨#¨s°FÑ;Ô;Ð;Ø!%×!5Ò!5°c·j²j±l´lÑ!CÔ!C‘�	˜3ØÐ$Ø5�CØŸ/š/¨#¨s°FÑ;Ô;Ð;ð %ð  �à—*’*‘,”,ˆCØ�2�A�2Œw˜#Š~ˆ~Ø=�Ø—o’o c¨3°Ñ7Ô7Ð7Ø�a�b�b”'—.’.Ñ"Ô"ˆCàŒO×'Ò'¨°)Ñ<Ô<Ð<à×$Ò$ SÑ)Ô)ˆCõ3 ˜C Ñ-Ô-ñ 	*ð4 ˆ
r   c                ó6  — |}t          |d¦  «        r|                      |¦  «        \  }}nët          |d¦  «        r|                      |¦  «        \  }}nÂt          |d¦  «        r|                      |¦  «        \  }}n™t          |d¦  «        r|                      |¦  «        \  }}npt          |d¦  «        r|                      |¦  «        \  }}nG|                     d¦  «        r|                      |¦  «        \  }}nd}|                      |||¦  «        ‚||fS )z-[media | page | font_face | unknown_keyword].ÚmediaÚpagez	font-facer  Úframerò   zUnknown state in atKeyword)	r   Ú_parseAtMediaÚ_parseAtPageÚ_parseAtFontFacer÷   Ú_parseAtFramerù   Ú_parseAtIdentrÙ   )r   r   r‘   rá   rœ   s        r   rú   zCSSParser._parseAtKeyword¥  s0  € àˆÝ˜˜gÑ&Ô&ð 	4Ø×,Ò,¨SÑ1Ô1‰KˆC��Ý˜3 Ñ'Ô'ð 	4Ø×+Ò+¨CÑ0Ô0‰KˆC��Ý˜3 Ñ,Ô,ð 	4Ø×/Ò/°Ñ4Ô4‰KˆC��å˜3 Ñ)Ô)ð 	4Ø×.Ò.¨sÑ3Ô3‰KˆC��Ý˜3 Ñ(Ô(ð 	4Ø×,Ò,¨SÑ1Ô1‰KˆC��Ø�^Š^˜CÑ Ô ð 	4Ø×,Ò,¨SÑ1Ô1‰KˆC��à.ˆCØ—/’/ # s¨FÑ3Ô3Ð3Ø�Fˆ{Ðr   c                ó  — |}|t          d¦  «        d…                              ¦   «         }g }|rò|d         dk    ræ|                      |¦  «        \  }}|dv rk|€|                     d¦  «         t	          j        dt          j        ¦  «        }t	          j        ||¦  «        }||                     ¦   «         dz
  d…         }n_|                     |¦  «         |d         d	k    r|dd…                              ¦   «         n|                     ¦   «         }|r|d         dk    °æ| 	                    d¦  «        sd
}|  
                    |||¦  «        ‚|dd…                              ¦   «         }g }|r²| 	                    d¦  «        s�| 	                    d¦  «        r0|                      |¦  «        \  }}	|	�|                     |	¦  «         n-|                      |¦  «        \  }}
|                     |
¦  «         |                     ¦   «         }|r| 	                    d¦  «        ¯�| 	                    d¦  «        sd}|  
                    |||¦  «        ‚|dd…                              ¦   «         }| j                             ||¦  «        }||fS )zi
        media
        : MEDIA_SYM S* medium [ ',' S* medium ]* '{' S* ruleset* '}' S*
        ;
        z@media Nr   Ú{>   NÚandr	  z.*?[{]rÁ   r¿   úRuleset opening '{' not foundÚ}rò   zRuleset closing '}' not found)Úlenr  r  rç   r
   ÚcompileÚDOTALLr   Úendrù   rÙ   rú   rû   rü   rÆ   r[   )r   r   r‘   rT   r  Úpatternr   rœ   rþ   rÿ   rK   rá   s               r   r  zCSSParser._parseAtMediaº  sŠ  € ð ˆØ•#�i‘.”.Ð"Ð"Ô#×*Ò*Ñ,Ô,ˆØˆØð 	F�c˜!”f ’m�mØŸ.š.¨Ñ-Ô-‰KˆF�Cà˜Ð&Ð&à�>Ø—N’N 5Ñ)Ô)Ð)åœ* X­r¬yÑ9Ô9�åœ ¨#Ñ.Ô.�Ø˜%Ÿ)š)™+œ+¨™/Ð+Ð+Ô,�ØØ�NŠN˜6Ñ"Ô"Ð"Ø&)¨!¤f°¢m m�#�a�b�b”'—.’.Ñ"Ô"Ð"¸¿º¹¼ˆCð ð 	F�c˜!”f ’m�mð  �~Š~˜cÑ"Ô"ð 	4Ø1ˆCØ—/’/ # s¨FÑ3Ô3Ð3Ø�!�"�"Œg�nŠnÑÔˆàÐð ð 
	˜#Ÿ.š.¨Ñ-Ô-ð 
	Ø�~Š~˜cÑ"Ô"ð 3à!%×!5Ò!5°cÑ!:Ô!:‘��YØÐ(Ø&×-Ò-¨iÑ8Ô8Ð8øð  $×1Ò1°#Ñ6Ô6‘��WØ"×)Ò)¨'Ñ2Ô2Ð2Ø—*’*‘,”,ˆCð ð 
	˜#Ÿ.š.¨Ñ-Ô-ð 
	ð �~Š~˜cÑ"Ô"ð 	4Ø1ˆCØ—/’/ # s¨FÑ3Ô3Ð3Ø�!�"�"Œg�nŠnÑÔˆà”×(Ò(¨Ð2DÑEÔEˆØ�Fˆ{Ðr   c                ó$  — i }d}d}|}|t          d¦  «        d…                              ¦   «         }|                      |¦  «        \  }}|dd…         dk    r)|                      |dd…         ¦  «        \  }}|dz   |z   }nd}g }|                     ¦   «         }g }	|                     d¦  «        sd}
|                      |
||¦  «        ‚|dd…                              ¦   «         }|�rì|                     d	¦  «        �sÖ|                     d
¦  «        r1|                      |¦  «        \  }}|�|                     |¦  «         �nd|                      |                     ¦   «         d¬¦  «        \  }}|	|z  }	i }d}|	rœ| j         	                    | j         
                    d¦  «        g|	¦  «        }	 |d                              ¦   «         d         }n0# t          $ r# |d                              ¦   «         d         }Y nw xY w|                     dd¦  «        }d|v r^t          j        j                             t%          |d         ¦  «                             ¦   «         | j        j        ¦  «        | j        _        d}d|v �r(|d         }t-          |t.          ¦  «        s|g}g }|D ]²}t%          |¦  «                             ¦   «         }t-          |t0          ¦  «        r#|                     t5          |¦  «        ¦  «         Œ[|dk    rd}Œd|dk    rd}Œm|t          j        j        v r"t          j        j        |         | j        _        Œ¢d}
t7          |
¦  «        ‚t          |¦  «        dk    rt1          |¦  «        | j        _        |r#t9          | j        j        ¦  «        | j        _        |                     ¦   «         }|r|                     d	¦  «        �¯Ö| j                             |||||¬¦  «        g}|dd…                              ¦   «         |fS )z‹
        page
        : PAGE_SYM S* IDENT? pseudo_page? S*
            '{' S* declaration [ ';' S* declaration ]* '}' S*
        ;
        NFz@pagerÁ   r¹   Ú_r  r  r  rò   rÜ   Ú*r   z-pdf-frame-borderz-pdf-page-sizeÚsizer   TÚportraitzUnknown size value for @pageé   )ra   rd   )r  r  r  rù   rÙ   rú   rû   rÞ   rÆ   rK   rs   ÚvaluesÚ	ExceptionÚpopitemÚgetÚ	xhtml2pdfÚdefaultÚPML_PAGESIZESr\   ÚlowerÚcÚpageSizer§   ÚlistÚtuplerç   r   ÚRuntimeErrorr   re   )r   r   r_   rd   ra   r‘   r  r]   rþ   rà   rœ   rÿ   Únpropertiesrá   r%  ÚsizeListr0   ÚvalueStrs                     r   r  zCSSParser._parseAtPageó  s*  € ð ˆØˆ
ØˆàˆØ•#�g‘,”,�.�.Ô!×(Ò(Ñ*Ô*ˆØ—N’N 3Ñ'Ô'‰	ˆˆcØˆr�ˆrŒ7�cŠ>ˆ>Ø"Ÿnšn¨S°°°¬WÑ5Ô5‰OˆJ˜Ø˜#‘: 
Ñ*ˆDˆDàˆJð
  ÐØ�jŠj‰lŒlˆØˆ
ð �~Š~˜cÑ"Ô"ð 	4Ø1ˆCØ—/’/ # s¨FÑ3Ô3Ð3Ø�!�"�"Œg�nŠnÑÔˆàñ 9	˜#Ÿ.š.¨Ñ-Ô-ñ 9	Ø�~Š~˜cÑ"Ô"ð 6Eà!%×!5Ò!5°cÑ!:Ô!:‘��YØÐ(Ø&×-Ò-¨iÑ8Ô8Ð8ùà#'×#>Ò#>Ø—J’J‘L”L¨ð $?ñ $ô $Ñ ��[ð ˜kÑ)�
ð �Ø!�
àð EØ!œ_×4Ò4Øœ×1Ò1°#Ñ6Ô6Ð7¸ñô �Fð6Ø% aœy×/Ò/Ñ1Ô1°!Ô4˜˜øÝ$ð 6ð 6ð 6Ø% aœy×0Ò0Ñ2Ô2°1Ô5˜˜˜ð6øøøà!%§¢Ð*=¸tÑ!DÔ!D�Jà# tÐ+Ð+Ý&/Ô&7Ô&E×&IÒ&IÝ˜DÐ!1Ô2Ñ3Ô3×9Ò9Ñ;Ô;¸T¼V¼_ñ'ô '�D”F”Oð $�Ø˜T�>‘>Ø œ<�DÝ% d­DÑ1Ô1ð &Ø $˜v˜Ø!�HØ!%ð 4ð 4˜Ý#& u¡:¤:×#3Ò#3Ñ#5Ô#5˜Ý% e­UÑ3Ô3ð 
4Ø$ŸOšO­G°E©N¬NÑ;Ô;Ð;Ð;Ø%¨Ò4Ð4Ø*.˜K˜KØ%¨Ò3Ð3Ø*/˜K˜KØ%­Ô):Ô)HÐHÐHÝ.7Ô.?Ô.MÈhÔ.W˜DœFœO˜Oà"@˜CÝ".¨sÑ"3Ô"3Ð3å˜8‘}”}¨Ò)Ð)Ý*/°©/¬/˜œœà"ð EÝ*3°D´F´OÑ*DÔ*D˜œœà—*’*‘,”,ˆCðs ð 9	˜#Ÿ.š.¨Ñ-Ô-ñ 9	ðx ŒO×"Ò"Ø�j $°KÈJð #ñ ô ð
ˆð �1�2�2Œw�~Š~ÑÔ Ð'Ð's   Æ0 G Ç*G>Ç=G>c                ó<  — |t          d¦  «        d…                              ¦   «         }|                      |¦  «        \  }}|                      |                     ¦   «         ¦  «        \  }}| j                             ||¦  «        g}|                     ¦   «         |fS )zXXX Proprietary for PDF.z@frame N)r  r  r  rÞ   rÆ   ÚatFrame)r   r   Úboxrà   rá   s        r   r  zCSSParser._parseAtFrameW  s…   € à•#�i‘.”.Ð"Ð"Ô#×*Ò*Ñ,Ô,ˆØ—>’> #Ñ&Ô&‰ˆˆSØ×5Ò5°c·j²j±l´lÑCÔC‰ˆˆZØ”/×)Ò)¨#¨zÑ:Ô:Ð;ˆØ�zŠz‰|Œ|˜VÐ#Ð#r   c                óÂ   — |t          d¦  «        d …                              ¦   «         }|                      |¦  «        \  }}| j                             |¦  «        g}||fS )Nz
@font-face)r  r  rÞ   rÆ   rg   )r   r   rà   rá   s       r   r  zCSSParser._parseAtFontFace_  s_   € Ø•#�lÑ#Ô#Ð%Ð%Ô&×-Ò-Ñ/Ô/ˆØ×5Ò5°cÑ:Ô:‰ˆˆZØ”/×,Ò,¨ZÑ8Ô8Ð9ˆØ�Fˆ{Ðr   c                ó´  — |}|                       |dd …         ¦  «        \  }}|€d}|                      |||¦  «        ‚| j                             || |¦  «        \  }}|t          u rÞ|                     d¦  «        }|dk     rd }|d |…                              d¦  «        }|dk     rd }|�&||k     r ||dz   d …                              ¦   «         }nt|€|dd…         }ng|�L||d …         }	 |                      |¦  «        \  }}nA# | j        $ r |                      |¦  «        \  }}	Y nw xY wd}|  	                    |||¦  «        ‚|                     ¦   «         |fS )NrÁ   z+At-rule expected an identifier for the ruler  r   r  rÂ   zUnable to ignore @-rule block)
r  rÙ   rÆ   rj   ri   r›   r  rÞ   rØ   ÚParserError)
r   r   r‘   rj   rœ   rá   ÚsemiIdxÚblockIdxrE   r>   s
             r   r  zCSSParser._parseAtIdente  sš  € ØˆØ—~’~ c¨!¨"¨"¤gÑ.Ô.‰ˆ�Øˆ?Ø?ˆCØ—/’/ # s¨FÑ3Ô3Ð3à”o×-Ò-¨g°t¸SÑAÔA‰ˆˆVà•^Ð#Ð#ð —h’h˜s‘m”mˆGØ˜Š{ˆ{Ø�Ø˜8˜G˜8”}×)Ò)¨#Ñ.Ô.ˆHØ˜!Š|ˆ|Ø�àÐ" w°Ò'9Ð'9Ø˜' A™+˜-˜-Ô(×/Ò/Ñ1Ô1��ØÐ!à˜"˜R˜%”j��ØÐ%à˜(˜)˜)”n�ðAà(,×(CÒ(CÀCÑ(HÔ(HÑ%�C˜˜øØ”ð Að Að Aà&*×&;Ò&;¸CÑ&@Ô&@‘O�C˜˜˜ðAøøøð 6�Ø×&Ò& s¨C°Ñ8Ô8Ð8à�zŠz‰|Œ|˜VÐ#Ð#s   Ã*D Ä"D(Ä'D(c                óÄ   — |                       |¦  «        \  }}|                      |                     ¦   «         ¦  «        \  }}| j                             ||¦  «        }||fS )z‰
        ruleset
        : selector [ ',' S* selector ]*
            '{' S* declaration [ ';' S* declaration ]* '}' S*
        ;
        )Ú_parseSelectorGrouprÞ   r  rÆ   rK   )r   r   rJ   rà   rá   s        r   rü   zCSSParser._parseRuleset�  s[   € ð ×1Ò1°#Ñ6Ô6‰ˆˆYØ×5Ò5°c·j²j±l´lÑCÔC‰ˆˆZØ”×(Ò(¨°JÑ?Ô?ˆØ�Fˆ{Ðr   c                ó   — g }|d d…         dvrm|                       |¦  «        \  }}|€nR|                     |¦  «         |                     d¦  «        r|dd …                              ¦   «         }|d d…         dv°m||fS )NrÁ   >   r   r  r  ú(r    r  ú]r¿   )Ú_parseSelectorrç   rù   r  )r   r   rJ   rs   s       r   rA  zCSSParser._parseSelectorGroup�  sœ   € Øˆ	Ø�"�1�"ŒgÐ?Ð?Ð?Ø ×/Ò/°Ñ4Ô4‰MˆC�ØÐØØ×Ò˜XÑ&Ô&Ð&Ø�~Š~˜cÑ"Ô"ð 'Ø˜!˜"˜"”g—n’nÑ&Ô&�ð �"�1�"ŒgÐ?Ð?Ð?ð �Iˆ~Ðr   c                ó^  — |                       |¦  «        \  }}t          |¦  «        }|dd…         dvrå| j        D ]B}|                     |¦  «        r+|t          |¦  «        d…                              ¦   «         } nŒCd}|                       |¦  «        \  }}t          |¦  «        |k    rF|dd…         }|r$|dd…         dvr|dd…         }|r|dd…         dv°|                     ¦   «         dfS | j                             |||¦  «        }|dd…         dv°å|                     ¦   «         |fS )z^
        selector
        : simple_selector [ combinator simple_selector ]*
        ;
        NrÁ   >	   r   r  r  rC  r    r¿   r  r¸   rD  ú )Ú_parseSimpleSelectorr  r½   rù   r  rÆ   rp   )r   r   rs   ÚsrcLenrn   ro   s         r   rE  zCSSParser._parseSelector¨  sh  € ð ×1Ò1°#Ñ6Ô6‰ˆˆXÝ�S‘”ˆØ�"�1�"ŒgÐIÐIÐIØ Ô2ð ð �Ø—>’> (Ñ+Ô+ð Ø�c (™mœm˜o˜oÔ.×5Ò5Ñ7Ô7�CØ�Eðð �Ø!×6Ò6°sÑ;Ô;‰NˆC�õ �3‰xŒx˜6Ò!Ð!Ø˜!˜"˜"”g�Øð "Ø˜˜˜”GÐ#OÐOÐOà˜a˜b˜bœ'�Cð ð "Ø˜˜˜”GÐ#OÐOÐOð —z’z‘|”| TÐ)Ð)à”×7Ò7¸À(ÈIÑVÔVˆHð% �"�1�"ŒgÐIÐIÐIð( �zŠz‰|Œ|˜XÐ%Ð%r   c                óz  — |                      ¦   «         }|                      | j        |¦  «        \  }}|                      | j        |¦  «        \  }}|rn-|dd…         | j        v rd}nd}|                      |||¦  «        ‚| j                             ||¦  «        }| j                             |¦  «        }|rï|dd…         | j        v rÞ|                      | j	        |¦  «        \  }}|�| 
                    |¦  «         ŒI|                      | j        |¦  «        \  }}|�|                     |¦  «         Œ|                     d¦  «        r|                      ||¦  «        \  }}n0|                     d¦  «        r|                      ||¦  «        \  }}nn|r|dd…         | j        v °Þ|                      ¦   «         |fS )z‚
        simple_selector
        : [ namespace_selector ]? element_name? [ HASH | class | attrib | pseudo ]* S*
        ;
        NrÁ   r$  z#Selector name or qualifier expectedr¸   r¹   )r  Ú_getMatchResultÚre_namespace_selectorÚre_element_namerº   rÙ   rÆ   rN   rs   Úre_hashr   Úre_classr"   rù   Ú_parseSelectorAttributeÚ_parseSelectorPseudo)	r   r   r‘   rM   r,   rœ   rs   Úhash_r!   s	            r   rH  zCSSParser._parseSimpleSelectorÆ  sÚ  € ð —’‘”ˆØ×,Ò,¨TÔ-GÈÑMÔM‰ˆ�#Ø×(Ò(¨Ô)=¸sÑCÔC‰	ˆˆcØð 	4ØØ��!�ŒW˜Ô/Ð/Ð/ØˆDˆDà7ˆCØ—/’/ # s¨FÑ3Ô3Ð3àŒ×5Ò5°hÀÑEÔEˆØ”?×+Ò+¨DÑ1Ô1ˆØð 	�c˜"˜1˜"”g Ô!8Ð8Ð8Ø×-Ò-¨d¬l¸CÑ@Ô@‰JˆE�3ØÐ Ø×"Ò" 5Ñ)Ô)Ð)Øà×.Ò.¨t¬}¸cÑBÔB‰KˆF�CØÐ!Ø×!Ò! &Ñ)Ô)Ð)Øà�~Š~˜cÑ"Ô"ð Ø $× <Ò <¸SÀ(Ñ KÔ K‘��X�XØ—’ Ñ$Ô$ð Ø $× 9Ò 9¸#¸xÑ HÔ H‘��X�Xàð! ð 	�c˜"˜1˜"”g Ô!8Ð8Ð8ð$ �zŠz‰|Œ|˜XÐ%Ð%r   c                ó°  — |}|                      d¦  «        sd}|                      |||¦  «        ‚|dd…                              ¦   «         }|                      | j        |¦  «        \  }}|                      |¦  «        \  }}|                     ¦   «         }|€d}|                      |||¦  «        ‚|�| j                             ||¦  «        }| j        D ]}|                      |¦  «        r nŒd}|t          |¦  «        d…                              ¦   «         }|rN|                      |¦  «        \  }}|€3|  
                    |¦  «        \  }}|€d}|                      |||¦  «        ‚nd}|                      d¦  «        sd	}|                      |||¦  «        ‚|dd…         }|r|                     |||¦  «         n|                     |¦  «         ||fS )
z¡
        attrib
        : '[' S* [ namespace_selector ]? IDENT S* [ [ '=' | INCLUDES | DASHMATCH ] S*
            [ IDENT | STRING ] S* ]? ']'
        ;
        r¸   z(Selector Attribute opening '[' not foundrÁ   Nz"Expected a selector attribute namer   z#Expected a selector attribute valuerD  z(Selector Attribute closing ']' not found)rù   rÙ   r  rK  rL  r  rÆ   rN   rµ   r  r  r)   r%   )	r   r   rs   r‘   rœ   rM   r$   r'   r(   s	            r   rP  z!CSSParser._parseSelectorAttributeí  sý  € ð ˆØ�~Š~˜cÑ"Ô"ð 	4Ø<ˆCØ—/’/ # s¨FÑ3Ô3Ð3Ø�!�"�"Œg�nŠnÑÔˆà×,Ò,¨TÔ-GÈÑMÔM‰ˆ�#ØŸš sÑ+Ô+‰ˆ�#à�jŠj‰lŒlˆàÐØ6ˆCØ—/’/ # s¨FÑ3Ô3Ð3ØÐØ”×=Ò=¸hÈÑQÔQˆHàÔ)ð 	ð 	ˆBØ�~Š~˜bÑ!Ô!ð Ø�ðð ˆBØ•#�b‘'”'�)�)Œn×#Ò#Ñ%Ô%ˆàð 	Ø"Ÿnšn¨SÑ1Ô1‰OˆJ˜ØÐ!Ø"&§/¢/°#Ñ"6Ô"6‘�
˜CØÐ%Ø?�CØŸ/š/¨#¨s°FÑ;Ô;Ð;øàˆJà�~Š~˜cÑ"Ô"ð 	4Ø<ˆCØ—/’/ # s¨FÑ3Ô3Ð3Ø�!�"�"Œgˆàð 	,Ø×*Ò*¨8°R¸ÑDÔDÐDÐDà×!Ò! (Ñ+Ô+Ð+Ø�Hˆ}Ðr   c                ó®  — |}|                      d¦  «        sd}|                      |||¦  «        ‚t          j        d|t          j        t          j        z  ¦  «                             d¦  «        }|                      |¦  «        \  }}|sd}|                      |||¦  «        ‚|                      d¦  «        r…|dd…                              ¦   «         }|  	                    |d¬	¦  «        \  }}|                      d
¦  «        sd}|                      |||¦  «        ‚|dd…         }| 
                    ||¦  «         n|                     |¦  «         ||fS )zE
        pseudo
        : ':' [ IDENT | function ]
        ;
        r¹   zSelector Pseudo ':' not foundz^:{1,2}(.*)rÁ   z$Selector Pseudo identifier not foundrC  NT©Úreturn_listr    z.Selector Pseudo Function closing ')' not found)rù   rÙ   r
   ÚsearchÚMÚSÚgroupr  r  Ú_parseExpressionr1   r-   )r   r   rs   r‘   rœ   r,   Úterms          r   rQ  zCSSParser._parseSelectorPseudo!  sS  € ð ˆØ�~Š~˜cÑ"Ô"ð 	4Ø1ˆCØ—/’/ # s¨FÑ3Ô3Ð3ÝŒi˜ s­B¬Dµ2´4©KÑ8Ô8×>Ò>¸qÑAÔAˆà—N’N 3Ñ'Ô'‰	ˆˆcØð 	4Ø8ˆCØ—/’/ # s¨FÑ3Ô3Ð3à�>Š>˜#ÑÔð 
	%à�a�b�b”'—.’.Ñ"Ô"ˆCØ×-Ò-¨c¸tÐ-ÑDÔD‰IˆC�Ø—>’> #Ñ&Ô&ð 8ØF�Ø—o’o c¨3°Ñ7Ô7Ð7Ø�a�b�b”'ˆCØ×&Ò& t¨TÑ2Ô2Ð2Ð2à×Ò˜tÑ$Ô$Ð$à�Hˆ}Ðr   TrÜ   c               óÀ  — |}|                      d¦  «        r|dd …         d}}n|rd}|                      |||¦  «        ‚g }|                     ¦   «         }|d d…         dvr®|                      |¦  «        \  }}|                      d¦  «        rd|dd …         z   }ŒG|€|dd …                              ¦   «         }nT|                     |¦  «         |                      d¦  «        r|dd …                              ¦   «         }nn|d d…         dv°®|r8|                      d	¦  «        sd
}|                      |||¦  «        ‚|dd …         }|                     ¦   «         |fS )Nr  rÁ   Tz'Declaration group opening '{' not found>	   r   r  r  rC  r    r¿   rò   r¸   rD  r$  z	-nothing-r  r  z'Declaration group closing '}' not found)rù   rÙ   r  Ú_parseDeclarationrç   )r   r   rÝ   r‘   rœ   rà   rë   s          r   rÞ   z CSSParser._parseDeclarationGroupB  s�  € ØˆØ�>Š>˜#ÑÔð 	4Ø˜a˜b˜bœ' 4�ˆCˆCØð 	4Ø;ˆCØ—/’/ # s¨FÑ3Ô3Ð3àˆ
Ø�jŠj‰lŒlˆØ�"�1�"ŒgÐIÐIÐIØ#'×#9Ò#9¸#Ñ#>Ô#>Ñ ˆC�ð �~Š~˜cÑ"Ô"ð Ø! C¨¨¨¤GÑ+�ØàÐ&Ø˜!˜"˜"”g—n’nÑ&Ô&�ØØ×Ò˜oÑ.Ô.Ð.Ø�~Š~˜cÑ"Ô"ð Ø˜!˜"˜"”g—n’nÑ&Ô&��àð �"�1�"ŒgÐIÐIÐIð" ð 	Ø—>’> #Ñ&Ô&ð 8Ø?�Ø—o’o c¨3°Ñ7Ô7Ð7Ø�a�b�b”'ˆCà�zŠz‰|Œ|˜ZÐ'Ð'r   c                óî   — |                       |¦  «        \  }}|�V|                     ¦   «         }|dd…         dv r|dd…                              ¦   «         }|                      ||¦  «        \  }}nd}||fS )zb
        declaration
        : ident S* ':' S* expr prio?
        | /* empty */
        ;
        NrÁ   >   r¹   r´   )r  r  ræ   )r   r   rê   rë   s       r   r^  zCSSParser._parseDeclaratione  s…   € ð "Ÿ^š^¨CÑ0Ô0Ñˆ�sàÐ$Ø—*’*‘,”,ˆCà�2�A�2Œw˜*Ð$Ð$ð ˜!˜"˜"”g—n’nÑ&Ô&�à#'×#AÒ#AÀ#À}Ñ#UÔ#UÑ ˆC��à"ˆOà�OÐ#Ð#r   c                óØ   — |                       |¦  «        \  }}|                      | j        |¦  «        \  }}|                     ¦   «         }| j                             |||¬¦  «        }||fS )Nrt   )r[  rK  Úre_importantr  rÆ   rw   )r   r   rê   Úexprru   rë   s         r   ræ   z#CSSParser._parseDeclarationProperty~  st   € à×)Ò)¨#Ñ.Ô.‰	ˆˆTð ×-Ò-¨dÔ.?ÀÑEÔE‰ˆ	�3Ø�jŠj‰lŒlˆàœ/×2Ò2Ø˜4¨9ð 3ñ 
ô 
ˆð �OÐ#Ð#r   FrU  c               óÊ  — |                       |¦  «        \  }}d}|dd…         dvr–| j        D ]0}|                     |¦  «        r|t          |¦  «        d…         } nŒ1d}|                       |                     ¦   «         ¦  «        \  }}|t
          u rn(| j                             |||¦  «        }|dd…         dv°–|€"|r | j                             |dd¦  «        }||fS ||fS )zB
        expr
        : term [ operator term ]*
        ;
        NrÁ   >   r   r  r  r    r  r¸   rD  rG  )Ú_parseExpressionTermrÀ   rù   r  r  ri   rÆ   r{   )r   r   rV  r\  ÚoperatorÚterm2s         r   r[  zCSSParser._parseExpression‹  s  € ð ×-Ò-¨cÑ2Ô2‰	ˆˆTØˆØ�"�1�"ŒgÐ?Ð?Ð?Ø Ô4ð ð �Ø—>’> (Ñ+Ô+ð Ø�c (™mœm˜o˜oÔ.�CØ�Eðð �Ø×2Ò2°3·:²:±<´<Ñ@Ô@‰JˆC�Ø�Ð&Ð&ØØ”?×/Ò/°°hÀÑFÔFˆDð �"�1�"ŒgÐ?Ð?Ð?ð Ð ÐØ”?×/Ò/°°d¸DÑAÔAˆDØ˜�9ÐØ�DˆyÐr   c                ó
  — |}|                       | j        |¦  «        \  }}|�O|                       | j        |¦  «        \  }}| j                             ||¦  «        }|                     ¦   «         |fS |                      || j        ¦  «        \  }}|�0| j                             |¦  «        }|                     ¦   «         |fS |                      |¦  «        \  }}|�0| j         	                    |¦  «        }|                     ¦   «         |fS |                       | j
        |¦  «        \  }}|�z|                      |d¬¦  «        \  }}|d         dk    rd}|                      |||¦  «        ‚|dd…                              ¦   «         }| j                             ||¦  «        }||fS |                       | j        |¦  «        \  }}|�0| j                             |¦  «        }|                     ¦   «         |fS |                       | j        |¦  «        \  }}|�0| j                             |¦  «        }|                     ¦   «         |fS |                       | j        |¦  «        \  }}|                      |¦  «        \  }}|�M|�| j                             ||¦  «        }| j                             |¦  «        }|                     ¦   «         |fS |                       | j        |¦  «        \  }}|�0| j                             |¦  «        }|                     ¦   «         |fS |                       | j        |¦  «        \  }}|�0| j         	                    |¦  «        }|                     ¦   «         |fS | j                             |¦  «        S )a  
        term
        : unary_operator?
            [ NUMBER S* | PERCENTAGE S* | LENGTH S* | EMS S* | EXS S* | ANGLE S* |
            TIME S* | FREQ S* | function ]
        | STRING S* | IDENT S* | URI S* | RGB S* | UNICODERANGE S* | hexcolor
        ;
        NTrU  r   r    z1Terminal function expression expected closing ')'rÁ   )rK  Úre_numÚre_unitrÆ   r�   r  r  Úre_urir…   r‡   Úre_functiontermr[  rÙ   r‹   Úre_rgbcolorrƒ   Úre_unicoderanger‰   rL  r  rN   r~   Úre_unicodeidÚre_unicodestrrŽ   )	r   r   r‘   rá   r€   r\  Úparamsrœ   rM   s	            r   rd  zCSSParser._parseExpressionTerm¤  sQ  € ð ˆà×*Ò*¨4¬;¸Ñ<Ô<‰ˆ�ØÐØ×-Ò-¨d¬l¸CÑ@Ô@‰JˆE�3Ø”?×-Ò-¨f°eÑ<Ô<ˆDØ—:’:‘<”< Ð%Ð%à—o’o c¨4¬;Ñ7Ô7‰ˆ�ØÐà”?×*Ò*¨6Ñ2Ô2ˆDØ—:’:‘<”< Ð%Ð%à—o’o cÑ*Ô*‰ˆ�ØÐØ”?×-Ò-¨fÑ5Ô5ˆDØ—:’:‘<”< Ð%Ð%à×*Ò*¨4Ô+?ÀÑEÔE‰ˆ�ØÐØ×/Ò/°ÀÐ/ÑFÔF‰KˆC�Ø�1Œv˜Š}ˆ}ØI�Ø—o’o c¨3°Ñ7Ô7Ð7Ø�a�b�b”'—.’.Ñ"Ô"ˆCØ”?×/Ò/°¸Ñ?Ô?ˆDØ˜�9Ðà×*Ò*¨4Ô+;¸SÑAÔA‰ˆ�ØÐØ”?×*Ò*¨6Ñ2Ô2ˆDØ—:’:‘<”< Ð%Ð%à×*Ò*¨4Ô+?ÀÑEÔE‰ˆ�ØÐØ”?×3Ò3°FÑ;Ô;ˆDØ—:’:‘<”< Ð%Ð%à×,Ò,¨TÔ-GÈÑMÔM‰ˆ�#Ø—n’n SÑ)Ô)‰ˆ�ØÐØÐ#Øœ×?Ò?ÀÈ&ÑQÔQ�Ø”?×,Ò,¨VÑ4Ô4ˆDØ—:’:‘<”< Ð%Ð%à×*Ò*¨4Ô+<¸cÑBÔB‰ˆ�ØÐØ”?×,Ò,¨VÑ4Ô4ˆDØ—:’:‘<”< Ð%Ð%à×*Ò*¨4Ô+=¸sÑCÔC‰ˆ�ØÐØ”?×-Ò-¨fÑ5Ô5ˆDØ—:’:‘<”< Ð%Ð%àŒ×*Ò*¨3Ñ/Ô/Ð/r   c                ó:   — |                       | j        ||¦  «        S r   )rK  Úre_ident)r   r   r-  s      r   r  zCSSParser._getIdentê  s   € Ø×#Ò# D¤M°3¸Ñ@Ô@Ð@r   c                óT  — |€| j         }|                     |¦  «        }|r…t          t          d |                     ¦   «         ¦  «        ¦  «        }|r4	 |d         }n,# t
          $ r |                     ¦   «         d         }Y nw xY wd}|||                     ¦   «         d …         fS ||fS )Nr   r   )Ú	re_stringr   r3  ÚfilterÚgroupsr)  r   )r   r   Úrexpressionr-  rá   Ústrress         r   r  zCSSParser._getStringí  s¿   € ØÐØœ.ˆKØ×"Ò" 3Ñ'Ô'ˆØð 		/Ý�6 $¨¯ª©¬Ñ8Ô8Ñ9Ô9ˆFØð ð0Ø# AœY�F�FøÝ ð 0ð 0ð 0Ø#Ÿ]š]™_œ_¨QÔ/�F�F�Fð0øøøð �Ø˜3˜vŸzšz™|œ|˜~˜~Ô.Ð.Ð.Ø˜ˆ|Ðs   ÁA Á$BÂBc                óz   — |                       || j        ¦  «        \  }}|€|                       |¦  «        \  }}||fS r   )r  rj  )r   r   rá   s      r   r
  zCSSParser._getStringOrURIý  s?   € Ø—o’o c¨4¬;Ñ7Ô7‰ˆ�Øˆ>ØŸ/š/¨#Ñ.Ô.‰KˆF�CØ�sˆ{Ðr   c                óš   — |                       |¦  «        }|r1|                     |¦  «        ||                     ¦   «         d …         fS ||fS r   )r   rZ  r   )rw  r   r-  rZ  rá   s        r   rK  zCSSParser._getMatchResult  sO   € à×"Ò" 3Ñ'Ô'ˆØð 	<Ø—<’< Ñ&Ô&¨¨F¯JªJ©L¬L¨N¨NÔ(;Ð;Ð;Ø˜ˆ|Ðr   r   rª   )NN)NrÁ   )ir2   r3   r4   r5   r�   rÙ   rµ   r«   rº   r½   rÀ   r
   ÚIrX  ÚUÚ_reflagsÚi_hexÚ
i_nonasciiÚ	i_unicoder±   Úi_escapeÚ	i_nmstartÚi_nmcharÚi_identr  rr  Úi_unicodeidrn  Úi_unicodestr1Úi_unicodestr2Úi_unicodestrro  Úi_element_namerM  Úi_namespace_selectorrL  Úi_classrO  Úi_hashrN  Ú
i_rgbcolorrl  Úi_nlÚi_escape_nlÚi_string_contentÚ	i_string1Ú	i_string2Úi_stringrt  ÚformatÚi_urirj  Úi_numrh  Úi_unitri  Ú
i_functionÚre_functionÚi_functiontermrk  Úi_unicoderange1Úi_unicoderange2Úi_unicoderangerm  Ú	i_commentrô   Úi_importantra  rš   rË   rÄ   rw   rÆ   rÕ   rÑ   râ   rì   rð   rØ   Ústaticmethodrö   rõ   r÷   rø   rú   r  r  r  r  r  rü   rA  rE  rH  rP  rQ  rÞ   r^  ræ   r[  rd  r  r  r
  rK  r6   r   r   r³   r³     s	  € € € € € € ð/ð /ðj €Jà.WÐ.WÐ.WÐÐWÐWÐWÑWØ4HÐÐHÐHÐHÑHØ.1°3¨ZÐÐ7Ð7Ð7Ñ7Ø5DÐÐDÐDÐDÑDð Œt�b”d‰{˜RœTÑ!€HØ€EØ€JØ# eÑ+€IØˆx˜	Ð#6Ñ7Ô7€Hà�Ø˜z¨8ñô €Ið ˆx˜¨°XÑ>Ô>€HØ1�YÐ1Ð1 HÐ1Ð1Ð1€GØˆrŒz˜' 8Ñ,Ô,€Hà(€KØ�2”:˜k¨8Ñ4Ô4€LØ.€MØ.€MØ�8˜M¨=Ñ9Ô9€LØ�B”J˜|¨XÑ6Ô6€MØ1˜W Q r Tœ]Ð1Ð1Ð1€NØ �b”j °Ñ:Ô:€OØ? 7¨1¨R¨4¤=Ð?Ð?Ð?ÐØ&˜BœJÐ';¸XÑFÔFÐØ�g‰o€GØˆrŒz˜' 8Ñ,Ô,€HØ˜HÑ$€FØˆbŒj˜ Ñ*Ô*€GØ?�eÐ?Ð? EÐ?Ð?°%Ð?Ð?Ð?€JØ�"”*˜Z¨Ñ2Ô2€KØ€DØ Ñ$€KØ�x °¸jÈ(ÑSÔSÐØ Ð#3Ñ3€IØ Ð#3Ñ3€IØˆx˜	 9Ñ-Ô-€HØ�”
˜8 XÑ.Ô.€IØ0×7Ò7Ø�(�(˜<¨°XÑ>Ô>ñô €Eð
 ˆRŒZ˜˜xÑ(Ô(€Fà7ð 
ð ˆRŒZ˜˜xÑ(Ô(€FØ˜'Ñ!€FØˆbŒj˜ Ñ*Ô*€GØ˜5‘€JØ�"”*˜Z¨Ñ2Ô2€KØ˜zÑ)€NØ �b”j °Ñ:Ô:€OØ> Ð>Ð>¨uÐ>Ð>Ð>€OØh€OØ$€NØ �b”j °Ñ:Ô:€Oð 6€IØ�”˜I xÑ0Ô0€JØ$€KØ�2”:˜k¨8Ñ4Ô4€Lð'ð 'ð 'ð 'ð 'ð
 ð  ð  ð&ð &ð &ð �˜-¨Ñ7Ô7€Jð(ð (ð (ðð ð ð&ð ð ð$ð ð ð ð<
"ð 
"ð 
"ð +ð +ð +ðZ ð
ð 
ñ „\ð
ðð ð ð$ð $ð $ðL!ð !ð !ðFð ð ð*7ð 7ð 7ðrb(ð b(ð b(ðH$ð $ð $ðð ð ð&$ð &$ð &$ðT
ð 
ð 
ð	ð 	ð 	ð&ð &ð &ð<%&ð %&ð %&ðN2ð 2ð 2ðhð ð ðB 59ð !(ð !(ð !(ð !(ð !(ðF$ð $ð $ð2$ð $ð $ð 49ð ð ð ð ð ð2B0ð B0ð B0ðLAð Að Að Aðð ð ð ð ð ð ð ðð ð ñ „\ðð ð r   r³   )r5   Ú
__future__r   r
   Úabcr   Útypingr   Úreportlab.lib.pagesizesr   Úxhtml2pdf.defaultr,  Úxhtml2pdf.utilr   Úxhtml2pdf.w3cr   r   r   r   r8   r)  r�   r±   r³   r6   r   r   ú<module>r¨     s€  ððð ð8 #Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à -Ð -Ð -Ð -Ð -Ð -à Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ø $Ð $Ð $Ð $Ð $Ð $ð1ð 1ð 1ð-ð -ð -ð "ð  "ð  "ð  "ð  "ñ  "ô  "ð  "ðFG"ð G"ð G"ð G"ð G"ñ G"ô G"ð G"ð^*'ð *'ð *'ð *'ð *'�Iñ *'ô *'ð *'ð`ð ð ð
kð kð kð kð kñ kô kð kð kð kr   