+
    	i                        R t ^ RIt^ RIt^ RIt^ RIHt ^ RIHt ^ RIHt ^ RI	H
t
 ^ RIHt ^ RIt^ RIHtHtHt ^ RIHt ^R	IHt ^R
IHt ^RIHt ^RIHt ^RIHtHt R]n         ! R R] 4      t! ! R R4      t" ! R R]PF                  4      t$ ! R R]PF                  4      t% ! R R4      t&R$R lt'R t(R t)R t*R t+ ! R R4      t, ! R  R!],4      t- ! R" R#],4      t.R# )%z+Fetch and decode images in various formats.N)md5)BytesIO)cycle)Path)ElementTree)Image	ImageFileImageOps)parse_color)DEFAULT_OPTIONS)
percentage)LOGGER)SVG)URLFetchingErrorfetchTc                       ] tR t^tRtRtR# )ImageLoadingErrorzhAn error occured when loading an image.

The image data is probably corrupted or in an invalid format.

 N)__name__
__module____qualname____firstlineno____doc____static_attributes__r       W/Users/agent/.openclaw/workspace/venv/lib/python3.14/site-packages/weasyprint/images.pyr   r      s    r   r   c                   ^   a  ] tR t^"t o RRR]3R ltR tR tR
R ltR t	]
R 4       tR	tV tR# )RasterImageNnonec                   Tp\        W4      pWJd   VP                  Vn        R ;r4W n        Vf   / MTV n        VR,          ;V n        p	VR,          V n        RVP                  9   d   VP                  R4      pM"VP                  R9   d   VP                  R4      pVP                  V n        VP                  V n	        VP                  V n
        V P                  ^ 8w  d   V P                  V P                  ,          M\        P                  V n        VR,          ;V n        p
\        VR/ 4      P!                  R4      pV P                  R	8H  ;'       d    VR JV n        VP                  R9   dv   R
V n        Ve   V
'       g   V	e^   \$        P&                  ! 4       pRR
RV
/pV P                  e   V P                  VR&   VP(                  ! V3/ VB  VP+                  4       pR pM_RV n        Ve   V
'       g   VP                  R8w  d<   \$        P&                  ! 4       pVP)                  VRV
R7       VP+                  4       pR pV P-                  W44      V n        R # )Njpeg_qualitydpitransparencyRGBARGBoptimize_imagesappAPP14CMYKJPEGformatoptimizequalityPNGr*   r+   )1PI)r)   MPO)rotate_pillow_imager*   id_cache_jpeg_quality_dpiinfoconvertmodewidthheightmathinfratior+   getattrgetinvert_colorsior   savegetvaluecache_image_data
image_data)selfpillow_imageimage_idrG   filenamecacheorientationoptionsoriginal_pillow_imager    r+   app14
image_files   &&&&&&&&     r   __init__RasterImage.__init__#   s    !-*<E 4"7">">L$((J!Mbu,3N,CC\EN	\...'//7L/1'//6L %%	!''
"))37;;!3Cdjj4;;.
#*+<#==
 -ub9==gF!YY&0FFU$5F/1 DK!X1IZZ\
#VZB%%1)-););GI&!!*88'002
DK!X1D1D1MZZ\
!!*UX!N'002
//
Er   c                d    V P                   V,          V P                  V,          V P                  3# N)r;   r<   r?   )rH   
resolution	font_sizes   &&&r   get_intrinsic_sizeRasterImage.get_intrinsic_sizeW   s%    zzJ&j(@$**LLr   c                l   V P                   ^ 8:  g   V P                  ^ 8:  d   R# VR,          pVR8H  p^pV P                  '       d   Rp\        W!P                  ^ ,          ^ ,          ,          V,          4      p	\        W1P                  ^,          ^,          ,          V,          4      p
\        V P                   V	,          V P                  V
,          4      pWP                  8  d   V P                  V,          pVP                  WV4      pVP                  V^ ^ V) ^ V4       VP                  V4       R# )    Nimage_renderingautogqq?)	r;   r<   r7   absctmmax	add_image	transformdraw_x_object)rH   streamconcrete_widthconcrete_heightstyler\   interpolater?   pt_to_inwidth_inchesheight_inchesr!   
image_names   &&&&&        r   drawRasterImage.drawZ   s    ::?dkkQ. 12%/999!H~

