ó
    Eñi-j  ã                   óÈ   • S SK rS SKJs  Jr  S SKJrJrJ	r	J
r
Jr  S SKJrJrJrJr  SSKJr  SSKJrJrJr  SSKJr  SS	KJrJr  SS
KJr  Sr " S S5      r  " S S\5      rg)é    N)Ú
IPV4LENGTHÚ
IPV6LENGTHÚIPv4NetworkÚIPv6AddressÚIPv6Network)ÚDictÚListÚOptionalÚTupleé   )Ú	unidecode)Ú	lowercaseÚslugifyÚslugify_unicode)Úchoices_distributioné   )ÚBaseProviderÚElementsType)ÚProviderTc                   ó�  • \ rS rSr% Sr\" S5      \" S5      \" S5      S.r\\\4   \	S'   \" S5      \" S	5      \" S
5      /r
\\   \	S'   \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      /r\\   \	S'   Srg)Ú_IPv4Constantsé   zâ
IPv4 network constants used to group networks into different categories.
Structure derived from `ipaddress._IPv4Constants`.

Excluded network list is updated to comply with current IANA list of
private and reserved networks.
z	0.0.0.0/1z128.0.0.0/2z192.0.0.0/3)ÚaÚbÚcÚ_network_classesz
10.0.0.0/8z172.16.0.0/12z192.168.0.0/16Ú_private_networksz	0.0.0.0/8z100.64.0.0/10z127.0.0.0/8z169.254.0.0/16z192.0.0.0/24z192.0.2.0/24z192.31.196.0/24z192.52.193.0/24z192.88.99.0/24z192.175.48.0/24z198.18.0.0/15z198.51.100.0/24z203.0.113.0/24z224.0.0.0/4z240.0.0.0/4z255.255.255.255/32Ú_excluded_networks© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   r   ÚstrÚ__annotations__r   r	   r   Ú__static_attributes__r   ó    Ú^/home/mande/repo/quber/.venv/lib/python3.13/site-packages/faker/providers/internet/__init__.pyr   r      s  ‡ ññ ˜Ó%Ù˜Ó'Ù˜Ó'ñ0Ð�d˜3 Ð+Ñ,ó ñ 	�LÓ!Ù�OÓ$ÙÐ$Ó%ð,Ð�t˜KÑ(ó ñ 	�KÓ Ù�OÓ$Ù�MÓ"ÙÐ$Ó%Ù�NÓ#Ù�NÓ#ÙÐ%Ó&ÙÐ%Ó&ÙÐ$Ó%ÙÐ%Ó&Ù�OÓ$ÙÐ%Ó&ÙÐ$Ó%Ù�MÓ"Ù�MÓ"ÙÐ(Ó)ð!-Ð˜˜[Ñ)ö r(   r   c                   ó<  • \ rS rSr% Sr\\   \S'   Sr\\   \S'   Sr	\\   \S'   Sr
\\   \S	'   S
r\\   \S'   Sr\\   \S'   Sr\\   \S'   Sr\\   \S'   Sr\\   \S'   Sr\\   \S'   Sr\\   \S'   Sr\\   \S'   Sr\\   \S'   Sr\\\\4   S4   \S'   S\S \4S! jr\ShS#\S$\\   S \4S% jj5       r\S \4S& j5       r\S \4S' j5       r\S \4S( j5       r\S \4S) j5       r\S \4S* j5       r \S \4S+ j5       r!\S \4S, j5       r"\S \4S- j5       r#\S \4S. j5       r$\%S \4S/ j5       r&\SiS0\S \4S1 jj5       r'\SiS0\S \4S2 jj5       r(\\%S \4S3 j5       5       r)     SjS4\\   S5\\   S6\\   S7\\   S8\\   S \4S9 jjr*S \4S: jr+S \4S; jr,SkS<\S \4S= jjr-SlS>\\.\      S \4S? jjr/SlS@\\   S \\.\0   \.\   4   4SA jjr1 SlS@\\   S \\.\0   \.\   4   4SB jjr2 SlS@\\   S \\.\0   \.\   4   4SC jjr3  SmSD\.\0   SE\\.\      SF\S \4SG jjr4SH\.\0   SI\.\0   S \.\0   4SJ jr5S \4SK jr6   SnSF\S@\\   SL\\   S \4SM jjr7SoSF\S@\\   S \4SN jjr8SoSF\S@\\   S \4SO jjr9SpSF\S \4SP jjr:SpSQ\S \4SR jjr;SqSS\ST\SU\S \4SV jjr<S \4SW jr=SlSX\\   S \4SY jjr>S \4SZ jr?SrS>\\.\      SX\\   S \4S[ jjr@\ASlS\\\   S \4S] jj5       rB   SsS^\\   S_\\   S`\\   S \4Sa jjrCS \4Sb jrDS \4Sc jrEStSd\S \4Se jjrFSuSf\Sd\S \.\   4Sg jjrGSrHg")vr   é;   )zexample.orgzexample.comzexample.netÚsafe_domain_names)z	gmail.comz	yahoo.comzhotmail.comÚfree_email_domains)
Úcomr.   r.   r.   r.   r.   ÚbizÚinfoÚnetÚorgÚtlds)ÚdbÚsrvÚdesktopÚlaptopÚltÚemailÚwebÚhostname_prefixes)ÚindexÚhomeÚsearchÚmainÚpostÚhomepageÚcategoryÚregisterÚloginÚfaqÚaboutÚtermsÚprivacyÚauthorÚ	uri_pages)Úappr?   z
wp-contentr>   rB   ÚtagÚ
categoriesÚtagsÚblogÚpostsÚlistÚexploreÚ	uri_paths)	ú.htmlrT   rT   ú.htmrU   ú.phprV   z.jspz.aspÚuri_extensions)	ÚGETÚHEADÚPOSTÚPUTÚDELETEÚCONNECTÚOPTIONSÚTRACEÚPATCHÚhttp_methods)=éd   ée   éf   ég   éÈ   éÉ   éÊ   éË   éÌ   éÍ   éÎ   éÏ   éÐ   éâ   i,  i-  i.  i/  i0  i1  i3  i4  i�  i‘  i’  i“  i”  i•  i–  i—  i˜  i™  iš  i›  iœ  i�  iž  iŸ  i   i¡  i¥  i¦  i§  i¨  i©  iª  i¬  i­  i¯  iÃ  iô  iõ  iö  i÷  iø  iù  iú  iû  iü  iþ  iÿ  Úhttp_assigned_codes)z{{last_name}}.{{first_name}}z{{first_name}}.{{last_name}}z{{first_name}}##z?{{last_name}}Úuser_name_formats)z{{user_name}}@{{domain_name}}z#{{user_name}}@{{free_email_domain}}Úemail_formats)zwww.{{domain_name}}/z{{domain_name}}/Úurl_formats)z&https://picsum.photos/{width}/{height}z'https://dummyimage.com/{width}x{height}z)https://placekittens.com/{width}/{height}Úimage_placeholder_servicesr   .ÚreplacementsÚstringÚreturnc                 óh   • U R                    H  u  p#UR                  X#5      nM     [        U5      nU$ ©N)ru   Úreplacer   )Úselfrv   r>   rz   s       r)   Ú	_to_asciiÚProvider._to_asciiÝ   s3   € Ø#×0Ô0‰OˆFØ—^‘^ FÓ4ŠFñ  1ô ˜6Ó"ˆØˆr(   NÚsafeÚdomainc                 óB  • U(       a  U R                  5        SU 3nU$ U(       a%  U R                  5        SU R                  5        3nU$ U R                  U R                  5      nSR	                  U R
                  R                  U5      R                  S5      5      nU$ )NÚ@Ú Ú )Ú	user_nameÚsafe_domain_nameÚrandom_elementrr   ÚjoinÚ	generatorÚparseÚsplit)r{   r~   r   r9   Úpatterns        r)   r9   ÚProvider.emailä   s—   € æØ—~‘~Ó'Ð(¨¨&¨Ð2ˆEð ˆö Ø—~‘~Ó'Ð(¨¨$×*?Ñ*?Ó*AÐ)BÐCˆEð ˆð  ×.Ñ.¨t×/AÑ/AÓBˆGØ—G‘G˜DŸN™N×0Ñ0°Ó9×?Ñ?ÀÓDÓEˆEØˆr(   c                 ó8   • U R                  U R                  5      $ ry   )r†   r,   ©r{   s    r)   r…   ÚProvider.safe_domain_nameï   s   € à×"Ñ" 4×#9Ñ#9Ó:Ð:r(   c                 óJ   • U R                  5       S-   U R                  5       -   $ ©Nr�   )r„   r…   rŽ   s    r)   Ú
