Ë
    XV.jD3  ã                  ó  — d dl mZ d dlZd dlmc mZ d dlZd dl	Z	d dl
Z
d dlmZ d dlmZ d dlmZmZmZmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZ ddlmZ ddlmZ dZ  ed«      Z! G d„ d«      Z" G d„ d«      Z# G d„ d«      Z$y)é    )ÚannotationsN)ÚOrderedDict)ÚRandom)ÚAnyÚCallableÚPatternÚSequenceÚTypeVaré   )ÚDEFAULT_LOCALE)ÚUniquenessException)ÚFactory)Ú	GeneratorÚrandom)ÚSeedType)Úchoices_distributioniè  ÚRetTypec                  óò  ‡— e Zd ZU dZ ej
                  d«      Zded<    ee	«      D � �cg c]  }|j                  d«      rŒ|dvsŒ|‘Œ c}} Z	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zˆfd„Zdd	„Zd ˆfd
„Zd d„Zd„ Zd!d„Zed"d„«       Zed#d„«       Zd$d„Zd„ Zd„ Zd%d„Zed&d'd„«       Zd&d'd„Zd&d(d„Zed)d„«       Zej>                  d*d„«       Zed+d„«       Z ed,d„«       Z!ed-d„«       Z"d.d„Z#ˆxZ$S c c}} w )/ÚFakerz2Proxy class capable of supporting multiple localesz^_cached_\w*_mapping$r   Úcache_patternÚ__)ÚseedÚseed_instancer   c                ó`  — t        «       | _        d | _        t        | «      | _        t        | «      | _        t        |t        «      r|j                  dd«      g}�nÂt        |t        t        t        f«      r[g }|D ]R  }t        |t        «      st        dt        |«      › d�«      ‚|j                  dd«      }	|	|vsŒB|j                  |	«       ŒT �nLt        |t         t        f«      �r.d„ |j!                  «       D «       }
t#        |
«      }|s•ddt%        j&                  «       v st)        j*                  t"        «      rt)        j,                  t"        «      ndt)        j,                  |
«      t)        j,                  |«      dœz  }t/        t)        j0                  |«      «      ‚d x}
}t        «       }|j3                  «       D ]  \  }}|j                  dd«      }|||<   Œ t        |j5                  «       «      }t        |j!                  «       «      | _        nt6        g}t9        |«      d	k(  r/t;        j<                  |d
   |||fd|i|¤Ž| j                  |d
   <   n%|D ]   }t?        ||||fd|i|¤Ž| j                  |<   Œ" || _         t        | j                  j!                  «       «      | _!        y )NÚ-Ú_zThe locale "z" must be a string.c              3  óH   K  — | ]  }t        |t        t        f«      –— Œ y ­w©N)Ú
isinstanceÚintÚfloat)Ú.0Úvs     úMC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\faker\proxy.pyÚ	<genexpr>z!Faker.__init__.<locals>.<genexpr><   s   è ø€ ÐL¹O°q”z !¤c¬5 \×2¹Oùs   ‚ "z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}Úall)Úpy0Úpy2Úpy4r   r   Úuse_weighting)"r   Ú_factory_mapÚ_weightsÚUniqueProxyÚ_unique_proxyÚOptionalProxyÚ_optional_proxyr   ÚstrÚreplaceÚlistÚtupleÚsetÚ	TypeErrorÚappendÚdictÚvaluesr&   Ú@py_builtinsÚlocalsÚ
@pytest_arÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚitemsÚkeysr   Úlenr   Úcreater   Ú_localesÚ
_factories)ÚselfÚlocaleÚ	providersÚ	generatorÚincludesr*   ÚconfigÚlocalesÚcodeÚfinal_localeÚ@py_assert1Ú@py_assert3Ú@py_format5ÚodictÚkr#   Úkeys                    r$   Ú__init__zFaker.__init__   sA  € ô BMÃˆÔØˆŒÜ(¨Ó.ˆÔÜ,¨TÓ2ˆÔä�fœcÔ"Ø—~‘~ c¨3Ó/Ð0ŠGô ˜¤¤u¬cÐ 2Ô3ØˆGÛ�Ü! $¬Ô,Ü# l´3°t³9°+Ð=PÐ$QÓRÐRØ#Ÿ|™|¨C°Ó5�Ø wÒ.Ø—N‘N <Õ0ò ô ˜¤¬dÐ 3Õ4ÙL¸F¿M¹M¼OÓLÐL”3ÐLÓLÐLÑL×L×L×L×LÕL”3×L×LÓL”3×L×LÔLÐL×L×LÒLÐL×L×L×L×L×LÒLÜ“MˆEØŸ™ž‘��1Ø—i‘i  SÓ)�Ø��c’
ð 'ô ˜5Ÿ:™:›<Ó(ˆGÜ  §¡£Ó0ˆD�Mô &Ð&ˆGäˆw‹<˜1ÒÜ,3¯N©NØ˜‘
ØØØñ	-ð
 ,ð-ð ñ-ˆD×Ñ˜g a™jÒ)ó "�Ü,1ØØØØñ	-ð
 #0ð-ð ñ-�×!Ñ! &Ò)ð "ð  ˆŒÜ˜t×0Ñ0×7Ñ7Ó9Ó:ˆ�ó    c                óÐ   •— t        t        ‰| �	  «       «      }| j                  D ]0  }|t	        |«      D �ch c]  }|j                  d«      rŒ|’Œ c}z  }Œ2 t        |«      S c c}w )Nr   )r5   ÚsuperÚ__dir__Ú	factoriesÚdirÚ