1a0@@8KLL**Q-2B BX MNMdjj</}1LMCYY		C%%d?
Aq?"2A	HZ(r   c                    V'       d   \        V4      # V P                   R T R V P                  ;'       g    R 2p\        V P                  WA4      # )- )LazyLocalImager4   r7   	LazyImager5   )rH   datarK   slotkeys   &&&& r   rF   RasterImage.cache_image_datan   sF    !(++WWIQtfAdiioo2%67CT[[#44r   c                   V^8X  d   V P                   V P                  rCEM\        P                  ! \        P
                  ! V P                  P                  4      4      p\        ^\        V P                   V,          4      4      p\        ^\        V P                  V,          4      4      pVP                  W434       \        P
                  ! 4       pVP                  WeP                  V P                  R7       VP                   VP                  rCV P                  VP                  4       4      V n        V P                   R"9   d   RpMKV P                   R#9   d   RpM7V P                   R8X  d   RpM#\"        P$                  ! RV P                   4       Rp\&        P(                  ! RRR	R
RTRTRTR^RV'       d   RMR/4      pV P                  R8X  dS   V P*                  '       d   \&        P,                  ! R$4      VR&   RVR&   \&        P.                  ! V P                  .V4      # RVR&   \&        P(                  ! R^RV/4      VR&   V P                   R"9   d   ^VR,          R&   V P                   R%9   d   \        P                  ! \        P
                  ! V P                  P                  4      4      p	V	P1                  R4      p
V	P3                  V P                   RR& 4      p	V P5                  V	4      pV P5                  V
4      pV P                  VRR7      p\&        P.                  ! V.RRRRR	R
R\&        P(                  ! R^RV/4      RTRTRRR^RV'       d   RMR/	R7      VR &   MMV P5                  \        P                  ! \        P
                  ! V P                  P                  4      4      4      p\&        P.                  ! V P                  VR!R7      .V4      # )'   r.   z
/DeviceRGBz/DeviceGrayr(   z/DeviceCMYKzUnknown image mode: %sTypez/XObjectSubtypez/ImageWidthHeight
ColorSpaceBitsPerComponentInterpolatetruefalser)   Decodez
/DCTDecodeFilterz/FlateDecode	PredictorColumnsDecodeParmsColorsANstreamalpha)ru   )extraSMaskrd   )r$   r#   )LLA)ry   r[   ry   r[   ry   r[   ry   r[   )r#   r   )r;   r<   r   openrC   r   rG   rt   r`   round	thumbnailrD   r*   r+   rF   rE   r:   r   warningpydyf
DictionaryrB   ArrayStream
getchannelr9   _get_png_data)rH   rh   	dpi_ratior;   r<   r   rQ   color_spacer   rI   alphapng_data
alpha_datard   s   &&&           r   get_x_objectRasterImage.get_x_objectu   s@   > JJ6

2::doo.B.B#CDI5i!789EE$++	"9:;F0JNN#3#3dmm  M%OOY-=-=6"33J4G4G4IJDO99'&KYY+%'KYY& 'KNN3TYY?&K  JxUf+[6g"
  ;;& !!!"'++j"9h*E(O<< 1599(h$// u	1
 	 m 99'-.E- *99& ::bjj1E1E&FGL ++C0E'//		#2?L)),7H++E2J**:M*JF"\\6(.
8u//u1   &m"Av'; E'N ))

2::doo&:&:;<>H ||T228(2KLeTTr   c                    \        4       pV P                  VR R7       VP                  ^4       . pVP                  ^4      pV'       d   \        P
                  ! RV4      w  pVP                  ^4      pVR8X  d"   VP                  VP                  V4      4       M VP                  V\        P                  4       VP                  ^\        P                  4       VP                  ^4      pK  RP                  V4      # )r-   )r*   z!Is   IDATr   )
r   rD   seekreadstructunpackappendrC   SEEK_CURjoin)rI   rQ   r   raw_chunk_lengthchunk_length
chunk_types   &     r   r   RasterImage._get_png_data   s    Y
*U3 	%??1- #MM$0@AML#+JW$
 =>bkk:OOAr{{+)q1xx!!r   )r5   r7   r6   r*   r<   r4   rG   rB   r:   r+   r?   r;   )Nsource)r   r   r   r   r   rR   rX   rm   rF   r   staticmethodr   r   __classdictcell____classdict__s   @r   r   r   "   sB     DH2FhM)(5QUf " "r   r   c                   B   a a ] tR t^t oV 3R lt]R 4       tRtVtV ;t	# )rs   c                D   < \         SV `  4        W n        Wn        W1V&   R # rU   )superrR   _keyr5   )rH   rL   rv   rt   	__class__s   &&&&r   rR   LazyImage.__init__   s    	c