safe_emailÚProvider.safe_emailó   s"   € à�~‰~Ó #Ñ%¨×(=Ñ(=Ó(?Ñ?Ð?r(   c                 óJ   • U R                  5       S-   U R                  5       -   $ r‘   )r„   Úfree_email_domainrŽ   s    r)   Ú
free_emailÚProvider.free_email÷   s"   € à�~‰~Ó #Ñ%¨×(>Ñ(>Ó(@Ñ@Ð@r(   c                 óJ   • U R                  5       S-   U R                  5       -   $ r‘   )r„   Údomain_namerŽ   s    r)   Úcompany_emailÚProvider.company_emailû   s"   € à�~‰~Ó #Ñ%¨×(8Ñ(8Ó(:Ñ:Ð:r(   c                 ó8   • U R                  U R                  5      $ ry   )r†   r-   rŽ   s    r)   r•   ÚProvider.free_email_domainÿ   s   € à×"Ñ" 4×#:Ñ#:Ó;Ð;r(   c                 óÈ   • U R                  U R                  5      nU R                  SR                  U R                  R                  U5      R                  S5      5      5      $ )Nr‚   rƒ   )r†   rr   r|   r‡   rˆ   r‰   rŠ   ©r{   r‹   s     r)   Úascii_emailÚProvider.ascii_email  sO   € à×*Ñ*¨4×+=Ñ+=Ó>ˆØ�~‰~Ø�G‰G�D—N‘N×(Ñ(¨Ó1×7Ñ7¸Ó<Ó=ó
ð 	
r(   c                 óh   • U R                  U R                  5       S-   U R                  5       -   5      $ r‘   )r|   r„   r…   rŽ   s    r)   Úascii_safe_emailÚProvider.ascii_safe_email
  s+   € à�~‰~˜dŸn™nÓ.°Ñ4°t×7LÑ7LÓ7NÑNÓOÐOr(   c                 óh   • U R                  U R                  5       S-   U R                  5       -   5      $ r‘   )r|   r„   r•   rŽ   s    r)   Úascii_free_emailÚProvider.ascii_free_email  s0   € à�~‰~Ø�N‰NÓ˜sÑ" T×%;Ñ%;Ó%=Ñ=ó
