403Webshell
Server IP : 217.160.0.244  /  Your IP : 216.73.217.138
Web Server : Apache
System : Linux infong-eu155 4.4.400-icpu-108 #2 SMP Wed Feb 11 11:51:01 UTC 2026 x86_64
User : u100174116 ( 6746176)
PHP Version : 8.5.10
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /lib/python3/dist-packages/inflect/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /lib/python3/dist-packages/inflect/__pycache__/__init__.cpython-313.pyc
�

U�ft����%SrSSKJr SSKrSSKrSSKrSSKrSSKrSSKrSSK	J
r
 SSKJrJ
r
JrJrJrJrJrJrJrJrJrJrJr SSKJr SSKJr SS	KJr "S
S\5r "SS
\5r!"SS\5r""SS\5r#"SS\5r$"SS\5r%"SS\5r&GSuSjr'GSvGSwSjjr(GSxSjr)GSyGSzSjjr*SS S!S"S#S$S%S&S'.r+0S(S)_S*S+_S,S-_S.S/_S0S1_S2S3_S4S5_S6S7_S8S9_S:S;_S<S=_S>S?_S@SA_SBSC_SDSE_SFSG_SHSI_0SJSK_SLSM_SNSO_SPSQ_SRSS_STSU_SVSW_SXSY_SZS[_S\S]_S^S__S`Sa_SbSc_SdSe_SfSg_ShSi_Er,\,R[\+5 SjSkSlSmSn.r.SoSp0r/\,Ra5VVs0sHupX_M	 snnr1\2"\15H/r3Sq\3;dM\3RiSq5ur5r6\1\3=\1\5'\1\6'\1\3	M1 \.Ra5VVs0sHupX_M	 snnr7\/Ra5VVs0sHupX_M	 snnr8\2"\85H/r3Sq\3;dM\3RiSq5ur5r6\8\3=\8\5'\8\6'\8\3	M1 Srr9\)"\95r:Ssr;\)"\;5r</StQr=Su/r>\("Sv\=\>Vs/sHnSwU3PM
 sn-5r?\=\>-r@\*"\@SxSySzS{9urArBrCS|rD\*"\DS}S5urErFrGrHS~rI\*"\ISS5urJrKrLrMS�rN\*"\NSS5urOrPrQrRS�rS\*"\SS�Sy5urTrUrVrWS�rX\*"\XS�Sy5urYrZr[r\S�r]\*"\]S�Sy5ur^r_r`raS�rb\*"\bS�Sy5urcrdrerfS�rg\*"\gS�Sy5urhrirjrkS�rl\)"\l5rmS�rn\*"\nS�Sy5urorprqrrS�rs\*"\sS�Sy5urtrurvrw/S�Qrx\)"\x5ry\)"\xVs/sH
o"SS�S�3PM sn5rz\("S�\x5r{1S�kr|\|Vs1sHo"S3iM	 snr}/S�Q\x-r~\)"\~5r\)"\~Vs/sHo"S3PM	 sn5r�S�r�\*"\�SS5ur�r�r�r�S�r�\*"\�S�Sy5ur�r�r�r�S�r�\*"\�S�Sy5ur�r�r�r�S�r�\*"\�S�Sy5ur�r�r�r�S�r�\*"\�S�Sy5ur�r�r�r�S�r�\*"\�S�S5ur�r�r�r�S�r�\*"\�S�S5ur�r�r�r�S�Ri5r�S�Ri5r�\*"\�SSSzS{9ur�r�r�\*"\�SSSzS{9ur�r�r�S�r�\*"\�S�S�SzS{9ur�r�r�/S�Qr�S�S�/r�\�\�Vs/sHnSwU3PM
 sn-r�S�r�/S�Q\�-r�/S�Qr�/S�Q\�-r�\)"\�5r�/S�Q\=-r�S�S�/\>-r�\)"\�5r�\�Vs/sHo"S�3PM	 snr�\�Vs/sHo"S�3PM	 snr�\)"\�5r�S�/r�\'"SqGR\�\�Vs/sHnSwU3PM
 sn-\�-55r�S�r�S�r�S�r�S�r�S�r�S�r�S�r�S�r�S�r�S�r�S�r�S�r�S�r�S�r�S�r�S�r�\'"SqGR\�/\�-\2"\+5-/S�Q-55r�S�\'"S�54S�\'"S�54S�\'"S�544r�S�\�5r�S\�S�'S�SqGR\�5S�3r�S�r�S�Ri5r�\�/S�Q-r�\)"\�5r�\'"SqGR\�55r�S�\�S�3r�1S�kr�0S�S�_S�S�_S�S�_S�S�_S�S�_S�S�_S�S�_S�S�_S�S�_S�S�_S�S�_S�S�_S�S�_S�S�_S�S�_S�S�_S�S�_S�S�0Er�S�\�Ra5VVs0sHupX_M	 snn0r�S�\�S�'S�\�S�S�'S�S�S�S�S�S�S�S�S�S�S�S�S�.r�\'"SqGR\�55r�\)"\�5r�\�Ra5VVs0sHupX_M	 snn\�S�'S�Hur�r�r�r�\�\�\�\�\�'M \'"SqGR\�S�55r�\)"\�S�5r�GS{S�jr�S�S�S�S�S�S�S�S�S�S�.	r�0S�S�_S�S�_S�S�_S�S�_S�S�_S�S�_S�S�_S�S�_S�S�_S�S�_S�S�_S�S�_S�S�_S�S�_S�S�_S�S�_S�S�_S�GSGSGSGSGSGSGSGSGSGSGSGSGSGSGS.Er�\GR�"GS\'"SqGR\�55GS	3\GR�5r�GS
r�\GR�"GS\GR�5r�GSr�GS
r�GSr�GSr�GSr�GSGSGSGSGS.r�\GR�"GS\'"SqGR\�55GS3\GR�5r�GSGSGSGSGSGSGS.r�\GR�"GS\'"SqGR\�55GS3\GR�5r�\GR�"GS\GR�5r�\GR�"GS\GR�5r�\GR�"GS\GR�5r�\GR�"GS\GR�5r�\GR�"GS\GR�5r�\GR�"GS\GR�5GrGS GS!GS"GS#GS GS GS GS GS GS GS GS GS GS$.
GrG\"G\GR55GrG\"GS%GS&GS'GS(GS)GS*GS+GS,GS-9Gr\GR�"S�SqGRG\5GS.35Gr/GS/QGr/GS0QGr	/GS1QGr
/GS2QGrG\"SzSzSzSSzSzGS39GrG\Vs0sHoS_M snGr
G\Vs0sHoSz_M snGrSSzSGS4.Gr\GR�"GS55Gr\GR�"GS6\GR�5Gr\GR�"GS75Gr\GR�"GS8\�GS3\GR�5Gr\GR�"GS8\�GS3\GR�5Gr\GR�"GS95Gr\GR�"GS\�GS35Gr\GR�"GS:5Gr\GR�"GS;\GR�5Gr\GR�"GS<5Gr\GR�"GS=\GR�5Gr\GR�"GS>\GR�5Gr\GR�"GS?\GR�5Gr\GR�"GS@\GR�5Gr\GR�"GSA\GR�5Gr\GR�"GSB\GR�5Gr\GR�"GSC\GR�5Gr \GR�"GSD\GR�5Gr!\GR�"GSE\GR�5Gr"\GR�"GSF\GR�5Gr#\GR�"GSG\GR�5Gr$\GR�"GSH\GR�5Gr%\GR�"GSI5Gr&\GR�"GSJ\GR�5Gr'\GR�"GSK5Gr(\GR�"GSL5Gr)\GR�"GSM5Gr*\GR�"GSN5Gr+\GR�"GSO5Gr,\GR�"GSP5Gr-\GR�"GSQ5Gr.\GR�"GSR5Gr/\GR�"GSS5Gr0\GR�"GST5Gr1\GR�"GSU5Gr2\GR�"GSV5GSW4\GR�"GSX5GSY4\GR�"GSZ5GS[4\GR�"GS\5GS]4\GR�"GS^5GS_4\GR�"GS`5GSa4\GR�"GSb5GSc4\GR�"GSd5GS[4\GR�"GSe5GS[4\GR�"GSf5GSg4\GR�"GSh5GSi44Gr3\GR�"GSj5Gr4"GSkGSlG\55Gr6\
Gr7\Gr8G\8(a\G\5GSm4Gr9O"GSnGSoG\:5Gr;"GSpGSqG\;GSr9Gr9"GSsGSt5Gr<gs snnfs snnfs snnfs snfs snfs snfs snfs snfs snfs snfs snfs snnfs snnf!\�a 0\�\�\�'\�\�\�\�\�'GM�f=fs snfs snf(|a�
inflect: english language inflection
 - correctly generate plurals, ordinals, indefinite articles
 - convert numbers to words

Copyright (C) 2010 Paul Dyson

Based upon the Perl module
`Lingua::EN::Inflect <https://metacpan.org/pod/Lingua::EN::Inflect>`_.

methods:
    classical inflect
    plural plural_noun plural_verb plural_adj singular_noun no num a an
    compare compare_nouns compare_verbs compare_adjs
    present_participle
    ordinal
    number_to_words
    join
    defnoun defverb defadj defa defan

INFLECTIONS:
    classical inflect
    plural plural_noun plural_verb plural_adj singular_noun compare
    no num a an present_participle

PLURALS:
    classical inflect
    plural plural_noun plural_verb plural_adj singular_noun no num
    compare compare_nouns compare_verbs compare_adjs

COMPARISONS:
    classical
    compare compare_nouns compare_verbs compare_adjs

ARTICLES:
    classical inflect num a an

NUMERICAL:
    ordinal number_to_words

USER_DEFINED:
    defnoun defverb defadj defa defan

Exceptions:
 UnknownClassicalModeError
 BadNumValueError
 BadChunkingOptionError
 NumOutOfRangeError
 BadUserDefinedPatternError
 BadRcFileError
 BadGenderError

�)�annotationsN)�Number)
�
TYPE_CHECKING�Any�Callable�Dict�Iterable�List�Literal�Match�Optional�Sequence�Tuple�Union�cast)�windowed_complete)�typechecked�)�	Annotatedc��\rSrSrSrg)�UnknownClassicalModeError�V�N��__name__�
__module__�__qualname__�__firstlineno__�__static_attributes__r��2/usr/lib/python3/dist-packages/inflect/__init__.pyrrV���r rc��\rSrSrSrg)�BadNumValueError�ZrNrrr r!r$r$Zr"r r$c��\rSrSrSrg)�BadChunkingOptionError�^rNrrr r!r'r'^r"r r'c��\rSrSrSrg)�NumOutOfRangeError�brNrrr r!r*r*br"r r*c��\rSrSrSrg)�BadUserDefinedPatternError�frNrrr r!r-r-fr"r r-c��\rSrSrSrg)�BadRcFileError�jrNrrr r!r0r0jr"r r0c��\rSrSrSrg)�BadGenderError�nrNrrr r!r3r3nr"r r3�sc��SUS3$)Nz(?:�)r)r5s r!�encloser8rs��
���1�:�r c�^^�[SRU4SjU=(d /555$)a]
Join stem of each word in words into a string for regex.

Each word is truncated at cutpoint.

Cutpoint is usually negative indicating the number of letters to remove
from the end of each word.

>>> joinstem(-2, ["ephemeris", "iris", ".*itis"])
'(?:ephemer|ir|.*it)'

>>> joinstem(None, ["ephemeris"])
'(?:ephemeris)'

>>> joinstem(5, None)
'(?:)'
�|c3�,># �UH	oSTv� M g7f�Nr)�.0�w�cutpoints  �r!�	<genexpr>�joinstem.<locals>.<genexpr>�s����>�+�Q�i�x�L�+�s�)r8�join)r?�wordss` r!�joinstemrDvs%���$�3�8�8�>�%�+�2�+�>�>�?�?r �
Iterable[str]c��[R"[5nUH nU[U5R	U5 M" U$)z�
From a list of words, return a dict of sets sorted by word length.