r   c                <    V P                   V P                  ,          # rU   r5   r   rH   s   &r   rt   LazyImage.data   s    {{499%%r   r   
r   r   r   r   rR   propertyrt   r   r   __classcell__r   r   s   @@r   rs   rs      s#      & & &r   rs   c                   B   a a ] tR t^t oV 3R lt]R 4       tRtVtV ;t	# )rr   c                0   < \         SV `  4        Wn        R # rU   )r   rR   	_filename)rH   rK   r   s   &&r   rR   LazyLocalImage.__init__   s    !r   c                H    \        V P                  4      P                  4       # rU   )r   r   
read_bytesr   s   &r   rt   LazyLocalImage.data   s    DNN#..00r   )r   r   r   s   @@r   rr   rr      s#     " 1 1 1r   rr   c                   2   a  ] tR t^t o R tR tR tRtV tR# )SVGImagec                x    V'       d   VP                   MR p\        WWS4      V n        W n        W0n        W@n        R # rU   )font_configr   _svg	_base_url_url_fetcher_context)rH   treebase_urlurl_fetchercontextr   s   &&&&& r   rR   SVGImage.__init__   s/    -4g))$A	!'r   c                   V P                   P                  V4      w  r4R W439   d}   V P                   P                  4       pV'       dX   V^,          '       dI   V^,          '       d:   V^,          V^,          ,          pV'       d
   W6,          pM/V'       d	   WF,          pMR pMV'       d   V'       d
   W4,          pM^pW4V3# rU   )r   rX   get_viewbox)rH   image_resolutionrW   r;   r<   viewboxr?   s   &&&    r   rX   SVGImage.get_intrinsic_size  s    		44Y?E?"ii++-G71::'!**
WQZ/"]F"NEvNEEe##r   c                    V P                   P                  WW0P                  V P                  4       R#   \         dE   p\
        P                  ! R T P                  4       \
        P                  ! RTR7        Rp?R# Rp?ii ; i)zFailed to render SVG image %sz Error while rendering SVG image:exc_infoN)r   rm   r   r   BaseExceptionr   errordebug)rH   rd   re   rf   _style	exceptions   &&&&& r   rm   SVGImage.draw  sa    	QIINN  	QLL8$..ILL;iPP	Qs   15 B 9A??B)r   r   r   r   N)	r   r   r   r   rR   rX   rm   r   r   r   s   @r   r   r      s      $$Q Qr   r   c           	        W09   d	   W,          #  \        W4      ;_uu_ 4       pVP                  4       pT;'       g    VP                  p	RRR4       Rp
. pX	R8X  d$    \        P                  ! X4      p\        WW4      p
V
fd    \        P                  ! \        X4      4      p\        VP                  4       RR7      P                  4       p\        WVXP                  V Wb4      p
M WV&   V
#   + '       g   i     L; i  \         d   pTP                  T4        Rp?LRp?ii ; i  \         dY   pT	R8X  d   \         T^ ,          h \        P                  ! X4      p\        YY4      p
 Rp?L  \         d	    \         Thi ; iRp?ii ; i  \"        \         3 d=   p\$        P&                  ! RTT4       \$        P(                  ! RTR7       Rp
 Rp?LRp?ii ; i)z(Get an Image instance from an image URI.Nzimage/svg+xmlF)usedforsecurityzFailed to load image at %r: %szError while loading image:r   )r   r   content_typer   
fromstringr   	Exceptionr   r   r   r   r   encode	hexdigestr   pathr   r   r   r   r   )rL   r   rN   urlforced_mime_typer   rM   response
bytestring	mime_typeimagesvg_exceptionsr   svg_exceptionrI   rJ   raster_exceptionr   s   &&&&&&&           r   get_image_from_urir     s    |z';$$!J(AAH,A,AI % '5"--j9 KA =*$zz'**=> szz|UCMMO# Ju*# 4 #JLS %$  5%%m445  
B/+1BBB&11*=D$TEE  B+1AAB
B$ /0 5sIF1IFs   F 'C.
F "D  F D* $AF .C>	9F D'D"F "D''F *F5F"E2-F 2FFFF G!2GGc                j   V P                   pVR8X  d)   RV P                  9   d   \        P                  ! V 4      p MqVR8w  dk   Vw  r4V^ 8  d/   \	        \
        P                  RV 24      pV P                  V4      p V'       d*   V P                  \
        P                  P                  4      p W n         V # )zsReturn a copy of a Pillow image with modified orientation.