ð 	
r(   c                 óh   • U R                  U R                  5       S-   U R                  5       -   5      $ r‘   )r|   r„   r™   rŽ   s    r)   Úascii_company_emailÚProvider.ascii_company_email  s0   € à�~‰~Ø�N‰NÓ˜sÑ" T×%5Ñ%5Ó%7Ñ7ó
ð 	
r(   c                 óÆ   • U R                  U R                  5      nU R                  U R                  U R                  R                  U5      5      R                  5       5      $ ry   )r†   rq   r|   Úbothifyrˆ   r‰   ÚlowerrŸ   s     r)   r„   ÚProvider.user_name  sH   € à×*Ñ*¨4×+AÑ+AÓBˆØ�~‰~˜dŸl™l¨4¯>©>×+?Ñ+?ÀÓ+HÓI×OÑOÓQÓRÐRr(   Úlevelsc                 ó¤   • U R                  U R                  5      nUS-   U R                  S5      -   nUS:  a  U$ US-   U R                  U5      -   $ )zº
Produce a hostname with specified number of subdomain levels.

>>> hostname()
db-01.nichols-phillips.com
>>> hostname(0)
laptop-56
>>> hostname(2)
web-12.williamson-hopkins.jackson.com
Ú-z##é   Ú.)r†   r;   Únumerifyr™   )r{   r¯   Úhostname_prefixÚhostname_prefix_first_levels       r)   ÚhostnameÚProvider.hostname  sc   € ð  $×2Ñ2°4×3IÑ3IÓJˆØ+:¸SÑ+@À4Ç=Á=ÐQUÓCVÑ+VÐ#à+1°A«:Ð'ð	
Ø;VÐY\Ñ;\Ð_c×_oÑ_oÐpvÓ_wÑ;wð	
r(   c                 óÈ   • US:  a  [        S5      eUS:X  a$  U R                  5       S-   U R                  5       -   $ U R                  5       S-   U R                  US-
  5      -   $ )zª
Produce an Internet domain name with the specified number of
subdomain levels.

>>> domain_name()
nichols-phillips.com
>>> domain_name(2)
williamson-hopkins.jackson.com
r²   z)levels must be greater than or equal to 1r³   )Ú
ValueErrorÚdomain_wordÚtldr™   )r{   r¯   s     r)   r™   ÚProvider.domain_name1  se   € ð �A‹:ÜÐHÓIÐIØ�Q‹;Ø×#Ñ#Ó%¨Ñ+¨d¯h©h«jÑ8Ð8Ø×ÑÓ! CÑ'¨$×*:Ñ*:¸6ÀA¹:Ó*FÑFÐFr(   c                 óš   • U R                   R                  S5      nUR                  S5      nU R                  UR	                  S5      5      $ )NÚcompanyrƒ   r   )rˆ   ÚformatrŠ   r|   Úpop)r{   r¿   Úcompany_elementss      r)   r»   ÚProvider.domain_wordB  sB   € ð —~‘~×,Ñ,¨YÓ7ˆØ&-§m¡m°CÓ&8ÐØ�~‰~Ð.×2Ñ2°1Ó5Ó6Ð6r(   ÚyearÚmonthÚdayr¼   Úlengthc                 óÜ  • SnU=(       d    U R                  SSS9nU=(       d    U R                  SSS9nU=(       d    U R                  SSS9nU=(       d    U R                  5       nU=(       d    U R                  SSS9n[        U5       HW  nUS	U-  -  S
-	  US-  S-  -  nUSU-  -  S-	  SUS-  -  -  nX3S-  -  S-	  US-  S-  -  nU[        X-  U-  S-  S-   5      -  nMY     US-   U-   $ )z¾Generates a domain name by given date
https://en.wikipedia.org/wiki/Domain_generation_algorithm

:type year: int
:type month: int
:type day: int
:type tld: str
:type length: int
:rtype: str
r‚   r²   i'  ©ÚminÚmaxé   é   r   é?   é   é   l   ðÿ é   é   é   é   l   øÿ r   é   l   þÿ éa   r³   )Ú
random_intr¼   ÚrangeÚchr)r{   rÄ   rÅ   rÆ   r¼   rÇ   r   Ú_s           r)   ÚdgaÚProvider.dgaI  s  € ð& ˆØ×7�t—‘¨1°$�Ð7ˆØ×7˜Ÿ™¨Q°B˜Ð7ˆØ×3�T—_‘_¨°�_Ð3ˆØ×�T—X‘X“ZˆØ×9˜4Ÿ?™?¨q°b˜?Ð9ˆä�v–ˆAØ˜A ™H‘_¨Ñ+°¸
Ñ1BÀrÑ0IÑJˆDØ˜a %™iÑ'¨BÑ.°"¸À
Ñ8JÑ2KÑKˆEØ "™9Ñ%¨"Ñ,°#¸
Ñ2BÀrÑ1IÑJˆCØ”c˜D™L¨3Ñ.°"Ñ4¸Ñ:Ó;Ñ;ŠFñ	 ð ˜‰|˜cÑ!Ð!r(   c                 ó8   • U R                  U R                  5      $ ry   )r†   r3   rŽ   s    r)   r¼   ÚProvider.tldk  s   € Ø×"Ñ" 4§9¡9Ó-Ð-r(   c                 ó8   • U R                  U R                  5      $ )zbReturns random HTTP method
https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods

