-ν (ΦiCcs§ dklZdklZdkZdkZdkZydklZWndklZnXdefd„ƒYZ„de d„Z dS((sPassSGMLParser(sbasejoinN(sStringIOsSafeHtmlcsΙtZhdd<dd<dd<dd<dd<dd<dd<dd <dd <dd <dd <dd <dd<dd<dd<dd<dd<dd<dd<dd?dD„Z UdE„Z kdF„Z |dG„ZRS(HNisPsLIsDDsDTsEMsBRsCITEsDFNsQsSTRONGsIMGsHRsTRsTDsTHsCAPTIONsTHEADsTFOOTsTBODYsTABLEsOLsULsDLsCENTERsDIVsPREsSUBsSUPsBIGsSMALLsCODEsBsIsAsTTs BLOCKQUOTEsUsH1sH2sH3sH4sH5sH6sFONTsFORMsHTMLsBODYsEMBEDsAREAsMAPsFRAMEsFRAMESETsIFRAMEsMETAsHEADsJAVAsAPPLETsOBJECTs JAVASCRIPTsLAYERsSTYLEsSCRIPTcse%&||_'ti|||ƒ(h|_)d|_*||_ +||_ ,||_ dS(Ni(s extra_safesselfs _extra_safesPassSGMLParsers__init__sfps _matchDicts _strippingsbases_basesmap_urlss _map_urlss new_windows _new_window(sselfsfps extra_safesbasesmap_urlss new_window((s SafeHtml.pys__init__%s     cs>./|idjo0|iƒn1|id|_dS(Nii(sselfs _strippingsflush(sself((s SafeHtml.pyssafe_start_strip.scsJ34|iƒ5|id|_6|idjo6d|_ndS(Nii(sselfsflushs _stripping(sself((s SafeHtml.pyssafe_end_strip3s csh89tiid|i|fƒ:|idjo.;tiid|ƒ<ti||ƒndS(Ns write[%d] %s is write %s (ssyssstderrswritesselfs _strippingsdatasPassSGMLParser(sselfsdata((s SafeHtml.pyswrite8s cs>?g}@ti|ƒ}A|io |djoB|iddfƒnCx₯|DC]š\}}Dti|ƒ}E|d djo Eq\nFti|ƒd djo Fq\nG|i o*|dd d d d gjo|d djo;HyI|i |d }WnJt j o KnXn|M|i o|dd d d d gjoNt |i |ƒ}nO|dd d d d gjoPdti|ƒ}nQ|io|djo |djo Qq\nR|i||fƒq\WS|SdS(Nsastargets_blankisoni s javascript:sactionshrefssrcslowsrcs backgroundiscid:s#http://www.google.com/url?sa=D&q=%s(s new_attrssstringslowerstagsselfs _new_windowsappendsattrssnamesvalues _map_urlssKeyErrors_basesbasejoinsneo_cgis urlEscape(sselfstagsattrssvaluesnames new_attrs((s SafeHtml.pys cleanup_attrs>s0    : )' csΑUVti|ƒ}Wtii|ƒo1X|iƒYti i d||i fƒnbZti i|ƒo[ti i d|ƒ\n.]ti i|ƒo^ti i d|ƒ_|ii|ƒo`|i|d|i|