If orientation is not changed, return the same image.


from-imageexifr   ROTATE_)	r*   r8   r	   exif_transposer@   r   	Transpose	transposeFLIP_LEFT_RIGHT)rI   rM   image_formatanglefliprotations   &&    r   r3   r3   R  s      &&Ll"\&&&#22<@L		!19u'%0ABH'11(;L'11//1L 'r   c           
        V Uu. uF  p\        WCV 4      NK  	  ppV Uu. uF  p\        WSV 4      V ,          NK  	  ppV^ ,          f   ^ V^ &   VR,          f   WR&   V^ ,          p\        V4       F  w  rtVf   K  WF8  d   WaV&   K  TpK  	  Rp\        V4       FU  w  rtVf   K  W,          p	WI,
          Wx,
          ,          p
\        V^,           V4       F  pWV
,          ,           W&   K  	  TpKW  	  V Uu. uF6  pV^ 8:  d   ^ M)V^8  d   RM \        R\        P
                  ! RV4      4      NK8  	  ppW3# u upi u upi u upi )a  Give color stops positions and hints on the gradient vector.

``vector_length`` is the distance between the starting point and ending
point of the vector gradient.

``positions`` is a list of ``None``, or ``Dimension`` in px or %. 0 is the
starting point, 1 the ending point.

See https://drafts.csswg.org/css-images-3/#color-stop-syntax.

Return processed color stops, as a list of floats in px.

g      ?r   l        )r   	enumeraterangeminr=   log)vector_length	positionshintsrg   positionhintprevious_posi
previous_ibase	incrementjs   &&&&        r   process_color_stopsr  j  sc    MVVIH];IIVPUVPUZ]3mCCPUEV |	!}%" Q<L +&+!' , J +(D!Q^<I:>1-#)m3	 .J , 7<= 7<d QY19GTXXc4()	*6; 
 =
 E WV8=s   D9D>8<Ec                    V ^ ,          V R,          r!W!,
          pV^ 8X  d   ^ .\        V 4      ,          p MV  Uu. uF  qDV,
          V,          NK  	  p pWV 3# u upi )zNormalize stop positions between 0 and 1.

Return ``(first, last, positions)``.

first: original position of the first position.
last: original position of the last position.
positions: list of positions between 0 and 1.

r   )len)r  firstlasttotal_lengthposs   &    r   normalize_stop_positionsr    sa     A,	"4<LqC#i.(	=FGYcEk\11Y	G	!! Hs   Ac                   \        V4      pV^8  g   Q hV\        V 4      8X  g   Q hVR,          V^ ,          ,
          pV^ 8X  d   \        \        V4      4      pV^,
          pV  UUUUu. uF  w  rErgWG,          NK  	  pppppV  UUUUu. uF  w  rErgWW,          NK  	  p	ppppV  UUUUu. uF  w  rErgWg,          NK  	  p
ppppV  UUUUu. uF  w  rErgVNK
  	  ppppp^ ;p;p;r^V,          p\        VR,          ^4       F  w  ppVVV^,
          ,          ,
          V,          pV^,
          V3 F[  pWV,          V,          ,          pWV,          V,          ,          pWV,          V,          ,          pWV,          V,          ,          pK]  	  K  	  V^ 8X  d   \	        R4      # \	        RW,          ^,           RW,          ^,           RW,          ^,           RV R2	4      # u uppppi u uppppi u uppppi u uppppi )z?