startswithÚsorted)rG   Ú
attributesÚfactoryÚattrÚ	__class__s       €r$   rZ   zFaker.__dir__^   s\   ø€ Üœ™™Ó*Ó+ˆ
Ø—~”~ˆGØ¬C°¬LÓU©L DÀÇÁÐPSÕ@Tš4¨LÑUÑU‰Jð &ä�jÓ!Ð!ùò Vs   ¶A#ÁA#c                óô  — |j                  dd«      | j                  v rt        | j                  «      dk(  r| S | j                  |j                  dd«         }t	        |t
        «      }|�sddt        j                  «       v st        j                  t        «      rt        j                  t        «      nddt        j                  «       v st        j                  |«      rt        j                  |«      nddt        j                  «       v st        j                  t
        «      rt        j                  t
        «      ndt        j                  |«      dœz  }t        t        j                  |«      «      ‚d }|S )	Nr   r   r   z5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}r   Úinstancer   )r'   Úpy1r(   r)   )r2   rM   rC   r+   r   r   r:   r;   r<   r=   r>   r?   r@   )rG   rH   rd   rQ   rR   s        r$   Ú__getitem__zFaker.__getitem__d   sÖ   € Ø�>‰>˜#˜sÓ# t§|¡|Ñ3¼¸D¿L¹LÓ8IÈQÒ8NØˆKØ×$Ñ$ V§^¡^°C¸Ó%=Ñ>ˆÜ˜(¤EÓ*Ð*Ò*×*×*×*×*Õ*Œz×*×*Ó*Œz×*×*×*×*×*Ò*˜(×*×*Ó*˜(×*×*×*×*×*Ò*¤E×*×*Ó*¤E×*×*Ô*Ð*×*×*×*×*×*Ð*ØˆrW   c                óF   •— |dk(  rd}t        |«      ‚t        ‰| �	  |«      S )zú
        Handles the "attribute resolution" behavior for declared members of this proxy class

        The class method `seed` cannot be called from an instance.

        :param attr: attribute name
        :return: the appropriate attribute
        r   zZCalling `.seed()` on instances is deprecated. Use the class method `Faker.seed()` instead.)r6   rY   Ú__getattribute__)rG   ra   Úmsgrb   s      €r$   rh   zFaker.__getattribute__k   s+   ø€ ð �6Š>ØqˆCÜ˜C“.Ð ä‘7Ñ+¨DÓ1Ð1rW   c                ó0  — t        | j                  «      dk(  rt        | j                  d   |«      S || j                  v rd|z  }t	        |«      ‚| j
                  j                  |«      rd|z  }t        |«      ‚| j                  |«      }t        ||«      S )zŒ
        Handles cache access and proxying behavior

        :param attr: attribute name
        :return: the appropriate attribute
        r   r   zBProxying calls to `%s` is not implemented in multiple locale mode.z$Cached attribute `%s` does not exist)	rC   rF   ÚgetattrÚgenerator_attrsÚNotImplementedErrorr   ÚmatchÚAttributeErrorÚ_select_factory)rG   ra   ri   r`   s       r$   Ú__getattr__zFaker.__getattr__z   s•   € ô ˆt�‰Ó 1Ò$Ü˜4Ÿ?™?¨1Ñ-¨tÓ4Ð4Ø�T×)Ñ)Ñ)ØVÐY]Ñ]ˆCÜ% cÓ*Ð*Ø×Ñ×%Ñ% dÔ+Ø8¸4Ñ?ˆCÜ  Ó%Ð%à×*Ñ*¨4Ó0ˆGÜ˜7 DÓ)Ð)rW   c                ó8  — | j                   }|j                  |«      }t        j                  | j                  «      |_        t        j                  | j
                  «      |_        t        j                  | j                  «      |_        t        j                  | j                  «      |_        t        | «      |_	        | j                  j                  j                  «       D �ci c]  }||j                  j                  h“Œ c}|j                  _
        |S c c}w r   )rb   Ú__new__ÚcopyÚdeepcopyrE   rF   r+   r,   r-   r.   Ú_seenrB   Ú	_sentinel)rG   ÚmemodictÚclsÚresultrT   s        r$   Ú__deepcopy__zFaker.__deepcopy__�   sÍ   € Ø�n‰nˆØ—‘˜SÓ!ˆÜŸ-™-¨¯©Ó6ˆŒÜ ŸM™M¨$¯/©/Ó:ˆÔÜ"Ÿm™m¨D×,=Ñ,=Ó>ˆÔÜŸ-™-¨¯©Ó6ˆŒÜ*¨4Ó0ˆÔØSW×SeÑSe×SkÑSk×SpÑSpÔSrÓ%sÑSrÈa a¨&×*>Ñ*>×*HÑ*HÐ)IÑ&IÐSrÑ%sˆ×ÑÔ"Øˆùò &ts   Ã$Dc                ó:   — | j                   j                  |«       y r   ©Ú__dict__Úupdate©rG   Ústates     r$   Ú__setstate__zFaker.__setstate__˜   ó   € Ø�‰×Ñ˜UÕ#rW   c                ó   — | j                   S r   )r.   ©rG   s    r$   ÚuniquezFaker.unique›   s   € à×!Ñ!Ð!rW   c                ó   — | j                   S r   )r0   r…   s    r$   ÚoptionalzFaker.optionalŸ   s   € à×#Ñ#Ð#rW   c                óÞ   — | j                  |«      \  }}t        |«      dk(  rd|›�}t        |«      ‚t        |«      dk(  r|d   S |r| j                  ||«      }|S | j	                  |«      }|S )z¾
        Returns a random factory that supports the provider method

        :param method_name: Name of provider method
        :return: A factory that supports the provider method
        r   z"No generator object has attribute r   )Ú_map_provider_methodrC   ro   Ú_select_factory_distributionÚ_select_factory_choice)rG   Úmethod_namer[   Úweightsri   r`   s         r$   rp   zFaker._select_factory£   s…   € ð "×6Ñ6°{ÓCÑˆ	�7äˆy‹>˜QÒØ6°{°oÐFˆCÜ  Ó%Ð%Ü�‹^˜qÒ Ø˜Q‘<ÐáØ×7Ñ7¸	À7ÓKˆGð ˆð ×1Ñ1°)Ó<ˆGØˆrW   c                ó.   — t        ||t        d¬«      d   S )Nr   )Úlengthr   )r   r   )rG   r[   rŽ   s      r$   r‹   z"Faker._select_factory_distribution¹   s   € Ü# I¨w¼ÀqÔIÈ!ÑLÐLrW   c                ó,   — t        j                  |«      S r   )r   Úchoice)rG   r[   s     r$   rŒ   zFaker._select_factory_choice¼   s   € Ü�}‰}˜YÓ'Ð'rW   c                ó¢  — d|› d�}t        | |«      rt        | |«      S | j                  rbt        | j                  | j                  «      D ��cg c]  \  }}t        ||«      r||f‘Œ }}}t        |Ž \  }}t        |«      t        |«      f}n*| j                  D �cg c]  }t        ||«      sŒ|‘Œ }}|df}t        | ||«       |S c c}}w c c}w )ad  
        Creates a 2-tuple of factories and weights for the given provider method name

        The first element of the tuple contains a list of compatible factories.
        The second element of the tuple contains a list of distribution weights.

        :param method_name: Name of provider method
        :return: 2-tuple (factories, weights)
        Ú_cached_Ú_mappingN)Úhasattrrk   r,   Úzipr[   r3   Úsetattr)	rG   r�   ra   r`   ÚweightÚvaluer[   rŽ   Úmappings	            r$   rŠ   zFaker._map_provider_method¿   sà   € ð ˜+˜ hÐ/ˆÜ�4˜ÔÜ˜4 Ó&Ð&ð �=Š=ô (+¨4¯>©>¸4¿=¹=Ô'Iôá'I‘O�G˜VÜ˜7 KÔ0ð ˜&Ò!Ø'Ið ñ ô
 "% e ÑˆI�wÜ˜9“o¤t¨G£}Ð4‰Gà,0¯NªNÓ\©N ¼gÀgÈ{Õ>[’W¨NˆEÐ\Ø˜T�kˆGô 	��d˜GÔ$Øˆùóùò ]s   ÁCÂCÂ-Cc                ó.   — t        j                  |«       y)zs
        Hashables the shared `random.Random` object across all factories

        :param seed: seed value
        N)r   r   )ry   r   s     r$   r   z
Faker.seedà   s   € ô 	�‰�tÕrW   c                óH   — | j                   D ]  }|j                  |«       Œ y)zr
        Creates and seeds a new `random.Random` object for each factory

        :param seed: seed value
        N)rF   r   )rG   r   r`   s      r$   r   zFaker.seed_instanceé   s    € ð —”ˆGØ×!Ñ! $Õ'ñ 'rW   c                ó`   — | j                   |j                  dd«         j                  |«       y)z®
        Creates and seeds a new `random.Random` object for the factory of the specified locale

        :param locale: locale string
        :param seed: seed value
        r   r   N)r+   r2   r   )rG   rH   r   s      r$   Úseed_localezFaker.seed_localeò   s(   € ð 	×Ñ˜&Ÿ.™.¨¨cÓ2Ñ3×AÑAÀ$ÕGrW   c                ó~   — t        | j                  «      dk(  r| j                  d   j                  S d}t        |«      ‚)a   
        Proxies `random` getter calls

        In single locale mode, this will be proxied to the `random` getter
        of the only internal `Generator` object. Subclasses will have to
        implement desired behavior in multiple locale mode.
        r   r   zJProxying `random` getter calls is not implemented in multiple locale mode.©rC   rF   r   rm   )rG   ri   s     r$   r   zFaker.randomû   s:   € ô ˆt�‰Ó 1Ò$Ø—?‘? 1Ñ%×,Ñ,Ð,à^ˆCÜ% cÓ*Ð*rW   c                óv   — t        | j                  «      dk(  r|| j                  d   _        yd}t        |«      ‚)a   
        Proxies `random` setter calls

        In single locale mode, this will be proxied to the `random` setter
        of the only internal `Generator` object. Subclasses will have to
        implement desired behavior in multiple locale mode.
        r   r   zJProxying `random` setter calls is not implemented in multiple locale mode.Nr¡   )rG   rš   ri   s      r$   r   zFaker.random  s6   € ô ˆt�‰Ó 1Ò$Ø(-ˆD�O‰O˜AÑÕ%à^ˆCÜ% cÓ*Ð*rW   c                ó,   — t        | j                  «      S r   )r3   rE   r…   s    r$   rM   zFaker.locales  s   € ä�D—M‘MÓ"Ð"rW   c                ó   — | j                   S r   )r,   r…   s    r$   rŽ   zFaker.weights  s   € à�}‰}ÐrW   c                ó   — | j                   S r   )rF   r…   s    r$   r[   zFaker.factories#  s   € à�‰ÐrW   c                óH   — t        | j                  j                  «       «      S r   )r3   r+   rA   r…   s    r$   rA   zFaker.items'  s   € Ü�D×%Ñ%×+Ñ+Ó-Ó.Ð.rW   )NNNNT)rH   z3str | Sequence[str] | dict[str, int | float] | NonerI   úlist[str] | NonerJ   zGenerator | NonerK   r§   r*   ÚboolrL   r   ÚreturnÚNone)rH   r1   r©   r   )ra   r1   r©   r   )r�   r   r©   rª   )r©   r-   )r©   r/   )r�   r1   r©   r   )r�   r1   r©   z(tuple[list[Factory], list[float] | None]r   )r   úSeedType | Noner©   rª   )rH   r1   r   r«   r©   rª   )r©   r   )rš   r   r©   rª   )r©   z	list[str])r©   zlist[int | float] | None)r©   zlist[Generator | Faker])r©   z#list[tuple[str, Generator | Faker]])%Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚreÚcompiler   Ú__annotations__r\   r   r]   rl   rV   rZ   rf   rh   rq   r{   r‚   Úpropertyr†   rˆ   rp   r‹   rŒ   rŠ   Úclassmethodr   r   rŸ   r   ÚsetterrM   rŽ   r[   rA   Ú__classcell__)r"   ra   rb   s   00@r$   r   r      s—  ø… Ù<à'˜RŸZ™ZÐ(@ÓA€M�7ÓAá˜YœôÙ'�¨t¯©¸tÕ/DÈÐUxÒIxŠ˜ò€Oð GKØ&*Ø&*Ø%)Ø"ð=;àCð=;ð $ð=;ð $ð	=;ð
 #ð=;ð ð=;ð ð=;ð 
ó=;ô~"óõ2ó*ò&	ó$ð ò"ó ð"ð ò$ó ð$óò,Mò(óðB óó ðô(ôHð ò+ó ð+ð ‡]�]ò+ó ð+ð ò#ó ð#ð òó ðð òó ð÷/ùóYs   «C3ÁC3ÁC3r   c                  ó8   — e Zd Zdd„Zd	d„Zd
d„Zd„ Zd„ Zdd„Zy)r-   c                ó>   — || _         i | _        t        «       | _        y r   )Ú_proxyrv   Úobjectrw   ©rG   Úproxys     r$   rV   zUniqueProxy.__init__,  s   € ØˆŒØˆŒ
Ü›ˆ�rW   c                ó   — i | _         y r   )rv   r…   s    r$   ÚclearzUniqueProxy.clear1  s	   € Øˆ�
rW   c                ó~   — t        | j                  |«      }t        |«      r| j                  ||«      S t	        d«      ‚)Nz9Accessing non-functions through .unique is not supported.©rk   r¹   ÚcallableÚ_wrapr6   ©rG   ÚnameÚobjs      r$   rq   zUniqueProxy.__getattr__4  s6   € Ü�d—k‘k 4Ó(ˆÜ�CŒ=Ø—:‘:˜d CÓ(Ð(äÐWÓXÐXrW   c                ó:   — | j                   j                  «       }|S r   ©r~   rt   r€   s     r$   Ú__getstate__zUniqueProxy.__getstate__;  ó   € ð —‘×"Ñ"Ó$ˆØˆrW   c                ó:   — | j                   j                  |«       y r   r}   r€   s     r$   r‚   zUniqueProxy.__setstate__B  rƒ   rW   c                óJ   ‡ ‡‡— t        j                  ‰«      ˆˆˆ fd„«       }|S )Nc                 óF  •— ‰| t        t        |j                  «       «      «      f}‰j                  j	                  |‰j
                  h«      }‰j
                  }t        t        «      D ]  }||vr n ‰| i |¤Ž}Œ t        dt        d›d�«      ‚|j                  |«       |S )NzGot duplicated values after Ú,z iterations.)
r4   r^   rA   rv   Ú
setdefaultrw   ÚrangeÚ_UNIQUE_ATTEMPTSr   Úadd)	ÚargsÚkwargsrU   Ú	generatedÚretvalÚiÚfunctionrÄ   rG   s	         €€€r$   Úwrapperz"UniqueProxy._wrap.<locals>.wrapperF  sŸ   ø€ à˜œu¤V¨F¯L©L«NÓ%;Ó<Ð=ˆCàŸ
™
×-Ñ-¨c°D·N±NÐ3CÓDˆIð —^‘^ˆFäÔ+Ö,�Ø Ñ*ÙÙ! 4Ð2¨6Ñ2‘ð -ô
 *Ð,HÔIYÐZ[ÐH\Ð\hÐ*iÓjÐjà�M‰M˜&Ô!àˆMrW   ©Ú	functoolsÚwraps©rG   rÄ   r×   rØ   s   ``` r$   rÂ   zUniqueProxy._wrapE  s%   ú€ Ü	�‰˜Ó	"õ	ó 