>>> words = ['ant', 'cat', 'dog', 'pig', 'frog', 'goat', 'horse', 'elephant']
>>> ret = bysize(words)
>>> sorted(ret[3])
['ant', 'cat', 'dog', 'pig']
>>> ret[5]
{'horse'}
)�collections�defaultdict�set�len�add)rC�resr>s   r!�bysizerM�s7��&�1�1�#�6�C�
���C��F��������Jr Tc��UbU*nUVs/sH
oDSUU-PM nn[U5n[U5nU(a[X 5nXWXh4$XWU4$s snf)a=
given a list of singular words: lst

an ending to append to make the plural: plending

the number of characters to remove from the singular
before appending plending: siendingsize

a flag whether to create a joinstem: dojoinstem

return:
a list of pluralised words: si_list (called si because this is what you need to
look for to make the singular)

the pluralised words as a dict of sets sorted by word length: si_bysize
the singular words as a dict of sets sorted by word length: pl_bysize
if dojoinstem is True: a regular expression that matches any of the stems: stem
N)rMrD)	�lst�plending�siendingsize�
dojoinstemr>�si_list�	pl_bysize�	si_bysize�stems	         r!�make_pl_si_listsrW�si��0��$�}��47�8�C�q��,��(�*�C�G�8��s��I��w��I����*���9�2�2��9�,�,��9s�Azcorpuses|corporazopuses|opera�genera�mythoiz
penises|penes�testeszatlases|atlantes�yeses)�corpus�opus�genus�mythos�penis�testis�atlas�yes�child�children�chilizchilis|chilies�brotherzbrothers|brethren�infinityzinfinities|infinity�loaf�loaves�lorez
lores|lore�hoofzhoofs|hooves�beefzbeefs|beeves�thiefzthiefs|thieves�money�monies�mongoose�	mongooses�ox�oxen�cowz	cows|kine�graffito�graffiti�octopuszoctopuses|octopodes�geniezgenies|genii�ganglionzganglions|ganglia�trilby�trilbys�turfzturfs|turves�numen�numina�atman�atmas�occiputzocciputs|occipita�
sabretooth�sabretooths�
sabertooth�sabertooths�lowlife�lowlifes�flatfoot�	flatfoots�
tenderfoot�tenderfoots�romany�romanies�jerry�jerries�mary�maries�talouse�talouses�rom�roma�carmen�carmina�Romanies�Jerrys�Marys�Roma)�Romany�Jerry�Mary�Romzprima donnazprima donnas|prime donner:)�quartz�topaz)�snooze)�	ephemeris�iris�clitoris�	chrysalis�
epididymis�itis���z.*�ides�F)rR)�anathema�bema�	carcinoma�charisma�diploma�dogma�drama�edema�enema�enigma�lemma�lymphoma�magma�melisma�miasma�oedema�sarcoma�schema�soma�stigma�stoma�trauma�gumma�pragma�ata)�alumna�alga�vertebra�persona�vita�e)�amoeba�antenna�formula�	hyperbola�medusa�nebula�parabola�abscissa�hydra�nova�lacuna�aurora�umbra�flora�fauna)�stamen�foramen�lumen�ina)	�	bacterium�agendum�desideratum�erratum�stratum�datum�ovum�extremum�candelabrum�a)�maximum�minimum�momentum�optimum�quantum�cranium�
curriculum�dictum�phylum�aquarium�
compendium�emporium�encomium�	gymnasium�
honorarium�interregnum�lustrum�
memorandum�
millennium�rostrum�spectrum�speculum�stadium�	trapezium�	ultimatum�medium�vacuum�velum�
consortium�	arboretum)	�alumnus�alveolus�bacillus�bronchus�locus�nucleus�stimulus�meniscus�sarcophagus�i)�focus�radius�genius�incubus�succubus�nimbus�fungus�	nucleolus�stylus�torus�	umbilicus�uterus�hippopotamus�cactus)�status�	apparatus�
prospectus�sinus�hiatus�impetus�plexus)	�	criterion�
perihelion�aphelion�
phenomenon�prolegomenon�noumenon�organon�	asyndeton�
hyperbaton)�oxymoron)�solo�soprano�basso�alto�	contralto�tempo�piano�virtuoso���>�ISO�NCO�NGO�ado�oto�NATO)��
aficionado�aggro�albino�allegro�ammo�Antananarivo�archipelago�	armadillo�auto�avocado�Bamako�Barquisimeto�bimbo�bingo�Biro�bolero�Bolzano�bongo�Boto�burro�Cairo�canto�
cappuccino�casino�cello�Chicago�Chimango�cilantro�cochito�coco�Colombo�Colorado�commando�
concertino�contango�credo�	crescendo�cyano�demo�ditto�Draco�dynamo�embryo�	Esperanto�espresso�euro�falsetto�Faro�fiasco�Filipino�flamenco�furioso�
generalissimo�Gestapo�ghetto�gigolo�gizmo�
Greensboro�gringo�	Guaiabero�guano�gumbo�gyro�hairdo�hippo�Idaho�impetigo�inferno�info�
intermezzo�
intertrigo�Iquico�jumbo�junto�Kakapo�kilo�	Kinkimavo�Kokako�Kosovo�Lesotho�libero�libido�libretto�lido�Lilo�limbo�limo�lineno�lingo�lino�livedo�loco�logo�lumbago�macho�macro�mafioso�magneto�	magnifico�Majuro�Malabo�	manifesto�Maputo�	Maracaibo�medico�memo�metro�Mexico�micro�Milano�Monaco�mono�
Montenegro�Morocco�Muqdisho�myo�neutrino�Ningbo�octavo�oregano�Orinoco�Orlando�Oslo�panto�
Paramaribo�Pardusco�pedalo�photo�pimento�pinto�pleco�Pluto�pogo�polo�ponchoz
Porto-Novo�Porto�pro�psycho�pueblo�quarto�Quito�repo�rhino�risotto�rococo�rondo�
Sacramento�saddo�sago�salvo�Santiago�Sapporo�Sarajevo�
scherzando�scherzo�silo�sirocco�sombrero�staccato�sterno�stucco�stylo�sumo�Taiko�techno�terrazzo�testudo�timpano�tiro�tobacco�Togo�Tokyo�torero�Torino�Toronto�torso�tremolo�typo�tyro�ufo�UNESCO�vaquero�
vermicello�verso�vibrato�violoncello�Virgo�weirdo�WHO�WTO�Yamoussoukrozyo-yo�zero�Zibo)�czech�eunuch�stomach)�codex�murex�silex�ices)�radix�helix)�vortex�vertex�cortex�latex�pontifex�apex�index�simplex)�appendix)�afrit�afreet�efreet)�goy�seraph�cherub�imzq
    ataman caiman cayman ceriman
    desman dolman farman harman hetman
    human leman ottoman shaman talisman
z�
    Alabaman Bahaman Burman German
    Hiroshiman Liman Nakayaman Norman Oklahoman
    Panaman Roman Selman Sonaman Tacoman Yakiman
    Yokohaman Yuman
)�	booklouse�
grapelouse�louse�	woodlouse�lice�)#�breeches�britches�pajamas�pyjamas�clippers�gallows�hijinks�headquarters�pliers�scissorsrZ�herpes�pincers�shears�proceedings�trousers�cantus�coitus�nexus�contretemps�corps�debris�siemens�mumps�diabetes�
jackanapes�series�species�
subspecies�rabies�chassis�innings�news�mews�haggis�ois�measles)�
wildebeest�swine�eland�bison�buffalo�cattle�elk�
rhinoceros�zucchini�caribou�dace�grousezguinea fowlzguinea-fowl�haddock�hake�halibut�herring�mackerel�pickerel�pike�roe�seed�shad�snipe�teal�turbotz
water fowlz
water-fowl)�tuna�salmonrS�trout�breamzsea-basszsea bass�carp�cod�flounder�whiting�mooserw�djinn�samuri�	offspring�pence�quid�hertz)�
Portuguese�Amoyese�Borghese�Congoese�Faroese�
Foochowese�Genevese�Genoese�
Gilbertese�Hottentotese�
Kiplingese�Kongoese�Lucchese�Maltese�
Nankingese�Niasese�	Pekingese�Piedmontese�	Pistoiese�
Sarawakese�Shavese�
Vermontese�
Wenchowese�Yengeese)
�butter�cash�	furniture�information�fish�deer�sheep�nese�rese�lese�mese�pox�craft) �	acropolis�aegis�alias�asbestos�bathos�bias�
bronchitis�bursitis�caddis�cannabis�canvas�chaos�cosmos�dais�	digitalis�	epidermis�ethos�eyas�gas�glottis�hubris�ibis�lens�mantis�marquis�
metropolis�pathos�pelvis�polisrJ�	sassafras�trellis�ss�us�esz	[A-Z].*es)�Bolshois�Hanois)�Betelgeuses�Duses�Meuses�	Syracuses�	Toulouses)�abuses�	applauses�blouses�carouses�causes�chartreuses�clauses�contuses�douses�excuses�fuses�grouses�hypotenuses�	masseuses�
menopauses�misuses�muses�overuses�pauses�peruses�profuses�recluses�reuses�ruses�souses�spouses�suffuses�
transfuses�uses)��Addies�Aggies�Allies�Amies�Angies�Annies�	Annmaries�Archies�Arties�Aussies�Barbies�Barries�Basies�Bennies�Bernies�Berties�Bessies�Betties�Billies�Blondies�Bobbies�Bonnies�Bowies�Brandies�Bries�Brownies�Callies�	Carnegies�Carries�Cassies�Charlies�Cheries�	Christies�Connies�Curies�Dannies�Debbies�Dixies�Dollies�Donnies�	Drambuies�Eddies�Effies�Ellies�Elsies�Eries�Ernies�Essies�Eugenies�Fannies�Flossies�Frankies�Freddies�
Gillespies�Goldies�Gracies�Guthries�Hallies�Hatties�Hetties�Hollies�Jackies�Jamies�Janies�Jannies�Jeanies�Jeannies�Jennies�Jessies�Jimmies�Jodies�Johnies�Johnnies�Josies�Julies�Kalgoorlies�Kathies�Katies�Kellies�Kewpies�Kristies�Laramies�Lassies�Lauries�Leslies�Lessies�Lillies�Lizzies�Lonnies�Lories�Lorries�Lotties�Louies�
Mackenzies�Maggies�Maisies�Mamies�Marcies�Margies�Maries�	Marjories�Matties�	McKenzies�Melanies�Mickies�Millies�Minnies�Mollies�Mounties�Nannies�Natalies�Nellies�Netties�Ollies�Ozzies�Pearlies�
Pottawatomies�Reggies�Richies�Rickies�Robbies�Ronnies�Rosalies�
Rosemaries�Rosies�Roxies�Rushdies�Ruthies�Sadies�Sallies�Sammies�Scotties�	Selassies�Sherries�Sophies�Stacies�	Stefanies�
Stephanies�Stevies�Susies�Sylvies�Tammies�Terries�Tessies�Tommies�Tracies�Trekkies�Valaries�Valeries�	Valkyries�Vickies�Virgies�Willies�Winnies�Wylies�Yorkies)G�aeries�baggies�belies�biggies�birdies�bogies�bonnies�boogies�bookies�bourgeoisies�brownies�budgies�caddies�calories�camaraderies�cockamamies�collies�cookies�coolies�cooties�coteries�crappies�curies�cutesies�dogies�eyries�floozies�footsies�freebies�genies�goalies�groupies�hies�	jalousies�junkies�kiddies�laddies�lassies�lies�	lingeries�magpies�
menageries�mommies�movies�neckties�newbies�nighties�oldies�	organdies�overlies�pies�pinkies�pixies�potpies�prairies�quickies�reveries�rookies�rotisseries�softies�sortiesr9�stymies�sweeties�ties�	underlies�unties�veggies�vies�yuppies�zombies)�Chloes�Crusoes�Defoes�Faeroes�Ivanhoes�Joes�McEnroes�Moes�Monroes�Noes�Poes�Roscoes�Tahoes�Tippecanoes�Zoes)�aloes�backhoes�canoes�does�floes�foes�hoes�
mistletoes�oboes�pekoes�roes�sloes�throes�tiptoes�toes�woes)�quartzes�topazes)�buzzes�fizzes�frizzes�razzes)�Andromaches�Apaches�Blanches�	Comanches�
Nietzsches�Porsches�Roches)�aches�
avalanches�	backaches�
bellyaches�caches�cloches�creches�douches�earaches�fiches�	headaches�
heartaches�microfiches�niches�	pastiches�psyches�quiches�stomachaches�
toothaches�tranches)�annexes�axes�deluxes�pickaxes)�Hesses�Jesses�	Larousses�Matisses)�bouillabaisses�	crevasses�
demitasses�impasses�mousses�posses)�Clives�
Palmolives)	�interweaves�weaves�olives�bivalves�	dissolves�resolves�salves�twelves�valves)z(.*[csx])isz(.*)cepsz[A-Z].*s�generalz1(?!major|lieutenant|brigadier|adjutant|.*star)\S+�martial�court�force�poundc#�J# �UHup[USUS3-5v� M g7f)z(?=(?:-|\s+)r7N)r8)r=�key�vals   r!r@r@�s,���$�:Q�h�c�G�C�M�#��a�(�(�)�)�:Q�s�!#�pl_sb_postfix_adj�(z)(.*))A�
amanuenses�
amniocenteses�analyses�
antitheses�
apotheoses�arterioscleroses�atherosclerosesr��	catalyses�	catharses�chasses�	cirrhoses�cocces�crises�	diagnoses�dialyses�diereses�electrolyses�emphases�exegeses�geneses�	halitoses�
hydrolyses�hypnoses�
hypotheses�
hystereses�
metamorphoses�
metastases�misdiagnoses�mitoses�
mononucleoses�narcoses�necroses�nemeses�neuroses�oases�osmoses�osteoporoses�	paralyses�parentheses�parthenogeneses�periphrases�photosyntheses�	probosces�	prognoses�prophylaxes�
prostheses�preces�	psoriases�psychoanalyses�
psychokineses�	psychoses�	scleroses�	scolioses�sepses�	silicoses�	symbioses�synopses�	syntheses�taxes�telekineses�theses�
thromboses�tuberculoses�
urinalysesz�
    about above across after among around at athwart before behind
    below beneath beside besides between betwixt beyond but by
    during except for from in into near of off on onto out over
    since till to under until unto upon with)�de�du�daz(.*?)((?:-|\s+)(?:z)(?:-|\s+))a(?:-|\s+)(.*)>�neuter�feminine�	masculine�gender-neutral�feminine or masculine�masculine or feminine�we�myself�	ourselves�you�yourself�
