o
    Ìn~bÔR  ã                   @   s´   d dl mZ d dlZd dlmZmZ i d d“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “d!d"“Zd#d$„ Zd%d&„ Zd'd(„ Z	d)d*„ Z
g d+¢ZdS ),é    )Úprint_functionN)ÚbordÚbchrZ0000é   Z0001é   Z0010é   Z0011é   Z0100é   Z0101é   Z0110é   Z0111é   Z1000é	   Z1001é
   Z1010é   Z1011é   Z1100é   Z1101é   Z1110é   Z1111c                 C   s&   t dd„ | ƒ}t dd„ |ƒ}d |¡S )z,Convert a key into a string of binary digitsc                 S   s   t | ƒS )N)r   ©Úx© r   úB/usr/local/lib/python3.10/dist-packages/Cryptodome/Util/RFC1751.pyÚ<lambda>(   s    z_key2bin.<locals>.<lambda>c                 S   s   t | d?  t | d@   S )Nr   r   )Úbinaryr   r   r   r   r   )   s    Ú )ÚmapÚjoin)ÚsÚklr   r   r   Ú_key2bin&   s   
r   c                 C   s2   d}| ||| … D ]}|d t |ƒ d }q
|S )zjExtract a bitstring(2.x)/bytestring(2.x) from a string of binary digits, and return its
    numeric value.r   r   é0   )Úord)ÚkeyÚstartÚlengthÚresultÚyr   r   r   Ú_extract-   s   r'   c                 C   sº   t | ƒd dkrtdƒ‚d}tdt | ƒdƒD ]B}| ||d … }t|ƒ}d}tdddƒD ]
}|t||dƒ }q,t|t|d> d@ ƒ ƒ}tddd	ƒD ]}|tt||d	ƒ  d
 }qIq| ¡ S )au  Transform an arbitrary key into a string containing English words.

    Example::

        >>> from Cryptodome.Util.RFC1751 import key_to_english
        >>> key_to_english(b'66666666')
        'RAM LOIS GOAD CREW CARE HIT'

    Args:
      key (byte string):
        The key to convert. Its length must be a multiple of 8.
    Return:
      A string of English words.
    r   r   z.The length of the key must be a multiple of 8.r   é@   r   r
   éÿ   r   ú )ÚlenÚ
ValueErrorÚranger   r'   r   ÚwordlistÚstrip)r"   ÚenglishÚindexÚsubkeyÚskbinÚpÚir   r   r   Úkey_to_english7   s   ÿr6   c                 C   sÐ  |   ¡  ¡ }d}tdt|ƒdƒD ]Õ}|||d … }ddg }d}|D ]‡}t |¡}d|d d  d }||> }	|	d? |	d? d@ |	d@ }
}}|d	kry||d
?  |
B ||d
? < ||d
? d  |B ||d
? d < ||d
? d  |B ||d
? d < n-|dkrš||d
?  |B ||d
? < ||d
? d  |B ||d
? d < n||d
?  |B ||d
? < |d }q#d}|D ]}	|t|	ƒ }q¯t|ƒ}d}tdddƒD ]
}|t||dƒ }qÄ|d
@ t|ddƒkrÝt	dƒ‚||dd…  }q|S )a~  Transform a string into a corresponding key.

    Example::

        >>> from Cryptodome.Util.RFC1751 import english_to_key
        >>> english_to_key('RAM LOIS GOAD CREW CARE HIT')
        b'66666666'

    Args:
      s (string): the string with the words separated by whitespace;
                  the number of words must be a multiple of 6.
    Return:
      A byte string.
    ó    r   r
   r   r   r   é   r)   r	   r   r   r   éýÿÿÿr(   zParity error in resulting key)
ÚupperÚsplitr-   r+   r.   r1   r   r   r'   r,   )r   ÚLr"   r1   ZsublistÚcharÚbitsr5   Úshiftr&   ÚclÚccÚcrr2   r3   r4   r   r   r   Úenglish_to_keyZ   s>   

  ""
