| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785 | /*! @author Toru Nagashima <https://github.com/mysticatea> */var ast = Object.freeze({});function assert(condition, message) {    if (!condition) {        throw new Error(message || "AssertionError");    }}function last(xs) {    return xs.length === 0 ? undefined : xs[xs.length - 1];}const legacyImpl = {    at(s, end, i) {        return i < end ? s.charCodeAt(i) : -1;    },    width(c) {        return 1;    },};const unicodeImpl = {    at(s, end, i) {        return i < end ? s.codePointAt(i) : -1;    },    width(c) {        return c > 0xffff ? 2 : 1;    },};class Reader {    constructor() {        this._impl = legacyImpl;        this._s = "";        this._i = 0;        this._end = 0;        this._cp1 = -1;        this._w1 = 1;        this._cp2 = -1;        this._w2 = 1;        this._cp3 = -1;        this._w3 = 1;        this._cp4 = -1;    }    get source() {        return this._s;    }    get index() {        return this._i;    }    get currentCodePoint() {        return this._cp1;    }    get nextCodePoint() {        return this._cp2;    }    get nextCodePoint2() {        return this._cp3;    }    get nextCodePoint3() {        return this._cp4;    }    reset(source, start, end, uFlag) {        this._impl = uFlag ? unicodeImpl : legacyImpl;        this._s = source;        this._end = end;        this.rewind(start);    }    rewind(index) {        const impl = this._impl;        this._i = index;        this._cp1 = impl.at(this._s, this._end, index);        this._w1 = impl.width(this._cp1);        this._cp2 = impl.at(this._s, this._end, index + this._w1);        this._w2 = impl.width(this._cp2);        this._cp3 = impl.at(this._s, this._end, index + this._w1 + this._w2);        this._w3 = impl.width(this._cp3);        this._cp4 = impl.at(this._s, this._end, index + this._w1 + this._w2 + this._w3);    }    advance() {        if (this._cp1 !== -1) {            const impl = this._impl;            this._i += this._w1;            this._cp1 = this._cp2;            this._w1 = this._w2;            this._cp2 = this._cp3;            this._w2 = impl.width(this._cp2);            this._cp3 = this._cp4;            this._w3 = impl.width(this._cp3);            this._cp4 = impl.at(this._s, this._end, this._i + this._w1 + this._w2 + this._w3);        }    }    eat(cp) {        if (this._cp1 === cp) {            this.advance();            return true;        }        return false;    }    eat2(cp1, cp2) {        if (this._cp1 === cp1 && this._cp2 === cp2) {            this.advance();            this.advance();            return true;        }        return false;    }    eat3(cp1, cp2, cp3) {        if (this._cp1 === cp1 && this._cp2 === cp2 && this._cp3 === cp3) {            this.advance();            this.advance();            this.advance();            return true;        }        return false;    }}class RegExpSyntaxError extends SyntaxError {    constructor(source, uFlag, index, message) {        if (source) {            if (source[0] !== "/") {                source = `/${source}/${uFlag ? "u" : ""}`;            }            source = `: ${source}`;        }        super(`Invalid regular expression${source}: ${message}`);        this.index = index;    }}function isIdStart(cp) {    if (cp < 0x41)        return false;    if (cp < 0x5b)        return true;    if (cp < 0x61)        return false;    if (cp < 0x7b)        return true;    return isLargeIdStart(cp);}function isIdContinue(cp) {    if (cp < 0x30)        return false;    if (cp < 0x3a)        return true;    if (cp < 0x41)        return false;    if (cp < 0x5b)        return true;    if (cp === 0x5f)        return true;    if (cp < 0x61)        return false;    if (cp < 0x7b)        return true;    return isLargeIdStart(cp) || isLargeIdContinue(cp);}function isLargeIdStart(cp) {    if (cp < 0x303c) {        if (cp < 0xeaa) {            if (cp < 0xa2a) {                if (cp < 0x6d5) {                    if (cp < 0x37a) {                        if (cp < 0x294) {                            if (cp < 0xf8) {                                if (cp === 0xaa)                                    return true;                                if (cp === 0xb5)                                    return true;                                if (cp === 0xba)                                    return true;                                if (cp < 0xc0)                                    return false;                                if (cp < 0xd7)                                    return true;                                if (cp < 0xd8)                                    return false;                                if (cp < 0xf7)                                    return true;                                return false;                            }                            if (cp < 0x1bb)                                return true;                            if (cp === 0x1bb)                                return true;                            if (cp < 0x1bc)                                return false;                            if (cp < 0x1c0)                                return true;                            if (cp < 0x1c0)                                return false;                            if (cp < 0x1c4)                                return true;                            if (cp < 0x1c4)                                return false;                            if (cp < 0x294)                                return true;                            return false;                        }                        if (cp < 0x2ec) {                            if (cp === 0x294)                                return true;                            if (cp < 0x295)                                return false;                            if (cp < 0x2b0)                                return true;                            if (cp < 0x2b0)                                return false;                            if (cp < 0x2c2)                                return true;                            if (cp < 0x2c6)                                return false;                            if (cp < 0x2d2)                                return true;                            if (cp < 0x2e0)                                return false;                            if (cp < 0x2e5)                                return true;                            return false;                        }                        if (cp === 0x2ec)                            return true;                        if (cp === 0x2ee)                            return true;                        if (cp < 0x370)                            return false;                        if (cp < 0x374)                            return true;                        if (cp === 0x374)                            return true;                        if (cp < 0x376)                            return false;                        if (cp < 0x378)                            return true;                        return false;                    }                    if (cp < 0x531) {                        if (cp < 0x38c) {                            if (cp === 0x37a)                                return true;                            if (cp < 0x37b)                                return false;                            if (cp < 0x37e)                                return true;                            if (cp === 0x37f)                                return true;                            if (cp === 0x386)                                return true;                            if (cp < 0x388)                                return false;                            if (cp < 0x38b)                                return true;                            return false;                        }                        if (cp === 0x38c)                            return true;                        if (cp < 0x38e)                            return false;                        if (cp < 0x3a2)                            return true;                        if (cp < 0x3a3)                            return false;                        if (cp < 0x3f6)                            return true;                        if (cp < 0x3f7)                            return false;                        if (cp < 0x482)                            return true;                        if (cp < 0x48a)                            return false;                        if (cp < 0x530)                            return true;                        return false;                    }                    if (cp < 0x620) {                        if (cp < 0x531)                            return false;                        if (cp < 0x557)                            return true;                        if (cp === 0x559)                            return true;                        if (cp < 0x561)                            return false;                        if (cp < 0x588)                            return true;                        if (cp < 0x5d0)                            return false;                        if (cp < 0x5eb)                            return true;                        if (cp < 0x5f0)                            return false;                        if (cp < 0x5f3)                            return true;                        return false;                    }                    if (cp < 0x640)                        return true;                    if (cp === 0x640)                        return true;                    if (cp < 0x641)                        return false;                    if (cp < 0x64b)                        return true;                    if (cp < 0x66e)                        return false;                    if (cp < 0x670)                        return true;                    if (cp < 0x671)                        return false;                    if (cp < 0x6d4)                        return true;                    return false;                }                if (cp < 0x904) {                    if (cp < 0x7f4) {                        if (cp < 0x710) {                            if (cp === 0x6d5)                                return true;                            if (cp < 0x6e5)                                return false;                            if (cp < 0x6e7)                                return true;                            if (cp < 0x6ee)                                return false;                            if (cp < 0x6f0)                                return true;                            if (cp < 0x6fa)                                return false;                            if (cp < 0x6fd)                                return true;                            if (cp === 0x6ff)                                return true;                            return false;                        }                        if (cp === 0x710)                            return true;                        if (cp < 0x712)                            return false;                        if (cp < 0x730)                            return true;                        if (cp < 0x74d)                            return false;                        if (cp < 0x7a6)                            return true;                        if (cp === 0x7b1)                            return true;                        if (cp < 0x7ca)                            return false;                        if (cp < 0x7eb)                            return true;                        return false;                    }                    if (cp < 0x828) {                        if (cp < 0x7f4)                            return false;                        if (cp < 0x7f6)                            return true;                        if (cp === 0x7fa)                            return true;                        if (cp < 0x800)                            return false;                        if (cp < 0x816)                            return true;                        if (cp === 0x81a)                            return true;                        if (cp === 0x824)                            return true;                        return false;                    }                    if (cp === 0x828)                        return true;                    if (cp < 0x840)                        return false;                    if (cp < 0x859)                        return true;                    if (cp < 0x860)                        return false;                    if (cp < 0x86b)                        return true;                    if (cp < 0x8a0)                        return false;                    if (cp < 0x8b5)                        return true;                    if (cp < 0x8b6)                        return false;                    if (cp < 0x8be)                        return true;                    return false;                }                if (cp < 0x9b2) {                    if (cp < 0x972) {                        if (cp < 0x904)                            return false;                        if (cp < 0x93a)                            return true;                        if (cp === 0x93d)                            return true;                        if (cp === 0x950)                            return true;                        if (cp < 0x958)                            return false;                        if (cp < 0x962)                            return true;                        if (cp === 0x971)                            return true;                        return false;                    }                    if (cp < 0x981)                        return true;                    if (cp < 0x985)                        return false;                    if (cp < 0x98d)                        return true;                    if (cp < 0x98f)                        return false;                    if (cp < 0x991)                        return true;                    if (cp < 0x993)                        return false;                    if (cp < 0x9a9)                        return true;                    if (cp < 0x9aa)                        return false;                    if (cp < 0x9b1)                        return true;                    return false;                }                if (cp < 0x9df) {                    if (cp === 0x9b2)                        return true;                    if (cp < 0x9b6)                        return false;                    if (cp < 0x9ba)                        return true;                    if (cp === 0x9bd)                        return true;                    if (cp === 0x9ce)                        return true;                    if (cp < 0x9dc)                        return false;                    if (cp < 0x9de)                        return true;                    return false;                }                if (cp < 0x9e2)                    return true;                if (cp < 0x9f0)                    return false;                if (cp < 0x9f2)                    return true;                if (cp === 0x9fc)                    return true;                if (cp < 0xa05)                    return false;                if (cp < 0xa0b)                    return true;                if (cp < 0xa0f)                    return false;                if (cp < 0xa11)                    return true;                if (cp < 0xa13)                    return false;                if (cp < 0xa29)                    return true;                return false;            }            if (cp < 0xc2a) {                if (cp < 0xb2a) {                    if (cp < 0xaaa) {                        if (cp < 0xa5e) {                            if (cp < 0xa2a)                                return false;                            if (cp < 0xa31)                                return true;                            if (cp < 0xa32)                                return false;                            if (cp < 0xa34)                                return true;                            if (cp < 0xa35)                                return false;                            if (cp < 0xa37)                                return true;                            if (cp < 0xa38)                                return false;                            if (cp < 0xa3a)                                return true;                            if (cp < 0xa59)                                return false;                            if (cp < 0xa5d)                                return true;                            return false;                        }                        if (cp === 0xa5e)                            return true;                        if (cp < 0xa72)                            return false;                        if (cp < 0xa75)                            return true;                        if (cp < 0xa85)                            return false;                        if (cp < 0xa8e)                            return true;                        if (cp < 0xa8f)                            return false;                        if (cp < 0xa92)                            return true;                        if (cp < 0xa93)                            return false;                        if (cp < 0xaa9)                            return true;                        return false;                    }                    if (cp < 0xae0) {                        if (cp < 0xaaa)                            return false;                        if (cp < 0xab1)                            return true;                        if (cp < 0xab2)                            return false;                        if (cp < 0xab4)                            return true;                        if (cp < 0xab5)                            return false;                        if (cp < 0xaba)                            return true;                        if (cp === 0xabd)                            return true;                        if (cp === 0xad0)                            return true;                        return false;                    }                    if (cp < 0xae2)                        return true;                    if (cp === 0xaf9)                        return true;                    if (cp < 0xb05)                        return false;                    if (cp < 0xb0d)                        return true;                    if (cp < 0xb0f)                        return false;                    if (cp < 0xb11)                        return true;                    if (cp < 0xb13)                        return false;                    if (cp < 0xb29)                        return true;                    return false;                }                if (cp < 0xb92) {                    if (cp < 0xb5f) {                        if (cp < 0xb2a)                            return false;                        if (cp < 0xb31)                            return true;                        if (cp < 0xb32)                            return false;                        if (cp < 0xb34)                            return true;                        if (cp < 0xb35)                            return false;                        if (cp < 0xb3a)                            return true;                        if (cp === 0xb3d)                            return true;                        if (cp < 0xb5c)                            return false;                        if (cp < 0xb5e)                            return true;                        return false;                    }                    if (cp < 0xb62)                        return true;                    if (cp === 0xb71)                        return true;                    if (cp === 0xb83)                        return true;                    if (cp < 0xb85)                        return false;                    if (cp < 0xb8b)                        return true;                    if (cp < 0xb8e)                        return false;                    if (cp < 0xb91)                        return true;                    return false;                }                if (cp < 0xba8) {                    if (cp < 0xb92)                        return false;                    if (cp < 0xb96)                        return true;                    if (cp < 0xb99)                        return false;                    if (cp < 0xb9b)                        return true;                    if (cp === 0xb9c)                        return true;                    if (cp < 0xb9e)                        return false;                    if (cp < 0xba0)                        return true;                    if (cp < 0xba3)                        return false;                    if (cp < 0xba5)                        return true;                    return false;                }                if (cp < 0xbab)                    return true;                if (cp < 0xbae)                    return false;                if (cp < 0xbba)                    return true;                if (cp === 0xbd0)                    return true;                if (cp < 0xc05)                    return false;                if (cp < 0xc0d)                    return true;                if (cp < 0xc0e)                    return false;                if (cp < 0xc11)                    return true;                if (cp < 0xc12)                    return false;                if (cp < 0xc29)                    return true;                return false;            }            if (cp < 0xd5f) {                if (cp < 0xcbd) {                    if (cp < 0xc85) {                        if (cp < 0xc2a)                            return false;                        if (cp < 0xc3a)                            return true;                        if (cp === 0xc3d)                            return true;                        if (cp < 0xc58)                            return false;                        if (cp < 0xc5b)                            return true;                        if (cp < 0xc60)                            return false;                        if (cp < 0xc62)                            return true;                        if (cp === 0xc80)                            return true;                        return false;                    }                    if (cp < 0xc8d)                        return true;                    if (cp < 0xc8e)                        return false;                    if (cp < 0xc91)                        return true;                    if (cp < 0xc92)                        return false;                    if (cp < 0xca9)                        return true;                    if (cp < 0xcaa)                        return false;                    if (cp < 0xcb4)                        return true;                    if (cp < 0xcb5)                        return false;                    if (cp < 0xcba)                        return true;                    return false;                }                if (cp < 0xd0e) {                    if (cp === 0xcbd)                        return true;                    if (cp === 0xcde)                        return true;                    if (cp < 0xce0)                        return false;                    if (cp < 0xce2)                        return true;                    if (cp < 0xcf1)                        return false;                    if (cp < 0xcf3)                        return true;                    if (cp < 0xd05)                        return false;                    if (cp < 0xd0d)                        return true;                    return false;                }                if (cp < 0xd11)                    return true;                if (cp < 0xd12)                    return false;                if (cp < 0xd3b)                    return true;                if (cp === 0xd3d)                    return true;                if (cp === 0xd4e)                    return true;                if (cp < 0xd54)                    return false;                if (cp < 0xd57)                    return true;                return false;            }            if (cp < 0xe46) {                if (cp < 0xdbd) {                    if (cp < 0xd5f)                        return false;                    if (cp < 0xd62)                        return true;                    if (cp < 0xd7a)                        return false;                    if (cp < 0xd80)                        return true;                    if (cp < 0xd85)                        return false;                    if (cp < 0xd97)                        return true;                    if (cp < 0xd9a)                        return false;                    if (cp < 0xdb2)                        return true;                    if (cp < 0xdb3)                        return false;                    if (cp < 0xdbc)                        return true;                    return false;                }                if (cp === 0xdbd)                    return true;                if (cp < 0xdc0)                    return false;                if (cp < 0xdc7)                    return true;                if (cp < 0xe01)                    return false;                if (cp < 0xe31)                    return true;                if (cp < 0xe32)                    return false;                if (cp < 0xe34)                    return true;                if (cp < 0xe40)                    return false;                if (cp < 0xe46)                    return true;                return false;            }            if (cp < 0xe8d) {                if (cp === 0xe46)                    return true;                if (cp < 0xe81)                    return false;                if (cp < 0xe83)                    return true;                if (cp === 0xe84)                    return true;                if (cp < 0xe87)                    return false;                if (cp < 0xe89)                    return true;                if (cp === 0xe8a)                    return true;                return false;            }            if (cp === 0xe8d)                return true;            if (cp < 0xe94)                return false;            if (cp < 0xe98)                return true;            if (cp < 0xe99)                return false;            if (cp < 0xea0)                return true;            if (cp < 0xea1)                return false;            if (cp < 0xea4)                return true;            if (cp === 0xea5)                return true;            if (cp === 0xea7)                return true;            return false;        }        if (cp < 0x1c5a) {            if (cp < 0x1380) {                if (cp < 0x10a0) {                    if (cp < 0xf88) {                        if (cp < 0xec6) {                            if (cp < 0xeaa)                                return false;                            if (cp < 0xeac)                                return true;                            if (cp < 0xead)                                return false;                            if (cp < 0xeb1)                                return true;                            if (cp < 0xeb2)                                return false;                            if (cp < 0xeb4)                                return true;                            if (cp === 0xebd)                                return true;                            if (cp < 0xec0)                                return false;                            if (cp < 0xec5)                                return true;                            return false;                        }                        if (cp === 0xec6)                            return true;                        if (cp < 0xedc)                            return false;                        if (cp < 0xee0)                            return true;                        if (cp === 0xf00)                            return true;                        if (cp < 0xf40)                            return false;                        if (cp < 0xf48)                            return true;                        if (cp < 0xf49)                            return false;                        if (cp < 0xf6d)                            return true;                        return false;                    }                    if (cp < 0x1061) {                        if (cp < 0xf88)                            return false;                        if (cp < 0xf8d)                            return true;                        if (cp < 0x1000)                            return false;                        if (cp < 0x102b)                            return true;                        if (cp === 0x103f)                            return true;                        if (cp < 0x1050)                            return false;                        if (cp < 0x1056)                            return true;                        if (cp < 0x105a)                            return false;                        if (cp < 0x105e)                            return true;                        return false;                    }                    if (cp === 0x1061)                        return true;                    if (cp < 0x1065)                        return false;                    if (cp < 0x1067)                        return true;                    if (cp < 0x106e)                        return false;                    if (cp < 0x1071)                        return true;                    if (cp < 0x1075)                        return false;                    if (cp < 0x1082)                        return true;                    if (cp === 0x108e)                        return true;                    return false;                }                if (cp < 0x1260) {                    if (cp < 0x10fd) {                        if (cp < 0x10a0)                            return false;                        if (cp < 0x10c6)                            return true;                        if (cp === 0x10c7)                            return true;                        if (cp === 0x10cd)                            return true;                        if (cp < 0x10d0)                            return false;                        if (cp < 0x10fb)                            return true;                        if (cp === 0x10fc)                            return true;                        return false;                    }                    if (cp < 0x1249)                        return true;                    if (cp < 0x124a)                        return false;                    if (cp < 0x124e)                        return true;                    if (cp < 0x1250)                        return false;                    if (cp < 0x1257)                        return true;                    if (cp === 0x1258)                        return true;                    if (cp < 0x125a)                        return false;                    if (cp < 0x125e)                        return true;                    return false;                }                if (cp < 0x12c0) {                    if (cp < 0x1260)                        return false;                    if (cp < 0x1289)                        return true;                    if (cp < 0x128a)                        return false;                    if (cp < 0x128e)                        return true;                    if (cp < 0x1290)                        return false;                    if (cp < 0x12b1)                        return true;                    if (cp < 0x12b2)                        return false;                    if (cp < 0x12b6)                        return true;                    if (cp < 0x12b8)                        return false;                    if (cp < 0x12bf)                        return true;                    return false;                }                if (cp === 0x12c0)                    return true;                if (cp < 0x12c2)                    return false;                if (cp < 0x12c6)                    return true;                if (cp < 0x12c8)                    return false;                if (cp < 0x12d7)                    return true;                if (cp < 0x12d8)                    return false;                if (cp < 0x1311)                    return true;                if (cp < 0x1312)                    return false;                if (cp < 0x1316)                    return true;                if (cp < 0x1318)                    return false;                if (cp < 0x135b)                    return true;                return false;            }            if (cp < 0x1844) {                if (cp < 0x170e) {                    if (cp < 0x1681) {                        if (cp < 0x1380)                            return false;                        if (cp < 0x1390)                            return true;                        if (cp < 0x13a0)                            return false;                        if (cp < 0x13f6)                            return true;                        if (cp < 0x13f8)                            return false;                        if (cp < 0x13fe)                            return true;                        if (cp < 0x1401)                            return false;                        if (cp < 0x166d)                            return true;                        if (cp < 0x166f)                            return false;                        if (cp < 0x1680)                            return true;                        return false;                    }                    if (cp < 0x169b)                        return true;                    if (cp < 0x16a0)                        return false;                    if (cp < 0x16eb)                        return true;                    if (cp < 0x16ee)                        return false;                    if (cp < 0x16f1)                        return true;                    if (cp < 0x16f1)                        return false;                    if (cp < 0x16f9)                        return true;                    if (cp < 0x1700)                        return false;                    if (cp < 0x170d)                        return true;                    return false;                }                if (cp < 0x1780) {                    if (cp < 0x170e)                        return false;                    if (cp < 0x1712)                        return true;                    if (cp < 0x1720)                        return false;                    if (cp < 0x1732)                        return true;                    if (cp < 0x1740)                        return false;                    if (cp < 0x1752)                        return true;                    if (cp < 0x1760)                        return false;                    if (cp < 0x176d)                        return true;                    if (cp < 0x176e)                        return false;                    if (cp < 0x1771)                        return true;                    return false;                }                if (cp < 0x17b4)                    return true;                if (cp === 0x17d7)                    return true;                if (cp === 0x17dc)                    return true;                if (cp < 0x1820)                    return false;                if (cp < 0x1843)                    return true;                if (cp === 0x1843)                    return true;                return false;            }            if (cp < 0x19b0) {                if (cp < 0x18b0) {                    if (cp < 0x1844)                        return false;                    if (cp < 0x1878)                        return true;                    if (cp < 0x1880)                        return false;                    if (cp < 0x1885)                        return true;                    if (cp < 0x1885)                        return false;                    if (cp < 0x1887)                        return true;                    if (cp < 0x1887)                        return false;                    if (cp < 0x18a9)                        return true;                    if (cp === 0x18aa)                        return true;                    return false;                }                if (cp < 0x18f6)                    return true;                if (cp < 0x1900)                    return false;                if (cp < 0x191f)                    return true;                if (cp < 0x1950)                    return false;                if (cp < 0x196e)                    return true;                if (cp < 0x1970)                    return false;                if (cp < 0x1975)                    return true;                if (cp < 0x1980)                    return false;                if (cp < 0x19ac)                    return true;                return false;            }            if (cp < 0x1b45) {                if (cp < 0x19b0)                    return false;                if (cp < 0x19ca)                    return true;                if (cp < 0x1a00)                    return false;                if (cp < 0x1a17)                    return true;                if (cp < 0x1a20)                    return false;                if (cp < 0x1a55)                    return true;                if (cp === 0x1aa7)                    return true;                if (cp < 0x1b05)                    return false;                if (cp < 0x1b34)                    return true;                return false;            }            if (cp < 0x1b4c)                return true;            if (cp < 0x1b83)                return false;            if (cp < 0x1ba1)                return true;            if (cp < 0x1bae)                return false;            if (cp < 0x1bb0)                return true;            if (cp < 0x1bba)                return false;            if (cp < 0x1be6)                return true;            if (cp < 0x1c00)                return false;            if (cp < 0x1c24)                return true;            if (cp < 0x1c4d)                return false;            if (cp < 0x1c50)                return true;            return false;        }        if (cp < 0x2126) {            if (cp < 0x1f5f) {                if (cp < 0x1d79) {                    if (cp < 0x1cf5) {                        if (cp < 0x1c5a)                            return false;                        if (cp < 0x1c78)                            return true;                        if (cp < 0x1c78)                            return false;                        if (cp < 0x1c7e)                            return true;                        if (cp < 0x1c80)                            return false;                        if (cp < 0x1c89)                            return true;                        if (cp < 0x1ce9)                            return false;                        if (cp < 0x1ced)                            return true;                        if (cp < 0x1cee)                            return false;                        if (cp < 0x1cf2)                            return true;                        return false;                    }                    if (cp < 0x1cf7)                        return true;                    if (cp < 0x1d00)                        return false;                    if (cp < 0x1d2c)                        return true;                    if (cp < 0x1d2c)                        return false;                    if (cp < 0x1d6b)                        return true;                    if (cp < 0x1d6b)                        return false;                    if (cp < 0x1d78)                        return true;                    if (cp === 0x1d78)                        return true;                    return false;                }                if (cp < 0x1f48) {                    if (cp < 0x1d79)                        return false;                    if (cp < 0x1d9b)                        return true;                    if (cp < 0x1d9b)                        return false;                    if (cp < 0x1dc0)                        return true;                    if (cp < 0x1e00)                        return false;                    if (cp < 0x1f16)                        return true;                    if (cp < 0x1f18)                        return false;                    if (cp < 0x1f1e)                        return true;                    if (cp < 0x1f20)                        return false;                    if (cp < 0x1f46)                        return true;                    return false;                }                if (cp < 0x1f4e)                    return true;                if (cp < 0x1f50)                    return false;                if (cp < 0x1f58)                    return true;                if (cp === 0x1f59)                    return true;                if (cp === 0x1f5b)                    return true;                if (cp === 0x1f5d)                    return true;                return false;            }            if (cp < 0x1ff6) {                if (cp < 0x1fc6) {                    if (cp < 0x1f5f)                        return false;                    if (cp < 0x1f7e)                        return true;                    if (cp < 0x1f80)                        return false;                    if (cp < 0x1fb5)                        return true;                    if (cp < 0x1fb6)                        return false;                    if (cp < 0x1fbd)                        return true;                    if (cp === 0x1fbe)                        return true;                    if (cp < 0x1fc2)                        return false;                    if (cp < 0x1fc5)                        return true;                    return false;                }                if (cp < 0x1fcd)                    return true;                if (cp < 0x1fd0)                    return false;                if (cp < 0x1fd4)                    return true;                if (cp < 0x1fd6)                    return false;                if (cp < 0x1fdc)                    return true;                if (cp < 0x1fe0)                    return false;                if (cp < 0x1fed)                    return true;                if (cp < 0x1ff2)                    return false;                if (cp < 0x1ff5)                    return true;                return false;            }            if (cp < 0x2107) {                if (cp < 0x1ff6)                    return false;                if (cp < 0x1ffd)                    return true;                if (cp === 0x2071)                    return true;                if (cp === 0x207f)                    return true;                if (cp < 0x2090)                    return false;                if (cp < 0x209d)                    return true;                if (cp === 0x2102)                    return true;                return false;            }            if (cp === 0x2107)                return true;            if (cp < 0x210a)                return false;            if (cp < 0x2114)                return true;            if (cp === 0x2115)                return true;            if (cp === 0x2118)                return true;            if (cp < 0x2119)                return false;            if (cp < 0x211e)                return true;            if (cp === 0x2124)                return true;            return false;        }        if (cp < 0x2d00) {            if (cp < 0x2160) {                if (cp < 0x2135) {                    if (cp === 0x2126)                        return true;                    if (cp === 0x2128)                        return true;                    if (cp < 0x212a)                        return false;                    if (cp < 0x212e)                        return true;                    if (cp === 0x212e)                        return true;                    if (cp < 0x212f)                        return false;                    if (cp < 0x2135)                        return true;                    return false;                }                if (cp < 0x2139)                    return true;                if (cp === 0x2139)                    return true;                if (cp < 0x213c)                    return false;                if (cp < 0x2140)                    return true;                if (cp < 0x2145)                    return false;                if (cp < 0x214a)                    return true;                if (cp === 0x214e)                    return true;                return false;            }            if (cp < 0x2c60) {                if (cp < 0x2160)                    return false;                if (cp < 0x2183)                    return true;                if (cp < 0x2183)                    return false;                if (cp < 0x2185)                    return true;                if (cp < 0x2185)                    return false;                if (cp < 0x2189)                    return true;                if (cp < 0x2c00)                    return false;                if (cp < 0x2c2f)                    return true;                if (cp < 0x2c30)                    return false;                if (cp < 0x2c5f)                    return true;                return false;            }            if (cp < 0x2c7c)                return true;            if (cp < 0x2c7c)                return false;            if (cp < 0x2c7e)                return true;            if (cp < 0x2c7e)                return false;            if (cp < 0x2ce5)                return true;            if (cp < 0x2ceb)                return false;            if (cp < 0x2cef)                return true;            if (cp < 0x2cf2)                return false;            if (cp < 0x2cf4)                return true;            return false;        }        if (cp < 0x2dc0) {            if (cp < 0x2d80) {                if (cp < 0x2d00)                    return false;                if (cp < 0x2d26)                    return true;                if (cp === 0x2d27)                    return true;                if (cp === 0x2d2d)                    return true;                if (cp < 0x2d30)                    return false;                if (cp < 0x2d68)                    return true;                if (cp === 0x2d6f)                    return true;                return false;            }            if (cp < 0x2d97)                return true;            if (cp < 0x2da0)                return false;            if (cp < 0x2da7)                return true;            if (cp < 0x2da8)                return false;            if (cp < 0x2daf)                return true;            if (cp < 0x2db0)                return false;            if (cp < 0x2db7)                return true;            if (cp < 0x2db8)                return false;            if (cp < 0x2dbf)                return true;            return false;        }        if (cp < 0x3006) {            if (cp < 0x2dc0)                return false;            if (cp < 0x2dc7)                return true;            if (cp < 0x2dc8)                return false;            if (cp < 0x2dcf)                return true;            if (cp < 0x2dd0)                return false;            if (cp < 0x2dd7)                return true;            if (cp < 0x2dd8)                return false;            if (cp < 0x2ddf)                return true;            if (cp === 0x3005)                return true;            return false;        }        if (cp === 0x3006)            return true;        if (cp === 0x3007)            return true;        if (cp < 0x3021)            return false;        if (cp < 0x302a)            return true;        if (cp < 0x3031)            return false;        if (cp < 0x3036)            return true;        if (cp < 0x3038)            return false;        if (cp < 0x303b)            return true;        if (cp === 0x303b)            return true;        return false;    }    if (cp < 0x10a10) {        if (cp < 0xab28) {            if (cp < 0xa7fa) {                if (cp < 0xa60c) {                    if (cp < 0x31a0) {                        if (cp < 0x30a1) {                            if (cp === 0x303c)                                return true;                            if (cp < 0x3041)                                return false;                            if (cp < 0x3097)                                return true;                            if (cp < 0x309b)                                return false;                            if (cp < 0x309d)                                return true;                            if (cp < 0x309d)                                return false;                            if (cp < 0x309f)                                return true;                            if (cp === 0x309f)                                return true;                            return false;                        }                        if (cp < 0x30fb)                            return true;                        if (cp < 0x30fc)                            return false;                        if (cp < 0x30ff)                            return true;                        if (cp === 0x30ff)                            return true;                        if (cp < 0x3105)                            return false;                        if (cp < 0x312f)                            return true;                        if (cp < 0x3131)                            return false;                        if (cp < 0x318f)                            return true;                        return false;                    }                    if (cp < 0xa015) {                        if (cp < 0x31a0)                            return false;                        if (cp < 0x31bb)                            return true;                        if (cp < 0x31f0)                            return false;                        if (cp < 0x3200)                            return true;                        if (cp < 0x3400)                            return false;                        if (cp < 0x4db6)                            return true;                        if (cp < 0x4e00)                            return false;                        if (cp < 0x9feb)                            return true;                        if (cp < 0xa000)                            return false;                        if (cp < 0xa015)                            return true;                        return false;                    }                    if (cp === 0xa015)                        return true;                    if (cp < 0xa016)                        return false;                    if (cp < 0xa48d)                        return true;                    if (cp < 0xa4d0)                        return false;                    if (cp < 0xa4f8)                        return true;                    if (cp < 0xa4f8)                        return false;                    if (cp < 0xa4fe)                        return true;                    if (cp < 0xa500)                        return false;                    if (cp < 0xa60c)                        return true;                    return false;                }                if (cp < 0xa717) {                    if (cp < 0xa67f) {                        if (cp === 0xa60c)                            return true;                        if (cp < 0xa610)                            return false;                        if (cp < 0xa620)                            return true;                        if (cp < 0xa62a)                            return false;                        if (cp < 0xa62c)                            return true;                        if (cp < 0xa640)                            return false;                        if (cp < 0xa66e)                            return true;                        if (cp === 0xa66e)                            return true;                        return false;                    }                    if (cp === 0xa67f)                        return true;                    if (cp < 0xa680)                        return false;                    if (cp < 0xa69c)                        return true;                    if (cp < 0xa69c)                        return false;                    if (cp < 0xa69e)                        return true;                    if (cp < 0xa6a0)                        return false;                    if (cp < 0xa6e6)                        return true;                    if (cp < 0xa6e6)                        return false;                    if (cp < 0xa6f0)                        return true;                    return false;                }                if (cp < 0xa78b) {                    if (cp < 0xa717)                        return false;                    if (cp < 0xa720)                        return true;                    if (cp < 0xa722)                        return false;                    if (cp < 0xa770)                        return true;                    if (cp === 0xa770)                        return true;                    if (cp < 0xa771)                        return false;                    if (cp < 0xa788)                        return true;                    if (cp === 0xa788)                        return true;                    return false;                }                if (cp < 0xa78f)                    return true;                if (cp === 0xa78f)                    return true;                if (cp < 0xa790)                    return false;                if (cp < 0xa7af)                    return true;                if (cp < 0xa7b0)                    return false;                if (cp < 0xa7b8)                    return true;                if (cp === 0xa7f7)                    return true;                if (cp < 0xa7f8)                    return false;                if (cp < 0xa7fa)                    return true;                return false;            }            if (cp < 0xaa40) {                if (cp < 0xa90a) {                    if (cp < 0xa840) {                        if (cp === 0xa7fa)                            return true;                        if (cp < 0xa7fb)                            return false;                        if (cp < 0xa802)                            return true;                        if (cp < 0xa803)                            return false;                        if (cp < 0xa806)                            return true;                        if (cp < 0xa807)                            return false;                        if (cp < 0xa80b)                            return true;                        if (cp < 0xa80c)                            return false;                        if (cp < 0xa823)                            return true;                        return false;                    }                    if (cp < 0xa874)                        return true;                    if (cp < 0xa882)                        return false;                    if (cp < 0xa8b4)                        return true;                    if (cp < 0xa8f2)                        return false;                    if (cp < 0xa8f8)                        return true;                    if (cp === 0xa8fb)                        return true;                    if (cp === 0xa8fd)                        return true;                    return false;                }                if (cp < 0xa9e0) {                    if (cp < 0xa90a)                        return false;                    if (cp < 0xa926)                        return true;                    if (cp < 0xa930)                        return false;                    if (cp < 0xa947)                        return true;                    if (cp < 0xa960)                        return false;                    if (cp < 0xa97d)                        return true;                    if (cp < 0xa984)                        return false;                    if (cp < 0xa9b3)                        return true;                    if (cp === 0xa9cf)                        return true;                    return false;                }                if (cp < 0xa9e5)                    return true;                if (cp === 0xa9e6)                    return true;                if (cp < 0xa9e7)                    return false;                if (cp < 0xa9f0)                    return true;                if (cp < 0xa9fa)                    return false;                if (cp < 0xa9ff)                    return true;                if (cp < 0xaa00)                    return false;                if (cp < 0xaa29)                    return true;                return false;            }            if (cp < 0xaac0) {                if (cp < 0xaa7a) {                    if (cp < 0xaa40)                        return false;                    if (cp < 0xaa43)                        return true;                    if (cp < 0xaa44)                        return false;                    if (cp < 0xaa4c)                        return true;                    if (cp < 0xaa60)                        return false;                    if (cp < 0xaa70)                        return true;                    if (cp === 0xaa70)                        return true;                    if (cp < 0xaa71)                        return false;                    if (cp < 0xaa77)                        return true;                    return false;                }                if (cp === 0xaa7a)                    return true;                if (cp < 0xaa7e)                    return false;                if (cp < 0xaab0)                    return true;                if (cp === 0xaab1)                    return true;                if (cp < 0xaab5)                    return false;                if (cp < 0xaab7)                    return true;                if (cp < 0xaab9)                    return false;                if (cp < 0xaabe)                    return true;                return false;            }            if (cp < 0xaaf2) {                if (cp === 0xaac0)                    return true;                if (cp === 0xaac2)                    return true;                if (cp < 0xaadb)                    return false;                if (cp < 0xaadd)                    return true;                if (cp === 0xaadd)                    return true;                if (cp < 0xaae0)                    return false;                if (cp < 0xaaeb)                    return true;                return false;            }            if (cp === 0xaaf2)                return true;            if (cp < 0xaaf3)                return false;            if (cp < 0xaaf5)                return true;            if (cp < 0xab01)                return false;            if (cp < 0xab07)                return true;            if (cp < 0xab09)                return false;            if (cp < 0xab0f)                return true;            if (cp < 0xab11)                return false;            if (cp < 0xab17)                return true;            if (cp < 0xab20)                return false;            if (cp < 0xab27)                return true;            return false;        }        if (cp < 0x1003c) {            if (cp < 0xfb46) {                if (cp < 0xfa70) {                    if (cp < 0xabc0) {                        if (cp < 0xab28)                            return false;                        if (cp < 0xab2f)                            return true;                        if (cp < 0xab30)                            return false;                        if (cp < 0xab5b)                            return true;                        if (cp < 0xab5c)                            return false;                        if (cp < 0xab60)                            return true;                        if (cp < 0xab60)                            return false;                        if (cp < 0xab66)                            return true;                        if (cp < 0xab70)                            return false;                        if (cp < 0xabc0)                            return true;                        return false;                    }                    if (cp < 0xabe3)                        return true;                    if (cp < 0xac00)                        return false;                    if (cp < 0xd7a4)                        return true;                    if (cp < 0xd7b0)                        return false;                    if (cp < 0xd7c7)                        return true;                    if (cp < 0xd7cb)                        return false;                    if (cp < 0xd7fc)                        return true;                    if (cp < 0xf900)                        return false;                    if (cp < 0xfa6e)                        return true;                    return false;                }                if (cp < 0xfb2a) {                    if (cp < 0xfa70)                        return false;                    if (cp < 0xfada)                        return true;                    if (cp < 0xfb00)                        return false;                    if (cp < 0xfb07)                        return true;                    if (cp < 0xfb13)                        return false;                    if (cp < 0xfb18)                        return true;                    if (cp === 0xfb1d)                        return true;                    if (cp < 0xfb1f)                        return false;                    if (cp < 0xfb29)                        return true;                    return false;                }                if (cp < 0xfb37)                    return true;                if (cp < 0xfb38)                    return false;                if (cp < 0xfb3d)                    return true;                if (cp === 0xfb3e)                    return true;                if (cp < 0xfb40)                    return false;                if (cp < 0xfb42)                    return true;                if (cp < 0xfb43)                    return false;                if (cp < 0xfb45)                    return true;                return false;            }            if (cp < 0xff70) {                if (cp < 0xfe70) {                    if (cp < 0xfb46)                        return false;                    if (cp < 0xfbb2)                        return true;                    if (cp < 0xfbd3)                        return false;                    if (cp < 0xfd3e)                        return true;                    if (cp < 0xfd50)                        return false;                    if (cp < 0xfd90)                        return true;                    if (cp < 0xfd92)                        return false;                    if (cp < 0xfdc8)                        return true;                    if (cp < 0xfdf0)                        return false;                    if (cp < 0xfdfc)                        return true;                    return false;                }                if (cp < 0xfe75)                    return true;                if (cp < 0xfe76)                    return false;                if (cp < 0xfefd)                    return true;                if (cp < 0xff21)                    return false;                if (cp < 0xff3b)                    return true;                if (cp < 0xff41)                    return false;                if (cp < 0xff5b)                    return true;                if (cp < 0xff66)                    return false;                if (cp < 0xff70)                    return true;                return false;            }            if (cp < 0xffca) {                if (cp === 0xff70)                    return true;                if (cp < 0xff71)                    return false;                if (cp < 0xff9e)                    return true;                if (cp < 0xff9e)                    return false;                if (cp < 0xffa0)                    return true;                if (cp < 0xffa0)                    return false;                if (cp < 0xffbf)                    return true;                if (cp < 0xffc2)                    return false;                if (cp < 0xffc8)                    return true;                return false;            }            if (cp < 0xffd0)                return true;            if (cp < 0xffd2)                return false;            if (cp < 0xffd8)                return true;            if (cp < 0xffda)                return false;            if (cp < 0xffdd)                return true;            if (cp < 0x10000)                return false;            if (cp < 0x1000c)                return true;            if (cp < 0x1000d)                return false;            if (cp < 0x10027)                return true;            if (cp < 0x10028)                return false;            if (cp < 0x1003b)                return true;            return false;        }        if (cp < 0x104d8) {            if (cp < 0x10342) {                if (cp < 0x10280) {                    if (cp < 0x1003c)                        return false;                    if (cp < 0x1003e)                        return true;                    if (cp < 0x1003f)                        return false;                    if (cp < 0x1004e)                        return true;                    if (cp < 0x10050)                        return false;                    if (cp < 0x1005e)                        return true;                    if (cp < 0x10080)                        return false;                    if (cp < 0x100fb)                        return true;                    if (cp < 0x10140)                        return false;                    if (cp < 0x10175)                        return true;                    return false;                }                if (cp < 0x1029d)                    return true;                if (cp < 0x102a0)                    return false;                if (cp < 0x102d1)                    return true;                if (cp < 0x10300)                    return false;                if (cp < 0x10320)                    return true;                if (cp < 0x1032d)                    return false;                if (cp < 0x10341)                    return true;                if (cp === 0x10341)                    return true;                return false;            }            if (cp < 0x103c8) {                if (cp < 0x10342)                    return false;                if (cp < 0x1034a)                    return true;                if (cp === 0x1034a)                    return true;                if (cp < 0x10350)                    return false;                if (cp < 0x10376)                    return true;                if (cp < 0x10380)                    return false;                if (cp < 0x1039e)                    return true;                if (cp < 0x103a0)                    return false;                if (cp < 0x103c4)                    return true;                return false;            }            if (cp < 0x103d0)                return true;            if (cp < 0x103d1)                return false;            if (cp < 0x103d6)                return true;            if (cp < 0x10400)                return false;            if (cp < 0x10450)                return true;            if (cp < 0x10450)                return false;            if (cp < 0x1049e)                return true;            if (cp < 0x104b0)                return false;            if (cp < 0x104d4)                return true;            return false;        }        if (cp < 0x1083c) {            if (cp < 0x10760) {                if (cp < 0x104d8)                    return false;                if (cp < 0x104fc)                    return true;                if (cp < 0x10500)                    return false;                if (cp < 0x10528)                    return true;                if (cp < 0x10530)                    return false;                if (cp < 0x10564)                    return true;                if (cp < 0x10600)                    return false;                if (cp < 0x10737)                    return true;                if (cp < 0x10740)                    return false;                if (cp < 0x10756)                    return true;                return false;            }            if (cp < 0x10768)                return true;            if (cp < 0x10800)                return false;            if (cp < 0x10806)                return true;            if (cp === 0x10808)                return true;            if (cp < 0x1080a)                return false;            if (cp < 0x10836)                return true;            if (cp < 0x10837)                return false;            if (cp < 0x10839)                return true;            return false;        }        if (cp < 0x108f4) {            if (cp === 0x1083c)                return true;            if (cp < 0x1083f)                return false;            if (cp < 0x10856)                return true;            if (cp < 0x10860)                return false;            if (cp < 0x10877)                return true;            if (cp < 0x10880)                return false;            if (cp < 0x1089f)                return true;            if (cp < 0x108e0)                return false;            if (cp < 0x108f3)                return true;            return false;        }        if (cp < 0x108f6)            return true;        if (cp < 0x10900)            return false;        if (cp < 0x10916)            return true;        if (cp < 0x10920)            return false;        if (cp < 0x1093a)            return true;        if (cp < 0x10980)            return false;        if (cp < 0x109b8)            return true;        if (cp < 0x109be)            return false;        if (cp < 0x109c0)            return true;        if (cp === 0x10a00)            return true;        return false;    }    if (cp < 0x16f50) {        if (cp < 0x11400) {            if (cp < 0x11183) {                if (cp < 0x10b80) {                    if (cp < 0x10ac0) {                        if (cp < 0x10a10)                            return false;                        if (cp < 0x10a14)                            return true;                        if (cp < 0x10a15)                            return false;                        if (cp < 0x10a18)                            return true;                        if (cp < 0x10a19)                            return false;                        if (cp < 0x10a34)                            return true;                        if (cp < 0x10a60)                            return false;                        if (cp < 0x10a7d)                            return true;                        if (cp < 0x10a80)                            return false;                        if (cp < 0x10a9d)                            return true;                        return false;                    }                    if (cp < 0x10ac8)                        return true;                    if (cp < 0x10ac9)                        return false;                    if (cp < 0x10ae5)                        return true;                    if (cp < 0x10b00)                        return false;                    if (cp < 0x10b36)                        return true;                    if (cp < 0x10b40)                        return false;                    if (cp < 0x10b56)                        return true;                    if (cp < 0x10b60)                        return false;                    if (cp < 0x10b73)                        return true;                    return false;                }                if (cp < 0x11083) {                    if (cp < 0x10b80)                        return false;                    if (cp < 0x10b92)                        return true;                    if (cp < 0x10c00)                        return false;                    if (cp < 0x10c49)                        return true;                    if (cp < 0x10c80)                        return false;                    if (cp < 0x10cb3)                        return true;                    if (cp < 0x10cc0)                        return false;                    if (cp < 0x10cf3)                        return true;                    if (cp < 0x11003)                        return false;                    if (cp < 0x11038)                        return true;                    return false;                }                if (cp < 0x110b0)                    return true;                if (cp < 0x110d0)                    return false;                if (cp < 0x110e9)                    return true;                if (cp < 0x11103)                    return false;                if (cp < 0x11127)                    return true;                if (cp < 0x11150)                    return false;                if (cp < 0x11173)                    return true;                if (cp === 0x11176)                    return true;                return false;            }            if (cp < 0x1129f) {                if (cp < 0x11213) {                    if (cp < 0x11183)                        return false;                    if (cp < 0x111b3)                        return true;                    if (cp < 0x111c1)                        return false;                    if (cp < 0x111c5)                        return true;                    if (cp === 0x111da)                        return true;                    if (cp === 0x111dc)                        return true;                    if (cp < 0x11200)                        return false;                    if (cp < 0x11212)                        return true;                    return false;                }                if (cp < 0x1122c)                    return true;                if (cp < 0x11280)                    return false;                if (cp < 0x11287)                    return true;                if (cp === 0x11288)                    return true;                if (cp < 0x1128a)                    return false;                if (cp < 0x1128e)                    return true;                if (cp < 0x1128f)                    return false;                if (cp < 0x1129e)                    return true;                return false;            }            if (cp < 0x1132a) {                if (cp < 0x1129f)                    return false;                if (cp < 0x112a9)                    return true;                if (cp < 0x112b0)                    return false;                if (cp < 0x112df)                    return true;                if (cp < 0x11305)                    return false;                if (cp < 0x1130d)                    return true;                if (cp < 0x1130f)                    return false;                if (cp < 0x11311)                    return true;                if (cp < 0x11313)                    return false;                if (cp < 0x11329)                    return true;                return false;            }            if (cp < 0x11331)                return true;            if (cp < 0x11332)                return false;            if (cp < 0x11334)                return true;            if (cp < 0x11335)                return false;            if (cp < 0x1133a)                return true;            if (cp === 0x1133d)                return true;            if (cp === 0x11350)                return true;            if (cp < 0x1135d)                return false;            if (cp < 0x11362)                return true;            return false;        }        if (cp < 0x11c00) {            if (cp < 0x11700) {                if (cp < 0x11580) {                    if (cp < 0x11400)                        return false;                    if (cp < 0x11435)                        return true;                    if (cp < 0x11447)                        return false;                    if (cp < 0x1144b)                        return true;                    if (cp < 0x11480)                        return false;                    if (cp < 0x114b0)                        return true;                    if (cp < 0x114c4)                        return false;                    if (cp < 0x114c6)                        return true;                    if (cp === 0x114c7)                        return true;                    return false;                }                if (cp < 0x115af)                    return true;                if (cp < 0x115d8)                    return false;                if (cp < 0x115dc)                    return true;                if (cp < 0x11600)                    return false;                if (cp < 0x11630)                    return true;                if (cp === 0x11644)                    return true;                if (cp < 0x11680)                    return false;                if (cp < 0x116ab)                    return true;                return false;            }            if (cp < 0x11a3a) {                if (cp < 0x11700)                    return false;                if (cp < 0x1171a)                    return true;                if (cp < 0x118a0)                    return false;                if (cp < 0x118e0)                    return true;                if (cp === 0x118ff)                    return true;                if (cp === 0x11a00)                    return true;                if (cp < 0x11a0b)                    return false;                if (cp < 0x11a33)                    return true;                return false;            }            if (cp === 0x11a3a)                return true;            if (cp === 0x11a50)                return true;            if (cp < 0x11a5c)                return false;            if (cp < 0x11a84)                return true;            if (cp < 0x11a86)                return false;            if (cp < 0x11a8a)                return true;            if (cp < 0x11ac0)                return false;            if (cp < 0x11af9)                return true;            return false;        }        if (cp < 0x12480) {            if (cp < 0x11d08) {                if (cp < 0x11c00)                    return false;                if (cp < 0x11c09)                    return true;                if (cp < 0x11c0a)                    return false;                if (cp < 0x11c2f)                    return true;                if (cp === 0x11c40)                    return true;                if (cp < 0x11c72)                    return false;                if (cp < 0x11c90)                    return true;                if (cp < 0x11d00)                    return false;                if (cp < 0x11d07)                    return true;                return false;            }            if (cp < 0x11d0a)                return true;            if (cp < 0x11d0b)                return false;            if (cp < 0x11d31)                return true;            if (cp === 0x11d46)                return true;            if (cp < 0x12000)                return false;            if (cp < 0x1239a)                return true;            if (cp < 0x12400)                return false;            if (cp < 0x1246f)                return true;            return false;        }        if (cp < 0x16ad0) {            if (cp < 0x12480)                return false;            if (cp < 0x12544)                return true;            if (cp < 0x13000)                return false;            if (cp < 0x1342f)                return true;            if (cp < 0x14400)                return false;            if (cp < 0x14647)                return true;            if (cp < 0x16800)                return false;            if (cp < 0x16a39)                return true;            if (cp < 0x16a40)                return false;            if (cp < 0x16a5f)                return true;            return false;        }        if (cp < 0x16aee)            return true;        if (cp < 0x16b00)            return false;        if (cp < 0x16b30)            return true;        if (cp < 0x16b40)            return false;        if (cp < 0x16b44)            return true;        if (cp < 0x16b63)            return false;        if (cp < 0x16b78)            return true;        if (cp < 0x16b7d)            return false;        if (cp < 0x16b90)            return true;        if (cp < 0x16f00)            return false;        if (cp < 0x16f45)            return true;        return false;    }    if (cp < 0x1e800) {        if (cp < 0x1d4c5) {            if (cp < 0x1bc90) {                if (cp < 0x1b000) {                    if (cp === 0x16f50)                        return true;                    if (cp < 0x16f93)                        return false;                    if (cp < 0x16fa0)                        return true;                    if (cp < 0x16fe0)                        return false;                    if (cp < 0x16fe2)                        return true;                    if (cp < 0x17000)                        return false;                    if (cp < 0x187ed)                        return true;                    if (cp < 0x18800)                        return false;                    if (cp < 0x18af3)                        return true;                    return false;                }                if (cp < 0x1b11f)                    return true;                if (cp < 0x1b170)                    return false;                if (cp < 0x1b2fc)                    return true;                if (cp < 0x1bc00)                    return false;                if (cp < 0x1bc6b)                    return true;                if (cp < 0x1bc70)                    return false;                if (cp < 0x1bc7d)                    return true;                if (cp < 0x1bc80)                    return false;                if (cp < 0x1bc89)                    return true;                return false;            }            if (cp < 0x1d4a5) {                if (cp < 0x1bc90)                    return false;                if (cp < 0x1bc9a)                    return true;                if (cp < 0x1d400)                    return false;                if (cp < 0x1d455)                    return true;                if (cp < 0x1d456)                    return false;                if (cp < 0x1d49d)                    return true;                if (cp < 0x1d49e)                    return false;                if (cp < 0x1d4a0)                    return true;                if (cp === 0x1d4a2)                    return true;                return false;            }            if (cp < 0x1d4a7)                return true;            if (cp < 0x1d4a9)                return false;            if (cp < 0x1d4ad)                return true;            if (cp < 0x1d4ae)                return false;            if (cp < 0x1d4ba)                return true;            if (cp === 0x1d4bb)                return true;            if (cp < 0x1d4bd)                return false;            if (cp < 0x1d4c4)                return true;            return false;        }        if (cp < 0x1d6a8) {            if (cp < 0x1d53b) {                if (cp < 0x1d4c5)                    return false;                if (cp < 0x1d506)                    return true;                if (cp < 0x1d507)                    return false;                if (cp < 0x1d50b)                    return true;                if (cp < 0x1d50d)                    return false;                if (cp < 0x1d515)                    return true;                if (cp < 0x1d516)                    return false;                if (cp < 0x1d51d)                    return true;                if (cp < 0x1d51e)                    return false;                if (cp < 0x1d53a)                    return true;                return false;            }            if (cp < 0x1d53f)                return true;            if (cp < 0x1d540)                return false;            if (cp < 0x1d545)                return true;            if (cp === 0x1d546)                return true;            if (cp < 0x1d54a)                return false;            if (cp < 0x1d551)                return true;            if (cp < 0x1d552)                return false;            if (cp < 0x1d6a6)                return true;            return false;        }        if (cp < 0x1d736) {            if (cp < 0x1d6a8)                return false;            if (cp < 0x1d6c1)                return true;            if (cp < 0x1d6c2)                return false;            if (cp < 0x1d6db)                return true;            if (cp < 0x1d6dc)                return false;            if (cp < 0x1d6fb)                return true;            if (cp < 0x1d6fc)                return false;            if (cp < 0x1d715)                return true;            if (cp < 0x1d716)                return false;            if (cp < 0x1d735)                return true;            return false;        }        if (cp < 0x1d74f)            return true;        if (cp < 0x1d750)            return false;        if (cp < 0x1d76f)            return true;        if (cp < 0x1d770)            return false;        if (cp < 0x1d789)            return true;        if (cp < 0x1d78a)            return false;        if (cp < 0x1d7a9)            return true;        if (cp < 0x1d7aa)            return false;        if (cp < 0x1d7c3)            return true;        if (cp < 0x1d7c4)            return false;        if (cp < 0x1d7cc)            return true;        return false;    }    if (cp < 0x1ee5b) {        if (cp < 0x1ee3b) {            if (cp < 0x1ee24) {                if (cp < 0x1e800)                    return false;                if (cp < 0x1e8c5)                    return true;                if (cp < 0x1e900)                    return false;                if (cp < 0x1e944)                    return true;                if (cp < 0x1ee00)                    return false;                if (cp < 0x1ee04)                    return true;                if (cp < 0x1ee05)                    return false;                if (cp < 0x1ee20)                    return true;                if (cp < 0x1ee21)                    return false;                if (cp < 0x1ee23)                    return true;                return false;            }            if (cp === 0x1ee24)                return true;            if (cp === 0x1ee27)                return true;            if (cp < 0x1ee29)                return false;            if (cp < 0x1ee33)                return true;            if (cp < 0x1ee34)                return false;            if (cp < 0x1ee38)                return true;            if (cp === 0x1ee39)                return true;            return false;        }        if (cp < 0x1ee4d) {            if (cp === 0x1ee3b)                return true;            if (cp === 0x1ee42)                return true;            if (cp === 0x1ee47)                return true;            if (cp === 0x1ee49)                return true;            if (cp === 0x1ee4b)                return true;            return false;        }        if (cp < 0x1ee50)            return true;        if (cp < 0x1ee51)            return false;        if (cp < 0x1ee53)            return true;        if (cp === 0x1ee54)            return true;        if (cp === 0x1ee57)            return true;        if (cp === 0x1ee59)            return true;        return false;    }    if (cp < 0x1ee80) {        if (cp < 0x1ee67) {            if (cp === 0x1ee5b)                return true;            if (cp === 0x1ee5d)                return true;            if (cp === 0x1ee5f)                return true;            if (cp < 0x1ee61)                return false;            if (cp < 0x1ee63)                return true;            if (cp === 0x1ee64)                return true;            return false;        }        if (cp < 0x1ee6b)            return true;        if (cp < 0x1ee6c)            return false;        if (cp < 0x1ee73)            return true;        if (cp < 0x1ee74)            return false;        if (cp < 0x1ee78)            return true;        if (cp < 0x1ee79)            return false;        if (cp < 0x1ee7d)            return true;        if (cp === 0x1ee7e)            return true;        return false;    }    if (cp < 0x20000) {        if (cp < 0x1ee80)            return false;        if (cp < 0x1ee8a)            return true;        if (cp < 0x1ee8b)            return false;        if (cp < 0x1ee9c)            return true;        if (cp < 0x1eea1)            return false;        if (cp < 0x1eea4)            return true;        if (cp < 0x1eea5)            return false;        if (cp < 0x1eeaa)            return true;        if (cp < 0x1eeab)            return false;        if (cp < 0x1eebc)            return true;        return false;    }    if (cp < 0x2a6d7)        return true;    if (cp < 0x2a700)        return false;    if (cp < 0x2b735)        return true;    if (cp < 0x2b740)        return false;    if (cp < 0x2b81e)        return true;    if (cp < 0x2b820)        return false;    if (cp < 0x2cea2)        return true;    if (cp < 0x2ceb0)        return false;    if (cp < 0x2ebe1)        return true;    if (cp < 0x2f800)        return false;    if (cp < 0x2fa1e)        return true;    return false;}function isLargeIdContinue(cp) {    if (cp < 0x1bf2) {        if (cp < 0xd62) {            if (cp < 0xa83) {                if (cp < 0x93b) {                    if (cp < 0x6ea) {                        if (cp < 0x5c7) {                            if (cp === 0xb7)                                return true;                            if (cp < 0x300)                                return false;                            if (cp < 0x370)                                return true;                            if (cp === 0x387)                                return true;                            if (cp < 0x483)                                return false;                            if (cp < 0x488)                                return true;                            if (cp < 0x591)                                return false;                            if (cp < 0x5be)                                return true;                            if (cp === 0x5bf)                                return true;                            if (cp < 0x5c1)                                return false;                            if (cp < 0x5c3)                                return true;                            if (cp < 0x5c4)                                return false;                            if (cp < 0x5c6)                                return true;                            return false;                        }                        if (cp === 0x5c7)                            return true;                        if (cp < 0x610)                            return false;                        if (cp < 0x61b)                            return true;                        if (cp < 0x64b)                            return false;                        if (cp < 0x660)                            return true;                        if (cp < 0x660)                            return false;                        if (cp < 0x66a)                            return true;                        if (cp === 0x670)                            return true;                        if (cp < 0x6d6)                            return false;                        if (cp < 0x6dd)                            return true;                        if (cp < 0x6df)                            return false;                        if (cp < 0x6e5)                            return true;                        if (cp < 0x6e7)                            return false;                        if (cp < 0x6e9)                            return true;                        return false;                    }                    if (cp < 0x81b) {                        if (cp < 0x6ea)                            return false;                        if (cp < 0x6ee)                            return true;                        if (cp < 0x6f0)                            return false;                        if (cp < 0x6fa)                            return true;                        if (cp === 0x711)                            return true;                        if (cp < 0x730)                            return false;                        if (cp < 0x74b)                            return true;                        if (cp < 0x7a6)                            return false;                        if (cp < 0x7b1)                            return true;                        if (cp < 0x7c0)                            return false;                        if (cp < 0x7ca)                            return true;                        if (cp < 0x7eb)                            return false;                        if (cp < 0x7f4)                            return true;                        if (cp < 0x816)                            return false;                        if (cp < 0x81a)                            return true;                        return false;                    }                    if (cp < 0x824)                        return true;                    if (cp < 0x825)                        return false;                    if (cp < 0x828)                        return true;                    if (cp < 0x829)                        return false;                    if (cp < 0x82e)                        return true;                    if (cp < 0x859)                        return false;                    if (cp < 0x85c)                        return true;                    if (cp < 0x8d4)                        return false;                    if (cp < 0x8e2)                        return true;                    if (cp < 0x8e3)                        return false;                    if (cp < 0x903)                        return true;                    if (cp === 0x903)                        return true;                    if (cp === 0x93a)                        return true;                    return false;                }                if (cp < 0x9cb) {                    if (cp < 0x962) {                        if (cp === 0x93b)                            return true;                        if (cp === 0x93c)                            return true;                        if (cp < 0x93e)                            return false;                        if (cp < 0x941)                            return true;                        if (cp < 0x941)                            return false;                        if (cp < 0x949)                            return true;                        if (cp < 0x949)                            return false;                        if (cp < 0x94d)                            return true;                        if (cp === 0x94d)                            return true;                        if (cp < 0x94e)                            return false;                        if (cp < 0x950)                            return true;                        if (cp < 0x951)                            return false;                        if (cp < 0x958)                            return true;                        return false;                    }                    if (cp < 0x964)                        return true;                    if (cp < 0x966)                        return false;                    if (cp < 0x970)                        return true;                    if (cp === 0x981)                        return true;                    if (cp < 0x982)                        return false;                    if (cp < 0x984)                        return true;                    if (cp === 0x9bc)                        return true;                    if (cp < 0x9be)                        return false;                    if (cp < 0x9c1)                        return true;                    if (cp < 0x9c1)                        return false;                    if (cp < 0x9c5)                        return true;                    if (cp < 0x9c7)                        return false;                    if (cp < 0x9c9)                        return true;                    return false;                }                if (cp < 0xa3e) {                    if (cp < 0x9cb)                        return false;                    if (cp < 0x9cd)                        return true;                    if (cp === 0x9cd)                        return true;                    if (cp === 0x9d7)                        return true;                    if (cp < 0x9e2)                        return false;                    if (cp < 0x9e4)                        return true;                    if (cp < 0x9e6)                        return false;                    if (cp < 0x9f0)                        return true;                    if (cp < 0xa01)                        return false;                    if (cp < 0xa03)                        return true;                    if (cp === 0xa03)                        return true;                    if (cp === 0xa3c)                        return true;                    return false;                }                if (cp < 0xa41)                    return true;                if (cp < 0xa41)                    return false;                if (cp < 0xa43)                    return true;                if (cp < 0xa47)                    return false;                if (cp < 0xa49)                    return true;                if (cp < 0xa4b)                    return false;                if (cp < 0xa4e)                    return true;                if (cp === 0xa51)                    return true;                if (cp < 0xa66)                    return false;                if (cp < 0xa70)                    return true;                if (cp < 0xa70)                    return false;                if (cp < 0xa72)                    return true;                if (cp === 0xa75)                    return true;                if (cp < 0xa81)                    return false;                if (cp < 0xa83)                    return true;                return false;            }            if (cp < 0xbd7) {                if (cp < 0xb40) {                    if (cp < 0xae2) {                        if (cp === 0xa83)                            return true;                        if (cp === 0xabc)                            return true;                        if (cp < 0xabe)                            return false;                        if (cp < 0xac1)                            return true;                        if (cp < 0xac1)                            return false;                        if (cp < 0xac6)                            return true;                        if (cp < 0xac7)                            return false;                        if (cp < 0xac9)                            return true;                        if (cp === 0xac9)                            return true;                        if (cp < 0xacb)                            return false;                        if (cp < 0xacd)                            return true;                        if (cp === 0xacd)                            return true;                        return false;                    }                    if (cp < 0xae4)                        return true;                    if (cp < 0xae6)                        return false;                    if (cp < 0xaf0)                        return true;                    if (cp < 0xafa)                        return false;                    if (cp < 0xb00)                        return true;                    if (cp === 0xb01)                        return true;                    if (cp < 0xb02)                        return false;                    if (cp < 0xb04)                        return true;                    if (cp === 0xb3c)                        return true;                    if (cp === 0xb3e)                        return true;                    if (cp === 0xb3f)                        return true;                    return false;                }                if (cp < 0xb66) {                    if (cp === 0xb40)                        return true;                    if (cp < 0xb41)                        return false;                    if (cp < 0xb45)                        return true;                    if (cp < 0xb47)                        return false;                    if (cp < 0xb49)                        return true;                    if (cp < 0xb4b)                        return false;                    if (cp < 0xb4d)                        return true;                    if (cp === 0xb4d)                        return true;                    if (cp === 0xb56)                        return true;                    if (cp === 0xb57)                        return true;                    if (cp < 0xb62)                        return false;                    if (cp < 0xb64)                        return true;                    return false;                }                if (cp < 0xb70)                    return true;                if (cp === 0xb82)                    return true;                if (cp < 0xbbe)                    return false;                if (cp < 0xbc0)                    return true;                if (cp === 0xbc0)                    return true;                if (cp < 0xbc1)                    return false;                if (cp < 0xbc3)                    return true;                if (cp < 0xbc6)                    return false;                if (cp < 0xbc9)                    return true;                if (cp < 0xbca)                    return false;                if (cp < 0xbcd)                    return true;                if (cp === 0xbcd)                    return true;                return false;            }            if (cp < 0xcc0) {                if (cp < 0xc55) {                    if (cp === 0xbd7)                        return true;                    if (cp < 0xbe6)                        return false;                    if (cp < 0xbf0)                        return true;                    if (cp === 0xc00)                        return true;                    if (cp < 0xc01)                        return false;                    if (cp < 0xc04)                        return true;                    if (cp < 0xc3e)                        return false;                    if (cp < 0xc41)                        return true;                    if (cp < 0xc41)                        return false;                    if (cp < 0xc45)                        return true;                    if (cp < 0xc46)                        return false;                    if (cp < 0xc49)                        return true;                    if (cp < 0xc4a)                        return false;                    if (cp < 0xc4e)                        return true;                    return false;                }                if (cp < 0xc57)                    return true;                if (cp < 0xc62)                    return false;                if (cp < 0xc64)                    return true;                if (cp < 0xc66)                    return false;                if (cp < 0xc70)                    return true;                if (cp === 0xc81)                    return true;                if (cp < 0xc82)                    return false;                if (cp < 0xc84)                    return true;                if (cp === 0xcbc)                    return true;                if (cp === 0xcbe)                    return true;                if (cp === 0xcbf)                    return true;                return false;            }            if (cp < 0xd00) {                if (cp < 0xcc0)                    return false;                if (cp < 0xcc5)                    return true;                if (cp === 0xcc6)                    return true;                if (cp < 0xcc7)                    return false;                if (cp < 0xcc9)                    return true;                if (cp < 0xcca)                    return false;                if (cp < 0xccc)                    return true;                if (cp < 0xccc)                    return false;                if (cp < 0xcce)                    return true;                if (cp < 0xcd5)                    return false;                if (cp < 0xcd7)                    return true;                if (cp < 0xce2)                    return false;                if (cp < 0xce4)                    return true;                if (cp < 0xce6)                    return false;                if (cp < 0xcf0)                    return true;                return false;            }            if (cp < 0xd02)                return true;            if (cp < 0xd02)                return false;            if (cp < 0xd04)                return true;            if (cp < 0xd3b)                return false;            if (cp < 0xd3d)                return true;            if (cp < 0xd3e)                return false;            if (cp < 0xd41)                return true;            if (cp < 0xd41)                return false;            if (cp < 0xd45)                return true;            if (cp < 0xd46)                return false;            if (cp < 0xd49)                return true;            if (cp < 0xd4a)                return false;            if (cp < 0xd4d)                return true;            if (cp === 0xd4d)                return true;            if (cp === 0xd57)                return true;            return false;        }        if (cp < 0x17be) {            if (cp < 0x102b) {                if (cp < 0xebb) {                    if (cp < 0xde6) {                        if (cp < 0xd62)                            return false;                        if (cp < 0xd64)                            return true;                        if (cp < 0xd66)                            return false;                        if (cp < 0xd70)                            return true;                        if (cp < 0xd82)                            return false;                        if (cp < 0xd84)                            return true;                        if (cp === 0xdca)                            return true;                        if (cp < 0xdcf)                            return false;                        if (cp < 0xdd2)                            return true;                        if (cp < 0xdd2)                            return false;                        if (cp < 0xdd5)                            return true;                        if (cp === 0xdd6)                            return true;                        if (cp < 0xdd8)                            return false;                        if (cp < 0xde0)                            return true;                        return false;                    }                    if (cp < 0xdf0)                        return true;                    if (cp < 0xdf2)                        return false;                    if (cp < 0xdf4)                        return true;                    if (cp === 0xe31)                        return true;                    if (cp < 0xe34)                        return false;                    if (cp < 0xe3b)                        return true;                    if (cp < 0xe47)                        return false;                    if (cp < 0xe4f)                        return true;                    if (cp < 0xe50)                        return false;                    if (cp < 0xe5a)                        return true;                    if (cp === 0xeb1)                        return true;                    if (cp < 0xeb4)                        return false;                    if (cp < 0xeba)                        return true;                    return false;                }                if (cp < 0xf3e) {                    if (cp < 0xebb)                        return false;                    if (cp < 0xebd)                        return true;                    if (cp < 0xec8)                        return false;                    if (cp < 0xece)                        return true;                    if (cp < 0xed0)                        return false;                    if (cp < 0xeda)                        return true;                    if (cp < 0xf18)                        return false;                    if (cp < 0xf1a)                        return true;                    if (cp < 0xf20)                        return false;                    if (cp < 0xf2a)                        return true;                    if (cp === 0xf35)                        return true;                    if (cp === 0xf37)                        return true;                    if (cp === 0xf39)                        return true;                    return false;                }                if (cp < 0xf40)                    return true;                if (cp < 0xf71)                    return false;                if (cp < 0xf7f)                    return true;                if (cp === 0xf7f)                    return true;                if (cp < 0xf80)                    return false;                if (cp < 0xf85)                    return true;                if (cp < 0xf86)                    return false;                if (cp < 0xf88)                    return true;                if (cp < 0xf8d)                    return false;                if (cp < 0xf98)                    return true;                if (cp < 0xf99)                    return false;                if (cp < 0xfbd)                    return true;                if (cp === 0xfc6)                    return true;                return false;            }            if (cp < 0x1083) {                if (cp < 0x1040) {                    if (cp < 0x102b)                        return false;                    if (cp < 0x102d)                        return true;                    if (cp < 0x102d)                        return false;                    if (cp < 0x1031)                        return true;                    if (cp === 0x1031)                        return true;                    if (cp < 0x1032)                        return false;                    if (cp < 0x1038)                        return true;                    if (cp === 0x1038)                        return true;                    if (cp < 0x1039)                        return false;                    if (cp < 0x103b)                        return true;                    if (cp < 0x103b)                        return false;                    if (cp < 0x103d)                        return true;                    if (cp < 0x103d)                        return false;                    if (cp < 0x103f)                        return true;                    return false;                }                if (cp < 0x104a)                    return true;                if (cp < 0x1056)                    return false;                if (cp < 0x1058)                    return true;                if (cp < 0x1058)                    return false;                if (cp < 0x105a)                    return true;                if (cp < 0x105e)                    return false;                if (cp < 0x1061)                    return true;                if (cp < 0x1062)                    return false;                if (cp < 0x1065)                    return true;                if (cp < 0x1067)                    return false;                if (cp < 0x106e)                    return true;                if (cp < 0x1071)                    return false;                if (cp < 0x1075)                    return true;                if (cp === 0x1082)                    return true;                return false;            }            if (cp < 0x135d) {                if (cp < 0x1083)                    return false;                if (cp < 0x1085)                    return true;                if (cp < 0x1085)                    return false;                if (cp < 0x1087)                    return true;                if (cp < 0x1087)                    return false;                if (cp < 0x108d)                    return true;                if (cp === 0x108d)                    return true;                if (cp === 0x108f)                    return true;                if (cp < 0x1090)                    return false;                if (cp < 0x109a)                    return true;                if (cp < 0x109a)                    return false;                if (cp < 0x109d)                    return true;                if (cp === 0x109d)                    return true;                return false;            }            if (cp < 0x1360)                return true;            if (cp < 0x1369)                return false;            if (cp < 0x1372)                return true;            if (cp < 0x1712)                return false;            if (cp < 0x1715)                return true;            if (cp < 0x1732)                return false;            if (cp < 0x1735)                return true;            if (cp < 0x1752)                return false;            if (cp < 0x1754)                return true;            if (cp < 0x1772)                return false;            if (cp < 0x1774)                return true;            if (cp < 0x17b4)                return false;            if (cp < 0x17b6)                return true;            if (cp === 0x17b6)                return true;            if (cp < 0x17b7)                return false;            if (cp < 0x17be)                return true;            return false;        }        if (cp < 0x1a73) {            if (cp < 0x1939) {                if (cp < 0x18a9) {                    if (cp < 0x17be)                        return false;                    if (cp < 0x17c6)                        return true;                    if (cp === 0x17c6)                        return true;                    if (cp < 0x17c7)                        return false;                    if (cp < 0x17c9)                        return true;                    if (cp < 0x17c9)                        return false;                    if (cp < 0x17d4)                        return true;                    if (cp === 0x17dd)                        return true;                    if (cp < 0x17e0)                        return false;                    if (cp < 0x17ea)                        return true;                    if (cp < 0x180b)                        return false;                    if (cp < 0x180e)                        return true;                    if (cp < 0x1810)                        return false;                    if (cp < 0x181a)                        return true;                    return false;                }                if (cp === 0x18a9)                    return true;                if (cp < 0x1920)                    return false;                if (cp < 0x1923)                    return true;                if (cp < 0x1923)                    return false;                if (cp < 0x1927)                    return true;                if (cp < 0x1927)                    return false;                if (cp < 0x1929)                    return true;                if (cp < 0x1929)                    return false;                if (cp < 0x192c)                    return true;                if (cp < 0x1930)                    return false;                if (cp < 0x1932)                    return true;                if (cp === 0x1932)                    return true;                if (cp < 0x1933)                    return false;                if (cp < 0x1939)                    return true;                return false;            }            if (cp < 0x1a56) {                if (cp < 0x1939)                    return false;                if (cp < 0x193c)                    return true;                if (cp < 0x1946)                    return false;                if (cp < 0x1950)                    return true;                if (cp < 0x19d0)                    return false;                if (cp < 0x19da)                    return true;                if (cp === 0x19da)                    return true;                if (cp < 0x1a17)                    return false;                if (cp < 0x1a19)                    return true;                if (cp < 0x1a19)                    return false;                if (cp < 0x1a1b)                    return true;                if (cp === 0x1a1b)                    return true;                if (cp === 0x1a55)                    return true;                return false;            }            if (cp === 0x1a56)                return true;            if (cp === 0x1a57)                return true;            if (cp < 0x1a58)                return false;            if (cp < 0x1a5f)                return true;            if (cp === 0x1a60)                return true;            if (cp === 0x1a61)                return true;            if (cp === 0x1a62)                return true;            if (cp < 0x1a63)                return false;            if (cp < 0x1a65)                return true;            if (cp < 0x1a65)                return false;            if (cp < 0x1a6d)                return true;            if (cp < 0x1a6d)                return false;            if (cp < 0x1a73)                return true;            return false;        }        if (cp < 0x1b6b) {            if (cp < 0x1b35) {                if (cp < 0x1a73)                    return false;                if (cp < 0x1a7d)                    return true;                if (cp === 0x1a7f)                    return true;                if (cp < 0x1a80)                    return false;                if (cp < 0x1a8a)                    return true;                if (cp < 0x1a90)                    return false;                if (cp < 0x1a9a)                    return true;                if (cp < 0x1ab0)                    return false;                if (cp < 0x1abe)                    return true;                if (cp < 0x1b00)                    return false;                if (cp < 0x1b04)                    return true;                if (cp === 0x1b04)                    return true;                if (cp === 0x1b34)                    return true;                return false;            }            if (cp === 0x1b35)                return true;            if (cp < 0x1b36)                return false;            if (cp < 0x1b3b)                return true;            if (cp === 0x1b3b)                return true;            if (cp === 0x1b3c)                return true;            if (cp < 0x1b3d)                return false;            if (cp < 0x1b42)                return true;            if (cp === 0x1b42)                return true;            if (cp < 0x1b43)                return false;            if (cp < 0x1b45)                return true;            if (cp < 0x1b50)                return false;            if (cp < 0x1b5a)                return true;            return false;        }        if (cp < 0x1bab) {            if (cp < 0x1b6b)                return false;            if (cp < 0x1b74)                return true;            if (cp < 0x1b80)                return false;            if (cp < 0x1b82)                return true;            if (cp === 0x1b82)                return true;            if (cp === 0x1ba1)                return true;            if (cp < 0x1ba2)                return false;            if (cp < 0x1ba6)                return true;            if (cp < 0x1ba6)                return false;            if (cp < 0x1ba8)                return true;            if (cp < 0x1ba8)                return false;            if (cp < 0x1baa)                return true;            if (cp === 0x1baa)                return true;            return false;        }        if (cp < 0x1bae)            return true;        if (cp < 0x1bb0)            return false;        if (cp < 0x1bba)            return true;        if (cp === 0x1be6)            return true;        if (cp === 0x1be7)            return true;        if (cp < 0x1be8)            return false;        if (cp < 0x1bea)            return true;        if (cp < 0x1bea)            return false;        if (cp < 0x1bed)            return true;        if (cp === 0x1bed)            return true;        if (cp === 0x1bee)            return true;        if (cp < 0x1bef)            return false;        if (cp < 0x1bf2)            return true;        return false;    }    if (cp < 0x111d0) {        if (cp < 0xaa43) {            if (cp < 0xa69e) {                if (cp < 0x1dc0) {                    if (cp < 0x1cd4) {                        if (cp < 0x1bf2)                            return false;                        if (cp < 0x1bf4)                            return true;                        if (cp < 0x1c24)                            return false;                        if (cp < 0x1c2c)                            return true;                        if (cp < 0x1c2c)                            return false;                        if (cp < 0x1c34)                            return true;                        if (cp < 0x1c34)                            return false;                        if (cp < 0x1c36)                            return true;                        if (cp < 0x1c36)                            return false;                        if (cp < 0x1c38)                            return true;                        if (cp < 0x1c40)                            return false;                        if (cp < 0x1c4a)                            return true;                        if (cp < 0x1c50)                            return false;                        if (cp < 0x1c5a)                            return true;                        if (cp < 0x1cd0)                            return false;                        if (cp < 0x1cd3)                            return true;                        return false;                    }                    if (cp < 0x1ce1)                        return true;                    if (cp === 0x1ce1)                        return true;                    if (cp < 0x1ce2)                        return false;                    if (cp < 0x1ce9)                        return true;                    if (cp === 0x1ced)                        return true;                    if (cp < 0x1cf2)                        return false;                    if (cp < 0x1cf4)                        return true;                    if (cp === 0x1cf4)                        return true;                    if (cp === 0x1cf7)                        return true;                    if (cp < 0x1cf8)                        return false;                    if (cp < 0x1cfa)                        return true;                    return false;                }                if (cp < 0x2d7f) {                    if (cp < 0x1dc0)                        return false;                    if (cp < 0x1dfa)                        return true;                    if (cp < 0x1dfb)                        return false;                    if (cp < 0x1e00)                        return true;                    if (cp < 0x203f)                        return false;                    if (cp < 0x2041)                        return true;                    if (cp === 0x2054)                        return true;                    if (cp < 0x20d0)                        return false;                    if (cp < 0x20dd)                        return true;                    if (cp === 0x20e1)                        return true;                    if (cp < 0x20e5)                        return false;                    if (cp < 0x20f1)                        return true;                    if (cp < 0x2cef)                        return false;                    if (cp < 0x2cf2)                        return true;                    return false;                }                if (cp === 0x2d7f)                    return true;                if (cp < 0x2de0)                    return false;                if (cp < 0x2e00)                    return true;                if (cp < 0x302a)                    return false;                if (cp < 0x302e)                    return true;                if (cp < 0x302e)                    return false;                if (cp < 0x3030)                    return true;                if (cp < 0x3099)                    return false;                if (cp < 0x309b)                    return true;                if (cp < 0xa620)                    return false;                if (cp < 0xa62a)                    return true;                if (cp === 0xa66f)                    return true;                if (cp < 0xa674)                    return false;                if (cp < 0xa67e)                    return true;                return false;            }            if (cp < 0xa952) {                if (cp < 0xa880) {                    if (cp < 0xa69e)                        return false;                    if (cp < 0xa6a0)                        return true;                    if (cp < 0xa6f0)                        return false;                    if (cp < 0xa6f2)                        return true;                    if (cp === 0xa802)                        return true;                    if (cp === 0xa806)                        return true;                    if (cp === 0xa80b)                        return true;                    if (cp < 0xa823)                        return false;                    if (cp < 0xa825)                        return true;                    if (cp < 0xa825)                        return false;                    if (cp < 0xa827)                        return true;                    if (cp === 0xa827)                        return true;                    return false;                }                if (cp < 0xa882)                    return true;                if (cp < 0xa8b4)                    return false;                if (cp < 0xa8c4)                    return true;                if (cp < 0xa8c4)                    return false;                if (cp < 0xa8c6)                    return true;                if (cp < 0xa8d0)                    return false;                if (cp < 0xa8da)                    return true;                if (cp < 0xa8e0)                    return false;                if (cp < 0xa8f2)                    return true;                if (cp < 0xa900)                    return false;                if (cp < 0xa90a)                    return true;                if (cp < 0xa926)                    return false;                if (cp < 0xa92e)                    return true;                if (cp < 0xa947)                    return false;                if (cp < 0xa952)                    return true;                return false;            }            if (cp < 0xa9bd) {                if (cp < 0xa952)                    return false;                if (cp < 0xa954)                    return true;                if (cp < 0xa980)                    return false;                if (cp < 0xa983)                    return true;                if (cp === 0xa983)                    return true;                if (cp === 0xa9b3)                    return true;                if (cp < 0xa9b4)                    return false;                if (cp < 0xa9b6)                    return true;                if (cp < 0xa9b6)                    return false;                if (cp < 0xa9ba)                    return true;                if (cp < 0xa9ba)                    return false;                if (cp < 0xa9bc)                    return true;                if (cp === 0xa9bc)                    return true;                return false;            }            if (cp < 0xa9c1)                return true;            if (cp < 0xa9d0)                return false;            if (cp < 0xa9da)                return true;            if (cp === 0xa9e5)                return true;            if (cp < 0xa9f0)                return false;            if (cp < 0xa9fa)                return true;            if (cp < 0xaa29)                return false;            if (cp < 0xaa2f)                return true;            if (cp < 0xaa2f)                return false;            if (cp < 0xaa31)                return true;            if (cp < 0xaa31)                return false;            if (cp < 0xaa33)                return true;            if (cp < 0xaa33)                return false;            if (cp < 0xaa35)                return true;            if (cp < 0xaa35)                return false;            if (cp < 0xaa37)                return true;            return false;        }        if (cp < 0x102e0) {            if (cp < 0xaaf6) {                if (cp < 0xaab2) {                    if (cp === 0xaa43)                        return true;                    if (cp === 0xaa4c)                        return true;                    if (cp === 0xaa4d)                        return true;                    if (cp < 0xaa50)                        return false;                    if (cp < 0xaa5a)                        return true;                    if (cp === 0xaa7b)                        return true;                    if (cp === 0xaa7c)                        return true;                    if (cp === 0xaa7d)                        return true;                    if (cp === 0xaab0)                        return true;                    return false;                }                if (cp < 0xaab5)                    return true;                if (cp < 0xaab7)                    return false;                if (cp < 0xaab9)                    return true;                if (cp < 0xaabe)                    return false;                if (cp < 0xaac0)                    return true;                if (cp === 0xaac1)                    return true;                if (cp === 0xaaeb)                    return true;                if (cp < 0xaaec)                    return false;                if (cp < 0xaaee)                    return true;                if (cp < 0xaaee)                    return false;                if (cp < 0xaaf0)                    return true;                if (cp === 0xaaf5)                    return true;                return false;            }            if (cp < 0xabf0) {                if (cp === 0xaaf6)                    return true;                if (cp < 0xabe3)                    return false;                if (cp < 0xabe5)                    return true;                if (cp === 0xabe5)                    return true;                if (cp < 0xabe6)                    return false;                if (cp < 0xabe8)                    return true;                if (cp === 0xabe8)                    return true;                if (cp < 0xabe9)                    return false;                if (cp < 0xabeb)                    return true;                if (cp === 0xabec)                    return true;                if (cp === 0xabed)                    return true;                return false;            }            if (cp < 0xabfa)                return true;            if (cp === 0xfb1e)                return true;            if (cp < 0xfe00)                return false;            if (cp < 0xfe10)                return true;            if (cp < 0xfe20)                return false;            if (cp < 0xfe30)                return true;            if (cp < 0xfe33)                return false;            if (cp < 0xfe35)                return true;            if (cp < 0xfe4d)                return false;            if (cp < 0xfe50)                return true;            if (cp < 0xff10)                return false;            if (cp < 0xff1a)                return true;            if (cp === 0xff3f)                return true;            if (cp === 0x101fd)                return true;            return false;        }        if (cp < 0x110b0) {            if (cp < 0x10ae5) {                if (cp === 0x102e0)                    return true;                if (cp < 0x10376)                    return false;                if (cp < 0x1037b)                    return true;                if (cp < 0x104a0)                    return false;                if (cp < 0x104aa)                    return true;                if (cp < 0x10a01)                    return false;                if (cp < 0x10a04)                    return true;                if (cp < 0x10a05)                    return false;                if (cp < 0x10a07)                    return true;                if (cp < 0x10a0c)                    return false;                if (cp < 0x10a10)                    return true;                if (cp < 0x10a38)                    return false;                if (cp < 0x10a3b)                    return true;                if (cp === 0x10a3f)                    return true;                return false;            }            if (cp < 0x10ae7)                return true;            if (cp === 0x11000)                return true;            if (cp === 0x11001)                return true;            if (cp === 0x11002)                return true;            if (cp < 0x11038)                return false;            if (cp < 0x11047)                return true;            if (cp < 0x11066)                return false;            if (cp < 0x11070)                return true;            if (cp < 0x1107f)                return false;            if (cp < 0x11082)                return true;            if (cp === 0x11082)                return true;            return false;        }        if (cp < 0x1112d) {            if (cp < 0x110b0)                return false;            if (cp < 0x110b3)                return true;            if (cp < 0x110b3)                return false;            if (cp < 0x110b7)                return true;            if (cp < 0x110b7)                return false;            if (cp < 0x110b9)                return true;            if (cp < 0x110b9)                return false;            if (cp < 0x110bb)                return true;            if (cp < 0x110f0)                return false;            if (cp < 0x110fa)                return true;            if (cp < 0x11100)                return false;            if (cp < 0x11103)                return true;            if (cp < 0x11127)                return false;            if (cp < 0x1112c)                return true;            if (cp === 0x1112c)                return true;            return false;        }        if (cp < 0x11135)            return true;        if (cp < 0x11136)            return false;        if (cp < 0x11140)            return true;        if (cp === 0x11173)            return true;        if (cp < 0x11180)            return false;        if (cp < 0x11182)            return true;        if (cp === 0x11182)            return true;        if (cp < 0x111b3)            return false;        if (cp < 0x111b6)            return true;        if (cp < 0x111b6)            return false;        if (cp < 0x111bf)            return true;        if (cp < 0x111bf)            return false;        if (cp < 0x111c1)            return true;        if (cp < 0x111ca)            return false;        if (cp < 0x111cd)            return true;        return false;    }    if (cp < 0x11726) {        if (cp < 0x114b3) {            if (cp < 0x11340) {                if (cp < 0x112df) {                    if (cp < 0x111d0)                        return false;                    if (cp < 0x111da)                        return true;                    if (cp < 0x1122c)                        return false;                    if (cp < 0x1122f)                        return true;                    if (cp < 0x1122f)                        return false;                    if (cp < 0x11232)                        return true;                    if (cp < 0x11232)                        return false;                    if (cp < 0x11234)                        return true;                    if (cp === 0x11234)                        return true;                    if (cp === 0x11235)                        return true;                    if (cp < 0x11236)                        return false;                    if (cp < 0x11238)                        return true;                    if (cp === 0x1123e)                        return true;                    return false;                }                if (cp === 0x112df)                    return true;                if (cp < 0x112e0)                    return false;                if (cp < 0x112e3)                    return true;                if (cp < 0x112e3)                    return false;                if (cp < 0x112eb)                    return true;                if (cp < 0x112f0)                    return false;                if (cp < 0x112fa)                    return true;                if (cp < 0x11300)                    return false;                if (cp < 0x11302)                    return true;                if (cp < 0x11302)                    return false;                if (cp < 0x11304)                    return true;                if (cp === 0x1133c)                    return true;                if (cp < 0x1133e)                    return false;                if (cp < 0x11340)                    return true;                return false;            }            if (cp < 0x11435) {                if (cp === 0x11340)                    return true;                if (cp < 0x11341)                    return false;                if (cp < 0x11345)                    return true;                if (cp < 0x11347)                    return false;                if (cp < 0x11349)                    return true;                if (cp < 0x1134b)                    return false;                if (cp < 0x1134e)                    return true;                if (cp === 0x11357)                    return true;                if (cp < 0x11362)                    return false;                if (cp < 0x11364)                    return true;                if (cp < 0x11366)                    return false;                if (cp < 0x1136d)                    return true;                if (cp < 0x11370)                    return false;                if (cp < 0x11375)                    return true;                return false;            }            if (cp < 0x11438)                return true;            if (cp < 0x11438)                return false;            if (cp < 0x11440)                return true;            if (cp < 0x11440)                return false;            if (cp < 0x11442)                return true;            if (cp < 0x11442)                return false;            if (cp < 0x11445)                return true;            if (cp === 0x11445)                return true;            if (cp === 0x11446)                return true;            if (cp < 0x11450)                return false;            if (cp < 0x1145a)                return true;            if (cp < 0x114b0)                return false;            if (cp < 0x114b3)                return true;            return false;        }        if (cp < 0x11633) {            if (cp < 0x115af) {                if (cp < 0x114b3)                    return false;                if (cp < 0x114b9)                    return true;                if (cp === 0x114b9)                    return true;                if (cp === 0x114ba)                    return true;                if (cp < 0x114bb)                    return false;                if (cp < 0x114bf)                    return true;                if (cp < 0x114bf)                    return false;                if (cp < 0x114c1)                    return true;                if (cp === 0x114c1)                    return true;                if (cp < 0x114c2)                    return false;                if (cp < 0x114c4)                    return true;                if (cp < 0x114d0)                    return false;                if (cp < 0x114da)                    return true;                return false;            }            if (cp < 0x115b2)                return true;            if (cp < 0x115b2)                return false;            if (cp < 0x115b6)                return true;            if (cp < 0x115b8)                return false;            if (cp < 0x115bc)                return true;            if (cp < 0x115bc)                return false;            if (cp < 0x115be)                return true;            if (cp === 0x115be)                return true;            if (cp < 0x115bf)                return false;            if (cp < 0x115c1)                return true;            if (cp < 0x115dc)                return false;            if (cp < 0x115de)                return true;            if (cp < 0x11630)                return false;            if (cp < 0x11633)                return true;            return false;        }        if (cp < 0x116ad) {            if (cp < 0x11633)                return false;            if (cp < 0x1163b)                return true;            if (cp < 0x1163b)                return false;            if (cp < 0x1163d)                return true;            if (cp === 0x1163d)                return true;            if (cp === 0x1163e)                return true;            if (cp < 0x1163f)                return false;            if (cp < 0x11641)                return true;            if (cp < 0x11650)                return false;            if (cp < 0x1165a)                return true;            if (cp === 0x116ab)                return true;            if (cp === 0x116ac)                return true;            return false;        }        if (cp === 0x116ad)            return true;        if (cp < 0x116ae)            return false;        if (cp < 0x116b0)            return true;        if (cp < 0x116b0)            return false;        if (cp < 0x116b6)            return true;        if (cp === 0x116b6)            return true;        if (cp === 0x116b7)            return true;        if (cp < 0x116c0)            return false;        if (cp < 0x116ca)            return true;        if (cp < 0x1171d)            return false;        if (cp < 0x11720)            return true;        if (cp < 0x11720)            return false;        if (cp < 0x11722)            return true;        if (cp < 0x11722)            return false;        if (cp < 0x11726)            return true;        return false;    }    if (cp < 0x11d3f) {        if (cp < 0x11a98) {            if (cp < 0x11a39) {                if (cp === 0x11726)                    return true;                if (cp < 0x11727)                    return false;                if (cp < 0x1172c)                    return true;                if (cp < 0x11730)                    return false;                if (cp < 0x1173a)                    return true;                if (cp < 0x118e0)                    return false;                if (cp < 0x118ea)                    return true;                if (cp < 0x11a01)                    return false;                if (cp < 0x11a07)                    return true;                if (cp < 0x11a07)                    return false;                if (cp < 0x11a09)                    return true;                if (cp < 0x11a09)                    return false;                if (cp < 0x11a0b)                    return true;                if (cp < 0x11a33)                    return false;                if (cp < 0x11a39)                    return true;                return false;            }            if (cp === 0x11a39)                return true;            if (cp < 0x11a3b)                return false;            if (cp < 0x11a3f)                return true;            if (cp === 0x11a47)                return true;            if (cp < 0x11a51)                return false;            if (cp < 0x11a57)                return true;            if (cp < 0x11a57)                return false;            if (cp < 0x11a59)                return true;            if (cp < 0x11a59)                return false;            if (cp < 0x11a5c)                return true;            if (cp < 0x11a8a)                return false;            if (cp < 0x11a97)                return true;            if (cp === 0x11a97)                return true;            return false;        }        if (cp < 0x11ca9) {            if (cp < 0x11a98)                return false;            if (cp < 0x11a9a)                return true;            if (cp === 0x11c2f)                return true;            if (cp < 0x11c30)                return false;            if (cp < 0x11c37)                return true;            if (cp < 0x11c38)                return false;            if (cp < 0x11c3e)                return true;            if (cp === 0x11c3e)                return true;            if (cp === 0x11c3f)                return true;            if (cp < 0x11c50)                return false;            if (cp < 0x11c5a)                return true;            if (cp < 0x11c92)                return false;            if (cp < 0x11ca8)                return true;            return false;        }        if (cp === 0x11ca9)            return true;        if (cp < 0x11caa)            return false;        if (cp < 0x11cb1)            return true;        if (cp === 0x11cb1)            return true;        if (cp < 0x11cb2)            return false;        if (cp < 0x11cb4)            return true;        if (cp === 0x11cb4)            return true;        if (cp < 0x11cb5)            return false;        if (cp < 0x11cb7)            return true;        if (cp < 0x11d31)            return false;        if (cp < 0x11d37)            return true;        if (cp === 0x11d3a)            return true;        if (cp < 0x11d3c)            return false;        if (cp < 0x11d3e)            return true;        return false;    }    if (cp < 0x1d242) {        if (cp < 0x16f8f) {            if (cp < 0x11d3f)                return false;            if (cp < 0x11d46)                return true;            if (cp === 0x11d47)                return true;            if (cp < 0x11d50)                return false;            if (cp < 0x11d5a)                return true;            if (cp < 0x16a60)                return false;            if (cp < 0x16a6a)                return true;            if (cp < 0x16af0)                return false;            if (cp < 0x16af5)                return true;            if (cp < 0x16b30)                return false;            if (cp < 0x16b37)                return true;            if (cp < 0x16b50)                return false;            if (cp < 0x16b5a)                return true;            if (cp < 0x16f51)                return false;            if (cp < 0x16f7f)                return true;            return false;        }        if (cp < 0x16f93)            return true;        if (cp < 0x1bc9d)            return false;        if (cp < 0x1bc9f)            return true;        if (cp < 0x1d165)            return false;        if (cp < 0x1d167)            return true;        if (cp < 0x1d167)            return false;        if (cp < 0x1d16a)            return true;        if (cp < 0x1d16d)            return false;        if (cp < 0x1d173)            return true;        if (cp < 0x1d17b)            return false;        if (cp < 0x1d183)            return true;        if (cp < 0x1d185)            return false;        if (cp < 0x1d18c)            return true;        if (cp < 0x1d1aa)            return false;        if (cp < 0x1d1ae)            return true;        return false;    }    if (cp < 0x1e000) {        if (cp < 0x1d242)            return false;        if (cp < 0x1d245)            return true;        if (cp < 0x1d7ce)            return false;        if (cp < 0x1d800)            return true;        if (cp < 0x1da00)            return false;        if (cp < 0x1da37)            return true;        if (cp < 0x1da3b)            return false;        if (cp < 0x1da6d)            return true;        if (cp === 0x1da75)            return true;        if (cp === 0x1da84)            return true;        if (cp < 0x1da9b)            return false;        if (cp < 0x1daa0)            return true;        if (cp < 0x1daa1)            return false;        if (cp < 0x1dab0)            return true;        return false;    }    if (cp < 0x1e007)        return true;    if (cp < 0x1e008)        return false;    if (cp < 0x1e019)        return true;    if (cp < 0x1e01b)        return false;    if (cp < 0x1e022)        return true;    if (cp < 0x1e023)        return false;    if (cp < 0x1e025)        return true;    if (cp < 0x1e026)        return false;    if (cp < 0x1e02b)        return true;    if (cp < 0x1e8d0)        return false;    if (cp < 0x1e8d7)        return true;    if (cp < 0x1e944)        return false;    if (cp < 0x1e94b)        return true;    if (cp < 0x1e950)        return false;    if (cp < 0x1e95a)        return true;    if (cp < 0xe0100)        return false;    if (cp < 0xe01f0)        return true;    return false;}const PropertyData = {    $LONE: new Set([        "ASCII",        "ASCII_Hex_Digit",        "AHex",        "Alphabetic",        "Alpha",        "Any",        "Assigned",        "Bidi_Control",        "Bidi_C",        "Bidi_Mirrored",        "Bidi_M",        "Case_Ignorable",        "CI",        "Cased",        "Changes_When_Casefolded",        "CWCF",        "Changes_When_Casemapped",        "CWCM",        "Changes_When_Lowercased",        "CWL",        "Changes_When_NFKC_Casefolded",        "CWKCF",        "Changes_When_Titlecased",        "CWT",        "Changes_When_Uppercased",        "CWU",        "Dash",        "Default_Ignorable_Code_Point",        "DI",        "Deprecated",        "Dep",        "Diacritic",        "Dia",        "Emoji",        "Emoji_Component",        "Emoji_Modifier",        "Emoji_Modifier_Base",        "Emoji_Presentation",        "Extender",        "Ext",        "Grapheme_Base",        "Gr_Base",        "Grapheme_Extend",        "Gr_Ext",        "Hex_Digit",        "Hex",        "IDS_Binary_Operator",        "IDSB",        "IDS_Trinary_Operator",        "IDST",        "ID_Continue",        "IDC",        "ID_Start",        "IDS",        "Ideographic",        "Ideo",        "Join_Control",        "Join_C",        "Logical_Order_Exception",        "LOE",        "Lowercase",        "Lower",        "Math",        "Noncharacter_Code_Point",        "NChar",        "Pattern_Syntax",        "Pat_Syn",        "Pattern_White_Space",        "Pat_WS",        "Quotation_Mark",        "QMark",        "Radical",        "Regional_Indicator",        "RI",        "Sentence_Terminal",        "STerm",        "Soft_Dotted",        "SD",        "Terminal_Punctuation",        "Term",        "Unified_Ideograph",        "UIdeo",        "Uppercase",        "Upper",        "Variation_Selector",        "VS",        "White_Space",        "space",        "XID_Continue",        "XIDC",        "XID_Start",        "XIDS",    ]),    General_Category: new Set([        "Cased_Letter",        "LC",        "Close_Punctuation",        "Pe",        "Connector_Punctuation",        "Pc",        "Control",        "Cc",        "cntrl",        "Currency_Symbol",        "Sc",        "Dash_Punctuation",        "Pd",        "Decimal_Number",        "Nd",        "digit",        "Enclosing_Mark",        "Me",        "Final_Punctuation",        "Pf",        "Format",        "Cf",        "Initial_Punctuation",        "Pi",        "Letter",        "L",        "Letter_Number",        "Nl",        "Line_Separator",        "Zl",        "Lowercase_Letter",        "Ll",        "Mark",        "M",        "Combining_Mark",        "Math_Symbol",        "Sm",        "Modifier_Letter",        "Lm",        "Modifier_Symbol",        "Sk",        "Nonspacing_Mark",        "Mn",        "Number",        "N",        "Open_Punctuation",        "Ps",        "Other",        "C",        "Other_Letter",        "Lo",        "Other_Number",        "No",        "Other_Punctuation",        "Po",        "Other_Symbol",        "So",        "Paragraph_Separator",        "Zp",        "Private_Use",        "Co",        "Punctuation",        "P",        "punct",        "Separator",        "Z",        "Space_Separator",        "Zs",        "Spacing_Mark",        "Mc",        "Surrogate",        "Cs",        "Symbol",        "S",        "Titlecase_Letter",        "Lt",        "Unassigned",        "Cn",        "Uppercase_Letter",        "Lu",    ]),    Script: new Set([        "Adlam",        "Adlm",        "Ahom",        "Anatolian_Hieroglyphs",        "Hluw",        "Arabic",        "Arab",        "Armenian",        "Armn",        "Avestan",        "Avst",        "Balinese",        "Bali",        "Bamum",        "Bamu",        "Bassa_Vah",        "Bass",        "Batak",        "Batk",        "Bengali",        "Beng",        "Bhaiksuki",        "Bhks",        "Bopomofo",        "Bopo",        "Brahmi",        "Brah",        "Braille",        "Brai",        "Buginese",        "Bugi",        "Buhid",        "Buhd",        "Canadian_Aboriginal",        "Cans",        "Carian",        "Cari",        "Caucasian_Albanian",        "Aghb",        "Chakma",        "Cakm",        "Cham",        "Cherokee",        "Cher",        "Common",        "Zyyy",        "Coptic",        "Copt",        "Qaac",        "Cuneiform",        "Xsux",        "Cypriot",        "Cprt",        "Cyrillic",        "Cyrl",        "Deseret",        "Dsrt",        "Devanagari",        "Deva",        "Duployan",        "Dupl",        "Egyptian_Hieroglyphs",        "Egyp",        "Elbasan",        "Elba",        "Ethiopic",        "Ethi",        "Georgian",        "Geor",        "Glagolitic",        "Glag",        "Gothic",        "Goth",        "Grantha",        "Gran",        "Greek",        "Grek",        "Gujarati",        "Gujr",        "Gurmukhi",        "Guru",        "Han",        "Hani",        "Hangul",        "Hang",        "Hanunoo",        "Hano",        "Hatran",        "Hatr",        "Hebrew",        "Hebr",        "Hiragana",        "Hira",        "Imperial_Aramaic",        "Armi",        "Inherited",        "Zinh",        "Qaai",        "Inscriptional_Pahlavi",        "Phli",        "Inscriptional_Parthian",        "Prti",        "Javanese",        "Java",        "Kaithi",        "Kthi",        "Kannada",        "Knda",        "Katakana",        "Kana",        "Kayah_Li",        "Kali",        "Kharoshthi",        "Khar",        "Khmer",        "Khmr",        "Khojki",        "Khoj",        "Khudawadi",        "Sind",        "Lao",        "Laoo",        "Latin",        "Latn",        "Lepcha",        "Lepc",        "Limbu",        "Limb",        "Linear_A",        "Lina",        "Linear_B",        "Linb",        "Lisu",        "Lycian",        "Lyci",        "Lydian",        "Lydi",        "Mahajani",        "Mahj",        "Malayalam",        "Mlym",        "Mandaic",        "Mand",        "Manichaean",        "Mani",        "Marchen",        "Marc",        "Masaram_Gondi",        "Gonm",        "Meetei_Mayek",        "Mtei",        "Mende_Kikakui",        "Mend",        "Meroitic_Cursive",        "Merc",        "Meroitic_Hieroglyphs",        "Mero",        "Miao",        "Plrd",        "Modi",        "Mongolian",        "Mong",        "Mro",        "Mroo",        "Multani",        "Mult",        "Myanmar",        "Mymr",        "Nabataean",        "Nbat",        "New_Tai_Lue",        "Talu",        "Newa",        "Nko",        "Nkoo",        "Nushu",        "Nshu",        "Ogham",        "Ogam",        "Ol_Chiki",        "Olck",        "Old_Hungarian",        "Hung",        "Old_Italic",        "Ital",        "Old_North_Arabian",        "Narb",        "Old_Permic",        "Perm",        "Old_Persian",        "Xpeo",        "Old_South_Arabian",        "Sarb",        "Old_Turkic",        "Orkh",        "Oriya",        "Orya",        "Osage",        "Osge",        "Osmanya",        "Osma",        "Pahawh_Hmong",        "Hmng",        "Palmyrene",        "Palm",        "Pau_Cin_Hau",        "Pauc",        "Phags_Pa",        "Phag",        "Phoenician",        "Phnx",        "Psalter_Pahlavi",        "Phlp",        "Rejang",        "Rjng",        "Runic",        "Runr",        "Samaritan",        "Samr",        "Saurashtra",        "Saur",        "Sharada",        "Shrd",        "Shavian",        "Shaw",        "Siddham",        "Sidd",        "SignWriting",        "Sgnw",        "Sinhala",        "Sinh",        "Sora_Sompeng",        "Sora",        "Soyombo",        "Soyo",        "Sundanese",        "Sund",        "Syloti_Nagri",        "Sylo",        "Syriac",        "Syrc",        "Tagalog",        "Tglg",        "Tagbanwa",        "Tagb",        "Tai_Le",        "Tale",        "Tai_Tham",        "Lana",        "Tai_Viet",        "Tavt",        "Takri",        "Takr",        "Tamil",        "Taml",        "Tangut",        "Tang",        "Telugu",        "Telu",        "Thaana",        "Thaa",        "Thai",        "Tibetan",        "Tibt",        "Tifinagh",        "Tfng",        "Tirhuta",        "Tirh",        "Ugaritic",        "Ugar",        "Vai",        "Vaii",        "Warang_Citi",        "Wara",        "Yi",        "Yiii",        "Zanabazar_Square",        "Zanb",    ]),};PropertyData.gc = PropertyData.General_Category;PropertyData.sc = PropertyData.Script_Extensions = PropertyData.scx =    PropertyData.Script;const Backspace = 0x08;const CharacterTabulation = 0x09;const LineFeed = 0x0a;const LineTabulation = 0x0b;const FormFeed = 0x0c;const CarriageReturn = 0x0d;const ExclamationMark = 0x21;const DollarSign = 0x24;const LeftParenthesis = 0x28;const RightParenthesis = 0x29;const Asterisk = 0x2a;const PlusSign = 0x2b;const Comma = 0x2c;const HyphenMinus = 0x2d;const FullStop = 0x2e;const Solidus = 0x2f;const DigitZero = 0x30;const DigitOne = 0x31;const DigitSeven = 0x37;const DigitNine = 0x39;const Colon = 0x3a;const LessThanSign = 0x3c;const EqualsSign = 0x3d;const GreaterThanSign = 0x3e;const QuestionMark = 0x3f;const LatinCapitalLetterA = 0x41;const LatinCapitalLetterB = 0x42;const LatinCapitalLetterD = 0x44;const LatinCapitalLetterF = 0x46;const LatinCapitalLetterP = 0x50;const LatinCapitalLetterS = 0x53;const LatinCapitalLetterW = 0x57;const LatinCapitalLetterZ = 0x5a;const LowLine = 0x5f;const LatinSmallLetterA = 0x61;const LatinSmallLetterB = 0x62;const LatinSmallLetterC = 0x63;const LatinSmallLetterD = 0x64;const LatinSmallLetterF = 0x66;const LatinSmallLetterG = 0x67;const LatinSmallLetterI = 0x69;const LatinSmallLetterK = 0x6b;const LatinSmallLetterM = 0x6d;const LatinSmallLetterN = 0x6e;const LatinSmallLetterP = 0x70;const LatinSmallLetterR = 0x72;const LatinSmallLetterS = 0x73;const LatinSmallLetterT = 0x74;const LatinSmallLetterU = 0x75;const LatinSmallLetterV = 0x76;const LatinSmallLetterW = 0x77;const LatinSmallLetterX = 0x78;const LatinSmallLetterY = 0x79;const LatinSmallLetterZ = 0x7a;const LeftSquareBracket = 0x5b;const ReverseSolidus = 0x5c;const RightSquareBracket = 0x5d;const CircumflexAccent = 0x5e;const LeftCurlyBracket = 0x7b;const VerticalLine = 0x7c;const RightCurlyBracket = 0x7d;const ZeroWidthNonJoiner = 0x200c;const ZeroWidthJoiner = 0x200d;const LineSeparator = 0x2028;const ParagraphSeparator = 0x2029;const MinCodePoint = 0x00;const MaxCodePoint = 0x10ffff;function isLatinLetter(code) {    return ((code >= LatinCapitalLetterA && code <= LatinCapitalLetterZ) ||        (code >= LatinSmallLetterA && code <= LatinSmallLetterZ));}function isDecimalDigit(code) {    return code >= DigitZero && code <= DigitNine;}function isOctalDigit(code) {    return code >= DigitZero && code <= DigitSeven;}function isHexDigit(code) {    return ((code >= DigitZero && code <= DigitNine) ||        (code >= LatinCapitalLetterA && code <= LatinCapitalLetterF) ||        (code >= LatinSmallLetterA && code <= LatinSmallLetterF));}function isLineTerminator(code) {    return (code === LineFeed ||        code === CarriageReturn ||        code === LineSeparator ||        code === ParagraphSeparator);}function isValidUnicode(code) {    return code >= MinCodePoint && code <= MaxCodePoint;}function digitToInt(code) {    if (code >= LatinSmallLetterA && code <= LatinSmallLetterF) {        return code - LatinSmallLetterA + 10;    }    if (code >= LatinCapitalLetterA && code <= LatinCapitalLetterF) {        return code - LatinCapitalLetterA + 10;    }    return code - DigitZero;}function isSyntaxCharacter(cp) {    return (cp === CircumflexAccent ||        cp === DollarSign ||        cp === ReverseSolidus ||        cp === FullStop ||        cp === Asterisk ||        cp === PlusSign ||        cp === QuestionMark ||        cp === LeftParenthesis ||        cp === RightParenthesis ||        cp === LeftSquareBracket ||        cp === RightSquareBracket ||        cp === LeftCurlyBracket ||        cp === RightCurlyBracket ||        cp === VerticalLine);}function isRegExpIdentifierStart(cp) {    return isIdStart(cp) || cp === DollarSign || cp === LowLine;}function isRegExpIdentifierPart(cp) {    return (isIdContinue(cp) ||        cp === DollarSign ||        cp === LowLine ||        cp === ZeroWidthNonJoiner ||        cp === ZeroWidthJoiner);}function isUnicodePropertyNameCharacter(cp) {    return isLatinLetter(cp) || cp === LowLine;}function isUnicodePropertyValueCharacter(cp) {    return isUnicodePropertyNameCharacter(cp) || isDecimalDigit(cp);}function isValidUnicodeProperty(name, value) {    return PropertyData.hasOwnProperty(name) && PropertyData[name].has(value);}function isValidUnicodePropertyName(name) {    return PropertyData.$LONE.has(name);}class RegExpValidator {    constructor(options) {        this._reader = new Reader();        this._uFlag = false;        this._nFlag = false;        this._lastIntValue = 0;        this._lastMinValue = 0;        this._lastMaxValue = 0;        this._lastStrValue = "";        this._lastKeyValue = "";        this._lastValValue = "";        this._lastAssertionIsQuantifiable = false;        this._numCapturingParens = 0;        this._groupNames = new Set();        this._backreferenceNames = new Set();        this._options = options || {};    }    validateLiteral(source, start = 0, end = source.length) {        this._uFlag = this._nFlag = false;        this.reset(source, start, end);        this.onLiteralEnter(start);        if (this.eat(Solidus) && this.eatRegExpBody() && this.eat(Solidus)) {            const flagStart = this.index;            const uFlag = source.indexOf("u", flagStart) !== -1;            this.validateFlags(source, flagStart, end);            this.validatePattern(source, start + 1, flagStart - 1, uFlag);        }        else if (start >= end) {            this.raise("Empty");        }        else {            const c = String.fromCodePoint(this.currentCodePoint);            this.raise(`Unexpected character '${c}'`);        }        this.onLiteralLeave(start, end);    }    validateFlags(source, start = 0, end = source.length) {        const existingFlags = new Set();        let global = false;        let ignoreCase = false;        let multiline = false;        let sticky = false;        let unicode = false;        let dotAll = false;        for (let i = start; i < end; ++i) {            const flag = source.charCodeAt(i);            if (existingFlags.has(flag)) {                this.raise(`Duplicated flag '${source[i]}'`);            }            existingFlags.add(flag);            if (flag === LatinSmallLetterG) {                global = true;            }            else if (flag === LatinSmallLetterI) {                ignoreCase = true;            }            else if (flag === LatinSmallLetterM) {                multiline = true;            }            else if (flag === LatinSmallLetterU && this.ecmaVersion >= 2015) {                unicode = true;            }            else if (flag === LatinSmallLetterY && this.ecmaVersion >= 2015) {                sticky = true;            }            else if (flag === LatinSmallLetterS && this.ecmaVersion >= 2018) {                dotAll = true;            }            else {                this.raise(`Invalid flag '${source[i]}'`);            }        }        this.onFlags(start, end, global, ignoreCase, multiline, unicode, sticky, dotAll);    }    validatePattern(source, start = 0, end = source.length, uFlag = false) {        this._uFlag = uFlag && this.ecmaVersion >= 2015;        this._nFlag = uFlag && this.ecmaVersion >= 2018;        this.reset(source, start, end);        this.pattern();        if (!this._nFlag &&            this.ecmaVersion >= 2018 &&            this._groupNames.size > 0) {            this._nFlag = true;            this.rewind(start);            this.pattern();        }    }    get strict() {        return Boolean(this._options.strict || this._uFlag);    }    get ecmaVersion() {        return this._options.ecmaVersion || 2018;    }    onLiteralEnter(start) {        if (this._options.onLiteralEnter) {            this._options.onLiteralEnter(start);        }    }    onLiteralLeave(start, end) {        if (this._options.onLiteralLeave) {            this._options.onLiteralLeave(start, end);        }    }    onFlags(start, end, global, ignoreCase, multiline, unicode, sticky, dotAll) {        if (this._options.onFlags) {            this._options.onFlags(start, end, global, ignoreCase, multiline, unicode, sticky, dotAll);        }    }    onPatternEnter(start) {        if (this._options.onPatternEnter) {            this._options.onPatternEnter(start);        }    }    onPatternLeave(start, end) {        if (this._options.onPatternLeave) {            this._options.onPatternLeave(start, end);        }    }    onDisjunctionEnter(start) {        if (this._options.onDisjunctionEnter) {            this._options.onDisjunctionEnter(start);        }    }    onDisjunctionLeave(start, end) {        if (this._options.onDisjunctionLeave) {            this._options.onDisjunctionLeave(start, end);        }    }    onAlternativeEnter(start, index) {        if (this._options.onAlternativeEnter) {            this._options.onAlternativeEnter(start, index);        }    }    onAlternativeLeave(start, end, index) {        if (this._options.onAlternativeLeave) {            this._options.onAlternativeLeave(start, end, index);        }    }    onGroupEnter(start) {        if (this._options.onGroupEnter) {            this._options.onGroupEnter(start);        }    }    onGroupLeave(start, end) {        if (this._options.onGroupLeave) {            this._options.onGroupLeave(start, end);        }    }    onCapturingGroupEnter(start, name) {        if (this._options.onCapturingGroupEnter) {            this._options.onCapturingGroupEnter(start, name);        }    }    onCapturingGroupLeave(start, end, name) {        if (this._options.onCapturingGroupLeave) {            this._options.onCapturingGroupLeave(start, end, name);        }    }    onQuantifier(start, end, min, max, greedy) {        if (this._options.onQuantifier) {            this._options.onQuantifier(start, end, min, max, greedy);        }    }    onLookaroundAssertionEnter(start, kind, negate) {        if (this._options.onLookaroundAssertionEnter) {            this._options.onLookaroundAssertionEnter(start, kind, negate);        }    }    onLookaroundAssertionLeave(start, end, kind, negate) {        if (this._options.onLookaroundAssertionLeave) {            this._options.onLookaroundAssertionLeave(start, end, kind, negate);        }    }    onEdgeAssertion(start, end, kind) {        if (this._options.onEdgeAssertion) {            this._options.onEdgeAssertion(start, end, kind);        }    }    onWordBoundaryAssertion(start, end, kind, negate) {        if (this._options.onWordBoundaryAssertion) {            this._options.onWordBoundaryAssertion(start, end, kind, negate);        }    }    onAnyCharacterSet(start, end, kind) {        if (this._options.onAnyCharacterSet) {            this._options.onAnyCharacterSet(start, end, kind);        }    }    onEscapeCharacterSet(start, end, kind, negate) {        if (this._options.onEscapeCharacterSet) {            this._options.onEscapeCharacterSet(start, end, kind, negate);        }    }    onUnicodePropertyCharacterSet(start, end, kind, key, value, negate) {        if (this._options.onUnicodePropertyCharacterSet) {            this._options.onUnicodePropertyCharacterSet(start, end, kind, key, value, negate);        }    }    onCharacter(start, end, value) {        if (this._options.onCharacter) {            this._options.onCharacter(start, end, value);        }    }    onBackreference(start, end, ref) {        if (this._options.onBackreference) {            this._options.onBackreference(start, end, ref);        }    }    onCharacterClassEnter(start, negate) {        if (this._options.onCharacterClassEnter) {            this._options.onCharacterClassEnter(start, negate);        }    }    onCharacterClassLeave(start, end, negate) {        if (this._options.onCharacterClassLeave) {            this._options.onCharacterClassLeave(start, end, negate);        }    }    onCharacterClassRange(start, end, min, max) {        if (this._options.onCharacterClassRange) {            this._options.onCharacterClassRange(start, end, min, max);        }    }    get source() {        return this._reader.source;    }    get index() {        return this._reader.index;    }    get currentCodePoint() {        return this._reader.currentCodePoint;    }    get nextCodePoint() {        return this._reader.nextCodePoint;    }    get nextCodePoint2() {        return this._reader.nextCodePoint2;    }    get nextCodePoint3() {        return this._reader.nextCodePoint3;    }    reset(source, start, end) {        this._reader.reset(source, start, end, this._uFlag);    }    rewind(index) {        this._reader.rewind(index);    }    advance() {        this._reader.advance();    }    eat(cp) {        return this._reader.eat(cp);    }    eat2(cp1, cp2) {        return this._reader.eat2(cp1, cp2);    }    eat3(cp1, cp2, cp3) {        return this._reader.eat3(cp1, cp2, cp3);    }    raise(message) {        throw new RegExpSyntaxError(this.source, this._uFlag, this.index, message);    }    eatRegExpBody() {        const start = this.index;        let inClass = false;        let escaped = false;        for (;;) {            const cp = this.currentCodePoint;            if (cp === -1 || isLineTerminator(cp)) {                const kind = inClass ? "character class" : "regular expression";                this.raise(`Unterminated ${kind}`);            }            if (escaped) {                escaped = false;            }            else if (cp === ReverseSolidus) {                escaped = true;            }            else if (cp === LeftSquareBracket) {                inClass = true;            }            else if (cp === RightSquareBracket) {                inClass = false;            }            else if ((cp === Solidus && !inClass) ||                (cp === Asterisk && this.index === start)) {                break;            }            this.advance();        }        return this.index !== start;    }    pattern() {        const start = this.index;        this._numCapturingParens = this.countCapturingParens();        this._groupNames.clear();        this._backreferenceNames.clear();        this.onPatternEnter(start);        this.disjunction();        const cp = this.currentCodePoint;        if (this.currentCodePoint !== -1) {            if (cp === RightParenthesis) {                this.raise("Unmatched ')'");            }            if (cp === RightSquareBracket || cp === RightCurlyBracket) {                this.raise("Lone quantifier brackets");            }            const c = String.fromCodePoint(cp);            this.raise(`Unexpected character '${c}'`);        }        this._backreferenceNames.forEach(name => {            if (!this._groupNames.has(name)) {                this.raise("Invalid named capture referenced");            }        });        this.onPatternLeave(start, this.index);    }    countCapturingParens() {        const start = this.index;        let inClass = false;        let escaped = false;        let count = 0;        let cp = 0;        while ((cp = this.currentCodePoint) !== -1) {            if (escaped) {                escaped = false;            }            else if (cp === ReverseSolidus) {                escaped = true;            }            else if (cp === LeftSquareBracket) {                inClass = true;            }            else if (cp === RightSquareBracket) {                inClass = false;            }            else if (cp === LeftParenthesis &&                !inClass &&                (this.nextCodePoint !== QuestionMark ||                    (this.nextCodePoint2 === LessThanSign &&                        this.nextCodePoint3 !== EqualsSign &&                        this.nextCodePoint3 !== ExclamationMark))) {                count += 1;            }            this.advance();        }        this.rewind(start);        return count;    }    disjunction() {        const start = this.index;        let i = 0;        this.onDisjunctionEnter(start);        this.alternative(i++);        while (this.eat(VerticalLine)) {            this.alternative(i++);        }        if (this.eatQuantifier(true)) {            this.raise("Nothing to repeat");        }        if (this.eat(LeftCurlyBracket)) {            this.raise("Lone quantifier brackets");        }        this.onDisjunctionLeave(start, this.index);    }    alternative(i) {        const start = this.index;        this.onAlternativeEnter(start, i);        while (this.currentCodePoint !== -1 && this.eatTerm())            ;        this.onAlternativeLeave(start, this.index, i);    }    eatTerm() {        if (this.eatAssertion()) {            if (this._lastAssertionIsQuantifiable) {                this.eatQuantifier();            }            return true;        }        if (this.strict ? this.eatAtom() : this.eatExtendedAtom()) {            this.eatQuantifier();            return true;        }        return false;    }    eatAssertion() {        const start = this.index;        this._lastAssertionIsQuantifiable = false;        if (this.eat(CircumflexAccent)) {            this.onEdgeAssertion(start, this.index, "start");            return true;        }        if (this.eat(DollarSign)) {            this.onEdgeAssertion(start, this.index, "end");            return true;        }        if (this.eat2(ReverseSolidus, LatinCapitalLetterB)) {            this.onWordBoundaryAssertion(start, this.index, "word", true);            return true;        }        if (this.eat2(ReverseSolidus, LatinSmallLetterB)) {            this.onWordBoundaryAssertion(start, this.index, "word", false);            return true;        }        if (this.eat2(LeftParenthesis, QuestionMark)) {            const lookbehind = this.ecmaVersion >= 2018 && this.eat(LessThanSign);            let negate = false;            if (this.eat(EqualsSign) || (negate = this.eat(ExclamationMark))) {                const kind = lookbehind ? "lookbehind" : "lookahead";                this.onLookaroundAssertionEnter(start, kind, negate);                this.disjunction();                if (!this.eat(RightParenthesis)) {                    this.raise("Unterminated group");                }                this._lastAssertionIsQuantifiable = !lookbehind && !this.strict;                this.onLookaroundAssertionLeave(start, this.index, kind, negate);                return true;            }            this.rewind(start);        }        return false;    }    eatQuantifier(noError = false) {        const start = this.index;        let min = 0;        let max = 0;        let greedy = false;        if (this.eat(Asterisk)) {            min = 0;            max = Number.POSITIVE_INFINITY;        }        else if (this.eat(PlusSign)) {            min = 1;            max = Number.POSITIVE_INFINITY;        }        else if (this.eat(QuestionMark)) {            min = 0;            max = 1;        }        else if (this.eatBracedQuantifier(noError)) {            min = this._lastMinValue;            max = this._lastMaxValue;        }        else {            return false;        }        greedy = !this.eat(QuestionMark);        if (!noError) {            this.onQuantifier(start, this.index, min, max, greedy);        }        return true;    }    eatBracedQuantifier(noError) {        const start = this.index;        if (this.eat(LeftCurlyBracket)) {            this._lastMinValue = 0;            this._lastMaxValue = Number.POSITIVE_INFINITY;            if (this.eatDecimalDigits()) {                this._lastMinValue = this._lastMaxValue = this._lastIntValue;                if (this.eat(Comma)) {                    this._lastMaxValue = this.eatDecimalDigits()                        ? this._lastIntValue                        : Number.POSITIVE_INFINITY;                }                if (this.eat(RightCurlyBracket)) {                    if (!noError && this._lastMaxValue < this._lastMinValue) {                        this.raise("numbers out of order in {} quantifier");                    }                    return true;                }            }            if (!noError && this.strict) {                this.raise("Incomplete quantifier");            }            this.rewind(start);        }        return false;    }    eatAtom() {        return (this.eatPatternCharacter() ||            this.eatDot() ||            this.eatReverseSolidusAtomEscape() ||            this.eatCharacterClass() ||            this.eatUncapturingGroup() ||            this.eatCapturingGroup());    }    eatDot() {        if (this.eat(FullStop)) {            this.onAnyCharacterSet(this.index - 1, this.index, "any");            return true;        }        return false;    }    eatReverseSolidusAtomEscape() {        const start = this.index;        if (this.eat(ReverseSolidus)) {            if (this.eatAtomEscape()) {                return true;            }            this.rewind(start);        }        return false;    }    eatUncapturingGroup() {        const start = this.index;        if (this.eat3(LeftParenthesis, QuestionMark, Colon)) {            this.onGroupEnter(start);            this.disjunction();            if (!this.eat(RightParenthesis)) {                this.raise("Unterminated group");            }            this.onGroupLeave(start, this.index);            return true;        }        return false;    }    eatCapturingGroup() {        const start = this.index;        if (this.eat(LeftParenthesis)) {            this._lastStrValue = "";            if (this.ecmaVersion >= 2018) {                this.groupSpecifier();            }            else if (this.currentCodePoint === QuestionMark) {                this.raise("Invalid group");            }            const name = this._lastStrValue || null;            this.onCapturingGroupEnter(start, name);            this.disjunction();            if (!this.eat(RightParenthesis)) {                this.raise("Unterminated group");            }            this.onCapturingGroupLeave(start, this.index, name);            return true;        }        return false;    }    eatExtendedAtom() {        return (this.eatDot() ||            this.eatReverseSolidusAtomEscape() ||            this.eatCharacterClass() ||            this.eatUncapturingGroup() ||            this.eatCapturingGroup() ||            this.eatInvalidBracedQuantifier() ||            this.eatExtendedPatternCharacter());    }    eatInvalidBracedQuantifier() {        if (this.eatBracedQuantifier(true)) {            this.raise("Nothing to repeat");        }        return false;    }    eatSyntaxCharacter() {        if (isSyntaxCharacter(this.currentCodePoint)) {            this._lastIntValue = this.currentCodePoint;            this.advance();            return true;        }        return false;    }    eatPatternCharacter() {        const start = this.index;        const cp = this.currentCodePoint;        if (cp !== -1 && !isSyntaxCharacter(cp)) {            this.advance();            this.onCharacter(start, this.index, cp);            return true;        }        return false;    }    eatExtendedPatternCharacter() {        const start = this.index;        const cp = this.currentCodePoint;        if (cp !== -1 &&            cp !== CircumflexAccent &&            cp !== DollarSign &&            cp !== FullStop &&            cp !== Asterisk &&            cp !== PlusSign &&            cp !== QuestionMark &&            cp !== LeftParenthesis &&            cp !== RightParenthesis &&            cp !== LeftSquareBracket &&            cp !== VerticalLine) {            this.advance();            this.onCharacter(start, this.index, cp);            return true;        }        return false;    }    groupSpecifier() {        this._lastStrValue = "";        if (this.eat(QuestionMark)) {            if (this.eatGroupName()) {                if (!this._groupNames.has(this._lastStrValue)) {                    this._groupNames.add(this._lastStrValue);                    return;                }                this.raise("Duplicate capture group name");            }            this.raise("Invalid group");        }    }    eatGroupName() {        this._lastStrValue = "";        if (this.eat(LessThanSign)) {            if (this.eatRegExpIdentifierName() && this.eat(GreaterThanSign)) {                return true;            }            this.raise("Invalid capture group name");        }        return false;    }    eatRegExpIdentifierName() {        this._lastStrValue = "";        if (this.eatRegExpIdentifierStart()) {            this._lastStrValue += String.fromCodePoint(this._lastIntValue);            while (this.eatRegExpIdentifierPart()) {                this._lastStrValue += String.fromCodePoint(this._lastIntValue);            }            return true;        }        return false;    }    eatRegExpIdentifierStart() {        const start = this.index;        let cp = this.currentCodePoint;        this.advance();        if (cp === ReverseSolidus && this.eatRegExpUnicodeEscapeSequence()) {            cp = this._lastIntValue;        }        if (isRegExpIdentifierStart(cp)) {            this._lastIntValue = cp;            return true;        }        if (this.index !== start) {            this.rewind(start);        }        return false;    }    eatRegExpIdentifierPart() {        const start = this.index;        let cp = this.currentCodePoint;        this.advance();        if (cp === ReverseSolidus && this.eatRegExpUnicodeEscapeSequence()) {            cp = this._lastIntValue;        }        if (isRegExpIdentifierPart(cp)) {            this._lastIntValue = cp;            return true;        }        if (this.index !== start) {            this.rewind(start);        }        return false;    }    eatAtomEscape() {        if (this.eatBackreference() ||            this.eatCharacterClassEscape() ||            this.eatCharacterEscape() ||            (this._nFlag && this.eatKGroupName())) {            return true;        }        if (this.strict || this._uFlag) {            this.raise("Invalid escape");        }        return false;    }    eatBackreference() {        const start = this.index;        if (this.eatDecimalEscape()) {            const n = this._lastIntValue;            if (n <= this._numCapturingParens) {                this.onBackreference(start - 1, this.index, n);                return true;            }            if (this.strict) {                this.raise("Invalid escape");            }            this.rewind(start);        }        return false;    }    eatKGroupName() {        const start = this.index;        if (this.eat(LatinSmallLetterK)) {            if (this.eatGroupName()) {                const groupName = this._lastStrValue;                this._backreferenceNames.add(groupName);                this.onBackreference(start - 1, this.index, groupName);                return true;            }            this.raise("Invalid named reference");        }        return false;    }    eatCharacterEscape() {        const start = this.index;        if (this.eatControlEscape() ||            this.eatCControlLetter() ||            this.eatZero() ||            this.eatHexEscapeSequence() ||            this.eatRegExpUnicodeEscapeSequence() ||            (!this.strict && this.eatLegacyOctalEscapeSequence()) ||            this.eatIdentityEscape()) {            this.onCharacter(start - 1, this.index, this._lastIntValue);            return true;        }        return false;    }    eatCControlLetter() {        const start = this.index;        if (this.eat(LatinSmallLetterC)) {            if (this.eatControlLetter()) {                return true;            }            this.rewind(start);        }        return false;    }    eatZero() {        if (this.currentCodePoint === DigitZero &&            !isDecimalDigit(this.nextCodePoint)) {            this._lastIntValue = 0;            this.advance();            return true;        }        return false;    }    eatControlEscape() {        if (this.eat(LatinSmallLetterT)) {            this._lastIntValue = CharacterTabulation;            return true;        }        if (this.eat(LatinSmallLetterN)) {            this._lastIntValue = LineFeed;            return true;        }        if (this.eat(LatinSmallLetterV)) {            this._lastIntValue = LineTabulation;            return true;        }        if (this.eat(LatinSmallLetterF)) {            this._lastIntValue = FormFeed;            return true;        }        if (this.eat(LatinSmallLetterR)) {            this._lastIntValue = CarriageReturn;            return true;        }        return false;    }    eatControlLetter() {        const cp = this.currentCodePoint;        if (isLatinLetter(cp)) {            this.advance();            this._lastIntValue = cp % 0x20;            return true;        }        return false;    }    eatRegExpUnicodeEscapeSequence() {        const start = this.index;        if (this.eat(LatinSmallLetterU)) {            if (this.eatFixedHexDigits(4)) {                const lead = this._lastIntValue;                if (this._uFlag && lead >= 0xd800 && lead <= 0xdbff) {                    const leadSurrogateEnd = this.index;                    if (this.eat(ReverseSolidus) &&                        this.eat(LatinSmallLetterU) &&                        this.eatFixedHexDigits(4)) {                        const trail = this._lastIntValue;                        if (trail >= 0xdc00 && trail <= 0xdfff) {                            this._lastIntValue =                                (lead - 0xd800) * 0x400 +                                    (trail - 0xdc00) +                                    0x10000;                            return true;                        }                    }                    this.rewind(leadSurrogateEnd);                    this._lastIntValue = lead;                }                return true;            }            if (this._uFlag &&                this.eat(LeftCurlyBracket) &&                this.eatHexDigits() &&                this.eat(RightCurlyBracket) &&                isValidUnicode(this._lastIntValue)) {                return true;            }            if (this.strict || this._uFlag) {                this.raise("Invalid unicode escape");            }            this.rewind(start);        }        return false;    }    eatIdentityEscape() {        if (this._uFlag) {            if (this.eatSyntaxCharacter()) {                return true;            }            if (this.eat(Solidus)) {                this._lastIntValue = Solidus;                return true;            }            return false;        }        if (this.isValidIdentityEscape(this.currentCodePoint)) {            this._lastIntValue = this.currentCodePoint;            this.advance();            return true;        }        return false;    }    isValidIdentityEscape(cp) {        if (cp === -1) {            return false;        }        if (this.strict) {            return !isIdContinue(cp);        }        return (cp !== LatinSmallLetterC &&            (!this._nFlag || cp !== LatinSmallLetterK));    }    eatDecimalEscape() {        this._lastIntValue = 0;        let cp = this.currentCodePoint;        if (cp >= DigitOne && cp <= DigitNine) {            do {                this._lastIntValue = 10 * this._lastIntValue + (cp - DigitZero);                this.advance();            } while ((cp = this.currentCodePoint) >= DigitZero &&                cp <= DigitNine);            return true;        }        return false;    }    eatCharacterClassEscape() {        const start = this.index;        if (this.eat(LatinSmallLetterD)) {            this._lastIntValue = -1;            this.onEscapeCharacterSet(start - 1, this.index, "digit", false);            return true;        }        if (this.eat(LatinCapitalLetterD)) {            this._lastIntValue = -1;            this.onEscapeCharacterSet(start - 1, this.index, "digit", true);            return true;        }        if (this.eat(LatinSmallLetterS)) {            this._lastIntValue = -1;            this.onEscapeCharacterSet(start - 1, this.index, "space", false);            return true;        }        if (this.eat(LatinCapitalLetterS)) {            this._lastIntValue = -1;            this.onEscapeCharacterSet(start - 1, this.index, "space", true);            return true;        }        if (this.eat(LatinSmallLetterW)) {            this._lastIntValue = -1;            this.onEscapeCharacterSet(start - 1, this.index, "word", false);            return true;        }        if (this.eat(LatinCapitalLetterW)) {            this._lastIntValue = -1;            this.onEscapeCharacterSet(start - 1, this.index, "word", true);            return true;        }        let negate = false;        if (this._uFlag &&            this.ecmaVersion >= 2018 &&            (this.eat(LatinSmallLetterP) ||                (negate = this.eat(LatinCapitalLetterP)))) {            this._lastIntValue = -1;            if (this.eat(LeftCurlyBracket) &&                this.eatUnicodePropertyValueExpression() &&                this.eat(RightCurlyBracket)) {                this.onUnicodePropertyCharacterSet(start - 1, this.index, "property", this._lastKeyValue, this._lastValValue || null, negate);                return true;            }            this.raise("Invalid property name");        }        return false;    }    eatUnicodePropertyValueExpression() {        const start = this.index;        if (this.eatUnicodePropertyName() && this.eat(EqualsSign)) {            this._lastKeyValue = this._lastStrValue;            if (this.eatUnicodePropertyValue()) {                this._lastValValue = this._lastStrValue;                if (isValidUnicodeProperty(this._lastKeyValue, this._lastValValue)) {                    return true;                }                this.raise("Invalid property name");            }        }        this.rewind(start);        if (this.eatLoneUnicodePropertyNameOrValue()) {            const nameOrValue = this._lastStrValue;            if (isValidUnicodeProperty("General_Category", nameOrValue)) {                this._lastKeyValue = "General_Category";                this._lastValValue = nameOrValue;                return true;            }            if (isValidUnicodePropertyName(nameOrValue)) {                this._lastKeyValue = nameOrValue;                this._lastValValue = "";                return true;            }            this.raise("Invalid property name");        }        return false;    }    eatUnicodePropertyName() {        this._lastStrValue = "";        while (isUnicodePropertyNameCharacter(this.currentCodePoint)) {            this._lastStrValue += String.fromCodePoint(this.currentCodePoint);            this.advance();        }        return this._lastStrValue !== "";    }    eatUnicodePropertyValue() {        this._lastStrValue = "";        while (isUnicodePropertyValueCharacter(this.currentCodePoint)) {            this._lastStrValue += String.fromCodePoint(this.currentCodePoint);            this.advance();        }        return this._lastStrValue !== "";    }    eatLoneUnicodePropertyNameOrValue() {        return this.eatUnicodePropertyValue();    }    eatCharacterClass() {        const start = this.index;        if (this.eat(LeftSquareBracket)) {            const negate = this.eat(CircumflexAccent);            this.onCharacterClassEnter(start, negate);            this.classRanges();            if (!this.eat(RightSquareBracket)) {                this.raise("Unterminated character class");            }            this.onCharacterClassLeave(start, this.index, negate);            return true;        }        return false;    }    classRanges() {        let start = this.index;        while (this.eatClassAtom()) {            const left = this._lastIntValue;            const hyphenStart = this.index;            if (this.eat(HyphenMinus)) {                this.onCharacter(hyphenStart, this.index, HyphenMinus);                if (this.eatClassAtom()) {                    const right = this._lastIntValue;                    if (left === -1 || right === -1) {                        if (this.strict) {                            this.raise("Invalid character class");                        }                    }                    else if (left > right) {                        this.raise("Range out of order in character class");                    }                    else {                        this.onCharacterClassRange(start, this.index, left, right);                    }                }            }            start = this.index;        }    }    eatClassAtom() {        const start = this.index;        if (this.eat(ReverseSolidus)) {            if (this.eatClassEscape()) {                return true;            }            if (this._uFlag) {                this.raise("Invalid escape");            }            this.rewind(start);        }        const cp = this.currentCodePoint;        if (cp !== -1 && cp !== RightSquareBracket) {            this.advance();            this._lastIntValue = cp;            this.onCharacter(start, this.index, cp);            return true;        }        return false;    }    eatClassEscape() {        const start = this.index;        if (this.eat(LatinSmallLetterB)) {            this._lastIntValue = Backspace;            this.onCharacter(start - 1, this.index, Backspace);            return true;        }        if (this._uFlag && this.eat(HyphenMinus)) {            this._lastIntValue = HyphenMinus;            this.onCharacter(start - 1, this.index, HyphenMinus);            return true;        }        if (!this._uFlag && this.eat(LatinSmallLetterC)) {            if (this.eatClassControlLetter()) {                this.onCharacter(start - 1, this.index, this._lastIntValue);                return true;            }            this.rewind(start);        }        return this.eatCharacterClassEscape() || this.eatCharacterEscape();    }    eatClassControlLetter() {        const cp = this.currentCodePoint;        if (isDecimalDigit(cp) || cp === LowLine) {            this.advance();            this._lastIntValue = cp % 0x20;            return true;        }        return false;    }    eatHexEscapeSequence() {        const start = this.index;        if (this.eat(LatinSmallLetterX)) {            if (this.eatFixedHexDigits(2)) {                return true;            }            if (this._uFlag) {                this.raise("Invalid escape");            }            this.rewind(start);        }        return false;    }    eatDecimalDigits() {        const start = this.index;        this._lastIntValue = 0;        while (isDecimalDigit(this.currentCodePoint)) {            this._lastIntValue =                10 * this._lastIntValue + digitToInt(this.currentCodePoint);            this.advance();        }        return this.index !== start;    }    eatHexDigits() {        const start = this.index;        this._lastIntValue = 0;        while (isHexDigit(this.currentCodePoint)) {            this._lastIntValue =                16 * this._lastIntValue + digitToInt(this.currentCodePoint);            this.advance();        }        return this.index !== start;    }    eatLegacyOctalEscapeSequence() {        if (this.eatOctalDigit()) {            const n1 = this._lastIntValue;            if (this.eatOctalDigit()) {                const n2 = this._lastIntValue;                if (n1 <= 3 && this.eatOctalDigit()) {                    this._lastIntValue = n1 * 64 + n2 * 8 + this._lastIntValue;                }                else {                    this._lastIntValue = n1 * 8 + n2;                }            }            else {                this._lastIntValue = n1;            }            return true;        }        return false;    }    eatOctalDigit() {        const cp = this.currentCodePoint;        if (isOctalDigit(cp)) {            this.advance();            this._lastIntValue = cp - DigitZero;            return true;        }        this._lastIntValue = 0;        return false;    }    eatFixedHexDigits(length) {        const start = this.index;        this._lastIntValue = 0;        for (let i = 0; i < length; ++i) {            const cp = this.currentCodePoint;            if (!isHexDigit(cp)) {                this.rewind(start);                return false;            }            this._lastIntValue = 16 * this._lastIntValue + digitToInt(cp);            this.advance();        }        return true;    }}const DummyPattern = {};const DummyFlags = {};const DummyCapturingGroup = {};function elementsToAlternative(elements, parent) {    for (const element of elements) {        assert(element.type !== "Disjunction");        element.parent = parent;    }    return elements;}function addAlternativeElement(parent, node) {    if (parent.type === "Disjunction") {        last(parent.alternatives).push(node);    }    else {        parent.elements.push(node);    }}function addCommonElement(parent, node) {    if (parent.type === "Disjunction") {        last(parent.alternatives).push(node);    }    else if (parent.type === "CharacterClass") {        parent.elements.push(node);    }    else {        parent.elements.push(node);    }}class RegExpParserState {    constructor(options) {        this._node = DummyPattern;        this._flags = DummyFlags;        this._disjunctionStartStack = [];        this._backreferences = [];        this._capturingGroups = [];        this.source = "";        this.strict = Boolean(options && options.strict);        this.ecmaVersion = (options && options.ecmaVersion) || 2018;    }    get pattern() {        if (this._node.type !== "Pattern") {            throw new Error("UnknownError");        }        return this._node;    }    get flags() {        if (this._flags.type !== "Flags") {            throw new Error("UnknownError");        }        return this._flags;    }    onFlags(start, end, global, ignoreCase, multiline, unicode, sticky, dotAll) {        this._flags = {            type: "Flags",            parent: null,            start,            end,            raw: this.source.slice(start, end),            global,            ignoreCase,            multiline,            unicode,            sticky,            dotAll,        };    }    onPatternEnter(start) {        this._node = {            type: "Pattern",            parent: null,            start,            end: start,            raw: "",            elements: [],        };        this._backreferences.length = 0;        this._capturingGroups.length = 0;    }    onPatternLeave(start, end) {        this._node.end = end;        this._node.raw = this.source.slice(start, end);        for (const reference of this._backreferences) {            const ref = reference.ref;            const group = typeof ref === "number"                ? this._capturingGroups[ref - 1]                : this._capturingGroups.find(g => g.name === ref);            reference.resolved = group;            group.references.push(reference);        }    }    onDisjunctionEnter(start) {        this._disjunctionStartStack.push(start);    }    onDisjunctionLeave(start, end) {        this._disjunctionStartStack.pop();    }    onAlternativeEnter(start, index) {        if (index === 0) {            return;        }        const parentNode = this._node;        if (parentNode.type === "Disjunction" ||            parentNode.type === "CharacterClass") {            throw new Error("UnknownError");        }        const prevNode = last(parentNode.elements);        if (prevNode != null && prevNode.type === "Disjunction") {            this._node = prevNode;            prevNode.alternatives.push([]);        }        else {            this._node = {                type: "Disjunction",                parent: parentNode,                start: last(this._disjunctionStartStack),                end: start,                raw: "",                alternatives: [],            };            const elements = elementsToAlternative(parentNode.elements, this._node);            this._node.alternatives.push(elements, []);            parentNode.elements = [this._node];        }    }    onAlternativeLeave(start, end, index) {        if (index === 0) {            return;        }        this._node.end = end;        this._node.raw = this.source.slice(this._node.start, end);        this._node = this._node.parent;    }    onGroupEnter(start) {        const parentNode = this._node;        if (parentNode.type === "CharacterClass") {            throw new Error("UnknownError");        }        this._node = {            type: "Group",            parent: parentNode,            start,            end: start,            raw: "",            elements: [],        };        addAlternativeElement(parentNode, this._node);    }    onGroupLeave(start, end) {        this._node.end = end;        this._node.raw = this.source.slice(start, end);        this._node = this._node.parent;    }    onCapturingGroupEnter(start, name) {        const parentNode = this._node;        if (parentNode.type === "CharacterClass") {            throw new Error("UnknownError");        }        this._node = {            type: "CapturingGroup",            parent: parentNode,            start,            end: start,            raw: "",            name,            elements: [],            references: [],        };        addAlternativeElement(parentNode, this._node);        this._capturingGroups.push(this._node);    }    onCapturingGroupLeave(start, end, name) {        this._node.end = end;        this._node.raw = this.source.slice(start, end);        this._node = this._node.parent;    }    onQuantifier(start, end, min, max, greedy) {        const parentNode = this._node;        if (parentNode.type === "CharacterClass") {            throw new Error("UnknownError");        }        const elements = parentNode.type === "Disjunction"            ? last(parentNode.alternatives)            : parentNode.elements;        const prevNode = elements.pop();        const node = {            type: "Quantifier",            parent: parentNode,            start,            end,            raw: this.source.slice(start, end),            min,            max,            greedy,            element: prevNode,        };        elements.push(node);        prevNode.parent = node;    }    onLookaroundAssertionEnter(start, kind, negate) {        const parentNode = this._node;        if (parentNode.type === "CharacterClass") {            throw new Error("UnknownError");        }        this._node = {            type: "Assertion",            parent: parentNode,            start,            end: start,            raw: "",            kind,            negate,            elements: [],        };        addAlternativeElement(parentNode, this._node);    }    onLookaroundAssertionLeave(start, end, kind, negate) {        this._node.end = end;        this._node.raw = this.source.slice(start, end);        this._node = this._node.parent;    }    onEdgeAssertion(start, end, kind) {        const parentNode = this._node;        if (parentNode.type === "CharacterClass") {            throw new Error("UnknownError");        }        addAlternativeElement(parentNode, {            type: "Assertion",            parent: parentNode,            start,            end,            raw: this.source.slice(start, end),            kind,        });    }    onWordBoundaryAssertion(start, end, kind, negate) {        const parentNode = this._node;        if (parentNode.type === "CharacterClass") {            throw new Error("UnknownError");        }        addAlternativeElement(parentNode, {            type: "Assertion",            parent: parentNode,            start,            end,            raw: this.source.slice(start, end),            kind,            negate,        });    }    onAnyCharacterSet(start, end, kind) {        const parentNode = this._node;        if (parentNode.type === "CharacterClass") {            throw new Error("UnknownError");        }        addAlternativeElement(parentNode, {            type: "CharacterSet",            parent: parentNode,            start,            end,            raw: this.source.slice(start, end),            kind,        });    }    onEscapeCharacterSet(start, end, kind, negate) {        addCommonElement(this._node, {            type: "CharacterSet",            parent: this._node,            start,            end,            raw: this.source.slice(start, end),            kind,            negate,        });    }    onUnicodePropertyCharacterSet(start, end, kind, key, value, negate) {        addCommonElement(this._node, {            type: "CharacterSet",            parent: this._node,            start,            end,            raw: this.source.slice(start, end),            kind,            key,            value,            negate,        });    }    onCharacter(start, end, value) {        addCommonElement(this._node, {            type: "Character",            parent: this._node,            start,            end,            raw: this.source.slice(start, end),            value,        });    }    onBackreference(start, end, ref) {        const parentNode = this._node;        if (parentNode.type === "CharacterClass") {            throw new Error("UnknownError");        }        const node = {            type: "Backreference",            parent: parentNode,            start,            end,            raw: this.source.slice(start, end),            ref,            resolved: DummyCapturingGroup,        };        addAlternativeElement(parentNode, node);        this._backreferences.push(node);    }    onCharacterClassEnter(start, negate) {        const parentNode = this._node;        if (parentNode.type === "CharacterClass") {            throw new Error("UnknownError");        }        this._node = {            type: "CharacterClass",            parent: parentNode,            start,            end: start,            raw: "",            negate,            elements: [],        };        addAlternativeElement(parentNode, this._node);    }    onCharacterClassLeave(start, end, negate) {        this._node.end = end;        this._node.raw = this.source.slice(start, end);        this._node = this._node.parent;    }    onCharacterClassRange(start, end, min, max) {        const parentNode = this._node;        if (parentNode.type !== "CharacterClass") {            throw new Error("UnknownError");        }        const elements = parentNode.elements;        const rightNode = elements.pop();        elements.pop();        const leftNode = elements.pop();        const node = {            type: "CharacterClassRange",            parent: parentNode,            start,            end,            raw: this.source.slice(start, end),            min: leftNode,            max: rightNode,        };        assert(leftNode != null && leftNode.type === "Character");        assert(rightNode != null && rightNode.type === "Character");        leftNode.parent = node;        rightNode.parent = node;        elements.push(node);    }}class RegExpParser {    constructor(options) {        this._state = new RegExpParserState(options);        this._validator = new RegExpValidator(this._state);    }    parseLiteral(source, start = 0, end = source.length) {        this._state.source = source;        this._validator.validateLiteral(source, start, end);        const pattern = this._state.pattern;        const flags = this._state.flags;        const literal = {            type: "RegExpLiteral",            parent: null,            start,            end,            raw: source,            pattern,            flags,        };        pattern.parent = literal;        flags.parent = literal;        return literal;    }    parseFlags(source, start = 0, end = source.length) {        this._state.source = source;        this._validator.validateFlags(source, start, end);        return this._state.flags;    }    parsePattern(source, start = 0, end = source.length, uFlag = false) {        this._state.source = source;        this._validator.validatePattern(source, start, end, uFlag);        return this._state.pattern;    }}function parseRegExpLiteral(source, options) {    return new RegExpParser(options).parseLiteral(source);}function validateRegExpLiteral(source, options) {    return new RegExpValidator(options).validateLiteral(source);}export { ast as AST, RegExpParser, RegExpValidator, parseRegExpLiteral, validateRegExpLiteral };//# sourceMappingURL=index.mjs.map
 |