yourselves�she�they�herself�
themselves�he�himself�it�itself�themself�mine�ours�yours�hers�theirs�his�its�nomz0Dict[str, Dict[str, Union[str, Dict[str, str]]]]�si_pron�I�them)�merergrh�herrl�himrorprqr}rr�acc))rzrkr^rp)rzrkr_rj)rzrkr`rn)rzrkrark)rzrkrbz	she or he)rzrkrcz	he or she)rzrmr^rq)rzrmr_rl)rzrmr`ro)rzrmrarr)rzrmrb�herself or himself)rzrmrc�himself or herself)rzrwr^ry)rzrwr_rv)rzrwr`rx)rzrwrarw)rzrwrbzhers or his)rzrwrczhis or hers)r�r}r^rp)r�r}r_r)r�r}r`r�)r�r}rar})r�r}rbz
her or him)r�r}rcz
him or her)r�rmr^rq)r�rmr_rl)r�rmr`ro)r�rmrarr)r�rmrbr�)r�rmrcr�c��[UUnX2$![a ef=f![a [[U5s$f=fr<)r{�KeyError�	TypeErrorr�str)�thecase�word�gender�sings    r!�get_si_pronr��sS����w���%����|�����
������C�����s��"��?�?�are�were�have�do)	�amr��is�wasr�r��hasr�r��act�acts�blame�blames�can�must�fly�flies�copy�copies�drink�drinks�fight�fights�fire�fires�like�look�make�reach�run�sink�sleep�view)�likesr��looksr��makesr��reachesr��runsr��sinksr��sleepsr��viewsz^(z)((\s.*)?)$)�did�had�ate�made�put�spent�fought�sank�gave�sought�shall�could�ought�shouldz0^((?:thought|saw|bent|will|might|cut))((\s.*)?)$)r�r�r�r�r�r�)r�r�)�shoes)�0�nor��nil)�1r��an�one�each�every�this�that�some�these�those)r�r�r�r�z)$�our�your�their)�myr�ryrrxr�z~
^(?! FJO | [HLMNS]Y.  | RY[EO] | SQU
  | ( F[LR]? | [HL] | MN? | N | RH? | S[CHKLMNPTVW]? | X(YL)?) [AEIOU])
[FHLMNRSX][A-Z]
z)^(y(b[lor]|cl[ea]|fere|gg|p[ios]|rou|tt))z^((?:unabomber|unanimous|US))z0^((?:euler|hour(?!i)|heir|honest|hono[ur]|mpeg))z^([aefhilmnorsx]-?th)z^([bcdgjkpqtuvwyz]-?th)�th�st�nd�rd)
rrr���r����	���
�tieth�first�second�third�fifth�eighth�ninth�twelfth)�tyr��two�three�five�eight�nine�twelvez)\Z)
�r�r�r��fourr��six�sevenr�r�)
�ten�elevenr��thirteen�fourteen�fifteen�sixteen�	seventeen�eighteen�nineteen)
r�r��twenty�thirty�forty�fifty�sixty�seventy�eighty�ninety)� z	 thousandz millionz billionz	 trillionz quadrillionz quintillionz sextillionz septillionz
 octillionz
 nonillionz
 decillion)�allr��herd�names�persons�ancient)�True�False�Nonez\$(\d+)z((\w+)\([^)]*\)*)z\A(\s*)(.+?)(\s*)\Zz^(?:z (?P<denominator>.+)( (per|a) .+)z\sz^(.*[^s])s$z	^(.*)'s?$z\A(\s*)(?:an?\s+)?(.+?)(\s*)\Zz^[aefhilmnorsx]$z^[bcdgjkpqtuvwyz]$z^[aefhilmnorsx][.-]z
^[a-z][.-]z
^[^aeiouy]z^e[uw]z^onc?e\bz
^onetime\bz^uni([^nmd]|mo)z^u[bcfghjkqrst][aeiou]z^ukrz
^U[NK][AIEO]?z^[aeiou]z(\d)z(\d)(\d)z(\d)(\d)(\d)z(\d)(\d)(\d)(?=\D*\Z)z(\d)(\d)(?=\D*\Z)z
(\d)(?=\D*\Z)z(\d)(\d{3}(?:,|\Z))z\Dz\s+,z, (\S+)\s+\Zz\s+zie$�yzue$�uz	([auy])e$z\g<1>zski$�skiz[^b]i$r�z^(are|were)$�bez^(had)$�havz^(hoe)$z([^e])e$zer$�erz ([^aeiou][aeiouy]([bdgmnprst]))$z
\g<1>\g<2>z\dc�H�\rSrSr%S\S'S\S'S\S'S\S'SSjrS	rg
)�Wordsi�r��loweredz	List[str]�split_r��lastc��UR5UlUR5UlURSUlURSUlg)Nrr8)�lowerr�splitrr�r)�self�origs  r!�__init__�Words.__init__�s:���z�z�|����j�j�l����[�[��^��
��K�K��O��	r )r�rrrN��returnr)rrrr�__annotations__rrrr r!rr�s��
�L����J�

�I�$r r� String with at least 1 characterc��\rSrSrSSjrSrg)�	_WordMetai�c�L�[U[5=(a [U5S:�$�Nr)�
isinstancer�rJ)r�instances  r!�__instancecheck__�_WordMeta.__instancecheck__�s���h��,�C��X��!�1C�Cr rN)r*rr"�bool)rrrrr+rrr r!r&r&�s��	Dr r&c��\rSrSrSrSrg)�Wordi�r$rN)rrrr�__doc__rrr r!r/r/�s��.r r/)�	metaclassc��\rSrSrSGSjr\S5r\RS5r\SHSj5r	\SISj5r
\SHSj5r\SJSj5r\SJS	j5r
SKS
jrSKSjr\SLSj5rSGS
jrSMSNSjjrSOSjrSrSPSjr\SQSj5rSRSjrSSSjr\STSUSjj5r\STSUSjj5r\STSUSjj5r\STSUSjj5r\SVSj5r\SVSj5r\SVSj5r\SVSj5r \SMSWSjj5r!SXSjr"SYS jr#SZS!jr$SZS"jr%STS[S#jjr&STS\S$jjr'\(S%5r)S]S&jr*\+S'5r,STS^S(jjr-STS\S)jjr.STS^S*jjr/SMS_S+jjr0\S`SaS,jj5r1\1r2\3S-4\4S.4\5S.4\6S.4\7S-4\8S.4\9S.4\:S-4\;S-4\<S-4\=S-4\>S-4\?S-4\@S-4\AS-4\BS-4\CS-4\DS.4\ES.44rFSbS/jrG\STScS0jj5rH\SdS1j5rI\SeS2j5rJSfSgS3jjrKSfShS4jjrLSfSiS5jjrMSjS6jrNSkS7jrOSkS8jrPSkS9jrQSkS:jrRSkS;jrSSkS<jrTSkS=jrUSlS>jrV\+S?5rW\(S@5rX\+SA5rY\+SB5rZ\SmSnSCjj5r[\+SD5r\\SoSpSEjj5r]SFr^g)q�enginei�c��[R5UlSUlSUl/Ul/Ul/Ul/Ul/Ul	SUl
SUlg)Nrr^)�
def_classicalr��classical_dict�persistent_count�
mill_count�pl_sb_user_defined�pl_v_user_defined�pl_adj_user_defined�si_sb_user_defined�A_a_user_defined�	thegender�_engine__number_args�rs r!r�engine.__init__�sY��+�0�0�2���/3������8:���79���9;�� �8:���68���!���7;��r c�P�[[[[4UR5$r<)rrr�r?r@s r!�_number_args�engine._number_args
s���D��c��N�D�$6�$6�7�7r c��Xlgr<)r?)rrs  r!rCrDs�� �r c��URU5 URU5 URRX45 URRX!45 g)z-
Set the noun plural of singular to plural.

r)�checkpat�checkpatpluralr9�extendr<�r�singular�plurals   r!�defnoun�engine.defnounsO��	
�
�
�h�����F�#����&�&��'9�:����&�&��'9�:�r c��URU5 URU5 URU5 URU5 URU5 URU5 URRXX4XV45 g)z�
Set the verb plurals for s1, s2 and s3 to p1, p2 and p3 respectively.

Where 1, 2 and 3 represent the 1st, 2nd and 3rd person forms of the verb.

r)rGrHr:rI)r�s1�p1�s2�p2�s3�p3s       r!�defverb�engine.defverbsp�� 	
�
�
�b���
�
�b���
�
�b�����B�����B�����B�����%�%�r�r�r�&>�?�r c��URU5 URU5 URRX45 g)z2
Set the adjective plural of singular to plural.

r)rGrHr;rIrJs   r!�defadj�
engine.defadj7s8��	
�
�
�h�����F�#�� � �'�'��(:�;�r c�`�URU5 URRUS45 g)zC
Define the indefinite article as 'a' for words matching pattern.