#ð	ð( ˆrW   N©r¼   r   )r©   rª   ©rÄ   r1   r©   r   )rÄ   r1   r×   r   r©   r   )	r¬   r­   r®   rV   r¾   rq   rÈ   r‚   rÂ   © rW   r$   r-   r-   +  s!   „ ó"ó
óYòò$ôrW   r-   c                  ó4   — e Zd ZdZdd„Zd	d„Zd„ Zd„ Zd
d„Zy)r/   zN
    Return either a fake value or None, with a customizable probability.
    c                ó   — || _         y r   )r¹   r»   s     r$   rV   zOptionalProxy.__init__c  s	   € Øˆ�rW   c                ó~   — t        | j                  |«      }t        |«      r| j                  ||«      S t	        d«      ‚)Nz;Accessing non-functions through .optional is not supported.rÀ   rÃ   s      r$   rq   zOptionalProxy.__getattr__f  s6   € Ü�d—k‘k 4Ó(ˆÜ�CŒ=Ø—:‘:˜d CÓ(Ð(äÐYÓZÐZrW   c                ó:   — | j                   j                  «       }|S r   rÇ   r€   s     r$   rÈ   zOptionalProxy.__getstate__m  rÉ   rW   c                ó:   — | j                   j                  |«       y r   r}   r€   s     r$   r‚   zOptionalProxy.__setstate__t  rƒ   rW   c                óN   ‡ ‡— t        j                  ‰«      ddœdˆˆ fd„«       }|S )Ng      à?)Úprobc                ó¬   •— d| cxk  rdk  st        d«      ‚ t        d«      ‚‰j                  j                  t        | dz  «      ¬«      r ‰|i |¤ŽS d S )Nr   g      ð?zprob must be between 0 and 1éd   )Úchance_of_getting_true)Ú