https://drafts.csswg.org/css-images-3/#gradient-average-color
:ry   NNtransparentzrgb( /)r   )r  listr  r  r
   )colorsr  nb_stopsr  rgbapremul_rpremul_gpremul_br   result_rresult_gresult_bresult_atotal_weightr  r  weightr  s   &&                   r   gradient_average_colorr-    s   
 9~Ha<<s6{"""R=9Q</Lqx)	!|(./*!H/(./*!H/(./*!H/!'(:1QE(011H1x1(|#L 228Yq1u--=a%Af,,Hf,,Hf,,Ha6))H	  3 1}=))8&,-Qx/BS/H.I"S()H,a9: 	:# 0//(s   )G"
	G*
)G2
	G:
c                   8   a  ] tR tRt o R tR tR tR tRtV t	R# )Gradienti  c                    V'       g   Q h\         ;QJ d    . R  V 4       F  NK  	  5M! R  V 4       4      V n        \         ;QJ d    . R V 4       F  NK  	  5M! R V 4       4      V n        W0n        W n        R# )c              3   *   "   T F	  w  rVx  K  	  R # 5irU   r   ).0color_s   &  r   	<genexpr>$Gradient.__init__.<locals>.<genexpr>  s     >+heE+   c              3   *   "   T F	  w  rVx  K  	  R # 5irU   r   )r2  r4  r  s   &  r   r5  r6    s     #LHr7  N)tupler  stop_positionscolor_hints	repeating)rH   color_stopsr<  r;  s   &&&&r   rR   Gradient.__init__  sV    {e>+>ee>+>>#e#L#Lee#L#LL&"r   c                    R# )N)NNNr   )rH   r   rW   s   &&&r   rX   Gradient.get_intrinsic_size  s    r   c                  a V P                  W#V4      w  rVrxrVR 8X  d>   SP                  ^ ^ W#4       SP                  V	^ ,          4       SP                  4        R# V	 Uu. uF  q^,          NK  	  pp\	        \        V4      ^,
          4       Uu. uF!  pW,          W^,           ,          W,          .NK#  	  pp\	        \        V	4      ^,
          4       Uu. uFM  pW,          P                  R4      R,          W^,           ,          P                  R4      R,          W,          .NKO  	  pp\        V4       Fm  w  ppV^ 8X  g   K  V^ 8  d'   W^,
          ,          ^ ,          W^,
          ,          ^&   V\        V	4      ^,
          8  g   KU  W,          ^,          W,          ^ &   Ko  	  \        V4       F2  w  pw  ppp^ VV39  g   K  VV3R8w  g   K   VV,          W,          ^&   K4  	  VR8X  d   ^M^pV^ ,          VR,          3pV P                  '       * p\        V	4      ^,
          R,          pV^R pV3R lV 4       pSP                  VVVV4      pSP                  VRVVVV4      pSP                  VR7       \        ;QJ d    R V 4       F  '       g   K   R	M	  R
M! R V 4       4      '       d}   SP                  ^ ^ W#4      pVR8X  d   ^M^pV3R lV 4       pSP                  VVVV4      pVP                  VRVVVV4      pVP                  VR7       RVP                   R2.Vn        SP!                  VP                  4       R# u upi u upi u upi )solidNsrgb:N   Nlinearc              3   P   <"   T F  w  rpSP                  RWV4      x  K  	  R# 5ir[   Nr[   ry   create_interpolation_functionr2  c0c1r	  rd   s   &   r   r5   Gradient.draw.<locals>.<genexpr>  s.      / - 00FF -s   #&r$   )dc              3   *   "   T F	  q^8g  x  K  	  R# 5i)ry   Nr   )r2  r   s   & r   r5  rN    s     .vezvr7  TFc              3   V   <"   T F  w  rpSP                  RV3V3V4      x  K   	  R# 5irG  rI  rK  s   &   r   r5  rN    s4      3$1LBD 44VbURE4PP$1s   &)Grayr  z sh)ry   ry   r   rH  )layout	rectangle	set_colorfillr  r  tor  r<  create_stitching_functionadd_shadingrb   anyset_alpha_stater4   rd   paint_shading)rH   rd   re   rf   rg   scale_ytype_pointsr  r  r;  r3  alphasr  alpha_couplescolor_couplesr   a0a1r	  shading_typedomainextendr   boundssub_functionsfunctionshadingalpha_streamalpha_shadings   &f&&&                         r   rm   Gradient.draw  s;   AEUB4>6 GQ>CVAY'KKM(./u((/ 3v;?+-+ Y1u{~6+ 	 - 3v;?+-+ Y\\&!"%v!e}'7'7'?'C[^T+ 	 -
 "&)HAuzq5.;E.B1.EMa%(+s6{Q&*7*:1*=M$Q' * "+=!9A~BR b"X%7&(2g # ": "X-q1A,	".^^#f+/V+1R/ -/ 33FFM3 $$%C7#3.v.333.v...!111n7L !& 11qL3$13M 777H(44ffffhHM""W"-%&}'7'7&8#<"=LWZZ(e 0--s    M'MAMc                    \         h)a   Get layout information about the gradient.

width, height: Gradient box. Top-left is at coordinates (0, 0).
style: box computed style.

Returns (scale_y, type_, points, positions, colors).

scale_y: vertical scale of the gradient. float, used for ellipses
         radial gradients. 1 otherwise.
type_: gradient type.
points: coordinates of useful points, depending on type_:
    'solid': None.
    'linear': (x0, y0, x1, y1)
              coordinates of the starting and ending points.
    'radial': (cx0, cy0, radius0, cx1, cy1, radius1)
              coordinates of the starting end ending circles
positions: positions of the color stops. list of floats in between 0
           and 1 (0 at the starting point, 1 at the ending point).
colors: list of (r, g, b, a).

)NotImplementedError)rH   r;   r<   rg   s   &&&&r   rS  Gradient.layout   s
    , "!r   )r;  r  r<  r:  N)
r   r   r   r   rR   rX   rm   rS  r   r   r   s   @r   r/  r/    s     	# <)|" "r   r/  c                   8   a a ] tR tRt oV 3R ltR tRtVtV ;t# )LinearGradienti9  c                F   < \         SV `  WV4       Vw  V n        V n        R # rU   )r   rR   direction_type	direction)rH   r=  rv  r<  r;  r   s   &&&&&r   rR   LinearGradient.__init__:  s!    =.7+T^r   c                F	   \        V P                  4      ^8X  d   ^RR. V P                  ^ ,          .. 3# V P                  R8X  di   V P                  P	                  R4      w  rEVR8X  d   R	M^pVR8X  d   R	M^p\
        P                  ! W4      pWb,          V,          p	Wq,          V,          p
MLV P                  R8X  g   Q hV P                  p\
        P                  ! V4      p	\
        P                  ! V4      ) p
\        V	^	4      \        V
^	4      r\        V P                  4      p\        W,          4      \        W*,          4      ,           p\        WP                  V P                  V4      w  rV P                  '       g   V^ ,          V^,          8X  dL   VP!                  ^ V^ ,          ^,
          4       VP!                  ^ V^ ,          4       VP!                  ^ ^4       VR
,          VR	,          8X  dI   VP#                  VR	,          ^,           4       VP#                  VR	,          4       VP#                  ^4       \%        V4      w  pppV P                  '       Ed   VV8X  d   \'        W4      p^RR. V.. 3# VV,
          pV^ 8  g   Q h\)        \        V4      ^,
          4       Uu. uF!  pVV^,           ,          VV,          ,
          NK#  	  pp\+        ^ .VO54      p\+        V4      p\+        V4      p\+        ^ .VRRR	1,          O54      p\+        VRRR	1,          4      p\+        VRRR	1,          4      pVV8  dq   \-        V4      pVP#                  \-        V4      4       VP#                  \-        V4      4       VP#                  VR	,          V,           4       VVV,          ,          pKw  V^ 8  dt   \-        V4      pVP!                  ^ \-        V4      4       VP!                  ^ \-        V4      4       VP!                  ^ V^ ,          V,
          4       VVV,          ,          pKz  WV,          ,
          ^,          pW*V,          ,
          ^,          pVV	V,          ,           VV
V,          ,           VV	V,          ,           VV
V,          ,           3p^RVWV3# u upi )ry   rB  Ncornerr4  lefttopr   rE  r   )r  r  ru  rv  splitr=   hypotsincosr   r  r^   r  r:  r;  r<  insertr   r  r-  r  r   next) rH   r;   r<   rg   yxfactor_xfactor_ydiagonaldxdyr   r  r  r  r  r  r  r3  stop_lengthr  position_steps
next_stepsnext_colors
next_hintsprevious_stepsprevious_colorsprevious_hintsstepstart_xstart_yr_  s    &&&&                            r   rS  LinearGradient.layout?  s   t{{q gtR$++a.)92== (*>>'',DA&[raH%ZrQHzz%0H "X-B!H,B&&'111NNE%B((5/!B r1uR|B dkk"EJ#fk*::...0@0@%I	~~~ |y|+  IaL1$45a+Q"}	"-  2!23fRj)Q!9)!DtY>>> }.vA'4eWb88 ,K?"? s9~1242A !a% 9Q<//2  4
 3N34J-KuJ"A#=tt(<#=>N#F4R4L1O"52;/N &J'd;/0T*-.  2!56{** !)N+ao!67Q^ 45  IaL4$78++ --2..!3b5j 'BJ"6b4i29!46 (FIu<<G4s   +'R)rv  ru  )	r   r   r   r   rR   rS  r   r   r   r   s   @@r   rs  rs  9  s     8
Y= Y=r   rs  c                   J   a a ] tR tRt oV 3R ltR tR tR tR tRt	Vt
V ;t# )RadialGradienti  c                ^   < \         SV `  WV4       W@n        W n        Vw  V n        V n        R # rU   )r   rR   centershape	size_typesize)rH   r=  r  r  r  r<  r;  r   s   &&&&&&&r   rR   RadialGradient.__init__  s,    =
 %)!	r   c           	        \        V P                  4      ^8X  d   ^RR. V P                  ^ ,          .. 3# V P                  w  rErg\        WSV4      p\        WsV4      pVR8X  d	   W,
          pVR8X  d	   W',
          pV P                  ! V P                  WWWV4      !  w  rW,          p
\        V P                  4      p\        WP                  V P                  V4      w  rV P                  '       g   V^ ,          ^ 8  dS   V^ ,          V^,          8X  d>   VP                  ^ ^ 4       VP                  ^ V^ ,          4       VP                  ^ ^4       VR,          VR,          8X  dI   VP                  VR,          ^,           4       VP                  VR,          4       VP                  ^4       V^ ,          ^ 8  Ed   V P                  '       dP   VR,          V^ ,          ,
          pV^V^ ,          ) V,          ,           ,          pV Uu. uF  pVV,           NK  	  ppMVR,          ^ 8:  d   ^RR. V P                  R,          .. 3# \        V4       Fw  w  ppV^ 8X  d   VVR VVR r McV^ 8  g   K!  VV,          pVV^,
          ,          pVV^,
          ,          pV^ 8  g   Q h\        VVVV.V^ ^ V.4      pV.VVR Op^ .VVR Op M	  \        V4      w  pppVV8X  d'   V P                  '       d   \        W4      p^RR. V.. 3# WWV
,          VWWV
,          V3pV P                  '       d   V P!                  WV
VWV4      w  prpV
RVWV3# u upi )ry   rB  Nrightbottomradialr|  r   )r  r  r  r   _handle_degenerate_resolve_sizer  r  r:  r;  r<  r  r   r  r-  r  _repeat)rH   r;   r<   rg   origin_xcenter_xorigin_ycenter_ysize_xsize_yr]  r  r  r  r  offsetr  r  r3  previous_colorprevious_positionintermediate_colorr  r  r_  s   &&&&                     r   rS  RadialGradient.layout  sZ   t{{q gtR$++a.)92== 26.Hhu5hv6w'Hx(H 00x5IK/ dkk".'')9)95B	~~~ |aIaLIaL$@  A&a+Q"}	"-  2!23fRj)QQ<!~~~ )"	! <&!	!}/M*NO?HIy8X..y	I	 R=A%gtR$++b/1BBFF#,Y#7KAx1},212J	!"	!| &q	)/A,5a!e,<)01444-C+^UEJ.1h?.A* #5!Bvabz!B%&$712$7	! $8" ":)!DtY D=T^^^*6=EgtR%"44 (%($0 >>>/3||w	50J,FIu &)UBBQ Js   Mc           
        VP                  4       pVP                  4       p	VP                  4       p
V^,          V^,          ,
          p\        \        P                  ! W^ ,          ,
          W#,          V^,          ,
          4      \        P                  ! W^ ,          ,
          V^,          ) V,          4      \        P                  ! V^ ,          ) W#,          V^,          ,
          4      \        P                  ! V^ ,          ) V^,          ) V,          4      4      p\        P                  ! W^,          ,
          V,          4      pV^ 8  do   ^V,           pWn,          p. VO^NV,          RR p\        V4       UUu. uF  q F  pVV,           NK  	  K  	  ppp. VR,          OV^,          W,          ,           N5pV^,          ^ 8X  d   WEWg3# V^,          V,          p. VR,          O^ NVR,          O5p\        V4      pV'       d^   WhV,          ,          pV^.V	OV,          ,          p\        V4       UUu. uF  pV
 F  pVV,
          V,           NK  	  K  	  uppV,           pVV,
          pV^ 8X  d   WEWg3# V
^ ,          V
R,          3R8X  g   Q h^ Tu;8  d	   ^8  g   Q h Q hV
RRR1,          p^V,
          p\        V^R7       EF  w  ppVV8X  dI   W) R V,           p. W) R O^NVOpW) R  Uu. uF  pVV,
          ^,
          NK  	  ppVV,           pWEWg3u # VV8  g   K_  W) ,          pW^,
          ) ,          pW^,
          ) ,          pVVVV.pVVVV.p\        VV4      pV.W^,
          ) R OVOp^.W^,
          ) R O^NVOpW^,
          ) R  Uu. uF  pV^,
          V,
          NK  	  ppV^,
          V,
          .VOVO5pWEWg3u # 	  R# u uppi u uppi u upi u upi )   N:Nr  N:N   N:rD  NN)startr   rH  )	copyr`   r=   r~  ceilr  intr  r-  )rH   r;   r<   r]  r_  r  r  r  original_colorsoriginal_hintsoriginal_positionsgradient_lengthmax_distancerepeat_afterrepeatr  r  repeat_beforefull_repeatpartial_repeatreverser?   new_positionsr3  
next_colornext_positionaverage_colorsaverage_positions
zero_colors   &&&&&&&&                     r   r  RadialGradient._repeat  s7    ++-&^^- )fQi/ JJuay(&*:VAY*FGJJuay(6!9*w*>?JJq	z6#3fQi#?@JJq	zF1I:#78	:
 yy,":o!MN!%FF u[a[6)3B/E&+FmO&3IHIm  ONvbzN6!9/M#MNF!9>f33 q	O3 /6":.q.6":. -(33Fa).)K77E49+4F44Fq 2H K(** 2 +4F46?@I
 '4Qf33
 #1%'9"'=>&HHH>%A%%%%%$TrT*N"$WA66KAx5  )-69.-9q959 %7rs$;!=$; {*Q..$;  != *I5	&77% (+,1uX6
 2U8 <"'
J!G%-ue]$K!3NDUV
$I1vw'?I&I@^cFG4@a@%@ *E()4!64 4<HqL;..4  !6 #QY4Q}QyQ	&777 7KO(4.!="!6s   :O5"O1OO#c           	     V   V P                   R8X  d*   V P                  w  rg\        WeV4      p\        WuV4      pWg3# \        V4      p\        W,
          4      p	\        V4      p
\        W$,
          4      pV P                  P	                  R4      '       d   \
        M\        pV P                  P                  R4      '       d.   V P                  R8X  d   V! WW4      pW3# V! W4      V! W4      3# V P                  R8X  d_   V! \        P                  ! W4      \        P                  ! W4      \        P                  ! W4      \        P                  ! W4      4      pW3# V! W3W3W3W3R R7      w  rV\        P                  ! ^4      ,          V\        P                  ! ^4      ,          3# )z+Resolve circle size of the radial gradient.explicitclosestsidecirclec                 *    \         P                  ! V !  # rU   )r=   r~  )r#  s   &r   <lambda>.RadialGradient._resolve_size.<locals>.<lambda>k  s    $**a.r   )rv   )r  r  r   r^   
startswithr  r`   endswithr  r=   r~  sqrt)rH   r;   r<   r  r  rg   r  r  rz  r  r{  r  picksize_xycorner_xcorner_ys   &&&&&&          r   r  RadialGradient._resolve_sizeQ  s`   >>Z'!YYNFu5Fv6F>!8}E$%(mV&'ii**955s399f%%zzX%tC8''$d3&777::!4::d0$**T2J::e14::e3LNG##!K$%(* $))A,&499Q<(???r   c                h    Yu;8X  d   ^ 8X  d
   M MR;rW3# V^ 8X  d   RpRpW3# V^ 8X  d   RpRpW3# )zdHandle degenerate radial gradients.

See https://drafts.csswg.org/css-images-3/#degenerate-radials

gHz>g    cAr   )rH   r  r  s   &&&r   r  !RadialGradient._handle_degeneraten  sY      q ""F ~ q[FF ~ q[FF~r   )r  r  r  r  )r   r   r   r   rR   rS  r  r  r  r   r   r   r   s   @@r   r  r    s)     )PCdT8l@: r   r  )NNr   )/r   rC   r=   r   hashlibr   r   	itertoolsr   pathlibr   	xml.etreer   r   PILr   r   r	   tinycss2.color5r
   rq   r   layout.percentr   loggerr   svgr   urlsr   r   LOAD_TRUNCATED_IMAGES
ValueErrorr   r   Objectrs   rr   r   r   r3   r  r  r-  r/  rs  r  r   r   r   <module>r     s    1 	       !  * * '  &   ) #'	 
 @" @"F	& 	&1U\\ 1!Q !QH0f01h"&:Dc" c"L_=X _=DaX ar   