r�r�rGr=rI�r�patterns  r!�defa�engine.defaBs+��	
�
�
�g�����$�$�g�s�^�4�r c�`�URU5 URRUS45 g)zD
Define the indefinite article as 'an' for words matching pattern.

r�rr\r]s  r!�defan�engine.defanLs+��	
�
�
�g�����$�$�g�t�_�5�r c��Ucg[R"US5 g![Ran[U5UeSnAff=f)z%
check for errors in a regex pattern
Nr�)�re�match�errorr-)rr^�errs   r!rG�engine.checkpatVs@���?��	?��H�H�W�b�!���x�x�	?�,�W�5�3�>��	?�s��A�>�Ac��g)z-
check for errors in a regex replace pattern
Nrr]s  r!rH�engine.checkpatpluralas��	r c
�6�[[U5S-
SS5H|n[R"SX#S3U[R5nU(dM8X#S-c g[
R
S[[X#S-55nURU5s $ g)Nr�r��^�$rz\\1)
�rangerJre�search�
IGNORECASE�
DOLLAR_DIGITS�subrr/�expand)rr��wordlistr�mo�pls      r!�ud_match�engine.ud_matchgs����s�8�}�q�(�"�b�1�A����a���}�A�.��b�m�m�D�B��r���E�?�*��"�&�&��D��x�A���7����y�y��}�$�2�r c�:�U(d[R5UlgSU;a=US(a[R5UlO[R5UlUR	5H#up#U[
;aX0RU'M[e g)a[
turn classical mode on and off for various categories

turn on all classical modes:
classical()
classical(all=True)

turn on or off specific claassical modes:
e.g.
classical(herd=True)
classical(names=False)

By default all classical modes are off except names.

unknown value in args or key in kwargs raises
exception: UnknownClasicalModeError

Nr)�
all_classicalr�r6�no_classical�itemsr5r)r�kwargs�k�vs    r!�	classical�engine.classicaltsy��&�"/�"4�"4�"6�D����F�?��e�}�&3�&8�&8�&:��#�&2�&7�&7�&9��#��L�L�N�D�A��M�!�)*�#�#�A�&�/�/�	#r Nc��Ub([U5UlUbU(a[	U5$gSUlg![an[UeSnAff=f)zl
Set the number to be used in other method calls.

Returns count.

Set show to False to return '' instead.

Nr�)�intr7�
ValueErrorr$r�)r�count�showrhs    r!�num�
engine.num�s_����
0�(+�E�
��%�����5�z�!�"&��%)�D�!���
�
0�&�C�/��
0�s�4�
A
�A�A
c�0�U[;aXlg[e)aK
set the gender for the singular of plural pronouns

can be one of:
'neuter'                ('they' -> 'it')
'feminine'              ('they' -> 'she')
'masculine'             ('they' -> 'he')
'gender-neutral'        ('they' -> 'they')
'feminine or masculine' ('they' -> 'she or he')
'masculine or feminine' ('they' -> 'he or she')
N)�singular_pronoun_gendersr>r3)rr�s  r!r��
engine.gender�s���-�-�#�N� � r c��[U[R5(aUR$[U[R5(aUR
$[U[R5(a+URVs/sHo RU5PM sn$[U[R5(a4[URVs/sHo RU5PM sn5$[U[R5(aUR$[SURS35es snfs snf)z%
Return the value of the ast object.
zname 'z' is not defined)r)�ast�Num�n�Strr5r
�elts�_get_value_from_astr�tuple�NameConstant�value�	NameError�id)r�objr�s   r!r��engine._get_value_from_ast�s����c�3�7�7�#�#��5�5�L�
��S�W�W�
%�
%��5�5�L�
��S�X�X�
&�
&�9<���B��A�,�,�Q�/��B�B�
��S�Y�Y�
'�
'��s�x�x�H�x�!�2�2�1�5�x�H�I�I���S�-�-�
.�
.��9�9��
�&�����(8�9�:�:��C��Hs�D8�D=c��UR5up4XB;aU$[R"U5nURSRR
Vs/sHnUR
U5PM nnURSRRVs0sH)nURUR
UR5_M+ n	nX$"U0U	D6$s snfs snf)z4
Return the string to be substituted for the match.
r)	�groupsr��parse�bodyr��argsr��keywords�arg)
rrv�methods_dict�matched_text�f_name�a_treer��	args_list�kw�kwargs_lists
          r!�_string_to_substitute�engine._string_to_substitute�s��� "�y�y�{���
�%������<�(��
�[�[��^�)�)�.�.�
�.��
�$�$�Q�'�.�	�
��k�k�!�n�*�*�3�3�
�3��
�F�F�D�,�,�R�X�X�6�6�3�	�
��#�Y�>�+�>�>��
��
s�C�0Cc
�t^^�TRnTRTRTRTRTR
TRTRTRTRTRTRTRS.m[RUU4SjU5nUTlU$)z�
Perform inflections in a string.

e.g. inflect('The plural of cat is plural(cat)') returns
'The plural of cat is cats'

can use plural, plural_noun, plural_verb, plural_adj,
singular_noun, a, an, no, ordinal, number_to_words,
and prespart

)rL�
plural_adj�plural_noun�plural_verb�
singular_nounr�r�r��ordinal�number_to_words�present_participler�c�(>�TRUT5$r<)r�)rvr�rs ��r!�<lambda>� engine.inflect.<locals>.<lambda>	s���t�1�1�"�l�Cr )r7rLr�r�r�r�r�r�r�r�r�r��
FUNCTION_CALLrs)r�text�save_persistent_count�outputr�s`   @r!�inflect�engine.inflect�s����!%� 5� 5���k�k��/�/��+�+��+�+�!�/�/�����&�&��'�'��|�|�#�3�3�"&�"9�"9��8�8�
-
�� �"�"�C�T�
��!6����
r c��[U5nSU;a�URS5n[USRS55[USRS55:Xa1URS5URSRS5nObURS5n[	U5H0upVSU;dM
URS5URSXE'M2 OURS5n[	URS55H^upVUS:XaM
UR5U:XaXER5XE'XfR
5:XdMJXER
5XE'M` SRU5$)Nr:rrrrr|)r�rrJr6�	enumerate�
capitalize�upperrB)rr�	inflected�word_options�resultrr�s       r!�postprocess�engine.postprocess	sI���	�N�	��)��$�?�?�3�/�L��<��?�(�(��-�.�#�l�1�o�6K�6K�C�6P�2Q�Q�"����-�d�.A�.A�%�.H�I�O�O�PS�T��#����-��#,�V�#4�K�E��d�{�(,�
�
�3���8K�8K�E�8R�(S��
�$5��_�_�S�)�F�%�T�Z�Z��_�5�K�E��s�{�
���� �D�(� &�
� 8� 8� :��
��z�z�|�#� &�
� 3� 3� 5��
�6��x�x���r c��[RU5nU(a2URS5URS5URS54$g)Nrr�r�)r�r�r�)�PARTITION_WORDrp�group)rr�rvs   r!�partition_word�engine.partition_word9	s=��
�
"�
"�4�
(��
��8�8�A�;������R�X�X�a�[�8�8�r c���URU5up4nU(dU$URUURXB5=(d) URXB5=(d UR	XB55nUUU3$)z�
Return the plural of text.

If count supplied, then return text if count is one of:
    1, a, an, one, each, every, this, that

otherwise return the plural.

Whitespace at the start and end is preserved.

)r�r��_pl_special_adjective�_pl_special_verb�_plnoun�rr�r��prer��postrLs       r!rL�
engine.plural@	sz���-�-�d�3���4���K��!�!���&�&�t�3�
)��$�$�T�1�
)��|�|�D�(�	
����v�h�t�f�%�%r c��URU5up4nU(dU$URX@RXB55nUUU3$)z�
Return the plural of text, where text is a noun.

If count supplied, then return text if count is one of:
    1, a, an, one, each, every, this, that

otherwise return the plural.

Whitespace at the start and end is preserved.

)r�r�r�r�s       r!r��engine.plural_nounX	sL���-�-�d�3���4���K��!�!�$���T�(A�B����v�h�t�f�%�%r c��URU5up4nU(dU$URUURXB5=(d URXB55nUUU3$)z�
Return the plural of text, where text is a verb.

If count supplied, then return text if count is one of:
    1, a, an, one, each, every, this, that

otherwise return the plural.

Whitespace at the start and end is preserved.

)r�r�r��_pl_general_verbr�s       r!r��engine.plural_verbm	sf���-�-�d�3���4���K��!�!���!�!�$�.�T�$�2G�2G��2T�
����v�h�t�f�%�%r c��URU5up4nU(dU$URX@RXB5=(d U5nUUU3$)z�
Return the plural of text, where text is an adjective.

If count supplied, then return text if count is one of:
    1, a, an, one, each, every, this, that

otherwise return the plural.

Whitespace at the start and end is preserved.

)r�r�r�r�s       r!r��engine.plural_adj�	sT���-�-�d�3���4���K��!�!�$�(B�(B�4�(O�(W�SW�X����v�h�t�f�%�%r c�^^^�TRTRTR4nUUU4SjU5n[[	SU5S5$)a
compare word1 and word2 for equality regardless of plurality

return values:
eq - the strings are equal
p:s - word1 is the plural of word2
s:p - word2 is the plural of word1
p:p - word1 and word2 are two different plural forms of the one word
False - otherwise

>>> compare = engine().compare
>>> compare("egg", "eggs")
's:p'
>>> compare('egg', 'egg')
'eq'

Words should not be empty.

>>> compare('egg', '')
Traceback (most recent call last):
...
typeguard.TypeCheckError:...is not an instance of inflect.Word
c3�J># �UHnTRTTU5v� M g7fr<)�_plequal)r=�normr�word1�word2s  ���r!r@�!engine.compare.<locals>.<genexpr>�	s!����G���4�=�=���t�4�4��s� #NF)r�r�r��next�filter)rr�r��norms�resultss```  r!�compare�engine.compare�	s?���2� � �$�"2�"2�D�O�O�C��G��G���F�4��)�5�1�1r c�:�URXUR5$)a2
compare word1 and word2 for equality regardless of plurality
word1 and word2 are to be treated as nouns

return values:
eq - the strings are equal
p:s - word1 is the plural of word2
s:p - word2 is the plural of word1
p:p - word1 and word2 are two different plural forms of the one word
False - otherwise

)r�r��rr�r�s   r!�
compare_nouns�engine.compare_nouns�	����}�}�U�4�+;�+;�<�<r c�:�URXUR5$)a2
compare word1 and word2 for equality regardless of plurality
word1 and word2 are to be treated as verbs

return values:
eq - the strings are equal
p:s - word1 is the plural of word2
s:p - word2 is the plural of word1
p:p - word1 and word2 are two different plural forms of the one word
False - otherwise

)r�r�r�s   r!�
compare_verbs�engine.compare_verbs�	r�r c�:�URXUR5$)a7
compare word1 and word2 for equality regardless of plurality
word1 and word2 are to be treated as adjectives

return values:
eq - the strings are equal
p:s - word1 is the plural of word2
s:p - word2 is the plural of word1
p:p - word1 and word2 are two different plural forms of the one word
False - otherwise

)r�r�r�s   r!�compare_adjs�engine.compare_adjs�	s���}�}�U�4�?�?�;�;r c��URU5upEnU(dU$URXRUS9nUSLaURXW5nUUU3$g)a	
Return the singular of text, where text is a plural noun.

If count supplied, then return the singular if count is one of:
    1, a, an, one, each, every, this, that or if count is None

otherwise return text unchanged.

Whitespace at the start and end is preserved.

>>> p = engine()
>>> p.singular_noun('horses')
'horse'
>>> p.singular_noun('knights')
'knight'

Returns False when a singular noun is passed.

>>> p.singular_noun('horse')
False
>>> p.singular_noun('knight')
False
>>> p.singular_noun('soldier')
False

�r�r�F)r��_sinounr�)	rr�r�r�r�r�r�r�rLs	         r!r��engine.singular_noun�	sa��B�-�-�d�3���4���K��|�|�D�f�|�=���u���%�%�d�1�F��U�6�(�4�&�)�)�r c�8�URR5n[R5UlX:XagX"U5:XagU"U5U:Xag[R5UlX"U5:XagU"U5U:XagUR5UlX0R:XdX0R
:Xa.UR
X5(agUR
X!5(agX0R:XdX0R:XaURX5(agg)N�eqzp:szs:pzp:pF)	r6r�r{r|rLr��_pl_check_plurals_Nr��_pl_check_plurals_adj)rr�r�rw�classvals     r!r��engine._plequal
s����&�&�+�+�-��+�0�0�2����>���B�u�I���
�e�9����*�/�/�1����B�u�I���
�e�9����&�m�m�o���
�����&6�&6� 6��'�'��5�5���'�'��5�5��
�����o�o� 5��)�)�%�7�7��r c�d�SUSUSUSUSUS3n[[R"XQ55$)Nrz)(z\|\1r:r7)r-rerp)r�pair�stems�end1�end2r^s      r!�_pl_reg_plurals�engine._pl_reg_plurals+
s<���u�g�R��v�T�$��q���d�4�&��B���B�I�I�g�,�-�-r c�^^�[SS4[SS4[SS4[SS4[S	S
4[
SS4[S
S
4[SS4[SS4[SS4[SS4[SS4SSSS4n[[X45nSRSU55mT[R!5;=(dR T["R!5;=(d4 T[$R!5;=(d ['UU4SjU55$)N�asr�r�r�r5r��ensr��umsr�r�r�ons�os�exesr�ixesr)z.*eaur5�x)z.*ieur5r
)z.*tri�xes�ces)z.{2,}[yia]nr�gesr:c3�8# �UHoRv� M g7fr<)r)r=r�s  r!r@�-engine._pl_check_plurals_N.<locals>.<genexpr>D
s���4�e�d�	�	�e�s�c3�P># �UHupnTRTXU5v� M g7fr<)r)r=r�r�r�r�rs    ��r!r@rJ
s/�����)5�%�E���$�$�T�5��=�=�)5�s�#&)�
pl_sb_C_a_ata�pl_sb_C_is_ides�pl_sb_C_a_ae�pl_sb_C_en_ina�pl_sb_C_um_a�pl_sb_C_us_i�pl_sb_C_on_a�pl_sb_C_o_i_stems�pl_sb_C_ex_ices�pl_sb_C_ix_ices�	pl_sb_C_i�
pl_sb_C_im�maprrB�pl_sb_irregular_s�values�pl_sb_irregular�pl_sb_irregular_caps�any)rr�r��stem_endingsrCr�s`    @r!r��engine._pl_check_plurals_N/
s���
�D�%�(�
�d�F�+�
�3��$�
�U�E�*�
�5�#�&�
�6�3�'�
�5�#�&�
��c�*�
�f�f�-�
�f�f�-�
��S�!�
��d�#���#�)�!
��&�E�E�>�*���x�x�4�e�4�4��
�%�,�,�.�.�
���-�-�/�/�
��+�2�2�4�4�
���)5���		
r c�L�URS5(aUSURS5OSnURS5(aUSURS5OSn[U5=(a; [U5=(a) URX45=(d URXC5$)N)z's�'r&r�)�endswith�rfindr-r�)rr�r��word1a�word2as     r!r��engine._pl_check_plurals_adjP
s���.3�n�n�[�.I�.I��)����S�)�*�r��.3�n�n�[�.I�.I��)����S�)�*�r��
��L�
��V��
��(�(��8�<��+�+�F�;�	
r c���UcURbURnUbP[U5[;d5URS(a%[U5R	5[
;aSnU$SnU$SnU$)Nr�rr�r�)r7r��pl_count_oner6r�
pl_count_zero)rr�s  r!�	get_count�engine.get_count]
s����=�T�2�2�>��)�)�E�����Z�<�/��+�+�F�3���J�,�,�.�-�?��
���	�
����E��r c��URU5nUS:XaU$URXR5nUbU$US:XaU$[U5nURR5[;a4[UR5S:�aURUSS9=(d U$U$U[;aU$[R5HupEURU*SU;dMUs $ URS(a$URR5[;aU$[ R#U5nU(aIUR%S5S:wa4UR'UR%S5S5UR%S53$SUR;dSUR;a�[(R#U5nU(a~UR%S5S:waiUR%S5S:waTUR'UR%S5S5UR%S5UR'UR%S553$[UR5S:�aURUSS9nUbU$[*R#UR5nU(a4[UR%S	55nUR'USU5XS3$[UR5S:�aNURS
S:Xa;SR-UR'UR.5/URSS-5$[0R2"[45 UR7UR[8R:"UR&SS9S
5sSSS5 $!,(df   O=f[<R5H�upEURU*SU;dM[>R5H�up�URSU	U
;dMURRA5URSU	URU*S/:XdMWURSU*[BURU*S-s s $ M� [DUR$![Fa Of=f[BUR$![Fa Of=fUR[H;a0[UR5nUSU*[HUR3$URR5nU[J;a[U5nUSU*[JU3$URRAS
5n
SR-U
S
S5R5[L;aN[SR-U
S
S55nUSU*[LSR-U
S
S5R53$URSSS:XaUSSS3$URSSS:Xa!URS(aUS3$USSS3$URSSS:Xam[NR5H upEURU*SU;dMUS3s $ [PR5HupEX*SU;dMUS3s $ USSS3$URSSS:XaUSSS3$URSSS:XaB[RRU[U55nU(aURU;aUSSS3$US3$URSSS:XaUSSS 3$URSSS!:XaUSSS"3$URSSS#:XaUSSS$3$URSSS%:XaUSSS&3$URS':Xag(URSSS):XaU$URSSS*:XaUSS
S+3$URSSS,;aUSS
S-3$S.[VSS4S/[XS
S04S/[ZS
S04S1[\S
S+4S[^S
S24S3[`S
S+4S+[bSS444HUup�nnURSU:XdMUR5H%upEURU*SU;dMUSUU-s s $ MW URS5(GaqURSSS6:XaUSSS73$URSSS8;aUS/3$URSSS9;a[U5S::�aUSSS;3$S3[dS
S<4S/[fS
S04S/[hS
S04S1[jS
S+4S[lS
S24S[nSS4S+[pSS44S+[rSS=4S[tSS>4S?[vSS24S3[xS
S+44HUup�nnURSU:XdMUR5H%upEURU*SU;dMUSUU-s s $ MW [zSS24[|SS@44H@unnnUR5H%upEURU*SU;dMUSUU-s s $ MB U[~;aUS-3$[�R5H upEURU*SU;dMUS-3s $ URS
SS-:XaUSAUSAR�5:XaUS-3$URSSB:XaP[�R5H upEURU*SU;dMUS-3s $ URS
SSB:waUSC3$URS
SSD:Xa8[�R5H upEURU*SU;dMUS3s $ URS
SSE;dURSS/:XaUS-3$URSSSF;aUSSSG3$URSSSH:XaURSSSI:waUSSSG3$URSSSJ;aUSS
SG3$URSSSK:XaUSSSG3$URSSL:XauURS
SSM;d[U5S:XaUS3$URSN(a2URSSL:XaUSAUSAR�5:XaUS3$USSS3$U[�;aUS3$[�R5H upEURU*SU;dMUS3s $ URS
SSO;aUS3$URSS?:XaUS-3$US3$)PNrr�r�r��r�rz a z-a-�denominatorr��degreer�-����quyr8�ies����personr
r5����ople�man�men����mouse�micerr�goose�geese�tooth�teeth�foot�feet�taco�tacos�die�dice�ceps�zoonr�)�cis�sis�xisr��hr
r�mrr�r�r�trixr)�eau�ieu)�ynx�inx�anxr�r
r��ta�des�orr�z�zes�ze)�ch�sh�zzr�)�elf�alf�olf�ves�eaf�d)�nife�life�wife�arfr�aeiour	)�ao�eo�io�oo�uo)Fr/rxr9rrr�pl_sb_uninflected_completerJr�_handle_long_compounds�pl_sb_uninflected_caps�pl_sb_uninflected_bysizer}rr6�pl_sb_uninflected_herd�PL_SB_POSTFIX_ADJ_STEMS_RErpr�r��PL_SB_PREP_DUAL_COMPOUND_RE�DENOMINATORrBr��
contextlib�suppressr��_handle_prepositional_phrase�	functools�partial�pl_pron_acc_keys_bysize�pl_prep_bysizer�pl_pron_acc�pl_pron_nomr�r!r �pl_sb_irregular_compound�pl_sb_U_man_mans_bysize�pl_sb_U_man_mans_caps_bysize�pl_sb_U_louse_lice_bysize�get�pl_sb_U_ch_chs_bysize�pl_sb_U_ex_ices_bysize�pl_sb_U_ix_ices_bysize�pl_sb_U_um_a_bysize�pl_sb_U_us_i_bysize�pl_sb_U_on_a_bysize�pl_sb_U_a_ae_bysize�pl_sb_C_en_ina_bysize�pl_sb_C_ex_ices_bysize�pl_sb_C_ix_ices_bysize�pl_sb_C_um_a_bysize�pl_sb_C_us_i_bysize�pl_sb_C_us_us_bysize�pl_sb_C_a_ae_bysize�pl_sb_C_a_ata_bysize�pl_sb_C_is_ides_bysize�pl_sb_C_o_i_bysize�pl_sb_C_on_a_bysize�pl_sb_C_i_bysize�pl_sb_C_im_bysize�pl_sb_singular_s_complete�pl_sb_singular_s_bysizer��pl_sb_z_zes_bysize�pl_sb_ze_zes_bysize�pl_sb_U_o_os_complete�pl_sb_U_o_os_bysize)rr�r�r�rr�rv�
handled_wordsr�pk�pv�llen�lowered_last�
dash_split�lastletrg�numendr�s                  r!r��engine._plnounr
s]
�����u�%���A�:��K��
�
�d�$;�$;�<�����L��2�:��K��T�{���9�9�?�?�� :�:��4�;�;��1�$��2�2�4�q�2�A�I�T�I��K��)�)��K�,�2�2�4�D�A��|�|�Q�B�C� �A�%���5����v�&�4�9�9�?�?�+<�@V�+V��K�(�
.�
.�t�
4��
�"�(�(�1�+��#��l�l�2�8�8�A�;��2�3�B�H�H�Q�K�=�A�A��D�L�L� �E�T�\�\�$9�,�3�3�D�9�B��b�h�h�q�k�R�'�B�H�H�Q�K�2�,=��|�|�B�H�H�Q�K��3�4��x�x��{�m��|�|�B�H�H�Q�K�0�1�3���t�{�{��q� � �7�7��A�7�F�M��(�$�$��
�
����
-��
������/�0�E��l�l�4���<�0�1�$�v�,��@�@��t�{�{��q� �T�[�[��_��%@��8�8�T�\�\�$�*�*�5�6����Q�R��H�I�I�
�
 �
 ��
,��4�4�����!�!�$�,�,�a�8���-�
,�
,��,�1�1�3�D�A��|�|�Q�B�C� �A�%�,�2�2�4�F�B��|�|�C�R�(�B�.��<�<�-�-�/� �L�L��"�-� �L�L�!���-�4��
$(�<�<��!��#4�{�4�<�<�QR�PR�PS�CT�7U�#U�U�5�4�	��t�|�|�,�,���	��	��	��t�|�|�,�,���	��	��
�9�9�,�,��t�y�y�>�D��6�T�E�l�^�$8����$C�#D�E�E��y�y���(���?�*��|�$�D��6�T�E�l�^�O�L�$A�#B�C�C��\�\�'�'��,�
��H�H�Z���_�%�,�,�.�2J�J������B�C��)��D���$��<�.�+�S�X�X�j���o�-F�,M�,M�,O�P�Q�S�
�
�<�<�����%��3�B�i�[��$�$��<�<�����(��"�"�9�-���q�z�!��s��)��D�)�)��<�<�����%�/�5�5�7����<�<����$��)�"�V�1�:�%�8�5�:�:�<������9��>�"�V�1�:�%�=��3�B�i�[��$�$��<�<�����'��3�B�i�[��%�%��<�<�����'�)�-�-�c�$�i�8�A��T�\�\�Q�&��s��)��D�)�)��V�1�:���<�<�����'��3�B�i�[��&�&��<�<�����'��3�B�i�[��&�&��<�<�����&��3�B�i�[��%�%��<�<�����&��3�B�i�[��&�&��<�<�5� ���<�<�����&��K��<�<�����&��3�B�i�[��?�"��<�<���� 5�5��3�B�i�[��#�#��'��s�3�
�(�"�f�5�
�(�"�f�5�
�%�r�3�/�
�%�r�3�/�
�%�r�3�/�
�%�t�S�1�)
�$�G����|�|�B��7�*��G�G�I�D�A��|�|�Q�B�C�(�A�-�#�G�V�}�t�3�3�&�)
� ���y�)�)��|�|�B�C� �F�*��s��)��C�(�(��|�|�B�C� �N�2���q�z�!��|�|�B�C� �$9�9�c�$�i�!�m��s��)��C�(�(��+�R��7��,�b�&�9��,�b�&�9��)�2�s�3��)�2�s�3��*�D�"�5��)�4��5��*�D�$�7��,�b�%�8��(�"�c�2��)�2�s�3�-�(��F�D��<�<��#�w�.� !���	����<�<����,��1�#'���=�4�#7�7�!*�-�&"�4��-�"�D�$�/�$���6�4��G�G�I�D�A��|�|�Q�B�C�(�A�-�#�G�V�}�t�3�3�&�	$��4�4��V�2�;��+�1�1�3�D�A��|�|�Q�B�C� �A�%���r�{�"�4��<�<�����$��a��D��G�M�M�O�)C��V�2�;���<�<���s�"�*�0�0�2����<�<����$��)�"�V�2�;�&�3��|�|�B�r�"�c�)���s�|�#��<�<�����$�+�1�1�3����<�<����$��)�"�V�1�:�%�4��<�<���� 8�8�D�L�L��<L�PS�<S��V�2�;���<�<���� 5�5��3�B�i�[��$�$��<�<�����%�$�,�,�r�"�*=��*D��3�B�i�[��$�$��<�<���� 8�8��3�B�i�[��$�$��<�<�����%��3�B�i�[��$�$��<�<���s�"��|�|�B�r�"�g�-��T��a����q�z�!��"�"�7�+��<�<��#�s�*�t�A�w�$�q�'�-�-�/�/I�"�V�1�:�%��3�B�i�[��$�$��0�0��V�1�:��'�-�-�/�D�A��|�|�Q�B�C� �A�%���q�z�!�0��<�<���� >�>��V�1�:���<�<���s�"��V�2�;����q�z�s0�:N�
N�&Q9�9
R�R�
R�
R*�)R*c�F�URU5n[U5S:a[S5eURU[5nU"XES-
5=(d XES-
nSRUSUS-
URXdUS/5/-5SRXES-S5-$)a�
Given a word or phrase possibly separated by sep, parse out
the prepositional phrase and apply the transform to the word
preceding the prepositional phrase.

Raise ValueError if the pivot is not found or if at least two
separators are not found.

>>> engine._handle_prepositional_phrase("man-of-war", str.upper, '-')
'MAN-of-war'
>>> engine._handle_prepositional_phrase("man of war", str.upper, ' ')
'MAN of war'
r�z2Cannot handle words with fewer than two separatorsrrNr�)rrJr��_find_pivot�pl_prep_list_darB)�cls�phrase�	transform�sep�parts�pivot�transformeds       r!r|�#engine._handle_prepositional_phrase�s������S�!���u�:��>��Q�R�R������7����a�i� 0�1�E�U�1�9�5E���x�x��+�E�A�I��#�(�(�K�u��r�+J�"K�!L�L�
��H�H�U�A�I�=�)�*�+�	+r c�^^�TS:XaUROURmUU4Sj[URS55n[	US5$)a
Handles the plural and singular for compound `Words` that
have three or more words, based on the given count.

>>> engine()._handle_long_compounds(Words("pair of scissors"), 2)
'pairs of scissors'
>>> engine()._handle_long_compounds(Words("men beyond hills"), 1)
'man beyond hills'
rc
3�># �UHGunup#nU[;dMSR[R"UT"UT5U/U55v� MI g7f�rN)r�rB�	itertools�chain)r=�leader�cand�prep�trailerr��
inflections     ��r!r@�0engine._handle_long_compounds.<locals>.<genexpr>�s`����

�2S�-����g���&�
�C�H�H�������e�,�d�3���
�
�2S�s
�A�7Ar�N)r�r�rrr�)rr�r��	solutionsr�s  ` @r!rs�engine._handle_long_compounds�sG���&+�a�Z�T�\�\�T�\�\�
�

�2C�4�;�;�PQ�1R�

�	��I�t�$�$r c�^^�UU4Sj[S[T5S-
55n[U5$![a
 [	S5Sef=f)Nc3�>># �UHnTUT;dMUv� M g7fr<r)r=r�
candidatesrCs  ��r!r@�%engine._find_pivot.<locals>.<genexpr>�s"����
�7�e�5��<�:�;U�E�E�7�s�
�	rzNo pivot found)rorJr��
StopIterationr�)rCr��pivotss`` r!r��engine._find_pivot�sM���
�$�Q��E�
�Q��7�
��	9���<����	9��-�.�D�8�	9�s	�
2�A	c��URS(a"[U5R5[;agUR	U5nUS:XaU$URXR5nUbU$[U5nUR[;a-[URU[UR5S3$UR[;aU$URRS5(aHURSS[;a1[URSSSU[UR5S3$URRS5(aU$[RU5nU(ag[ RU5(agUR"S:XagUR"SSS	;dUR"SSS
:XaUSS$UR"SSS:Xa![U5S
:�aUR"SSS-$UR$R5[&;d.UR"SS[(;dUR"SS[*;aUSS$UR"RS5(a[U5S
:�aUR"SS$[,RU5nU(aUR/S5$g![a gf=f)Nr�Frzn'tr6�quizzes�quizr;)�ches�shes�zzes�ssesrr�r8r�rr?r8�oes)r6r�rr.r/rxr:r�
IndexErrorr��plverb_irregular_presrJ�plverb_irregular_non_presr'�PLVERB_SPECIAL_S_RErp�
WHITESPACErr�pl_v_oes_oe�pl_v_oes_oe_endings_size4�pl_v_oes_oe_endings_size5�ENDS_WITH_Sr�)rr�r�r�rCrvs      r!r��engine._pl_special_verb�s������v�&�3�u�:�+;�+;�+=��+N�����u�%���A�:��K��
�
�d�$:�$:�;�����L�	��$�K�E��;�;�/�/�+�E�K�K�8�9�%��E�K�K�@P�@R�:S�9T�U�U��;�;�3�3��K��;�;����&�&�5�;�;�s��+;�?T�+T�(����S�b�)9�:�;�3���U�[�[�)�+�,�-�/�
�
�;�;����&�&��K�!�
'�
'��
-��
�����T�"�"���=�=�I�%��

�M�M�"�#��"B�B��}�}�R�S�!�U�*���"�:���=�=�����&�3�u�:��>��=�=��"�%��+�+�
�J�J����+�-��}�}�R�S�!�%>�>��}�}�R�S�!�%>�>���"�:���=�=�!�!�%�(�(�S��Z�!�^��=�=��"�%�%�
�
�
��
&��
��8�8�A�;����y�	��	�s�1K�
K�Kc��URU5nUS:XaU$[RU5nU(a9[UR	S5R5UR	S53$[RU5nU(aU$U$)Nrr�)r/�plverb_ambiguous_pres_keysrp�plverb_ambiguous_presr�r�plverb_ambiguous_non_pres)rr�r�rvs    r!r��engine._pl_general_verb!s������u�%���A�:��K�(�
.�
.�t�
4��
�+�B�H�H�Q�K�,=�,=�,?�@�A�"�(�(�1�+��O�O�'�
-�
-�d�
3��
��K��r c��URU5nUS:XaU$URXR5nUbU$[R	U5nU(a&[
UR
S5R5$[R	U5nU(a&[UR
S5R5$[R	U5nU(a4URUR
S55nUSS:XaSOSnUSU3$g)Nrr8r5r�r&F)r/rxr;�pl_adj_special_keysrp�pl_adj_specialr�r�pl_adj_poss_keys�pl_adj_poss�ENDS_WITH_APOSTROPHE_Sr�)rr�r�r�rvrw�
trailing_ss       r!r��engine._pl_special_adjective9s������u�%���A�:��K��
�
�d�$<�$<�=�����L�!�
'�
'��
-��
�!�"�(�(�1�+�"3�"3�"5�6�6��
$�
$�T�
*��
��r�x�x��{�0�0�2�3�3�
#�
*�
*�4�
0��
��!�!�"�(�(�1�+�.�B�!�"�v��}��#�J��T��:�,�'�'�r c�R�URU5nUS:XaU$Uc
URnOU[;a[eUR
XR5nUbU$US:XaU$U[;aUSS$[U5nURR5[;a4[UR5S:�aURUSS9=(d U$U$U[ ;aU$["R%5HupxUR&U*SU;dMUs $ UR(S(a$URR5[*;aU$URR5[,;aUR(S(aU$S	$[.R1U5n	U	(aHU	R3S5S:wa3UR5U	R3S5SUS
9U	R3S53$[6R8"[:5 UR=UR&[>R@"UR4SUS9S5sSSS5 $![[
4an[UeSnAff=f!,(df   O=f[6R8"[:5 UR=UR&[>R@"UR4SUS9S
5sSSS5 $!,(df   O=f[BR%5H�upxUR&U*SU;dMR%5H�up�UR&SU
U;dMUR&RG5UR&SU
UR&U*S/:XdMWUR&SU*[ISUR&U*SU5-s s $ M� [ISUR&U5$![Ja Of=f[ISUR&U5$![Ja Of=fUR[L;a0[UR5nUSU*[LUR3$URR5[N;aL[URR55nUSU*[NURR53$UR&RGS
5n
SRQU
SS5R5[R;aZ[SRQU
SS55nSRUUSU*[RSRQU
SS5R55$UR&SSS:XaUSSS-$UR&SSS:XaUSS$UR&SSS:XaUSSS-$UR&SSS:Xae[VR%5H upxUR&U*SU;dMUSSs $ [XR%5HupxX*SU;dMUSSs $ UR&SSS:XaUSSS-$UR&SSS:XaUSSS -$UR&SSS!:Xa=[ZR][U55nU(aUR&U;aUSSS"-$UR&SSS#:XaUSSS$-$UR&SSS%:XaUSSS&-$UR&SSS':XaUSSS(-$UR&S):Xag*UR&SSS+:XaU$UR&SSS,:XaUSSS--$S.[^SS4S.[`SS/4S.[bSS04S1[dSS24S3[fSS44S1[hSS-4S5[jSS44HUup�nnUR&SU:XdMUR%5H%upxUR&U*SU;dMUSUU-s s $ MW UR(S(Ga-UR&SSS6:XaUSSS7-$UR&SSS8;aUSS$UR&SSS9;a[U5S::�aUSSS7-$S1[lSS;4S.[nSS/4S.[pSS04S1[rSS24S3[tSS44S.[vSS4S5[xSS4S1[zSS4S.[|SS.4S3[~SS<4S1[�SS-4S=[�SS4S3[�SS44
HUup�nnUR&SU:XdMUR%5H%upxUR&U*SU;dMUSUU-s s $ MW UR&SSS>:Xd,U[�;d"URR5[�;aUSS$U[�;d"URR5[�;aUSS$UR&SSS?:Xd,U[�;d"URR5[�;aUSS$U[�;d"URR5[�;aUSS$URR5[�;aUSS$[�R%5H upxUR&U*SU;dMUSSs $ UR&SSS@:XaUSAUSAR�5:XaUSS$URR5[�;aUSS$URR5[�;aUSS$UR&SSSB:XaUSS$U[�;d"URR5[�;aUSS$UR&SSSC;aUSS$URR5[�;aUSS$UR&SSSD:XaUSS$U[�;d"URR5[�;aUSS$UR&SSSE:XauUR&SSSF;aUSSSG-$UR&SSSH:XaUSSSI:waUSSSG-$UR&SSSJ;aUSSSK-$UR&SSSL:XaUSSSG-$UR&SSSM:Xaw[UR&5S:�aUR&SSN;aUSS$UR(SO(a2UR&SSSM:XaUSAUSAR�5:XaUSS$UR&SSSP:XaUSSS-$UR&SSSQ:XawURR5[�;aUSS$[�R%5H upxUR&U*SU;dMUSSs $ UR&SSSR;aUSS$UR&SSSS:XaUSS$U[�;aUSSST-$UR&SS.:XaUSS$g	)UNr�r�r8r�rr2rrF)r�r�rr5r�rzr�z{}{}r?�quiesr6ri����r
r9�peopler;�rson�mansr>r=rAr@rrrCrBrErDrGrFrKrJrL�zoa�onr5�ex�ixr��umrr�r��tricesr
)�eaux�ieux)�ynges�inges�angesr��enr[rR�housesr��esesrr�)r�r�rre)�el�al�ol�f�earg)�ni�li�wi�fe�ar�ysrlr	r8r)�aos�eos�ios�oos�uosr�r�)Xr/r>r�r3r�r�rxr<�si_sb_ois_oi_caserrrrrrJrrsrtrur}rr6rv�
pl_sb_C_us_usrwrpr�r�rzr{r�r|r}r~�si_pron_acc_keys_bysizer�rr�r��si_sb_irregular_caps�si_sb_irregularrB�si_sb_irregular_compound�format�si_sb_U_man_mans_bysize�si_sb_U_man_mans_caps_bysize�si_sb_U_louse_lice_bysizer��si_sb_U_ch_chs_bysize�si_sb_U_ex_ices_bysize�si_sb_U_ix_ices_bysize�si_sb_U_um_a_bysize�si_sb_U_us_i_bysize�si_sb_U_on_a_bysize�si_sb_U_a_ae_bysize�si_sb_C_en_ina_bysize�si_sb_C_ex_ices_bysize�si_sb_C_ix_ices_bysize�si_sb_C_um_a_bysize�si_sb_C_us_i_bysizer��si_sb_C_a_ae_bysize�si_sb_C_a_ata_bysize�si_sb_C_is_ides_bysize�si_sb_C_o_i_bysize�si_sb_C_on_a_bysize�si_sb_C_im_bysize�si_sb_C_i_bysize�si_sb_uses_use_case�si_sb_uses_use�si_sb_ies_ie_case�si_sb_ies_ie�si_sb_oes_oe_case�si_sb_oes_oe�si_sb_sses_sse_case�si_sb_sses_sse�si_sb_singular_s_complete�si_sb_singular_s_bysizer��si_sb_z_zes�
si_sb_zzes_zz�si_sb_ches_che_case�si_sb_ches_che�si_sb_xes_xe�si_sb_ves_ve_case�si_sb_ves_ve�si_sb_U_o_os_complete�si_sb_U_o_os_bysize�si_sb_es_is)rr�r�r�rhr�rCrr�rvr�r�r�r�r�rg�unass_numendr��class_numends                   r!r��engine._sinoun^s�
�����u�%���A�:��K�	*��~������7�7�$�$�8��
�
�d�$;�$;�<�����L��2�:��K��$�$����9���d����:�:����!;�;��5�<�<� �A�%��2�2�5��2�B�J�d�J��K��)�)��K�,�2�2�4�D�A��}�}�a�R�S�!�Q�&���5����v�&�5�:�:�+;�+;�+=�AW�+W��K��:�:�����.��.�.�y�9�4�D�u�D�(�
.�
.�t�
4��
�"�(�(�1�+��#��l�l�2�8�8�A�;��&�l�A�B�2�8�8�A�;�-�P�P�
�
 �
 ��
,��4�4��
�
��!�!�$�,�,�a��G���-�
,��W�:�&�	*� �c�)��	*��V-�
,���
 �
 ��
,��4�4��
�
��!�!�$�,�,�a��G���-�
,�
,��,�1�1�3�D�A��}�}�a�R�S�!�Q�&�,�2�2�4�F�B��}�}�S�b�)�R�/� �=�=�.�.�0�!�M�M�#�2�.�!�M�M�1�"�#�.�5��
$)�=�=��1�"�#5�� %�u�}�}�a�R�S�'9�6�9�$��5�4�	��u�e�m�m�V�<�<���	��	��	��u�e�m�m�V�<�<���	��	��
�:�:�-�-��u�z�z�?�D��6�T�E�l�^�$8����$D�#E�F�F��:�:�����0��u�z�z�'�'�)�*�D��6�T�E�l�^�O�E�J�J�4D�4D�4F�$G�#H�I�I��]�]�(�(��-�
��H�H�Z���_�%�,�,�.�2J�J������B�C��)��D��=�=��V�t�e��(�#�(�(�:�b�c�?�*C�)J�)J�)L�M��
�
�=�=�����(����9�s�?�"��=�=�����*����9���=�=�����)����9�v�%�%��=�=�����'�/�5�5�7����=�=�!���%��*����9�$�8�5�:�:�<������9��>����9�$�=��=�=�����&����9�u�$�$��=�=�����'����9�w�&�&��=�=�����'�)�-�-�c�$�i�8�A��U�]�]�a�'��C�R�y�7�*�*��=�=�����(����9�w�&�&��=�=�����(����9�w�&�&��=�=�����'����9�v�%�%��=�=�F�"���=�=�����'��K��=�=�����&����9�t�#�#��'��R�0�
�(�"�d�3�
�(�"�d�3�
�%�r�4�0�
�%�r�4�0�
�%�r�4�0�
�%�r�2�.�/
�*�G��d��}�}�R� �G�+��G�G�I�D�A��}�}�a�R�S�)�Q�.�#�M�\�2�T�9�9�&�/
� ���y�)�)��}�}�R�S�!�X�-��C�R�y�3��&��}�}�R�S�!�%5�5��C�R�y� ��}�}�R�S�!�%@�@�S��Y�QR�]��C�R�y�3��&��+�R��6��,�b�$�7��,�b�$�7��)�2�t�4��)�2�t�4��*�D�"�5��)�2�r�2��*�B��3��,�b�#�6��(�"�c�2��)�2�t�4��'��R�0��&��B�/�3�.��L�$��=�=��$��/� !���	��� �=�=�!���-��2�#'�
��#6��#=�=�!*�!3�.
�M�M�"�#��(�*��*�*��z�z���!�^�3����9���$�$��
�
�(8�(8�(:�l�(J����9��

�M�M�"�#��'�)��(�(��z�z���!�\�1����9���&�&�%�*�*�*:�*:�*<��*N����9���:�:����!:�:����9��+�1�1�3�D�A��}�}�a�R�S�!�Q�&��C�R�y� �4��=�=�����'�D��G�t�A�w�}�}��,F����9���:�:�����,����9���:�:�����.����9���=�=�����'����9���&�&�%�*�*�*:�*:�*<��*N����9���=�=����!1�1����9���:�:�����-����9���=�=�����&����9���$�$��
�
�(8�(8�(:�l�(J����9���=�=�����&��}�}�R��#�'9�9��C�R�y�3��&��}�}�R��#�t�+��R���s�0B��C�R�y�3��&��}�}�R��#�'9�9��C�R�y�4�'�'��}�}�R��#�t�+��C�R�y�3��&��=�=�����%��5�=�=�!�A�%�%�-�-��*;�w�*F��C�R�y� ��"�"�7�+��=�=���%��-�$�q�'�T�!�W�]�]�_�2L����9�$��=�=�����&����9�s�?�"��=�=�����%��z�z���!�%:�:��C�R�y� �+�1�1�3����=�=�!���%��*����9�$�4��}�}�R�S�!�%H�H��C�R�y� ��=�=�����&����9���;�����9�t�#�#��=�=����#����9��sX�I
�I
�;I)�
I&�I!�!I&�)
I7�;K�
K'�;O�
O�O�#O:�:
P�Pc���[RU5nU(aUURS5nU(dU$URS5nURS5nURXB5nUUU3$g)z�
Return the appropriate indefinite article followed by text.

The indefinite article is either 'a' or 'an'.

If count is not one, then return count followed by text
instead of 'a' or 'an'.

Whitespace at the start and end is preserved.

r�rr�r�)�INDEFINITE_ARTICLE_TESTrpr��_indef_article)rr�r�rvr�r�r�r�s        r!r��engine.a�
sl��%�
+�
+�D�
1��
��8�8�A�;�D�����(�(�1�+�C��8�8�A�;�D��(�(��5�F��U�6�(�4�&�)�)�r r�r�c��^�URU5nUS:waUST3$URTUR5nUbUST3$U4SjUR5nST3n[	XV5$)Nrrc3�f># �UH&upURT5(dMUST3v� M( g7fr�)rp)r=�regexen�articler�s   �r!r@�(engine._indef_article.<locals>.<genexpr>�
s4����
�$=� ���~�~�d�#�
 �w�i�q����$=�s�1�1za )r/rxr=�_indef_article_casesr�)rr�r��mycountr��matches�fallbacks `     r!rB�engine._indef_article�
s�����.�.��'���a�<��W�A�d�V�$�$��
�
�d�D�$9�$9�:�����W�A�d�V�$�$�
�$(�$=�$=�
����v�;���G�&�&r c�j�UcURbURnUcSn[RU5nU(a4URS5nURS5nURS5nOSnSnSn[	U5R5[;aSnUUSURXR5U3$)aP
If count is 0, no, zero or nil, return 'no' followed by the plural
of text.

If count is one of:
    1, a, an, one, each, every, this, that
    return count followed by text.

Otherwise return count follow by the plural of text.

In the return value count is always followed by a space.

Whitespace at the start and end is preserved.

rrr�r�r�r�r)r7r�rpr�r�rr.rL)rr�r�rvr�r�r�s       r!r��	engine.no�
s���"�=�T�2�2�>��)�)�E��=��E�
�
"�
"�4�
(��
��(�(�1�+�C��8�8�A�;�D��8�8�A�;�D��C��D��D��u�:�����.��E���u�g�Q�t�{�{�4�7�8���?�?r c��URUS5nUn[H&upEURXR5up6U(dM!US3s $ US3$)zQ
Return the present participle for word.

word is the 3rd person singular verb.

r��ing)r��PRESENT_PARTICIPLE_REPLACEMENTS�subn)rr��plv�ansrF�replr�s       r!r��engine.present_participlesV�����t�Q�'����<�M�G��|�|�D�.�H�C��s���c�{�"�=���c�{�r c���[R[U55(a|[U[[
45(a[U5U:Xa[U5nO3S[U5;a[[U5S5nO[U5n[US-nUU3$URU5$![a [[U5SS5nNGf=f![a [US-nNVf=f)zl
Return the ordinal of num.

>>> ordinal = engine().ordinal
>>> ordinal(1)
'1st'
>>> ordinal('one')
'first'
�.r8N�d�
)
�DIGITrfr�r)�floatr�r��nthr��_sub_ord)rr�r�r�s    r!r��engine.ordinal/s����;�;�s�3�x� � ��#��s�|�,�,��S��S����H���#�c�(�?�/� ��C����-��
�C��A�
#��1�s�7�|���U�4�&�>�!��=�=��%�%��&�/���C���"�
�.��/���
#��1�r�6�{��
#�s$�*B1�C�1!C�C�C1�0C1c�L�U[[5S-
:�a[e[U$r()rJ�millr*)r�inds  r!�millfn�
engine.millfnPs"����T��Q���$�$��C�y�r c�:�[UURU53$r<)�unitrd)r�units�mindexs   r!�unitfn�
engine.unitfnUs���u�+��t�{�{�6�2�3�4�4r c��US:wa@[UnU(a
U(aSnOSn[UnURU5nUUUU3$[U[U3$)Nrr5r�)r�rgrd�teenrb)r�tensrhri�	tens_part�hyphen�	unit_part�	mill_parts        r!�tenfn�engine.tenfnXsf���1�9��D�	�I��������U��I����F�+�I��[�����I�;�?�?��u�+��t�F�|�n�-�-r c� �U(aTU(dU(aSURSS3OSn[USUURX#5URU5S3$U(dU(a%URX#5URU5S3$g)Nr�andwordr�z hundred�, )rCrgrsrd)r�hundredsrnrhrirvs      r!�hundfn�
engine.hundfnds����=A�U��$�+�+�I�6�7�q�9�PR�G���>�"�(�7�)��:�:�d�*�+�D�K�K��,?�+@��D�
��5��j�j��-�.�t�{�{�6�/B�.C�2�F�F�r c��[URS55nUS:XaSURSS3$U(a[US3$SURSS3$)Nrrr�rwr�)r�r�rCrg�rrvrhs   r!�	group1sub�engine.group1subpse���B�H�H�Q�K� ���A�:��t�(�(��/�0��3�3�
��5�k�]�"�%�%��t�(�(��0�1��4�4r c��[URS55nU(a[US3$SURSS3$)Nrrwrr�)r�r�rgrCr|s   r!�
group1bsub�engine.group1bsubysC���B�H�H�Q�K� ����5�k�]�"�%�%��t�(�(��0�1��4�4r c�.�[URS55n[URS55nU(aURX#5S3$U(aSURSS[US3$SURSSURSS3$)Nrr�rwrr�)r�r�rsrCrg)rrvrnrhs    r!�	group2sub�engine.group2sub�s����2�8�8�A�;����B�H�H�Q�K� ����j�j��-�.�b�1�1���t�(�(��0�1��4��;�-�r�B�B��4�$�$�V�,�-�Q�t�/@�/@��/H�.I��L�Lr c��[URS55n[URS55n[URS55nUS:XaSURS3nO,U(a[[U5nOSURS3nU(aURX45nOFU(aSURSS[U3nO"SURSSURS3nUSUS3$)Nrr�r�rr�r�rw)r�r�rCr�rgrs)rrvrxrnrh�hunword�tenwords       r!�	group3sub�engine.group3sub�s����r�x�x��{�#���2�8�8�A�;����B�H�H�Q�K� ���q�=��$�+�+�E�2�3�4�G�
��$�x�.�)�G��$�+�+�F�3�4�5�G���j�j��-�G�
��$�+�+�F�3�4�A�d�5�k�]�C�G��$�+�+�F�3�4�A�d�6G�6G��6O�5P�Q�G���!�G�9�B�'�'r c	��UR[URS55[URS55[URS55UR5nU=RS-
slU$)Nrr�r�)ryr�r�r8)rrv�rets   r!�hundsub�engine.hundsub�sY���k�k��������c�"�(�(�1�+�.��B�H�H�Q�K�0@�$�/�/�
��	
���1����
r c��UR[URS55[URS55UR5S3$)Nrr�rw)rsr�r�r8�rrvs  r!�tensub�
engine.tensub�s<���*�*�S����!��-�s�2�8�8�A�;�/?����Q�R�RT�U�Ur c�p�UR[URS55UR5S3$)Nrrw)rjr�r�r8r�s  r!�unitsub�engine.unitsub�s,���+�+�c�"�(�(�1�+�.����@�A��D�Dr c���US:Xa"[RURU5nU$US:XaC[RURU5n[RUR
US5nU$US:Xad[RURU5n[RURUS5n[RURUS5nU$[U5S:XaURSnU$[U5S:XaURSnU$UR5RS5nSUl[RU5nU(a?[RURUS5n[RU5nU(aM?[RUR US5n["RUR$US5nU$)Nrr�r�rr�r�r�)�DIGIT_GROUPrsr}�
TWO_DIGITSr�r��THREE_DIGITSr�r�rC�lstripr8�THREE_DIGITS_WORDrpr��TWO_DIGITS_WORDr��ONE_DIGIT_WORDr�)rr�r�rvs    r!�enword�
engine.enword�s����A�:��/�/�$�.�.�#�6�C�,�
�+�a�Z��.�.�����5�C��/�/�$�/�/�3��:�C�&�
�%�a�Z��"�"�4�>�>�3�7�C��.�.�����a�8�C��/�/�$�.�.�#�q�9�C��
���X��]��#�#�F�+�C��
���X��]��#�#�E�*�C��
��*�*�,�%�%�c�*�C��D�O�"�)�)�#�.�B��'�+�+�D�L�L�#�q�A��&�-�-�c�2���"�"�%�%�d�k�k�3��:�C� �$�$�T�\�\�3��:�C��
r c�D�[RSU5nUSX:H--$)Nc�2�[URS5$r()r�r�)rfs r!r��!engine._sub_ord.<locals>.<lambda>�s��W�U�[�[��^�-Dr r�)�ordinal_suffrs)r�news  r!r_�engine._sub_ord�s'�����D�c�J���T�S�Z�(�(�(r c�r�U(aUS:waSOSnURSU5nOU/nURU5$)Nrr8rrY)r�_remove_last_blank)r�r��decimalr��	max_split�chunkss      r!�
_chunk_num�engine._chunk_num�s:���#�q�j��a�I��Y�Y�s�I�.�F��U�F��%�%�f�-�-r c�4�USS:HnU(aUSSOUnX!4$)z~
Remove the last item from chunks if it's a blank string.

Return the resultant chunks and whether the last item was removed.
r8r�Nr)r��removedr�s   r!r��engine._remove_last_blank�s)����*��"�� '�����V����r c�N�SSS.RUR5SS5$)N�plus�minus)�+r5rr�)r�r�)r�s r!�	_get_sign�engine._get_sign�s$���'�*�.�.�s�z�z�|�A���C�Cr c
�L^^^^�TXgS.Tl[U5nU	be[U5U	:�aVURSS5n
U(a/[RSU
S5uU
S'nUS:XaO	U(aM/U
SSU
S3$TS:dTS:�a[eTRU5nU[;aUnUSS[;n
U
(aUSSnTRXT5up�USS	:HnU(+mUUUU4S
jn[UUUS5UUS&/nTS:waUSRUS35nU
(aU(aTRUS5US'USSH7nURU5 URURUS355 M9 U(aURU5 U(aU/[U5-U-$U(aUS3OS	nT(aS
R!U5O S	R!TR#UX�55nUU-$![a [U
S5s$f=f)a�
Return a number in words.

group = 1, 2 or 3 to group numbers before turning into words
comma: define comma

andword:
    word for 'and'. Can be set to ''.
    e.g. "one hundred and one" vs "one hundred one"

zero: word for '0'
one: word for '1'
decimal: word for decimal point
threshold: numbers above threshold not turned into words

parameters not remembered from last call. Departure from Perl version.
)rvr�r�NrYrz\1,\2rr�r�r�c�>�[RSU5nUS:XaSnTS:XaT(dTRUS5nOTRUT5nUSSS:XaUSSn[RSU5nTS:Xa!T(a[RSTS	3U5n[
RSU5nUR
5nT(aSmU$)
Nr�r�rrr�rw�,rz \1)�	NON_DIGITrsr��WHITESPACES_COMMA�
COMMA_WORD�WHITESPACES�strip)�chunkrvr�r�rs ����r!�
_handle_chunk�-engine.number_to_words.<locals>._handle_chunk s�����M�M�"�e�,�E���{�����z�%����E�1�-�����E�5�1���R�S�z�T�!��c�r�
��%�)�)�#�u�5�E���z�e�"����7�)�4�'8�%�@���O�O�C��/�E��K�K�M�E�����Lr rr8rw)rCr�r]r�FOUR_DIGIT_COMMArSr�r'r��nth_suffr�rr_�appendrIr-rB�_render)rr��wantlistr��commarvr�r�r��	threshold�spnumr��sign�myordr��
finalpoint�	loopstartr��	numchunksr��signout�valoutr�s`  ` `                @r!r��engine.number_to_words�s9���<)0��J����#�h��� �U�3�Z�)�%;��I�I�c�1�%�E�� 0� 5� 5�h��a�� I�
��q��1���6���%�
%���(��1�U�1�X�J�/�/��1�9���	�(�(��~�~�c�"���(�?��C��B�C��H�$����c�r�(�C�!�_�_�S�5�A����1�I��O�	�!*�]��	�	�4!���y�z�0B�C��y�z���	��A�:��q�	���5�'���4�I��Y� �M�M�)�B�-�8�I�b�M��A�B�Z�E����W�%����U�[�[�E�7�!��5�6� �����W�%���6�D��J�&��2�2� $�T�F�!�*�"���
�I�I�i� �������i��@�A�	�
�����O�
%��5��8�}�$�
%�s�5H�H#�"H#c#�# �URS5nUv� USL=(d URU5(+nUHnXQ:XaSnOU(aUv� SU3v� M g7f)NrFr)�popr')r�r�r��
first_itemr��ncs      r!r��engine._renderUs[����Z�Z��]�
����4��C�z�':�':�7�'C�#C���B��}�������b�T�(�N��s�AAc�B�U(dg[U5S:XaUS$U(aUS:XaSnOSUS3n[U5S:XaUSUUS3$UcSSRU5;aSnOSnUcUnUU3nU(aUS-
nURUSS5UUS3$)	aB
Join words into a list.

e.g. join(['ant', 'bee', 'fly']) returns 'ant, bee, and fly'

options:
conj: replacement for 'and'
sep: separator. default ',', unless ',' is in the list then ';'
final_sep: final separator. default ',', unless ',' is in the list then ';'
conj_spaced: boolean. Should conj have spaces around it

r�rrrr�r��;r8)rJrB)rrCr��
sep_spaced�	final_sep�conj�conj_spaceds       r!rB�engine.joinas���,���u�:��?���8�O���r�z����4�&��{���u�:��?��A�h�Z��v�e�A�h�Z�0�0��;��b�g�g�e�n�$��������I� �k�$��(�	���3�J�C��(�(�5��2�;�'�(���E�"�I�;�?�?r )r=�
__number_argsrCr6r8r7r;r9r:r<r>r!)rK�Optional[Word]rLr�r"r�)rPr�rQr�rRr�rSr�rTr�rUr�r"r�)r^r�r"r�)r^r�r"r)r�r/ruzSequence[Optional[Word]]r"�
Optional[str])NN)r��
Optional[int]r�r�r"r�)r�r�r"r)rvrr�zDict[str, Callable]r"r�)r�r/r"r�)rr�r"r�)r�r�r"zTuple[str, str, str]r<)r�r/r�zOptional[Union[str, int, Any]]r"r�)r�r/r�r/r"�Union[str, bool])r�r/r��Optional[Union[int, str, Any]]r�r�r"zUnion[str, Literal[False]])r�r�r�r�r"r�)
r�r�r�r�r�r�r�r�r"r-)r�r�r�r�r"r-)r��Optional[Union[str, int]]r"zUnion[str, int])r�r�r�r�r"r�)r�rr�r�r"zUnion[str, None])r�r�r�r�r"r�)r�r�r�r�r�r�r"r�)r)r�r/r�r�r"r�)r�r�r�zUnion[int, str, Any]r"r�)r�r/r�zOptional[Union[int, str]]r"r�)r�r/r"r�)r��Union[Number, Word]r"r�)r)rcr�r"r�)rhr�rir�r"r��r"r�)
rxr�rnr�rhr�rir�r"r�)rvrr"r�)r�r�r�r�r"r�)Frr��andr�r��pointN)r�r�r�r-r�r�r��Union[Falsish, str]rvr�r�r�r�r�r�r�r�r�r"zUnion[str, List[str]])NTNr�T)rCzOptional[Sequence[Word]]r�r�r�r-r�r�r�r�r�r-r"r�)_rrrrr�propertyrC�setterrrMrVrYr_rbrGrHrxr�r�r�r�r�r�r�r�rLr�r�r�r�r�r�r�r�r�rr�r�r/r��classmethodr|rs�staticmethodr�r�r�r�r�r�r��A_ordinal_a�A_ordinal_an�
A_explicit_an�
SPECIAL_AN�	SPECIAL_A�A_abbrev�SPECIAL_ABBREV_AN�SPECIAL_ABBREV_A�
CONSONANTS�ARTICLE_SPECIAL_EU�ARTICLE_SPECIAL_ONCE�ARTICLE_SPECIAL_ONETIME�ARTICLE_SPECIAL_UNIT�ARTICLE_SPECIAL_UBA�ARTICLE_SPECIAL_UKR�A_explicit_a�SPECIAL_CAPITALS�VOWELS�A_y_consrIrBr�r�r�rdrjrsryr}r�r�r�r�r�r�r�r_r�r�r�r�r�rBrrr r!r3r3�sn��
<��8��8����!��!��	��	�����
��
�	�

��
�
�
��

����0������������	?���
��
� 0�FBF��"��1>��	��,!�";�,?��?�':�?�	�?�@�#��#�N �<��&��&�.�BF�&��&�!?�&�	�&��&�(�BF�&��&�!?�&�	�&��&�.�BF�&��&�!?�&�	�&��&�(�2��2�8�
=��
=��
=��
=��
<��
<��15� $�	'��'�.�'��	'�

$�'��'�R�4.�
�B
��,=A�_��_� 9�_�	�_�B	�+��+�2%�0�9��9�=A�P��P� 9�P�	�P�f=A���� 9��	��2=A�"��"� 9�"�	�"�P,0� $�	C��C�)�C��	C�

�C�N
����.
�B�
�c��	�t��	���	�T��	�C��	�4��	�D�!�	�3��	�S��	�S�!�	�s�#�	 �#�&�	�s�#�	�c�"�	�c�"�	�s��	�3��	���
�4��9��>'�0�!@��!@�J����$�&��&�@�
5�
.�
�5�5�M�(�$�V�E��:�)��)��.��.������D��D����%(����'.�#'�p �
 �p ��p ��	p �
#�p ��
p ��p ��p �%�p �!�p �
�p ��p �d�	��	��"��#'�� �0@�'�0@��0@��	0@�
!�0@��
0@��0@�

�0@��0@r r3)r5r�r"r�)rN)r?r�rCzOptional[Iterable[str]]r"r�)rCrEr"zDict[int, set])T)rOrErPr�rQr�rRr-r�(=r0�
__future__rr�rGrzr}r�re�numbersr�typingrrrrr	r
rrr
rrrr�more_itertoolsr�	typeguardr�compat.py38r�	Exceptionrr$r'r*r-r0r3r8rDrMrWrr �updater!r�r}r�listrr�k1�k2rr�pl_sb_z_zes_listr��pl_sb_ze_zes_listr��pl_sb_C_is_ides_complete�pl_sb_C_is_ides_endingsr�pl_sb_C_is_ides_list�si_sb_C_is_ides_listr$r��pl_sb_C_a_ata_list�si_sb_C_a_ata_listr#r�r�pl_sb_U_a_ae_list�si_sb_U_a_ae_listrr��pl_sb_U_a_ae�pl_sb_C_a_ae_list�si_sb_C_a_ae_listr"r�r�pl_sb_C_en_ina_list�si_sb_C_en_ina_listrr�r�pl_sb_U_um_a_list�si_sb_U_um_a_listrr��pl_sb_U_um_a�pl_sb_C_um_a_list�si_sb_C_um_a_listr r�r�pl_sb_U_us_i_list�si_sb_U_us_i_listrr��pl_sb_U_us_i�pl_sb_C_us_i_list�si_sb_C_us_i_listr!r�rr
r��pl_sb_U_on_a_list�si_sb_U_on_a_listrr��pl_sb_U_on_a�pl_sb_C_on_a_list�si_sb_C_on_a_listr&r�r�pl_sb_C_o_ir�r%rr�r:�pl_sb_U_o_os_endingsr�r;�pl_sb_U_ch_chs_list�si_sb_U_ch_chs_listrr��pl_sb_U_ch_chs�pl_sb_U_ex_ices_list�si_sb_U_ex_ices_listrr��pl_sb_U_ex_ices�pl_sb_U_ix_ices_list�si_sb_U_ix_ices_listrr��pl_sb_U_ix_ices�pl_sb_C_ex_ices_list�si_sb_C_ex_ices_listrr�r�pl_sb_C_ix_ices_list�si_sb_C_ix_ices_listrr�r�pl_sb_C_i_list�si_sb_C_i_listr(r�r�pl_sb_C_im_list�si_sb_C_im_listr'r�r�pl_sb_U_man_mans_list�pl_sb_U_man_mans_caps_list�si_sb_U_man_mans_listrr��si_sb_U_man_mans_caps_listrr��pl_sb_U_louse_lice_list�si_sb_U_louse_lice_listrr��pl_sb_uninflected_s_complete�pl_sb_uninflected_s_endings�pl_sb_uninflected_srvrrrt�pl_sb_uninflected_endingsrur��pl_sb_singular_s_endingsr�r1�si_sb_singular_s_endingsr2�pl_sb_singular_s_esrB�pl_sb_singular_srr)r*r+r,r-r.r3r4r5r6r7r/r0r8r9�plverb_special_s�_pl_sb_postfix_adj_defnrr#�pl_sb_postfix_adj_stemsr<�pl_prep_listr�r��pl_prep�pl_sb_prep_dual_compoundr�r�r{r��pl_pron_acc_keysr�_thecase�_plur�_gend�_singr��si_pron_acc_keysrr�r�r��compilerqr�r�r�r�r�r�r.r-r�r�r�r��VERBOSEr�r�r�r�r�r�r^rIrr��dictr�r�rgrmr�rbr5r{r|�string_to_constantrrr�r�rwrxryr�r�r�r�rAr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rRr\r�r�Falsish�_STATIC_TYPE_CHECKINGr/�typer&r3)rr�r>s000r!�<module>r\s��4�l#�
�����	������ -�!�"�	�	�	�	�y�	�	�Y�	�	��	�	��	�	�Y�	�	�Y�	��@�@�*�*�	!-�	�!-��!-� �!-��	!-�N!��
��
��
��	��"��Z�"��
�"��"�"��%�	"�
�H�"��L�
"��N�"��N�"��
�"��X�"���"�	�&�"�
�;�"��
�"��$�"� �^�!"�"�#�#"�$
�i�%"�&�N�'"�(�X�)"�*�W�+"�,�"�-"�.�-�/"�0�-�1"�2�z�3"�4��5"�6�-�7"�8
�j�9"�:�Y�;"�<�H�="�>�z�?"�@
�6�A"�B
�i�C"��H���(�)��
���	��*�+E�F��&5�&;�&;�&=�>�&=�F�Q�1�4�&=�>��	
�o�	�A�
�a�x��������B�4C�A�4F�F����o�b�1��A��	
�
,@�+E�+E�+G�H�+G��!���+G�H��/G�/M�/M�/O�P�/O�V�a�A�D�/O�P��	
�&�	'�A�
�a�x��������B�$�Q�'�	
� ��$�'?��'C�
%�Q�'�

(�'���,�-�����.�/��
�����
�� �6M�#N�6M��b���H�6M�#N�N���0�2I�I���)�6�1��G�	������@�'���2������
���&��T�2������
��,�&��T�2������5���(�%��3������
�� �&��Q�/������
��L�&��Q�/������
�� �&��Q�/������
��,�&��Q�/�������
��m�,��
�� �&��Q�/������
"���&��Q�/������	���K�(���;�?�;�a�#�2��x�q�\�;�?�@���R��-��D��*?�@�*?�Q�3�a��*?�@��D�H�ID��L�1�2���/C�D�/C�!��1�g�/C�D�E��
5���(�#�t�4������3���)�6�1�5������*���)�6�1�5������
	�� �)�6�1�5������%���)�6�1�5������/��BR��C��C�?��!�#3�Y�.��FV��T�4�G�C��#�%6�
��
�E�G�	�
�

�E�G���*�C��%�H�	�����/��d�u�M�	�� � �L���,�f�a�E�J�	����) ��Z
�
�	��3�1�6�1��b���H�1�6�����B�,!�-!��2��:�& �' ��."�";�<��
!�B�C!��H!�$�<�*A�A�� �!9�:��/H�I�/H�!�s�"�X�/H�I��.F�G�.F��c��H�.F�G�� �!9�:��"�m����H�H�!�5�
6�5��R��s�8�5�
6�	7�
�	����+��R����@]��~H��V��$��&&��9�
�����.:��C������

�� ��H�H�	��
�	�
� �
!�	"�2�	2������L�M�N���� �!��g�g�����$�:Q�$��=���c�h�h�'8�9�:�%�@��
C��J0�16���	
��!3�3����(��
�#�(�(�?�+�
,��0��	�9R�S��������
�k��
�5�	�
���
�6�
��|��	�&���|��	�&��
�l���F������F�� �W�!�"�H�#�$
�8�%�&
�8�'�(
�h�)��0
�{�0�0�2�3�2�V�a�A�D�2�3�=��	9������t��
��������
������ �3�8�8�K�0�1�� ��-��%0�%6�%6�%8�9�%8�6�A�!�$�%8�9����&�!�H�e�U�E�@0�*/����%� ��'�C&�N�3�8�8�G�E�N�3�4�� ����0�����
�����
��
��!�	�5�!�
�E�!��W�!�
�g�	!�

�5�!��F�
!�
�5�!��U�!��F�!�
�f�!��W�!�
�g�!��W�!�
�g�!��F�!� �V�!!�"�F�#!�$��
��
�
�����
�
���
�A!��F �Z�Z�	�'�#�(�(�0�1�
2�	3�;�?������
��"�J�J�7������E��,��&��+�
�H���V�W�g�N���j�j�	�'�#�(�(�>�*�
+�	,�B�/������
�����
�
���:�:��G�C�H�H�[�,A�$B�#C�2�F��
�
�V���:�:��
�J�J�
���:�:�B�B�M�M�R���z�z�:�B�M�M�J���
�
�7�����
��z�z�2�B�M�M�B���j�j�3�R�]�]�C������������������s�z�z�|���
����
�	�
�	��	���z�z�Q�s�x�x��0�1��5�6��
T������
��$�
�E��T�5�%��
�#0�0�-�Q�D��-�0�
�"/�0�-�Q�5��-�0��#�U�D�A���
�
�:�&�
��
�
�/����?�
����2�3���Z�Z��#�$�B�'������!�j�j��$�%�R�(�"�-�-����j�j�<�=���j�j�B�'7�&8��!;�<��
�Z�Z��
�
��j�j�����7�����L�1���*�*�%F��
�
�V��
�Z�Z�+�R�]�]�
;�
��J�J�,�b�m�m�<�	��J�J�5�r�}�}�E���:�:�m�R�]�]�;��
�Z�Z�
�r�}�}�
5�
��Z�Z�	�2�=�=�9���z�z�+�r�}�}�=���*�*�]�B�M�M�B���z�z�"4�b�m�m�D���j�j�!:�B�M�M�J���j�j��"�-�-�8���:�:�.�/��	���K����	/���j�j��!��
�Z�Z��
$�
��z�z�/�*���J�J�7�8���*�*�1�2�����,�-���:�:�4�5���J�J�u��	��J�J�w�'��
�Z�Z��
(�
��j�j�� ���Z�Z�����
�
�
�6�����Z�Z���x�(��Z�Z���&�!��Z�Z�	��C� ��Z�Z�� �%�(��Z�Z�
��V�$��Z�Z�
��X�&��Z�Z���h�'��Z�Z������Z�Z�3�4�m�D�#��"	�
�
�5���
$�C�
$���&����S�<�<�=�D�D�D�D�/��/�U@�U@��A8?��I��P��J$O��`@��A��TE��L6��~J��G��7��^4��0:��H�0�#%����%� �*/����%� ��'�0��d1��0sl�,|�|�1|�!|%�|*�:|/� |4�|9�|>�!}�}�
}
�,}�}�}:�$}?�}7�6}7

Youez - 2016 - github.com/yon3zu
LinuXploit