ValueErrorr¹   Úbooleanr    )ræ   rÒ   rÓ   r×   rG   s      €€r$   rØ   z$OptionalProxy._wrap.<locals>.wrapperx  sb   ø€ à�t”?˜s’?Ü Ð!?Ó@Ð@ð #Ü Ð!?Ó@Ð@Ø04·±×0CÑ0CÔ[^Ð_cÐfiÑ_iÓ[jÐ0CÔ0k‘8˜TÐ, VÑ,ÐuÐquÐurW   )rÒ   r   ræ   r!   rÓ   r   r©   zRetType | NonerÙ   rÜ   s   ` ` r$   rÂ   zOptionalProxy._wrapw  s*   ù€ Ü	�‰˜Ó	"Ø.1÷ 	vó 
#ð	vð
 ˆrW   NrÝ   rÞ   )rÄ   r1   r×   zCallable[..., RetType]r©   zCallable[..., RetType | None])	r¬   r­   r®   r¯   rV   rq   rÈ   r‚   rÂ   rß   rW   r$   r/   r/   ^  s!   „ ñóó[òò$ôrW   r/   )%Ú
__future__r   Úbuiltinsr:   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter<   rt   rÚ   r°   Úcollectionsr   r   r   Útypingr   r   r   r	   r
   rL   r   Ú
exceptionsr   r`   r   rJ   r   r   Úutils.distributionr   rÐ   r   r   r-   r/   rß   rW   r$   Ú<module>rõ      se   ðÝ "ç  „ ƒÛ Û 	å #Ý ß <Õ <å "Ý +Ý ß (Ý Ý 4àÐ á
�)Ó
€÷Q/ñ Q/÷h0ñ 0÷f ò  rW   