:rtype: str
)r†   ra   rŽ   s    r)   Úhttp_methodÚProvider.http_methodn  s   € ð ×"Ñ" 4×#4Ñ#4Ó5Ð5r(   Úinclude_unassignedc                 óf   • U(       a  U R                  SSS9$ U R                  U R                  5      $ )a  Returns random HTTP status code
https://www.rfc-editor.org/rfc/rfc9110#name-status-codes
:param include_unassigned: Whether to include status codes which have
    not yet been assigned or are unused

:return: a random three digit status code
:rtype: int

:example: 404

rb   iW  rÉ   )r×   r†   rp   )r{   râ   s     r)   Úhttp_status_codeÚProvider.http_status_codew  s1   € ö Ø—?‘? s°�?Ð4Ð4à×&Ñ& t×'?Ñ'?Ó@Ð@r(   Úschemesc                 ó¶   • Uc  SS/nU(       a  U R                  U5      OS SU R                  U R                  5       3nU R                  R                  U5      $ )zû
:param schemes: a list of strings to use as schemes, one will chosen randomly.
    If None, it will generate http and https urls.
    Passing an empty list will result in schemeless url generation like "://domain.com".
:return: a random url string.

ÚhttpÚhttpsr‚   ú://)r†   rs   rˆ   r‰   )r{   ræ   r‹   s      r)   ÚurlÚProvider.urlˆ  s[   € ð ‰?Ø˜wÐ'ˆGæ:A˜$×-Ñ-¨gÔ6ÀrÐJÈ#Èd×NaÑNaÐbf×brÑbrÓNsÐMtÐuˆà�~‰~×#Ñ# GÓ,Ð,r(   Úaddress_classc                 óÄ  • U[         R                  R                  5       ;   a  SU S3n[         R                  U   /nOSn[        S5      /nU S3n[	        X5      (       a&  [	        X5      (       a  [        X5      [        X5      4$ U R                  U[         R                  5      nU Vs/ s H  oUR                  PM     nn[        XU5        [        XU5        X64$ s  snf )z…
Produces a 2-tuple of valid IPv4 networks and corresponding relative weights

:param address_class: IPv4 address class (a, b, or c)
Ú_cached_all_class_Ú	_networksÚ_cached_all_networksz	0.0.0.0/0Ú_weights)
r   r   Úkeysr   ÚhasattrÚgetattrÚ_exclude_ipv4_networksr   Únum_addressesÚsetattr)r{   rí   Únetworks_attrÚall_networksÚweights_attrÚnetworkÚweightss          r)   Ú_get_all_networks_and_weightsÚ&Provider._get_all_networks_and_weights—  sä   € ð œN×;Ñ;×@Ñ@ÓBÓBØ0°°¸yÐIˆMÜ*×;Ñ;¸MÑJÐK‰Là2ˆMÜ'¨Ó4Ð5ˆLð (˜¨Ð1ˆÜ�4×'Ñ'¬G°D×,GÑ,GÜ˜4Ó/´¸Ó1LÐLÐLð ×2Ñ2ØÜ×-Ñ-ó
ˆñ 9EÓEº¨W×(Ô(¹ˆÐEô 	� \Ô2Ü� GÔ,ØÐ$Ð$ùò Fs   Â+Cc                 óJ  • U(       a"  U[         R                  R                  5       ;  a  U R                  5       nSU S3nU S3n[	        X5      (       a&  [	        X5      (       a  [        X5      [        X5      4$ [         R                  U   n[         R                   Vs/ s H  oUR                  U5      (       d  M  UPM     nnU R                  U[         R                  5      nU Vs/ s H  owR                  PM     nn[        XU5        [        XU5        Xh4$ s  snf s  snf )z’
Produces an OrderedDict of valid private IPv4 networks and corresponding relative weights

:param address_class: IPv4 address class (a, b, or c)
Ú_cached_private_class_rð   rò   )r   r   ró   Úipv4_network_classrô   rõ   r   Úoverlapsrö   r   r÷   rø   )	r{   rí   rù   rû   ÚsupernetÚsubnetÚprivate_networksrü   rý   s	            r)   Ú!_get_private_networks_and_weightsÚ*Provider._get_private_networks_and_weights¸  s  € ö  ´^×5TÑ5T×5YÑ5YÓ5[Ó [Ø ×3Ñ3Ó5ˆMð 1°°¸yÐIˆØ'˜¨Ð1ˆÜ�4×'Ñ'¬G°D×,GÑ,GÜ˜4Ó/´¸Ó1LÐLÐLô "×2Ñ2°=ÑAˆÜ1?×1QÒ1QÓoÒ1Q v×UdÑUdÐem×UnŸFÑ1QÐÐoØ×6Ñ6ØÜ×-Ñ-ó
Ðñ 9IÓIÒ8H¨W×(Ô(Ñ8HˆÐIô 	�Ð%5Ô6Ü� GÔ,ØÐ(Ð(ùò pùò Js   Â DÂ=DÃ)D c                 óè  • U[         R                  R                  5       ;  a  U R                  5       nSU S3nU S3n[	        X5      (       a&  [	        X5      (       a  [        X5      [        X5      4$ [         R                  U   /nU R                  U[         R                  [         R                  -   5      nU Vs/ s H  oUR                  PM     nn[        XU5        [        XU5        XF4$ s  snf )zŒ
Produces a 2-tuple of valid public IPv4 networks and corresponding relative weights

:param address_class: IPv4 address class (a, b, or c)
Ú_cached_public_class_rð   rò   )r   r   ró   r  rô   rõ   rö   r   r   r÷   rø   )r{   rí   rù   rû   Úpublic_networksrü   rý   s          r)   Ú _get_public_networks_and_weightsÚ)Provider._get_public_networks_and_weightsÛ  së   € ð ¤× ?Ñ ?× DÑ DÓ FÓFØ ×3Ñ3Ó5ˆMð 0°¨¸iÐHˆØ'˜¨Ð1ˆÜ�4×'Ñ'¬G°D×,GÑ,GÜ˜4Ó/´¸Ó1LÐLÐLô *×:Ñ:¸=ÑIÐJˆØ×5Ñ5ØÜ×,Ñ,¬~×/PÑ/PÑPó
ˆñ 9HÓHº¨W×(Ô(¹ˆÐHô 	� _Ô5Ü� GÔ,ØÐ'Ð'ùò Is   Â=C/Úsubnetsrý   rü   c           	      óÆ  • U(       d  [        S5      e[        U[        5      (       am  [        U5      [        U5      :X  aU  [	        S U 5       5      (       a>  [        UU Vs/ s H  n[        U5      PM     snU R                  R                  SS9S   nO%U R                  R                  R                  U5      n[        UU R                  R                  R                  SUR                  S-
  5         5      nU(       a\  US[        U R                  R                  R                  UR                  UR                  5      5      -   -  n[        [        USS95      nU$ s  snf )	aX  
Produces a random IPv4 address or network with a valid CIDR
from within the given subnets using a distribution described
by weights.

:param subnets: List of IPv4Networks to choose from within
:param weights: List of weights corresponding to the individual IPv4Networks
:param network: Return a network address, and not an IP address
:return:
zNo subnets to choose fromc              3   óN   #   • U  H  n[        U[        [        45      v •  M     g 7fry   )Ú
isinstanceÚfloatÚint)Ú.0Úws     r)   Ú	<genexpr>Ú=Provider._random_ipv4_address_from_subnets.<locals>.<genexpr>  s   é € ÐAº°A”J˜q¤5¬# ,×/Ð/ºùs   ‚#%r²   )ÚrandomrÇ   r   Ú/F©Ústrict)rº   r  rQ   ÚlenÚallr   r  rˆ   r  Úchoicer%   Úrandintr÷   Ú	prefixlenÚmax_prefixlenr   )r{   r  rý   rü   r  r  Úaddresss          r)   Ú!_random_ipv4_address_from_subnetsÚ*Provider._random_ipv4_address_from_subnetsý  s;  € ö  ÜÐ8Ó9Ð9ô �w¤×%Ñ%Ü�G“¤ G£Ó,ÜÑA¹ÓA×AÑAä)ØÙ#*Ó+¢7˜a”�q–¡7Ñ+Ø—~‘~×,Ñ,Øñ	ð
 ñ‰Fð —^‘^×*Ñ*×1Ñ1°'Ó:ˆFäØØ—‘×%Ñ%×-Ñ-ØØ×(Ñ(¨1Ñ,óñó
ˆö Ø�sœSØ—‘×%Ñ%×-Ñ-Ø×$Ñ$Ø×(Ñ(óóñ ñ ˆGô œ+ g°eÑ<Ó=ˆGàˆùò3 ,s   Á!E
ÚnetworksÚnetworks_to_excludec                 ó²   ^• UR                  S S9  U H9  mU4S jn[        [        X15      5      nU VVs/ s H  oU  H  ofPM     M     nnnM;     U$ s  snnf )zþ
Exclude the list of networks from another list of networks
and return a flat list of new networks.

:param networks: List of IPv4 networks to exclude from
:param networks_to_exclude: List of IPv4 networks to exclude
:returns: Flat list of IPv4 networks
c                 ó   • U R                   $ ry   )r   )Úxs    r)   Ú<lambda>Ú1Provider._exclude_ipv4_networks.<locals>.<lambda>>  s   € ¨q¯{ª{r(   )Úkeyc                 ó”   >•  [        U R                  T5      5      $ ! [         a     U R                  T5      (       a  / s $ U /s $ f = f)a²  
Exclude a single network from another single network
and return a list of networks. Network to exclude
comes from the outer scope.

:param network: Network to exclude from
:returns: Flat list of IPv4 networks after exclusion.
          If exclude fails because networks do not
          overlap, a single element list with the
          orignal network is returned. If it overlaps,
          even partially, the network is excluded.
)rQ   Úaddress_excluderº   r  )rü   Únetwork_to_excludes    €r)   Ú_exclude_ipv4_networkÚ>Provider._exclude_ipv4_networks.<locals>._exclude_ipv4_networkA  sO   ø€ ð	)Ü × 7Ñ 7Ð8JÓ KÓLÐLøÜ!ó )ð ×'Ñ'Ð(:×;Ñ;Ø!š	à '˜yÒ(ð)ús   ƒ �"AÁAÁA)ÚsortrQ   Úmap)r{   r%  r&  r0  Únested_networksÚnestedÚitemr/  s          @r)   rö   ÚProvider._exclude_ipv4_networks3  sd   ø€ ð 	× Ñ Ñ%:Ð Ñ;Û"5Ðõ)ô0 #¤3Ð'<Ó#GÓHˆOÙ+:ÔNª? Ãv¸tšÁv™©?ˆHÑN‰Hñ7 #6ð: ˆùó Os   ¶Ac                 ó$   • U R                  S5      $ )zM
Returns a IPv4 network class 'a', 'b' or 'c'.

:returns: IPv4 network class
Úabc)r†   rŽ   s    r)   r  ÚProvider.ipv4_network_class^  s   € ð ×"Ñ" 5Ó)Ð)r(   Úprivatec                 ó”   • USL a  U R                  X!S9$ USL a  U R                  X!S9$ U R                  US9u  pEU R                  XEUS9$ )zÅ
Returns a random IPv4 address or network with a valid CIDR.

:param network: Network address
:param address_class: IPv4 address class (a, b, or c)
:param private: Public or private
:returns: IPv4
T)rí   rü   F©rí   ©rý   rü   )Úipv4_privateÚipv4_publicrþ   r#  )r{   rü   rí   r;  rú   rý   s         r)   Úipv4ÚProvider.ipv4f  si   € ð �dŠ?Ø×$Ñ$°=Ð$ÐRÐRØ˜ÒØ×#Ñ#°-Ð#ÐQÐQà$(×$FÑ$FÐUbÐ$FÐ$cÑ!ˆLØ×9Ñ9¸,ÐahÐ9ÐiÐir(   c                 óD   • U R                  US9u  p4U R                  X4US9$ )z‡
Returns a private IPv4.

:param network: Network address
:param address_class: IPv4 address class (a, b, or c)
:returns: Private IPv4
r=  r>  )r  r#  )r{   rü   rí   r  rý   s        r)   r?  ÚProvider.ipv4_private|  s4   € ð %)×$JÑ$JÐYfÐ$JÐ$gÑ!ÐØ×5Ñ5Ð6FÐahÐ5ÐiÐir(   c                 óD   • U R                  US9u  p4U R                  X4US9$ )zž
Returns a public IPv4 excluding private blocks.

:param network: Network address
:param address_class: IPv4 address class (a, b, or c)
:returns: Public IPv4
r=  r>  )r  r#  )r{   rü   rí   r  rý   s        r)   r@  ÚProvider.ipv4_public‡  s2   € ð $(×#HÑ#HÐWdÐ#HÐ#eÑ ˆØ×5Ñ5°oÐ`gÐ5ÐhÐhr(   c           	      ó>  • [        [        U R                  R                  R	                  S[
        -  S[        -  S-
  5      5      5      nU(       aL  US[        U R                  R                  R	                  S[        5      5      -   -  n[        [        USS95      nU$ )z:Produce a random IPv6 address or network with a valid CIDRr   r²   r  r   Fr  )r%   r   rˆ   r  r  r   r   r   )r{   rü   r"  s      r)   Úipv6ÚProvider.ipv6’  s}   € ä”k $§.¡.×"7Ñ"7×"?Ñ"?ÀÄ:ÁÐPQÔS]ÑP]ÐabÑObÓ"cÓdÓeˆÞØ�sœS §¡×!6Ñ!6×!>Ñ!>¸qÄ*Ó!MÓNÑNÑNˆGÜœ+ g°eÑ<Ó=ˆGØˆr(   Ú	multicastc                 ó¢  • [        SS5       Vs/ s H(  o R                  R                  R                  SS5      PM*     nnUSL a8  UR	                  SU R                  R                  R                  SSS5      5        O7UR	                  SU R                  R                  R                  SSS5      5        SR                  S	 U 5       5      $ s  snf )
zZ
Returns a random MAC address.

:param multicast: Multicast address
:returns: MAC Address
r   é   éÿ   Tr²   r   éþ   Ú:c              3   ó,   #   • U  H
  nS U-  v •  M     g7f)z%02xNr   )r  r)  s     r)   r  Ú'Provider.mac_address.<locals>.<genexpr>¦  s   é € Ð0ªC q˜ ž
ªCùs   ‚)rØ   rˆ   r  r  ÚinsertÚ	randranger‡   )r{   rJ  rÚ   Úmacs       r)   Úmac_addressÚProvider.mac_addressš  s¦   € ô CHÈÈ1Ä+ÓNÂ+¸Q�~‰~×$Ñ$×,Ñ,¨T°4Ö8Á+ˆÐNØ˜ÒØ�J‰J�q˜$Ÿ.™.×/Ñ/×9Ñ9¸$ÀÀaÓHÕIà�J‰J�q˜$Ÿ.™.×/Ñ/×9Ñ9¸$ÀÀaÓHÔIØ�x‰xÑ0©CÓ0Ó0Ð0ùò Os   �/CÚ	is_systemÚis_userÚ
is_dynamicc                 ó¬   • U(       a  U R                  SSS9$ U(       a  U R                  SSS9$ U(       a  U R                  SSS9$ U R                  SSS9$ )zÜReturns a network port number
https://tools.ietf.org/html/rfc6335

:param is_system: System or well-known ports
:param is_user: User or registered ports
:param is_dynamic: Dynamic / private / ephemeral ports
:rtype: int
r   iÿ  rÉ   é   iÿ¿  i À  iÿÿ  )r×   )r{   rW  rX  rY  s       r)   Úport_numberÚProvider.port_number¨  sY   € ö Ø—?‘? q¨d�?Ð3Ð3ÞØ—?‘? t°�?Ð7Ð7ÞØ—?‘? u°%�?Ð8Ð8à�‰ 1¨%ˆÐ0Ð0r(   c                 ó8   • U R                  U R                  5      $ ry   )r†   rJ   rŽ   s    r)   Úuri_pageÚProvider.uri_page»  s   € Ø×"Ñ" 4§>¡>Ó2Ð2r(   Údeepc                 ó²   • U(       a  UO%U R                   R                  R                  SS5      nSR                  U R	                  U R
                  US95      $ )Nr²   r   r  )rÇ   )rˆ   r  r  r‡   Úrandom_elementsrS   )r{   ra  s     r)   Úuri_pathÚProvider.uri_path¾  sJ   € Þ‰t §¡×!6Ñ!6×!>Ñ!>¸qÀ!Ó!DˆØ�x‰xØ× Ñ  §¡¸Ð Ð=ó
ð 	
r(   c                 ó8   • U R                  U R                  5      $ ry   )r†   rW   rŽ   s    r)   Úuri_extensionÚProvider.uri_extensionÄ  s   € Ø×"Ñ" 4×#6Ñ#6Ó7Ð7r(   c                 ó$  • Uc  SS/nU(       a  U R                  U5      OS SU R                  U R                  5       3nU R                  US9nU R                  5       nU R	                  5       nU R
                  R                  U5       U U U 3$ )aW  
:param schemes: a list of strings to use as schemes, one will chosen randomly.
    If None, it will generate http and https uris.
    Passing an empty list will result in schemeless uri generation like "://domain.com/index.html".
:param deep: an integer specifying how many path components the URI should have..
:return: a random url string.
rè   ré   r‚   rê   )ra  )r†   rs   rd  r_  rg  rˆ   r‰   )r{   ræ   ra  r‹   ÚpathÚpageÚ	extensions          r)   ÚuriÚProvider.uriÇ  s–   € ð ‰?Ø˜wÐ'ˆGæ:A˜$×-Ñ-¨gÔ6ÀrÐJÈ#Èd×NaÑNaÐbf×brÑbrÓNsÐMtÐuˆØ�}‰} $ˆ}Ð'ˆØ�}‰}‹ˆØ×&Ñ&Ó(ˆ	Ø—.‘.×&Ñ& wÓ/Ð0°°°t°f¸Y¸KÐHÐHr(   Úvaluec                 ó`   • Uc*  [         R                  nU R                  R                  SUS9nU$ )zDjango algorithmé   )Úext_word_list)ÚUSLoremProviderÚ	word_listrˆ   Útext)r{   ro  rr  s      r)   ÚslugÚProvider.slugØ  s4   € ð ‰=ô ,×5Ñ5ˆMà—N‘N×'Ñ'¨¸-Ð'ÐHˆEØˆr(   ÚwidthÚheightÚplaceholder_urlc                 ó¼   • U=(       d    U R                  SS9nU=(       d    U R                  SS9nUc  U R                  U R                  5      nUR                  XES9$ )ap  
Returns URL to placeholder image
Example: http://placehold.it/640x480

:param width: Optional image width
:param height: Optional image height
:param placeholder_url: Optional template string of image URLs from custom
    placeholder service. String must contain ``{width}`` and ``{height}``
    placeholders, eg: ``https:/example.com/{width}/{height}``.
:rtype: str
r[  )rË   )rx  ry  )r×   r†   rt   rÀ   )r{   rx  ry  rz  Úwidth_Úheight_s         r)   Ú	image_urlÚProvider.image_urlã  s^   € ð" ×3˜$Ÿ/™/¨d˜/Ð3ˆØ×5˜DŸO™O°˜OÐ5ˆØÑ"Ø"×1Ñ1°$×2QÑ2QÓRˆOØ×%Ñ%¨FÐ%ÐCÐCr(   c                 ó4   • [        U R                  SSS95      $ )zjReturns IANA Registrar ID
https://www.iana.org/assignments/registrar-ids/registrar-ids.xhtml

:rtype: str
r²   i8¢‡ rÉ   )r%   r×   rŽ   s    r)   Úiana_idÚProvider.iana_idú  s   € ô �4—?‘? q¨g�?Ð6Ó7Ð7r(   c                 ó˜   • SU R                  SSS9-  nSU R                  SSS9-  nU R                  SU U S	35      R                  5       $ )
z‡Returns RIPE Organization ID
https://www.ripe.net/manage-ips-and-asns/db/support/organisation-object-in-the-ripe-database

:rtype: str
Ú?r   rÒ   rÉ   Ú%r²   rL  zORG-z-RIPE)r×   r¬   Úupper)r{   ÚlexÚnums      r)   Úripe_idÚProvider.ripe_id  sW   € ð �D—O‘O¨¨q�OÐ1Ñ1ˆØ�D—O‘O¨¨q�OÐ1Ñ1ˆØ�|‰|˜d 3 %¨ u¨EÐ2Ó3×9Ñ9Ó;Ð;r(   Úsuffixc                 óÎ   • [        U5      S:  a  [        S5      eSU R                  SSS9-  nSU R                  SSS9-  nU R                  U U S	U 35      R	                  5       $ )
z]Returns NIC Handle ID
https://www.apnic.net/manage-ip/using-whois/guide/person/

:rtype: str
r   z0suffix length must be greater than or equal to 2r„  rÒ   rÉ   r…  r²   rL  r±   )r  rº   r×   r¬   r†  )r{   r‹  r‡  rˆ  s       r)   Ú
nic_handleÚProvider.nic_handle  sp   € ô ˆv‹;˜‹?ÜÐOÓPÐPà�D—O‘O¨¨q�OÐ1Ñ1ˆØ�D—O‘O¨¨q�OÐ1Ñ1ˆØ�|‰|˜s˜e C 5¨¨&¨Ð2Ó3×9Ñ9Ó;Ð;r(   Úcountc                 ó\   • [        U5       Vs/ s H  o0R                  US9PM     sn$ s  snf )z.Returns NIC Handle ID list

:rtype: list[str]
)r‹  )rØ   r�  )r{   r�  r‹  rÚ   s       r)   Únic_handlesÚProvider.nic_handles  s)   € ô 9>¸e¼ÓEº°1—‘ v�Ó.¹ÑEÐEùÒEs   Ž))TN)r²   )NNNNN)Try   )NF)FNN)FN)F)FFF)NN)NNN)ÚFAKE)r²   z????)Ir    r!   r"   r#   r,   r   r%   r&   r-   r3   r;   rJ   rS   rW   ra   rp   r  rq   rr   rs   rt   ru   r   r|   r   Úboolr
   r9   r…   r’   r–   rš   r•   r    r£   r¦   r©   r   r„   r·   r™   r»   rÛ   r¼   rà   rä   r	   rë   r   rþ   r  r  r#  rö   r  rA  r?  r@  rH  rU  r\  r_  rd  rg  rm  r   rv  r~  r�  r‰  r�  r‘  r'   r   r(   r)   r   r   ;   s‹  ‡ Ø+XÐ�| CÑ(ÓXØ,UÐ˜ SÑ)ÓUð€Dˆ,�sÑ
ó ð,Ð�| CÑ(ó ð$€Iˆ|˜CÑ ó ð $€Iˆ|˜CÑ ó ð
)€N�L Ñ%ó 
ð
'€L�,˜sÑ#ó 
ð>.Ð˜ cÑ*ó >ð@,Ð�| CÑ(ó ð(€M�< Ñ$ó ð&€K�˜cÑ"ó ð5Ð ¨SÑ 1ó ð 13€L�%˜˜c 3˜h™¨Ð,Ñ-Ó2ð ð ¨ô ð ñ˜$ð ¨x¸©}ð Èô ó ðð ð; #ó ;ó ð;ð ð@˜Có @ó ð@ð ðA˜Có Aó ðAð ð;˜só ;ó ð;ð ð< 3ó <ó ð<ð ð
˜Só 
ó ð
ð ðP #ó Pó ðPð ð
 #ó 
ó ð
ð
 ð
 Só 
ó ð
ð
 ðS˜3ó Só ðSð ñ
˜sð 
¨3ô 
ó ð
ð" ñG #ð G¨cô Gó ðGð  Øð7˜Só 7ó ó ð7ð #Ø#Ø!Ø!Ø $ñ "à�s‰mð "ð ˜‰}ð "ð �c‰]ð	 "ð
 �c‰]ð "ð ˜‘ð "ð 
õ "ðD.�Sô .ð6˜Sô 6ñA°4ð AÀ3õ Añ"-˜8 D¨¡IÑ.ð -¸#õ -ñ%¸8ÀC¹=ð %ÐTYÐZ^Ð_jÑZkÐmqÐruÑmvÐZvÑTwõ %ðF (,ñ!)à ‘}ð!)ð 
ˆt�KÑ  $ s¡)Ð+Ñ	,õ!)ðJ (,ñ (à ‘}ð (ð 
ˆt�KÑ  $ s¡)Ð+Ñ	,õ (ðJ (,Øñ	4à�kÑ"ð4ð ˜$˜s™)Ñ$ð4ð ð	4ð
 
õ4ðl)Ø˜[Ñ)ð)Ø@DÀ[Ñ@Qð)à	ˆkÑ	ô)ðV* Cô *ð Ø'+Ø!%ñ	jàðjð   ‘}ðjð ˜#‘ð	jð
 
õjñ,	j Dð 	jÀÈ#Áð 	jÐZ]õ 	jñ	i 4ð 	iÀÈÁð 	iÐY\õ 	iñ˜Dð ¨Sõ ñ1 Tð 1°cõ 1ñ1 Tð 1¸Dð 1ÐVZð 1Ðgjõ 1ð&3˜#ô 3ñ
˜X c™]ð 
°cõ 
ð8˜sô 8ñI˜8 D¨¡IÑ.ð I¸XÀc¹]ð IÐVYõ Ið" ñ˜( 3™-ð °3ô ó ðð  $Ø $Ø)-ñ	Dà˜‰}ðDð ˜‘ðDð " #™ð	Dð
 
õDð.8˜ô 8ð	<˜ô 	<ñ< ð <°#õ <ñF ð F°#ð FÀ4ÈÁ9÷ Fð Fr(   r   )!ÚbuiltinsÚ@py_builtinsÚ_pytest.assertion.rewriteÚ	assertionÚrewriteÚ
@pytest_arÚ	ipaddressr   r   r   r   r   Útypingr   r	   r
   r   Údecoder   Úutils.decoratorsr   r   r   Úutils.distributionr   r‚   r   r   Úlorem.en_USr   rs  Ú	localizedr   r   r(   r)   Ú<module>r¢     sH   ðß  „ × SÕ Sß .Ó .å ß CÑ CÝ 6ß )Ý 5à€	÷+ñ +ô\gFˆ|õ gFr(   