rC   (   ÚAZABEZACEZACTZADZADAZADDZAGOZAIDZAIMZAIRÚALLZALPZAMZAMYÚANZANAÚANDZANNZANTÚANYZAPEZAPSZAPTZARCZAREZARKZARMZARTZASZASHZASKÚATZATEZAUGZAUKZAVEZAWEZAWKZAWLZAWNZAXZAYEÚBADZBAGZBAHZBAMZBANZBARZBATZBAYZBEZBEDZBEEZBEGZBENZBETZBEYZBIBZBIDZBIGZBINZBITZBOBZBOGZBONZBOOZBOPZBOWZBOYZBUBZBUDÚBUGZBUMZBUNZBUSZBUTZBUYZBYZBYEZCABZCALZCAMZCANZCAPZCARZCATZCAWZCODZCOGZCOLÚCONZCOOZCOPZCOTZCOWZCOYZCRYZCUBZCUEZCUPZCURZCUTZDABZDADZDAMZDANZDARZDAYZDEEZDELZDENZDESZDEWZDIDZDIEZDIGZDINZDIPZDOZDOEZDOGZDONÚDOTZDOWZDRYZDUBZDUDZDUEZDUGZDUNZEARZEATZEDZEELZEGGZEGOZELIZELKZELMZELYZEMZENDÚESTZETCZEVAZEVEZEWEZEYEZFADZFANZFARZFATZFAYZFEDZFEEZFEWZFIBZFIGZFINZFIRZFITZFLOZFLYZFOEZFOGZFORZFRYZFUMZFUNZFURZGABZGADZGAGZGALZGAMÚGAPÚGASZGAYZGEEZGELZGEMÚGETZGIGZGILZGINZGOZGOTZGUMZGUNZGUSZGUTZGUYZGYMZGYPZHAZHADZHALZHAMZHANZHAPZHASZHATZHAWZHAYZHEZHEMZHENZHERZHEWZHEYZHIZHIDZHIMZHIPZHISÚHITZHOZHOBZHOCZHOEZHOGZHOPZHOTZHOWZHUBZHUEZHUGZHUHZHUMZHUTÚIZICYZIDAZIFZIKEZILLZINKZINNÚIOZIONZIQZIRAZIREZIRKZISZITZITSZIVYZJABZJAGZJAMZJANZJARZJAWZJAYZJETZJIGZJIMZJOZJOBZJOEZJOGZJOTZJOYZJUGZJUTZKAYZKEGZKENZKEYZKIDZKIMZKINZKITZLAZLABZLACZLADZLAGZLAMZLAPZLAWZLAYZLEAZLEDZLEEZLEGZLENZLEOZLETZLEWZLIDZLIEZLINZLIPZLITZLOZLOBZLOGZLOPZLOSZLOTZLOUZLOWZLOYZLUGZLYEZMAZMACZMADZMAEZMANZMAOZMAPZMATZMAWZMAYZMEZMEGZMELZMENZMETZMEWZMIDZMINÚMITZMOBZMODZMOEZMOOZMOPZMOSZMOTZMOWZMUDZMUGZMUMZMYZNABZNAGZNANZNAPZNATZNAYZNEZNEDZNEEZNETZNEWZNIBZNILZNIPZNITÚNOZNOBZNODZNONZNORÚNOTZNOVZNOWZNUZNUNZNUTÚOZOAFZOAKZOARZOATZODDZODEZOFZOFFZOFTZOHZOILÚOKZOLDÚONZONEÚORZORBZOREZORRZOSZOTTZOURZOUTZOVAZOWZOWEZOWLZOWNZOXZPAZPADZPALZPAMZPANZPAPZPARZPATZPAWZPAYZPEAÚPEGZPENZPEPZPERZPETZPEWZPHIÚPIZPIEZPINZPITZPLYZPOZPODZPOEÚPOPZPOTZPOWZPROZPRYZPUBZPUGZPUNZPUPÚPUTZQUOZRAGZRAMZRANZRAPZRATZRAWZRAYZREBÚREDZREPZRETZRIBZRIDZRIGZRIMZRIOZRIPZROBZRODZROEZRONZROTZROWZROYZRUBZRUEZRUGZRUMZRUNZRYEZSACZSADZSAGZSALZSAMZSANZSAPZSATZSAWZSAYZSEAZSECZSEEZSENZSETZSEWZSHEZSHYZSINZSIPZSIRZSISZSITZSKIZSKYZSLYÚSOZSOBZSODZSONZSOPZSOWZSOYZSPAZSPYZSUBZSUDZSUEZSUMZSUNZSUPZTABZTADZTAGZTANÚTAPZTARZTEAZTEDZTEEZTENZTHEZTHYZTICZTIEZTIMZTINZTIPZTOZTOEZTOGZTOMZTONZTOOZTOPZTOWZTOYÚTRYZTUBZTUGZTUMZTUNZTWOZUNÚUPZUSZUSEZVANZVATZVETZVIEZWADZWAGZWARZWASZWAYZWEZWEBZWEDZWEEZWETZWHOZWHYZWINZWITZWOKZWONZWOOZWOWZWRYZWUZYAMZYAPZYAWZYEZYEAZYESZYETZYOUZABEDZABELZABETZABLEZABUTZACHEZACIDZACMEZACREZACTAZACTSZADAMZADDSZADENZAFARZAFROZAGEEZAHEMZAHOYZAIDAZAIDEZAIDSZAIRYZAJARZAKINZALANZALECZALGAZALIAZALLYZALMAZALOEZALSOZALTOZALUMZALVAZAMENZAMESZAMIDZAMMOZAMOKZAMOSZAMRAZANDYZANEWZANNAZANNEZANTEZANTIZAQUAZARABZARCHZAREAZARGOZARIDZARMYZARTSZARTYZASIAZASKSÚATOMZAUNTZAURAZAUTOZAVERZAVIDZAVISZAVONZAVOWZAWAYZAWRYZBABEZBABYZBACHÚBACKZBADEZBAILZBAITZBAKEZBALDZBALEZBALIZBALKZBALLZBALMÚBANDZBANEZBANGZBANKZBARBZBARDÚBAREZBARKZBARNZBARRZBASEZBASHZBASKZBASSZBATEZBATHZBAWDZBAWLZBEADZBEAKZBEAMZBEANZBEARZBEATZBEAUZBECKZBEEFZBEENZBEERZBEETZBELAÚBELLZBELTZBENDZBENTZBERGZBERNZBERTZBESSZBESTZBETAZBETHZBHOYZBIASZBIDEZBIENZBILEZBILKZBILLZBINDZBINGZBIRDZBITEZBITSZBLABZBLATZBLEDZBLEWZBLOBZBLOCZBLOTZBLOWÚBLUEZBLUMZBLURZBOARZBOATZBOCAZBOCKZBODEZBODYZBOGYZBOHRZBOILZBOLDZBOLOZBOLTZBOMBZBONAZBONDZBONEZBONGZBONNZBONYZBOOKZBOOMZBOONZBOOTZBOREZBORGZBORNZBOSEZBOSSZBOTHZBOUTZBOWLZBOYDZBRADZBRAEZBRAGZBRANZBRAYZBREDZBREWZBRIGZBRIMZBROWÚBUCKZBUDDZBUFFZBULBZBULKZBULLZBUNKZBUNTZBUOYZBURGZBURLZBURNZBURRZBURTZBURYZBUSHZBUSSZBUSTZBUSYZBYTEZCADYZCAFEZCAGEZCAINZCAKEZCALFÚCALLZCALMZCAMEZCANEZCANTZCARDZCAREZCARLZCARRZCARTZCASEZCASHZCASKZCASTZCAVEZCEILZCELLZCENTZCERNZCHADZCHARZCHATZCHAWZCHEFZCHENZCHEWZCHICZCHINZCHOUZCHOWZCHUBZCHUGZCHUMZCITEZCITYZCLADZCLAMZCLANZCLAWZCLAYZCLODZCLOGZCLOTZCLUBZCLUEZCOALZCOATZCOCAZCOCKZCOCOZCODAZCODEZCODYZCOEDZCOILZCOINZCOKEZCOLAZCOLDZCOLTZCOMAZCOMBZCOMEZCOOKZCOOLZCOONZCOOTZCORDZCOREZCORKZCORNZCOSTZCOVEZCOWLZCRABZCRAGZCRAMZCRAYZCREWZCRIBZCROWZCRUDZCUBAZCUBEZCUFFZCULLZCULTZCUNYZCURBZCURDZCUREZCURLZCURTZCUTSZDADEZDALEZDAMEZDANAZDANEZDANGZDANKZDAREZDARKZDARNZDARTZDASHZDATAÚDATEZDAVEZDAVYZDAWNÚDAYSZDEADZDEAFZDEALZDEANZDEARZDEBTZDECKZDEEDZDEEMZDEERZDEFTZDEFYZDELLZDENTZDENYZDESKZDIALZDICEZDIEDZDIETZDIMEZDINEZDINGZDINTZDIREZDIRTZDISCZDISHZDISKZDIVEZDOCKZDOESZDOLEZDOLLZDOLTZDOMEZDONEZDOOMZDOORZDORAZDOSEZDOTEZDOUGZDOURZDOVEÚDOWNZDRABZDRAGZDRAMZDRAWZDREWZDRUBZDRUGZDRUMZDUALZDUCKZDUCTZDUELZDUETZDUKEZDULLZDUMBZDUNEZDUNKZDUSKZDUSTZDUTYZEACHZEARLZEARNZEASEZEASTZEASYZEBENÚECHOZEDDYZEDENZEDGEZEDGYZEDITZEDNAZEGANZELANZELBAZELLAÚELSEZEMILZEMITZEMMAZENDSZERICZEROSZEVENZEVERZEVILZEYEDZFACEZFACTZFADEÚFAILZFAINZFAIRZFAKEZFALLZFAMEZFANGZFARMZFASTZFATEZFAWNZFEARZFEATZFEEDZFEELZFEETZFELLZFELTZFENDZFERNZFESTZFEUDZFIEFZFIGSÚFILEZFILLZFILMZFINDZFINEZFINKZFIREZFIRMZFISHZFISKZFISTZFITSZFIVEZFLAGZFLAKZFLAMZFLATZFLAWZFLEAZFLEDZFLEWZFLITZFLOCZFLOGZFLOWZFLUBZFLUEZFOALZFOAMZFOGYZFOILZFOLDZFOLKZFONDZFONTZFOODZFOOLZFOOTZFORDZFOREZFORKZFORMZFORTZFOSSZFOULZFOURZFOWLZFRAUZFRAYZFREDZFREEZFRETZFREYZFROGZFROMZFUELZFULLZFUMEZFUNDZFUNKZFURYZFUSEZFUSSZGAFFZGAGEZGAILZGAINZGAITZGALAZGALEZGALLZGALTZGAMEZGANGZGARBZGARYZGASHZGATEZGAULZGAURZGAVEZGAWKZGEARZGELDZGENEZGENTZGERMZGETSZGIBEZGIFTZGILDZGILLZGILTZGINAZGIRDZGIRLZGISTZGIVEZGLADZGLEEZGLENZGLIBZGLOBZGLOMZGLOWZGLUEZGLUMZGLUTZGOADZGOALZGOATZGOERZGOESZGOLDZGOLFÚGONEZGONGZGOODZGOOFZGOREZGORYZGOSHZGOUTZGOWNZGRABZGRADZGRAYZGREGZGREWÚGREYZGRIDZGRIMZGRINZGRITZGROWZGRUBZGULFZGULLZGUNKZGURUZGUSHZGUSTZGWENZGWYNZHAAGZHAASZHACKZHAILZHAIRZHALEZHALFZHALLZHALOZHALTZHANDZHANGZHANKZHANSZHARDZHARKZHARMZHARTÚHASHZHASTZHATEZHATHZHAULZHAVEZHAWKZHAYSÚHEADZHEALZHEARZHEATZHEBEZHECKZHEEDZHEELZHEFTZHELDZHELLZHELMZHERBZHERDZHEREZHEROZHERSZHESSZHEWNZHICKZHIDEZHIGHZHIKEZHILLZHILTZHINDZHINTZHIREZHISSZHIVEZHOBOZHOCKZHOFFZHOLDZHOLEZHOLMZHOLTÚHOMEZHONEZHONKZHOODZHOOFZHOOKZHOOTZHORNZHOSEZHOSTZHOURZHOVEZHOWEZHOWLZHOYTZHUCKZHUEDZHUFFZHUGEZHUGHZHUGOZHULKZHULLZHUNKZHUNTZHURDZHURLZHURTZHUSHZHYDEZHYMNZIBISZICONZIDEAZIDLEZIFFYZINCAZINCHZINTOZIONSZIOTAZIOWAZIRISZIRMAZIRONZISLEZITCHZITEMZIVANZJACKZJADEZJAILZJAKEZJANEZJAVAZJEANZJEFFZJERKZJESSZJESTZJIBEZJILLZJILTZJIVEZJOANZJOBSZJOCKZJOELZJOEYZJOHNZJOINZJOKEZJOLTZJOVEZJUDDZJUDEZJUDOZJUDYZJUJUZJUKEZJULYZJUNEZJUNKZJUNOZJURYZJUSTZJUTEZKAHNZKALEZKANEZKANTZKARLZKATEZKEELZKEENZKENOZKENTZKERNZKERRZKEYSZKICKZKILLZKINDZKINGZKIRKZKISSZKITEZKLANZKNEEZKNEWZKNITZKNOBZKNOTZKNOWZKOCHZKONGZKUDOZKURDZKURTZKYLEZLACEZLACKZLACYZLADYZLAIDZLAINZLAIRZLAKEZLAMBZLAMEZLANDZLANEÚLANGZLARDZLARKZLASSZLASTZLATEZLAUDZLAVAZLAWNZLAWSZLAYSZLEADZLEAFZLEAKZLEANZLEARZLEEKZLEERÚLEFTZLENDZLENSZLENTZLEONZLESKÚLESSZLESTZLETSZLIARZLICEZLICKZLIEDZLIENZLIESZLIEUZLIFEZLIFTZLIKEZLILAZLILTZLILYZLIMAZLIMBZLIMEZLINDZLINEZLINKZLINTZLIONZLISAÚLISTZLIVEZLOADZLOAFZLOAMZLOANZLOCKZLOFTZLOGEZLOISZLOLAZLONEÚLONGZLOOKZLOONZLOOTZLORDZLOREZLOSEZLOSSZLOSTZLOUDZLOVEZLOWEZLUCKZLUCYZLUGEZLUKEZLULUZLUNDZLUNGZLURAZLUREZLURKZLUSHZLUSTZLYLEZLYNNZLYONZLYRAZMACEZMADEZMAGIZMAIDZMAILZMAINZMAKEZMALEZMALIZMALLZMALTZMANAZMANNZMANYZMARCZMAREÚMARKZMARSZMARTZMARYZMASHÚMASKZMASSZMASTZMATEZMATHZMAULZMAYOZMEADZMEALZMEANZMEATZMEEKZMEETZMELDZMELTZMEMOZMENDZMENUZMERTZMESHZMESSZMICEZMIKEZMILDZMILEZMILKZMILLZMILTZMIMIZMINDZMINEZMINIZMINKZMINTZMIREÚMISSZMISTZMITEZMITTZMOANZMOATZMOCKZMODEZMOLDZMOLEZMOLLZMOLTZMONAZMONKZMONTZMOODZMOONZMOORZMOOTZMOREZMORNZMORTZMOSSZMOSTZMOTHZMOVEZMUCHZMUCKZMUDDZMUFFZMULEZMULLZMURKZMUSHZMUSTZMUTEZMUTTZMYRAZMYTHZNAGYZNAILZNAIRÚNAMEZNARYZNASHZNAVEZNAVYZNEALZNEARZNEATZNECKZNEEDZNEILZNELLZNEONZNEROZNESSZNESTZNEWSZNEWTZNIBSZNICEZNICKZNILEZNINAZNINEZNOAHZNODEZNOELZNOLLÚNONEZNOOKZNOONZNORMZNOSEÚNOTEZNOUNZNOVAZNUDEZNULLZNUMBZOATHZOBEYZOBOEÚODINZOHIOZOILYZOINTÚOKAYZOLAFZOLDYZOLGAZOLINZOMANZOMENZOMITZONCEZONESZONLYZONTOZONUSZORALZORGYZOSLOZOTISZOTTOZOUCHZOUSTZOUTSZOVALZOVENZOVERZOWLYZOWNSZQUADZQUITZQUODZRACEZRACKZRACYZRAFTZRAGEZRAIDZRAILZRAINZRAKEZRANKZRANTZRAREZRASHZRATEZRAVEZRAYSÚREADZREALZREAMZREARZRECKZREEDZREEFZREEKZREELZREIDZREINZRENAZRENDZRENTZRESTZRICEZRICHZRICKZRIDEZRIFTZRILLZRIMEZRINGZRINKZRISEZRISKZRITEZROADZROAMZROARZROBEZROCKZRODEZROILZROLLZROMEZROODZROOFZROOKZROOMÚROOTZROSAZROSEZROSSZROSYZROTHZROUTZROVEZROWEZROWSZRUBEZRUBYZRUDEZRUDYZRUINZRULEZRUNGZRUNSZRUNTZRUSEZRUSHZRUSKZRUSSZRUSTZRUTHZSACKZSAFEZSAGEZSAIDZSAILZSALEZSALKZSALTZSAMEZSANDZSANEZSANGZSANKZSARAZSAULZSAVEZSAYSZSCANZSCARZSCATZSCOTZSEALZSEAMZSEARZSEATZSEEDZSEEKZSEEMZSEENZSEESZSELFZSELLZSENDZSENTZSETSZSEWNZSHAGZSHAMZSHAWZSHAYZSHEDZSHIMZSHINZSHODZSHOEZSHOTZSHOWZSHUNZSHUTZSICKZSIDEZSIFTZSIGHZSIGNZSILKZSILLZSILOZSILTZSINEZSINGZSINKZSIREÚSITEZSITSZSITUZSKATZSKEWZSKIDZSKIMZSKINZSKITZSLABZSLAMZSLATZSLAYZSLEDZSLEWZSLIDZSLIMZSLITZSLOBZSLOGZSLOTZSLOWZSLUGZSLUMZSLURZSMOGZSMUGZSNAGZSNOBZSNOWZSNUBZSNUGZSOAKZSOARZSOCKZSODAZSOFAZSOFTZSOILZSOLDZSOMEZSONGZSOONZSOOTZSOREZSORTZSOULZSOURZSOWNZSTABZSTAGZSTANÚSTARZSTAYZSTEMZSTEWZSTIRZSTOWZSTUBZSTUNZSUCHZSUDSZSUITZSULKZSUMSZSUNGZSUNKZSUREZSURFZSWABZSWAGZSWAMZSWANZSWATZSWAYZSWIMZSWUMZTACKZTACTZTAILZTAKEZTALEZTALKZTALLZTANKZTASKZTATEZTAUTZTEALZTEAMZTEARZTECHZTEEMZTEENZTEETZTELLZTENDZTENTÚTERMZTERNZTESSÚTESTZTHANZTHATZTHEEZTHEMZTHENZTHEYZTHINZTHISZTHUDZTHUGÚTICKZTIDEZTIDYZTIEDZTIERZTILEZTILLZTILTZTIMEZTINAZTINEZTINTZTINYZTIREZTOADZTOGOZTOILZTOLDZTOLLZTONEZTONGZTONYZTOOKZTOOLZTOOTZTOREZTORNZTOTEZTOURZTOUTZTOWNZTRAGZTRAMZTRAYZTREEZTREKZTRIGZTRIMZTRIOZTRODZTROTZTROYÚTRUEZTUBAZTUBEZTUCKZTUFTZTUNAZTUNEZTUNGZTURFZTURNZTUSKZTWIGZTWINZTWITZULANZUNITZURGEZUSEDÚUSERZUSESZUTAHZVAILZVAINZVALEZVARYZVASEZVASTZVEALZVEDAZVEILZVEINZVENDZVENTZVERBZVERYZVETOZVICEZVIEWZVINEZVISEZVOIDZVOLTZVOTEZWACKZWADEZWAGEZWAILZWAITZWAKEZWALEZWALKZWALLZWALTZWANDZWANEZWANGZWANTZWARDZWARMÚWARNZWARTZWASHZWASTZWATSZWATTZWAVEZWAVYZWAYSZWEAKZWEALZWEANZWEARZWEEDZWEEKZWEIRZWELDZWELLZWELTZWENTZWEREZWERTZWESTZWHAMZWHATZWHEEZWHENZWHETZWHOAZWHOMZWICKZWIFEZWILDZWILLZWINDZWINEZWINGZWINKZWINOZWIREZWISEZWISHZWITHZWOLFZWONTZWOODZWOOLZWORDZWOREZWORKZWORMZWORNZWOVEZWRITZWYNNZYALEÚYANGZYANKZYARDZYARNZYAWLZYAWNZYEAHZYEARZYELLZYOGAZYOKE)Ú
__future__r   ÚbinasciiZCryptodome.Util.py3compatr   r   r   r   r'   r6   rC   r.   r   r   r   r   Ú<module>   s:   &ÿÿÿÿÿÿþþþþ
#5