sinon-no-sourcemaps.js 1.5 MB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071160721607316074160751607616077160781607916080160811608216083160841608516086160871608816089160901609116092160931609416095160961609716098160991610016101161021610316104161051610616107161081610916110161111611216113161141611516116161171611816119161201612116122161231612416125161261612716128161291613016131161321613316134161351613616137161381613916140161411614216143161441614516146161471614816149161501615116152161531615416155161561615716158161591616016161161621616316164161651616616167161681616916170161711617216173161741617516176161771617816179161801618116182161831618416185161861618716188161891619016191161921619316194161951619616197161981619916200162011620216203162041620516206162071620816209162101621116212162131621416215162161621716218162191622016221162221622316224162251622616227162281622916230162311623216233162341623516236162371623816239162401624116242162431624416245162461624716248162491625016251162521625316254162551625616257162581625916260162611626216263162641626516266162671626816269162701627116272162731627416275162761627716278162791628016281162821628316284162851628616287162881628916290162911629216293162941629516296162971629816299163001630116302163031630416305163061630716308163091631016311163121631316314163151631616317163181631916320163211632216323163241632516326163271632816329163301633116332163331633416335163361633716338163391634016341163421634316344163451634616347163481634916350163511635216353163541635516356163571635816359163601636116362163631636416365163661636716368163691637016371163721637316374163751637616377163781637916380163811638216383163841638516386163871638816389163901639116392163931639416395163961639716398163991640016401164021640316404164051640616407164081640916410164111641216413164141641516416164171641816419164201642116422164231642416425164261642716428164291643016431164321643316434164351643616437164381643916440164411644216443164441644516446164471644816449164501645116452164531645416455164561645716458164591646016461164621646316464164651646616467164681646916470164711647216473164741647516476164771647816479164801648116482164831648416485164861648716488164891649016491164921649316494164951649616497164981649916500165011650216503165041650516506165071650816509165101651116512165131651416515165161651716518165191652016521165221652316524165251652616527165281652916530165311653216533165341653516536165371653816539165401654116542165431654416545165461654716548165491655016551165521655316554165551655616557165581655916560165611656216563165641656516566165671656816569165701657116572165731657416575165761657716578165791658016581165821658316584165851658616587165881658916590165911659216593165941659516596165971659816599166001660116602166031660416605166061660716608166091661016611166121661316614166151661616617166181661916620166211662216623166241662516626166271662816629166301663116632166331663416635166361663716638166391664016641166421664316644166451664616647166481664916650166511665216653166541665516656166571665816659166601666116662166631666416665166661666716668166691667016671166721667316674166751667616677166781667916680166811668216683166841668516686166871668816689166901669116692166931669416695166961669716698166991670016701167021670316704167051670616707167081670916710167111671216713167141671516716167171671816719167201672116722167231672416725167261672716728167291673016731167321673316734167351673616737167381673916740167411674216743167441674516746167471674816749167501675116752167531675416755167561675716758167591676016761167621676316764167651676616767167681676916770167711677216773167741677516776167771677816779167801678116782167831678416785167861678716788167891679016791167921679316794167951679616797167981679916800168011680216803168041680516806168071680816809168101681116812168131681416815168161681716818168191682016821168221682316824168251682616827168281682916830168311683216833168341683516836168371683816839168401684116842168431684416845168461684716848168491685016851168521685316854168551685616857168581685916860168611686216863168641686516866168671686816869168701687116872168731687416875168761687716878168791688016881168821688316884168851688616887168881688916890168911689216893168941689516896168971689816899169001690116902169031690416905169061690716908169091691016911169121691316914169151691616917169181691916920169211692216923169241692516926169271692816929169301693116932169331693416935169361693716938169391694016941169421694316944169451694616947169481694916950169511695216953169541695516956169571695816959169601696116962169631696416965169661696716968169691697016971169721697316974169751697616977169781697916980169811698216983169841698516986169871698816989169901699116992169931699416995169961699716998169991700017001170021700317004170051700617007170081700917010170111701217013170141701517016170171701817019170201702117022170231702417025170261702717028170291703017031170321703317034170351703617037170381703917040170411704217043170441704517046170471704817049170501705117052170531705417055170561705717058170591706017061170621706317064170651706617067170681706917070170711707217073170741707517076170771707817079170801708117082170831708417085170861708717088170891709017091170921709317094170951709617097170981709917100171011710217103171041710517106171071710817109171101711117112171131711417115171161711717118171191712017121171221712317124171251712617127171281712917130171311713217133171341713517136171371713817139171401714117142171431714417145171461714717148171491715017151171521715317154171551715617157171581715917160171611716217163171641716517166171671716817169171701717117172171731717417175171761717717178171791718017181171821718317184171851718617187171881718917190171911719217193171941719517196171971719817199172001720117202172031720417205172061720717208172091721017211172121721317214172151721617217172181721917220172211722217223172241722517226172271722817229172301723117232172331723417235172361723717238172391724017241172421724317244172451724617247172481724917250172511725217253172541725517256172571725817259172601726117262172631726417265172661726717268172691727017271172721727317274172751727617277172781727917280172811728217283172841728517286172871728817289172901729117292172931729417295172961729717298172991730017301173021730317304173051730617307173081730917310173111731217313173141731517316173171731817319173201732117322173231732417325173261732717328173291733017331173321733317334173351733617337173381733917340173411734217343173441734517346173471734817349173501735117352173531735417355173561735717358173591736017361173621736317364173651736617367173681736917370173711737217373173741737517376173771737817379173801738117382173831738417385173861738717388173891739017391173921739317394173951739617397173981739917400174011740217403174041740517406174071740817409174101741117412174131741417415174161741717418174191742017421174221742317424174251742617427174281742917430174311743217433174341743517436174371743817439174401744117442174431744417445174461744717448174491745017451174521745317454174551745617457174581745917460174611746217463174641746517466174671746817469174701747117472174731747417475174761747717478174791748017481174821748317484174851748617487174881748917490174911749217493174941749517496174971749817499175001750117502175031750417505175061750717508175091751017511175121751317514175151751617517175181751917520175211752217523175241752517526175271752817529175301753117532175331753417535175361753717538175391754017541175421754317544175451754617547175481754917550175511755217553175541755517556175571755817559175601756117562175631756417565175661756717568175691757017571175721757317574175751757617577175781757917580175811758217583175841758517586175871758817589175901759117592175931759417595175961759717598175991760017601176021760317604176051760617607176081760917610176111761217613176141761517616176171761817619176201762117622176231762417625176261762717628176291763017631176321763317634176351763617637176381763917640176411764217643176441764517646176471764817649176501765117652176531765417655176561765717658176591766017661176621766317664176651766617667176681766917670176711767217673176741767517676176771767817679176801768117682176831768417685176861768717688176891769017691176921769317694176951769617697176981769917700177011770217703177041770517706177071770817709177101771117712177131771417715177161771717718177191772017721177221772317724177251772617727177281772917730177311773217733177341773517736177371773817739177401774117742177431774417745177461774717748177491775017751177521775317754177551775617757177581775917760177611776217763177641776517766177671776817769177701777117772177731777417775177761777717778177791778017781177821778317784177851778617787177881778917790177911779217793177941779517796177971779817799178001780117802178031780417805178061780717808178091781017811178121781317814178151781617817178181781917820178211782217823178241782517826178271782817829178301783117832178331783417835178361783717838178391784017841178421784317844178451784617847178481784917850178511785217853178541785517856178571785817859178601786117862178631786417865178661786717868178691787017871178721787317874178751787617877178781787917880178811788217883178841788517886178871788817889178901789117892178931789417895178961789717898178991790017901179021790317904179051790617907179081790917910179111791217913179141791517916179171791817919179201792117922179231792417925179261792717928179291793017931179321793317934179351793617937179381793917940179411794217943179441794517946179471794817949179501795117952179531795417955179561795717958179591796017961179621796317964179651796617967179681796917970179711797217973179741797517976179771797817979179801798117982179831798417985179861798717988179891799017991179921799317994179951799617997179981799918000180011800218003180041800518006180071800818009180101801118012180131801418015180161801718018180191802018021180221802318024180251802618027180281802918030180311803218033180341803518036180371803818039180401804118042180431804418045180461804718048180491805018051180521805318054180551805618057180581805918060180611806218063180641806518066180671806818069180701807118072180731807418075180761807718078180791808018081180821808318084180851808618087180881808918090180911809218093180941809518096180971809818099181001810118102181031810418105181061810718108181091811018111181121811318114181151811618117181181811918120181211812218123181241812518126181271812818129181301813118132181331813418135181361813718138181391814018141181421814318144181451814618147181481814918150181511815218153181541815518156181571815818159181601816118162181631816418165181661816718168181691817018171181721817318174181751817618177181781817918180181811818218183181841818518186181871818818189181901819118192181931819418195181961819718198181991820018201182021820318204182051820618207182081820918210182111821218213182141821518216182171821818219182201822118222182231822418225182261822718228182291823018231182321823318234182351823618237182381823918240182411824218243182441824518246182471824818249182501825118252182531825418255182561825718258182591826018261182621826318264182651826618267182681826918270182711827218273182741827518276182771827818279182801828118282182831828418285182861828718288182891829018291182921829318294182951829618297182981829918300183011830218303183041830518306183071830818309183101831118312183131831418315183161831718318183191832018321183221832318324183251832618327183281832918330183311833218333183341833518336183371833818339183401834118342183431834418345183461834718348183491835018351183521835318354183551835618357183581835918360183611836218363183641836518366183671836818369183701837118372183731837418375183761837718378183791838018381183821838318384183851838618387183881838918390183911839218393183941839518396183971839818399184001840118402184031840418405184061840718408184091841018411184121841318414184151841618417184181841918420184211842218423184241842518426184271842818429184301843118432184331843418435184361843718438184391844018441184421844318444184451844618447184481844918450184511845218453184541845518456184571845818459184601846118462184631846418465184661846718468184691847018471184721847318474184751847618477184781847918480184811848218483184841848518486184871848818489184901849118492184931849418495184961849718498184991850018501185021850318504185051850618507185081850918510185111851218513185141851518516185171851818519185201852118522185231852418525185261852718528185291853018531185321853318534185351853618537185381853918540185411854218543185441854518546185471854818549185501855118552185531855418555185561855718558185591856018561185621856318564185651856618567185681856918570185711857218573185741857518576185771857818579185801858118582185831858418585185861858718588185891859018591185921859318594185951859618597185981859918600186011860218603186041860518606186071860818609186101861118612186131861418615186161861718618186191862018621186221862318624186251862618627186281862918630186311863218633186341863518636186371863818639186401864118642186431864418645186461864718648186491865018651186521865318654186551865618657186581865918660186611866218663186641866518666186671866818669186701867118672186731867418675186761867718678186791868018681186821868318684186851868618687186881868918690186911869218693186941869518696186971869818699187001870118702187031870418705187061870718708187091871018711187121871318714187151871618717187181871918720187211872218723187241872518726187271872818729187301873118732187331873418735187361873718738187391874018741187421874318744187451874618747187481874918750187511875218753187541875518756187571875818759187601876118762187631876418765187661876718768187691877018771187721877318774187751877618777187781877918780187811878218783187841878518786187871878818789187901879118792187931879418795187961879718798187991880018801188021880318804188051880618807188081880918810188111881218813188141881518816188171881818819188201882118822188231882418825188261882718828188291883018831188321883318834188351883618837188381883918840188411884218843188441884518846188471884818849188501885118852188531885418855188561885718858188591886018861188621886318864188651886618867188681886918870188711887218873188741887518876188771887818879188801888118882188831888418885188861888718888188891889018891188921889318894188951889618897188981889918900189011890218903189041890518906189071890818909189101891118912189131891418915189161891718918189191892018921189221892318924189251892618927189281892918930189311893218933189341893518936189371893818939189401894118942189431894418945189461894718948189491895018951189521895318954189551895618957189581895918960189611896218963189641896518966189671896818969189701897118972189731897418975189761897718978189791898018981189821898318984189851898618987189881898918990189911899218993189941899518996189971899818999190001900119002190031900419005190061900719008190091901019011190121901319014190151901619017190181901919020190211902219023190241902519026190271902819029190301903119032190331903419035190361903719038190391904019041190421904319044190451904619047190481904919050190511905219053190541905519056190571905819059190601906119062190631906419065190661906719068190691907019071190721907319074190751907619077190781907919080190811908219083190841908519086190871908819089190901909119092190931909419095190961909719098190991910019101191021910319104191051910619107191081910919110191111911219113191141911519116191171911819119191201912119122191231912419125191261912719128191291913019131191321913319134191351913619137191381913919140191411914219143191441914519146191471914819149191501915119152191531915419155191561915719158191591916019161191621916319164191651916619167191681916919170191711917219173191741917519176191771917819179191801918119182191831918419185191861918719188191891919019191191921919319194191951919619197191981919919200192011920219203192041920519206192071920819209192101921119212192131921419215192161921719218192191922019221192221922319224192251922619227192281922919230192311923219233192341923519236192371923819239192401924119242192431924419245192461924719248192491925019251192521925319254192551925619257192581925919260192611926219263192641926519266192671926819269192701927119272192731927419275192761927719278192791928019281192821928319284192851928619287192881928919290192911929219293192941929519296192971929819299193001930119302193031930419305193061930719308193091931019311193121931319314193151931619317193181931919320193211932219323193241932519326193271932819329193301933119332193331933419335193361933719338193391934019341193421934319344193451934619347193481934919350193511935219353193541935519356193571935819359193601936119362193631936419365193661936719368193691937019371193721937319374193751937619377193781937919380193811938219383193841938519386193871938819389193901939119392193931939419395193961939719398193991940019401194021940319404194051940619407194081940919410194111941219413194141941519416194171941819419194201942119422194231942419425194261942719428194291943019431194321943319434194351943619437194381943919440194411944219443194441944519446194471944819449194501945119452194531945419455194561945719458194591946019461194621946319464194651946619467194681946919470194711947219473194741947519476194771947819479194801948119482194831948419485194861948719488194891949019491194921949319494194951949619497194981949919500195011950219503195041950519506195071950819509195101951119512195131951419515195161951719518195191952019521195221952319524195251952619527195281952919530195311953219533195341953519536195371953819539195401954119542195431954419545195461954719548195491955019551195521955319554195551955619557195581955919560195611956219563195641956519566195671956819569195701957119572195731957419575195761957719578195791958019581195821958319584195851958619587195881958919590195911959219593195941959519596195971959819599196001960119602196031960419605196061960719608196091961019611196121961319614196151961619617196181961919620196211962219623196241962519626196271962819629196301963119632196331963419635196361963719638196391964019641196421964319644196451964619647196481964919650196511965219653196541965519656196571965819659196601966119662196631966419665196661966719668196691967019671196721967319674196751967619677196781967919680196811968219683196841968519686196871968819689196901969119692196931969419695196961969719698196991970019701197021970319704197051970619707197081970919710197111971219713197141971519716197171971819719197201972119722197231972419725197261972719728197291973019731197321973319734197351973619737197381973919740197411974219743197441974519746197471974819749197501975119752197531975419755197561975719758197591976019761197621976319764197651976619767197681976919770197711977219773197741977519776197771977819779197801978119782197831978419785197861978719788197891979019791197921979319794197951979619797197981979919800198011980219803198041980519806198071980819809198101981119812198131981419815198161981719818198191982019821198221982319824198251982619827198281982919830198311983219833198341983519836198371983819839198401984119842198431984419845198461984719848198491985019851198521985319854198551985619857198581985919860198611986219863198641986519866198671986819869198701987119872198731987419875198761987719878198791988019881198821988319884198851988619887198881988919890198911989219893198941989519896198971989819899199001990119902199031990419905199061990719908199091991019911199121991319914199151991619917199181991919920199211992219923199241992519926199271992819929199301993119932199331993419935199361993719938199391994019941199421994319944199451994619947199481994919950199511995219953199541995519956199571995819959199601996119962199631996419965199661996719968199691997019971199721997319974199751997619977199781997919980199811998219983199841998519986199871998819989199901999119992199931999419995199961999719998199992000020001200022000320004200052000620007200082000920010200112001220013200142001520016200172001820019200202002120022200232002420025200262002720028200292003020031200322003320034200352003620037200382003920040200412004220043200442004520046200472004820049200502005120052200532005420055200562005720058200592006020061200622006320064200652006620067200682006920070200712007220073200742007520076200772007820079200802008120082200832008420085200862008720088200892009020091200922009320094200952009620097200982009920100201012010220103201042010520106201072010820109201102011120112201132011420115201162011720118201192012020121201222012320124201252012620127201282012920130201312013220133201342013520136201372013820139201402014120142201432014420145201462014720148201492015020151201522015320154201552015620157201582015920160201612016220163201642016520166201672016820169201702017120172201732017420175201762017720178201792018020181201822018320184201852018620187201882018920190201912019220193201942019520196201972019820199202002020120202202032020420205202062020720208202092021020211202122021320214202152021620217202182021920220202212022220223202242022520226202272022820229202302023120232202332023420235202362023720238202392024020241202422024320244202452024620247202482024920250202512025220253202542025520256202572025820259202602026120262202632026420265202662026720268202692027020271202722027320274202752027620277202782027920280202812028220283202842028520286202872028820289202902029120292202932029420295202962029720298202992030020301203022030320304203052030620307203082030920310203112031220313203142031520316203172031820319203202032120322203232032420325203262032720328203292033020331203322033320334203352033620337203382033920340203412034220343203442034520346203472034820349203502035120352203532035420355203562035720358203592036020361203622036320364203652036620367203682036920370203712037220373203742037520376203772037820379203802038120382203832038420385203862038720388203892039020391203922039320394203952039620397203982039920400204012040220403204042040520406204072040820409204102041120412204132041420415204162041720418204192042020421204222042320424204252042620427204282042920430204312043220433204342043520436204372043820439204402044120442204432044420445204462044720448204492045020451204522045320454204552045620457204582045920460204612046220463204642046520466204672046820469204702047120472204732047420475204762047720478204792048020481204822048320484204852048620487204882048920490204912049220493204942049520496204972049820499205002050120502205032050420505205062050720508205092051020511205122051320514205152051620517205182051920520205212052220523205242052520526205272052820529205302053120532205332053420535205362053720538205392054020541205422054320544205452054620547205482054920550205512055220553205542055520556205572055820559205602056120562205632056420565205662056720568205692057020571205722057320574205752057620577205782057920580205812058220583205842058520586205872058820589205902059120592205932059420595205962059720598205992060020601206022060320604206052060620607206082060920610206112061220613206142061520616206172061820619206202062120622206232062420625206262062720628206292063020631206322063320634206352063620637206382063920640206412064220643206442064520646206472064820649206502065120652206532065420655206562065720658206592066020661206622066320664206652066620667206682066920670206712067220673206742067520676206772067820679206802068120682206832068420685206862068720688206892069020691206922069320694206952069620697206982069920700207012070220703207042070520706207072070820709207102071120712207132071420715207162071720718207192072020721207222072320724207252072620727207282072920730207312073220733207342073520736207372073820739207402074120742207432074420745207462074720748207492075020751207522075320754207552075620757207582075920760207612076220763207642076520766207672076820769207702077120772207732077420775207762077720778207792078020781207822078320784207852078620787207882078920790207912079220793207942079520796207972079820799208002080120802208032080420805208062080720808208092081020811208122081320814208152081620817208182081920820208212082220823208242082520826208272082820829208302083120832208332083420835208362083720838208392084020841208422084320844208452084620847208482084920850208512085220853208542085520856208572085820859208602086120862208632086420865208662086720868208692087020871208722087320874208752087620877208782087920880208812088220883208842088520886208872088820889208902089120892208932089420895208962089720898208992090020901209022090320904209052090620907209082090920910209112091220913209142091520916209172091820919209202092120922209232092420925209262092720928209292093020931209322093320934209352093620937209382093920940209412094220943209442094520946209472094820949209502095120952209532095420955209562095720958209592096020961209622096320964209652096620967209682096920970209712097220973209742097520976209772097820979209802098120982209832098420985209862098720988209892099020991209922099320994209952099620997209982099921000210012100221003210042100521006210072100821009210102101121012210132101421015210162101721018210192102021021210222102321024210252102621027210282102921030210312103221033210342103521036210372103821039210402104121042210432104421045210462104721048210492105021051210522105321054210552105621057210582105921060210612106221063210642106521066210672106821069210702107121072210732107421075210762107721078210792108021081210822108321084210852108621087210882108921090210912109221093210942109521096210972109821099211002110121102211032110421105211062110721108211092111021111211122111321114211152111621117211182111921120211212112221123211242112521126211272112821129211302113121132211332113421135211362113721138211392114021141211422114321144211452114621147211482114921150211512115221153211542115521156211572115821159211602116121162211632116421165211662116721168211692117021171211722117321174211752117621177211782117921180211812118221183211842118521186211872118821189211902119121192211932119421195211962119721198211992120021201212022120321204212052120621207212082120921210212112121221213212142121521216212172121821219212202122121222212232122421225212262122721228212292123021231212322123321234212352123621237212382123921240212412124221243212442124521246212472124821249212502125121252212532125421255212562125721258212592126021261212622126321264212652126621267212682126921270212712127221273212742127521276212772127821279212802128121282212832128421285212862128721288212892129021291212922129321294212952129621297212982129921300213012130221303213042130521306213072130821309213102131121312213132131421315213162131721318213192132021321213222132321324213252132621327213282132921330213312133221333213342133521336213372133821339213402134121342213432134421345213462134721348213492135021351213522135321354213552135621357213582135921360213612136221363213642136521366213672136821369213702137121372213732137421375213762137721378213792138021381213822138321384213852138621387213882138921390213912139221393213942139521396213972139821399214002140121402214032140421405214062140721408214092141021411214122141321414214152141621417214182141921420214212142221423214242142521426214272142821429214302143121432214332143421435214362143721438214392144021441214422144321444214452144621447214482144921450214512145221453214542145521456214572145821459214602146121462214632146421465214662146721468214692147021471214722147321474214752147621477214782147921480214812148221483214842148521486214872148821489214902149121492214932149421495214962149721498214992150021501215022150321504215052150621507215082150921510215112151221513215142151521516215172151821519215202152121522215232152421525215262152721528215292153021531215322153321534215352153621537215382153921540215412154221543215442154521546215472154821549215502155121552215532155421555215562155721558215592156021561215622156321564215652156621567215682156921570215712157221573215742157521576215772157821579215802158121582215832158421585215862158721588215892159021591215922159321594215952159621597215982159921600216012160221603216042160521606216072160821609216102161121612216132161421615216162161721618216192162021621216222162321624216252162621627216282162921630216312163221633216342163521636216372163821639216402164121642216432164421645216462164721648216492165021651216522165321654216552165621657216582165921660216612166221663216642166521666216672166821669216702167121672216732167421675216762167721678216792168021681216822168321684216852168621687216882168921690216912169221693216942169521696216972169821699217002170121702217032170421705217062170721708217092171021711217122171321714217152171621717217182171921720217212172221723217242172521726217272172821729217302173121732217332173421735217362173721738217392174021741217422174321744217452174621747217482174921750217512175221753217542175521756217572175821759217602176121762217632176421765217662176721768217692177021771217722177321774217752177621777217782177921780217812178221783217842178521786217872178821789217902179121792217932179421795217962179721798217992180021801218022180321804218052180621807218082180921810218112181221813218142181521816218172181821819218202182121822218232182421825218262182721828218292183021831218322183321834218352183621837218382183921840218412184221843218442184521846218472184821849218502185121852218532185421855218562185721858218592186021861218622186321864218652186621867218682186921870218712187221873218742187521876218772187821879218802188121882218832188421885218862188721888218892189021891218922189321894218952189621897218982189921900219012190221903219042190521906219072190821909219102191121912219132191421915219162191721918219192192021921219222192321924219252192621927219282192921930219312193221933219342193521936219372193821939219402194121942219432194421945219462194721948219492195021951219522195321954219552195621957219582195921960219612196221963219642196521966219672196821969219702197121972219732197421975219762197721978219792198021981219822198321984219852198621987219882198921990219912199221993219942199521996219972199821999220002200122002220032200422005220062200722008220092201022011220122201322014220152201622017220182201922020220212202222023220242202522026220272202822029220302203122032220332203422035220362203722038220392204022041220422204322044220452204622047220482204922050220512205222053220542205522056220572205822059220602206122062220632206422065220662206722068220692207022071220722207322074220752207622077220782207922080220812208222083220842208522086220872208822089220902209122092220932209422095220962209722098220992210022101221022210322104221052210622107221082210922110221112211222113221142211522116221172211822119221202212122122221232212422125221262212722128221292213022131221322213322134221352213622137221382213922140221412214222143221442214522146221472214822149221502215122152221532215422155221562215722158221592216022161221622216322164221652216622167221682216922170221712217222173221742217522176221772217822179221802218122182221832218422185221862218722188221892219022191221922219322194221952219622197221982219922200222012220222203222042220522206222072220822209222102221122212222132221422215222162221722218222192222022221222222222322224222252222622227222282222922230222312223222233222342223522236222372223822239222402224122242222432224422245222462224722248222492225022251222522225322254222552225622257222582225922260222612226222263222642226522266222672226822269222702227122272222732227422275222762227722278222792228022281222822228322284222852228622287222882228922290222912229222293222942229522296222972229822299223002230122302223032230422305223062230722308223092231022311223122231322314223152231622317223182231922320223212232222323223242232522326223272232822329223302233122332223332233422335223362233722338223392234022341223422234322344223452234622347223482234922350223512235222353223542235522356223572235822359223602236122362223632236422365223662236722368223692237022371223722237322374223752237622377223782237922380223812238222383223842238522386223872238822389223902239122392223932239422395223962239722398223992240022401224022240322404224052240622407224082240922410224112241222413224142241522416224172241822419224202242122422224232242422425224262242722428224292243022431224322243322434224352243622437224382243922440224412244222443224442244522446224472244822449224502245122452224532245422455224562245722458224592246022461224622246322464224652246622467224682246922470224712247222473224742247522476224772247822479224802248122482224832248422485224862248722488224892249022491224922249322494224952249622497224982249922500225012250222503225042250522506225072250822509225102251122512225132251422515225162251722518225192252022521225222252322524225252252622527225282252922530225312253222533225342253522536225372253822539225402254122542225432254422545225462254722548225492255022551225522255322554225552255622557225582255922560225612256222563225642256522566225672256822569225702257122572225732257422575225762257722578225792258022581225822258322584225852258622587225882258922590225912259222593225942259522596225972259822599226002260122602226032260422605226062260722608226092261022611226122261322614226152261622617226182261922620226212262222623226242262522626226272262822629226302263122632226332263422635226362263722638226392264022641226422264322644226452264622647226482264922650226512265222653226542265522656226572265822659226602266122662226632266422665226662266722668226692267022671226722267322674226752267622677226782267922680226812268222683226842268522686226872268822689226902269122692226932269422695226962269722698226992270022701227022270322704227052270622707227082270922710227112271222713227142271522716227172271822719227202272122722227232272422725227262272722728227292273022731227322273322734227352273622737227382273922740227412274222743227442274522746227472274822749227502275122752227532275422755227562275722758227592276022761227622276322764227652276622767227682276922770227712277222773227742277522776227772277822779227802278122782227832278422785227862278722788227892279022791227922279322794227952279622797227982279922800228012280222803228042280522806228072280822809228102281122812228132281422815228162281722818228192282022821228222282322824228252282622827228282282922830228312283222833228342283522836228372283822839228402284122842228432284422845228462284722848228492285022851228522285322854228552285622857228582285922860228612286222863228642286522866228672286822869228702287122872228732287422875228762287722878228792288022881228822288322884228852288622887228882288922890228912289222893228942289522896228972289822899229002290122902229032290422905229062290722908229092291022911229122291322914229152291622917229182291922920229212292222923229242292522926229272292822929229302293122932229332293422935229362293722938229392294022941229422294322944229452294622947229482294922950229512295222953229542295522956229572295822959229602296122962229632296422965229662296722968229692297022971229722297322974229752297622977229782297922980229812298222983229842298522986229872298822989229902299122992229932299422995229962299722998229992300023001230022300323004230052300623007230082300923010230112301223013230142301523016230172301823019230202302123022230232302423025230262302723028230292303023031230322303323034230352303623037230382303923040230412304223043230442304523046230472304823049230502305123052230532305423055230562305723058230592306023061230622306323064230652306623067230682306923070230712307223073230742307523076230772307823079230802308123082230832308423085230862308723088230892309023091230922309323094230952309623097230982309923100231012310223103231042310523106231072310823109231102311123112231132311423115231162311723118231192312023121231222312323124231252312623127231282312923130231312313223133231342313523136231372313823139231402314123142231432314423145231462314723148231492315023151231522315323154231552315623157231582315923160231612316223163231642316523166231672316823169231702317123172231732317423175231762317723178231792318023181231822318323184231852318623187231882318923190231912319223193231942319523196231972319823199232002320123202232032320423205232062320723208232092321023211232122321323214232152321623217232182321923220232212322223223232242322523226232272322823229232302323123232232332323423235232362323723238232392324023241232422324323244232452324623247232482324923250232512325223253232542325523256232572325823259232602326123262232632326423265232662326723268232692327023271232722327323274232752327623277232782327923280232812328223283232842328523286232872328823289232902329123292232932329423295232962329723298232992330023301233022330323304233052330623307233082330923310233112331223313233142331523316233172331823319233202332123322233232332423325233262332723328233292333023331233322333323334233352333623337233382333923340233412334223343233442334523346233472334823349233502335123352233532335423355233562335723358233592336023361233622336323364233652336623367233682336923370233712337223373233742337523376233772337823379233802338123382233832338423385233862338723388233892339023391233922339323394233952339623397233982339923400234012340223403234042340523406234072340823409234102341123412234132341423415234162341723418234192342023421234222342323424234252342623427234282342923430234312343223433234342343523436234372343823439234402344123442234432344423445234462344723448234492345023451234522345323454234552345623457234582345923460234612346223463234642346523466234672346823469234702347123472234732347423475234762347723478234792348023481234822348323484234852348623487234882348923490234912349223493234942349523496234972349823499235002350123502235032350423505235062350723508235092351023511235122351323514235152351623517235182351923520235212352223523235242352523526235272352823529235302353123532235332353423535235362353723538235392354023541235422354323544235452354623547235482354923550235512355223553235542355523556235572355823559235602356123562235632356423565235662356723568235692357023571235722357323574235752357623577235782357923580235812358223583235842358523586235872358823589235902359123592235932359423595235962359723598235992360023601236022360323604236052360623607236082360923610236112361223613236142361523616236172361823619236202362123622236232362423625236262362723628236292363023631236322363323634236352363623637236382363923640236412364223643236442364523646236472364823649236502365123652236532365423655236562365723658236592366023661236622366323664236652366623667236682366923670236712367223673236742367523676236772367823679236802368123682236832368423685236862368723688236892369023691236922369323694236952369623697236982369923700237012370223703237042370523706237072370823709237102371123712237132371423715237162371723718237192372023721237222372323724237252372623727237282372923730237312373223733237342373523736237372373823739237402374123742237432374423745237462374723748237492375023751237522375323754237552375623757237582375923760237612376223763237642376523766237672376823769237702377123772237732377423775237762377723778237792378023781237822378323784237852378623787237882378923790237912379223793237942379523796237972379823799238002380123802238032380423805238062380723808238092381023811238122381323814238152381623817238182381923820238212382223823238242382523826238272382823829238302383123832238332383423835238362383723838238392384023841238422384323844238452384623847238482384923850238512385223853238542385523856238572385823859238602386123862238632386423865238662386723868238692387023871238722387323874238752387623877238782387923880238812388223883238842388523886238872388823889238902389123892238932389423895238962389723898238992390023901239022390323904239052390623907239082390923910239112391223913239142391523916239172391823919239202392123922239232392423925239262392723928239292393023931239322393323934239352393623937239382393923940239412394223943239442394523946239472394823949239502395123952239532395423955239562395723958239592396023961239622396323964239652396623967239682396923970239712397223973239742397523976239772397823979239802398123982239832398423985239862398723988239892399023991239922399323994239952399623997239982399924000240012400224003240042400524006240072400824009240102401124012240132401424015240162401724018240192402024021240222402324024240252402624027240282402924030240312403224033240342403524036240372403824039240402404124042240432404424045240462404724048240492405024051240522405324054240552405624057240582405924060240612406224063240642406524066240672406824069240702407124072240732407424075240762407724078240792408024081240822408324084240852408624087240882408924090240912409224093240942409524096240972409824099241002410124102241032410424105241062410724108241092411024111241122411324114241152411624117241182411924120241212412224123241242412524126241272412824129241302413124132241332413424135241362413724138241392414024141241422414324144241452414624147241482414924150241512415224153241542415524156241572415824159241602416124162241632416424165241662416724168241692417024171241722417324174241752417624177241782417924180241812418224183241842418524186241872418824189241902419124192241932419424195241962419724198241992420024201242022420324204242052420624207242082420924210242112421224213242142421524216242172421824219242202422124222242232422424225242262422724228242292423024231242322423324234242352423624237242382423924240242412424224243242442424524246242472424824249242502425124252242532425424255242562425724258242592426024261242622426324264242652426624267242682426924270242712427224273242742427524276242772427824279242802428124282242832428424285242862428724288242892429024291242922429324294242952429624297242982429924300243012430224303243042430524306243072430824309243102431124312243132431424315243162431724318243192432024321243222432324324243252432624327243282432924330243312433224333243342433524336243372433824339243402434124342243432434424345243462434724348243492435024351243522435324354243552435624357243582435924360243612436224363243642436524366243672436824369243702437124372243732437424375243762437724378243792438024381243822438324384243852438624387243882438924390243912439224393243942439524396243972439824399244002440124402244032440424405244062440724408244092441024411244122441324414244152441624417244182441924420244212442224423244242442524426244272442824429244302443124432244332443424435244362443724438244392444024441244422444324444244452444624447244482444924450244512445224453244542445524456244572445824459244602446124462244632446424465244662446724468244692447024471244722447324474244752447624477244782447924480244812448224483244842448524486244872448824489244902449124492244932449424495244962449724498244992450024501245022450324504245052450624507245082450924510245112451224513245142451524516245172451824519245202452124522245232452424525245262452724528245292453024531245322453324534245352453624537245382453924540245412454224543245442454524546245472454824549245502455124552245532455424555245562455724558245592456024561245622456324564245652456624567245682456924570245712457224573245742457524576245772457824579245802458124582245832458424585245862458724588245892459024591245922459324594245952459624597245982459924600246012460224603246042460524606246072460824609246102461124612246132461424615246162461724618246192462024621246222462324624246252462624627246282462924630246312463224633246342463524636246372463824639246402464124642246432464424645246462464724648246492465024651246522465324654246552465624657246582465924660246612466224663246642466524666246672466824669246702467124672246732467424675246762467724678246792468024681246822468324684246852468624687246882468924690246912469224693246942469524696246972469824699247002470124702247032470424705247062470724708247092471024711247122471324714247152471624717247182471924720247212472224723247242472524726247272472824729247302473124732247332473424735247362473724738247392474024741247422474324744247452474624747247482474924750247512475224753247542475524756247572475824759247602476124762247632476424765247662476724768247692477024771247722477324774247752477624777247782477924780247812478224783247842478524786247872478824789247902479124792247932479424795247962479724798247992480024801248022480324804248052480624807248082480924810248112481224813248142481524816248172481824819248202482124822248232482424825248262482724828248292483024831248322483324834248352483624837248382483924840248412484224843248442484524846248472484824849248502485124852248532485424855248562485724858248592486024861248622486324864248652486624867248682486924870248712487224873248742487524876248772487824879248802488124882248832488424885248862488724888248892489024891248922489324894248952489624897248982489924900249012490224903249042490524906249072490824909249102491124912249132491424915249162491724918249192492024921249222492324924249252492624927249282492924930249312493224933249342493524936249372493824939249402494124942249432494424945249462494724948249492495024951249522495324954249552495624957249582495924960249612496224963249642496524966249672496824969249702497124972249732497424975249762497724978249792498024981249822498324984249852498624987249882498924990249912499224993249942499524996249972499824999250002500125002250032500425005250062500725008250092501025011250122501325014250152501625017250182501925020250212502225023250242502525026250272502825029250302503125032250332503425035250362503725038250392504025041250422504325044250452504625047250482504925050250512505225053250542505525056250572505825059250602506125062250632506425065250662506725068250692507025071250722507325074250752507625077250782507925080250812508225083250842508525086250872508825089250902509125092250932509425095250962509725098250992510025101251022510325104251052510625107251082510925110251112511225113251142511525116251172511825119251202512125122251232512425125251262512725128251292513025131251322513325134251352513625137251382513925140251412514225143251442514525146251472514825149251502515125152251532515425155251562515725158251592516025161251622516325164251652516625167251682516925170251712517225173251742517525176251772517825179251802518125182251832518425185251862518725188251892519025191251922519325194251952519625197251982519925200252012520225203252042520525206252072520825209252102521125212252132521425215252162521725218252192522025221252222522325224252252522625227252282522925230252312523225233252342523525236252372523825239252402524125242252432524425245252462524725248252492525025251252522525325254252552525625257252582525925260252612526225263252642526525266252672526825269252702527125272252732527425275252762527725278252792528025281252822528325284252852528625287252882528925290252912529225293252942529525296252972529825299253002530125302253032530425305253062530725308253092531025311253122531325314253152531625317253182531925320253212532225323253242532525326253272532825329253302533125332253332533425335253362533725338253392534025341253422534325344253452534625347253482534925350253512535225353253542535525356253572535825359253602536125362253632536425365253662536725368253692537025371253722537325374253752537625377253782537925380253812538225383253842538525386253872538825389253902539125392253932539425395253962539725398253992540025401254022540325404254052540625407254082540925410254112541225413254142541525416254172541825419254202542125422254232542425425254262542725428254292543025431254322543325434254352543625437254382543925440254412544225443254442544525446254472544825449254502545125452254532545425455254562545725458254592546025461254622546325464254652546625467254682546925470254712547225473254742547525476254772547825479254802548125482254832548425485254862548725488254892549025491254922549325494254952549625497254982549925500255012550225503255042550525506255072550825509255102551125512255132551425515255162551725518255192552025521255222552325524255252552625527255282552925530255312553225533255342553525536255372553825539255402554125542255432554425545255462554725548255492555025551255522555325554255552555625557255582555925560255612556225563255642556525566255672556825569255702557125572255732557425575255762557725578255792558025581255822558325584255852558625587255882558925590255912559225593255942559525596255972559825599256002560125602256032560425605256062560725608256092561025611256122561325614256152561625617256182561925620256212562225623256242562525626256272562825629256302563125632256332563425635256362563725638256392564025641256422564325644256452564625647256482564925650256512565225653256542565525656256572565825659256602566125662256632566425665256662566725668256692567025671256722567325674256752567625677256782567925680256812568225683256842568525686256872568825689256902569125692256932569425695256962569725698256992570025701257022570325704257052570625707257082570925710257112571225713257142571525716257172571825719257202572125722257232572425725257262572725728257292573025731257322573325734257352573625737257382573925740257412574225743257442574525746257472574825749257502575125752257532575425755257562575725758257592576025761257622576325764257652576625767257682576925770257712577225773257742577525776257772577825779257802578125782257832578425785257862578725788257892579025791257922579325794257952579625797257982579925800258012580225803258042580525806258072580825809258102581125812258132581425815258162581725818258192582025821258222582325824258252582625827258282582925830258312583225833258342583525836258372583825839258402584125842258432584425845258462584725848258492585025851258522585325854258552585625857258582585925860258612586225863258642586525866258672586825869258702587125872258732587425875258762587725878258792588025881258822588325884258852588625887258882588925890258912589225893258942589525896258972589825899259002590125902259032590425905259062590725908259092591025911259122591325914259152591625917259182591925920259212592225923259242592525926259272592825929259302593125932259332593425935259362593725938259392594025941259422594325944259452594625947259482594925950259512595225953259542595525956259572595825959259602596125962259632596425965259662596725968259692597025971259722597325974259752597625977259782597925980259812598225983259842598525986259872598825989259902599125992259932599425995259962599725998259992600026001260022600326004260052600626007260082600926010260112601226013260142601526016260172601826019260202602126022260232602426025260262602726028260292603026031260322603326034260352603626037260382603926040260412604226043260442604526046260472604826049260502605126052260532605426055260562605726058260592606026061260622606326064260652606626067260682606926070260712607226073260742607526076260772607826079260802608126082260832608426085260862608726088260892609026091260922609326094260952609626097260982609926100261012610226103261042610526106261072610826109261102611126112261132611426115261162611726118261192612026121261222612326124261252612626127261282612926130261312613226133261342613526136261372613826139261402614126142261432614426145261462614726148261492615026151261522615326154261552615626157261582615926160261612616226163261642616526166261672616826169261702617126172261732617426175261762617726178261792618026181261822618326184261852618626187261882618926190261912619226193261942619526196261972619826199262002620126202262032620426205262062620726208262092621026211262122621326214262152621626217262182621926220262212622226223262242622526226262272622826229262302623126232262332623426235262362623726238262392624026241262422624326244262452624626247262482624926250262512625226253262542625526256262572625826259262602626126262262632626426265262662626726268262692627026271262722627326274262752627626277262782627926280262812628226283262842628526286262872628826289262902629126292262932629426295262962629726298262992630026301263022630326304263052630626307263082630926310263112631226313263142631526316263172631826319263202632126322263232632426325263262632726328263292633026331263322633326334263352633626337263382633926340263412634226343263442634526346263472634826349263502635126352263532635426355263562635726358263592636026361263622636326364263652636626367263682636926370263712637226373263742637526376263772637826379263802638126382263832638426385263862638726388263892639026391263922639326394263952639626397263982639926400264012640226403264042640526406264072640826409264102641126412264132641426415264162641726418264192642026421264222642326424264252642626427264282642926430264312643226433264342643526436264372643826439264402644126442264432644426445264462644726448264492645026451264522645326454264552645626457264582645926460264612646226463264642646526466264672646826469264702647126472264732647426475264762647726478264792648026481264822648326484264852648626487264882648926490264912649226493264942649526496264972649826499265002650126502265032650426505265062650726508265092651026511265122651326514265152651626517265182651926520265212652226523265242652526526265272652826529265302653126532265332653426535265362653726538265392654026541265422654326544265452654626547265482654926550265512655226553265542655526556265572655826559265602656126562265632656426565265662656726568265692657026571265722657326574265752657626577265782657926580265812658226583265842658526586265872658826589265902659126592265932659426595265962659726598265992660026601266022660326604266052660626607266082660926610266112661226613266142661526616266172661826619266202662126622266232662426625266262662726628266292663026631266322663326634266352663626637266382663926640266412664226643266442664526646266472664826649266502665126652266532665426655266562665726658266592666026661266622666326664266652666626667266682666926670266712667226673266742667526676266772667826679266802668126682266832668426685266862668726688266892669026691266922669326694266952669626697266982669926700267012670226703267042670526706267072670826709267102671126712267132671426715267162671726718267192672026721267222672326724267252672626727267282672926730267312673226733267342673526736267372673826739267402674126742267432674426745267462674726748267492675026751267522675326754267552675626757267582675926760267612676226763267642676526766267672676826769267702677126772267732677426775267762677726778267792678026781267822678326784267852678626787267882678926790267912679226793267942679526796267972679826799268002680126802268032680426805268062680726808268092681026811268122681326814268152681626817268182681926820268212682226823268242682526826268272682826829268302683126832268332683426835268362683726838268392684026841268422684326844268452684626847268482684926850268512685226853268542685526856268572685826859268602686126862268632686426865268662686726868268692687026871268722687326874268752687626877268782687926880268812688226883268842688526886268872688826889268902689126892268932689426895268962689726898268992690026901269022690326904269052690626907269082690926910269112691226913269142691526916269172691826919269202692126922269232692426925269262692726928269292693026931269322693326934269352693626937269382693926940269412694226943269442694526946269472694826949269502695126952269532695426955269562695726958269592696026961269622696326964269652696626967269682696926970269712697226973269742697526976269772697826979269802698126982269832698426985269862698726988269892699026991269922699326994269952699626997269982699927000270012700227003270042700527006270072700827009270102701127012270132701427015270162701727018270192702027021270222702327024270252702627027270282702927030270312703227033270342703527036270372703827039270402704127042270432704427045270462704727048270492705027051270522705327054270552705627057270582705927060270612706227063270642706527066270672706827069270702707127072270732707427075270762707727078270792708027081270822708327084270852708627087270882708927090270912709227093270942709527096270972709827099271002710127102271032710427105271062710727108271092711027111271122711327114271152711627117271182711927120271212712227123271242712527126271272712827129271302713127132271332713427135271362713727138271392714027141271422714327144271452714627147271482714927150271512715227153271542715527156271572715827159271602716127162271632716427165271662716727168271692717027171271722717327174271752717627177271782717927180271812718227183271842718527186271872718827189271902719127192271932719427195271962719727198271992720027201272022720327204272052720627207272082720927210272112721227213272142721527216272172721827219272202722127222272232722427225272262722727228272292723027231272322723327234272352723627237272382723927240272412724227243272442724527246272472724827249272502725127252272532725427255272562725727258272592726027261272622726327264272652726627267272682726927270272712727227273272742727527276272772727827279272802728127282272832728427285272862728727288272892729027291272922729327294272952729627297272982729927300273012730227303273042730527306273072730827309273102731127312273132731427315273162731727318273192732027321273222732327324273252732627327273282732927330273312733227333273342733527336273372733827339273402734127342273432734427345273462734727348273492735027351273522735327354273552735627357273582735927360273612736227363273642736527366273672736827369273702737127372273732737427375273762737727378273792738027381273822738327384273852738627387273882738927390273912739227393273942739527396273972739827399274002740127402274032740427405274062740727408274092741027411274122741327414274152741627417274182741927420274212742227423274242742527426274272742827429274302743127432274332743427435274362743727438274392744027441274422744327444274452744627447274482744927450274512745227453274542745527456274572745827459274602746127462274632746427465274662746727468274692747027471274722747327474274752747627477274782747927480274812748227483274842748527486274872748827489274902749127492274932749427495274962749727498274992750027501275022750327504275052750627507275082750927510275112751227513275142751527516275172751827519275202752127522275232752427525275262752727528275292753027531275322753327534275352753627537275382753927540275412754227543275442754527546275472754827549275502755127552275532755427555275562755727558275592756027561275622756327564275652756627567275682756927570275712757227573275742757527576275772757827579275802758127582275832758427585275862758727588275892759027591275922759327594275952759627597275982759927600276012760227603276042760527606276072760827609276102761127612276132761427615276162761727618276192762027621276222762327624276252762627627276282762927630276312763227633276342763527636276372763827639276402764127642276432764427645276462764727648276492765027651276522765327654276552765627657276582765927660276612766227663276642766527666276672766827669276702767127672276732767427675276762767727678276792768027681276822768327684276852768627687276882768927690276912769227693276942769527696276972769827699277002770127702277032770427705277062770727708277092771027711277122771327714277152771627717277182771927720277212772227723277242772527726277272772827729277302773127732277332773427735277362773727738277392774027741277422774327744277452774627747277482774927750277512775227753277542775527756277572775827759277602776127762277632776427765277662776727768277692777027771277722777327774277752777627777277782777927780277812778227783277842778527786277872778827789277902779127792277932779427795277962779727798277992780027801278022780327804278052780627807278082780927810278112781227813278142781527816278172781827819278202782127822278232782427825278262782727828278292783027831278322783327834278352783627837278382783927840278412784227843278442784527846278472784827849278502785127852278532785427855278562785727858278592786027861278622786327864278652786627867278682786927870278712787227873278742787527876278772787827879278802788127882278832788427885278862788727888278892789027891278922789327894278952789627897278982789927900279012790227903279042790527906279072790827909279102791127912279132791427915279162791727918279192792027921279222792327924279252792627927279282792927930279312793227933279342793527936279372793827939279402794127942279432794427945279462794727948279492795027951279522795327954279552795627957279582795927960279612796227963279642796527966279672796827969279702797127972279732797427975279762797727978279792798027981279822798327984279852798627987279882798927990279912799227993279942799527996279972799827999280002800128002280032800428005280062800728008280092801028011280122801328014280152801628017280182801928020280212802228023280242802528026280272802828029280302803128032280332803428035280362803728038280392804028041280422804328044280452804628047280482804928050280512805228053280542805528056280572805828059280602806128062280632806428065280662806728068280692807028071280722807328074280752807628077280782807928080280812808228083280842808528086280872808828089280902809128092280932809428095280962809728098280992810028101281022810328104281052810628107281082810928110281112811228113281142811528116281172811828119281202812128122281232812428125281262812728128281292813028131281322813328134281352813628137281382813928140281412814228143281442814528146281472814828149281502815128152281532815428155281562815728158281592816028161281622816328164281652816628167281682816928170281712817228173281742817528176281772817828179281802818128182281832818428185281862818728188281892819028191281922819328194281952819628197281982819928200282012820228203282042820528206282072820828209282102821128212282132821428215282162821728218282192822028221282222822328224282252822628227282282822928230282312823228233282342823528236282372823828239282402824128242282432824428245282462824728248282492825028251282522825328254282552825628257282582825928260282612826228263282642826528266282672826828269282702827128272282732827428275282762827728278282792828028281282822828328284282852828628287282882828928290282912829228293282942829528296282972829828299283002830128302283032830428305283062830728308283092831028311283122831328314283152831628317283182831928320283212832228323283242832528326283272832828329283302833128332283332833428335283362833728338283392834028341283422834328344283452834628347283482834928350283512835228353283542835528356283572835828359283602836128362283632836428365283662836728368283692837028371283722837328374283752837628377283782837928380283812838228383283842838528386283872838828389283902839128392283932839428395283962839728398283992840028401284022840328404284052840628407284082840928410284112841228413284142841528416284172841828419284202842128422284232842428425284262842728428284292843028431284322843328434284352843628437284382843928440284412844228443284442844528446284472844828449284502845128452284532845428455284562845728458284592846028461284622846328464284652846628467284682846928470284712847228473284742847528476284772847828479284802848128482284832848428485284862848728488284892849028491284922849328494284952849628497284982849928500285012850228503285042850528506285072850828509285102851128512285132851428515285162851728518285192852028521285222852328524285252852628527285282852928530285312853228533285342853528536285372853828539285402854128542285432854428545285462854728548285492855028551285522855328554285552855628557285582855928560285612856228563285642856528566285672856828569285702857128572285732857428575285762857728578285792858028581285822858328584285852858628587285882858928590285912859228593285942859528596285972859828599286002860128602286032860428605286062860728608286092861028611286122861328614286152861628617286182861928620286212862228623286242862528626286272862828629286302863128632286332863428635286362863728638286392864028641286422864328644286452864628647286482864928650286512865228653286542865528656286572865828659286602866128662286632866428665286662866728668286692867028671286722867328674286752867628677286782867928680286812868228683286842868528686286872868828689286902869128692286932869428695286962869728698286992870028701287022870328704287052870628707287082870928710287112871228713287142871528716287172871828719287202872128722287232872428725287262872728728287292873028731287322873328734287352873628737287382873928740287412874228743287442874528746287472874828749287502875128752287532875428755287562875728758287592876028761287622876328764287652876628767287682876928770287712877228773287742877528776287772877828779287802878128782287832878428785287862878728788287892879028791287922879328794287952879628797287982879928800288012880228803288042880528806288072880828809288102881128812288132881428815288162881728818288192882028821288222882328824288252882628827288282882928830288312883228833288342883528836288372883828839288402884128842288432884428845288462884728848288492885028851288522885328854288552885628857288582885928860288612886228863288642886528866288672886828869288702887128872288732887428875288762887728878288792888028881288822888328884288852888628887288882888928890288912889228893288942889528896288972889828899289002890128902289032890428905289062890728908289092891028911289122891328914289152891628917289182891928920289212892228923289242892528926289272892828929289302893128932289332893428935289362893728938289392894028941289422894328944289452894628947289482894928950289512895228953289542895528956289572895828959289602896128962289632896428965289662896728968289692897028971289722897328974289752897628977289782897928980289812898228983289842898528986289872898828989289902899128992289932899428995289962899728998289992900029001290022900329004290052900629007290082900929010290112901229013290142901529016290172901829019290202902129022290232902429025290262902729028290292903029031290322903329034290352903629037290382903929040290412904229043290442904529046290472904829049290502905129052290532905429055290562905729058290592906029061290622906329064290652906629067290682906929070290712907229073290742907529076290772907829079290802908129082290832908429085290862908729088290892909029091290922909329094290952909629097290982909929100291012910229103291042910529106291072910829109291102911129112291132911429115291162911729118291192912029121291222912329124291252912629127291282912929130291312913229133291342913529136291372913829139291402914129142291432914429145291462914729148291492915029151291522915329154291552915629157291582915929160291612916229163291642916529166291672916829169291702917129172291732917429175291762917729178291792918029181291822918329184291852918629187291882918929190291912919229193291942919529196291972919829199292002920129202292032920429205292062920729208292092921029211292122921329214292152921629217292182921929220292212922229223292242922529226292272922829229292302923129232292332923429235292362923729238292392924029241292422924329244292452924629247292482924929250292512925229253292542925529256292572925829259292602926129262292632926429265292662926729268292692927029271292722927329274292752927629277292782927929280292812928229283292842928529286292872928829289292902929129292292932929429295292962929729298292992930029301293022930329304293052930629307293082930929310293112931229313293142931529316293172931829319293202932129322293232932429325293262932729328293292933029331293322933329334293352933629337293382933929340293412934229343293442934529346293472934829349293502935129352293532935429355293562935729358293592936029361293622936329364293652936629367293682936929370293712937229373293742937529376293772937829379293802938129382293832938429385293862938729388293892939029391293922939329394293952939629397293982939929400294012940229403294042940529406294072940829409294102941129412294132941429415294162941729418294192942029421294222942329424294252942629427294282942929430294312943229433294342943529436294372943829439294402944129442294432944429445294462944729448294492945029451294522945329454294552945629457294582945929460294612946229463294642946529466294672946829469294702947129472294732947429475294762947729478294792948029481294822948329484294852948629487294882948929490294912949229493294942949529496294972949829499295002950129502295032950429505295062950729508295092951029511295122951329514295152951629517295182951929520295212952229523295242952529526295272952829529295302953129532295332953429535295362953729538295392954029541295422954329544295452954629547295482954929550295512955229553295542955529556295572955829559295602956129562295632956429565295662956729568295692957029571295722957329574295752957629577295782957929580295812958229583295842958529586295872958829589295902959129592295932959429595295962959729598295992960029601296022960329604296052960629607296082960929610296112961229613296142961529616296172961829619296202962129622296232962429625296262962729628296292963029631296322963329634296352963629637296382963929640296412964229643296442964529646296472964829649296502965129652296532965429655296562965729658296592966029661296622966329664296652966629667296682966929670296712967229673296742967529676296772967829679296802968129682296832968429685296862968729688296892969029691296922969329694296952969629697296982969929700297012970229703297042970529706297072970829709297102971129712297132971429715297162971729718297192972029721297222972329724297252972629727297282972929730297312973229733297342973529736297372973829739297402974129742297432974429745297462974729748297492975029751297522975329754297552975629757297582975929760297612976229763297642976529766297672976829769297702977129772297732977429775297762977729778297792978029781297822978329784297852978629787297882978929790297912979229793297942979529796297972979829799298002980129802298032980429805298062980729808298092981029811298122981329814298152981629817298182981929820298212982229823298242982529826298272982829829298302983129832298332983429835298362983729838298392984029841298422984329844298452984629847298482984929850298512985229853298542985529856298572985829859298602986129862298632986429865298662986729868298692987029871298722987329874298752987629877298782987929880298812988229883298842988529886298872988829889298902989129892298932989429895298962989729898298992990029901299022990329904299052990629907299082990929910299112991229913299142991529916299172991829919299202992129922299232992429925299262992729928299292993029931299322993329934299352993629937299382993929940299412994229943299442994529946299472994829949299502995129952299532995429955299562995729958299592996029961299622996329964299652996629967299682996929970299712997229973299742997529976299772997829979299802998129982299832998429985299862998729988299892999029991299922999329994299952999629997299982999930000300013000230003300043000530006300073000830009300103001130012300133001430015300163001730018300193002030021300223002330024300253002630027300283002930030300313003230033300343003530036300373003830039300403004130042300433004430045300463004730048300493005030051300523005330054300553005630057300583005930060300613006230063300643006530066300673006830069300703007130072300733007430075300763007730078300793008030081300823008330084300853008630087300883008930090300913009230093300943009530096300973009830099301003010130102301033010430105301063010730108301093011030111301123011330114301153011630117301183011930120301213012230123301243012530126301273012830129301303013130132301333013430135301363013730138301393014030141301423014330144301453014630147301483014930150301513015230153301543015530156301573015830159301603016130162301633016430165301663016730168301693017030171301723017330174301753017630177301783017930180301813018230183301843018530186301873018830189301903019130192301933019430195301963019730198301993020030201302023020330204302053020630207302083020930210302113021230213302143021530216302173021830219302203022130222302233022430225302263022730228302293023030231302323023330234302353023630237302383023930240302413024230243302443024530246302473024830249302503025130252302533025430255302563025730258302593026030261302623026330264302653026630267302683026930270302713027230273302743027530276302773027830279302803028130282302833028430285302863028730288302893029030291302923029330294302953029630297302983029930300303013030230303303043030530306303073030830309303103031130312303133031430315303163031730318303193032030321303223032330324303253032630327303283032930330303313033230333303343033530336303373033830339303403034130342303433034430345303463034730348303493035030351303523035330354303553035630357303583035930360303613036230363303643036530366303673036830369303703037130372303733037430375303763037730378303793038030381303823038330384303853038630387303883038930390303913039230393303943039530396303973039830399304003040130402304033040430405304063040730408304093041030411304123041330414304153041630417304183041930420304213042230423304243042530426304273042830429304303043130432304333043430435304363043730438304393044030441304423044330444304453044630447304483044930450304513045230453304543045530456304573045830459304603046130462304633046430465304663046730468304693047030471304723047330474304753047630477304783047930480304813048230483304843048530486304873048830489304903049130492304933049430495304963049730498304993050030501305023050330504305053050630507305083050930510305113051230513305143051530516305173051830519305203052130522305233052430525305263052730528305293053030531305323053330534305353053630537305383053930540305413054230543305443054530546305473054830549305503055130552305533055430555305563055730558305593056030561305623056330564305653056630567305683056930570305713057230573305743057530576305773057830579305803058130582305833058430585305863058730588305893059030591305923059330594305953059630597305983059930600306013060230603306043060530606306073060830609306103061130612306133061430615306163061730618306193062030621306223062330624306253062630627306283062930630306313063230633306343063530636306373063830639306403064130642306433064430645306463064730648306493065030651306523065330654306553065630657306583065930660306613066230663306643066530666306673066830669306703067130672306733067430675306763067730678306793068030681306823068330684306853068630687306883068930690306913069230693306943069530696306973069830699307003070130702307033070430705307063070730708307093071030711307123071330714307153071630717307183071930720307213072230723307243072530726307273072830729307303073130732307333073430735307363073730738307393074030741307423074330744307453074630747307483074930750307513075230753307543075530756307573075830759307603076130762307633076430765307663076730768307693077030771307723077330774307753077630777307783077930780307813078230783307843078530786307873078830789307903079130792307933079430795307963079730798307993080030801308023080330804308053080630807308083080930810308113081230813308143081530816308173081830819308203082130822308233082430825308263082730828308293083030831308323083330834308353083630837308383083930840308413084230843308443084530846308473084830849308503085130852308533085430855308563085730858308593086030861308623086330864308653086630867308683086930870308713087230873308743087530876308773087830879308803088130882308833088430885308863088730888308893089030891308923089330894308953089630897308983089930900309013090230903309043090530906309073090830909309103091130912309133091430915309163091730918309193092030921309223092330924309253092630927309283092930930309313093230933309343093530936309373093830939309403094130942309433094430945309463094730948309493095030951309523095330954309553095630957309583095930960309613096230963309643096530966309673096830969309703097130972309733097430975309763097730978309793098030981309823098330984309853098630987309883098930990309913099230993309943099530996309973099830999310003100131002310033100431005310063100731008310093101031011310123101331014310153101631017310183101931020310213102231023310243102531026310273102831029310303103131032310333103431035310363103731038310393104031041310423104331044310453104631047310483104931050310513105231053310543105531056310573105831059310603106131062310633106431065310663106731068310693107031071310723107331074310753107631077310783107931080310813108231083310843108531086310873108831089310903109131092310933109431095310963109731098310993110031101311023110331104311053110631107311083110931110311113111231113311143111531116311173111831119311203112131122311233112431125311263112731128311293113031131311323113331134311353113631137311383113931140311413114231143311443114531146311473114831149311503115131152311533115431155311563115731158311593116031161311623116331164311653116631167311683116931170311713117231173311743117531176311773117831179311803118131182311833118431185311863118731188311893119031191311923119331194311953119631197311983119931200312013120231203312043120531206312073120831209312103121131212312133121431215312163121731218312193122031221312223122331224312253122631227312283122931230312313123231233312343123531236312373123831239312403124131242312433124431245312463124731248312493125031251312523125331254312553125631257312583125931260312613126231263312643126531266312673126831269312703127131272312733127431275312763127731278312793128031281312823128331284312853128631287312883128931290312913129231293312943129531296312973129831299313003130131302313033130431305313063130731308313093131031311313123131331314313153131631317313183131931320313213132231323313243132531326313273132831329313303133131332313333133431335313363133731338313393134031341313423134331344313453134631347313483134931350313513135231353313543135531356313573135831359313603136131362313633136431365313663136731368313693137031371313723137331374313753137631377313783137931380313813138231383313843138531386313873138831389313903139131392313933139431395313963139731398313993140031401314023140331404314053140631407314083140931410314113141231413314143141531416314173141831419314203142131422314233142431425314263142731428314293143031431314323143331434314353143631437314383143931440314413144231443314443144531446314473144831449314503145131452314533145431455314563145731458314593146031461314623146331464314653146631467314683146931470314713147231473314743147531476314773147831479314803148131482314833148431485314863148731488314893149031491314923149331494314953149631497314983149931500315013150231503315043150531506315073150831509315103151131512315133151431515315163151731518315193152031521315223152331524315253152631527315283152931530315313153231533315343153531536315373153831539315403154131542315433154431545315463154731548315493155031551315523155331554315553155631557315583155931560315613156231563315643156531566315673156831569315703157131572315733157431575315763157731578315793158031581315823158331584315853158631587315883158931590315913159231593315943159531596315973159831599316003160131602316033160431605316063160731608316093161031611316123161331614316153161631617316183161931620316213162231623316243162531626316273162831629316303163131632316333163431635316363163731638316393164031641316423164331644316453164631647316483164931650316513165231653316543165531656316573165831659316603166131662316633166431665316663166731668316693167031671316723167331674316753167631677316783167931680316813168231683316843168531686316873168831689316903169131692316933169431695316963169731698316993170031701317023170331704317053170631707317083170931710317113171231713317143171531716317173171831719317203172131722317233172431725317263172731728
  1. /* Sinon.JS 7.2.4, 2019-02-18, @license BSD-3 */(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.sinon = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
  2. "use strict";
  3. var behavior = require("./sinon/behavior");
  4. var createSandbox = require("./sinon/create-sandbox");
  5. var deprecated = require("./sinon/util/core/deprecated");
  6. var extend = require("./sinon/util/core/extend");
  7. var fakeTimers = require("./sinon/util/fake-timers");
  8. var format = require("./sinon/util/core/format");
  9. var nise = require("nise");
  10. var Sandbox = require("./sinon/sandbox");
  11. var stub = require("./sinon/stub");
  12. var apiMethods = {
  13. createSandbox: createSandbox,
  14. assert: require("./sinon/assert"),
  15. match: require("@sinonjs/samsam").createMatcher,
  16. spyCall: require("./sinon/call"),
  17. expectation: require("./sinon/mock-expectation"),
  18. createStubInstance: require("./sinon/stub").createStubInstance,
  19. defaultConfig: require("./sinon/util/core/default-config"),
  20. setFormatter: format.setFormatter,
  21. // fake timers
  22. timers: fakeTimers.timers,
  23. // fake XHR
  24. xhr: nise.fakeXhr.xhr,
  25. FakeXMLHttpRequest: nise.fakeXhr.FakeXMLHttpRequest,
  26. // fake server
  27. fakeServer: nise.fakeServer,
  28. fakeServerWithClock: nise.fakeServerWithClock,
  29. createFakeServer: nise.fakeServer.create.bind(nise.fakeServer),
  30. createFakeServerWithClock: nise.fakeServerWithClock.create.bind(nise.fakeServerWithClock),
  31. addBehavior: function(name, fn) {
  32. behavior.addBehavior(stub, name, fn);
  33. }
  34. };
  35. var legacySandboxAPI = {
  36. sandbox: {
  37. create: deprecated.wrap(
  38. createSandbox,
  39. // eslint-disable-next-line max-len
  40. "`sandbox.create()` is deprecated. Use default sandbox at `sinon.sandbox` or create new sandboxes with `sinon.createSandbox()`"
  41. )
  42. }
  43. };
  44. var sandbox = new Sandbox();
  45. var api = extend(sandbox, legacySandboxAPI, apiMethods);
  46. module.exports = api;
  47. },{"./sinon/assert":2,"./sinon/behavior":3,"./sinon/call":4,"./sinon/create-sandbox":7,"./sinon/mock-expectation":10,"./sinon/sandbox":12,"./sinon/stub":16,"./sinon/util/core/default-config":18,"./sinon/util/core/deprecated":19,"./sinon/util/core/extend":21,"./sinon/util/core/format":22,"./sinon/util/fake-timers":34,"@sinonjs/samsam":65,"nise":85}],2:[function(require,module,exports){
  48. (function (global){
  49. "use strict";
  50. var arrayProto = require("@sinonjs/commons").prototypes.array;
  51. var calledInOrder = require("@sinonjs/commons").calledInOrder;
  52. var createMatcher = require("@sinonjs/samsam").createMatcher;
  53. var orderByFirstCall = require("@sinonjs/commons").orderByFirstCall;
  54. var timesInWords = require("./util/core/times-in-words");
  55. var format = require("./util/core/format");
  56. var stringSlice = require("@sinonjs/commons").prototypes.string.slice;
  57. var arraySlice = arrayProto.slice;
  58. var concat = arrayProto.concat;
  59. var forEach = arrayProto.forEach;
  60. var join = arrayProto.join;
  61. var splice = arrayProto.splice;
  62. var assert;
  63. function verifyIsStub() {
  64. var args = arraySlice(arguments);
  65. forEach(args, function(method) {
  66. if (!method) {
  67. assert.fail("fake is not a spy");
  68. }
  69. if (method.proxy && method.proxy.isSinonProxy) {
  70. verifyIsStub(method.proxy);
  71. } else {
  72. if (typeof method !== "function") {
  73. assert.fail(method + " is not a function");
  74. }
  75. if (typeof method.getCall !== "function") {
  76. assert.fail(method + " is not stubbed");
  77. }
  78. }
  79. });
  80. }
  81. function verifyIsValidAssertion(assertionMethod, assertionArgs) {
  82. switch (assertionMethod) {
  83. case "notCalled":
  84. case "called":
  85. case "calledOnce":
  86. case "calledTwice":
  87. case "calledThrice":
  88. if (assertionArgs.length !== 0) {
  89. assert.fail(
  90. assertionMethod +
  91. " takes 1 argument but was called with " +
  92. (assertionArgs.length + 1) +
  93. " arguments"
  94. );
  95. }
  96. break;
  97. default:
  98. break;
  99. }
  100. }
  101. function failAssertion(object, msg) {
  102. var obj = object || global;
  103. var failMethod = obj.fail || assert.fail;
  104. failMethod.call(obj, msg);
  105. }
  106. function mirrorPropAsAssertion(name, method, message) {
  107. var msg = message;
  108. var meth = method;
  109. if (arguments.length === 2) {
  110. msg = method;
  111. meth = name;
  112. }
  113. assert[name] = function(fake) {
  114. verifyIsStub(fake);
  115. var args = arraySlice(arguments, 1);
  116. var failed = false;
  117. verifyIsValidAssertion(name, args);
  118. if (typeof meth === "function") {
  119. failed = !meth(fake);
  120. } else {
  121. failed = typeof fake[meth] === "function" ? !fake[meth].apply(fake, args) : !fake[meth];
  122. }
  123. if (failed) {
  124. failAssertion(this, (fake.printf || fake.proxy.printf).apply(fake, concat([msg], args)));
  125. } else {
  126. assert.pass(name);
  127. }
  128. };
  129. }
  130. function exposedName(prefix, prop) {
  131. return !prefix || /^fail/.test(prop) ? prop : prefix + stringSlice(prop, 0, 1).toUpperCase() + stringSlice(prop, 1);
  132. }
  133. assert = {
  134. failException: "AssertError",
  135. fail: function fail(message) {
  136. var error = new Error(message);
  137. error.name = this.failException || assert.failException;
  138. throw error;
  139. },
  140. pass: function pass() {
  141. return;
  142. },
  143. callOrder: function assertCallOrder() {
  144. verifyIsStub.apply(null, arguments);
  145. var expected = "";
  146. var actual = "";
  147. if (!calledInOrder(arguments)) {
  148. try {
  149. expected = join(arguments, ", ");
  150. var calls = arraySlice(arguments);
  151. var i = calls.length;
  152. while (i) {
  153. if (!calls[--i].called) {
  154. splice(calls, i, 1);
  155. }
  156. }
  157. actual = join(orderByFirstCall(calls), ", ");
  158. } catch (e) {
  159. // If this fails, we'll just fall back to the blank string
  160. }
  161. failAssertion(this, "expected " + expected + " to be called in order but were called as " + actual);
  162. } else {
  163. assert.pass("callOrder");
  164. }
  165. },
  166. callCount: function assertCallCount(method, count) {
  167. verifyIsStub(method);
  168. if (method.callCount !== count) {
  169. var msg = "expected %n to be called " + timesInWords(count) + " but was called %c%C";
  170. failAssertion(this, method.printf(msg));
  171. } else {
  172. assert.pass("callCount");
  173. }
  174. },
  175. expose: function expose(target, options) {
  176. if (!target) {
  177. throw new TypeError("target is null or undefined");
  178. }
  179. var o = options || {};
  180. var prefix = (typeof o.prefix === "undefined" && "assert") || o.prefix;
  181. var includeFail = typeof o.includeFail === "undefined" || Boolean(o.includeFail);
  182. var instance = this;
  183. forEach(Object.keys(instance), function(method) {
  184. if (method !== "expose" && (includeFail || !/^(fail)/.test(method))) {
  185. target[exposedName(prefix, method)] = instance[method];
  186. }
  187. });
  188. return target;
  189. },
  190. match: function match(actual, expectation) {
  191. var matcher = createMatcher(expectation);
  192. if (matcher.test(actual)) {
  193. assert.pass("match");
  194. } else {
  195. var formatted = [
  196. "expected value to match",
  197. " expected = " + format(expectation),
  198. " actual = " + format(actual)
  199. ];
  200. failAssertion(this, join(formatted, "\n"));
  201. }
  202. }
  203. };
  204. mirrorPropAsAssertion("called", "expected %n to have been called at least once but was never called");
  205. mirrorPropAsAssertion(
  206. "notCalled",
  207. function(spy) {
  208. return !spy.called;
  209. },
  210. "expected %n to not have been called but was called %c%C"
  211. );
  212. mirrorPropAsAssertion("calledOnce", "expected %n to be called once but was called %c%C");
  213. mirrorPropAsAssertion("calledTwice", "expected %n to be called twice but was called %c%C");
  214. mirrorPropAsAssertion("calledThrice", "expected %n to be called thrice but was called %c%C");
  215. mirrorPropAsAssertion("calledOn", "expected %n to be called with %1 as this but was called with %t");
  216. mirrorPropAsAssertion("alwaysCalledOn", "expected %n to always be called with %1 as this but was called with %t");
  217. mirrorPropAsAssertion("calledWithNew", "expected %n to be called with new");
  218. mirrorPropAsAssertion("alwaysCalledWithNew", "expected %n to always be called with new");
  219. mirrorPropAsAssertion("calledWith", "expected %n to be called with arguments %D");
  220. mirrorPropAsAssertion("calledWithMatch", "expected %n to be called with match %D");
  221. mirrorPropAsAssertion("alwaysCalledWith", "expected %n to always be called with arguments %D");
  222. mirrorPropAsAssertion("alwaysCalledWithMatch", "expected %n to always be called with match %D");
  223. mirrorPropAsAssertion("calledWithExactly", "expected %n to be called with exact arguments %D");
  224. mirrorPropAsAssertion("alwaysCalledWithExactly", "expected %n to always be called with exact arguments %D");
  225. mirrorPropAsAssertion("neverCalledWith", "expected %n to never be called with arguments %*%C");
  226. mirrorPropAsAssertion("neverCalledWithMatch", "expected %n to never be called with match %*%C");
  227. mirrorPropAsAssertion("threw", "%n did not throw exception%C");
  228. mirrorPropAsAssertion("alwaysThrew", "%n did not always throw exception%C");
  229. module.exports = assert;
  230. }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
  231. },{"./util/core/format":22,"./util/core/times-in-words":30,"@sinonjs/commons":39,"@sinonjs/samsam":65}],3:[function(require,module,exports){
  232. "use strict";
  233. var arrayProto = require("@sinonjs/commons").prototypes.array;
  234. var extend = require("./util/core/extend");
  235. var functionName = require("@sinonjs/commons").functionName;
  236. var nextTick = require("./util/core/next-tick");
  237. var valueToString = require("@sinonjs/commons").valueToString;
  238. var exportAsyncBehaviors = require("./util/core/export-async-behaviors");
  239. var concat = arrayProto.concat;
  240. var join = arrayProto.join;
  241. var reverse = arrayProto.reverse;
  242. var slice = arrayProto.slice;
  243. var useLeftMostCallback = -1;
  244. var useRightMostCallback = -2;
  245. function getCallback(behavior, args) {
  246. var callArgAt = behavior.callArgAt;
  247. if (callArgAt >= 0) {
  248. return args[callArgAt];
  249. }
  250. var argumentList;
  251. if (callArgAt === useLeftMostCallback) {
  252. argumentList = args;
  253. }
  254. if (callArgAt === useRightMostCallback) {
  255. argumentList = reverse(slice(args));
  256. }
  257. var callArgProp = behavior.callArgProp;
  258. for (var i = 0, l = argumentList.length; i < l; ++i) {
  259. if (!callArgProp && typeof argumentList[i] === "function") {
  260. return argumentList[i];
  261. }
  262. if (callArgProp && argumentList[i] && typeof argumentList[i][callArgProp] === "function") {
  263. return argumentList[i][callArgProp];
  264. }
  265. }
  266. return null;
  267. }
  268. function getCallbackError(behavior, func, args) {
  269. if (behavior.callArgAt < 0) {
  270. var msg;
  271. if (behavior.callArgProp) {
  272. msg =
  273. functionName(behavior.stub) +
  274. " expected to yield to '" +
  275. valueToString(behavior.callArgProp) +
  276. "', but no object with such a property was passed.";
  277. } else {
  278. msg = functionName(behavior.stub) + " expected to yield, but no callback was passed.";
  279. }
  280. if (args.length > 0) {
  281. msg += " Received [" + join(args, ", ") + "]";
  282. }
  283. return msg;
  284. }
  285. return "argument at index " + behavior.callArgAt + " is not a function: " + func;
  286. }
  287. function ensureArgs(name, behavior, args) {
  288. // map function name to internal property
  289. // callsArg => callArgAt
  290. var property = name.replace(/sArg/, "ArgAt");
  291. var index = behavior[property];
  292. if (index >= args.length) {
  293. throw new TypeError(
  294. name + " failed: " + (index + 1) + " arguments required but only " + args.length + " present"
  295. );
  296. }
  297. }
  298. function callCallback(behavior, args) {
  299. if (typeof behavior.callArgAt === "number") {
  300. ensureArgs("callsArg", behavior, args);
  301. var func = getCallback(behavior, args);
  302. if (typeof func !== "function") {
  303. throw new TypeError(getCallbackError(behavior, func, args));
  304. }
  305. if (behavior.callbackAsync) {
  306. nextTick(function() {
  307. func.apply(behavior.callbackContext, behavior.callbackArguments);
  308. });
  309. } else {
  310. return func.apply(behavior.callbackContext, behavior.callbackArguments);
  311. }
  312. }
  313. return undefined;
  314. }
  315. var proto = {
  316. create: function create(stub) {
  317. var behavior = extend({}, proto);
  318. delete behavior.create;
  319. delete behavior.addBehavior;
  320. delete behavior.createBehavior;
  321. behavior.stub = stub;
  322. if (stub.defaultBehavior && stub.defaultBehavior.promiseLibrary) {
  323. behavior.promiseLibrary = stub.defaultBehavior.promiseLibrary;
  324. }
  325. return behavior;
  326. },
  327. isPresent: function isPresent() {
  328. return (
  329. typeof this.callArgAt === "number" ||
  330. this.exception ||
  331. this.exceptionCreator ||
  332. typeof this.returnArgAt === "number" ||
  333. this.returnThis ||
  334. typeof this.resolveArgAt === "number" ||
  335. this.resolveThis ||
  336. typeof this.throwArgAt === "number" ||
  337. this.fakeFn ||
  338. this.returnValueDefined
  339. );
  340. },
  341. invoke: function invoke(context, args) {
  342. /*
  343. * callCallback (conditionally) calls ensureArgs
  344. *
  345. * Note: callCallback intentionally happens before
  346. * everything else and cannot be moved lower
  347. */
  348. var returnValue = callCallback(this, args);
  349. if (this.exception) {
  350. throw this.exception;
  351. } else if (this.exceptionCreator) {
  352. this.exception = this.exceptionCreator();
  353. this.exceptionCreator = undefined;
  354. throw this.exception;
  355. } else if (typeof this.returnArgAt === "number") {
  356. ensureArgs("returnsArg", this, args);
  357. return args[this.returnArgAt];
  358. } else if (this.returnThis) {
  359. return context;
  360. } else if (typeof this.throwArgAt === "number") {
  361. ensureArgs("throwsArg", this, args);
  362. throw args[this.throwArgAt];
  363. } else if (this.fakeFn) {
  364. return this.fakeFn.apply(context, args);
  365. } else if (typeof this.resolveArgAt === "number") {
  366. ensureArgs("resolvesArg", this, args);
  367. return (this.promiseLibrary || Promise).resolve(args[this.resolveArgAt]);
  368. } else if (this.resolveThis) {
  369. return (this.promiseLibrary || Promise).resolve(context);
  370. } else if (this.resolve) {
  371. return (this.promiseLibrary || Promise).resolve(this.returnValue);
  372. } else if (this.reject) {
  373. return (this.promiseLibrary || Promise).reject(this.returnValue);
  374. } else if (this.callsThrough) {
  375. return this.stub.wrappedMethod.apply(context, args);
  376. } else if (typeof this.returnValue !== "undefined") {
  377. return this.returnValue;
  378. } else if (typeof this.callArgAt === "number") {
  379. return returnValue;
  380. }
  381. return this.returnValue;
  382. },
  383. onCall: function onCall(index) {
  384. return this.stub.onCall(index);
  385. },
  386. onFirstCall: function onFirstCall() {
  387. return this.stub.onFirstCall();
  388. },
  389. onSecondCall: function onSecondCall() {
  390. return this.stub.onSecondCall();
  391. },
  392. onThirdCall: function onThirdCall() {
  393. return this.stub.onThirdCall();
  394. },
  395. withArgs: function withArgs(/* arguments */) {
  396. throw new Error(
  397. 'Defining a stub by invoking "stub.onCall(...).withArgs(...)" ' +
  398. 'is not supported. Use "stub.withArgs(...).onCall(...)" ' +
  399. "to define sequential behavior for calls with certain arguments."
  400. );
  401. }
  402. };
  403. function createBehavior(behaviorMethod) {
  404. return function() {
  405. this.defaultBehavior = this.defaultBehavior || proto.create(this);
  406. this.defaultBehavior[behaviorMethod].apply(this.defaultBehavior, arguments);
  407. return this;
  408. };
  409. }
  410. function addBehavior(stub, name, fn) {
  411. proto[name] = function() {
  412. fn.apply(this, concat([this], slice(arguments)));
  413. return this.stub || this;
  414. };
  415. stub[name] = createBehavior(name);
  416. }
  417. proto.addBehavior = addBehavior;
  418. proto.createBehavior = createBehavior;
  419. var asyncBehaviors = exportAsyncBehaviors(proto);
  420. module.exports = extend.nonEnum({}, proto, asyncBehaviors);
  421. },{"./util/core/export-async-behaviors":20,"./util/core/extend":21,"./util/core/next-tick":29,"@sinonjs/commons":39}],4:[function(require,module,exports){
  422. "use strict";
  423. var arrayProto = require("@sinonjs/commons").prototypes.array;
  424. var match = require("@sinonjs/samsam").createMatcher;
  425. var deepEqual = require("@sinonjs/samsam").deepEqual;
  426. var functionName = require("@sinonjs/commons").functionName;
  427. var sinonFormat = require("./util/core/format");
  428. var valueToString = require("@sinonjs/commons").valueToString;
  429. var concat = arrayProto.concat;
  430. var filter = arrayProto.filter;
  431. var join = arrayProto.join;
  432. var map = arrayProto.map;
  433. var reduce = arrayProto.reduce;
  434. var slice = arrayProto.slice;
  435. function throwYieldError(proxy, text, args) {
  436. var msg = functionName(proxy) + text;
  437. if (args.length) {
  438. msg += " Received [" + join(slice(args), ", ") + "]";
  439. }
  440. throw new Error(msg);
  441. }
  442. var callProto = {
  443. calledOn: function calledOn(thisValue) {
  444. if (match.isMatcher(thisValue)) {
  445. return thisValue.test(this.thisValue);
  446. }
  447. return this.thisValue === thisValue;
  448. },
  449. calledWith: function calledWith() {
  450. var self = this;
  451. var calledWithArgs = slice(arguments);
  452. if (calledWithArgs.length > self.args.length) {
  453. return false;
  454. }
  455. return reduce(
  456. calledWithArgs,
  457. function(prev, arg, i) {
  458. return prev && deepEqual(self.args[i], arg);
  459. },
  460. true
  461. );
  462. },
  463. calledWithMatch: function calledWithMatch() {
  464. var self = this;
  465. var calledWithMatchArgs = slice(arguments);
  466. if (calledWithMatchArgs.length > self.args.length) {
  467. return false;
  468. }
  469. return reduce(
  470. calledWithMatchArgs,
  471. function(prev, expectation, i) {
  472. var actual = self.args[i];
  473. return prev && match(expectation).test(actual);
  474. },
  475. true
  476. );
  477. },
  478. calledWithExactly: function calledWithExactly() {
  479. return arguments.length === this.args.length && this.calledWith.apply(this, arguments);
  480. },
  481. notCalledWith: function notCalledWith() {
  482. return !this.calledWith.apply(this, arguments);
  483. },
  484. notCalledWithMatch: function notCalledWithMatch() {
  485. return !this.calledWithMatch.apply(this, arguments);
  486. },
  487. returned: function returned(value) {
  488. return deepEqual(this.returnValue, value);
  489. },
  490. threw: function threw(error) {
  491. if (typeof error === "undefined" || !this.exception) {
  492. return Boolean(this.exception);
  493. }
  494. return this.exception === error || this.exception.name === error;
  495. },
  496. calledWithNew: function calledWithNew() {
  497. return this.proxy.prototype && this.thisValue instanceof this.proxy;
  498. },
  499. calledBefore: function(other) {
  500. return this.callId < other.callId;
  501. },
  502. calledAfter: function(other) {
  503. return this.callId > other.callId;
  504. },
  505. calledImmediatelyBefore: function(other) {
  506. return this.callId === other.callId - 1;
  507. },
  508. calledImmediatelyAfter: function(other) {
  509. return this.callId === other.callId + 1;
  510. },
  511. callArg: function(pos) {
  512. this.ensureArgIsAFunction(pos);
  513. return this.args[pos]();
  514. },
  515. callArgOn: function(pos, thisValue) {
  516. this.ensureArgIsAFunction(pos);
  517. return this.args[pos].apply(thisValue);
  518. },
  519. callArgWith: function(pos) {
  520. return this.callArgOnWith.apply(this, concat([pos, null], slice(arguments, 1)));
  521. },
  522. callArgOnWith: function(pos, thisValue) {
  523. this.ensureArgIsAFunction(pos);
  524. var args = slice(arguments, 2);
  525. return this.args[pos].apply(thisValue, args);
  526. },
  527. throwArg: function(pos) {
  528. if (pos > this.args.length) {
  529. throw new TypeError("Not enough arguments: " + pos + " required but only " + this.args.length + " present");
  530. }
  531. throw this.args[pos];
  532. },
  533. yield: function() {
  534. return this.yieldOn.apply(this, concat([null], slice(arguments, 0)));
  535. },
  536. yieldOn: function(thisValue) {
  537. var args = slice(this.args);
  538. var yieldFn = filter(args, function(arg) {
  539. return typeof arg === "function";
  540. })[0];
  541. if (!yieldFn) {
  542. throwYieldError(this.proxy, " cannot yield since no callback was passed.", args);
  543. }
  544. return yieldFn.apply(thisValue, slice(arguments, 1));
  545. },
  546. yieldTo: function(prop) {
  547. return this.yieldToOn.apply(this, concat([prop, null], slice(arguments, 1)));
  548. },
  549. yieldToOn: function(prop, thisValue) {
  550. var args = slice(this.args);
  551. var yieldArg = filter(args, function(arg) {
  552. return arg && typeof arg[prop] === "function";
  553. })[0];
  554. var yieldFn = yieldArg && yieldArg[prop];
  555. if (!yieldFn) {
  556. throwYieldError(
  557. this.proxy,
  558. " cannot yield to '" + valueToString(prop) + "' since no callback was passed.",
  559. args
  560. );
  561. }
  562. return yieldFn.apply(thisValue, slice(arguments, 2));
  563. },
  564. toString: function() {
  565. var callStr = this.proxy ? String(this.proxy) + "(" : "";
  566. var formattedArgs;
  567. if (!this.args) {
  568. return ":(";
  569. }
  570. formattedArgs = map(this.args, function(arg) {
  571. return sinonFormat(arg);
  572. });
  573. callStr = callStr + join(formattedArgs, ", ") + ")";
  574. if (typeof this.returnValue !== "undefined") {
  575. callStr += " => " + sinonFormat(this.returnValue);
  576. }
  577. if (this.exception) {
  578. callStr += " !" + this.exception.name;
  579. if (this.exception.message) {
  580. callStr += "(" + this.exception.message + ")";
  581. }
  582. }
  583. if (this.stack) {
  584. // Omit the error message and the two top stack frames in sinon itself:
  585. callStr += (this.stack.split("\n")[3] || "unknown").replace(/^\s*(?:at\s+|@)?/, " at ");
  586. }
  587. return callStr;
  588. },
  589. ensureArgIsAFunction: function(pos) {
  590. if (typeof this.args[pos] !== "function") {
  591. throw new TypeError(
  592. "Expected argument at position " + pos + " to be a Function, but was " + typeof this.args[pos]
  593. );
  594. }
  595. }
  596. };
  597. Object.defineProperty(callProto, "stack", {
  598. enumerable: true,
  599. configurable: true,
  600. get: function() {
  601. return (this.errorWithCallStack && this.errorWithCallStack.stack) || "";
  602. }
  603. });
  604. callProto.invokeCallback = callProto.yield;
  605. function createSpyCall(spy, thisValue, args, returnValue, exception, id, errorWithCallStack) {
  606. if (typeof id !== "number") {
  607. throw new TypeError("Call id is not a number");
  608. }
  609. var proxyCall = Object.create(callProto);
  610. var lastArg = (args.length > 0 && args[args.length - 1]) || undefined;
  611. var callback = lastArg && typeof lastArg === "function" ? lastArg : undefined;
  612. proxyCall.proxy = spy;
  613. proxyCall.thisValue = thisValue;
  614. proxyCall.args = args;
  615. proxyCall.lastArg = lastArg;
  616. proxyCall.callback = callback;
  617. proxyCall.returnValue = returnValue;
  618. proxyCall.exception = exception;
  619. proxyCall.callId = id;
  620. proxyCall.errorWithCallStack = errorWithCallStack;
  621. return proxyCall;
  622. }
  623. createSpyCall.toString = callProto.toString; // used by mocks
  624. module.exports = createSpyCall;
  625. },{"./util/core/format":22,"@sinonjs/commons":39,"@sinonjs/samsam":65}],5:[function(require,module,exports){
  626. "use strict";
  627. var walk = require("./util/core/walk");
  628. var getPropertyDescriptor = require("./util/core/get-property-descriptor");
  629. var hasOwnProperty = require("@sinonjs/commons").prototypes.object.hasOwnProperty;
  630. var push = require("@sinonjs/commons").prototypes.array.push;
  631. function collectMethod(methods, object, prop, propOwner) {
  632. if (typeof getPropertyDescriptor(propOwner, prop).value === "function" && hasOwnProperty(object, prop)) {
  633. push(methods, object[prop]);
  634. }
  635. }
  636. // This function returns an array of all the own methods on the passed object
  637. function collectOwnMethods(object) {
  638. var methods = [];
  639. walk(object, collectMethod.bind(null, methods, object));
  640. return methods;
  641. }
  642. module.exports = collectOwnMethods;
  643. },{"./util/core/get-property-descriptor":25,"./util/core/walk":32,"@sinonjs/commons":39}],6:[function(require,module,exports){
  644. "use strict";
  645. var supportsColor = require("supports-color");
  646. function colorize(str, color) {
  647. if (supportsColor.stdout === false) {
  648. return str;
  649. }
  650. return "\x1b[" + color + "m" + str + "\x1b[0m";
  651. }
  652. exports.red = function(str) {
  653. return colorize(str, 31);
  654. };
  655. exports.green = function(str) {
  656. return colorize(str, 32);
  657. };
  658. exports.cyan = function(str) {
  659. return colorize(str, 96);
  660. };
  661. exports.white = function(str) {
  662. return colorize(str, 39);
  663. };
  664. exports.bold = function(str) {
  665. return colorize(str, 1);
  666. };
  667. },{"supports-color":88}],7:[function(require,module,exports){
  668. "use strict";
  669. var arrayProto = require("@sinonjs/commons").prototypes.array;
  670. var Sandbox = require("./sandbox");
  671. var forEach = arrayProto.forEach;
  672. var push = arrayProto.push;
  673. function prepareSandboxFromConfig(config) {
  674. var sandbox = new Sandbox();
  675. if (config.useFakeServer) {
  676. if (typeof config.useFakeServer === "object") {
  677. sandbox.serverPrototype = config.useFakeServer;
  678. }
  679. sandbox.useFakeServer();
  680. }
  681. if (config.useFakeTimers) {
  682. if (typeof config.useFakeTimers === "object") {
  683. sandbox.useFakeTimers(config.useFakeTimers);
  684. } else {
  685. sandbox.useFakeTimers();
  686. }
  687. }
  688. return sandbox;
  689. }
  690. function exposeValue(sandbox, config, key, value) {
  691. if (!value) {
  692. return;
  693. }
  694. if (config.injectInto && !(key in config.injectInto)) {
  695. config.injectInto[key] = value;
  696. push(sandbox.injectedKeys, key);
  697. } else {
  698. push(sandbox.args, value);
  699. }
  700. }
  701. function createSandbox(config) {
  702. if (!config) {
  703. return new Sandbox();
  704. }
  705. var configuredSandbox = prepareSandboxFromConfig(config);
  706. configuredSandbox.args = configuredSandbox.args || [];
  707. configuredSandbox.injectedKeys = [];
  708. configuredSandbox.injectInto = config.injectInto;
  709. var exposed = configuredSandbox.inject({});
  710. if (config.properties) {
  711. forEach(config.properties, function(prop) {
  712. var value = exposed[prop] || (prop === "sandbox" && configuredSandbox);
  713. exposeValue(configuredSandbox, config, prop, value);
  714. });
  715. } else {
  716. exposeValue(configuredSandbox, config, "sandbox");
  717. }
  718. return configuredSandbox;
  719. }
  720. module.exports = createSandbox;
  721. },{"./sandbox":12,"@sinonjs/commons":39}],8:[function(require,module,exports){
  722. "use strict";
  723. var arrayProto = require("@sinonjs/commons").prototypes.array;
  724. var isPropertyConfigurable = require("./util/core/is-property-configurable");
  725. var exportAsyncBehaviors = require("./util/core/export-async-behaviors");
  726. var extend = require("./util/core/extend");
  727. var slice = arrayProto.slice;
  728. var useLeftMostCallback = -1;
  729. var useRightMostCallback = -2;
  730. function throwsException(fake, error, message) {
  731. if (typeof error === "function") {
  732. fake.exceptionCreator = error;
  733. } else if (typeof error === "string") {
  734. fake.exceptionCreator = function() {
  735. var newException = new Error(message || "");
  736. newException.name = error;
  737. return newException;
  738. };
  739. } else if (!error) {
  740. fake.exceptionCreator = function() {
  741. return new Error("Error");
  742. };
  743. } else {
  744. fake.exception = error;
  745. }
  746. }
  747. var defaultBehaviors = {
  748. callsFake: function callsFake(fake, fn) {
  749. fake.fakeFn = fn;
  750. },
  751. callsArg: function callsArg(fake, index) {
  752. if (typeof index !== "number") {
  753. throw new TypeError("argument index is not number");
  754. }
  755. fake.callArgAt = index;
  756. fake.callbackArguments = [];
  757. fake.callbackContext = undefined;
  758. fake.callArgProp = undefined;
  759. fake.callbackAsync = false;
  760. },
  761. callsArgOn: function callsArgOn(fake, index, context) {
  762. if (typeof index !== "number") {
  763. throw new TypeError("argument index is not number");
  764. }
  765. fake.callArgAt = index;
  766. fake.callbackArguments = [];
  767. fake.callbackContext = context;
  768. fake.callArgProp = undefined;
  769. fake.callbackAsync = false;
  770. },
  771. callsArgWith: function callsArgWith(fake, index) {
  772. if (typeof index !== "number") {
  773. throw new TypeError("argument index is not number");
  774. }
  775. fake.callArgAt = index;
  776. fake.callbackArguments = slice(arguments, 2);
  777. fake.callbackContext = undefined;
  778. fake.callArgProp = undefined;
  779. fake.callbackAsync = false;
  780. },
  781. callsArgOnWith: function callsArgWith(fake, index, context) {
  782. if (typeof index !== "number") {
  783. throw new TypeError("argument index is not number");
  784. }
  785. fake.callArgAt = index;
  786. fake.callbackArguments = slice(arguments, 3);
  787. fake.callbackContext = context;
  788. fake.callArgProp = undefined;
  789. fake.callbackAsync = false;
  790. },
  791. usingPromise: function usingPromise(fake, promiseLibrary) {
  792. fake.promiseLibrary = promiseLibrary;
  793. },
  794. yields: function(fake) {
  795. fake.callArgAt = useLeftMostCallback;
  796. fake.callbackArguments = slice(arguments, 1);
  797. fake.callbackContext = undefined;
  798. fake.callArgProp = undefined;
  799. fake.callbackAsync = false;
  800. },
  801. yieldsRight: function(fake) {
  802. fake.callArgAt = useRightMostCallback;
  803. fake.callbackArguments = slice(arguments, 1);
  804. fake.callbackContext = undefined;
  805. fake.callArgProp = undefined;
  806. fake.callbackAsync = false;
  807. },
  808. yieldsOn: function(fake, context) {
  809. fake.callArgAt = useLeftMostCallback;
  810. fake.callbackArguments = slice(arguments, 2);
  811. fake.callbackContext = context;
  812. fake.callArgProp = undefined;
  813. fake.callbackAsync = false;
  814. },
  815. yieldsTo: function(fake, prop) {
  816. fake.callArgAt = useLeftMostCallback;
  817. fake.callbackArguments = slice(arguments, 2);
  818. fake.callbackContext = undefined;
  819. fake.callArgProp = prop;
  820. fake.callbackAsync = false;
  821. },
  822. yieldsToOn: function(fake, prop, context) {
  823. fake.callArgAt = useLeftMostCallback;
  824. fake.callbackArguments = slice(arguments, 3);
  825. fake.callbackContext = context;
  826. fake.callArgProp = prop;
  827. fake.callbackAsync = false;
  828. },
  829. throws: throwsException,
  830. throwsException: throwsException,
  831. returns: function returns(fake, value) {
  832. fake.returnValue = value;
  833. fake.resolve = false;
  834. fake.reject = false;
  835. fake.returnValueDefined = true;
  836. fake.exception = undefined;
  837. fake.exceptionCreator = undefined;
  838. fake.fakeFn = undefined;
  839. },
  840. returnsArg: function returnsArg(fake, index) {
  841. if (typeof index !== "number") {
  842. throw new TypeError("argument index is not number");
  843. }
  844. fake.returnArgAt = index;
  845. },
  846. throwsArg: function throwsArg(fake, index) {
  847. if (typeof index !== "number") {
  848. throw new TypeError("argument index is not number");
  849. }
  850. fake.throwArgAt = index;
  851. },
  852. returnsThis: function returnsThis(fake) {
  853. fake.returnThis = true;
  854. },
  855. resolves: function resolves(fake, value) {
  856. fake.returnValue = value;
  857. fake.resolve = true;
  858. fake.resolveThis = false;
  859. fake.reject = false;
  860. fake.returnValueDefined = true;
  861. fake.exception = undefined;
  862. fake.exceptionCreator = undefined;
  863. fake.fakeFn = undefined;
  864. },
  865. resolvesArg: function resolvesArg(fake, index) {
  866. if (typeof index !== "number") {
  867. throw new TypeError("argument index is not number");
  868. }
  869. fake.resolveArgAt = index;
  870. fake.returnValue = undefined;
  871. fake.resolve = true;
  872. fake.resolveThis = false;
  873. fake.reject = false;
  874. fake.returnValueDefined = false;
  875. fake.exception = undefined;
  876. fake.exceptionCreator = undefined;
  877. fake.fakeFn = undefined;
  878. },
  879. rejects: function rejects(fake, error, message) {
  880. var reason;
  881. if (typeof error === "string") {
  882. reason = new Error(message || "");
  883. reason.name = error;
  884. } else if (!error) {
  885. reason = new Error("Error");
  886. } else {
  887. reason = error;
  888. }
  889. fake.returnValue = reason;
  890. fake.resolve = false;
  891. fake.resolveThis = false;
  892. fake.reject = true;
  893. fake.returnValueDefined = true;
  894. fake.exception = undefined;
  895. fake.exceptionCreator = undefined;
  896. fake.fakeFn = undefined;
  897. return fake;
  898. },
  899. resolvesThis: function resolvesThis(fake) {
  900. fake.returnValue = undefined;
  901. fake.resolve = false;
  902. fake.resolveThis = true;
  903. fake.reject = false;
  904. fake.returnValueDefined = false;
  905. fake.exception = undefined;
  906. fake.exceptionCreator = undefined;
  907. fake.fakeFn = undefined;
  908. },
  909. callThrough: function callThrough(fake) {
  910. fake.callsThrough = true;
  911. },
  912. get: function get(fake, getterFunction) {
  913. var rootStub = fake.stub || fake;
  914. Object.defineProperty(rootStub.rootObj, rootStub.propName, {
  915. get: getterFunction,
  916. configurable: isPropertyConfigurable(rootStub.rootObj, rootStub.propName)
  917. });
  918. return fake;
  919. },
  920. set: function set(fake, setterFunction) {
  921. var rootStub = fake.stub || fake;
  922. Object.defineProperty(
  923. rootStub.rootObj,
  924. rootStub.propName,
  925. // eslint-disable-next-line accessor-pairs
  926. {
  927. set: setterFunction,
  928. configurable: isPropertyConfigurable(rootStub.rootObj, rootStub.propName)
  929. }
  930. );
  931. return fake;
  932. },
  933. value: function value(fake, newVal) {
  934. var rootStub = fake.stub || fake;
  935. Object.defineProperty(rootStub.rootObj, rootStub.propName, {
  936. value: newVal,
  937. enumerable: true,
  938. configurable: isPropertyConfigurable(rootStub.rootObj, rootStub.propName)
  939. });
  940. return fake;
  941. }
  942. };
  943. var asyncBehaviors = exportAsyncBehaviors(defaultBehaviors);
  944. module.exports = extend({}, defaultBehaviors, asyncBehaviors);
  945. },{"./util/core/export-async-behaviors":20,"./util/core/extend":21,"./util/core/is-property-configurable":28,"@sinonjs/commons":39}],9:[function(require,module,exports){
  946. "use strict";
  947. var arrayProto = require("@sinonjs/commons").prototypes.array;
  948. var spy = require("./spy");
  949. var nextTick = require("./util/core/next-tick");
  950. var forEach = arrayProto.forEach;
  951. var slice = arrayProto.slice;
  952. function getError(value) {
  953. return value instanceof Error ? value : new Error(value);
  954. }
  955. function cleanProxy(f) {
  956. var undesirableProperties = [
  957. "instantiateFake",
  958. "callArg",
  959. "callArgOn",
  960. "callArgOnWith",
  961. "callArgWith",
  962. "invokeCallback",
  963. "throwArg",
  964. "withArgs",
  965. "yield",
  966. "yieldOn",
  967. "yieldTo",
  968. "yieldToOn"
  969. ];
  970. forEach(undesirableProperties, function(key) {
  971. delete f[key];
  972. });
  973. return f;
  974. }
  975. var uuid = 0;
  976. function wrapFunc(f) {
  977. var fakeInstance = function() {
  978. var lastArg = (arguments.length > 0 && arguments[arguments.length - 1]) || undefined;
  979. var callback = lastArg && typeof lastArg === "function" ? lastArg : undefined;
  980. /* eslint-disable no-use-before-define */
  981. p.lastArg = lastArg;
  982. p.callback = callback;
  983. /* eslint-enable no-use-before-define */
  984. return f && f.apply(this, arguments);
  985. };
  986. var p = cleanProxy(spy(fakeInstance));
  987. p.displayName = "fake";
  988. p.id = "fake#" + uuid++;
  989. return p;
  990. }
  991. function fake(f) {
  992. if (arguments.length > 0 && typeof f !== "function") {
  993. throw new TypeError("Expected f argument to be a Function");
  994. }
  995. return wrapFunc(f);
  996. }
  997. fake.returns = function returns(value) {
  998. function f() {
  999. return value;
  1000. }
  1001. return wrapFunc(f);
  1002. };
  1003. fake.throws = function throws(value) {
  1004. function f() {
  1005. throw getError(value);
  1006. }
  1007. return wrapFunc(f);
  1008. };
  1009. fake.resolves = function resolves(value) {
  1010. function f() {
  1011. return Promise.resolve(value);
  1012. }
  1013. return wrapFunc(f);
  1014. };
  1015. fake.rejects = function rejects(value) {
  1016. function f() {
  1017. return Promise.reject(getError(value));
  1018. }
  1019. return wrapFunc(f);
  1020. };
  1021. function yieldInternal(async, values) {
  1022. function f() {
  1023. var callback = arguments[arguments.length - 1];
  1024. if (typeof callback !== "function") {
  1025. throw new TypeError("Expected last argument to be a function");
  1026. }
  1027. if (async) {
  1028. nextTick(function() {
  1029. callback.apply(null, values);
  1030. });
  1031. } else {
  1032. callback.apply(null, values);
  1033. }
  1034. }
  1035. return wrapFunc(f);
  1036. }
  1037. fake.yields = function yields() {
  1038. return yieldInternal(false, slice(arguments));
  1039. };
  1040. fake.yieldsAsync = function yieldsAsync() {
  1041. return yieldInternal(true, slice(arguments));
  1042. };
  1043. module.exports = fake;
  1044. },{"./spy":14,"./util/core/next-tick":29,"@sinonjs/commons":39}],10:[function(require,module,exports){
  1045. "use strict";
  1046. var arrayProto = require("@sinonjs/commons").prototypes.array;
  1047. var spyInvoke = require("./spy").invoke;
  1048. var spyCallToString = require("./call").toString;
  1049. var timesInWords = require("./util/core/times-in-words");
  1050. var extend = require("./util/core/extend");
  1051. var match = require("@sinonjs/samsam").createMatcher;
  1052. var stub = require("./stub");
  1053. var assert = require("./assert");
  1054. var deepEqual = require("@sinonjs/samsam").deepEqual;
  1055. var format = require("./util/core/format");
  1056. var valueToString = require("@sinonjs/commons").valueToString;
  1057. var every = arrayProto.every;
  1058. var forEach = arrayProto.forEach;
  1059. var push = arrayProto.push;
  1060. var slice = arrayProto.slice;
  1061. function callCountInWords(callCount) {
  1062. if (callCount === 0) {
  1063. return "never called";
  1064. }
  1065. return "called " + timesInWords(callCount);
  1066. }
  1067. function expectedCallCountInWords(expectation) {
  1068. var min = expectation.minCalls;
  1069. var max = expectation.maxCalls;
  1070. if (typeof min === "number" && typeof max === "number") {
  1071. var str = timesInWords(min);
  1072. if (min !== max) {
  1073. str = "at least " + str + " and at most " + timesInWords(max);
  1074. }
  1075. return str;
  1076. }
  1077. if (typeof min === "number") {
  1078. return "at least " + timesInWords(min);
  1079. }
  1080. return "at most " + timesInWords(max);
  1081. }
  1082. function receivedMinCalls(expectation) {
  1083. var hasMinLimit = typeof expectation.minCalls === "number";
  1084. return !hasMinLimit || expectation.callCount >= expectation.minCalls;
  1085. }
  1086. function receivedMaxCalls(expectation) {
  1087. if (typeof expectation.maxCalls !== "number") {
  1088. return false;
  1089. }
  1090. return expectation.callCount === expectation.maxCalls;
  1091. }
  1092. function verifyMatcher(possibleMatcher, arg) {
  1093. var isMatcher = match.isMatcher(possibleMatcher);
  1094. return (isMatcher && possibleMatcher.test(arg)) || true;
  1095. }
  1096. var mockExpectation = {
  1097. minCalls: 1,
  1098. maxCalls: 1,
  1099. create: function create(methodName) {
  1100. var expectation = extend.nonEnum(stub.create(), mockExpectation);
  1101. delete expectation.create;
  1102. expectation.method = methodName;
  1103. return expectation;
  1104. },
  1105. invoke: function invoke(func, thisValue, args) {
  1106. this.verifyCallAllowed(thisValue, args);
  1107. return spyInvoke.apply(this, arguments);
  1108. },
  1109. atLeast: function atLeast(num) {
  1110. if (typeof num !== "number") {
  1111. throw new TypeError("'" + valueToString(num) + "' is not number");
  1112. }
  1113. if (!this.limitsSet) {
  1114. this.maxCalls = null;
  1115. this.limitsSet = true;
  1116. }
  1117. this.minCalls = num;
  1118. return this;
  1119. },
  1120. atMost: function atMost(num) {
  1121. if (typeof num !== "number") {
  1122. throw new TypeError("'" + valueToString(num) + "' is not number");
  1123. }
  1124. if (!this.limitsSet) {
  1125. this.minCalls = null;
  1126. this.limitsSet = true;
  1127. }
  1128. this.maxCalls = num;
  1129. return this;
  1130. },
  1131. never: function never() {
  1132. return this.exactly(0);
  1133. },
  1134. once: function once() {
  1135. return this.exactly(1);
  1136. },
  1137. twice: function twice() {
  1138. return this.exactly(2);
  1139. },
  1140. thrice: function thrice() {
  1141. return this.exactly(3);
  1142. },
  1143. exactly: function exactly(num) {
  1144. if (typeof num !== "number") {
  1145. throw new TypeError("'" + valueToString(num) + "' is not a number");
  1146. }
  1147. this.atLeast(num);
  1148. return this.atMost(num);
  1149. },
  1150. met: function met() {
  1151. return !this.failed && receivedMinCalls(this);
  1152. },
  1153. verifyCallAllowed: function verifyCallAllowed(thisValue, args) {
  1154. var expectedArguments = this.expectedArguments;
  1155. if (receivedMaxCalls(this)) {
  1156. this.failed = true;
  1157. mockExpectation.fail(this.method + " already called " + timesInWords(this.maxCalls));
  1158. }
  1159. if ("expectedThis" in this && this.expectedThis !== thisValue) {
  1160. mockExpectation.fail(
  1161. this.method +
  1162. " called with " +
  1163. valueToString(thisValue) +
  1164. " as thisValue, expected " +
  1165. valueToString(this.expectedThis)
  1166. );
  1167. }
  1168. if (!("expectedArguments" in this)) {
  1169. return;
  1170. }
  1171. if (!args) {
  1172. mockExpectation.fail(this.method + " received no arguments, expected " + format(expectedArguments));
  1173. }
  1174. if (args.length < expectedArguments.length) {
  1175. mockExpectation.fail(
  1176. this.method +
  1177. " received too few arguments (" +
  1178. format(args) +
  1179. "), expected " +
  1180. format(expectedArguments)
  1181. );
  1182. }
  1183. if (this.expectsExactArgCount && args.length !== expectedArguments.length) {
  1184. mockExpectation.fail(
  1185. this.method +
  1186. " received too many arguments (" +
  1187. format(args) +
  1188. "), expected " +
  1189. format(expectedArguments)
  1190. );
  1191. }
  1192. forEach(
  1193. expectedArguments,
  1194. function(expectedArgument, i) {
  1195. if (!verifyMatcher(expectedArgument, args[i])) {
  1196. mockExpectation.fail(
  1197. this.method +
  1198. " received wrong arguments " +
  1199. format(args) +
  1200. ", didn't match " +
  1201. String(expectedArguments)
  1202. );
  1203. }
  1204. if (!deepEqual(args[i], expectedArgument)) {
  1205. mockExpectation.fail(
  1206. this.method +
  1207. " received wrong arguments " +
  1208. format(args) +
  1209. ", expected " +
  1210. format(expectedArguments)
  1211. );
  1212. }
  1213. },
  1214. this
  1215. );
  1216. },
  1217. allowsCall: function allowsCall(thisValue, args) {
  1218. var expectedArguments = this.expectedArguments;
  1219. if (this.met() && receivedMaxCalls(this)) {
  1220. return false;
  1221. }
  1222. if ("expectedThis" in this && this.expectedThis !== thisValue) {
  1223. return false;
  1224. }
  1225. if (!("expectedArguments" in this)) {
  1226. return true;
  1227. }
  1228. // eslint-disable-next-line no-underscore-dangle
  1229. var _args = args || [];
  1230. if (_args.length < expectedArguments.length) {
  1231. return false;
  1232. }
  1233. if (this.expectsExactArgCount && _args.length !== expectedArguments.length) {
  1234. return false;
  1235. }
  1236. return every(expectedArguments, function(expectedArgument, i) {
  1237. if (!verifyMatcher(expectedArgument, _args[i])) {
  1238. return false;
  1239. }
  1240. if (!deepEqual(_args[i], expectedArgument)) {
  1241. return false;
  1242. }
  1243. return true;
  1244. });
  1245. },
  1246. withArgs: function withArgs() {
  1247. this.expectedArguments = slice(arguments);
  1248. return this;
  1249. },
  1250. withExactArgs: function withExactArgs() {
  1251. this.withArgs.apply(this, arguments);
  1252. this.expectsExactArgCount = true;
  1253. return this;
  1254. },
  1255. on: function on(thisValue) {
  1256. this.expectedThis = thisValue;
  1257. return this;
  1258. },
  1259. toString: function() {
  1260. var args = slice(this.expectedArguments || []);
  1261. if (!this.expectsExactArgCount) {
  1262. push(args, "[...]");
  1263. }
  1264. var callStr = spyCallToString.call({
  1265. proxy: this.method || "anonymous mock expectation",
  1266. args: args
  1267. });
  1268. var message = callStr.replace(", [...", "[, ...") + " " + expectedCallCountInWords(this);
  1269. if (this.met()) {
  1270. return "Expectation met: " + message;
  1271. }
  1272. return "Expected " + message + " (" + callCountInWords(this.callCount) + ")";
  1273. },
  1274. verify: function verify() {
  1275. if (!this.met()) {
  1276. mockExpectation.fail(String(this));
  1277. } else {
  1278. mockExpectation.pass(String(this));
  1279. }
  1280. return true;
  1281. },
  1282. pass: function pass(message) {
  1283. assert.pass(message);
  1284. },
  1285. fail: function fail(message) {
  1286. var exception = new Error(message);
  1287. exception.name = "ExpectationError";
  1288. throw exception;
  1289. }
  1290. };
  1291. module.exports = mockExpectation;
  1292. },{"./assert":2,"./call":4,"./spy":14,"./stub":16,"./util/core/extend":21,"./util/core/format":22,"./util/core/times-in-words":30,"@sinonjs/commons":39,"@sinonjs/samsam":65}],11:[function(require,module,exports){
  1293. "use strict";
  1294. var arrayProto = require("@sinonjs/commons").prototypes.array;
  1295. var mockExpectation = require("./mock-expectation");
  1296. var spyCallToString = require("./call").toString;
  1297. var extend = require("./util/core/extend");
  1298. var deepEqual = require("@sinonjs/samsam").deepEqual;
  1299. var wrapMethod = require("./util/core/wrap-method");
  1300. var usePromiseLibrary = require("./util/core/use-promise-library");
  1301. var concat = arrayProto.concat;
  1302. var filter = arrayProto.filter;
  1303. var forEach = arrayProto.forEach;
  1304. var every = arrayProto.every;
  1305. var join = arrayProto.join;
  1306. var push = arrayProto.push;
  1307. var slice = arrayProto.slice;
  1308. var unshift = arrayProto.unshift;
  1309. function mock(object) {
  1310. if (!object || typeof object === "string") {
  1311. return mockExpectation.create(object ? object : "Anonymous mock");
  1312. }
  1313. return mock.create(object);
  1314. }
  1315. function each(collection, callback) {
  1316. var col = collection || [];
  1317. forEach(col, callback);
  1318. }
  1319. function arrayEquals(arr1, arr2, compareLength) {
  1320. if (compareLength && arr1.length !== arr2.length) {
  1321. return false;
  1322. }
  1323. return every(arr1, function(element, i) {
  1324. return deepEqual(arr2[i], element);
  1325. });
  1326. }
  1327. extend(mock, {
  1328. create: function create(object) {
  1329. if (!object) {
  1330. throw new TypeError("object is null");
  1331. }
  1332. var mockObject = extend.nonEnum({}, mock, { object: object });
  1333. delete mockObject.create;
  1334. return mockObject;
  1335. },
  1336. expects: function expects(method) {
  1337. if (!method) {
  1338. throw new TypeError("method is falsy");
  1339. }
  1340. if (!this.expectations) {
  1341. this.expectations = {};
  1342. this.proxies = [];
  1343. this.failures = [];
  1344. }
  1345. if (!this.expectations[method]) {
  1346. this.expectations[method] = [];
  1347. var mockObject = this;
  1348. wrapMethod(this.object, method, function() {
  1349. return mockObject.invokeMethod(method, this, arguments);
  1350. });
  1351. push(this.proxies, method);
  1352. }
  1353. var expectation = mockExpectation.create(method);
  1354. extend.nonEnum(expectation, this.object[method]);
  1355. push(this.expectations[method], expectation);
  1356. usePromiseLibrary(this.promiseLibrary, expectation);
  1357. return expectation;
  1358. },
  1359. restore: function restore() {
  1360. var object = this.object;
  1361. each(this.proxies, function(proxy) {
  1362. if (typeof object[proxy].restore === "function") {
  1363. object[proxy].restore();
  1364. }
  1365. });
  1366. },
  1367. verify: function verify() {
  1368. var expectations = this.expectations || {};
  1369. var messages = this.failures ? slice(this.failures) : [];
  1370. var met = [];
  1371. each(this.proxies, function(proxy) {
  1372. each(expectations[proxy], function(expectation) {
  1373. if (!expectation.met()) {
  1374. push(messages, String(expectation));
  1375. } else {
  1376. push(met, String(expectation));
  1377. }
  1378. });
  1379. });
  1380. this.restore();
  1381. if (messages.length > 0) {
  1382. mockExpectation.fail(join(concat(messages, met), "\n"));
  1383. } else if (met.length > 0) {
  1384. mockExpectation.pass(join(concat(messages, met), "\n"));
  1385. }
  1386. return true;
  1387. },
  1388. usingPromise: function usingPromise(promiseLibrary) {
  1389. this.promiseLibrary = promiseLibrary;
  1390. return this;
  1391. },
  1392. invokeMethod: function invokeMethod(method, thisValue, args) {
  1393. /* if we cannot find any matching files we will explicitly call mockExpection#fail with error messages */
  1394. /* eslint consistent-return: "off" */
  1395. var expectations = this.expectations && this.expectations[method] ? this.expectations[method] : [];
  1396. var currentArgs = args || [];
  1397. var available;
  1398. var expectationsWithMatchingArgs = filter(expectations, function(expectation) {
  1399. var expectedArgs = expectation.expectedArguments || [];
  1400. return arrayEquals(expectedArgs, currentArgs, expectation.expectsExactArgCount);
  1401. });
  1402. var expectationsToApply = filter(expectationsWithMatchingArgs, function(expectation) {
  1403. return !expectation.met() && expectation.allowsCall(thisValue, args);
  1404. });
  1405. if (expectationsToApply.length > 0) {
  1406. return expectationsToApply[0].apply(thisValue, args);
  1407. }
  1408. var messages = [];
  1409. var exhausted = 0;
  1410. forEach(expectationsWithMatchingArgs, function(expectation) {
  1411. if (expectation.allowsCall(thisValue, args)) {
  1412. available = available || expectation;
  1413. } else {
  1414. exhausted += 1;
  1415. }
  1416. });
  1417. if (available && exhausted === 0) {
  1418. return available.apply(thisValue, args);
  1419. }
  1420. forEach(expectations, function(expectation) {
  1421. push(messages, " " + String(expectation));
  1422. });
  1423. unshift(
  1424. messages,
  1425. "Unexpected call: " +
  1426. spyCallToString.call({
  1427. proxy: method,
  1428. args: args
  1429. })
  1430. );
  1431. var err = new Error();
  1432. if (!err.stack) {
  1433. // PhantomJS does not serialize the stack trace until the error has been thrown
  1434. try {
  1435. throw err;
  1436. } catch (e) {
  1437. /* empty */
  1438. }
  1439. }
  1440. push(
  1441. this.failures,
  1442. "Unexpected call: " +
  1443. spyCallToString.call({
  1444. proxy: method,
  1445. args: args,
  1446. stack: err.stack
  1447. })
  1448. );
  1449. mockExpectation.fail(join(messages, "\n"));
  1450. }
  1451. });
  1452. module.exports = mock;
  1453. },{"./call":4,"./mock-expectation":10,"./util/core/extend":21,"./util/core/use-promise-library":31,"./util/core/wrap-method":33,"@sinonjs/commons":39,"@sinonjs/samsam":65}],12:[function(require,module,exports){
  1454. "use strict";
  1455. var arrayProto = require("@sinonjs/commons").prototypes.array;
  1456. var collectOwnMethods = require("./collect-own-methods");
  1457. var getPropertyDescriptor = require("./util/core/get-property-descriptor");
  1458. var isEsModule = require("./util/core/is-es-module");
  1459. var isPropertyConfigurable = require("./util/core/is-property-configurable");
  1460. var isNonExistentOwnProperty = require("./util/core/is-non-existent-own-property");
  1461. var match = require("@sinonjs/samsam").createMatcher;
  1462. var sinonAssert = require("./assert");
  1463. var sinonClock = require("./util/fake-timers");
  1464. var sinonMock = require("./mock");
  1465. var sinonSpy = require("./spy");
  1466. var sinonStub = require("./stub");
  1467. var sinonFake = require("./fake");
  1468. var valueToString = require("@sinonjs/commons").valueToString;
  1469. var fakeServer = require("nise").fakeServer;
  1470. var fakeXhr = require("nise").fakeXhr;
  1471. var usePromiseLibrary = require("./util/core/use-promise-library");
  1472. var filter = arrayProto.filter;
  1473. var forEach = arrayProto.filter;
  1474. var push = arrayProto.push;
  1475. var reverse = arrayProto.reverse;
  1476. function applyOnEach(fakes, method) {
  1477. var matchingFakes = filter(fakes, function(fake) {
  1478. return typeof fake[method] === "function";
  1479. });
  1480. forEach(matchingFakes, function(fake) {
  1481. fake[method]();
  1482. });
  1483. }
  1484. function Sandbox() {
  1485. var sandbox = this;
  1486. var collection = [];
  1487. var fakeRestorers = [];
  1488. var promiseLib;
  1489. sandbox.serverPrototype = fakeServer;
  1490. // this is for testing only
  1491. sandbox.getFakes = function getFakes() {
  1492. return collection;
  1493. };
  1494. // this is for testing only
  1495. sandbox.getRestorers = function() {
  1496. return fakeRestorers;
  1497. };
  1498. sandbox.createStubInstance = function createStubInstance(constructor) {
  1499. if (typeof constructor !== "function") {
  1500. throw new TypeError("The constructor should be a function.");
  1501. }
  1502. return this.stub(Object.create(constructor.prototype));
  1503. };
  1504. sandbox.inject = function inject(obj) {
  1505. obj.spy = function() {
  1506. return sandbox.spy.apply(null, arguments);
  1507. };
  1508. obj.stub = function() {
  1509. return sandbox.stub.apply(null, arguments);
  1510. };
  1511. obj.mock = function() {
  1512. return sandbox.mock.apply(null, arguments);
  1513. };
  1514. if (sandbox.clock) {
  1515. obj.clock = sandbox.clock;
  1516. }
  1517. if (sandbox.server) {
  1518. obj.server = sandbox.server;
  1519. obj.requests = sandbox.server.requests;
  1520. }
  1521. obj.match = match;
  1522. return obj;
  1523. };
  1524. sandbox.mock = function mock() {
  1525. var m = sinonMock.apply(null, arguments);
  1526. push(collection, m);
  1527. usePromiseLibrary(promiseLib, m);
  1528. return m;
  1529. };
  1530. sandbox.reset = function reset() {
  1531. applyOnEach(collection, "reset");
  1532. applyOnEach(collection, "resetHistory");
  1533. };
  1534. sandbox.resetBehavior = function resetBehavior() {
  1535. applyOnEach(collection, "resetBehavior");
  1536. };
  1537. sandbox.resetHistory = function resetHistory() {
  1538. function privateResetHistory(f) {
  1539. var method = f.resetHistory || f.reset;
  1540. if (method) {
  1541. method.call(f);
  1542. }
  1543. }
  1544. forEach(collection, function(fake) {
  1545. if (typeof fake === "function") {
  1546. privateResetHistory(fake);
  1547. return;
  1548. }
  1549. var methods = [];
  1550. if (fake.get) {
  1551. push(methods, fake.get);
  1552. }
  1553. if (fake.set) {
  1554. push(methods, fake.set);
  1555. }
  1556. forEach(methods, privateResetHistory);
  1557. });
  1558. };
  1559. sandbox.restore = function restore() {
  1560. if (arguments.length) {
  1561. throw new Error("sandbox.restore() does not take any parameters. Perhaps you meant stub.restore()");
  1562. }
  1563. reverse(collection);
  1564. applyOnEach(collection, "restore");
  1565. collection = [];
  1566. forEach(fakeRestorers, function(restorer) {
  1567. restorer();
  1568. });
  1569. fakeRestorers = [];
  1570. sandbox.restoreContext();
  1571. };
  1572. sandbox.restoreContext = function restoreContext() {
  1573. var injectedKeys = sandbox.injectedKeys;
  1574. var injectInto = sandbox.injectInto;
  1575. if (!injectedKeys) {
  1576. return;
  1577. }
  1578. forEach(injectedKeys, function(injectedKey) {
  1579. delete injectInto[injectedKey];
  1580. });
  1581. injectedKeys = [];
  1582. };
  1583. function getFakeRestorer(object, property) {
  1584. var descriptor = getPropertyDescriptor(object, property);
  1585. function restorer() {
  1586. Object.defineProperty(object, property, descriptor);
  1587. }
  1588. restorer.object = object;
  1589. restorer.property = property;
  1590. return restorer;
  1591. }
  1592. function verifyNotReplaced(object, property) {
  1593. forEach(fakeRestorers, function(fakeRestorer) {
  1594. if (fakeRestorer.object === object && fakeRestorer.property === property) {
  1595. throw new TypeError("Attempted to replace " + property + " which is already replaced");
  1596. }
  1597. });
  1598. }
  1599. sandbox.replace = function replace(object, property, replacement) {
  1600. var descriptor = getPropertyDescriptor(object, property);
  1601. if (typeof descriptor === "undefined") {
  1602. throw new TypeError("Cannot replace non-existent own property " + valueToString(property));
  1603. }
  1604. if (typeof replacement === "undefined") {
  1605. throw new TypeError("Expected replacement argument to be defined");
  1606. }
  1607. if (typeof descriptor.get === "function") {
  1608. throw new Error("Use sandbox.replaceGetter for replacing getters");
  1609. }
  1610. if (typeof descriptor.set === "function") {
  1611. throw new Error("Use sandbox.replaceSetter for replacing setters");
  1612. }
  1613. if (typeof object[property] !== typeof replacement) {
  1614. throw new TypeError("Cannot replace " + typeof object[property] + " with " + typeof replacement);
  1615. }
  1616. verifyNotReplaced(object, property);
  1617. // store a function for restoring the replaced property
  1618. push(fakeRestorers, getFakeRestorer(object, property));
  1619. object[property] = replacement;
  1620. return replacement;
  1621. };
  1622. sandbox.replaceGetter = function replaceGetter(object, property, replacement) {
  1623. var descriptor = getPropertyDescriptor(object, property);
  1624. if (typeof descriptor === "undefined") {
  1625. throw new TypeError("Cannot replace non-existent own property " + valueToString(property));
  1626. }
  1627. if (typeof replacement !== "function") {
  1628. throw new TypeError("Expected replacement argument to be a function");
  1629. }
  1630. if (typeof descriptor.get !== "function") {
  1631. throw new Error("`object.property` is not a getter");
  1632. }
  1633. verifyNotReplaced(object, property);
  1634. // store a function for restoring the replaced property
  1635. push(fakeRestorers, getFakeRestorer(object, property));
  1636. Object.defineProperty(object, property, {
  1637. get: replacement,
  1638. configurable: isPropertyConfigurable(object, property)
  1639. });
  1640. return replacement;
  1641. };
  1642. sandbox.replaceSetter = function replaceSetter(object, property, replacement) {
  1643. var descriptor = getPropertyDescriptor(object, property);
  1644. if (typeof descriptor === "undefined") {
  1645. throw new TypeError("Cannot replace non-existent own property " + valueToString(property));
  1646. }
  1647. if (typeof replacement !== "function") {
  1648. throw new TypeError("Expected replacement argument to be a function");
  1649. }
  1650. if (typeof descriptor.set !== "function") {
  1651. throw new Error("`object.property` is not a setter");
  1652. }
  1653. verifyNotReplaced(object, property);
  1654. // store a function for restoring the replaced property
  1655. push(fakeRestorers, getFakeRestorer(object, property));
  1656. // eslint-disable-next-line accessor-pairs
  1657. Object.defineProperty(object, property, {
  1658. set: replacement,
  1659. configurable: isPropertyConfigurable(object, property)
  1660. });
  1661. return replacement;
  1662. };
  1663. sandbox.spy = function spy() {
  1664. var s = sinonSpy.apply(sinonSpy, arguments);
  1665. push(collection, s);
  1666. return s;
  1667. };
  1668. sandbox.stub = function stub(object, property) {
  1669. if (isEsModule(object)) {
  1670. throw new TypeError("ES Modules cannot be stubbed");
  1671. }
  1672. if (isNonExistentOwnProperty(object, property)) {
  1673. throw new TypeError("Cannot stub non-existent own property " + valueToString(property));
  1674. }
  1675. var stubbed = sinonStub.apply(null, arguments);
  1676. var isStubbingEntireObject = typeof property === "undefined" && typeof object === "object";
  1677. if (isStubbingEntireObject) {
  1678. var ownMethods = collectOwnMethods(stubbed);
  1679. forEach(ownMethods, function(method) {
  1680. push(collection, method);
  1681. });
  1682. usePromiseLibrary(promiseLib, ownMethods);
  1683. } else {
  1684. push(collection, stubbed);
  1685. usePromiseLibrary(promiseLib, stubbed);
  1686. }
  1687. return stubbed;
  1688. };
  1689. // eslint-disable-next-line no-unused-vars
  1690. sandbox.fake = function fake(f) {
  1691. var s = sinonFake.apply(sinonFake, arguments);
  1692. push(collection, s);
  1693. return s;
  1694. };
  1695. forEach(Object.keys(sinonFake), function(key) {
  1696. var fakeBehavior = sinonFake[key];
  1697. if (typeof fakeBehavior === "function") {
  1698. sandbox.fake[key] = function() {
  1699. var s = fakeBehavior.apply(fakeBehavior, arguments);
  1700. push(collection, s);
  1701. return s;
  1702. };
  1703. }
  1704. });
  1705. sandbox.useFakeTimers = function useFakeTimers(args) {
  1706. var clock = sinonClock.useFakeTimers.call(null, args);
  1707. sandbox.clock = clock;
  1708. push(collection, clock);
  1709. return clock;
  1710. };
  1711. sandbox.verify = function verify() {
  1712. applyOnEach(collection, "verify");
  1713. };
  1714. sandbox.verifyAndRestore = function verifyAndRestore() {
  1715. var exception;
  1716. try {
  1717. sandbox.verify();
  1718. } catch (e) {
  1719. exception = e;
  1720. }
  1721. sandbox.restore();
  1722. if (exception) {
  1723. throw exception;
  1724. }
  1725. };
  1726. sandbox.useFakeServer = function useFakeServer() {
  1727. var proto = sandbox.serverPrototype || fakeServer;
  1728. if (!proto || !proto.create) {
  1729. return null;
  1730. }
  1731. sandbox.server = proto.create();
  1732. push(collection, sandbox.server);
  1733. return sandbox.server;
  1734. };
  1735. sandbox.useFakeXMLHttpRequest = function useFakeXMLHttpRequest() {
  1736. var xhr = fakeXhr.useFakeXMLHttpRequest();
  1737. push(collection, xhr);
  1738. return xhr;
  1739. };
  1740. sandbox.usingPromise = function usingPromise(promiseLibrary) {
  1741. promiseLib = promiseLibrary;
  1742. collection.promiseLibrary = promiseLibrary;
  1743. return sandbox;
  1744. };
  1745. }
  1746. Sandbox.prototype.assert = sinonAssert;
  1747. Sandbox.prototype.match = match;
  1748. module.exports = Sandbox;
  1749. },{"./assert":2,"./collect-own-methods":5,"./fake":9,"./mock":11,"./spy":14,"./stub":16,"./util/core/get-property-descriptor":25,"./util/core/is-es-module":26,"./util/core/is-non-existent-own-property":27,"./util/core/is-property-configurable":28,"./util/core/use-promise-library":31,"./util/fake-timers":34,"@sinonjs/commons":39,"@sinonjs/samsam":65,"nise":85}],13:[function(require,module,exports){
  1750. "use strict";
  1751. var arrayProto = require("@sinonjs/commons").prototypes.array;
  1752. var color = require("./color");
  1753. var match = require("@sinonjs/samsam").createMatcher;
  1754. var timesInWords = require("./util/core/times-in-words");
  1755. var sinonFormat = require("./util/core/format");
  1756. var jsDiff = require("diff");
  1757. var join = arrayProto.join;
  1758. var map = arrayProto.map;
  1759. var push = arrayProto.push;
  1760. function colorSinonMatchText(matcher, calledArg, calledArgMessage) {
  1761. var calledArgumentMessage = calledArgMessage;
  1762. if (!matcher.test(calledArg)) {
  1763. matcher.message = color.red(matcher.message);
  1764. if (calledArgumentMessage) {
  1765. calledArgumentMessage = color.green(calledArgumentMessage);
  1766. }
  1767. }
  1768. return calledArgumentMessage + " " + matcher.message;
  1769. }
  1770. function colorDiffText(diff) {
  1771. var objects = map(diff, function(part) {
  1772. var text = part.value;
  1773. if (part.added) {
  1774. text = color.green(text);
  1775. } else if (part.removed) {
  1776. text = color.red(text);
  1777. }
  1778. if (diff.length === 2) {
  1779. text += " "; // format simple diffs
  1780. }
  1781. return text;
  1782. });
  1783. return join(objects, "");
  1784. }
  1785. module.exports = {
  1786. c: function(spyInstance) {
  1787. return timesInWords(spyInstance.callCount);
  1788. },
  1789. n: function(spyInstance) {
  1790. // eslint-disable-next-line local-rules/no-prototype-methods
  1791. return spyInstance.toString();
  1792. },
  1793. D: function(spyInstance, args) {
  1794. var message = "";
  1795. for (var i = 0, l = spyInstance.callCount; i < l; ++i) {
  1796. // describe multiple calls
  1797. if (l > 1) {
  1798. message += "\nCall " + (i + 1) + ":";
  1799. }
  1800. var calledArgs = spyInstance.getCall(i).args;
  1801. for (var j = 0; j < calledArgs.length || j < args.length; ++j) {
  1802. message += "\n";
  1803. var calledArgMessage = j < calledArgs.length ? sinonFormat(calledArgs[j]) : "";
  1804. if (match.isMatcher(args[j])) {
  1805. message += colorSinonMatchText(args[j], calledArgs[j], calledArgMessage);
  1806. } else {
  1807. var expectedArgMessage = j < args.length ? sinonFormat(args[j]) : "";
  1808. var diff = jsDiff.diffJson(calledArgMessage, expectedArgMessage);
  1809. message += colorDiffText(diff);
  1810. }
  1811. }
  1812. }
  1813. return message;
  1814. },
  1815. C: function(spyInstance) {
  1816. var calls = [];
  1817. for (var i = 0, l = spyInstance.callCount; i < l; ++i) {
  1818. // eslint-disable-next-line local-rules/no-prototype-methods
  1819. var stringifiedCall = " " + spyInstance.getCall(i).toString();
  1820. if (/\n/.test(calls[i - 1])) {
  1821. stringifiedCall = "\n" + stringifiedCall;
  1822. }
  1823. push(calls, stringifiedCall);
  1824. }
  1825. return calls.length > 0 ? "\n" + join(calls, "\n") : "";
  1826. },
  1827. t: function(spyInstance) {
  1828. var objects = [];
  1829. for (var i = 0, l = spyInstance.callCount; i < l; ++i) {
  1830. push(objects, sinonFormat(spyInstance.thisValues[i]));
  1831. }
  1832. return join(objects, ", ");
  1833. },
  1834. "*": function(spyInstance, args) {
  1835. return join(
  1836. map(args, function(arg) {
  1837. return sinonFormat(arg);
  1838. }),
  1839. ", "
  1840. );
  1841. }
  1842. };
  1843. },{"./color":6,"./util/core/format":22,"./util/core/times-in-words":30,"@sinonjs/commons":39,"@sinonjs/samsam":65,"diff":69}],14:[function(require,module,exports){
  1844. "use strict";
  1845. var arrayProto = require("@sinonjs/commons").prototypes.array;
  1846. var createBehavior = require("./behavior").create;
  1847. var extend = require("./util/core/extend");
  1848. var functionName = require("@sinonjs/commons").functionName;
  1849. var functionToString = require("./util/core/function-to-string");
  1850. var getPropertyDescriptor = require("./util/core/get-property-descriptor");
  1851. var deepEqual = require("@sinonjs/samsam").deepEqual;
  1852. var isEsModule = require("./util/core/is-es-module");
  1853. var spyCall = require("./call");
  1854. var wrapMethod = require("./util/core/wrap-method");
  1855. var sinonFormat = require("./util/core/format");
  1856. var valueToString = require("@sinonjs/commons").valueToString;
  1857. /* cache references to library methods so that they also can be stubbed without problems */
  1858. var concat = arrayProto.concat;
  1859. var forEach = arrayProto.forEach;
  1860. var pop = arrayProto.pop;
  1861. var push = arrayProto.push;
  1862. var slice = arrayProto.slice;
  1863. var filter = Array.prototype.filter;
  1864. var ErrorConstructor = Error.prototype.constructor;
  1865. var bind = Function.prototype.bind;
  1866. var callId = 0;
  1867. function spy(object, property, types) {
  1868. var descriptor, methodDesc;
  1869. if (isEsModule(object)) {
  1870. throw new TypeError("ES Modules cannot be spied");
  1871. }
  1872. if (!property && typeof object === "function") {
  1873. return spy.create(object);
  1874. }
  1875. if (!object && !property) {
  1876. return spy.create(function() {
  1877. return;
  1878. });
  1879. }
  1880. if (!types) {
  1881. return wrapMethod(object, property, spy.create(object[property]));
  1882. }
  1883. descriptor = {};
  1884. methodDesc = getPropertyDescriptor(object, property);
  1885. forEach(types, function(type) {
  1886. descriptor[type] = spy.create(methodDesc[type]);
  1887. });
  1888. return wrapMethod(object, property, descriptor);
  1889. }
  1890. function incrementCallCount() {
  1891. this.called = true;
  1892. this.callCount += 1;
  1893. this.notCalled = false;
  1894. this.calledOnce = this.callCount === 1;
  1895. this.calledTwice = this.callCount === 2;
  1896. this.calledThrice = this.callCount === 3;
  1897. }
  1898. function createCallProperties() {
  1899. this.firstCall = this.getCall(0);
  1900. this.secondCall = this.getCall(1);
  1901. this.thirdCall = this.getCall(2);
  1902. this.lastCall = this.getCall(this.callCount - 1);
  1903. }
  1904. function createProxy(func, proxyLength) {
  1905. // Retain the function length:
  1906. var p;
  1907. if (proxyLength) {
  1908. // Do not change this to use an eval. Projects that depend on sinon block the use of eval.
  1909. // ref: https://github.com/sinonjs/sinon/issues/710
  1910. switch (proxyLength) {
  1911. /*eslint-disable no-unused-vars, max-len*/
  1912. case 1:
  1913. p = function proxy(a) {
  1914. return p.invoke(func, this, slice(arguments));
  1915. };
  1916. break;
  1917. case 2:
  1918. p = function proxy(a, b) {
  1919. return p.invoke(func, this, slice(arguments));
  1920. };
  1921. break;
  1922. case 3:
  1923. p = function proxy(a, b, c) {
  1924. return p.invoke(func, this, slice(arguments));
  1925. };
  1926. break;
  1927. case 4:
  1928. p = function proxy(a, b, c, d) {
  1929. return p.invoke(func, this, slice(arguments));
  1930. };
  1931. break;
  1932. case 5:
  1933. p = function proxy(a, b, c, d, e) {
  1934. return p.invoke(func, this, slice(arguments));
  1935. };
  1936. break;
  1937. case 6:
  1938. p = function proxy(a, b, c, d, e, f) {
  1939. return p.invoke(func, this, slice(arguments));
  1940. };
  1941. break;
  1942. case 7:
  1943. p = function proxy(a, b, c, d, e, f, g) {
  1944. return p.invoke(func, this, slice(arguments));
  1945. };
  1946. break;
  1947. case 8:
  1948. p = function proxy(a, b, c, d, e, f, g, h) {
  1949. return p.invoke(func, this, slice(arguments));
  1950. };
  1951. break;
  1952. case 9:
  1953. p = function proxy(a, b, c, d, e, f, g, h, i) {
  1954. return p.invoke(func, this, slice(arguments));
  1955. };
  1956. break;
  1957. case 10:
  1958. p = function proxy(a, b, c, d, e, f, g, h, i, j) {
  1959. return p.invoke(func, this, slice(arguments));
  1960. };
  1961. break;
  1962. case 11:
  1963. p = function proxy(a, b, c, d, e, f, g, h, i, j, k) {
  1964. return p.invoke(func, this, slice(arguments));
  1965. };
  1966. break;
  1967. case 12:
  1968. p = function proxy(a, b, c, d, e, f, g, h, i, j, k, l) {
  1969. return p.invoke(func, this, slice(arguments));
  1970. };
  1971. break;
  1972. default:
  1973. p = function proxy() {
  1974. return p.invoke(func, this, slice(arguments));
  1975. };
  1976. break;
  1977. /*eslint-enable*/
  1978. }
  1979. } else {
  1980. p = function proxy() {
  1981. return p.invoke(func, this, slice(arguments));
  1982. };
  1983. }
  1984. extend.nonEnum(p, { isSinonProxy: true });
  1985. return p;
  1986. }
  1987. var uuid = 0;
  1988. // Public API
  1989. var spyApi = {
  1990. formatters: require("./spy-formatters"),
  1991. resetHistory: function() {
  1992. if (this.invoking) {
  1993. var err = new Error(
  1994. "Cannot reset Sinon function while invoking it. " +
  1995. "Move the call to .resetHistory outside of the callback."
  1996. );
  1997. err.name = "InvalidResetException";
  1998. throw err;
  1999. }
  2000. extend.nonEnum(this, {
  2001. called: false,
  2002. notCalled: true,
  2003. calledOnce: false,
  2004. calledTwice: false,
  2005. calledThrice: false,
  2006. callCount: 0,
  2007. firstCall: null,
  2008. secondCall: null,
  2009. thirdCall: null,
  2010. lastCall: null,
  2011. args: [],
  2012. returnValues: [],
  2013. thisValues: [],
  2014. exceptions: [],
  2015. callIds: [],
  2016. errorsWithCallStack: []
  2017. });
  2018. if (this.fakes) {
  2019. forEach(this.fakes, function(fake) {
  2020. if (fake.resetHistory) {
  2021. fake.resetHistory();
  2022. } else {
  2023. fake.reset();
  2024. }
  2025. });
  2026. }
  2027. return this;
  2028. },
  2029. create: function create(func, spyLength) {
  2030. var name;
  2031. var funk = func;
  2032. if (typeof funk !== "function") {
  2033. funk = function() {
  2034. return;
  2035. };
  2036. } else {
  2037. name = functionName(funk);
  2038. }
  2039. var length = spyLength || funk.length;
  2040. var proxy = createProxy(funk, length);
  2041. extend.nonEnum(proxy, spy);
  2042. delete proxy.create;
  2043. extend.nonEnum(proxy, funk);
  2044. proxy.resetHistory();
  2045. proxy.prototype = funk.prototype;
  2046. extend.nonEnum(proxy, {
  2047. displayName: name || "spy",
  2048. toString: functionToString,
  2049. instantiateFake: spy.create,
  2050. id: "spy#" + uuid++
  2051. });
  2052. return proxy;
  2053. },
  2054. invoke: function invoke(func, thisValue, args) {
  2055. var matchings = this.matchingFakes(args);
  2056. var currentCallId = callId++;
  2057. var exception, returnValue;
  2058. incrementCallCount.call(this);
  2059. push(this.thisValues, thisValue);
  2060. push(this.args, args);
  2061. push(this.callIds, currentCallId);
  2062. forEach(matchings, function(matching) {
  2063. incrementCallCount.call(matching);
  2064. push(matching.thisValues, thisValue);
  2065. push(matching.args, args);
  2066. push(matching.callIds, currentCallId);
  2067. });
  2068. // Make call properties available from within the spied function:
  2069. createCallProperties.call(this);
  2070. forEach(matchings, function(matching) {
  2071. createCallProperties.call(matching);
  2072. });
  2073. try {
  2074. this.invoking = true;
  2075. var thisCall = this.getCall(this.callCount - 1);
  2076. if (thisCall.calledWithNew()) {
  2077. // Call through with `new`
  2078. returnValue = new (bind.apply(this.func || func, concat([thisValue], args)))();
  2079. if (typeof returnValue !== "object") {
  2080. returnValue = thisValue;
  2081. }
  2082. } else {
  2083. returnValue = (this.func || func).apply(thisValue, args);
  2084. }
  2085. } catch (e) {
  2086. exception = e;
  2087. } finally {
  2088. delete this.invoking;
  2089. }
  2090. push(this.exceptions, exception);
  2091. push(this.returnValues, returnValue);
  2092. forEach(matchings, function(matching) {
  2093. push(matching.exceptions, exception);
  2094. push(matching.returnValues, returnValue);
  2095. });
  2096. var err = new ErrorConstructor();
  2097. // 1. Please do not get stack at this point. It may be so very slow, and not actually used
  2098. // 2. PhantomJS does not serialize the stack trace until the error has been thrown:
  2099. // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/Stack
  2100. try {
  2101. throw err;
  2102. } catch (e) {
  2103. /* empty */
  2104. }
  2105. push(this.errorsWithCallStack, err);
  2106. forEach(matchings, function(matching) {
  2107. push(matching.errorsWithCallStack, err);
  2108. });
  2109. // Make return value and exception available in the calls:
  2110. createCallProperties.call(this);
  2111. forEach(matchings, function(matching) {
  2112. createCallProperties.call(matching);
  2113. });
  2114. if (exception !== undefined) {
  2115. throw exception;
  2116. }
  2117. return returnValue;
  2118. },
  2119. named: function named(name) {
  2120. this.displayName = name;
  2121. return this;
  2122. },
  2123. getCall: function getCall(i) {
  2124. if (i < 0 || i >= this.callCount) {
  2125. return null;
  2126. }
  2127. return spyCall(
  2128. this,
  2129. this.thisValues[i],
  2130. this.args[i],
  2131. this.returnValues[i],
  2132. this.exceptions[i],
  2133. this.callIds[i],
  2134. this.errorsWithCallStack[i]
  2135. );
  2136. },
  2137. getCalls: function() {
  2138. var calls = [];
  2139. var i;
  2140. for (i = 0; i < this.callCount; i++) {
  2141. push(calls, this.getCall(i));
  2142. }
  2143. return calls;
  2144. },
  2145. calledBefore: function calledBefore(spyFn) {
  2146. if (!this.called) {
  2147. return false;
  2148. }
  2149. if (!spyFn.called) {
  2150. return true;
  2151. }
  2152. return this.callIds[0] < spyFn.callIds[spyFn.callIds.length - 1];
  2153. },
  2154. calledAfter: function calledAfter(spyFn) {
  2155. if (!this.called || !spyFn.called) {
  2156. return false;
  2157. }
  2158. return this.callIds[this.callCount - 1] > spyFn.callIds[0];
  2159. },
  2160. calledImmediatelyBefore: function calledImmediatelyBefore(spyFn) {
  2161. if (!this.called || !spyFn.called) {
  2162. return false;
  2163. }
  2164. return this.callIds[this.callCount - 1] === spyFn.callIds[spyFn.callCount - 1] - 1;
  2165. },
  2166. calledImmediatelyAfter: function calledImmediatelyAfter(spyFn) {
  2167. if (!this.called || !spyFn.called) {
  2168. return false;
  2169. }
  2170. return this.callIds[this.callCount - 1] === spyFn.callIds[spyFn.callCount - 1] + 1;
  2171. },
  2172. withArgs: function() {
  2173. var args = slice(arguments);
  2174. if (this.fakes) {
  2175. var matching = pop(this.matchingFakes(args, true));
  2176. if (matching) {
  2177. return matching;
  2178. }
  2179. } else {
  2180. this.fakes = [];
  2181. }
  2182. var original = this;
  2183. var fake = this.instantiateFake();
  2184. fake.matchingArguments = args;
  2185. fake.parent = this;
  2186. push(this.fakes, fake);
  2187. if (original.defaultBehavior && original.defaultBehavior.promiseLibrary) {
  2188. fake.defaultBehavior = fake.defaultBehavior || createBehavior(fake);
  2189. fake.defaultBehavior.promiseLibrary = original.defaultBehavior.promiseLibrary;
  2190. }
  2191. fake.withArgs = function() {
  2192. return original.withArgs.apply(original, arguments);
  2193. };
  2194. forEach(original.args, function(arg, i) {
  2195. if (!fake.matches(arg)) {
  2196. return;
  2197. }
  2198. incrementCallCount.call(fake);
  2199. push(fake.thisValues, original.thisValues[i]);
  2200. push(fake.args, arg);
  2201. push(fake.returnValues, original.returnValues[i]);
  2202. push(fake.exceptions, original.exceptions[i]);
  2203. push(fake.callIds, original.callIds[i]);
  2204. });
  2205. createCallProperties.call(fake);
  2206. return fake;
  2207. },
  2208. matchingFakes: function(args, strict) {
  2209. return filter.call(this.fakes || [], function(fake) {
  2210. return fake.matches(args, strict);
  2211. });
  2212. },
  2213. matches: function(args, strict) {
  2214. var margs = this.matchingArguments;
  2215. if (margs.length <= args.length && deepEqual(slice(args, 0, margs.length), margs)) {
  2216. return !strict || margs.length === args.length;
  2217. }
  2218. return undefined;
  2219. },
  2220. printf: function(format) {
  2221. var spyInstance = this;
  2222. var args = slice(arguments, 1);
  2223. var formatter;
  2224. return (format || "").replace(/%(.)/g, function(match, specifyer) {
  2225. formatter = spyApi.formatters[specifyer];
  2226. if (typeof formatter === "function") {
  2227. return String(formatter(spyInstance, args));
  2228. } else if (!isNaN(parseInt(specifyer, 10))) {
  2229. return sinonFormat(args[specifyer - 1]);
  2230. }
  2231. return "%" + specifyer;
  2232. });
  2233. }
  2234. };
  2235. function delegateToCalls(method, matchAny, actual, returnsValues, notCalled, totalCallCount) {
  2236. spyApi[method] = function() {
  2237. if (!this.called) {
  2238. if (notCalled) {
  2239. return notCalled.apply(this, arguments);
  2240. }
  2241. return false;
  2242. }
  2243. if (totalCallCount !== undefined && this.callCount !== totalCallCount) {
  2244. return false;
  2245. }
  2246. var currentCall;
  2247. var matches = 0;
  2248. var returnValues = [];
  2249. for (var i = 0, l = this.callCount; i < l; i += 1) {
  2250. currentCall = this.getCall(i);
  2251. var returnValue = currentCall[actual || method].apply(currentCall, arguments);
  2252. push(returnValues, returnValue);
  2253. if (returnValue) {
  2254. matches += 1;
  2255. if (matchAny) {
  2256. return true;
  2257. }
  2258. }
  2259. }
  2260. if (returnsValues) {
  2261. return returnValues;
  2262. }
  2263. return matches === this.callCount;
  2264. };
  2265. }
  2266. delegateToCalls("calledOn", true);
  2267. delegateToCalls("alwaysCalledOn", false, "calledOn");
  2268. delegateToCalls("calledWith", true);
  2269. delegateToCalls("calledOnceWith", true, "calledWith", false, undefined, 1);
  2270. delegateToCalls("calledWithMatch", true);
  2271. delegateToCalls("alwaysCalledWith", false, "calledWith");
  2272. delegateToCalls("alwaysCalledWithMatch", false, "calledWithMatch");
  2273. delegateToCalls("calledWithExactly", true);
  2274. delegateToCalls("calledOnceWithExactly", true, "calledWithExactly", false, undefined, 1);
  2275. delegateToCalls("alwaysCalledWithExactly", false, "calledWithExactly");
  2276. delegateToCalls("neverCalledWith", false, "notCalledWith", false, function() {
  2277. return true;
  2278. });
  2279. delegateToCalls("neverCalledWithMatch", false, "notCalledWithMatch", false, function() {
  2280. return true;
  2281. });
  2282. delegateToCalls("threw", true);
  2283. delegateToCalls("alwaysThrew", false, "threw");
  2284. delegateToCalls("returned", true);
  2285. delegateToCalls("alwaysReturned", false, "returned");
  2286. delegateToCalls("calledWithNew", true);
  2287. delegateToCalls("alwaysCalledWithNew", false, "calledWithNew");
  2288. /* eslint-disable local-rules/no-prototype-methods */
  2289. delegateToCalls("callArg", false, "callArgWith", true, function() {
  2290. throw new Error(this.toString() + " cannot call arg since it was not yet invoked.");
  2291. });
  2292. spyApi.callArgWith = spyApi.callArg;
  2293. delegateToCalls("callArgOn", false, "callArgOnWith", true, function() {
  2294. throw new Error(this.toString() + " cannot call arg since it was not yet invoked.");
  2295. });
  2296. spyApi.callArgOnWith = spyApi.callArgOn;
  2297. delegateToCalls("throwArg", false, "throwArg", false, function() {
  2298. throw new Error(this.toString() + " cannot throw arg since it was not yet invoked.");
  2299. });
  2300. delegateToCalls("yield", false, "yield", true, function() {
  2301. throw new Error(this.toString() + " cannot yield since it was not yet invoked.");
  2302. });
  2303. // "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode.
  2304. spyApi.invokeCallback = spyApi.yield;
  2305. delegateToCalls("yieldOn", false, "yieldOn", true, function() {
  2306. throw new Error(this.toString() + " cannot yield since it was not yet invoked.");
  2307. });
  2308. delegateToCalls("yieldTo", false, "yieldTo", true, function(property) {
  2309. throw new Error(
  2310. this.toString() + " cannot yield to '" + valueToString(property) + "' since it was not yet invoked."
  2311. );
  2312. });
  2313. delegateToCalls("yieldToOn", false, "yieldToOn", true, function(property) {
  2314. throw new Error(
  2315. this.toString() + " cannot yield to '" + valueToString(property) + "' since it was not yet invoked."
  2316. );
  2317. });
  2318. /* eslint-enable local-rules/no-prototype-methods */
  2319. extend(spy, spyApi);
  2320. spy.spyCall = spyCall;
  2321. module.exports = spy;
  2322. },{"./behavior":3,"./call":4,"./spy-formatters":13,"./util/core/extend":21,"./util/core/format":22,"./util/core/function-to-string":23,"./util/core/get-property-descriptor":25,"./util/core/is-es-module":26,"./util/core/wrap-method":33,"@sinonjs/commons":39,"@sinonjs/samsam":65}],15:[function(require,module,exports){
  2323. "use strict";
  2324. var getPropertyDescriptor = require("./util/core/get-property-descriptor");
  2325. var walk = require("./util/core/walk");
  2326. function stubEntireObject(stub, object) {
  2327. walk(object || {}, function(prop, propOwner) {
  2328. // we don't want to stub things like toString(), valueOf(), etc. so we only stub if the object
  2329. // is not Object.prototype
  2330. if (
  2331. propOwner !== Object.prototype &&
  2332. prop !== "constructor" &&
  2333. typeof getPropertyDescriptor(propOwner, prop).value === "function"
  2334. ) {
  2335. stub(object, prop);
  2336. }
  2337. });
  2338. return object;
  2339. }
  2340. module.exports = stubEntireObject;
  2341. },{"./util/core/get-property-descriptor":25,"./util/core/walk":32}],16:[function(require,module,exports){
  2342. "use strict";
  2343. var arrayProto = require("@sinonjs/commons").prototypes.array;
  2344. var behavior = require("./behavior");
  2345. var behaviors = require("./default-behaviors");
  2346. var hasOwnProperty = require("@sinonjs/commons").prototypes.object.hasOwnProperty;
  2347. var isNonExistentOwnProperty = require("./util/core/is-non-existent-own-property");
  2348. var spy = require("./spy");
  2349. var extend = require("./util/core/extend");
  2350. var functionToString = require("./util/core/function-to-string");
  2351. var getPropertyDescriptor = require("./util/core/get-property-descriptor");
  2352. var isEsModule = require("./util/core/is-es-module");
  2353. var wrapMethod = require("./util/core/wrap-method");
  2354. var stubEntireObject = require("./stub-entire-object");
  2355. var throwOnFalsyObject = require("./throw-on-falsy-object");
  2356. var valueToString = require("@sinonjs/commons").valueToString;
  2357. var forEach = arrayProto.forEach;
  2358. var pop = arrayProto.pop;
  2359. var slice = arrayProto.slice;
  2360. var sort = arrayProto.sort;
  2361. function stub(object, property) {
  2362. if (arguments.length > 2) {
  2363. throw new TypeError("stub(obj, 'meth', fn) has been removed, see documentation");
  2364. }
  2365. if (isEsModule(object)) {
  2366. throw new TypeError("ES Modules cannot be stubbed");
  2367. }
  2368. throwOnFalsyObject.apply(null, arguments);
  2369. if (isNonExistentOwnProperty(object, property)) {
  2370. throw new TypeError("Cannot stub non-existent own property " + valueToString(property));
  2371. }
  2372. var actualDescriptor = getPropertyDescriptor(object, property);
  2373. var isObject = typeof object === "object" || typeof object === "function";
  2374. var isStubbingEntireObject = typeof property === "undefined" && isObject;
  2375. var isCreatingNewStub = !object && typeof property === "undefined";
  2376. var isStubbingNonFuncProperty =
  2377. isObject &&
  2378. typeof property !== "undefined" &&
  2379. (typeof actualDescriptor === "undefined" || typeof actualDescriptor.value !== "function") &&
  2380. typeof descriptor === "undefined";
  2381. var isStubbingExistingMethod =
  2382. typeof object === "object" &&
  2383. typeof actualDescriptor !== "undefined" &&
  2384. typeof actualDescriptor.value === "function";
  2385. var arity = isStubbingExistingMethod ? object[property].length : 0;
  2386. if (isStubbingEntireObject) {
  2387. return stubEntireObject(stub, object);
  2388. }
  2389. if (isCreatingNewStub) {
  2390. return stub.create();
  2391. }
  2392. var s = stub.create(arity);
  2393. extend.nonEnum(s, {
  2394. rootObj: object,
  2395. propName: property,
  2396. restore: function restore() {
  2397. if (actualDescriptor !== undefined) {
  2398. Object.defineProperty(object, property, actualDescriptor);
  2399. return;
  2400. }
  2401. delete object[property];
  2402. }
  2403. });
  2404. return isStubbingNonFuncProperty ? s : wrapMethod(object, property, s);
  2405. }
  2406. stub.createStubInstance = function(constructor, overrides) {
  2407. if (typeof constructor !== "function") {
  2408. throw new TypeError("The constructor should be a function.");
  2409. }
  2410. var stubbedObject = stub(Object.create(constructor.prototype));
  2411. forEach(Object.keys(overrides || {}), function(propertyName) {
  2412. if (propertyName in stubbedObject) {
  2413. var value = overrides[propertyName];
  2414. if (value && value.createStubInstance) {
  2415. stubbedObject[propertyName] = value;
  2416. } else {
  2417. stubbedObject[propertyName].returns(value);
  2418. }
  2419. } else {
  2420. throw new Error("Cannot stub " + propertyName + ". Property does not exist!");
  2421. }
  2422. });
  2423. return stubbedObject;
  2424. };
  2425. /*eslint-disable no-use-before-define*/
  2426. function getParentBehaviour(stubInstance) {
  2427. return stubInstance.parent && getCurrentBehavior(stubInstance.parent);
  2428. }
  2429. function getDefaultBehavior(stubInstance) {
  2430. return stubInstance.defaultBehavior || getParentBehaviour(stubInstance) || behavior.create(stubInstance);
  2431. }
  2432. function getCurrentBehavior(stubInstance) {
  2433. var currentBehavior = stubInstance.behaviors[stubInstance.callCount - 1];
  2434. return currentBehavior && currentBehavior.isPresent() ? currentBehavior : getDefaultBehavior(stubInstance);
  2435. }
  2436. /*eslint-enable no-use-before-define*/
  2437. var uuid = 0;
  2438. var proto = {
  2439. create: function create(stubLength) {
  2440. var functionStub = function() {
  2441. var args = slice(arguments);
  2442. var matchings = functionStub.matchingFakes(args);
  2443. var fnStub =
  2444. pop(
  2445. sort(matchings, function(a, b) {
  2446. return a.matchingArguments.length - b.matchingArguments.length;
  2447. })
  2448. ) || functionStub;
  2449. return getCurrentBehavior(fnStub).invoke(this, arguments);
  2450. };
  2451. var orig = functionStub;
  2452. functionStub = spy.create(functionStub, stubLength);
  2453. extend.nonEnum(functionStub, {
  2454. id: "stub#" + uuid++,
  2455. func: orig
  2456. });
  2457. extend(functionStub, stub);
  2458. extend.nonEnum(functionStub, {
  2459. instantiateFake: stub.create,
  2460. displayName: "stub",
  2461. toString: functionToString,
  2462. defaultBehavior: null,
  2463. behaviors: []
  2464. });
  2465. return functionStub;
  2466. },
  2467. resetBehavior: function() {
  2468. var fakes = this.fakes || [];
  2469. this.defaultBehavior = null;
  2470. this.behaviors = [];
  2471. delete this.returnValue;
  2472. delete this.returnArgAt;
  2473. delete this.throwArgAt;
  2474. delete this.resolveArgAt;
  2475. delete this.fakeFn;
  2476. this.returnThis = false;
  2477. this.resolveThis = false;
  2478. forEach(fakes, function(fake) {
  2479. fake.resetBehavior();
  2480. });
  2481. },
  2482. resetHistory: spy.resetHistory,
  2483. reset: function() {
  2484. this.resetHistory();
  2485. this.resetBehavior();
  2486. },
  2487. onCall: function onCall(index) {
  2488. if (!this.behaviors[index]) {
  2489. this.behaviors[index] = behavior.create(this);
  2490. }
  2491. return this.behaviors[index];
  2492. },
  2493. onFirstCall: function onFirstCall() {
  2494. return this.onCall(0);
  2495. },
  2496. onSecondCall: function onSecondCall() {
  2497. return this.onCall(1);
  2498. },
  2499. onThirdCall: function onThirdCall() {
  2500. return this.onCall(2);
  2501. }
  2502. };
  2503. forEach(Object.keys(behavior), function(method) {
  2504. if (
  2505. hasOwnProperty(behavior, method) &&
  2506. !hasOwnProperty(proto, method) &&
  2507. method !== "create" &&
  2508. method !== "withArgs" &&
  2509. method !== "invoke"
  2510. ) {
  2511. proto[method] = behavior.createBehavior(method);
  2512. }
  2513. });
  2514. forEach(Object.keys(behaviors), function(method) {
  2515. if (hasOwnProperty(behaviors, method) && !hasOwnProperty(proto, method)) {
  2516. behavior.addBehavior(stub, method, behaviors[method]);
  2517. }
  2518. });
  2519. extend(stub, proto);
  2520. module.exports = stub;
  2521. },{"./behavior":3,"./default-behaviors":8,"./spy":14,"./stub-entire-object":15,"./throw-on-falsy-object":17,"./util/core/extend":21,"./util/core/function-to-string":23,"./util/core/get-property-descriptor":25,"./util/core/is-es-module":26,"./util/core/is-non-existent-own-property":27,"./util/core/wrap-method":33,"@sinonjs/commons":39}],17:[function(require,module,exports){
  2522. "use strict";
  2523. var valueToString = require("@sinonjs/commons").valueToString;
  2524. function throwOnFalsyObject(object, property) {
  2525. if (property && !object) {
  2526. var type = object === null ? "null" : "undefined";
  2527. throw new Error("Trying to stub property '" + valueToString(property) + "' of " + type);
  2528. }
  2529. }
  2530. module.exports = throwOnFalsyObject;
  2531. },{"@sinonjs/commons":39}],18:[function(require,module,exports){
  2532. "use strict";
  2533. module.exports = {
  2534. injectIntoThis: true,
  2535. injectInto: null,
  2536. properties: ["spy", "stub", "mock", "clock", "server", "requests"],
  2537. useFakeTimers: true,
  2538. useFakeServer: true
  2539. };
  2540. },{}],19:[function(require,module,exports){
  2541. /* eslint-disable no-console */
  2542. "use strict";
  2543. // wrap returns a function that will invoke the supplied function and print a deprecation warning to the console each
  2544. // time it is called.
  2545. exports.wrap = function(func, msg) {
  2546. var wrapped = function() {
  2547. exports.printWarning(msg);
  2548. return func.apply(this, arguments);
  2549. };
  2550. if (func.prototype) {
  2551. wrapped.prototype = func.prototype;
  2552. }
  2553. return wrapped;
  2554. };
  2555. // defaultMsg returns a string which can be supplied to `wrap()` to notify the user that a particular part of the
  2556. // sinon API has been deprecated.
  2557. /* istanbul ignore next */
  2558. exports.defaultMsg = function(funcName) {
  2559. return "sinon." + funcName + " is deprecated and will be removed from the public API in a future version of sinon.";
  2560. };
  2561. exports.printWarning = function(msg) {
  2562. // Watch out for IE7 and below! :(
  2563. if (typeof console !== "undefined") {
  2564. /* istanbul ignore else */
  2565. if (console.info) {
  2566. console.info(msg);
  2567. } else {
  2568. console.log(msg);
  2569. }
  2570. }
  2571. };
  2572. },{}],20:[function(require,module,exports){
  2573. "use strict";
  2574. var arrayProto = require("@sinonjs/commons").prototypes.array;
  2575. var reduce = arrayProto.reduce;
  2576. module.exports = function exportAsyncBehaviors(behaviorMethods) {
  2577. return reduce(
  2578. Object.keys(behaviorMethods),
  2579. function(acc, method) {
  2580. // need to avoid creating another async versions of the newly added async methods
  2581. if (method.match(/^(callsArg|yields)/) && !method.match(/Async/)) {
  2582. acc[method + "Async"] = function() {
  2583. var result = behaviorMethods[method].apply(this, arguments);
  2584. this.callbackAsync = true;
  2585. return result;
  2586. };
  2587. }
  2588. return acc;
  2589. },
  2590. {}
  2591. );
  2592. };
  2593. },{"@sinonjs/commons":39}],21:[function(require,module,exports){
  2594. "use strict";
  2595. var arrayProto = require("@sinonjs/commons").prototypes.array;
  2596. var hasOwnProperty = require("@sinonjs/commons").prototypes.object.hasOwnProperty;
  2597. var join = arrayProto.join;
  2598. var push = arrayProto.push;
  2599. var slice = arrayProto.slice;
  2600. // Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug
  2601. var hasDontEnumBug = (function() {
  2602. var obj = {
  2603. constructor: function() {
  2604. return "0";
  2605. },
  2606. toString: function() {
  2607. return "1";
  2608. },
  2609. valueOf: function() {
  2610. return "2";
  2611. },
  2612. toLocaleString: function() {
  2613. return "3";
  2614. },
  2615. prototype: function() {
  2616. return "4";
  2617. },
  2618. isPrototypeOf: function() {
  2619. return "5";
  2620. },
  2621. propertyIsEnumerable: function() {
  2622. return "6";
  2623. },
  2624. hasOwnProperty: function() {
  2625. return "7";
  2626. },
  2627. length: function() {
  2628. return "8";
  2629. },
  2630. unique: function() {
  2631. return "9";
  2632. }
  2633. };
  2634. var result = [];
  2635. for (var prop in obj) {
  2636. if (hasOwnProperty(obj, prop)) {
  2637. push(result, obj[prop]());
  2638. }
  2639. }
  2640. return join(result, "") !== "0123456789";
  2641. })();
  2642. function extendCommon(target, sources, doCopy) {
  2643. var source, i, prop;
  2644. for (i = 0; i < sources.length; i++) {
  2645. source = sources[i];
  2646. for (prop in source) {
  2647. if (hasOwnProperty(source, prop)) {
  2648. doCopy(target, source, prop);
  2649. }
  2650. }
  2651. // Make sure we copy (own) toString method even when in JScript with DontEnum bug
  2652. // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug
  2653. if (hasDontEnumBug && hasOwnProperty(source, "toString") && source.toString !== target.toString) {
  2654. target.toString = source.toString;
  2655. }
  2656. }
  2657. return target;
  2658. }
  2659. /** Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will
  2660. * override properties in previous sources.
  2661. *
  2662. * @arg {Object} target - The Object to extend
  2663. * @arg {Object[]} sources - Objects to copy properties from.
  2664. *
  2665. * @returns {Object} the extended target
  2666. */
  2667. module.exports = function extend(target /*, sources */) {
  2668. var sources = slice(arguments, 1);
  2669. return extendCommon(target, sources, function copyValue(dest, source, prop) {
  2670. dest[prop] = source[prop];
  2671. });
  2672. };
  2673. /** Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will
  2674. * override properties in previous sources. Define the properties as non enumerable.
  2675. *
  2676. * @arg {Object} target - The Object to extend
  2677. * @arg {Object[]} sources - Objects to copy properties from.
  2678. *
  2679. * @returns {Object} the extended target
  2680. */
  2681. module.exports.nonEnum = function extendNonEnum(target /*, sources */) {
  2682. var sources = slice(arguments, 1);
  2683. return extendCommon(target, sources, function copyProperty(dest, source, prop) {
  2684. Object.defineProperty(dest, prop, {
  2685. value: source[prop],
  2686. enumerable: false,
  2687. configurable: true,
  2688. writable: true
  2689. });
  2690. });
  2691. };
  2692. },{"@sinonjs/commons":39}],22:[function(require,module,exports){
  2693. "use strict";
  2694. var formatio = require("@sinonjs/formatio");
  2695. var formatter = formatio.configure({
  2696. quoteStrings: false,
  2697. limitChildrenCount: 250
  2698. });
  2699. var customFormatter;
  2700. function format() {
  2701. if (customFormatter) {
  2702. return customFormatter.apply(null, arguments);
  2703. }
  2704. return formatter.ascii.apply(formatter, arguments);
  2705. }
  2706. format.setFormatter = function(aCustomFormatter) {
  2707. if (typeof aCustomFormatter !== "function") {
  2708. throw new Error("format.setFormatter must be called with a function");
  2709. }
  2710. customFormatter = aCustomFormatter;
  2711. };
  2712. module.exports = format;
  2713. },{"@sinonjs/formatio":49}],23:[function(require,module,exports){
  2714. "use strict";
  2715. module.exports = function toString() {
  2716. var i, prop, thisValue;
  2717. if (this.getCall && this.callCount) {
  2718. i = this.callCount;
  2719. while (i--) {
  2720. thisValue = this.getCall(i).thisValue;
  2721. for (prop in thisValue) {
  2722. if (thisValue[prop] === this) {
  2723. return prop;
  2724. }
  2725. }
  2726. }
  2727. }
  2728. return this.displayName || "sinon fake";
  2729. };
  2730. },{}],24:[function(require,module,exports){
  2731. "use strict";
  2732. /* istanbul ignore next : not testing that setTimeout works */
  2733. function nextTick(callback) {
  2734. setTimeout(callback, 0);
  2735. }
  2736. module.exports = function getNextTick(process, setImmediate) {
  2737. if (typeof process === "object" && typeof process.nextTick === "function") {
  2738. return process.nextTick;
  2739. }
  2740. if (typeof setImmediate === "function") {
  2741. return setImmediate;
  2742. }
  2743. return nextTick;
  2744. };
  2745. },{}],25:[function(require,module,exports){
  2746. "use strict";
  2747. module.exports = function getPropertyDescriptor(object, property) {
  2748. var proto = object;
  2749. var descriptor;
  2750. while (proto && !(descriptor = Object.getOwnPropertyDescriptor(proto, property))) {
  2751. proto = Object.getPrototypeOf(proto);
  2752. }
  2753. return descriptor;
  2754. };
  2755. },{}],26:[function(require,module,exports){
  2756. "use strict";
  2757. /**
  2758. * Verify if an object is a ECMAScript Module
  2759. *
  2760. * As the exports from a module is immutable we cannot alter the exports
  2761. * using spies or stubs. Let the consumer know this to avoid bug reports
  2762. * on weird error messages.
  2763. *
  2764. * @param {Object} object The object to examine
  2765. *
  2766. * @returns {Boolean} true when the object is a module
  2767. */
  2768. module.exports = function(object) {
  2769. return (
  2770. object && typeof Symbol !== "undefined" && object[Symbol.toStringTag] === "Module" && Object.isSealed(object)
  2771. );
  2772. };
  2773. },{}],27:[function(require,module,exports){
  2774. "use strict";
  2775. function isNonExistentOwnProperty(object, property) {
  2776. return object && typeof property !== "undefined" && !(property in object);
  2777. }
  2778. module.exports = isNonExistentOwnProperty;
  2779. },{}],28:[function(require,module,exports){
  2780. "use strict";
  2781. var getPropertyDescriptor = require("./get-property-descriptor");
  2782. function isPropertyConfigurable(obj, propName) {
  2783. var propertyDescriptor = getPropertyDescriptor(obj, propName);
  2784. return propertyDescriptor ? propertyDescriptor.configurable : true;
  2785. }
  2786. module.exports = isPropertyConfigurable;
  2787. },{"./get-property-descriptor":25}],29:[function(require,module,exports){
  2788. (function (global){
  2789. "use strict";
  2790. var getNextTick = require("./get-next-tick");
  2791. /* istanbul ignore next */
  2792. var root = typeof window !== "undefined" ? window : global;
  2793. module.exports = getNextTick(root.process, root.setImmediate);
  2794. }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
  2795. },{"./get-next-tick":24}],30:[function(require,module,exports){
  2796. "use strict";
  2797. var array = [null, "once", "twice", "thrice"];
  2798. module.exports = function timesInWords(count) {
  2799. return array[count] || (count || 0) + " times";
  2800. };
  2801. },{}],31:[function(require,module,exports){
  2802. "use strict";
  2803. var forEach = Array.prototype.forEach;
  2804. function usePromiseLibrary(library, fakes) {
  2805. if (typeof library === "undefined") {
  2806. return;
  2807. }
  2808. if (Array.isArray(fakes)) {
  2809. forEach.call(fakes, usePromiseLibrary.bind(null, library));
  2810. return;
  2811. }
  2812. if (typeof fakes.usingPromise === "function") {
  2813. fakes.usingPromise(library);
  2814. }
  2815. }
  2816. module.exports = usePromiseLibrary;
  2817. },{}],32:[function(require,module,exports){
  2818. "use strict";
  2819. var forEach = require("@sinonjs/commons").prototypes.array.forEach;
  2820. function walkInternal(obj, iterator, context, originalObj, seen) {
  2821. var proto, prop;
  2822. if (typeof Object.getOwnPropertyNames !== "function") {
  2823. // We explicitly want to enumerate through all of the prototype's properties
  2824. // in this case, therefore we deliberately leave out an own property check.
  2825. /* eslint-disable-next-line guard-for-in */
  2826. for (prop in obj) {
  2827. iterator.call(context, obj[prop], prop, obj);
  2828. }
  2829. return;
  2830. }
  2831. forEach(Object.getOwnPropertyNames(obj), function(k) {
  2832. if (seen[k] !== true) {
  2833. seen[k] = true;
  2834. var target = typeof Object.getOwnPropertyDescriptor(obj, k).get === "function" ? originalObj : obj;
  2835. iterator.call(context, k, target);
  2836. }
  2837. });
  2838. proto = Object.getPrototypeOf(obj);
  2839. if (proto) {
  2840. walkInternal(proto, iterator, context, originalObj, seen);
  2841. }
  2842. }
  2843. /* Walks the prototype chain of an object and iterates over every own property
  2844. * name encountered. The iterator is called in the same fashion that Array.prototype.forEach
  2845. * works, where it is passed the value, key, and own object as the 1st, 2nd, and 3rd positional
  2846. * argument, respectively. In cases where Object.getOwnPropertyNames is not available, walk will
  2847. * default to using a simple for..in loop.
  2848. *
  2849. * obj - The object to walk the prototype chain for.
  2850. * iterator - The function to be called on each pass of the walk.
  2851. * context - (Optional) When given, the iterator will be called with this object as the receiver.
  2852. */
  2853. module.exports = function walk(obj, iterator, context) {
  2854. return walkInternal(obj, iterator, context, obj, {});
  2855. };
  2856. },{"@sinonjs/commons":39}],33:[function(require,module,exports){
  2857. "use strict";
  2858. var getPropertyDescriptor = require("./get-property-descriptor");
  2859. var extend = require("./extend");
  2860. var hasOwnProperty = require("@sinonjs/commons").prototypes.object.hasOwnProperty;
  2861. var valueToString = require("@sinonjs/commons").valueToString;
  2862. function isFunction(obj) {
  2863. return typeof obj === "function" || Boolean(obj && obj.constructor && obj.call && obj.apply);
  2864. }
  2865. function mirrorProperties(target, source) {
  2866. for (var prop in source) {
  2867. if (!hasOwnProperty(target, prop)) {
  2868. target[prop] = source[prop];
  2869. }
  2870. }
  2871. }
  2872. // Cheap way to detect if we have ES5 support.
  2873. var hasES5Support = "keys" in Object;
  2874. module.exports = function wrapMethod(object, property, method) {
  2875. if (!object) {
  2876. throw new TypeError("Should wrap property of object");
  2877. }
  2878. if (typeof method !== "function" && typeof method !== "object") {
  2879. throw new TypeError("Method wrapper should be a function or a property descriptor");
  2880. }
  2881. function checkWrappedMethod(wrappedMethod) {
  2882. var error;
  2883. if (!isFunction(wrappedMethod)) {
  2884. error = new TypeError(
  2885. "Attempted to wrap " + typeof wrappedMethod + " property " + valueToString(property) + " as function"
  2886. );
  2887. } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) {
  2888. error = new TypeError("Attempted to wrap " + valueToString(property) + " which is already wrapped");
  2889. } else if (wrappedMethod.calledBefore) {
  2890. var verb = wrappedMethod.returns ? "stubbed" : "spied on";
  2891. error = new TypeError("Attempted to wrap " + valueToString(property) + " which is already " + verb);
  2892. }
  2893. if (error) {
  2894. if (wrappedMethod && wrappedMethod.stackTraceError) {
  2895. error.stack += "\n--------------\n" + wrappedMethod.stackTraceError.stack;
  2896. }
  2897. throw error;
  2898. }
  2899. }
  2900. var error, wrappedMethod, i, wrappedMethodDesc;
  2901. function simplePropertyAssignment() {
  2902. wrappedMethod = object[property];
  2903. checkWrappedMethod(wrappedMethod);
  2904. object[property] = method;
  2905. method.displayName = property;
  2906. }
  2907. // Firefox has a problem when using hasOwn.call on objects from other frames.
  2908. /* eslint-disable-next-line local-rules/no-prototype-methods */
  2909. var owned = object.hasOwnProperty ? object.hasOwnProperty(property) : hasOwnProperty(object, property);
  2910. if (hasES5Support) {
  2911. var methodDesc = typeof method === "function" ? { value: method } : method;
  2912. wrappedMethodDesc = getPropertyDescriptor(object, property);
  2913. if (!wrappedMethodDesc) {
  2914. error = new TypeError(
  2915. "Attempted to wrap " + typeof wrappedMethod + " property " + property + " as function"
  2916. );
  2917. } else if (wrappedMethodDesc.restore && wrappedMethodDesc.restore.sinon) {
  2918. error = new TypeError("Attempted to wrap " + property + " which is already wrapped");
  2919. }
  2920. if (error) {
  2921. if (wrappedMethodDesc && wrappedMethodDesc.stackTraceError) {
  2922. error.stack += "\n--------------\n" + wrappedMethodDesc.stackTraceError.stack;
  2923. }
  2924. throw error;
  2925. }
  2926. var types = Object.keys(methodDesc);
  2927. for (i = 0; i < types.length; i++) {
  2928. wrappedMethod = wrappedMethodDesc[types[i]];
  2929. checkWrappedMethod(wrappedMethod);
  2930. }
  2931. mirrorProperties(methodDesc, wrappedMethodDesc);
  2932. for (i = 0; i < types.length; i++) {
  2933. mirrorProperties(methodDesc[types[i]], wrappedMethodDesc[types[i]]);
  2934. }
  2935. Object.defineProperty(object, property, methodDesc);
  2936. // catch failing assignment
  2937. // this is the converse of the check in `.restore` below
  2938. if (typeof method === "function" && object[property] !== method) {
  2939. // correct any wrongdoings caused by the defineProperty call above,
  2940. // such as adding new items (if object was a Storage object)
  2941. delete object[property];
  2942. simplePropertyAssignment();
  2943. }
  2944. } else {
  2945. simplePropertyAssignment();
  2946. }
  2947. extend.nonEnum(method, {
  2948. displayName: property,
  2949. // Set up an Error object for a stack trace which can be used later to find what line of
  2950. // code the original method was created on.
  2951. stackTraceError: new Error("Stack Trace for original"),
  2952. restore: function() {
  2953. // For prototype properties try to reset by delete first.
  2954. // If this fails (ex: localStorage on mobile safari) then force a reset
  2955. // via direct assignment.
  2956. if (!owned) {
  2957. // In some cases `delete` may throw an error
  2958. try {
  2959. delete object[property];
  2960. } catch (e) {} // eslint-disable-line no-empty
  2961. // For native code functions `delete` fails without throwing an error
  2962. // on Chrome < 43, PhantomJS, etc.
  2963. } else if (hasES5Support) {
  2964. Object.defineProperty(object, property, wrappedMethodDesc);
  2965. }
  2966. if (hasES5Support) {
  2967. var descriptor = getPropertyDescriptor(object, property);
  2968. if (descriptor && descriptor.value === method) {
  2969. object[property] = wrappedMethod;
  2970. }
  2971. } else {
  2972. // Use strict equality comparison to check failures then force a reset
  2973. // via direct assignment.
  2974. if (object[property] === method) {
  2975. object[property] = wrappedMethod;
  2976. }
  2977. }
  2978. }
  2979. });
  2980. method.wrappedMethod = wrappedMethod;
  2981. method.restore.sinon = true;
  2982. if (!hasES5Support) {
  2983. mirrorProperties(method, wrappedMethod);
  2984. }
  2985. return method;
  2986. };
  2987. },{"./extend":21,"./get-property-descriptor":25,"@sinonjs/commons":39}],34:[function(require,module,exports){
  2988. "use strict";
  2989. var extend = require("./core/extend");
  2990. var llx = require("lolex");
  2991. function createClock(config, globalCtx) {
  2992. var llxCtx = llx;
  2993. if (globalCtx !== null && typeof globalCtx === "object") {
  2994. llxCtx = llx.withGlobal(globalCtx);
  2995. }
  2996. var clock = llxCtx.install(config);
  2997. clock.restore = clock.uninstall;
  2998. return clock;
  2999. }
  3000. /**
  3001. * @param {number|Date|Object} dateOrConfig The unix epoch value to install with (default 0)
  3002. * @returns {Object} Returns a lolex clock instance
  3003. */
  3004. exports.useFakeTimers = function(dateOrConfig) {
  3005. var hasArguments = typeof dateOrConfig !== "undefined";
  3006. var argumentIsDateLike =
  3007. (typeof dateOrConfig === "number" || dateOrConfig instanceof Date) && arguments.length === 1;
  3008. var argumentIsObject = dateOrConfig !== null && typeof dateOrConfig === "object" && arguments.length === 1;
  3009. if (!hasArguments) {
  3010. return createClock({
  3011. now: 0
  3012. });
  3013. }
  3014. if (argumentIsDateLike) {
  3015. return createClock({
  3016. now: dateOrConfig
  3017. });
  3018. }
  3019. if (argumentIsObject) {
  3020. var config = extend.nonEnum({}, dateOrConfig);
  3021. var globalCtx = config.global;
  3022. delete config.global;
  3023. return createClock(config, globalCtx);
  3024. }
  3025. throw new TypeError("useFakeTimers expected epoch or config object. See https://github.com/sinonjs/sinon");
  3026. };
  3027. exports.clock = {
  3028. create: function(now) {
  3029. return llx.createClock(now);
  3030. }
  3031. };
  3032. exports.timers = {
  3033. setTimeout: setTimeout,
  3034. clearTimeout: clearTimeout,
  3035. setImmediate: typeof setImmediate !== "undefined" ? setImmediate : undefined,
  3036. clearImmediate: typeof clearImmediate !== "undefined" ? clearImmediate : undefined,
  3037. setInterval: setInterval,
  3038. clearInterval: clearInterval,
  3039. Date: Date
  3040. };
  3041. },{"./core/extend":21,"lolex":73}],35:[function(require,module,exports){
  3042. "use strict";
  3043. var every = require("./prototypes/array").every;
  3044. function hasCallsLeft(callMap, spy) {
  3045. if (callMap[spy.id] === undefined) {
  3046. callMap[spy.id] = 0;
  3047. }
  3048. return callMap[spy.id] < spy.callCount;
  3049. }
  3050. function checkAdjacentCalls(callMap, spy, index, spies) {
  3051. var calledBeforeNext = true;
  3052. if (index !== spies.length - 1) {
  3053. calledBeforeNext = spy.calledBefore(spies[index + 1]);
  3054. }
  3055. if (hasCallsLeft(callMap, spy) && calledBeforeNext) {
  3056. callMap[spy.id] += 1;
  3057. return true;
  3058. }
  3059. return false;
  3060. }
  3061. module.exports = function calledInOrder(spies) {
  3062. var callMap = {};
  3063. // eslint-disable-next-line no-underscore-dangle
  3064. var _spies = arguments.length > 1 ? arguments : spies;
  3065. return every(_spies, checkAdjacentCalls.bind(null, callMap));
  3066. };
  3067. },{"./prototypes/array":41}],36:[function(require,module,exports){
  3068. "use strict";
  3069. var functionName = require("./function-name");
  3070. module.exports = function className(value) {
  3071. return (
  3072. (value.constructor && value.constructor.name) ||
  3073. // The next branch is for IE11 support only:
  3074. // Because the name property is not set on the prototype
  3075. // of the Function object, we finally try to grab the
  3076. // name from its definition. This will never be reached
  3077. // in node, so we are not able to test this properly.
  3078. // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name
  3079. (typeof value.constructor === "function" &&
  3080. /* istanbul ignore next */
  3081. functionName(value.constructor)) ||
  3082. null
  3083. );
  3084. };
  3085. },{"./function-name":38}],37:[function(require,module,exports){
  3086. "use strict";
  3087. // This is an `every` implementation that works for all iterables
  3088. module.exports = function every(obj, fn) {
  3089. var pass = true;
  3090. try {
  3091. /* eslint-disable-next-line local-rules/no-prototype-methods */
  3092. obj.forEach(function() {
  3093. if (!fn.apply(this, arguments)) {
  3094. // Throwing an error is the only way to break `forEach`
  3095. throw new Error();
  3096. }
  3097. });
  3098. } catch (e) {
  3099. pass = false;
  3100. }
  3101. return pass;
  3102. };
  3103. },{}],38:[function(require,module,exports){
  3104. "use strict";
  3105. module.exports = function functionName(func) {
  3106. return (
  3107. func.displayName ||
  3108. func.name ||
  3109. // Use function decomposition as a last resort to get function
  3110. // name. Does not rely on function decomposition to work - if it
  3111. // doesn't debugging will be slightly less informative
  3112. // (i.e. toString will say 'spy' rather than 'myFunc').
  3113. (String(func).match(/function ([^\s(]+)/) || [])[1]
  3114. );
  3115. };
  3116. },{}],39:[function(require,module,exports){
  3117. "use strict";
  3118. module.exports = {
  3119. calledInOrder: require("./called-in-order"),
  3120. className: require("./class-name"),
  3121. every: require("./every"),
  3122. functionName: require("./function-name"),
  3123. orderByFirstCall: require("./order-by-first-call"),
  3124. prototypes: require("./prototypes"),
  3125. typeOf: require("./type-of"),
  3126. valueToString: require("./value-to-string")
  3127. };
  3128. },{"./called-in-order":35,"./class-name":36,"./every":37,"./function-name":38,"./order-by-first-call":40,"./prototypes":44,"./type-of":47,"./value-to-string":48}],40:[function(require,module,exports){
  3129. "use strict";
  3130. var sort = require("./prototypes/array").sort;
  3131. var slice = require("./prototypes/array").slice;
  3132. function comparator(a, b) {
  3133. // uuid, won't ever be equal
  3134. var aCall = a.getCall(0);
  3135. var bCall = b.getCall(0);
  3136. var aId = (aCall && aCall.callId) || -1;
  3137. var bId = (bCall && bCall.callId) || -1;
  3138. return aId < bId ? -1 : 1;
  3139. }
  3140. module.exports = function orderByFirstCall(spies) {
  3141. return sort(slice(spies), comparator);
  3142. };
  3143. },{"./prototypes/array":41}],41:[function(require,module,exports){
  3144. "use strict";
  3145. var copyPrototype = require("./copy-prototype");
  3146. module.exports = copyPrototype(Array.prototype);
  3147. },{"./copy-prototype":42}],42:[function(require,module,exports){
  3148. "use strict";
  3149. var call = Function.call;
  3150. module.exports = function copyPrototypeMethods(prototype) {
  3151. /* eslint-disable local-rules/no-prototype-methods */
  3152. return Object.getOwnPropertyNames(prototype).reduce(function(result, name) {
  3153. // ignore size because it throws from Map
  3154. if (
  3155. name !== "size" &&
  3156. name !== "caller" &&
  3157. name !== "callee" &&
  3158. name !== "arguments" &&
  3159. typeof prototype[name] === "function"
  3160. ) {
  3161. result[name] = call.bind(prototype[name]);
  3162. }
  3163. return result;
  3164. }, Object.create(null));
  3165. };
  3166. },{}],43:[function(require,module,exports){
  3167. "use strict";
  3168. var copyPrototype = require("./copy-prototype");
  3169. module.exports = copyPrototype(Function.prototype);
  3170. },{"./copy-prototype":42}],44:[function(require,module,exports){
  3171. "use strict";
  3172. module.exports = {
  3173. array: require("./array"),
  3174. function: require("./function"),
  3175. object: require("./object"),
  3176. string: require("./string")
  3177. };
  3178. },{"./array":41,"./function":43,"./object":45,"./string":46}],45:[function(require,module,exports){
  3179. "use strict";
  3180. var copyPrototype = require("./copy-prototype");
  3181. module.exports = copyPrototype(Object.prototype);
  3182. },{"./copy-prototype":42}],46:[function(require,module,exports){
  3183. "use strict";
  3184. var copyPrototype = require("./copy-prototype");
  3185. module.exports = copyPrototype(String.prototype);
  3186. },{"./copy-prototype":42}],47:[function(require,module,exports){
  3187. "use strict";
  3188. var type = require("type-detect");
  3189. module.exports = function typeOf(value) {
  3190. return type(value).toLowerCase();
  3191. };
  3192. },{"type-detect":89}],48:[function(require,module,exports){
  3193. "use strict";
  3194. function valueToString(value) {
  3195. if (value && value.toString) {
  3196. /* eslint-disable-next-line local-rules/no-prototype-methods */
  3197. return value.toString();
  3198. }
  3199. return String(value);
  3200. }
  3201. module.exports = valueToString;
  3202. },{}],49:[function(require,module,exports){
  3203. (function (global){
  3204. "use strict";
  3205. var samsam = require("@sinonjs/samsam");
  3206. var formatio = {
  3207. excludeConstructors: ["Object", /^.$/],
  3208. quoteStrings: true,
  3209. limitChildrenCount: 0
  3210. };
  3211. var specialObjects = [];
  3212. if (typeof global !== "undefined") {
  3213. specialObjects.push({ object: global, value: "[object global]" });
  3214. }
  3215. if (typeof document !== "undefined") {
  3216. specialObjects.push({
  3217. object: document,
  3218. value: "[object HTMLDocument]"
  3219. });
  3220. }
  3221. if (typeof window !== "undefined") {
  3222. specialObjects.push({ object: window, value: "[object Window]" });
  3223. }
  3224. function functionName(func) {
  3225. if (!func) { return ""; }
  3226. if (func.displayName) { return func.displayName; }
  3227. if (func.name) { return func.name; }
  3228. var matches = func.toString().match(/function\s+([^\(]+)/m);
  3229. return (matches && matches[1]) || "";
  3230. }
  3231. function constructorName(f, object) {
  3232. var name = functionName(object && object.constructor);
  3233. var excludes = f.excludeConstructors ||
  3234. formatio.excludeConstructors || [];
  3235. var i, l;
  3236. for (i = 0, l = excludes.length; i < l; ++i) {
  3237. if (typeof excludes[i] === "string" && excludes[i] === name) {
  3238. return "";
  3239. } else if (excludes[i].test && excludes[i].test(name)) {
  3240. return "";
  3241. }
  3242. }
  3243. return name;
  3244. }
  3245. function isCircular(object, objects) {
  3246. if (typeof object !== "object") { return false; }
  3247. var i, l;
  3248. for (i = 0, l = objects.length; i < l; ++i) {
  3249. if (objects[i] === object) { return true; }
  3250. }
  3251. return false;
  3252. }
  3253. function ascii(f, object, processed, indent) {
  3254. if (typeof object === "string") {
  3255. if (object.length === 0) { return "(empty string)"; }
  3256. var qs = f.quoteStrings;
  3257. var quote = typeof qs !== "boolean" || qs;
  3258. return processed || quote ? "\"" + object + "\"" : object;
  3259. }
  3260. if (typeof object === "function" && !(object instanceof RegExp)) {
  3261. return ascii.func(object);
  3262. }
  3263. processed = processed || [];
  3264. if (isCircular(object, processed)) { return "[Circular]"; }
  3265. if (Object.prototype.toString.call(object) === "[object Array]") {
  3266. return ascii.array.call(f, object, processed);
  3267. }
  3268. if (!object) { return String((1 / object) === -Infinity ? "-0" : object); }
  3269. if (samsam.isElement(object)) { return ascii.element(object); }
  3270. if (typeof object.toString === "function" &&
  3271. object.toString !== Object.prototype.toString) {
  3272. return object.toString();
  3273. }
  3274. var i, l;
  3275. for (i = 0, l = specialObjects.length; i < l; i++) {
  3276. if (object === specialObjects[i].object) {
  3277. return specialObjects[i].value;
  3278. }
  3279. }
  3280. if (typeof Set !== "undefined" && object instanceof Set) {
  3281. return ascii.set.call(f, object, processed);
  3282. }
  3283. return ascii.object.call(f, object, processed, indent);
  3284. }
  3285. ascii.func = function (func) {
  3286. return "function " + functionName(func) + "() {}";
  3287. };
  3288. function delimit(str, delimiters) {
  3289. delimiters = delimiters || ["[", "]"];
  3290. return delimiters[0] + str + delimiters[1];
  3291. }
  3292. ascii.array = function (array, processed, delimiters) {
  3293. processed = processed || [];
  3294. processed.push(array);
  3295. var pieces = [];
  3296. var i, l;
  3297. l = (this.limitChildrenCount > 0) ?
  3298. Math.min(this.limitChildrenCount, array.length) : array.length;
  3299. for (i = 0; i < l; ++i) {
  3300. pieces.push(ascii(this, array[i], processed));
  3301. }
  3302. if (l < array.length) {
  3303. pieces.push("[... " + (array.length - l) + " more elements]");
  3304. }
  3305. return delimit(pieces.join(", "), delimiters);
  3306. };
  3307. ascii.set = function (set, processed) {
  3308. return ascii.array.call(this, Array.from(set), processed, ["Set {", "}"]);
  3309. };
  3310. ascii.object = function (object, processed, indent) {
  3311. processed = processed || [];
  3312. processed.push(object);
  3313. indent = indent || 0;
  3314. var pieces = [];
  3315. var properties = Object.keys(object).sort();
  3316. var length = 3;
  3317. var prop, str, obj, i, k, l;
  3318. l = (this.limitChildrenCount > 0) ?
  3319. Math.min(this.limitChildrenCount, properties.length) : properties.length;
  3320. for (i = 0; i < l; ++i) {
  3321. prop = properties[i];
  3322. obj = object[prop];
  3323. if (isCircular(obj, processed)) {
  3324. str = "[Circular]";
  3325. } else {
  3326. str = ascii(this, obj, processed, indent + 2);
  3327. }
  3328. str = (/\s/.test(prop) ? "\"" + prop + "\"" : prop) + ": " + str;
  3329. length += str.length;
  3330. pieces.push(str);
  3331. }
  3332. var cons = constructorName(this, object);
  3333. var prefix = cons ? "[" + cons + "] " : "";
  3334. var is = "";
  3335. for (i = 0, k = indent; i < k; ++i) { is += " "; }
  3336. if (l < properties.length)
  3337. {pieces.push("[... " + (properties.length - l) + " more elements]");}
  3338. if (length + indent > 80) {
  3339. return prefix + "{\n " + is + pieces.join(",\n " + is) + "\n" +
  3340. is + "}";
  3341. }
  3342. return prefix + "{ " + pieces.join(", ") + " }";
  3343. };
  3344. ascii.element = function (element) {
  3345. var tagName = element.tagName.toLowerCase();
  3346. var attrs = element.attributes;
  3347. var pairs = [];
  3348. var attr, attrName, i, l, val;
  3349. for (i = 0, l = attrs.length; i < l; ++i) {
  3350. attr = attrs.item(i);
  3351. attrName = attr.nodeName.toLowerCase().replace("html:", "");
  3352. val = attr.nodeValue;
  3353. if (attrName !== "contenteditable" || val !== "inherit") {
  3354. if (val) { pairs.push(attrName + "=\"" + val + "\""); }
  3355. }
  3356. }
  3357. var formatted = "<" + tagName + (pairs.length > 0 ? " " : "");
  3358. // SVG elements have undefined innerHTML
  3359. var content = element.innerHTML || "";
  3360. if (content.length > 20) {
  3361. content = content.substr(0, 20) + "[...]";
  3362. }
  3363. var res = formatted + pairs.join(" ") + ">" + content +
  3364. "</" + tagName + ">";
  3365. return res.replace(/ contentEditable="inherit"/, "");
  3366. };
  3367. function Formatio(options) {
  3368. // eslint-disable-next-line guard-for-in
  3369. for (var opt in options) {
  3370. this[opt] = options[opt];
  3371. }
  3372. }
  3373. Formatio.prototype = {
  3374. functionName: functionName,
  3375. configure: function (options) {
  3376. return new Formatio(options);
  3377. },
  3378. constructorName: function (object) {
  3379. return constructorName(this, object);
  3380. },
  3381. ascii: function (object, processed, indent) {
  3382. return ascii(this, object, processed, indent);
  3383. }
  3384. };
  3385. module.exports = Formatio.prototype;
  3386. }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
  3387. },{"@sinonjs/samsam":65}],50:[function(require,module,exports){
  3388. "use strict";
  3389. var valueToString = require("@sinonjs/commons").valueToString;
  3390. var getClass = require("./get-class");
  3391. var identical = require("./identical");
  3392. var isArguments = require("./is-arguments");
  3393. var isDate = require("./is-date");
  3394. var isElement = require("./is-element");
  3395. var isNaN = require("./is-nan");
  3396. var isObject = require("./is-object");
  3397. var isSet = require("./is-set");
  3398. var isSubset = require("./is-subset");
  3399. var getClassName = require("./get-class-name");
  3400. var every = Array.prototype.every;
  3401. var getTime = Date.prototype.getTime;
  3402. var hasOwnProperty = Object.prototype.hasOwnProperty;
  3403. var indexOf = Array.prototype.indexOf;
  3404. var keys = Object.keys;
  3405. /**
  3406. * @name samsam.deepEqual
  3407. * @param Object first
  3408. * @param Object second
  3409. *
  3410. * Deep equal comparison. Two values are "deep equal" if:
  3411. *
  3412. * - They are equal, according to samsam.identical
  3413. * - They are both date objects representing the same time
  3414. * - They are both arrays containing elements that are all deepEqual
  3415. * - They are objects with the same set of properties, and each property
  3416. * in ``first`` is deepEqual to the corresponding property in ``second``
  3417. *
  3418. * Supports cyclic objects.
  3419. */
  3420. function deepEqualCyclic(first, second, match) {
  3421. // used for cyclic comparison
  3422. // contain already visited objects
  3423. var objects1 = [];
  3424. var objects2 = [];
  3425. // contain pathes (position in the object structure)
  3426. // of the already visited objects
  3427. // indexes same as in objects arrays
  3428. var paths1 = [];
  3429. var paths2 = [];
  3430. // contains combinations of already compared objects
  3431. // in the manner: { "$1['ref']$2['ref']": true }
  3432. var compared = {};
  3433. // does the recursion for the deep equal check
  3434. return (function deepEqual(obj1, obj2, path1, path2) {
  3435. // If both are matchers they must be the same instance in order to be
  3436. // considered equal If we didn't do that we would end up running one
  3437. // matcher against the other
  3438. if (match && match.isMatcher(obj2)) {
  3439. if (match.isMatcher(obj1)) {
  3440. return obj1 === obj2;
  3441. }
  3442. return obj2.test(obj1);
  3443. }
  3444. var type1 = typeof obj1;
  3445. var type2 = typeof obj2;
  3446. // == null also matches undefined
  3447. if (
  3448. obj1 === obj2 ||
  3449. isNaN(obj1) ||
  3450. isNaN(obj2) ||
  3451. obj1 == null ||
  3452. obj2 == null ||
  3453. type1 !== "object" ||
  3454. type2 !== "object"
  3455. ) {
  3456. return identical(obj1, obj2);
  3457. }
  3458. // Elements are only equal if identical(expected, actual)
  3459. if (isElement(obj1) || isElement(obj2)) {
  3460. return false;
  3461. }
  3462. var isDate1 = isDate(obj1);
  3463. var isDate2 = isDate(obj2);
  3464. if (isDate1 || isDate2) {
  3465. if (
  3466. !isDate1 ||
  3467. !isDate2 ||
  3468. getTime.call(obj1) !== getTime.call(obj2)
  3469. ) {
  3470. return false;
  3471. }
  3472. }
  3473. if (obj1 instanceof RegExp && obj2 instanceof RegExp) {
  3474. if (valueToString(obj1) !== valueToString(obj2)) {
  3475. return false;
  3476. }
  3477. }
  3478. if (obj1 instanceof Error && obj2 instanceof Error) {
  3479. return obj1 === obj2;
  3480. }
  3481. var class1 = getClass(obj1);
  3482. var class2 = getClass(obj2);
  3483. var keys1 = keys(obj1);
  3484. var keys2 = keys(obj2);
  3485. var name1 = getClassName(obj1);
  3486. var name2 = getClassName(obj2);
  3487. if (isArguments(obj1) || isArguments(obj2)) {
  3488. if (obj1.length !== obj2.length) {
  3489. return false;
  3490. }
  3491. } else {
  3492. if (
  3493. type1 !== type2 ||
  3494. class1 !== class2 ||
  3495. keys1.length !== keys2.length ||
  3496. (name1 && name2 && name1 !== name2)
  3497. ) {
  3498. return false;
  3499. }
  3500. }
  3501. if (isSet(obj1) || isSet(obj2)) {
  3502. if (!isSet(obj1) || !isSet(obj2) || obj1.size !== obj2.size) {
  3503. return false;
  3504. }
  3505. return isSubset(obj1, obj2, deepEqual);
  3506. }
  3507. return every.call(keys1, function(key) {
  3508. if (!hasOwnProperty.call(obj2, key)) {
  3509. return false;
  3510. }
  3511. var value1 = obj1[key];
  3512. var value2 = obj2[key];
  3513. var isObject1 = isObject(value1);
  3514. var isObject2 = isObject(value2);
  3515. // determines, if the objects were already visited
  3516. // (it's faster to check for isObject first, than to
  3517. // get -1 from getIndex for non objects)
  3518. var index1 = isObject1 ? indexOf.call(objects1, value1) : -1;
  3519. var index2 = isObject2 ? indexOf.call(objects2, value2) : -1;
  3520. // determines the new paths of the objects
  3521. // - for non cyclic objects the current path will be extended
  3522. // by current property name
  3523. // - for cyclic objects the stored path is taken
  3524. var newPath1 =
  3525. index1 !== -1
  3526. ? paths1[index1]
  3527. : path1 + "[" + JSON.stringify(key) + "]";
  3528. var newPath2 =
  3529. index2 !== -1
  3530. ? paths2[index2]
  3531. : path2 + "[" + JSON.stringify(key) + "]";
  3532. var combinedPath = newPath1 + newPath2;
  3533. // stop recursion if current objects are already compared
  3534. if (compared[combinedPath]) {
  3535. return true;
  3536. }
  3537. // remember the current objects and their paths
  3538. if (index1 === -1 && isObject1) {
  3539. objects1.push(value1);
  3540. paths1.push(newPath1);
  3541. }
  3542. if (index2 === -1 && isObject2) {
  3543. objects2.push(value2);
  3544. paths2.push(newPath2);
  3545. }
  3546. // remember that the current objects are already compared
  3547. if (isObject1 && isObject2) {
  3548. compared[combinedPath] = true;
  3549. }
  3550. // End of cyclic logic
  3551. // neither value1 nor value2 is a cycle
  3552. // continue with next level
  3553. return deepEqual(value1, value2, newPath1, newPath2);
  3554. });
  3555. })(first, second, "$1", "$2");
  3556. }
  3557. deepEqualCyclic.use = function(match) {
  3558. return function(a, b) {
  3559. return deepEqualCyclic(a, b, match);
  3560. };
  3561. };
  3562. module.exports = deepEqualCyclic;
  3563. },{"./get-class":52,"./get-class-name":51,"./identical":53,"./is-arguments":54,"./is-date":55,"./is-element":56,"./is-nan":57,"./is-object":59,"./is-set":60,"./is-subset":61,"@sinonjs/commons":39}],51:[function(require,module,exports){
  3564. "use strict";
  3565. var valueToString = require("@sinonjs/commons").valueToString;
  3566. var re = /function (\w+)\s*\(/;
  3567. function getClassName(value) {
  3568. if (value.constructor && "name" in value.constructor) {
  3569. return value.constructor.name;
  3570. }
  3571. if (typeof value.constructor === "function") {
  3572. var match = valueToString(value.constructor).match(re);
  3573. if (match.length > 1) {
  3574. return match[1];
  3575. }
  3576. }
  3577. return null;
  3578. }
  3579. module.exports = getClassName;
  3580. },{"@sinonjs/commons":39}],52:[function(require,module,exports){
  3581. "use strict";
  3582. var o = Object.prototype;
  3583. function getClass(value) {
  3584. // Returns the internal [[Class]] by calling Object.prototype.toString
  3585. // with the provided value as this. Return value is a string, naming the
  3586. // internal class, e.g. "Array"
  3587. return o.toString.call(value).split(/[ \]]/)[1];
  3588. }
  3589. module.exports = getClass;
  3590. },{}],53:[function(require,module,exports){
  3591. "use strict";
  3592. var isNaN = require("./is-nan");
  3593. var isNegZero = require("./is-neg-zero");
  3594. /**
  3595. * @name samsam.equal
  3596. * @param Object obj1
  3597. * @param Object obj2
  3598. *
  3599. * Returns ``true`` if two objects are strictly equal. Compared to
  3600. * ``===`` there are two exceptions:
  3601. *
  3602. * - NaN is considered equal to NaN
  3603. * - -0 and +0 are not considered equal
  3604. */
  3605. function identical(obj1, obj2) {
  3606. if (obj1 === obj2 || (isNaN(obj1) && isNaN(obj2))) {
  3607. return obj1 !== 0 || isNegZero(obj1) === isNegZero(obj2);
  3608. }
  3609. return false;
  3610. }
  3611. module.exports = identical;
  3612. },{"./is-nan":57,"./is-neg-zero":58}],54:[function(require,module,exports){
  3613. "use strict";
  3614. var getClass = require("./get-class");
  3615. /**
  3616. * @name samsam.isArguments
  3617. * @param Object object
  3618. *
  3619. * Returns ``true`` if ``object`` is an ``arguments`` object,
  3620. * ``false`` otherwise.
  3621. */
  3622. function isArguments(object) {
  3623. if (getClass(object) === "Arguments") {
  3624. return true;
  3625. }
  3626. if (
  3627. typeof object !== "object" ||
  3628. typeof object.length !== "number" ||
  3629. getClass(object) === "Array"
  3630. ) {
  3631. return false;
  3632. }
  3633. if (typeof object.callee === "function") {
  3634. return true;
  3635. }
  3636. try {
  3637. object[object.length] = 6;
  3638. delete object[object.length];
  3639. } catch (e) {
  3640. return true;
  3641. }
  3642. return false;
  3643. }
  3644. module.exports = isArguments;
  3645. },{"./get-class":52}],55:[function(require,module,exports){
  3646. "use strict";
  3647. function isDate(value) {
  3648. return value instanceof Date;
  3649. }
  3650. module.exports = isDate;
  3651. },{}],56:[function(require,module,exports){
  3652. "use strict";
  3653. var div = typeof document !== "undefined" && document.createElement("div");
  3654. /**
  3655. * @name samsam.isElement
  3656. * @param Object object
  3657. *
  3658. * Returns ``true`` if ``object`` is a DOM element node. Unlike
  3659. * Underscore.js/lodash, this function will return ``false`` if ``object``
  3660. * is an *element-like* object, i.e. a regular object with a ``nodeType``
  3661. * property that holds the value ``1``.
  3662. */
  3663. function isElement(object) {
  3664. if (!object || object.nodeType !== 1 || !div) {
  3665. return false;
  3666. }
  3667. try {
  3668. object.appendChild(div);
  3669. object.removeChild(div);
  3670. } catch (e) {
  3671. return false;
  3672. }
  3673. return true;
  3674. }
  3675. module.exports = isElement;
  3676. },{}],57:[function(require,module,exports){
  3677. "use strict";
  3678. function isNaN(value) {
  3679. // Unlike global isNaN, this avoids type coercion
  3680. // typeof check avoids IE host object issues, hat tip to
  3681. // lodash
  3682. var val = value; // JsLint thinks value !== value is "weird"
  3683. return typeof value === "number" && value !== val;
  3684. }
  3685. module.exports = isNaN;
  3686. },{}],58:[function(require,module,exports){
  3687. "use strict";
  3688. /**
  3689. * @name samsam.isNegZero
  3690. * @param Object value
  3691. *
  3692. * Returns ``true`` if ``value`` is ``-0``.
  3693. */
  3694. function isNegZero(value) {
  3695. return value === 0 && 1 / value === -Infinity;
  3696. }
  3697. module.exports = isNegZero;
  3698. },{}],59:[function(require,module,exports){
  3699. "use strict";
  3700. // Returns true when the value is a regular Object and not a specialized Object
  3701. //
  3702. // This helps speeding up deepEqual cyclic checks
  3703. // The premise is that only Objects are stored in the visited array.
  3704. // So if this function returns false, we don't have to do the
  3705. // expensive operation of searching for the value in the the array of already
  3706. // visited objects
  3707. function isObject(value) {
  3708. return (
  3709. typeof value === "object" &&
  3710. value !== null &&
  3711. // none of these are collection objects, so we can return false
  3712. !(value instanceof Boolean) &&
  3713. !(value instanceof Date) &&
  3714. !(value instanceof Error) &&
  3715. !(value instanceof Number) &&
  3716. !(value instanceof RegExp) &&
  3717. !(value instanceof String)
  3718. );
  3719. }
  3720. module.exports = isObject;
  3721. },{}],60:[function(require,module,exports){
  3722. "use strict";
  3723. function isSet(val) {
  3724. return (typeof Set !== "undefined" && val instanceof Set) || false;
  3725. }
  3726. module.exports = isSet;
  3727. },{}],61:[function(require,module,exports){
  3728. "use strict";
  3729. function isSubset(s1, s2, compare) {
  3730. var allContained = true;
  3731. s1.forEach(function(v1) {
  3732. var includes = false;
  3733. s2.forEach(function(v2) {
  3734. if (compare(v2, v1)) {
  3735. includes = true;
  3736. }
  3737. });
  3738. allContained = allContained && includes;
  3739. });
  3740. return allContained;
  3741. }
  3742. module.exports = isSubset;
  3743. },{}],62:[function(require,module,exports){
  3744. "use strict";
  3745. var slice = require("@sinonjs/commons").prototypes.string.slice;
  3746. var typeOf = require("@sinonjs/commons").typeOf;
  3747. var valueToString = require("@sinonjs/commons").valueToString;
  3748. module.exports = function iterableToString(obj) {
  3749. var representation = "";
  3750. function stringify(item) {
  3751. return typeof item === "string"
  3752. ? "'" + item + "'"
  3753. : valueToString(item);
  3754. }
  3755. function mapToString(map) {
  3756. /* eslint-disable-next-line local-rules/no-prototype-methods */
  3757. map.forEach(function(value, key) {
  3758. representation +=
  3759. "[" + stringify(key) + "," + stringify(value) + "],";
  3760. });
  3761. representation = slice(representation, 0, -1);
  3762. return representation;
  3763. }
  3764. function genericIterableToString(iterable) {
  3765. /* eslint-disable-next-line local-rules/no-prototype-methods */
  3766. iterable.forEach(function(value) {
  3767. representation += stringify(value) + ",";
  3768. });
  3769. representation = slice(representation, 0, -1);
  3770. return representation;
  3771. }
  3772. if (typeOf(obj) === "map") {
  3773. return mapToString(obj);
  3774. }
  3775. return genericIterableToString(obj);
  3776. };
  3777. },{"@sinonjs/commons":39}],63:[function(require,module,exports){
  3778. "use strict";
  3779. var valueToString = require("@sinonjs/commons").valueToString;
  3780. var deepEqual = require("./deep-equal").use(match); // eslint-disable-line no-use-before-define
  3781. var getClass = require("./get-class");
  3782. var isDate = require("./is-date");
  3783. var isSet = require("./is-set");
  3784. var isSubset = require("./is-subset");
  3785. var createMatcher = require("./matcher");
  3786. function arrayContains(array, subset, compare) {
  3787. if (subset.length === 0) {
  3788. return true;
  3789. }
  3790. var i, l, j, k;
  3791. for (i = 0, l = array.length; i < l; ++i) {
  3792. if (compare(array[i], subset[0])) {
  3793. for (j = 0, k = subset.length; j < k; ++j) {
  3794. if (i + j >= l) {
  3795. return false;
  3796. }
  3797. if (!compare(array[i + j], subset[j])) {
  3798. return false;
  3799. }
  3800. }
  3801. return true;
  3802. }
  3803. }
  3804. return false;
  3805. }
  3806. /**
  3807. * @name samsam.match
  3808. * @param Object object
  3809. * @param Object matcher
  3810. *
  3811. * Compare arbitrary value ``object`` with matcher.
  3812. */
  3813. function match(object, matcher) {
  3814. if (matcher && typeof matcher.test === "function") {
  3815. return matcher.test(object);
  3816. }
  3817. if (typeof matcher === "function") {
  3818. return matcher(object) === true;
  3819. }
  3820. if (typeof matcher === "string") {
  3821. matcher = matcher.toLowerCase();
  3822. var notNull = typeof object === "string" || !!object;
  3823. return (
  3824. notNull &&
  3825. valueToString(object)
  3826. .toLowerCase()
  3827. .indexOf(matcher) >= 0
  3828. );
  3829. }
  3830. if (typeof matcher === "number") {
  3831. return matcher === object;
  3832. }
  3833. if (typeof matcher === "boolean") {
  3834. return matcher === object;
  3835. }
  3836. if (typeof matcher === "undefined") {
  3837. return typeof object === "undefined";
  3838. }
  3839. if (matcher === null) {
  3840. return object === null;
  3841. }
  3842. if (object === null) {
  3843. return false;
  3844. }
  3845. if (isSet(object)) {
  3846. return isSubset(matcher, object, match);
  3847. }
  3848. if (getClass(object) === "Array" && getClass(matcher) === "Array") {
  3849. return arrayContains(object, matcher, match);
  3850. }
  3851. if (isDate(matcher)) {
  3852. return isDate(object) && object.getTime() === matcher.getTime();
  3853. }
  3854. if (matcher && typeof matcher === "object") {
  3855. if (matcher === object) {
  3856. return true;
  3857. }
  3858. if (typeof object !== "object") {
  3859. return false;
  3860. }
  3861. var prop;
  3862. // eslint-disable-next-line guard-for-in
  3863. for (prop in matcher) {
  3864. var value = object[prop];
  3865. if (
  3866. typeof value === "undefined" &&
  3867. typeof object.getAttribute === "function"
  3868. ) {
  3869. value = object.getAttribute(prop);
  3870. }
  3871. if (
  3872. matcher[prop] === null ||
  3873. typeof matcher[prop] === "undefined"
  3874. ) {
  3875. if (value !== matcher[prop]) {
  3876. return false;
  3877. }
  3878. } else if (
  3879. typeof value === "undefined" ||
  3880. !deepEqual(value, matcher[prop])
  3881. ) {
  3882. return false;
  3883. }
  3884. }
  3885. return true;
  3886. }
  3887. throw new Error(
  3888. "Matcher was not a string, a number, a " +
  3889. "function, a boolean or an object"
  3890. );
  3891. }
  3892. Object.keys(createMatcher).forEach(function(key) {
  3893. match[key] = createMatcher[key];
  3894. });
  3895. module.exports = match;
  3896. },{"./deep-equal":50,"./get-class":52,"./is-date":55,"./is-set":60,"./is-subset":61,"./matcher":64,"@sinonjs/commons":39}],64:[function(require,module,exports){
  3897. "use strict";
  3898. var arrayProto = require("@sinonjs/commons").prototypes.array;
  3899. var deepEqual = require("./deep-equal").use(match); // eslint-disable-line no-use-before-define
  3900. var every = require("@sinonjs/commons").every;
  3901. var functionName = require("@sinonjs/commons").functionName;
  3902. var get = require("lodash").get;
  3903. var iterableToString = require("./iterable-to-string");
  3904. var objectProto = require("@sinonjs/commons").prototypes.object;
  3905. var stringProto = require("@sinonjs/commons").prototypes.string;
  3906. var typeOf = require("@sinonjs/commons").typeOf;
  3907. var valueToString = require("@sinonjs/commons").valueToString;
  3908. var arrayIndexOf = arrayProto.indexOf;
  3909. var arrayEvery = arrayProto.every;
  3910. var join = arrayProto.join;
  3911. var map = arrayProto.map;
  3912. var some = arrayProto.some;
  3913. var hasOwnProperty = objectProto.hasOwnProperty;
  3914. var isPrototypeOf = objectProto.isPrototypeOf;
  3915. var stringIndexOf = stringProto.indexOf;
  3916. function assertType(value, type, name) {
  3917. var actual = typeOf(value);
  3918. if (actual !== type) {
  3919. throw new TypeError(
  3920. "Expected type of " +
  3921. name +
  3922. " to be " +
  3923. type +
  3924. ", but was " +
  3925. actual
  3926. );
  3927. }
  3928. }
  3929. function assertMethodExists(value, method, name, methodPath) {
  3930. if (value[method] == null) {
  3931. throw new TypeError(
  3932. "Expected " + name + " to have method " + methodPath
  3933. );
  3934. }
  3935. }
  3936. var matcher = {
  3937. toString: function() {
  3938. return this.message;
  3939. }
  3940. };
  3941. function isMatcher(object) {
  3942. return isPrototypeOf(matcher, object);
  3943. }
  3944. function matchObject(actual, expectation) {
  3945. if (actual === null || actual === undefined) {
  3946. return false;
  3947. }
  3948. return arrayEvery(Object.keys(expectation), function(key) {
  3949. var exp = expectation[key];
  3950. var act = actual[key];
  3951. if (isMatcher(exp)) {
  3952. if (!exp.test(act)) {
  3953. return false;
  3954. }
  3955. } else if (typeOf(exp) === "object") {
  3956. if (!matchObject(act, exp)) {
  3957. return false;
  3958. }
  3959. } else if (!deepEqual(act, exp)) {
  3960. return false;
  3961. }
  3962. return true;
  3963. });
  3964. }
  3965. var TYPE_MAP = {
  3966. function: function(m, expectation, message) {
  3967. m.test = expectation;
  3968. m.message = message || "match(" + functionName(expectation) + ")";
  3969. },
  3970. number: function(m, expectation) {
  3971. m.test = function(actual) {
  3972. // we need type coercion here
  3973. return expectation == actual; // eslint-disable-line eqeqeq
  3974. };
  3975. },
  3976. object: function(m, expectation) {
  3977. var array = [];
  3978. if (typeof expectation.test === "function") {
  3979. m.test = function(actual) {
  3980. return expectation.test(actual) === true;
  3981. };
  3982. m.message = "match(" + functionName(expectation.test) + ")";
  3983. return m;
  3984. }
  3985. array = map(Object.keys(expectation), function(key) {
  3986. return key + ": " + valueToString(expectation[key]);
  3987. });
  3988. m.test = function(actual) {
  3989. return matchObject(actual, expectation);
  3990. };
  3991. m.message = "match(" + join(array, ", ") + ")";
  3992. return m;
  3993. },
  3994. regexp: function(m, expectation) {
  3995. m.test = function(actual) {
  3996. return typeof actual === "string" && expectation.test(actual);
  3997. };
  3998. },
  3999. string: function(m, expectation) {
  4000. m.test = function(actual) {
  4001. return (
  4002. typeof actual === "string" &&
  4003. stringIndexOf(actual, expectation) !== -1
  4004. );
  4005. };
  4006. m.message = 'match("' + expectation + '")';
  4007. }
  4008. };
  4009. function match(expectation, message) {
  4010. var m = Object.create(matcher);
  4011. var type = typeOf(expectation);
  4012. if (type in TYPE_MAP) {
  4013. TYPE_MAP[type](m, expectation, message);
  4014. } else {
  4015. m.test = function(actual) {
  4016. return deepEqual(actual, expectation);
  4017. };
  4018. }
  4019. if (!m.message) {
  4020. m.message = "match(" + valueToString(expectation) + ")";
  4021. }
  4022. return m;
  4023. }
  4024. matcher.or = function(m2) {
  4025. if (!arguments.length) {
  4026. throw new TypeError("Matcher expected");
  4027. } else if (!isMatcher(m2)) {
  4028. m2 = match(m2);
  4029. }
  4030. var m1 = this;
  4031. var or = Object.create(matcher);
  4032. or.test = function(actual) {
  4033. return m1.test(actual) || m2.test(actual);
  4034. };
  4035. or.message = m1.message + ".or(" + m2.message + ")";
  4036. return or;
  4037. };
  4038. matcher.and = function(m2) {
  4039. if (!arguments.length) {
  4040. throw new TypeError("Matcher expected");
  4041. } else if (!isMatcher(m2)) {
  4042. m2 = match(m2);
  4043. }
  4044. var m1 = this;
  4045. var and = Object.create(matcher);
  4046. and.test = function(actual) {
  4047. return m1.test(actual) && m2.test(actual);
  4048. };
  4049. and.message = m1.message + ".and(" + m2.message + ")";
  4050. return and;
  4051. };
  4052. match.isMatcher = isMatcher;
  4053. match.any = match(function() {
  4054. return true;
  4055. }, "any");
  4056. match.defined = match(function(actual) {
  4057. return actual !== null && actual !== undefined;
  4058. }, "defined");
  4059. match.truthy = match(function(actual) {
  4060. return !!actual;
  4061. }, "truthy");
  4062. match.falsy = match(function(actual) {
  4063. return !actual;
  4064. }, "falsy");
  4065. match.same = function(expectation) {
  4066. return match(function(actual) {
  4067. return expectation === actual;
  4068. }, "same(" + valueToString(expectation) + ")");
  4069. };
  4070. match.in = function(arrayOfExpectations) {
  4071. if (typeOf(arrayOfExpectations) !== "array") {
  4072. throw new TypeError("array expected");
  4073. }
  4074. return match(function(actual) {
  4075. return some(arrayOfExpectations, function(expectation) {
  4076. return expectation === actual;
  4077. });
  4078. }, "in(" + valueToString(arrayOfExpectations) + ")");
  4079. };
  4080. match.typeOf = function(type) {
  4081. assertType(type, "string", "type");
  4082. return match(function(actual) {
  4083. return typeOf(actual) === type;
  4084. }, 'typeOf("' + type + '")');
  4085. };
  4086. match.instanceOf = function(type) {
  4087. if (
  4088. typeof Symbol === "undefined" ||
  4089. typeof Symbol.hasInstance === "undefined"
  4090. ) {
  4091. assertType(type, "function", "type");
  4092. } else {
  4093. assertMethodExists(
  4094. type,
  4095. Symbol.hasInstance,
  4096. "type",
  4097. "[Symbol.hasInstance]"
  4098. );
  4099. }
  4100. return match(function(actual) {
  4101. return actual instanceof type;
  4102. }, "instanceOf(" +
  4103. (functionName(type) || Object.prototype.toString.call(type)) +
  4104. ")");
  4105. };
  4106. function createPropertyMatcher(propertyTest, messagePrefix) {
  4107. return function(property, value) {
  4108. assertType(property, "string", "property");
  4109. var onlyProperty = arguments.length === 1;
  4110. var message = messagePrefix + '("' + property + '"';
  4111. if (!onlyProperty) {
  4112. message += ", " + valueToString(value);
  4113. }
  4114. message += ")";
  4115. return match(function(actual) {
  4116. if (
  4117. actual === undefined ||
  4118. actual === null ||
  4119. !propertyTest(actual, property)
  4120. ) {
  4121. return false;
  4122. }
  4123. return onlyProperty || deepEqual(actual[property], value);
  4124. }, message);
  4125. };
  4126. }
  4127. match.has = createPropertyMatcher(function(actual, property) {
  4128. if (typeof actual === "object") {
  4129. return property in actual;
  4130. }
  4131. return actual[property] !== undefined;
  4132. }, "has");
  4133. match.hasOwn = createPropertyMatcher(function(actual, property) {
  4134. return hasOwnProperty(actual, property);
  4135. }, "hasOwn");
  4136. match.hasNested = function(property, value) {
  4137. assertType(property, "string", "property");
  4138. var onlyProperty = arguments.length === 1;
  4139. var message = 'hasNested("' + property + '"';
  4140. if (!onlyProperty) {
  4141. message += ", " + valueToString(value);
  4142. }
  4143. message += ")";
  4144. return match(function(actual) {
  4145. if (
  4146. actual === undefined ||
  4147. actual === null ||
  4148. get(actual, property) === undefined
  4149. ) {
  4150. return false;
  4151. }
  4152. return onlyProperty || deepEqual(get(actual, property), value);
  4153. }, message);
  4154. };
  4155. match.every = function(predicate) {
  4156. if (!isMatcher(predicate)) {
  4157. throw new TypeError("Matcher expected");
  4158. }
  4159. return match(function(actual) {
  4160. if (typeOf(actual) === "object") {
  4161. return every(Object.keys(actual), function(key) {
  4162. return predicate.test(actual[key]);
  4163. });
  4164. }
  4165. return (
  4166. !!actual &&
  4167. typeOf(actual.forEach) === "function" &&
  4168. every(actual, function(element) {
  4169. return predicate.test(element);
  4170. })
  4171. );
  4172. }, "every(" + predicate.message + ")");
  4173. };
  4174. match.some = function(predicate) {
  4175. if (!isMatcher(predicate)) {
  4176. throw new TypeError("Matcher expected");
  4177. }
  4178. return match(function(actual) {
  4179. if (typeOf(actual) === "object") {
  4180. return !every(Object.keys(actual), function(key) {
  4181. return !predicate.test(actual[key]);
  4182. });
  4183. }
  4184. return (
  4185. !!actual &&
  4186. typeOf(actual.forEach) === "function" &&
  4187. !every(actual, function(element) {
  4188. return !predicate.test(element);
  4189. })
  4190. );
  4191. }, "some(" + predicate.message + ")");
  4192. };
  4193. match.array = match.typeOf("array");
  4194. match.array.deepEquals = function(expectation) {
  4195. return match(function(actual) {
  4196. // Comparing lengths is the fastest way to spot a difference before iterating through every item
  4197. var sameLength = actual.length === expectation.length;
  4198. return (
  4199. typeOf(actual) === "array" &&
  4200. sameLength &&
  4201. every(actual, function(element, index) {
  4202. var expected = expectation[index];
  4203. return typeOf(expected) === "array" &&
  4204. typeOf(element) === "array"
  4205. ? match.array.deepEquals(expected).test(element)
  4206. : deepEqual(expected, element);
  4207. })
  4208. );
  4209. }, "deepEquals([" + iterableToString(expectation) + "])");
  4210. };
  4211. match.array.startsWith = function(expectation) {
  4212. return match(function(actual) {
  4213. return (
  4214. typeOf(actual) === "array" &&
  4215. every(expectation, function(expectedElement, index) {
  4216. return actual[index] === expectedElement;
  4217. })
  4218. );
  4219. }, "startsWith([" + iterableToString(expectation) + "])");
  4220. };
  4221. match.array.endsWith = function(expectation) {
  4222. return match(function(actual) {
  4223. // This indicates the index in which we should start matching
  4224. var offset = actual.length - expectation.length;
  4225. return (
  4226. typeOf(actual) === "array" &&
  4227. every(expectation, function(expectedElement, index) {
  4228. return actual[offset + index] === expectedElement;
  4229. })
  4230. );
  4231. }, "endsWith([" + iterableToString(expectation) + "])");
  4232. };
  4233. match.array.contains = function(expectation) {
  4234. return match(function(actual) {
  4235. return (
  4236. typeOf(actual) === "array" &&
  4237. every(expectation, function(expectedElement) {
  4238. return arrayIndexOf(actual, expectedElement) !== -1;
  4239. })
  4240. );
  4241. }, "contains([" + iterableToString(expectation) + "])");
  4242. };
  4243. match.map = match.typeOf("map");
  4244. match.map.deepEquals = function mapDeepEquals(expectation) {
  4245. return match(function(actual) {
  4246. // Comparing lengths is the fastest way to spot a difference before iterating through every item
  4247. var sameLength = actual.size === expectation.size;
  4248. return (
  4249. typeOf(actual) === "map" &&
  4250. sameLength &&
  4251. every(actual, function(element, key) {
  4252. return expectation.has(key) && expectation.get(key) === element;
  4253. })
  4254. );
  4255. }, "deepEquals(Map[" + iterableToString(expectation) + "])");
  4256. };
  4257. match.map.contains = function mapContains(expectation) {
  4258. return match(function(actual) {
  4259. return (
  4260. typeOf(actual) === "map" &&
  4261. every(expectation, function(element, key) {
  4262. return actual.has(key) && actual.get(key) === element;
  4263. })
  4264. );
  4265. }, "contains(Map[" + iterableToString(expectation) + "])");
  4266. };
  4267. match.set = match.typeOf("set");
  4268. match.set.deepEquals = function setDeepEquals(expectation) {
  4269. return match(function(actual) {
  4270. // Comparing lengths is the fastest way to spot a difference before iterating through every item
  4271. var sameLength = actual.size === expectation.size;
  4272. return (
  4273. typeOf(actual) === "set" &&
  4274. sameLength &&
  4275. every(actual, function(element) {
  4276. return expectation.has(element);
  4277. })
  4278. );
  4279. }, "deepEquals(Set[" + iterableToString(expectation) + "])");
  4280. };
  4281. match.set.contains = function setContains(expectation) {
  4282. return match(function(actual) {
  4283. return (
  4284. typeOf(actual) === "set" &&
  4285. every(expectation, function(element) {
  4286. return actual.has(element);
  4287. })
  4288. );
  4289. }, "contains(Set[" + iterableToString(expectation) + "])");
  4290. };
  4291. match.bool = match.typeOf("boolean");
  4292. match.number = match.typeOf("number");
  4293. match.string = match.typeOf("string");
  4294. match.object = match.typeOf("object");
  4295. match.func = match.typeOf("function");
  4296. match.regexp = match.typeOf("regexp");
  4297. match.date = match.typeOf("date");
  4298. match.symbol = match.typeOf("symbol");
  4299. module.exports = match;
  4300. },{"./deep-equal":50,"./iterable-to-string":62,"@sinonjs/commons":39,"lodash":72}],65:[function(require,module,exports){
  4301. "use strict";
  4302. var identical = require("./identical");
  4303. var isArguments = require("./is-arguments");
  4304. var isElement = require("./is-element");
  4305. var isNegZero = require("./is-neg-zero");
  4306. var isSet = require("./is-set");
  4307. var match = require("./match");
  4308. var deepEqualCyclic = require("./deep-equal").use(match);
  4309. var createMatcher = require("./matcher");
  4310. module.exports = {
  4311. createMatcher: createMatcher,
  4312. deepEqual: deepEqualCyclic,
  4313. identical: identical,
  4314. isArguments: isArguments,
  4315. isElement: isElement,
  4316. isNegZero: isNegZero,
  4317. isSet: isSet,
  4318. match: match
  4319. };
  4320. },{"./deep-equal":50,"./identical":53,"./is-arguments":54,"./is-element":56,"./is-neg-zero":58,"./is-set":60,"./match":63,"./matcher":64}],66:[function(require,module,exports){
  4321. // This is free and unencumbered software released into the public domain.
  4322. // See LICENSE.md for more information.
  4323. var encoding = require("./lib/encoding.js");
  4324. module.exports = {
  4325. TextEncoder: encoding.TextEncoder,
  4326. TextDecoder: encoding.TextDecoder,
  4327. };
  4328. },{"./lib/encoding.js":68}],67:[function(require,module,exports){
  4329. (function(global) {
  4330. 'use strict';
  4331. if (typeof module !== "undefined" && module.exports) {
  4332. module.exports = global;
  4333. }
  4334. global["encoding-indexes"] =
  4335. {
  4336. "big5":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,17392,19506,17923,17830,17784,160359,19831,17843,162993,19682,163013,15253,18230,18244,19527,19520,148159,144919,160594,159371,159954,19543,172881,18255,17882,19589,162924,19719,19108,18081,158499,29221,154196,137827,146950,147297,26189,22267,null,32149,22813,166841,15860,38708,162799,23515,138590,23204,13861,171696,23249,23479,23804,26478,34195,170309,29793,29853,14453,138579,145054,155681,16108,153822,15093,31484,40855,147809,166157,143850,133770,143966,17162,33924,40854,37935,18736,34323,22678,38730,37400,31184,31282,26208,27177,34973,29772,31685,26498,31276,21071,36934,13542,29636,155065,29894,40903,22451,18735,21580,16689,145038,22552,31346,162661,35727,18094,159368,16769,155033,31662,140476,40904,140481,140489,140492,40905,34052,144827,16564,40906,17633,175615,25281,28782,40907,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,12736,12737,12738,12739,12740,131340,12741,131281,131277,12742,12743,131275,139240,12744,131274,12745,12746,12747,12748,131342,12749,12750,256,193,461,192,274,201,282,200,332,211,465,210,null,7870,null,7872,202,257,225,462,224,593,275,233,283,232,299,237,464,236,333,243,466,242,363,250,468,249,470,472,474,476,252,null,7871,null,7873,234,609,9178,9179,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,172969,135493,null,25866,null,null,20029,28381,40270,37343,null,null,161589,25745,20250,20264,20392,20822,20852,20892,20964,21153,21160,21307,21326,21457,21464,22242,22768,22788,22791,22834,22836,23398,23454,23455,23706,24198,24635,25993,26622,26628,26725,27982,28860,30005,32420,32428,32442,32455,32463,32479,32518,32567,33402,33487,33647,35270,35774,35810,36710,36711,36718,29713,31996,32205,26950,31433,21031,null,null,null,null,37260,30904,37214,32956,null,36107,33014,133607,null,null,32927,40647,19661,40393,40460,19518,171510,159758,40458,172339,13761,null,28314,33342,29977,null,18705,39532,39567,40857,31111,164972,138698,132560,142054,20004,20097,20096,20103,20159,20203,20279,13388,20413,15944,20483,20616,13437,13459,13477,20870,22789,20955,20988,20997,20105,21113,21136,21287,13767,21417,13649,21424,13651,21442,21539,13677,13682,13953,21651,21667,21684,21689,21712,21743,21784,21795,21800,13720,21823,13733,13759,21975,13765,163204,21797,null,134210,134421,151851,21904,142534,14828,131905,36422,150968,169189,16467,164030,30586,142392,14900,18389,164189,158194,151018,25821,134524,135092,134357,135412,25741,36478,134806,134155,135012,142505,164438,148691,null,134470,170573,164073,18420,151207,142530,39602,14951,169460,16365,13574,152263,169940,161992,142660,40302,38933,null,17369,155813,25780,21731,142668,142282,135287,14843,135279,157402,157462,162208,25834,151634,134211,36456,139681,166732,132913,null,18443,131497,16378,22643,142733,null,148936,132348,155799,134988,134550,21881,16571,17338,null,19124,141926,135325,33194,39157,134556,25465,14846,141173,36288,22177,25724,15939,null,173569,134665,142031,142537,null,135368,145858,14738,14854,164507,13688,155209,139463,22098,134961,142514,169760,13500,27709,151099,null,null,161140,142987,139784,173659,167117,134778,134196,157724,32659,135375,141315,141625,13819,152035,134796,135053,134826,16275,134960,134471,135503,134732,null,134827,134057,134472,135360,135485,16377,140950,25650,135085,144372,161337,142286,134526,134527,142417,142421,14872,134808,135367,134958,173618,158544,167122,167321,167114,38314,21708,33476,21945,null,171715,39974,39606,161630,142830,28992,33133,33004,23580,157042,33076,14231,21343,164029,37302,134906,134671,134775,134907,13789,151019,13833,134358,22191,141237,135369,134672,134776,135288,135496,164359,136277,134777,151120,142756,23124,135197,135198,135413,135414,22428,134673,161428,164557,135093,134779,151934,14083,135094,135552,152280,172733,149978,137274,147831,164476,22681,21096,13850,153405,31666,23400,18432,19244,40743,18919,39967,39821,154484,143677,22011,13810,22153,20008,22786,138177,194680,38737,131206,20059,20155,13630,23587,24401,24516,14586,25164,25909,27514,27701,27706,28780,29227,20012,29357,149737,32594,31035,31993,32595,156266,13505,null,156491,32770,32896,157202,158033,21341,34916,35265,161970,35744,36125,38021,38264,38271,38376,167439,38886,39029,39118,39134,39267,170000,40060,40479,40644,27503,63751,20023,131207,38429,25143,38050,null,20539,28158,171123,40870,15817,34959,147790,28791,23797,19232,152013,13657,154928,24866,166450,36775,37366,29073,26393,29626,144001,172295,15499,137600,19216,30948,29698,20910,165647,16393,27235,172730,16931,34319,133743,31274,170311,166634,38741,28749,21284,139390,37876,30425,166371,40871,30685,20131,20464,20668,20015,20247,40872,21556,32139,22674,22736,138678,24210,24217,24514,141074,25995,144377,26905,27203,146531,27903,null,29184,148741,29580,16091,150035,23317,29881,35715,154788,153237,31379,31724,31939,32364,33528,34199,40873,34960,40874,36537,40875,36815,34143,39392,37409,40876,167353,136255,16497,17058,23066,null,null,null,39016,26475,17014,22333,null,34262,149883,33471,160013,19585,159092,23931,158485,159678,40877,40878,23446,40879,26343,32347,28247,31178,15752,17603,143958,141206,17306,17718,null,23765,146202,35577,23672,15634,144721,23928,40882,29015,17752,147692,138787,19575,14712,13386,131492,158785,35532,20404,131641,22975,33132,38998,170234,24379,134047,null,139713,166253,16642,18107,168057,16135,40883,172469,16632,14294,18167,158790,16764,165554,160767,17773,14548,152730,17761,17691,19849,19579,19830,17898,16328,150287,13921,17630,17597,16877,23870,23880,23894,15868,14351,23972,23993,14368,14392,24130,24253,24357,24451,14600,14612,14655,14669,24791,24893,23781,14729,25015,25017,25039,14776,25132,25232,25317,25368,14840,22193,14851,25570,25595,25607,25690,14923,25792,23829,22049,40863,14999,25990,15037,26111,26195,15090,26258,15138,26390,15170,26532,26624,15192,26698,26756,15218,15217,15227,26889,26947,29276,26980,27039,27013,15292,27094,15325,27237,27252,27249,27266,15340,27289,15346,27307,27317,27348,27382,27521,27585,27626,27765,27818,15563,27906,27910,27942,28033,15599,28068,28081,28181,28184,28201,28294,166336,28347,28386,28378,40831,28392,28393,28452,28468,15686,147265,28545,28606,15722,15733,29111,23705,15754,28716,15761,28752,28756,28783,28799,28809,131877,17345,13809,134872,147159,22462,159443,28990,153568,13902,27042,166889,23412,31305,153825,169177,31333,31357,154028,31419,31408,31426,31427,29137,156813,16842,31450,31453,31466,16879,21682,154625,31499,31573,31529,152334,154878,31650,31599,33692,154548,158847,31696,33825,31634,31672,154912,15789,154725,33938,31738,31750,31797,154817,31812,31875,149634,31910,26237,148856,31945,31943,31974,31860,31987,31989,31950,32359,17693,159300,32093,159446,29837,32137,32171,28981,32179,32210,147543,155689,32228,15635,32245,137209,32229,164717,32285,155937,155994,32366,32402,17195,37996,32295,32576,32577,32583,31030,156368,39393,32663,156497,32675,136801,131176,17756,145254,17667,164666,32762,156809,32773,32776,32797,32808,32815,172167,158915,32827,32828,32865,141076,18825,157222,146915,157416,26405,32935,166472,33031,33050,22704,141046,27775,156824,151480,25831,136330,33304,137310,27219,150117,150165,17530,33321,133901,158290,146814,20473,136445,34018,33634,158474,149927,144688,137075,146936,33450,26907,194964,16859,34123,33488,33562,134678,137140,14017,143741,144730,33403,33506,33560,147083,159139,158469,158615,144846,15807,33565,21996,33669,17675,159141,33708,33729,33747,13438,159444,27223,34138,13462,159298,143087,33880,154596,33905,15827,17636,27303,33866,146613,31064,33960,158614,159351,159299,34014,33807,33681,17568,33939,34020,154769,16960,154816,17731,34100,23282,159385,17703,34163,17686,26559,34326,165413,165435,34241,159880,34306,136578,159949,194994,17770,34344,13896,137378,21495,160666,34430,34673,172280,34798,142375,34737,34778,34831,22113,34412,26710,17935,34885,34886,161248,146873,161252,34910,34972,18011,34996,34997,25537,35013,30583,161551,35207,35210,35238,35241,35239,35260,166437,35303,162084,162493,35484,30611,37374,35472,162393,31465,162618,147343,18195,162616,29052,35596,35615,152624,152933,35647,35660,35661,35497,150138,35728,35739,35503,136927,17941,34895,35995,163156,163215,195028,14117,163155,36054,163224,163261,36114,36099,137488,36059,28764,36113,150729,16080,36215,36265,163842,135188,149898,15228,164284,160012,31463,36525,36534,36547,37588,36633,36653,164709,164882,36773,37635,172703,133712,36787,18730,166366,165181,146875,24312,143970,36857,172052,165564,165121,140069,14720,159447,36919,165180,162494,36961,165228,165387,37032,165651,37060,165606,37038,37117,37223,15088,37289,37316,31916,166195,138889,37390,27807,37441,37474,153017,37561,166598,146587,166668,153051,134449,37676,37739,166625,166891,28815,23235,166626,166629,18789,37444,166892,166969,166911,37747,37979,36540,38277,38310,37926,38304,28662,17081,140922,165592,135804,146990,18911,27676,38523,38550,16748,38563,159445,25050,38582,30965,166624,38589,21452,18849,158904,131700,156688,168111,168165,150225,137493,144138,38705,34370,38710,18959,17725,17797,150249,28789,23361,38683,38748,168405,38743,23370,168427,38751,37925,20688,143543,143548,38793,38815,38833,38846,38848,38866,38880,152684,38894,29724,169011,38911,38901,168989,162170,19153,38964,38963,38987,39014,15118,160117,15697,132656,147804,153350,39114,39095,39112,39111,19199,159015,136915,21936,39137,39142,39148,37752,39225,150057,19314,170071,170245,39413,39436,39483,39440,39512,153381,14020,168113,170965,39648,39650,170757,39668,19470,39700,39725,165376,20532,39732,158120,14531,143485,39760,39744,171326,23109,137315,39822,148043,39938,39935,39948,171624,40404,171959,172434,172459,172257,172323,172511,40318,40323,172340,40462,26760,40388,139611,172435,172576,137531,172595,40249,172217,172724,40592,40597,40606,40610,19764,40618,40623,148324,40641,15200,14821,15645,20274,14270,166955,40706,40712,19350,37924,159138,40727,40726,40761,22175,22154,40773,39352,168075,38898,33919,40802,40809,31452,40846,29206,19390,149877,149947,29047,150008,148296,150097,29598,166874,137466,31135,166270,167478,37737,37875,166468,37612,37761,37835,166252,148665,29207,16107,30578,31299,28880,148595,148472,29054,137199,28835,137406,144793,16071,137349,152623,137208,14114,136955,137273,14049,137076,137425,155467,14115,136896,22363,150053,136190,135848,136134,136374,34051,145062,34051,33877,149908,160101,146993,152924,147195,159826,17652,145134,170397,159526,26617,14131,15381,15847,22636,137506,26640,16471,145215,147681,147595,147727,158753,21707,22174,157361,22162,135135,134056,134669,37830,166675,37788,20216,20779,14361,148534,20156,132197,131967,20299,20362,153169,23144,131499,132043,14745,131850,132116,13365,20265,131776,167603,131701,35546,131596,20120,20685,20749,20386,20227,150030,147082,20290,20526,20588,20609,20428,20453,20568,20732,20825,20827,20829,20830,28278,144789,147001,147135,28018,137348,147081,20904,20931,132576,17629,132259,132242,132241,36218,166556,132878,21081,21156,133235,21217,37742,18042,29068,148364,134176,149932,135396,27089,134685,29817,16094,29849,29716,29782,29592,19342,150204,147597,21456,13700,29199,147657,21940,131909,21709,134086,22301,37469,38644,37734,22493,22413,22399,13886,22731,23193,166470,136954,137071,136976,23084,22968,37519,23166,23247,23058,153926,137715,137313,148117,14069,27909,29763,23073,155267,23169,166871,132115,37856,29836,135939,28933,18802,37896,166395,37821,14240,23582,23710,24158,24136,137622,137596,146158,24269,23375,137475,137476,14081,137376,14045,136958,14035,33066,166471,138682,144498,166312,24332,24334,137511,137131,23147,137019,23364,34324,161277,34912,24702,141408,140843,24539,16056,140719,140734,168072,159603,25024,131134,131142,140827,24985,24984,24693,142491,142599,149204,168269,25713,149093,142186,14889,142114,144464,170218,142968,25399,173147,25782,25393,25553,149987,142695,25252,142497,25659,25963,26994,15348,143502,144045,149897,144043,21773,144096,137433,169023,26318,144009,143795,15072,16784,152964,166690,152975,136956,152923,152613,30958,143619,137258,143924,13412,143887,143746,148169,26254,159012,26219,19347,26160,161904,138731,26211,144082,144097,26142,153714,14545,145466,145340,15257,145314,144382,29904,15254,26511,149034,26806,26654,15300,27326,14435,145365,148615,27187,27218,27337,27397,137490,25873,26776,27212,15319,27258,27479,147392,146586,37792,37618,166890,166603,37513,163870,166364,37991,28069,28427,149996,28007,147327,15759,28164,147516,23101,28170,22599,27940,30786,28987,148250,148086,28913,29264,29319,29332,149391,149285,20857,150180,132587,29818,147192,144991,150090,149783,155617,16134,16049,150239,166947,147253,24743,16115,29900,29756,37767,29751,17567,159210,17745,30083,16227,150745,150790,16216,30037,30323,173510,15129,29800,166604,149931,149902,15099,15821,150094,16127,149957,149747,37370,22322,37698,166627,137316,20703,152097,152039,30584,143922,30478,30479,30587,149143,145281,14942,149744,29752,29851,16063,150202,150215,16584,150166,156078,37639,152961,30750,30861,30856,30930,29648,31065,161601,153315,16654,31131,33942,31141,27181,147194,31290,31220,16750,136934,16690,37429,31217,134476,149900,131737,146874,137070,13719,21867,13680,13994,131540,134157,31458,23129,141045,154287,154268,23053,131675,30960,23082,154566,31486,16889,31837,31853,16913,154547,155324,155302,31949,150009,137136,31886,31868,31918,27314,32220,32263,32211,32590,156257,155996,162632,32151,155266,17002,158581,133398,26582,131150,144847,22468,156690,156664,149858,32733,31527,133164,154345,154947,31500,155150,39398,34373,39523,27164,144447,14818,150007,157101,39455,157088,33920,160039,158929,17642,33079,17410,32966,33033,33090,157620,39107,158274,33378,33381,158289,33875,159143,34320,160283,23174,16767,137280,23339,137377,23268,137432,34464,195004,146831,34861,160802,23042,34926,20293,34951,35007,35046,35173,35149,153219,35156,161669,161668,166901,166873,166812,166393,16045,33955,18165,18127,14322,35389,35356,169032,24397,37419,148100,26068,28969,28868,137285,40301,35999,36073,163292,22938,30659,23024,17262,14036,36394,36519,150537,36656,36682,17140,27736,28603,140065,18587,28537,28299,137178,39913,14005,149807,37051,37015,21873,18694,37307,37892,166475,16482,166652,37927,166941,166971,34021,35371,38297,38311,38295,38294,167220,29765,16066,149759,150082,148458,16103,143909,38543,167655,167526,167525,16076,149997,150136,147438,29714,29803,16124,38721,168112,26695,18973,168083,153567,38749,37736,166281,166950,166703,156606,37562,23313,35689,18748,29689,147995,38811,38769,39224,134950,24001,166853,150194,38943,169178,37622,169431,37349,17600,166736,150119,166756,39132,166469,16128,37418,18725,33812,39227,39245,162566,15869,39323,19311,39338,39516,166757,153800,27279,39457,23294,39471,170225,19344,170312,39356,19389,19351,37757,22642,135938,22562,149944,136424,30788,141087,146872,26821,15741,37976,14631,24912,141185,141675,24839,40015,40019,40059,39989,39952,39807,39887,171565,39839,172533,172286,40225,19630,147716,40472,19632,40204,172468,172269,172275,170287,40357,33981,159250,159711,158594,34300,17715,159140,159364,159216,33824,34286,159232,145367,155748,31202,144796,144960,18733,149982,15714,37851,37566,37704,131775,30905,37495,37965,20452,13376,36964,152925,30781,30804,30902,30795,137047,143817,149825,13978,20338,28634,28633,28702,28702,21524,147893,22459,22771,22410,40214,22487,28980,13487,147884,29163,158784,151447,23336,137141,166473,24844,23246,23051,17084,148616,14124,19323,166396,37819,37816,137430,134941,33906,158912,136211,148218,142374,148417,22932,146871,157505,32168,155995,155812,149945,149899,166394,37605,29666,16105,29876,166755,137375,16097,150195,27352,29683,29691,16086,150078,150164,137177,150118,132007,136228,149989,29768,149782,28837,149878,37508,29670,37727,132350,37681,166606,166422,37766,166887,153045,18741,166530,29035,149827,134399,22180,132634,134123,134328,21762,31172,137210,32254,136898,150096,137298,17710,37889,14090,166592,149933,22960,137407,137347,160900,23201,14050,146779,14000,37471,23161,166529,137314,37748,15565,133812,19094,14730,20724,15721,15692,136092,29045,17147,164376,28175,168164,17643,27991,163407,28775,27823,15574,147437,146989,28162,28428,15727,132085,30033,14012,13512,18048,16090,18545,22980,37486,18750,36673,166940,158656,22546,22472,14038,136274,28926,148322,150129,143331,135856,140221,26809,26983,136088,144613,162804,145119,166531,145366,144378,150687,27162,145069,158903,33854,17631,17614,159014,159057,158850,159710,28439,160009,33597,137018,33773,158848,159827,137179,22921,23170,137139,23137,23153,137477,147964,14125,23023,137020,14023,29070,37776,26266,148133,23150,23083,148115,27179,147193,161590,148571,148170,28957,148057,166369,20400,159016,23746,148686,163405,148413,27148,148054,135940,28838,28979,148457,15781,27871,194597,150095,32357,23019,23855,15859,24412,150109,137183,32164,33830,21637,146170,144128,131604,22398,133333,132633,16357,139166,172726,28675,168283,23920,29583,31955,166489,168992,20424,32743,29389,29456,162548,29496,29497,153334,29505,29512,16041,162584,36972,29173,149746,29665,33270,16074,30476,16081,27810,22269,29721,29726,29727,16098,16112,16116,16122,29907,16142,16211,30018,30061,30066,30093,16252,30152,30172,16320,30285,16343,30324,16348,30330,151388,29064,22051,35200,22633,16413,30531,16441,26465,16453,13787,30616,16490,16495,23646,30654,30667,22770,30744,28857,30748,16552,30777,30791,30801,30822,33864,152885,31027,26627,31026,16643,16649,31121,31129,36795,31238,36796,16743,31377,16818,31420,33401,16836,31439,31451,16847,20001,31586,31596,31611,31762,31771,16992,17018,31867,31900,17036,31928,17044,31981,36755,28864,134351,32207,32212,32208,32253,32686,32692,29343,17303,32800,32805,31545,32814,32817,32852,15820,22452,28832,32951,33001,17389,33036,29482,33038,33042,30048,33044,17409,15161,33110,33113,33114,17427,22586,33148,33156,17445,33171,17453,33189,22511,33217,33252,33364,17551,33446,33398,33482,33496,33535,17584,33623,38505,27018,33797,28917,33892,24803,33928,17668,33982,34017,34040,34064,34104,34130,17723,34159,34160,34272,17783,34418,34450,34482,34543,38469,34699,17926,17943,34990,35071,35108,35143,35217,162151,35369,35384,35476,35508,35921,36052,36082,36124,18328,22623,36291,18413,20206,36410,21976,22356,36465,22005,36528,18487,36558,36578,36580,36589,36594,36791,36801,36810,36812,36915,39364,18605,39136,37395,18718,37416,37464,37483,37553,37550,37567,37603,37611,37619,37620,37629,37699,37764,37805,18757,18769,40639,37911,21249,37917,37933,37950,18794,37972,38009,38189,38306,18855,38388,38451,18917,26528,18980,38720,18997,38834,38850,22100,19172,24808,39097,19225,39153,22596,39182,39193,20916,39196,39223,39234,39261,39266,19312,39365,19357,39484,39695,31363,39785,39809,39901,39921,39924,19565,39968,14191,138178,40265,39994,40702,22096,40339,40381,40384,40444,38134,36790,40571,40620,40625,40637,40646,38108,40674,40689,40696,31432,40772,131220,131767,132000,26906,38083,22956,132311,22592,38081,14265,132565,132629,132726,136890,22359,29043,133826,133837,134079,21610,194619,134091,21662,134139,134203,134227,134245,134268,24807,134285,22138,134325,134365,134381,134511,134578,134600,26965,39983,34725,134660,134670,134871,135056,134957,134771,23584,135100,24075,135260,135247,135286,26398,135291,135304,135318,13895,135359,135379,135471,135483,21348,33965,135907,136053,135990,35713,136567,136729,137155,137159,20088,28859,137261,137578,137773,137797,138282,138352,138412,138952,25283,138965,139029,29080,26709,139333,27113,14024,139900,140247,140282,141098,141425,141647,33533,141671,141715,142037,35237,142056,36768,142094,38840,142143,38983,39613,142412,null,142472,142519,154600,142600,142610,142775,142741,142914,143220,143308,143411,143462,144159,144350,24497,26184,26303,162425,144743,144883,29185,149946,30679,144922,145174,32391,131910,22709,26382,26904,146087,161367,155618,146961,147129,161278,139418,18640,19128,147737,166554,148206,148237,147515,148276,148374,150085,132554,20946,132625,22943,138920,15294,146687,148484,148694,22408,149108,14747,149295,165352,170441,14178,139715,35678,166734,39382,149522,149755,150037,29193,150208,134264,22885,151205,151430,132985,36570,151596,21135,22335,29041,152217,152601,147274,150183,21948,152646,152686,158546,37332,13427,152895,161330,152926,18200,152930,152934,153543,149823,153693,20582,13563,144332,24798,153859,18300,166216,154286,154505,154630,138640,22433,29009,28598,155906,162834,36950,156082,151450,35682,156674,156746,23899,158711,36662,156804,137500,35562,150006,156808,147439,156946,19392,157119,157365,141083,37989,153569,24981,23079,194765,20411,22201,148769,157436,20074,149812,38486,28047,158909,13848,35191,157593,157806,156689,157790,29151,157895,31554,168128,133649,157990,37124,158009,31301,40432,158202,39462,158253,13919,156777,131105,31107,158260,158555,23852,144665,33743,158621,18128,158884,30011,34917,159150,22710,14108,140685,159819,160205,15444,160384,160389,37505,139642,160395,37680,160486,149968,27705,38047,160848,134904,34855,35061,141606,164979,137137,28344,150058,137248,14756,14009,23568,31203,17727,26294,171181,170148,35139,161740,161880,22230,16607,136714,14753,145199,164072,136133,29101,33638,162269,168360,23143,19639,159919,166315,162301,162314,162571,163174,147834,31555,31102,163849,28597,172767,27139,164632,21410,159239,37823,26678,38749,164207,163875,158133,136173,143919,163912,23941,166960,163971,22293,38947,166217,23979,149896,26046,27093,21458,150181,147329,15377,26422,163984,164084,164142,139169,164175,164233,164271,164378,164614,164655,164746,13770,164968,165546,18682,25574,166230,30728,37461,166328,17394,166375,17375,166376,166726,166868,23032,166921,36619,167877,168172,31569,168208,168252,15863,168286,150218,36816,29327,22155,169191,169449,169392,169400,169778,170193,170313,170346,170435,170536,170766,171354,171419,32415,171768,171811,19620,38215,172691,29090,172799,19857,36882,173515,19868,134300,36798,21953,36794,140464,36793,150163,17673,32383,28502,27313,20202,13540,166700,161949,14138,36480,137205,163876,166764,166809,162366,157359,15851,161365,146615,153141,153942,20122,155265,156248,22207,134765,36366,23405,147080,150686,25566,25296,137206,137339,25904,22061,154698,21530,152337,15814,171416,19581,22050,22046,32585,155352,22901,146752,34672,19996,135146,134473,145082,33047,40286,36120,30267,40005,30286,30649,37701,21554,33096,33527,22053,33074,33816,32957,21994,31074,22083,21526,134813,13774,22021,22001,26353,164578,13869,30004,22000,21946,21655,21874,134209,134294,24272,151880,134774,142434,134818,40619,32090,21982,135285,25245,38765,21652,36045,29174,37238,25596,25529,25598,21865,142147,40050,143027,20890,13535,134567,20903,21581,21790,21779,30310,36397,157834,30129,32950,34820,34694,35015,33206,33820,135361,17644,29444,149254,23440,33547,157843,22139,141044,163119,147875,163187,159440,160438,37232,135641,37384,146684,173737,134828,134905,29286,138402,18254,151490,163833,135147,16634,40029,25887,142752,18675,149472,171388,135148,134666,24674,161187,135149,null,155720,135559,29091,32398,40272,19994,19972,13687,23309,27826,21351,13996,14812,21373,13989,149016,22682,150382,33325,21579,22442,154261,133497,null,14930,140389,29556,171692,19721,39917,146686,171824,19547,151465,169374,171998,33884,146870,160434,157619,145184,25390,32037,147191,146988,14890,36872,21196,15988,13946,17897,132238,30272,23280,134838,30842,163630,22695,16575,22140,39819,23924,30292,173108,40581,19681,30201,14331,24857,143578,148466,null,22109,135849,22439,149859,171526,21044,159918,13741,27722,40316,31830,39737,22494,137068,23635,25811,169168,156469,160100,34477,134440,159010,150242,134513,null,20990,139023,23950,38659,138705,40577,36940,31519,39682,23761,31651,25192,25397,39679,31695,39722,31870,39726,31810,31878,39957,31740,39689,40727,39963,149822,40794,21875,23491,20477,40600,20466,21088,15878,21201,22375,20566,22967,24082,38856,40363,36700,21609,38836,39232,38842,21292,24880,26924,21466,39946,40194,19515,38465,27008,20646,30022,137069,39386,21107,null,37209,38529,37212,null,37201,167575,25471,159011,27338,22033,37262,30074,25221,132092,29519,31856,154657,146685,null,149785,30422,39837,20010,134356,33726,34882,null,23626,27072,20717,22394,21023,24053,20174,27697,131570,20281,21660,21722,21146,36226,13822,24332,13811,null,27474,37244,40869,39831,38958,39092,39610,40616,40580,29050,31508,null,27642,34840,32632,null,22048,173642,36471,40787,null,36308,36431,40476,36353,25218,164733,36392,36469,31443,150135,31294,30936,27882,35431,30215,166490,40742,27854,34774,30147,172722,30803,194624,36108,29410,29553,35629,29442,29937,36075,150203,34351,24506,34976,17591,null,137275,159237,null,35454,140571,null,24829,30311,39639,40260,37742,39823,34805,null,34831,36087,29484,38689,39856,13782,29362,19463,31825,39242,155993,24921,19460,40598,24957,null,22367,24943,25254,25145,25294,14940,25058,21418,144373,25444,26626,13778,23895,166850,36826,167481,null,20697,138566,30982,21298,38456,134971,16485,null,30718,null,31938,155418,31962,31277,32870,32867,32077,29957,29938,35220,33306,26380,32866,160902,32859,29936,33027,30500,35209,157644,30035,159441,34729,34766,33224,34700,35401,36013,35651,30507,29944,34010,13877,27058,36262,null,35241,29800,28089,34753,147473,29927,15835,29046,24740,24988,15569,29026,24695,null,32625,166701,29264,24809,19326,21024,15384,146631,155351,161366,152881,137540,135934,170243,159196,159917,23745,156077,166415,145015,131310,157766,151310,17762,23327,156492,40784,40614,156267,12288,65292,12289,12290,65294,8231,65307,65306,65311,65281,65072,8230,8229,65104,65105,65106,183,65108,65109,65110,65111,65372,8211,65073,8212,65075,9588,65076,65103,65288,65289,65077,65078,65371,65373,65079,65080,12308,12309,65081,65082,12304,12305,65083,65084,12298,12299,65085,65086,12296,12297,65087,65088,12300,12301,65089,65090,12302,12303,65091,65092,65113,65114,65115,65116,65117,65118,8216,8217,8220,8221,12317,12318,8245,8242,65283,65286,65290,8251,167,12291,9675,9679,9651,9650,9678,9734,9733,9671,9670,9633,9632,9661,9660,12963,8453,175,65507,65343,717,65097,65098,65101,65102,65099,65100,65119,65120,65121,65291,65293,215,247,177,8730,65308,65310,65309,8806,8807,8800,8734,8786,8801,65122,65123,65124,65125,65126,65374,8745,8746,8869,8736,8735,8895,13266,13265,8747,8750,8757,8756,9792,9794,8853,8857,8593,8595,8592,8594,8598,8599,8601,8600,8741,8739,65295,65340,8725,65128,65284,65509,12306,65504,65505,65285,65312,8451,8457,65129,65130,65131,13269,13212,13213,13214,13262,13217,13198,13199,13252,176,20825,20827,20830,20829,20833,20835,21991,29929,31950,9601,9602,9603,9604,9605,9606,9607,9608,9615,9614,9613,9612,9611,9610,9609,9532,9524,9516,9508,9500,9620,9472,9474,9621,9484,9488,9492,9496,9581,9582,9584,9583,9552,9566,9578,9569,9698,9699,9701,9700,9585,9586,9587,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,12321,12322,12323,12324,12325,12326,12327,12328,12329,21313,21316,21317,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,729,713,714,711,715,9216,9217,9218,9219,9220,9221,9222,9223,9224,9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240,9241,9242,9243,9244,9245,9246,9247,9249,8364,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,19968,20057,19969,19971,20035,20061,20102,20108,20154,20799,20837,20843,20960,20992,20993,21147,21269,21313,21340,21448,19977,19979,19976,19978,20011,20024,20961,20037,20040,20063,20062,20110,20129,20800,20995,21242,21315,21449,21475,22303,22763,22805,22823,22899,23376,23377,23379,23544,23567,23586,23608,23665,24029,24037,24049,24050,24051,24062,24178,24318,24331,24339,25165,19985,19984,19981,20013,20016,20025,20043,23609,20104,20113,20117,20114,20116,20130,20161,20160,20163,20166,20167,20173,20170,20171,20164,20803,20801,20839,20845,20846,20844,20887,20982,20998,20999,21000,21243,21246,21247,21270,21305,21320,21319,21317,21342,21380,21451,21450,21453,22764,22825,22827,22826,22829,23380,23569,23588,23610,23663,24052,24187,24319,24340,24341,24515,25096,25142,25163,25166,25903,25991,26007,26020,26041,26085,26352,26376,26408,27424,27490,27513,27595,27604,27611,27663,27700,28779,29226,29238,29243,29255,29273,29275,29356,29579,19993,19990,19989,19988,19992,20027,20045,20047,20046,20197,20184,20180,20181,20182,20183,20195,20196,20185,20190,20805,20804,20873,20874,20908,20985,20986,20984,21002,21152,21151,21253,21254,21271,21277,20191,21322,21321,21345,21344,21359,21358,21435,21487,21476,21491,21484,21486,21481,21480,21500,21496,21493,21483,21478,21482,21490,21489,21488,21477,21485,21499,22235,22234,22806,22830,22833,22900,22902,23381,23427,23612,24040,24039,24038,24066,24067,24179,24188,24321,24344,24343,24517,25098,25171,25172,25170,25169,26021,26086,26414,26412,26410,26411,26413,27491,27597,27665,27664,27704,27713,27712,27710,29359,29572,29577,29916,29926,29976,29983,29992,29993,30000,30001,30002,30003,30091,30333,30382,30399,30446,30683,30690,30707,31034,31166,31348,31435,19998,19999,20050,20051,20073,20121,20132,20134,20133,20223,20233,20249,20234,20245,20237,20240,20241,20239,20210,20214,20219,20208,20211,20221,20225,20235,20809,20807,20806,20808,20840,20849,20877,20912,21015,21009,21010,21006,21014,21155,21256,21281,21280,21360,21361,21513,21519,21516,21514,21520,21505,21515,21508,21521,21517,21512,21507,21518,21510,21522,22240,22238,22237,22323,22320,22312,22317,22316,22319,22313,22809,22810,22839,22840,22916,22904,22915,22909,22905,22914,22913,23383,23384,23431,23432,23429,23433,23546,23574,23673,24030,24070,24182,24180,24335,24347,24537,24534,25102,25100,25101,25104,25187,25179,25176,25910,26089,26088,26092,26093,26354,26355,26377,26429,26420,26417,26421,27425,27492,27515,27670,27741,27735,27737,27743,27744,27728,27733,27745,27739,27725,27726,28784,29279,29277,30334,31481,31859,31992,32566,32650,32701,32769,32771,32780,32786,32819,32895,32905,32907,32908,33251,33258,33267,33276,33292,33307,33311,33390,33394,33406,34411,34880,34892,34915,35199,38433,20018,20136,20301,20303,20295,20311,20318,20276,20315,20309,20272,20304,20305,20285,20282,20280,20291,20308,20284,20294,20323,20316,20320,20271,20302,20278,20313,20317,20296,20314,20812,20811,20813,20853,20918,20919,21029,21028,21033,21034,21032,21163,21161,21162,21164,21283,21363,21365,21533,21549,21534,21566,21542,21582,21543,21574,21571,21555,21576,21570,21531,21545,21578,21561,21563,21560,21550,21557,21558,21536,21564,21568,21553,21547,21535,21548,22250,22256,22244,22251,22346,22353,22336,22349,22343,22350,22334,22352,22351,22331,22767,22846,22941,22930,22952,22942,22947,22937,22934,22925,22948,22931,22922,22949,23389,23388,23386,23387,23436,23435,23439,23596,23616,23617,23615,23614,23696,23697,23700,23692,24043,24076,24207,24199,24202,24311,24324,24351,24420,24418,24439,24441,24536,24524,24535,24525,24561,24555,24568,24554,25106,25105,25220,25239,25238,25216,25206,25225,25197,25226,25212,25214,25209,25203,25234,25199,25240,25198,25237,25235,25233,25222,25913,25915,25912,26097,26356,26463,26446,26447,26448,26449,26460,26454,26462,26441,26438,26464,26451,26455,27493,27599,27714,27742,27801,27777,27784,27785,27781,27803,27754,27770,27792,27760,27788,27752,27798,27794,27773,27779,27762,27774,27764,27782,27766,27789,27796,27800,27778,28790,28796,28797,28792,29282,29281,29280,29380,29378,29590,29996,29995,30007,30008,30338,30447,30691,31169,31168,31167,31350,31995,32597,32918,32915,32925,32920,32923,32922,32946,33391,33426,33419,33421,35211,35282,35328,35895,35910,35925,35997,36196,36208,36275,36523,36554,36763,36784,36802,36806,36805,36804,24033,37009,37026,37034,37030,37027,37193,37318,37324,38450,38446,38449,38442,38444,20006,20054,20083,20107,20123,20126,20139,20140,20335,20381,20365,20339,20351,20332,20379,20363,20358,20355,20336,20341,20360,20329,20347,20374,20350,20367,20369,20346,20820,20818,20821,20841,20855,20854,20856,20925,20989,21051,21048,21047,21050,21040,21038,21046,21057,21182,21179,21330,21332,21331,21329,21350,21367,21368,21369,21462,21460,21463,21619,21621,21654,21624,21653,21632,21627,21623,21636,21650,21638,21628,21648,21617,21622,21644,21658,21602,21608,21643,21629,21646,22266,22403,22391,22378,22377,22369,22374,22372,22396,22812,22857,22855,22856,22852,22868,22974,22971,22996,22969,22958,22993,22982,22992,22989,22987,22995,22986,22959,22963,22994,22981,23391,23396,23395,23447,23450,23448,23452,23449,23451,23578,23624,23621,23622,23735,23713,23736,23721,23723,23729,23731,24088,24090,24086,24085,24091,24081,24184,24218,24215,24220,24213,24214,24310,24358,24359,24361,24448,24449,24447,24444,24541,24544,24573,24565,24575,24591,24596,24623,24629,24598,24618,24597,24609,24615,24617,24619,24603,25110,25109,25151,25150,25152,25215,25289,25292,25284,25279,25282,25273,25298,25307,25259,25299,25300,25291,25288,25256,25277,25276,25296,25305,25287,25293,25269,25306,25265,25304,25302,25303,25286,25260,25294,25918,26023,26044,26106,26132,26131,26124,26118,26114,26126,26112,26127,26133,26122,26119,26381,26379,26477,26507,26517,26481,26524,26483,26487,26503,26525,26519,26479,26480,26495,26505,26494,26512,26485,26522,26515,26492,26474,26482,27427,27494,27495,27519,27667,27675,27875,27880,27891,27825,27852,27877,27827,27837,27838,27836,27874,27819,27861,27859,27832,27844,27833,27841,27822,27863,27845,27889,27839,27835,27873,27867,27850,27820,27887,27868,27862,27872,28821,28814,28818,28810,28825,29228,29229,29240,29256,29287,29289,29376,29390,29401,29399,29392,29609,29608,29599,29611,29605,30013,30109,30105,30106,30340,30402,30450,30452,30693,30717,31038,31040,31041,31177,31176,31354,31353,31482,31998,32596,32652,32651,32773,32954,32933,32930,32945,32929,32939,32937,32948,32938,32943,33253,33278,33293,33459,33437,33433,33453,33469,33439,33465,33457,33452,33445,33455,33464,33443,33456,33470,33463,34382,34417,21021,34920,36555,36814,36820,36817,37045,37048,37041,37046,37319,37329,38263,38272,38428,38464,38463,38459,38468,38466,38585,38632,38738,38750,20127,20141,20142,20449,20405,20399,20415,20448,20433,20431,20445,20419,20406,20440,20447,20426,20439,20398,20432,20420,20418,20442,20430,20446,20407,20823,20882,20881,20896,21070,21059,21066,21069,21068,21067,21063,21191,21193,21187,21185,21261,21335,21371,21402,21467,21676,21696,21672,21710,21705,21688,21670,21683,21703,21698,21693,21674,21697,21700,21704,21679,21675,21681,21691,21673,21671,21695,22271,22402,22411,22432,22435,22434,22478,22446,22419,22869,22865,22863,22862,22864,23004,23000,23039,23011,23016,23043,23013,23018,23002,23014,23041,23035,23401,23459,23462,23460,23458,23461,23553,23630,23631,23629,23627,23769,23762,24055,24093,24101,24095,24189,24224,24230,24314,24328,24365,24421,24456,24453,24458,24459,24455,24460,24457,24594,24605,24608,24613,24590,24616,24653,24688,24680,24674,24646,24643,24684,24683,24682,24676,25153,25308,25366,25353,25340,25325,25345,25326,25341,25351,25329,25335,25327,25324,25342,25332,25361,25346,25919,25925,26027,26045,26082,26149,26157,26144,26151,26159,26143,26152,26161,26148,26359,26623,26579,26609,26580,26576,26604,26550,26543,26613,26601,26607,26564,26577,26548,26586,26597,26552,26575,26590,26611,26544,26585,26594,26589,26578,27498,27523,27526,27573,27602,27607,27679,27849,27915,27954,27946,27969,27941,27916,27953,27934,27927,27963,27965,27966,27958,27931,27893,27961,27943,27960,27945,27950,27957,27918,27947,28843,28858,28851,28844,28847,28845,28856,28846,28836,29232,29298,29295,29300,29417,29408,29409,29623,29642,29627,29618,29645,29632,29619,29978,29997,30031,30028,30030,30027,30123,30116,30117,30114,30115,30328,30342,30343,30344,30408,30406,30403,30405,30465,30457,30456,30473,30475,30462,30460,30471,30684,30722,30740,30732,30733,31046,31049,31048,31047,31161,31162,31185,31186,31179,31359,31361,31487,31485,31869,32002,32005,32000,32009,32007,32004,32006,32568,32654,32703,32772,32784,32781,32785,32822,32982,32997,32986,32963,32964,32972,32993,32987,32974,32990,32996,32989,33268,33314,33511,33539,33541,33507,33499,33510,33540,33509,33538,33545,33490,33495,33521,33537,33500,33492,33489,33502,33491,33503,33519,33542,34384,34425,34427,34426,34893,34923,35201,35284,35336,35330,35331,35998,36000,36212,36211,36276,36557,36556,36848,36838,36834,36842,36837,36845,36843,36836,36840,37066,37070,37057,37059,37195,37194,37325,38274,38480,38475,38476,38477,38754,38761,38859,38893,38899,38913,39080,39131,39135,39318,39321,20056,20147,20492,20493,20515,20463,20518,20517,20472,20521,20502,20486,20540,20511,20506,20498,20497,20474,20480,20500,20520,20465,20513,20491,20505,20504,20467,20462,20525,20522,20478,20523,20489,20860,20900,20901,20898,20941,20940,20934,20939,21078,21084,21076,21083,21085,21290,21375,21407,21405,21471,21736,21776,21761,21815,21756,21733,21746,21766,21754,21780,21737,21741,21729,21769,21742,21738,21734,21799,21767,21757,21775,22275,22276,22466,22484,22475,22467,22537,22799,22871,22872,22874,23057,23064,23068,23071,23067,23059,23020,23072,23075,23081,23077,23052,23049,23403,23640,23472,23475,23478,23476,23470,23477,23481,23480,23556,23633,23637,23632,23789,23805,23803,23786,23784,23792,23798,23809,23796,24046,24109,24107,24235,24237,24231,24369,24466,24465,24464,24665,24675,24677,24656,24661,24685,24681,24687,24708,24735,24730,24717,24724,24716,24709,24726,25159,25331,25352,25343,25422,25406,25391,25429,25410,25414,25423,25417,25402,25424,25405,25386,25387,25384,25421,25420,25928,25929,26009,26049,26053,26178,26185,26191,26179,26194,26188,26181,26177,26360,26388,26389,26391,26657,26680,26696,26694,26707,26681,26690,26708,26665,26803,26647,26700,26705,26685,26612,26704,26688,26684,26691,26666,26693,26643,26648,26689,27530,27529,27575,27683,27687,27688,27686,27684,27888,28010,28053,28040,28039,28006,28024,28023,27993,28051,28012,28041,28014,27994,28020,28009,28044,28042,28025,28037,28005,28052,28874,28888,28900,28889,28872,28879,29241,29305,29436,29433,29437,29432,29431,29574,29677,29705,29678,29664,29674,29662,30036,30045,30044,30042,30041,30142,30149,30151,30130,30131,30141,30140,30137,30146,30136,30347,30384,30410,30413,30414,30505,30495,30496,30504,30697,30768,30759,30776,30749,30772,30775,30757,30765,30752,30751,30770,31061,31056,31072,31071,31062,31070,31069,31063,31066,31204,31203,31207,31199,31206,31209,31192,31364,31368,31449,31494,31505,31881,32033,32023,32011,32010,32032,32034,32020,32016,32021,32026,32028,32013,32025,32027,32570,32607,32660,32709,32705,32774,32792,32789,32793,32791,32829,32831,33009,33026,33008,33029,33005,33012,33030,33016,33011,33032,33021,33034,33020,33007,33261,33260,33280,33296,33322,33323,33320,33324,33467,33579,33618,33620,33610,33592,33616,33609,33589,33588,33615,33586,33593,33590,33559,33600,33585,33576,33603,34388,34442,34474,34451,34468,34473,34444,34467,34460,34928,34935,34945,34946,34941,34937,35352,35344,35342,35340,35349,35338,35351,35347,35350,35343,35345,35912,35962,35961,36001,36002,36215,36524,36562,36564,36559,36785,36865,36870,36855,36864,36858,36852,36867,36861,36869,36856,37013,37089,37085,37090,37202,37197,37196,37336,37341,37335,37340,37337,38275,38498,38499,38497,38491,38493,38500,38488,38494,38587,39138,39340,39592,39640,39717,39730,39740,20094,20602,20605,20572,20551,20547,20556,20570,20553,20581,20598,20558,20565,20597,20596,20599,20559,20495,20591,20589,20828,20885,20976,21098,21103,21202,21209,21208,21205,21264,21263,21273,21311,21312,21310,21443,26364,21830,21866,21862,21828,21854,21857,21827,21834,21809,21846,21839,21845,21807,21860,21816,21806,21852,21804,21859,21811,21825,21847,22280,22283,22281,22495,22533,22538,22534,22496,22500,22522,22530,22581,22519,22521,22816,22882,23094,23105,23113,23142,23146,23104,23100,23138,23130,23110,23114,23408,23495,23493,23492,23490,23487,23494,23561,23560,23559,23648,23644,23645,23815,23814,23822,23835,23830,23842,23825,23849,23828,23833,23844,23847,23831,24034,24120,24118,24115,24119,24247,24248,24246,24245,24254,24373,24375,24407,24428,24425,24427,24471,24473,24478,24472,24481,24480,24476,24703,24739,24713,24736,24744,24779,24756,24806,24765,24773,24763,24757,24796,24764,24792,24789,24774,24799,24760,24794,24775,25114,25115,25160,25504,25511,25458,25494,25506,25509,25463,25447,25496,25514,25457,25513,25481,25475,25499,25451,25512,25476,25480,25497,25505,25516,25490,25487,25472,25467,25449,25448,25466,25949,25942,25937,25945,25943,21855,25935,25944,25941,25940,26012,26011,26028,26063,26059,26060,26062,26205,26202,26212,26216,26214,26206,26361,21207,26395,26753,26799,26786,26771,26805,26751,26742,26801,26791,26775,26800,26755,26820,26797,26758,26757,26772,26781,26792,26783,26785,26754,27442,27578,27627,27628,27691,28046,28092,28147,28121,28082,28129,28108,28132,28155,28154,28165,28103,28107,28079,28113,28078,28126,28153,28088,28151,28149,28101,28114,28186,28085,28122,28139,28120,28138,28145,28142,28136,28102,28100,28074,28140,28095,28134,28921,28937,28938,28925,28911,29245,29309,29313,29468,29467,29462,29459,29465,29575,29701,29706,29699,29702,29694,29709,29920,29942,29943,29980,29986,30053,30054,30050,30064,30095,30164,30165,30133,30154,30157,30350,30420,30418,30427,30519,30526,30524,30518,30520,30522,30827,30787,30798,31077,31080,31085,31227,31378,31381,31520,31528,31515,31532,31526,31513,31518,31534,31890,31895,31893,32070,32067,32113,32046,32057,32060,32064,32048,32051,32068,32047,32066,32050,32049,32573,32670,32666,32716,32718,32722,32796,32842,32838,33071,33046,33059,33067,33065,33072,33060,33282,33333,33335,33334,33337,33678,33694,33688,33656,33698,33686,33725,33707,33682,33674,33683,33673,33696,33655,33659,33660,33670,33703,34389,24426,34503,34496,34486,34500,34485,34502,34507,34481,34479,34505,34899,34974,34952,34987,34962,34966,34957,34955,35219,35215,35370,35357,35363,35365,35377,35373,35359,35355,35362,35913,35930,36009,36012,36011,36008,36010,36007,36199,36198,36286,36282,36571,36575,36889,36877,36890,36887,36899,36895,36893,36880,36885,36894,36896,36879,36898,36886,36891,36884,37096,37101,37117,37207,37326,37365,37350,37347,37351,37357,37353,38281,38506,38517,38515,38520,38512,38516,38518,38519,38508,38592,38634,38633,31456,31455,38914,38915,39770,40165,40565,40575,40613,40635,20642,20621,20613,20633,20625,20608,20630,20632,20634,26368,20977,21106,21108,21109,21097,21214,21213,21211,21338,21413,21883,21888,21927,21884,21898,21917,21912,21890,21916,21930,21908,21895,21899,21891,21939,21934,21919,21822,21938,21914,21947,21932,21937,21886,21897,21931,21913,22285,22575,22570,22580,22564,22576,22577,22561,22557,22560,22777,22778,22880,23159,23194,23167,23186,23195,23207,23411,23409,23506,23500,23507,23504,23562,23563,23601,23884,23888,23860,23879,24061,24133,24125,24128,24131,24190,24266,24257,24258,24260,24380,24429,24489,24490,24488,24785,24801,24754,24758,24800,24860,24867,24826,24853,24816,24827,24820,24936,24817,24846,24822,24841,24832,24850,25119,25161,25507,25484,25551,25536,25577,25545,25542,25549,25554,25571,25552,25569,25558,25581,25582,25462,25588,25578,25563,25682,25562,25593,25950,25958,25954,25955,26001,26000,26031,26222,26224,26228,26230,26223,26257,26234,26238,26231,26366,26367,26399,26397,26874,26837,26848,26840,26839,26885,26847,26869,26862,26855,26873,26834,26866,26851,26827,26829,26893,26898,26894,26825,26842,26990,26875,27454,27450,27453,27544,27542,27580,27631,27694,27695,27692,28207,28216,28244,28193,28210,28263,28234,28192,28197,28195,28187,28251,28248,28196,28246,28270,28205,28198,28271,28212,28237,28218,28204,28227,28189,28222,28363,28297,28185,28238,28259,28228,28274,28265,28255,28953,28954,28966,28976,28961,28982,29038,28956,29260,29316,29312,29494,29477,29492,29481,29754,29738,29747,29730,29733,29749,29750,29748,29743,29723,29734,29736,29989,29990,30059,30058,30178,30171,30179,30169,30168,30174,30176,30331,30332,30358,30355,30388,30428,30543,30701,30813,30828,30831,31245,31240,31243,31237,31232,31384,31383,31382,31461,31459,31561,31574,31558,31568,31570,31572,31565,31563,31567,31569,31903,31909,32094,32080,32104,32085,32043,32110,32114,32097,32102,32098,32112,32115,21892,32724,32725,32779,32850,32901,33109,33108,33099,33105,33102,33081,33094,33086,33100,33107,33140,33298,33308,33769,33795,33784,33805,33760,33733,33803,33729,33775,33777,33780,33879,33802,33776,33804,33740,33789,33778,33738,33848,33806,33796,33756,33799,33748,33759,34395,34527,34521,34541,34516,34523,34532,34512,34526,34903,35009,35010,34993,35203,35222,35387,35424,35413,35422,35388,35393,35412,35419,35408,35398,35380,35386,35382,35414,35937,35970,36015,36028,36019,36029,36033,36027,36032,36020,36023,36022,36031,36024,36234,36229,36225,36302,36317,36299,36314,36305,36300,36315,36294,36603,36600,36604,36764,36910,36917,36913,36920,36914,36918,37122,37109,37129,37118,37219,37221,37327,37396,37397,37411,37385,37406,37389,37392,37383,37393,38292,38287,38283,38289,38291,38290,38286,38538,38542,38539,38525,38533,38534,38541,38514,38532,38593,38597,38596,38598,38599,38639,38642,38860,38917,38918,38920,39143,39146,39151,39145,39154,39149,39342,39341,40643,40653,40657,20098,20653,20661,20658,20659,20677,20670,20652,20663,20667,20655,20679,21119,21111,21117,21215,21222,21220,21218,21219,21295,21983,21992,21971,21990,21966,21980,21959,21969,21987,21988,21999,21978,21985,21957,21958,21989,21961,22290,22291,22622,22609,22616,22615,22618,22612,22635,22604,22637,22602,22626,22610,22603,22887,23233,23241,23244,23230,23229,23228,23219,23234,23218,23913,23919,24140,24185,24265,24264,24338,24409,24492,24494,24858,24847,24904,24863,24819,24859,24825,24833,24840,24910,24908,24900,24909,24894,24884,24871,24845,24838,24887,25121,25122,25619,25662,25630,25642,25645,25661,25644,25615,25628,25620,25613,25654,25622,25623,25606,25964,26015,26032,26263,26249,26247,26248,26262,26244,26264,26253,26371,27028,26989,26970,26999,26976,26964,26997,26928,27010,26954,26984,26987,26974,26963,27001,27014,26973,26979,26971,27463,27506,27584,27583,27603,27645,28322,28335,28371,28342,28354,28304,28317,28359,28357,28325,28312,28348,28346,28331,28369,28310,28316,28356,28372,28330,28327,28340,29006,29017,29033,29028,29001,29031,29020,29036,29030,29004,29029,29022,28998,29032,29014,29242,29266,29495,29509,29503,29502,29807,29786,29781,29791,29790,29761,29759,29785,29787,29788,30070,30072,30208,30192,30209,30194,30193,30202,30207,30196,30195,30430,30431,30555,30571,30566,30558,30563,30585,30570,30572,30556,30565,30568,30562,30702,30862,30896,30871,30872,30860,30857,30844,30865,30867,30847,31098,31103,31105,33836,31165,31260,31258,31264,31252,31263,31262,31391,31392,31607,31680,31584,31598,31591,31921,31923,31925,32147,32121,32145,32129,32143,32091,32622,32617,32618,32626,32681,32680,32676,32854,32856,32902,32900,33137,33136,33144,33125,33134,33139,33131,33145,33146,33126,33285,33351,33922,33911,33853,33841,33909,33894,33899,33865,33900,33883,33852,33845,33889,33891,33897,33901,33862,34398,34396,34399,34553,34579,34568,34567,34560,34558,34555,34562,34563,34566,34570,34905,35039,35028,35033,35036,35032,35037,35041,35018,35029,35026,35228,35299,35435,35442,35443,35430,35433,35440,35463,35452,35427,35488,35441,35461,35437,35426,35438,35436,35449,35451,35390,35432,35938,35978,35977,36042,36039,36040,36036,36018,36035,36034,36037,36321,36319,36328,36335,36339,36346,36330,36324,36326,36530,36611,36617,36606,36618,36767,36786,36939,36938,36947,36930,36948,36924,36949,36944,36935,36943,36942,36941,36945,36926,36929,37138,37143,37228,37226,37225,37321,37431,37463,37432,37437,37440,37438,37467,37451,37476,37457,37428,37449,37453,37445,37433,37439,37466,38296,38552,38548,38549,38605,38603,38601,38602,38647,38651,38649,38646,38742,38772,38774,38928,38929,38931,38922,38930,38924,39164,39156,39165,39166,39347,39345,39348,39649,40169,40578,40718,40723,40736,20711,20718,20709,20694,20717,20698,20693,20687,20689,20721,20686,20713,20834,20979,21123,21122,21297,21421,22014,22016,22043,22039,22013,22036,22022,22025,22029,22030,22007,22038,22047,22024,22032,22006,22296,22294,22645,22654,22659,22675,22666,22649,22661,22653,22781,22821,22818,22820,22890,22889,23265,23270,23273,23255,23254,23256,23267,23413,23518,23527,23521,23525,23526,23528,23522,23524,23519,23565,23650,23940,23943,24155,24163,24149,24151,24148,24275,24278,24330,24390,24432,24505,24903,24895,24907,24951,24930,24931,24927,24922,24920,24949,25130,25735,25688,25684,25764,25720,25695,25722,25681,25703,25652,25709,25723,25970,26017,26071,26070,26274,26280,26269,27036,27048,27029,27073,27054,27091,27083,27035,27063,27067,27051,27060,27088,27085,27053,27084,27046,27075,27043,27465,27468,27699,28467,28436,28414,28435,28404,28457,28478,28448,28460,28431,28418,28450,28415,28399,28422,28465,28472,28466,28451,28437,28459,28463,28552,28458,28396,28417,28402,28364,28407,29076,29081,29053,29066,29060,29074,29246,29330,29334,29508,29520,29796,29795,29802,29808,29805,29956,30097,30247,30221,30219,30217,30227,30433,30435,30596,30589,30591,30561,30913,30879,30887,30899,30889,30883,31118,31119,31117,31278,31281,31402,31401,31469,31471,31649,31637,31627,31605,31639,31645,31636,31631,31672,31623,31620,31929,31933,31934,32187,32176,32156,32189,32190,32160,32202,32180,32178,32177,32186,32162,32191,32181,32184,32173,32210,32199,32172,32624,32736,32737,32735,32862,32858,32903,33104,33152,33167,33160,33162,33151,33154,33255,33274,33287,33300,33310,33355,33993,33983,33990,33988,33945,33950,33970,33948,33995,33976,33984,34003,33936,33980,34001,33994,34623,34588,34619,34594,34597,34612,34584,34645,34615,34601,35059,35074,35060,35065,35064,35069,35048,35098,35055,35494,35468,35486,35491,35469,35489,35475,35492,35498,35493,35496,35480,35473,35482,35495,35946,35981,35980,36051,36049,36050,36203,36249,36245,36348,36628,36626,36629,36627,36771,36960,36952,36956,36963,36953,36958,36962,36957,36955,37145,37144,37150,37237,37240,37239,37236,37496,37504,37509,37528,37526,37499,37523,37532,37544,37500,37521,38305,38312,38313,38307,38309,38308,38553,38556,38555,38604,38610,38656,38780,38789,38902,38935,38936,39087,39089,39171,39173,39180,39177,39361,39599,39600,39654,39745,39746,40180,40182,40179,40636,40763,40778,20740,20736,20731,20725,20729,20738,20744,20745,20741,20956,21127,21128,21129,21133,21130,21232,21426,22062,22075,22073,22066,22079,22068,22057,22099,22094,22103,22132,22070,22063,22064,22656,22687,22686,22707,22684,22702,22697,22694,22893,23305,23291,23307,23285,23308,23304,23534,23532,23529,23531,23652,23653,23965,23956,24162,24159,24161,24290,24282,24287,24285,24291,24288,24392,24433,24503,24501,24950,24935,24942,24925,24917,24962,24956,24944,24939,24958,24999,24976,25003,24974,25004,24986,24996,24980,25006,25134,25705,25711,25721,25758,25778,25736,25744,25776,25765,25747,25749,25769,25746,25774,25773,25771,25754,25772,25753,25762,25779,25973,25975,25976,26286,26283,26292,26289,27171,27167,27112,27137,27166,27161,27133,27169,27155,27146,27123,27138,27141,27117,27153,27472,27470,27556,27589,27590,28479,28540,28548,28497,28518,28500,28550,28525,28507,28536,28526,28558,28538,28528,28516,28567,28504,28373,28527,28512,28511,29087,29100,29105,29096,29270,29339,29518,29527,29801,29835,29827,29822,29824,30079,30240,30249,30239,30244,30246,30241,30242,30362,30394,30436,30606,30599,30604,30609,30603,30923,30917,30906,30922,30910,30933,30908,30928,31295,31292,31296,31293,31287,31291,31407,31406,31661,31665,31684,31668,31686,31687,31681,31648,31692,31946,32224,32244,32239,32251,32216,32236,32221,32232,32227,32218,32222,32233,32158,32217,32242,32249,32629,32631,32687,32745,32806,33179,33180,33181,33184,33178,33176,34071,34109,34074,34030,34092,34093,34067,34065,34083,34081,34068,34028,34085,34047,34054,34690,34676,34678,34656,34662,34680,34664,34649,34647,34636,34643,34907,34909,35088,35079,35090,35091,35093,35082,35516,35538,35527,35524,35477,35531,35576,35506,35529,35522,35519,35504,35542,35533,35510,35513,35547,35916,35918,35948,36064,36062,36070,36068,36076,36077,36066,36067,36060,36074,36065,36205,36255,36259,36395,36368,36381,36386,36367,36393,36383,36385,36382,36538,36637,36635,36639,36649,36646,36650,36636,36638,36645,36969,36974,36968,36973,36983,37168,37165,37159,37169,37255,37257,37259,37251,37573,37563,37559,37610,37548,37604,37569,37555,37564,37586,37575,37616,37554,38317,38321,38660,38662,38663,38665,38752,38797,38795,38799,38945,38955,38940,39091,39178,39187,39186,39192,39389,39376,39391,39387,39377,39381,39378,39385,39607,39662,39663,39719,39749,39748,39799,39791,40198,40201,40195,40617,40638,40654,22696,40786,20754,20760,20756,20752,20757,20864,20906,20957,21137,21139,21235,22105,22123,22137,22121,22116,22136,22122,22120,22117,22129,22127,22124,22114,22134,22721,22718,22727,22725,22894,23325,23348,23416,23536,23566,24394,25010,24977,25001,24970,25037,25014,25022,25034,25032,25136,25797,25793,25803,25787,25788,25818,25796,25799,25794,25805,25791,25810,25812,25790,25972,26310,26313,26297,26308,26311,26296,27197,27192,27194,27225,27243,27224,27193,27204,27234,27233,27211,27207,27189,27231,27208,27481,27511,27653,28610,28593,28577,28611,28580,28609,28583,28595,28608,28601,28598,28582,28576,28596,29118,29129,29136,29138,29128,29141,29113,29134,29145,29148,29123,29124,29544,29852,29859,29848,29855,29854,29922,29964,29965,30260,30264,30266,30439,30437,30624,30622,30623,30629,30952,30938,30956,30951,31142,31309,31310,31302,31308,31307,31418,31705,31761,31689,31716,31707,31713,31721,31718,31957,31958,32266,32273,32264,32283,32291,32286,32285,32265,32272,32633,32690,32752,32753,32750,32808,33203,33193,33192,33275,33288,33368,33369,34122,34137,34120,34152,34153,34115,34121,34157,34154,34142,34691,34719,34718,34722,34701,34913,35114,35122,35109,35115,35105,35242,35238,35558,35578,35563,35569,35584,35548,35559,35566,35582,35585,35586,35575,35565,35571,35574,35580,35947,35949,35987,36084,36420,36401,36404,36418,36409,36405,36667,36655,36664,36659,36776,36774,36981,36980,36984,36978,36988,36986,37172,37266,37664,37686,37624,37683,37679,37666,37628,37675,37636,37658,37648,37670,37665,37653,37678,37657,38331,38567,38568,38570,38613,38670,38673,38678,38669,38675,38671,38747,38748,38758,38808,38960,38968,38971,38967,38957,38969,38948,39184,39208,39198,39195,39201,39194,39405,39394,39409,39608,39612,39675,39661,39720,39825,40213,40227,40230,40232,40210,40219,40664,40660,40845,40860,20778,20767,20769,20786,21237,22158,22144,22160,22149,22151,22159,22741,22739,22737,22734,23344,23338,23332,23418,23607,23656,23996,23994,23997,23992,24171,24396,24509,25033,25026,25031,25062,25035,25138,25140,25806,25802,25816,25824,25840,25830,25836,25841,25826,25837,25986,25987,26329,26326,27264,27284,27268,27298,27292,27355,27299,27262,27287,27280,27296,27484,27566,27610,27656,28632,28657,28639,28640,28635,28644,28651,28655,28544,28652,28641,28649,28629,28654,28656,29159,29151,29166,29158,29157,29165,29164,29172,29152,29237,29254,29552,29554,29865,29872,29862,29864,30278,30274,30284,30442,30643,30634,30640,30636,30631,30637,30703,30967,30970,30964,30959,30977,31143,31146,31319,31423,31751,31757,31742,31735,31756,31712,31968,31964,31966,31970,31967,31961,31965,32302,32318,32326,32311,32306,32323,32299,32317,32305,32325,32321,32308,32313,32328,32309,32319,32303,32580,32755,32764,32881,32882,32880,32879,32883,33222,33219,33210,33218,33216,33215,33213,33225,33214,33256,33289,33393,34218,34180,34174,34204,34193,34196,34223,34203,34183,34216,34186,34407,34752,34769,34739,34770,34758,34731,34747,34746,34760,34763,35131,35126,35140,35128,35133,35244,35598,35607,35609,35611,35594,35616,35613,35588,35600,35905,35903,35955,36090,36093,36092,36088,36091,36264,36425,36427,36424,36426,36676,36670,36674,36677,36671,36991,36989,36996,36993,36994,36992,37177,37283,37278,37276,37709,37762,37672,37749,37706,37733,37707,37656,37758,37740,37723,37744,37722,37716,38346,38347,38348,38344,38342,38577,38584,38614,38684,38686,38816,38867,38982,39094,39221,39425,39423,39854,39851,39850,39853,40251,40255,40587,40655,40670,40668,40669,40667,40766,40779,21474,22165,22190,22745,22744,23352,24413,25059,25139,25844,25842,25854,25862,25850,25851,25847,26039,26332,26406,27315,27308,27331,27323,27320,27330,27310,27311,27487,27512,27567,28681,28683,28670,28678,28666,28689,28687,29179,29180,29182,29176,29559,29557,29863,29887,29973,30294,30296,30290,30653,30655,30651,30652,30990,31150,31329,31330,31328,31428,31429,31787,31783,31786,31774,31779,31777,31975,32340,32341,32350,32346,32353,32338,32345,32584,32761,32763,32887,32886,33229,33231,33290,34255,34217,34253,34256,34249,34224,34234,34233,34214,34799,34796,34802,34784,35206,35250,35316,35624,35641,35628,35627,35920,36101,36441,36451,36454,36452,36447,36437,36544,36681,36685,36999,36995,37000,37291,37292,37328,37780,37770,37782,37794,37811,37806,37804,37808,37784,37786,37783,38356,38358,38352,38357,38626,38620,38617,38619,38622,38692,38819,38822,38829,38905,38989,38991,38988,38990,38995,39098,39230,39231,39229,39214,39333,39438,39617,39683,39686,39759,39758,39757,39882,39881,39933,39880,39872,40273,40285,40288,40672,40725,40748,20787,22181,22750,22751,22754,23541,40848,24300,25074,25079,25078,25077,25856,25871,26336,26333,27365,27357,27354,27347,28699,28703,28712,28698,28701,28693,28696,29190,29197,29272,29346,29560,29562,29885,29898,29923,30087,30086,30303,30305,30663,31001,31153,31339,31337,31806,31807,31800,31805,31799,31808,32363,32365,32377,32361,32362,32645,32371,32694,32697,32696,33240,34281,34269,34282,34261,34276,34277,34295,34811,34821,34829,34809,34814,35168,35167,35158,35166,35649,35676,35672,35657,35674,35662,35663,35654,35673,36104,36106,36476,36466,36487,36470,36460,36474,36468,36692,36686,36781,37002,37003,37297,37294,37857,37841,37855,37827,37832,37852,37853,37846,37858,37837,37848,37860,37847,37864,38364,38580,38627,38698,38695,38753,38876,38907,39006,39000,39003,39100,39237,39241,39446,39449,39693,39912,39911,39894,39899,40329,40289,40306,40298,40300,40594,40599,40595,40628,21240,22184,22199,22198,22196,22204,22756,23360,23363,23421,23542,24009,25080,25082,25880,25876,25881,26342,26407,27372,28734,28720,28722,29200,29563,29903,30306,30309,31014,31018,31020,31019,31431,31478,31820,31811,31821,31983,31984,36782,32381,32380,32386,32588,32768,33242,33382,34299,34297,34321,34298,34310,34315,34311,34314,34836,34837,35172,35258,35320,35696,35692,35686,35695,35679,35691,36111,36109,36489,36481,36485,36482,37300,37323,37912,37891,37885,38369,38704,39108,39250,39249,39336,39467,39472,39479,39477,39955,39949,40569,40629,40680,40751,40799,40803,40801,20791,20792,22209,22208,22210,22804,23660,24013,25084,25086,25885,25884,26005,26345,27387,27396,27386,27570,28748,29211,29351,29910,29908,30313,30675,31824,32399,32396,32700,34327,34349,34330,34851,34850,34849,34847,35178,35180,35261,35700,35703,35709,36115,36490,36493,36491,36703,36783,37306,37934,37939,37941,37946,37944,37938,37931,38370,38712,38713,38706,38911,39015,39013,39255,39493,39491,39488,39486,39631,39764,39761,39981,39973,40367,40372,40386,40376,40605,40687,40729,40796,40806,40807,20796,20795,22216,22218,22217,23423,24020,24018,24398,25087,25892,27402,27489,28753,28760,29568,29924,30090,30318,30316,31155,31840,31839,32894,32893,33247,35186,35183,35324,35712,36118,36119,36497,36499,36705,37192,37956,37969,37970,38717,38718,38851,38849,39019,39253,39509,39501,39634,39706,40009,39985,39998,39995,40403,40407,40756,40812,40810,40852,22220,24022,25088,25891,25899,25898,26348,27408,29914,31434,31844,31843,31845,32403,32406,32404,33250,34360,34367,34865,35722,37008,37007,37987,37984,37988,38760,39023,39260,39514,39515,39511,39635,39636,39633,40020,40023,40022,40421,40607,40692,22225,22761,25900,28766,30321,30322,30679,32592,32648,34870,34873,34914,35731,35730,35734,33399,36123,37312,37994,38722,38728,38724,38854,39024,39519,39714,39768,40031,40441,40442,40572,40573,40711,40823,40818,24307,27414,28771,31852,31854,34875,35264,36513,37313,38002,38000,39025,39262,39638,39715,40652,28772,30682,35738,38007,38857,39522,39525,32412,35740,36522,37317,38013,38014,38012,40055,40056,40695,35924,38015,40474,29224,39530,39729,40475,40478,31858,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,20022,20031,20101,20128,20866,20886,20907,21241,21304,21353,21430,22794,23424,24027,12083,24191,24308,24400,24417,25908,26080,30098,30326,36789,38582,168,710,12541,12542,12445,12446,12291,20189,12293,12294,12295,12540,65339,65341,10045,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8679,8632,8633,12751,131276,20058,131210,20994,17553,40880,20872,40881,161287,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,65506,65508,65287,65282,12849,8470,8481,12443,12444,11904,11908,11910,11911,11912,11914,11916,11917,11925,11932,11933,11941,11943,11946,11948,11950,11958,11964,11966,11974,11978,11980,11981,11983,11990,11991,11998,12003,null,null,null,643,592,603,596,629,339,248,331,650,618,20034,20060,20981,21274,21378,19975,19980,20039,20109,22231,64012,23662,24435,19983,20871,19982,20014,20115,20162,20169,20168,20888,21244,21356,21433,22304,22787,22828,23568,24063,26081,27571,27596,27668,29247,20017,20028,20200,20188,20201,20193,20189,20186,21004,21276,21324,22306,22307,22807,22831,23425,23428,23570,23611,23668,23667,24068,24192,24194,24521,25097,25168,27669,27702,27715,27711,27707,29358,29360,29578,31160,32906,38430,20238,20248,20268,20213,20244,20209,20224,20215,20232,20253,20226,20229,20258,20243,20228,20212,20242,20913,21011,21001,21008,21158,21282,21279,21325,21386,21511,22241,22239,22318,22314,22324,22844,22912,22908,22917,22907,22910,22903,22911,23382,23573,23589,23676,23674,23675,23678,24031,24181,24196,24322,24346,24436,24533,24532,24527,25180,25182,25188,25185,25190,25186,25177,25184,25178,25189,26095,26094,26430,26425,26424,26427,26426,26431,26428,26419,27672,27718,27730,27740,27727,27722,27732,27723,27724,28785,29278,29364,29365,29582,29994,30335,31349,32593,33400,33404,33408,33405,33407,34381,35198,37017,37015,37016,37019,37012,38434,38436,38432,38435,20310,20283,20322,20297,20307,20324,20286,20327,20306,20319,20289,20312,20269,20275,20287,20321,20879,20921,21020,21022,21025,21165,21166,21257,21347,21362,21390,21391,21552,21559,21546,21588,21573,21529,21532,21541,21528,21565,21583,21569,21544,21540,21575,22254,22247,22245,22337,22341,22348,22345,22347,22354,22790,22848,22950,22936,22944,22935,22926,22946,22928,22927,22951,22945,23438,23442,23592,23594,23693,23695,23688,23691,23689,23698,23690,23686,23699,23701,24032,24074,24078,24203,24201,24204,24200,24205,24325,24349,24440,24438,24530,24529,24528,24557,24552,24558,24563,24545,24548,24547,24570,24559,24567,24571,24576,24564,25146,25219,25228,25230,25231,25236,25223,25201,25211,25210,25200,25217,25224,25207,25213,25202,25204,25911,26096,26100,26099,26098,26101,26437,26439,26457,26453,26444,26440,26461,26445,26458,26443,27600,27673,27674,27768,27751,27755,27780,27787,27791,27761,27759,27753,27802,27757,27783,27797,27804,27750,27763,27749,27771,27790,28788,28794,29283,29375,29373,29379,29382,29377,29370,29381,29589,29591,29587,29588,29586,30010,30009,30100,30101,30337,31037,32820,32917,32921,32912,32914,32924,33424,33423,33413,33422,33425,33427,33418,33411,33412,35960,36809,36799,37023,37025,37029,37022,37031,37024,38448,38440,38447,38445,20019,20376,20348,20357,20349,20352,20359,20342,20340,20361,20356,20343,20300,20375,20330,20378,20345,20353,20344,20368,20380,20372,20382,20370,20354,20373,20331,20334,20894,20924,20926,21045,21042,21043,21062,21041,21180,21258,21259,21308,21394,21396,21639,21631,21633,21649,21634,21640,21611,21626,21630,21605,21612,21620,21606,21645,21615,21601,21600,21656,21603,21607,21604,22263,22265,22383,22386,22381,22379,22385,22384,22390,22400,22389,22395,22387,22388,22370,22376,22397,22796,22853,22965,22970,22991,22990,22962,22988,22977,22966,22972,22979,22998,22961,22973,22976,22984,22964,22983,23394,23397,23443,23445,23620,23623,23726,23716,23712,23733,23727,23720,23724,23711,23715,23725,23714,23722,23719,23709,23717,23734,23728,23718,24087,24084,24089,24360,24354,24355,24356,24404,24450,24446,24445,24542,24549,24621,24614,24601,24626,24587,24628,24586,24599,24627,24602,24606,24620,24610,24589,24592,24622,24595,24593,24588,24585,24604,25108,25149,25261,25268,25297,25278,25258,25270,25290,25262,25267,25263,25275,25257,25264,25272,25917,26024,26043,26121,26108,26116,26130,26120,26107,26115,26123,26125,26117,26109,26129,26128,26358,26378,26501,26476,26510,26514,26486,26491,26520,26502,26500,26484,26509,26508,26490,26527,26513,26521,26499,26493,26497,26488,26489,26516,27429,27520,27518,27614,27677,27795,27884,27883,27886,27865,27830,27860,27821,27879,27831,27856,27842,27834,27843,27846,27885,27890,27858,27869,27828,27786,27805,27776,27870,27840,27952,27853,27847,27824,27897,27855,27881,27857,28820,28824,28805,28819,28806,28804,28817,28822,28802,28826,28803,29290,29398,29387,29400,29385,29404,29394,29396,29402,29388,29393,29604,29601,29613,29606,29602,29600,29612,29597,29917,29928,30015,30016,30014,30092,30104,30383,30451,30449,30448,30453,30712,30716,30713,30715,30714,30711,31042,31039,31173,31352,31355,31483,31861,31997,32821,32911,32942,32931,32952,32949,32941,33312,33440,33472,33451,33434,33432,33435,33461,33447,33454,33468,33438,33466,33460,33448,33441,33449,33474,33444,33475,33462,33442,34416,34415,34413,34414,35926,36818,36811,36819,36813,36822,36821,36823,37042,37044,37039,37043,37040,38457,38461,38460,38458,38467,20429,20421,20435,20402,20425,20427,20417,20436,20444,20441,20411,20403,20443,20423,20438,20410,20416,20409,20460,21060,21065,21184,21186,21309,21372,21399,21398,21401,21400,21690,21665,21677,21669,21711,21699,33549,21687,21678,21718,21686,21701,21702,21664,21616,21692,21666,21694,21618,21726,21680,22453,22430,22431,22436,22412,22423,22429,22427,22420,22424,22415,22425,22437,22426,22421,22772,22797,22867,23009,23006,23022,23040,23025,23005,23034,23037,23036,23030,23012,23026,23031,23003,23017,23027,23029,23008,23038,23028,23021,23464,23628,23760,23768,23756,23767,23755,23771,23774,23770,23753,23751,23754,23766,23763,23764,23759,23752,23750,23758,23775,23800,24057,24097,24098,24099,24096,24100,24240,24228,24226,24219,24227,24229,24327,24366,24406,24454,24631,24633,24660,24690,24670,24645,24659,24647,24649,24667,24652,24640,24642,24671,24612,24644,24664,24678,24686,25154,25155,25295,25357,25355,25333,25358,25347,25323,25337,25359,25356,25336,25334,25344,25363,25364,25338,25365,25339,25328,25921,25923,26026,26047,26166,26145,26162,26165,26140,26150,26146,26163,26155,26170,26141,26164,26169,26158,26383,26384,26561,26610,26568,26554,26588,26555,26616,26584,26560,26551,26565,26603,26596,26591,26549,26573,26547,26615,26614,26606,26595,26562,26553,26574,26599,26608,26546,26620,26566,26605,26572,26542,26598,26587,26618,26569,26570,26563,26602,26571,27432,27522,27524,27574,27606,27608,27616,27680,27681,27944,27956,27949,27935,27964,27967,27922,27914,27866,27955,27908,27929,27962,27930,27921,27904,27933,27970,27905,27928,27959,27907,27919,27968,27911,27936,27948,27912,27938,27913,27920,28855,28831,28862,28849,28848,28833,28852,28853,28841,29249,29257,29258,29292,29296,29299,29294,29386,29412,29416,29419,29407,29418,29414,29411,29573,29644,29634,29640,29637,29625,29622,29621,29620,29675,29631,29639,29630,29635,29638,29624,29643,29932,29934,29998,30023,30024,30119,30122,30329,30404,30472,30467,30468,30469,30474,30455,30459,30458,30695,30696,30726,30737,30738,30725,30736,30735,30734,30729,30723,30739,31050,31052,31051,31045,31044,31189,31181,31183,31190,31182,31360,31358,31441,31488,31489,31866,31864,31865,31871,31872,31873,32003,32008,32001,32600,32657,32653,32702,32775,32782,32783,32788,32823,32984,32967,32992,32977,32968,32962,32976,32965,32995,32985,32988,32970,32981,32969,32975,32983,32998,32973,33279,33313,33428,33497,33534,33529,33543,33512,33536,33493,33594,33515,33494,33524,33516,33505,33522,33525,33548,33531,33526,33520,33514,33508,33504,33530,33523,33517,34423,34420,34428,34419,34881,34894,34919,34922,34921,35283,35332,35335,36210,36835,36833,36846,36832,37105,37053,37055,37077,37061,37054,37063,37067,37064,37332,37331,38484,38479,38481,38483,38474,38478,20510,20485,20487,20499,20514,20528,20507,20469,20468,20531,20535,20524,20470,20471,20503,20508,20512,20519,20533,20527,20529,20494,20826,20884,20883,20938,20932,20933,20936,20942,21089,21082,21074,21086,21087,21077,21090,21197,21262,21406,21798,21730,21783,21778,21735,21747,21732,21786,21759,21764,21768,21739,21777,21765,21745,21770,21755,21751,21752,21728,21774,21763,21771,22273,22274,22476,22578,22485,22482,22458,22470,22461,22460,22456,22454,22463,22471,22480,22457,22465,22798,22858,23065,23062,23085,23086,23061,23055,23063,23050,23070,23091,23404,23463,23469,23468,23555,23638,23636,23788,23807,23790,23793,23799,23808,23801,24105,24104,24232,24238,24234,24236,24371,24368,24423,24669,24666,24679,24641,24738,24712,24704,24722,24705,24733,24707,24725,24731,24727,24711,24732,24718,25113,25158,25330,25360,25430,25388,25412,25413,25398,25411,25572,25401,25419,25418,25404,25385,25409,25396,25432,25428,25433,25389,25415,25395,25434,25425,25400,25431,25408,25416,25930,25926,26054,26051,26052,26050,26186,26207,26183,26193,26386,26387,26655,26650,26697,26674,26675,26683,26699,26703,26646,26673,26652,26677,26667,26669,26671,26702,26692,26676,26653,26642,26644,26662,26664,26670,26701,26682,26661,26656,27436,27439,27437,27441,27444,27501,32898,27528,27622,27620,27624,27619,27618,27623,27685,28026,28003,28004,28022,27917,28001,28050,27992,28002,28013,28015,28049,28045,28143,28031,28038,27998,28007,28000,28055,28016,28028,27999,28034,28056,27951,28008,28043,28030,28032,28036,27926,28035,28027,28029,28021,28048,28892,28883,28881,28893,28875,32569,28898,28887,28882,28894,28896,28884,28877,28869,28870,28871,28890,28878,28897,29250,29304,29303,29302,29440,29434,29428,29438,29430,29427,29435,29441,29651,29657,29669,29654,29628,29671,29667,29673,29660,29650,29659,29652,29661,29658,29655,29656,29672,29918,29919,29940,29941,29985,30043,30047,30128,30145,30139,30148,30144,30143,30134,30138,30346,30409,30493,30491,30480,30483,30482,30499,30481,30485,30489,30490,30498,30503,30755,30764,30754,30773,30767,30760,30766,30763,30753,30761,30771,30762,30769,31060,31067,31055,31068,31059,31058,31057,31211,31212,31200,31214,31213,31210,31196,31198,31197,31366,31369,31365,31371,31372,31370,31367,31448,31504,31492,31507,31493,31503,31496,31498,31502,31497,31506,31876,31889,31882,31884,31880,31885,31877,32030,32029,32017,32014,32024,32022,32019,32031,32018,32015,32012,32604,32609,32606,32608,32605,32603,32662,32658,32707,32706,32704,32790,32830,32825,33018,33010,33017,33013,33025,33019,33024,33281,33327,33317,33587,33581,33604,33561,33617,33573,33622,33599,33601,33574,33564,33570,33602,33614,33563,33578,33544,33596,33613,33558,33572,33568,33591,33583,33577,33607,33605,33612,33619,33566,33580,33611,33575,33608,34387,34386,34466,34472,34454,34445,34449,34462,34439,34455,34438,34443,34458,34437,34469,34457,34465,34471,34453,34456,34446,34461,34448,34452,34883,34884,34925,34933,34934,34930,34944,34929,34943,34927,34947,34942,34932,34940,35346,35911,35927,35963,36004,36003,36214,36216,36277,36279,36278,36561,36563,36862,36853,36866,36863,36859,36868,36860,36854,37078,37088,37081,37082,37091,37087,37093,37080,37083,37079,37084,37092,37200,37198,37199,37333,37346,37338,38492,38495,38588,39139,39647,39727,20095,20592,20586,20577,20574,20576,20563,20555,20573,20594,20552,20557,20545,20571,20554,20578,20501,20549,20575,20585,20587,20579,20580,20550,20544,20590,20595,20567,20561,20944,21099,21101,21100,21102,21206,21203,21293,21404,21877,21878,21820,21837,21840,21812,21802,21841,21858,21814,21813,21808,21842,21829,21772,21810,21861,21838,21817,21832,21805,21819,21824,21835,22282,22279,22523,22548,22498,22518,22492,22516,22528,22509,22525,22536,22520,22539,22515,22479,22535,22510,22499,22514,22501,22508,22497,22542,22524,22544,22503,22529,22540,22513,22505,22512,22541,22532,22876,23136,23128,23125,23143,23134,23096,23093,23149,23120,23135,23141,23148,23123,23140,23127,23107,23133,23122,23108,23131,23112,23182,23102,23117,23097,23116,23152,23145,23111,23121,23126,23106,23132,23410,23406,23489,23488,23641,23838,23819,23837,23834,23840,23820,23848,23821,23846,23845,23823,23856,23826,23843,23839,23854,24126,24116,24241,24244,24249,24242,24243,24374,24376,24475,24470,24479,24714,24720,24710,24766,24752,24762,24787,24788,24783,24804,24793,24797,24776,24753,24795,24759,24778,24767,24771,24781,24768,25394,25445,25482,25474,25469,25533,25502,25517,25501,25495,25515,25486,25455,25479,25488,25454,25519,25461,25500,25453,25518,25468,25508,25403,25503,25464,25477,25473,25489,25485,25456,25939,26061,26213,26209,26203,26201,26204,26210,26392,26745,26759,26768,26780,26733,26734,26798,26795,26966,26735,26787,26796,26793,26741,26740,26802,26767,26743,26770,26748,26731,26738,26794,26752,26737,26750,26779,26774,26763,26784,26761,26788,26744,26747,26769,26764,26762,26749,27446,27443,27447,27448,27537,27535,27533,27534,27532,27690,28096,28075,28084,28083,28276,28076,28137,28130,28087,28150,28116,28160,28104,28128,28127,28118,28094,28133,28124,28125,28123,28148,28106,28093,28141,28144,28090,28117,28098,28111,28105,28112,28146,28115,28157,28119,28109,28131,28091,28922,28941,28919,28951,28916,28940,28912,28932,28915,28944,28924,28927,28934,28947,28928,28920,28918,28939,28930,28942,29310,29307,29308,29311,29469,29463,29447,29457,29464,29450,29448,29439,29455,29470,29576,29686,29688,29685,29700,29697,29693,29703,29696,29690,29692,29695,29708,29707,29684,29704,30052,30051,30158,30162,30159,30155,30156,30161,30160,30351,30345,30419,30521,30511,30509,30513,30514,30516,30515,30525,30501,30523,30517,30792,30802,30793,30797,30794,30796,30758,30789,30800,31076,31079,31081,31082,31075,31083,31073,31163,31226,31224,31222,31223,31375,31380,31376,31541,31559,31540,31525,31536,31522,31524,31539,31512,31530,31517,31537,31531,31533,31535,31538,31544,31514,31523,31892,31896,31894,31907,32053,32061,32056,32054,32058,32069,32044,32041,32065,32071,32062,32063,32074,32059,32040,32611,32661,32668,32669,32667,32714,32715,32717,32720,32721,32711,32719,32713,32799,32798,32795,32839,32835,32840,33048,33061,33049,33051,33069,33055,33068,33054,33057,33045,33063,33053,33058,33297,33336,33331,33338,33332,33330,33396,33680,33699,33704,33677,33658,33651,33700,33652,33679,33665,33685,33689,33653,33684,33705,33661,33667,33676,33693,33691,33706,33675,33662,33701,33711,33672,33687,33712,33663,33702,33671,33710,33654,33690,34393,34390,34495,34487,34498,34497,34501,34490,34480,34504,34489,34483,34488,34508,34484,34491,34492,34499,34493,34494,34898,34953,34965,34984,34978,34986,34970,34961,34977,34975,34968,34983,34969,34971,34967,34980,34988,34956,34963,34958,35202,35286,35289,35285,35376,35367,35372,35358,35897,35899,35932,35933,35965,36005,36221,36219,36217,36284,36290,36281,36287,36289,36568,36574,36573,36572,36567,36576,36577,36900,36875,36881,36892,36876,36897,37103,37098,37104,37108,37106,37107,37076,37099,37100,37097,37206,37208,37210,37203,37205,37356,37364,37361,37363,37368,37348,37369,37354,37355,37367,37352,37358,38266,38278,38280,38524,38509,38507,38513,38511,38591,38762,38916,39141,39319,20635,20629,20628,20638,20619,20643,20611,20620,20622,20637,20584,20636,20626,20610,20615,20831,20948,21266,21265,21412,21415,21905,21928,21925,21933,21879,22085,21922,21907,21896,21903,21941,21889,21923,21906,21924,21885,21900,21926,21887,21909,21921,21902,22284,22569,22583,22553,22558,22567,22563,22568,22517,22600,22565,22556,22555,22579,22591,22582,22574,22585,22584,22573,22572,22587,22881,23215,23188,23199,23162,23202,23198,23160,23206,23164,23205,23212,23189,23214,23095,23172,23178,23191,23171,23179,23209,23163,23165,23180,23196,23183,23187,23197,23530,23501,23499,23508,23505,23498,23502,23564,23600,23863,23875,23915,23873,23883,23871,23861,23889,23886,23893,23859,23866,23890,23869,23857,23897,23874,23865,23881,23864,23868,23858,23862,23872,23877,24132,24129,24408,24486,24485,24491,24777,24761,24780,24802,24782,24772,24852,24818,24842,24854,24837,24821,24851,24824,24828,24830,24769,24835,24856,24861,24848,24831,24836,24843,25162,25492,25521,25520,25550,25573,25576,25583,25539,25757,25587,25546,25568,25590,25557,25586,25589,25697,25567,25534,25565,25564,25540,25560,25555,25538,25543,25548,25547,25544,25584,25559,25561,25906,25959,25962,25956,25948,25960,25957,25996,26013,26014,26030,26064,26066,26236,26220,26235,26240,26225,26233,26218,26226,26369,26892,26835,26884,26844,26922,26860,26858,26865,26895,26838,26871,26859,26852,26870,26899,26896,26867,26849,26887,26828,26888,26992,26804,26897,26863,26822,26900,26872,26832,26877,26876,26856,26891,26890,26903,26830,26824,26845,26846,26854,26868,26833,26886,26836,26857,26901,26917,26823,27449,27451,27455,27452,27540,27543,27545,27541,27581,27632,27634,27635,27696,28156,28230,28231,28191,28233,28296,28220,28221,28229,28258,28203,28223,28225,28253,28275,28188,28211,28235,28224,28241,28219,28163,28206,28254,28264,28252,28257,28209,28200,28256,28273,28267,28217,28194,28208,28243,28261,28199,28280,28260,28279,28245,28281,28242,28262,28213,28214,28250,28960,28958,28975,28923,28974,28977,28963,28965,28962,28978,28959,28968,28986,28955,29259,29274,29320,29321,29318,29317,29323,29458,29451,29488,29474,29489,29491,29479,29490,29485,29478,29475,29493,29452,29742,29740,29744,29739,29718,29722,29729,29741,29745,29732,29731,29725,29737,29728,29746,29947,29999,30063,30060,30183,30170,30177,30182,30173,30175,30180,30167,30357,30354,30426,30534,30535,30532,30541,30533,30538,30542,30539,30540,30686,30700,30816,30820,30821,30812,30829,30833,30826,30830,30832,30825,30824,30814,30818,31092,31091,31090,31088,31234,31242,31235,31244,31236,31385,31462,31460,31562,31547,31556,31560,31564,31566,31552,31576,31557,31906,31902,31912,31905,32088,32111,32099,32083,32086,32103,32106,32079,32109,32092,32107,32082,32084,32105,32081,32095,32078,32574,32575,32613,32614,32674,32672,32673,32727,32849,32847,32848,33022,32980,33091,33098,33106,33103,33095,33085,33101,33082,33254,33262,33271,33272,33273,33284,33340,33341,33343,33397,33595,33743,33785,33827,33728,33768,33810,33767,33764,33788,33782,33808,33734,33736,33771,33763,33727,33793,33757,33765,33752,33791,33761,33739,33742,33750,33781,33737,33801,33807,33758,33809,33798,33730,33779,33749,33786,33735,33745,33770,33811,33731,33772,33774,33732,33787,33751,33762,33819,33755,33790,34520,34530,34534,34515,34531,34522,34538,34525,34539,34524,34540,34537,34519,34536,34513,34888,34902,34901,35002,35031,35001,35000,35008,35006,34998,35004,34999,35005,34994,35073,35017,35221,35224,35223,35293,35290,35291,35406,35405,35385,35417,35392,35415,35416,35396,35397,35410,35400,35409,35402,35404,35407,35935,35969,35968,36026,36030,36016,36025,36021,36228,36224,36233,36312,36307,36301,36295,36310,36316,36303,36309,36313,36296,36311,36293,36591,36599,36602,36601,36582,36590,36581,36597,36583,36584,36598,36587,36593,36588,36596,36585,36909,36916,36911,37126,37164,37124,37119,37116,37128,37113,37115,37121,37120,37127,37125,37123,37217,37220,37215,37218,37216,37377,37386,37413,37379,37402,37414,37391,37388,37376,37394,37375,37373,37382,37380,37415,37378,37404,37412,37401,37399,37381,37398,38267,38285,38284,38288,38535,38526,38536,38537,38531,38528,38594,38600,38595,38641,38640,38764,38768,38766,38919,39081,39147,40166,40697,20099,20100,20150,20669,20671,20678,20654,20676,20682,20660,20680,20674,20656,20673,20666,20657,20683,20681,20662,20664,20951,21114,21112,21115,21116,21955,21979,21964,21968,21963,21962,21981,21952,21972,21956,21993,21951,21970,21901,21967,21973,21986,21974,21960,22002,21965,21977,21954,22292,22611,22632,22628,22607,22605,22601,22639,22613,22606,22621,22617,22629,22619,22589,22627,22641,22780,23239,23236,23243,23226,23224,23217,23221,23216,23231,23240,23227,23238,23223,23232,23242,23220,23222,23245,23225,23184,23510,23512,23513,23583,23603,23921,23907,23882,23909,23922,23916,23902,23912,23911,23906,24048,24143,24142,24138,24141,24139,24261,24268,24262,24267,24263,24384,24495,24493,24823,24905,24906,24875,24901,24886,24882,24878,24902,24879,24911,24873,24896,25120,37224,25123,25125,25124,25541,25585,25579,25616,25618,25609,25632,25636,25651,25667,25631,25621,25624,25657,25655,25634,25635,25612,25638,25648,25640,25665,25653,25647,25610,25626,25664,25637,25639,25611,25575,25627,25646,25633,25614,25967,26002,26067,26246,26252,26261,26256,26251,26250,26265,26260,26232,26400,26982,26975,26936,26958,26978,26993,26943,26949,26986,26937,26946,26967,26969,27002,26952,26953,26933,26988,26931,26941,26981,26864,27000,26932,26985,26944,26991,26948,26998,26968,26945,26996,26956,26939,26955,26935,26972,26959,26961,26930,26962,26927,27003,26940,27462,27461,27459,27458,27464,27457,27547,64013,27643,27644,27641,27639,27640,28315,28374,28360,28303,28352,28319,28307,28308,28320,28337,28345,28358,28370,28349,28353,28318,28361,28343,28336,28365,28326,28367,28338,28350,28355,28380,28376,28313,28306,28302,28301,28324,28321,28351,28339,28368,28362,28311,28334,28323,28999,29012,29010,29027,29024,28993,29021,29026,29042,29048,29034,29025,28994,29016,28995,29003,29040,29023,29008,29011,28996,29005,29018,29263,29325,29324,29329,29328,29326,29500,29506,29499,29498,29504,29514,29513,29764,29770,29771,29778,29777,29783,29760,29775,29776,29774,29762,29766,29773,29780,29921,29951,29950,29949,29981,30073,30071,27011,30191,30223,30211,30199,30206,30204,30201,30200,30224,30203,30198,30189,30197,30205,30361,30389,30429,30549,30559,30560,30546,30550,30554,30569,30567,30548,30553,30573,30688,30855,30874,30868,30863,30852,30869,30853,30854,30881,30851,30841,30873,30848,30870,30843,31100,31106,31101,31097,31249,31256,31257,31250,31255,31253,31266,31251,31259,31248,31395,31394,31390,31467,31590,31588,31597,31604,31593,31602,31589,31603,31601,31600,31585,31608,31606,31587,31922,31924,31919,32136,32134,32128,32141,32127,32133,32122,32142,32123,32131,32124,32140,32148,32132,32125,32146,32621,32619,32615,32616,32620,32678,32677,32679,32731,32732,32801,33124,33120,33143,33116,33129,33115,33122,33138,26401,33118,33142,33127,33135,33092,33121,33309,33353,33348,33344,33346,33349,34033,33855,33878,33910,33913,33935,33933,33893,33873,33856,33926,33895,33840,33869,33917,33882,33881,33908,33907,33885,34055,33886,33847,33850,33844,33914,33859,33912,33842,33861,33833,33753,33867,33839,33858,33837,33887,33904,33849,33870,33868,33874,33903,33989,33934,33851,33863,33846,33843,33896,33918,33860,33835,33888,33876,33902,33872,34571,34564,34551,34572,34554,34518,34549,34637,34552,34574,34569,34561,34550,34573,34565,35030,35019,35021,35022,35038,35035,35034,35020,35024,35205,35227,35295,35301,35300,35297,35296,35298,35292,35302,35446,35462,35455,35425,35391,35447,35458,35460,35445,35459,35457,35444,35450,35900,35915,35914,35941,35940,35942,35974,35972,35973,36044,36200,36201,36241,36236,36238,36239,36237,36243,36244,36240,36242,36336,36320,36332,36337,36334,36304,36329,36323,36322,36327,36338,36331,36340,36614,36607,36609,36608,36613,36615,36616,36610,36619,36946,36927,36932,36937,36925,37136,37133,37135,37137,37142,37140,37131,37134,37230,37231,37448,37458,37424,37434,37478,37427,37477,37470,37507,37422,37450,37446,37485,37484,37455,37472,37479,37487,37430,37473,37488,37425,37460,37475,37456,37490,37454,37459,37452,37462,37426,38303,38300,38302,38299,38546,38547,38545,38551,38606,38650,38653,38648,38645,38771,38775,38776,38770,38927,38925,38926,39084,39158,39161,39343,39346,39344,39349,39597,39595,39771,40170,40173,40167,40576,40701,20710,20692,20695,20712,20723,20699,20714,20701,20708,20691,20716,20720,20719,20707,20704,20952,21120,21121,21225,21227,21296,21420,22055,22037,22028,22034,22012,22031,22044,22017,22035,22018,22010,22045,22020,22015,22009,22665,22652,22672,22680,22662,22657,22655,22644,22667,22650,22663,22673,22670,22646,22658,22664,22651,22676,22671,22782,22891,23260,23278,23269,23253,23274,23258,23277,23275,23283,23266,23264,23259,23276,23262,23261,23257,23272,23263,23415,23520,23523,23651,23938,23936,23933,23942,23930,23937,23927,23946,23945,23944,23934,23932,23949,23929,23935,24152,24153,24147,24280,24273,24279,24270,24284,24277,24281,24274,24276,24388,24387,24431,24502,24876,24872,24897,24926,24945,24947,24914,24915,24946,24940,24960,24948,24916,24954,24923,24933,24891,24938,24929,24918,25129,25127,25131,25643,25677,25691,25693,25716,25718,25714,25715,25725,25717,25702,25766,25678,25730,25694,25692,25675,25683,25696,25680,25727,25663,25708,25707,25689,25701,25719,25971,26016,26273,26272,26271,26373,26372,26402,27057,27062,27081,27040,27086,27030,27056,27052,27068,27025,27033,27022,27047,27021,27049,27070,27055,27071,27076,27069,27044,27092,27065,27082,27034,27087,27059,27027,27050,27041,27038,27097,27031,27024,27074,27061,27045,27078,27466,27469,27467,27550,27551,27552,27587,27588,27646,28366,28405,28401,28419,28453,28408,28471,28411,28462,28425,28494,28441,28442,28455,28440,28475,28434,28397,28426,28470,28531,28409,28398,28461,28480,28464,28476,28469,28395,28423,28430,28483,28421,28413,28406,28473,28444,28412,28474,28447,28429,28446,28424,28449,29063,29072,29065,29056,29061,29058,29071,29051,29062,29057,29079,29252,29267,29335,29333,29331,29507,29517,29521,29516,29794,29811,29809,29813,29810,29799,29806,29952,29954,29955,30077,30096,30230,30216,30220,30229,30225,30218,30228,30392,30593,30588,30597,30594,30574,30592,30575,30590,30595,30898,30890,30900,30893,30888,30846,30891,30878,30885,30880,30892,30882,30884,31128,31114,31115,31126,31125,31124,31123,31127,31112,31122,31120,31275,31306,31280,31279,31272,31270,31400,31403,31404,31470,31624,31644,31626,31633,31632,31638,31629,31628,31643,31630,31621,31640,21124,31641,31652,31618,31931,31935,31932,31930,32167,32183,32194,32163,32170,32193,32192,32197,32157,32206,32196,32198,32203,32204,32175,32185,32150,32188,32159,32166,32174,32169,32161,32201,32627,32738,32739,32741,32734,32804,32861,32860,33161,33158,33155,33159,33165,33164,33163,33301,33943,33956,33953,33951,33978,33998,33986,33964,33966,33963,33977,33972,33985,33997,33962,33946,33969,34000,33949,33959,33979,33954,33940,33991,33996,33947,33961,33967,33960,34006,33944,33974,33999,33952,34007,34004,34002,34011,33968,33937,34401,34611,34595,34600,34667,34624,34606,34590,34593,34585,34587,34627,34604,34625,34622,34630,34592,34610,34602,34605,34620,34578,34618,34609,34613,34626,34598,34599,34616,34596,34586,34608,34577,35063,35047,35057,35058,35066,35070,35054,35068,35062,35067,35056,35052,35051,35229,35233,35231,35230,35305,35307,35304,35499,35481,35467,35474,35471,35478,35901,35944,35945,36053,36047,36055,36246,36361,36354,36351,36365,36349,36362,36355,36359,36358,36357,36350,36352,36356,36624,36625,36622,36621,37155,37148,37152,37154,37151,37149,37146,37156,37153,37147,37242,37234,37241,37235,37541,37540,37494,37531,37498,37536,37524,37546,37517,37542,37530,37547,37497,37527,37503,37539,37614,37518,37506,37525,37538,37501,37512,37537,37514,37510,37516,37529,37543,37502,37511,37545,37533,37515,37421,38558,38561,38655,38744,38781,38778,38782,38787,38784,38786,38779,38788,38785,38783,38862,38861,38934,39085,39086,39170,39168,39175,39325,39324,39363,39353,39355,39354,39362,39357,39367,39601,39651,39655,39742,39743,39776,39777,39775,40177,40178,40181,40615,20735,20739,20784,20728,20742,20743,20726,20734,20747,20748,20733,20746,21131,21132,21233,21231,22088,22082,22092,22069,22081,22090,22089,22086,22104,22106,22080,22067,22077,22060,22078,22072,22058,22074,22298,22699,22685,22705,22688,22691,22703,22700,22693,22689,22783,23295,23284,23293,23287,23286,23299,23288,23298,23289,23297,23303,23301,23311,23655,23961,23959,23967,23954,23970,23955,23957,23968,23964,23969,23962,23966,24169,24157,24160,24156,32243,24283,24286,24289,24393,24498,24971,24963,24953,25009,25008,24994,24969,24987,24979,25007,25005,24991,24978,25002,24993,24973,24934,25011,25133,25710,25712,25750,25760,25733,25751,25756,25743,25739,25738,25740,25763,25759,25704,25777,25752,25974,25978,25977,25979,26034,26035,26293,26288,26281,26290,26295,26282,26287,27136,27142,27159,27109,27128,27157,27121,27108,27168,27135,27116,27106,27163,27165,27134,27175,27122,27118,27156,27127,27111,27200,27144,27110,27131,27149,27132,27115,27145,27140,27160,27173,27151,27126,27174,27143,27124,27158,27473,27557,27555,27554,27558,27649,27648,27647,27650,28481,28454,28542,28551,28614,28562,28557,28553,28556,28514,28495,28549,28506,28566,28534,28524,28546,28501,28530,28498,28496,28503,28564,28563,28509,28416,28513,28523,28541,28519,28560,28499,28555,28521,28543,28565,28515,28535,28522,28539,29106,29103,29083,29104,29088,29082,29097,29109,29085,29093,29086,29092,29089,29098,29084,29095,29107,29336,29338,29528,29522,29534,29535,29536,29533,29531,29537,29530,29529,29538,29831,29833,29834,29830,29825,29821,29829,29832,29820,29817,29960,29959,30078,30245,30238,30233,30237,30236,30243,30234,30248,30235,30364,30365,30366,30363,30605,30607,30601,30600,30925,30907,30927,30924,30929,30926,30932,30920,30915,30916,30921,31130,31137,31136,31132,31138,31131,27510,31289,31410,31412,31411,31671,31691,31678,31660,31694,31663,31673,31690,31669,31941,31944,31948,31947,32247,32219,32234,32231,32215,32225,32259,32250,32230,32246,32241,32240,32238,32223,32630,32684,32688,32685,32749,32747,32746,32748,32742,32744,32868,32871,33187,33183,33182,33173,33186,33177,33175,33302,33359,33363,33362,33360,33358,33361,34084,34107,34063,34048,34089,34062,34057,34061,34079,34058,34087,34076,34043,34091,34042,34056,34060,34036,34090,34034,34069,34039,34027,34035,34044,34066,34026,34025,34070,34046,34088,34077,34094,34050,34045,34078,34038,34097,34086,34023,34024,34032,34031,34041,34072,34080,34096,34059,34073,34095,34402,34646,34659,34660,34679,34785,34675,34648,34644,34651,34642,34657,34650,34641,34654,34669,34666,34640,34638,34655,34653,34671,34668,34682,34670,34652,34661,34639,34683,34677,34658,34663,34665,34906,35077,35084,35092,35083,35095,35096,35097,35078,35094,35089,35086,35081,35234,35236,35235,35309,35312,35308,35535,35526,35512,35539,35537,35540,35541,35515,35543,35518,35520,35525,35544,35523,35514,35517,35545,35902,35917,35983,36069,36063,36057,36072,36058,36061,36071,36256,36252,36257,36251,36384,36387,36389,36388,36398,36373,36379,36374,36369,36377,36390,36391,36372,36370,36376,36371,36380,36375,36378,36652,36644,36632,36634,36640,36643,36630,36631,36979,36976,36975,36967,36971,37167,37163,37161,37162,37170,37158,37166,37253,37254,37258,37249,37250,37252,37248,37584,37571,37572,37568,37593,37558,37583,37617,37599,37592,37609,37591,37597,37580,37615,37570,37608,37578,37576,37582,37606,37581,37589,37577,37600,37598,37607,37585,37587,37557,37601,37574,37556,38268,38316,38315,38318,38320,38564,38562,38611,38661,38664,38658,38746,38794,38798,38792,38864,38863,38942,38941,38950,38953,38952,38944,38939,38951,39090,39176,39162,39185,39188,39190,39191,39189,39388,39373,39375,39379,39380,39374,39369,39382,39384,39371,39383,39372,39603,39660,39659,39667,39666,39665,39750,39747,39783,39796,39793,39782,39798,39797,39792,39784,39780,39788,40188,40186,40189,40191,40183,40199,40192,40185,40187,40200,40197,40196,40579,40659,40719,40720,20764,20755,20759,20762,20753,20958,21300,21473,22128,22112,22126,22131,22118,22115,22125,22130,22110,22135,22300,22299,22728,22717,22729,22719,22714,22722,22716,22726,23319,23321,23323,23329,23316,23315,23312,23318,23336,23322,23328,23326,23535,23980,23985,23977,23975,23989,23984,23982,23978,23976,23986,23981,23983,23988,24167,24168,24166,24175,24297,24295,24294,24296,24293,24395,24508,24989,25000,24982,25029,25012,25030,25025,25036,25018,25023,25016,24972,25815,25814,25808,25807,25801,25789,25737,25795,25819,25843,25817,25907,25983,25980,26018,26312,26302,26304,26314,26315,26319,26301,26299,26298,26316,26403,27188,27238,27209,27239,27186,27240,27198,27229,27245,27254,27227,27217,27176,27226,27195,27199,27201,27242,27236,27216,27215,27220,27247,27241,27232,27196,27230,27222,27221,27213,27214,27206,27477,27476,27478,27559,27562,27563,27592,27591,27652,27651,27654,28589,28619,28579,28615,28604,28622,28616,28510,28612,28605,28574,28618,28584,28676,28581,28590,28602,28588,28586,28623,28607,28600,28578,28617,28587,28621,28591,28594,28592,29125,29122,29119,29112,29142,29120,29121,29131,29140,29130,29127,29135,29117,29144,29116,29126,29146,29147,29341,29342,29545,29542,29543,29548,29541,29547,29546,29823,29850,29856,29844,29842,29845,29857,29963,30080,30255,30253,30257,30269,30259,30268,30261,30258,30256,30395,30438,30618,30621,30625,30620,30619,30626,30627,30613,30617,30615,30941,30953,30949,30954,30942,30947,30939,30945,30946,30957,30943,30944,31140,31300,31304,31303,31414,31416,31413,31409,31415,31710,31715,31719,31709,31701,31717,31706,31720,31737,31700,31722,31714,31708,31723,31704,31711,31954,31956,31959,31952,31953,32274,32289,32279,32268,32287,32288,32275,32270,32284,32277,32282,32290,32267,32271,32278,32269,32276,32293,32292,32579,32635,32636,32634,32689,32751,32810,32809,32876,33201,33190,33198,33209,33205,33195,33200,33196,33204,33202,33207,33191,33266,33365,33366,33367,34134,34117,34155,34125,34131,34145,34136,34112,34118,34148,34113,34146,34116,34129,34119,34147,34110,34139,34161,34126,34158,34165,34133,34151,34144,34188,34150,34141,34132,34149,34156,34403,34405,34404,34715,34703,34711,34707,34706,34696,34689,34710,34712,34681,34695,34723,34693,34704,34705,34717,34692,34708,34716,34714,34697,35102,35110,35120,35117,35118,35111,35121,35106,35113,35107,35119,35116,35103,35313,35552,35554,35570,35572,35573,35549,35604,35556,35551,35568,35528,35550,35553,35560,35583,35567,35579,35985,35986,35984,36085,36078,36081,36080,36083,36204,36206,36261,36263,36403,36414,36408,36416,36421,36406,36412,36413,36417,36400,36415,36541,36662,36654,36661,36658,36665,36663,36660,36982,36985,36987,36998,37114,37171,37173,37174,37267,37264,37265,37261,37263,37671,37662,37640,37663,37638,37647,37754,37688,37692,37659,37667,37650,37633,37702,37677,37646,37645,37579,37661,37626,37669,37651,37625,37623,37684,37634,37668,37631,37673,37689,37685,37674,37652,37644,37643,37630,37641,37632,37627,37654,38332,38349,38334,38329,38330,38326,38335,38325,38333,38569,38612,38667,38674,38672,38809,38807,38804,38896,38904,38965,38959,38962,39204,39199,39207,39209,39326,39406,39404,39397,39396,39408,39395,39402,39401,39399,39609,39615,39604,39611,39670,39674,39673,39671,39731,39808,39813,39815,39804,39806,39803,39810,39827,39826,39824,39802,39829,39805,39816,40229,40215,40224,40222,40212,40233,40221,40216,40226,40208,40217,40223,40584,40582,40583,40622,40621,40661,40662,40698,40722,40765,20774,20773,20770,20772,20768,20777,21236,22163,22156,22157,22150,22148,22147,22142,22146,22143,22145,22742,22740,22735,22738,23341,23333,23346,23331,23340,23335,23334,23343,23342,23419,23537,23538,23991,24172,24170,24510,24507,25027,25013,25020,25063,25056,25061,25060,25064,25054,25839,25833,25827,25835,25828,25832,25985,25984,26038,26074,26322,27277,27286,27265,27301,27273,27295,27291,27297,27294,27271,27283,27278,27285,27267,27304,27300,27281,27263,27302,27290,27269,27276,27282,27483,27565,27657,28620,28585,28660,28628,28643,28636,28653,28647,28646,28638,28658,28637,28642,28648,29153,29169,29160,29170,29156,29168,29154,29555,29550,29551,29847,29874,29867,29840,29866,29869,29873,29861,29871,29968,29969,29970,29967,30084,30275,30280,30281,30279,30372,30441,30645,30635,30642,30647,30646,30644,30641,30632,30704,30963,30973,30978,30971,30972,30962,30981,30969,30974,30980,31147,31144,31324,31323,31318,31320,31316,31322,31422,31424,31425,31749,31759,31730,31744,31743,31739,31758,31732,31755,31731,31746,31753,31747,31745,31736,31741,31750,31728,31729,31760,31754,31976,32301,32316,32322,32307,38984,32312,32298,32329,32320,32327,32297,32332,32304,32315,32310,32324,32314,32581,32639,32638,32637,32756,32754,32812,33211,33220,33228,33226,33221,33223,33212,33257,33371,33370,33372,34179,34176,34191,34215,34197,34208,34187,34211,34171,34212,34202,34206,34167,34172,34185,34209,34170,34168,34135,34190,34198,34182,34189,34201,34205,34177,34210,34178,34184,34181,34169,34166,34200,34192,34207,34408,34750,34730,34733,34757,34736,34732,34745,34741,34748,34734,34761,34755,34754,34764,34743,34735,34756,34762,34740,34742,34751,34744,34749,34782,34738,35125,35123,35132,35134,35137,35154,35127,35138,35245,35247,35246,35314,35315,35614,35608,35606,35601,35589,35595,35618,35599,35602,35605,35591,35597,35592,35590,35612,35603,35610,35919,35952,35954,35953,35951,35989,35988,36089,36207,36430,36429,36435,36432,36428,36423,36675,36672,36997,36990,37176,37274,37282,37275,37273,37279,37281,37277,37280,37793,37763,37807,37732,37718,37703,37756,37720,37724,37750,37705,37712,37713,37728,37741,37775,37708,37738,37753,37719,37717,37714,37711,37745,37751,37755,37729,37726,37731,37735,37760,37710,37721,38343,38336,38345,38339,38341,38327,38574,38576,38572,38688,38687,38680,38685,38681,38810,38817,38812,38814,38813,38869,38868,38897,38977,38980,38986,38985,38981,38979,39205,39211,39212,39210,39219,39218,39215,39213,39217,39216,39320,39331,39329,39426,39418,39412,39415,39417,39416,39414,39419,39421,39422,39420,39427,39614,39678,39677,39681,39676,39752,39834,39848,39838,39835,39846,39841,39845,39844,39814,39842,39840,39855,40243,40257,40295,40246,40238,40239,40241,40248,40240,40261,40258,40259,40254,40247,40256,40253,32757,40237,40586,40585,40589,40624,40648,40666,40699,40703,40740,40739,40738,40788,40864,20785,20781,20782,22168,22172,22167,22170,22173,22169,22896,23356,23657,23658,24000,24173,24174,25048,25055,25069,25070,25073,25066,25072,25067,25046,25065,25855,25860,25853,25848,25857,25859,25852,26004,26075,26330,26331,26328,27333,27321,27325,27361,27334,27322,27318,27319,27335,27316,27309,27486,27593,27659,28679,28684,28685,28673,28677,28692,28686,28671,28672,28667,28710,28668,28663,28682,29185,29183,29177,29187,29181,29558,29880,29888,29877,29889,29886,29878,29883,29890,29972,29971,30300,30308,30297,30288,30291,30295,30298,30374,30397,30444,30658,30650,30975,30988,30995,30996,30985,30992,30994,30993,31149,31148,31327,31772,31785,31769,31776,31775,31789,31773,31782,31784,31778,31781,31792,32348,32336,32342,32355,32344,32354,32351,32337,32352,32343,32339,32693,32691,32759,32760,32885,33233,33234,33232,33375,33374,34228,34246,34240,34243,34242,34227,34229,34237,34247,34244,34239,34251,34254,34248,34245,34225,34230,34258,34340,34232,34231,34238,34409,34791,34790,34786,34779,34795,34794,34789,34783,34803,34788,34772,34780,34771,34797,34776,34787,34724,34775,34777,34817,34804,34792,34781,35155,35147,35151,35148,35142,35152,35153,35145,35626,35623,35619,35635,35632,35637,35655,35631,35644,35646,35633,35621,35639,35622,35638,35630,35620,35643,35645,35642,35906,35957,35993,35992,35991,36094,36100,36098,36096,36444,36450,36448,36439,36438,36446,36453,36455,36443,36442,36449,36445,36457,36436,36678,36679,36680,36683,37160,37178,37179,37182,37288,37285,37287,37295,37290,37813,37772,37778,37815,37787,37789,37769,37799,37774,37802,37790,37798,37781,37768,37785,37791,37773,37809,37777,37810,37796,37800,37812,37795,37797,38354,38355,38353,38579,38615,38618,24002,38623,38616,38621,38691,38690,38693,38828,38830,38824,38827,38820,38826,38818,38821,38871,38873,38870,38872,38906,38992,38993,38994,39096,39233,39228,39226,39439,39435,39433,39437,39428,39441,39434,39429,39431,39430,39616,39644,39688,39684,39685,39721,39733,39754,39756,39755,39879,39878,39875,39871,39873,39861,39864,39891,39862,39876,39865,39869,40284,40275,40271,40266,40283,40267,40281,40278,40268,40279,40274,40276,40287,40280,40282,40590,40588,40671,40705,40704,40726,40741,40747,40746,40745,40744,40780,40789,20788,20789,21142,21239,21428,22187,22189,22182,22183,22186,22188,22746,22749,22747,22802,23357,23358,23359,24003,24176,24511,25083,25863,25872,25869,25865,25868,25870,25988,26078,26077,26334,27367,27360,27340,27345,27353,27339,27359,27356,27344,27371,27343,27341,27358,27488,27568,27660,28697,28711,28704,28694,28715,28705,28706,28707,28713,28695,28708,28700,28714,29196,29194,29191,29186,29189,29349,29350,29348,29347,29345,29899,29893,29879,29891,29974,30304,30665,30666,30660,30705,31005,31003,31009,31004,30999,31006,31152,31335,31336,31795,31804,31801,31788,31803,31980,31978,32374,32373,32376,32368,32375,32367,32378,32370,32372,32360,32587,32586,32643,32646,32695,32765,32766,32888,33239,33237,33380,33377,33379,34283,34289,34285,34265,34273,34280,34266,34263,34284,34290,34296,34264,34271,34275,34268,34257,34288,34278,34287,34270,34274,34816,34810,34819,34806,34807,34825,34828,34827,34822,34812,34824,34815,34826,34818,35170,35162,35163,35159,35169,35164,35160,35165,35161,35208,35255,35254,35318,35664,35656,35658,35648,35667,35670,35668,35659,35669,35665,35650,35666,35671,35907,35959,35958,35994,36102,36103,36105,36268,36266,36269,36267,36461,36472,36467,36458,36463,36475,36546,36690,36689,36687,36688,36691,36788,37184,37183,37296,37293,37854,37831,37839,37826,37850,37840,37881,37868,37836,37849,37801,37862,37834,37844,37870,37859,37845,37828,37838,37824,37842,37863,38269,38362,38363,38625,38697,38699,38700,38696,38694,38835,38839,38838,38877,38878,38879,39004,39001,39005,38999,39103,39101,39099,39102,39240,39239,39235,39334,39335,39450,39445,39461,39453,39460,39451,39458,39456,39463,39459,39454,39452,39444,39618,39691,39690,39694,39692,39735,39914,39915,39904,39902,39908,39910,39906,39920,39892,39895,39916,39900,39897,39909,39893,39905,39898,40311,40321,40330,40324,40328,40305,40320,40312,40326,40331,40332,40317,40299,40308,40309,40304,40297,40325,40307,40315,40322,40303,40313,40319,40327,40296,40596,40593,40640,40700,40749,40768,40769,40781,40790,40791,40792,21303,22194,22197,22195,22755,23365,24006,24007,24302,24303,24512,24513,25081,25879,25878,25877,25875,26079,26344,26339,26340,27379,27376,27370,27368,27385,27377,27374,27375,28732,28725,28719,28727,28724,28721,28738,28728,28735,28730,28729,28736,28731,28723,28737,29203,29204,29352,29565,29564,29882,30379,30378,30398,30445,30668,30670,30671,30669,30706,31013,31011,31015,31016,31012,31017,31154,31342,31340,31341,31479,31817,31816,31818,31815,31813,31982,32379,32382,32385,32384,32698,32767,32889,33243,33241,33291,33384,33385,34338,34303,34305,34302,34331,34304,34294,34308,34313,34309,34316,34301,34841,34832,34833,34839,34835,34838,35171,35174,35257,35319,35680,35690,35677,35688,35683,35685,35687,35693,36270,36486,36488,36484,36697,36694,36695,36693,36696,36698,37005,37187,37185,37303,37301,37298,37299,37899,37907,37883,37920,37903,37908,37886,37909,37904,37928,37913,37901,37877,37888,37879,37895,37902,37910,37906,37882,37897,37880,37898,37887,37884,37900,37878,37905,37894,38366,38368,38367,38702,38703,38841,38843,38909,38910,39008,39010,39011,39007,39105,39106,39248,39246,39257,39244,39243,39251,39474,39476,39473,39468,39466,39478,39465,39470,39480,39469,39623,39626,39622,39696,39698,39697,39947,39944,39927,39941,39954,39928,40000,39943,39950,39942,39959,39956,39945,40351,40345,40356,40349,40338,40344,40336,40347,40352,40340,40348,40362,40343,40353,40346,40354,40360,40350,40355,40383,40361,40342,40358,40359,40601,40603,40602,40677,40676,40679,40678,40752,40750,40795,40800,40798,40797,40793,40849,20794,20793,21144,21143,22211,22205,22206,23368,23367,24011,24015,24305,25085,25883,27394,27388,27395,27384,27392,28739,28740,28746,28744,28745,28741,28742,29213,29210,29209,29566,29975,30314,30672,31021,31025,31023,31828,31827,31986,32394,32391,32392,32395,32390,32397,32589,32699,32816,33245,34328,34346,34342,34335,34339,34332,34329,34343,34350,34337,34336,34345,34334,34341,34857,34845,34843,34848,34852,34844,34859,34890,35181,35177,35182,35179,35322,35705,35704,35653,35706,35707,36112,36116,36271,36494,36492,36702,36699,36701,37190,37188,37189,37305,37951,37947,37942,37929,37949,37948,37936,37945,37930,37943,37932,37952,37937,38373,38372,38371,38709,38714,38847,38881,39012,39113,39110,39104,39256,39254,39481,39485,39494,39492,39490,39489,39482,39487,39629,39701,39703,39704,39702,39738,39762,39979,39965,39964,39980,39971,39976,39977,39972,39969,40375,40374,40380,40385,40391,40394,40399,40382,40389,40387,40379,40373,40398,40377,40378,40364,40392,40369,40365,40396,40371,40397,40370,40570,40604,40683,40686,40685,40731,40728,40730,40753,40782,40805,40804,40850,20153,22214,22213,22219,22897,23371,23372,24021,24017,24306,25889,25888,25894,25890,27403,27400,27401,27661,28757,28758,28759,28754,29214,29215,29353,29567,29912,29909,29913,29911,30317,30381,31029,31156,31344,31345,31831,31836,31833,31835,31834,31988,31985,32401,32591,32647,33246,33387,34356,34357,34355,34348,34354,34358,34860,34856,34854,34858,34853,35185,35263,35262,35323,35710,35716,35714,35718,35717,35711,36117,36501,36500,36506,36498,36496,36502,36503,36704,36706,37191,37964,37968,37962,37963,37967,37959,37957,37960,37961,37958,38719,38883,39018,39017,39115,39252,39259,39502,39507,39508,39500,39503,39496,39498,39497,39506,39504,39632,39705,39723,39739,39766,39765,40006,40008,39999,40004,39993,39987,40001,39996,39991,39988,39986,39997,39990,40411,40402,40414,40410,40395,40400,40412,40401,40415,40425,40409,40408,40406,40437,40405,40413,40630,40688,40757,40755,40754,40770,40811,40853,40866,20797,21145,22760,22759,22898,23373,24024,34863,24399,25089,25091,25092,25897,25893,26006,26347,27409,27410,27407,27594,28763,28762,29218,29570,29569,29571,30320,30676,31847,31846,32405,33388,34362,34368,34361,34364,34353,34363,34366,34864,34866,34862,34867,35190,35188,35187,35326,35724,35726,35723,35720,35909,36121,36504,36708,36707,37308,37986,37973,37981,37975,37982,38852,38853,38912,39510,39513,39710,39711,39712,40018,40024,40016,40010,40013,40011,40021,40025,40012,40014,40443,40439,40431,40419,40427,40440,40420,40438,40417,40430,40422,40434,40432,40418,40428,40436,40435,40424,40429,40642,40656,40690,40691,40710,40732,40760,40759,40758,40771,40783,40817,40816,40814,40815,22227,22221,23374,23661,25901,26349,26350,27411,28767,28769,28765,28768,29219,29915,29925,30677,31032,31159,31158,31850,32407,32649,33389,34371,34872,34871,34869,34891,35732,35733,36510,36511,36512,36509,37310,37309,37314,37995,37992,37993,38629,38726,38723,38727,38855,38885,39518,39637,39769,40035,40039,40038,40034,40030,40032,40450,40446,40455,40451,40454,40453,40448,40449,40457,40447,40445,40452,40608,40734,40774,40820,40821,40822,22228,25902,26040,27416,27417,27415,27418,28770,29222,29354,30680,30681,31033,31849,31851,31990,32410,32408,32411,32409,33248,33249,34374,34375,34376,35193,35194,35196,35195,35327,35736,35737,36517,36516,36515,37998,37997,37999,38001,38003,38729,39026,39263,40040,40046,40045,40459,40461,40464,40463,40466,40465,40609,40693,40713,40775,40824,40827,40826,40825,22302,28774,31855,34876,36274,36518,37315,38004,38008,38006,38005,39520,40052,40051,40049,40053,40468,40467,40694,40714,40868,28776,28773,31991,34410,34878,34877,34879,35742,35996,36521,36553,38731,39027,39028,39116,39265,39339,39524,39526,39527,39716,40469,40471,40776,25095,27422,29223,34380,36520,38018,38016,38017,39529,39528,39726,40473,29225,34379,35743,38019,40057,40631,30325,39531,40058,40477,28777,28778,40612,40830,40777,40856,30849,37561,35023,22715,24658,31911,23290,9556,9574,9559,9568,9580,9571,9562,9577,9565,9554,9572,9557,9566,9578,9569,9560,9575,9563,9555,9573,9558,9567,9579,9570,9561,9576,9564,9553,9552,9581,9582,9584,9583,65517,132423,37595,132575,147397,34124,17077,29679,20917,13897,149826,166372,37700,137691,33518,146632,30780,26436,25311,149811,166314,131744,158643,135941,20395,140525,20488,159017,162436,144896,150193,140563,20521,131966,24484,131968,131911,28379,132127,20605,20737,13434,20750,39020,14147,33814,149924,132231,20832,144308,20842,134143,139516,131813,140592,132494,143923,137603,23426,34685,132531,146585,20914,20920,40244,20937,20943,20945,15580,20947,150182,20915,20962,21314,20973,33741,26942,145197,24443,21003,21030,21052,21173,21079,21140,21177,21189,31765,34114,21216,34317,158483,21253,166622,21833,28377,147328,133460,147436,21299,21316,134114,27851,136998,26651,29653,24650,16042,14540,136936,29149,17570,21357,21364,165547,21374,21375,136598,136723,30694,21395,166555,21408,21419,21422,29607,153458,16217,29596,21441,21445,27721,20041,22526,21465,15019,134031,21472,147435,142755,21494,134263,21523,28793,21803,26199,27995,21613,158547,134516,21853,21647,21668,18342,136973,134877,15796,134477,166332,140952,21831,19693,21551,29719,21894,21929,22021,137431,147514,17746,148533,26291,135348,22071,26317,144010,26276,26285,22093,22095,30961,22257,38791,21502,22272,22255,22253,166758,13859,135759,22342,147877,27758,28811,22338,14001,158846,22502,136214,22531,136276,148323,22566,150517,22620,22698,13665,22752,22748,135740,22779,23551,22339,172368,148088,37843,13729,22815,26790,14019,28249,136766,23076,21843,136850,34053,22985,134478,158849,159018,137180,23001,137211,137138,159142,28017,137256,136917,23033,159301,23211,23139,14054,149929,23159,14088,23190,29797,23251,159649,140628,15749,137489,14130,136888,24195,21200,23414,25992,23420,162318,16388,18525,131588,23509,24928,137780,154060,132517,23539,23453,19728,23557,138052,23571,29646,23572,138405,158504,23625,18653,23685,23785,23791,23947,138745,138807,23824,23832,23878,138916,23738,24023,33532,14381,149761,139337,139635,33415,14390,15298,24110,27274,24181,24186,148668,134355,21414,20151,24272,21416,137073,24073,24308,164994,24313,24315,14496,24316,26686,37915,24333,131521,194708,15070,18606,135994,24378,157832,140240,24408,140401,24419,38845,159342,24434,37696,166454,24487,23990,15711,152144,139114,159992,140904,37334,131742,166441,24625,26245,137335,14691,15815,13881,22416,141236,31089,15936,24734,24740,24755,149890,149903,162387,29860,20705,23200,24932,33828,24898,194726,159442,24961,20980,132694,24967,23466,147383,141407,25043,166813,170333,25040,14642,141696,141505,24611,24924,25886,25483,131352,25285,137072,25301,142861,25452,149983,14871,25656,25592,136078,137212,25744,28554,142902,38932,147596,153373,25825,25829,38011,14950,25658,14935,25933,28438,150056,150051,25989,25965,25951,143486,26037,149824,19255,26065,16600,137257,26080,26083,24543,144384,26136,143863,143864,26180,143780,143781,26187,134773,26215,152038,26227,26228,138813,143921,165364,143816,152339,30661,141559,39332,26370,148380,150049,15147,27130,145346,26462,26471,26466,147917,168173,26583,17641,26658,28240,37436,26625,144358,159136,26717,144495,27105,27147,166623,26995,26819,144845,26881,26880,15666,14849,144956,15232,26540,26977,166474,17148,26934,27032,15265,132041,33635,20624,27129,144985,139562,27205,145155,27293,15347,26545,27336,168348,15373,27421,133411,24798,27445,27508,141261,28341,146139,132021,137560,14144,21537,146266,27617,147196,27612,27703,140427,149745,158545,27738,33318,27769,146876,17605,146877,147876,149772,149760,146633,14053,15595,134450,39811,143865,140433,32655,26679,159013,159137,159211,28054,27996,28284,28420,149887,147589,159346,34099,159604,20935,27804,28189,33838,166689,28207,146991,29779,147330,31180,28239,23185,143435,28664,14093,28573,146992,28410,136343,147517,17749,37872,28484,28508,15694,28532,168304,15675,28575,147780,28627,147601,147797,147513,147440,147380,147775,20959,147798,147799,147776,156125,28747,28798,28839,28801,28876,28885,28886,28895,16644,15848,29108,29078,148087,28971,28997,23176,29002,29038,23708,148325,29007,37730,148161,28972,148570,150055,150050,29114,166888,28861,29198,37954,29205,22801,37955,29220,37697,153093,29230,29248,149876,26813,29269,29271,15957,143428,26637,28477,29314,29482,29483,149539,165931,18669,165892,29480,29486,29647,29610,134202,158254,29641,29769,147938,136935,150052,26147,14021,149943,149901,150011,29687,29717,26883,150054,29753,132547,16087,29788,141485,29792,167602,29767,29668,29814,33721,29804,14128,29812,37873,27180,29826,18771,150156,147807,150137,166799,23366,166915,137374,29896,137608,29966,29929,29982,167641,137803,23511,167596,37765,30029,30026,30055,30062,151426,16132,150803,30094,29789,30110,30132,30210,30252,30289,30287,30319,30326,156661,30352,33263,14328,157969,157966,30369,30373,30391,30412,159647,33890,151709,151933,138780,30494,30502,30528,25775,152096,30552,144044,30639,166244,166248,136897,30708,30729,136054,150034,26826,30895,30919,30931,38565,31022,153056,30935,31028,30897,161292,36792,34948,166699,155779,140828,31110,35072,26882,31104,153687,31133,162617,31036,31145,28202,160038,16040,31174,168205,31188],
  4337. "euc-kr":[44034,44035,44037,44038,44043,44044,44045,44046,44047,44056,44062,44063,44065,44066,44067,44069,44070,44071,44072,44073,44074,44075,44078,44082,44083,44084,null,null,null,null,null,null,44085,44086,44087,44090,44091,44093,44094,44095,44097,44098,44099,44100,44101,44102,44103,44104,44105,44106,44108,44110,44111,44112,44113,44114,44115,44117,null,null,null,null,null,null,44118,44119,44121,44122,44123,44125,44126,44127,44128,44129,44130,44131,44132,44133,44134,44135,44136,44137,44138,44139,44140,44141,44142,44143,44146,44147,44149,44150,44153,44155,44156,44157,44158,44159,44162,44167,44168,44173,44174,44175,44177,44178,44179,44181,44182,44183,44184,44185,44186,44187,44190,44194,44195,44196,44197,44198,44199,44203,44205,44206,44209,44210,44211,44212,44213,44214,44215,44218,44222,44223,44224,44226,44227,44229,44230,44231,44233,44234,44235,44237,44238,44239,44240,44241,44242,44243,44244,44246,44248,44249,44250,44251,44252,44253,44254,44255,44258,44259,44261,44262,44265,44267,44269,44270,44274,44276,44279,44280,44281,44282,44283,44286,44287,44289,44290,44291,44293,44295,44296,44297,44298,44299,44302,44304,44306,44307,44308,44309,44310,44311,44313,44314,44315,44317,44318,44319,44321,44322,44323,44324,44325,44326,44327,44328,44330,44331,44334,44335,44336,44337,44338,44339,null,null,null,null,null,null,44342,44343,44345,44346,44347,44349,44350,44351,44352,44353,44354,44355,44358,44360,44362,44363,44364,44365,44366,44367,44369,44370,44371,44373,44374,44375,null,null,null,null,null,null,44377,44378,44379,44380,44381,44382,44383,44384,44386,44388,44389,44390,44391,44392,44393,44394,44395,44398,44399,44401,44402,44407,44408,44409,44410,44414,44416,44419,44420,44421,44422,44423,44426,44427,44429,44430,44431,44433,44434,44435,44436,44437,44438,44439,44440,44441,44442,44443,44446,44447,44448,44449,44450,44451,44453,44454,44455,44456,44457,44458,44459,44460,44461,44462,44463,44464,44465,44466,44467,44468,44469,44470,44472,44473,44474,44475,44476,44477,44478,44479,44482,44483,44485,44486,44487,44489,44490,44491,44492,44493,44494,44495,44498,44500,44501,44502,44503,44504,44505,44506,44507,44509,44510,44511,44513,44514,44515,44517,44518,44519,44520,44521,44522,44523,44524,44525,44526,44527,44528,44529,44530,44531,44532,44533,44534,44535,44538,44539,44541,44542,44546,44547,44548,44549,44550,44551,44554,44556,44558,44559,44560,44561,44562,44563,44565,44566,44567,44568,44569,44570,44571,44572,null,null,null,null,null,null,44573,44574,44575,44576,44577,44578,44579,44580,44581,44582,44583,44584,44585,44586,44587,44588,44589,44590,44591,44594,44595,44597,44598,44601,44603,44604,null,null,null,null,null,null,44605,44606,44607,44610,44612,44615,44616,44617,44619,44623,44625,44626,44627,44629,44631,44632,44633,44634,44635,44638,44642,44643,44644,44646,44647,44650,44651,44653,44654,44655,44657,44658,44659,44660,44661,44662,44663,44666,44670,44671,44672,44673,44674,44675,44678,44679,44680,44681,44682,44683,44685,44686,44687,44688,44689,44690,44691,44692,44693,44694,44695,44696,44697,44698,44699,44700,44701,44702,44703,44704,44705,44706,44707,44708,44709,44710,44711,44712,44713,44714,44715,44716,44717,44718,44719,44720,44721,44722,44723,44724,44725,44726,44727,44728,44729,44730,44731,44735,44737,44738,44739,44741,44742,44743,44744,44745,44746,44747,44750,44754,44755,44756,44757,44758,44759,44762,44763,44765,44766,44767,44768,44769,44770,44771,44772,44773,44774,44775,44777,44778,44780,44782,44783,44784,44785,44786,44787,44789,44790,44791,44793,44794,44795,44797,44798,44799,44800,44801,44802,44803,44804,44805,null,null,null,null,null,null,44806,44809,44810,44811,44812,44814,44815,44817,44818,44819,44820,44821,44822,44823,44824,44825,44826,44827,44828,44829,44830,44831,44832,44833,44834,44835,null,null,null,null,null,null,44836,44837,44838,44839,44840,44841,44842,44843,44846,44847,44849,44851,44853,44854,44855,44856,44857,44858,44859,44862,44864,44868,44869,44870,44871,44874,44875,44876,44877,44878,44879,44881,44882,44883,44884,44885,44886,44887,44888,44889,44890,44891,44894,44895,44896,44897,44898,44899,44902,44903,44904,44905,44906,44907,44908,44909,44910,44911,44912,44913,44914,44915,44916,44917,44918,44919,44920,44922,44923,44924,44925,44926,44927,44929,44930,44931,44933,44934,44935,44937,44938,44939,44940,44941,44942,44943,44946,44947,44948,44950,44951,44952,44953,44954,44955,44957,44958,44959,44960,44961,44962,44963,44964,44965,44966,44967,44968,44969,44970,44971,44972,44973,44974,44975,44976,44977,44978,44979,44980,44981,44982,44983,44986,44987,44989,44990,44991,44993,44994,44995,44996,44997,44998,45002,45004,45007,45008,45009,45010,45011,45013,45014,45015,45016,45017,45018,45019,45021,45022,45023,45024,45025,null,null,null,null,null,null,45026,45027,45028,45029,45030,45031,45034,45035,45036,45037,45038,45039,45042,45043,45045,45046,45047,45049,45050,45051,45052,45053,45054,45055,45058,45059,null,null,null,null,null,null,45061,45062,45063,45064,45065,45066,45067,45069,45070,45071,45073,45074,45075,45077,45078,45079,45080,45081,45082,45083,45086,45087,45088,45089,45090,45091,45092,45093,45094,45095,45097,45098,45099,45100,45101,45102,45103,45104,45105,45106,45107,45108,45109,45110,45111,45112,45113,45114,45115,45116,45117,45118,45119,45120,45121,45122,45123,45126,45127,45129,45131,45133,45135,45136,45137,45138,45142,45144,45146,45147,45148,45150,45151,45152,45153,45154,45155,45156,45157,45158,45159,45160,45161,45162,45163,45164,45165,45166,45167,45168,45169,45170,45171,45172,45173,45174,45175,45176,45177,45178,45179,45182,45183,45185,45186,45187,45189,45190,45191,45192,45193,45194,45195,45198,45200,45202,45203,45204,45205,45206,45207,45211,45213,45214,45219,45220,45221,45222,45223,45226,45232,45234,45238,45239,45241,45242,45243,45245,45246,45247,45248,45249,45250,45251,45254,45258,45259,45260,45261,45262,45263,45266,null,null,null,null,null,null,45267,45269,45270,45271,45273,45274,45275,45276,45277,45278,45279,45281,45282,45283,45284,45286,45287,45288,45289,45290,45291,45292,45293,45294,45295,45296,null,null,null,null,null,null,45297,45298,45299,45300,45301,45302,45303,45304,45305,45306,45307,45308,45309,45310,45311,45312,45313,45314,45315,45316,45317,45318,45319,45322,45325,45326,45327,45329,45332,45333,45334,45335,45338,45342,45343,45344,45345,45346,45350,45351,45353,45354,45355,45357,45358,45359,45360,45361,45362,45363,45366,45370,45371,45372,45373,45374,45375,45378,45379,45381,45382,45383,45385,45386,45387,45388,45389,45390,45391,45394,45395,45398,45399,45401,45402,45403,45405,45406,45407,45409,45410,45411,45412,45413,45414,45415,45416,45417,45418,45419,45420,45421,45422,45423,45424,45425,45426,45427,45428,45429,45430,45431,45434,45435,45437,45438,45439,45441,45443,45444,45445,45446,45447,45450,45452,45454,45455,45456,45457,45461,45462,45463,45465,45466,45467,45469,45470,45471,45472,45473,45474,45475,45476,45477,45478,45479,45481,45482,45483,45484,45485,45486,45487,45488,45489,45490,45491,45492,45493,45494,45495,45496,null,null,null,null,null,null,45497,45498,45499,45500,45501,45502,45503,45504,45505,45506,45507,45508,45509,45510,45511,45512,45513,45514,45515,45517,45518,45519,45521,45522,45523,45525,null,null,null,null,null,null,45526,45527,45528,45529,45530,45531,45534,45536,45537,45538,45539,45540,45541,45542,45543,45546,45547,45549,45550,45551,45553,45554,45555,45556,45557,45558,45559,45560,45562,45564,45566,45567,45568,45569,45570,45571,45574,45575,45577,45578,45581,45582,45583,45584,45585,45586,45587,45590,45592,45594,45595,45596,45597,45598,45599,45601,45602,45603,45604,45605,45606,45607,45608,45609,45610,45611,45612,45613,45614,45615,45616,45617,45618,45619,45621,45622,45623,45624,45625,45626,45627,45629,45630,45631,45632,45633,45634,45635,45636,45637,45638,45639,45640,45641,45642,45643,45644,45645,45646,45647,45648,45649,45650,45651,45652,45653,45654,45655,45657,45658,45659,45661,45662,45663,45665,45666,45667,45668,45669,45670,45671,45674,45675,45676,45677,45678,45679,45680,45681,45682,45683,45686,45687,45688,45689,45690,45691,45693,45694,45695,45696,45697,45698,45699,45702,45703,45704,45706,45707,45708,45709,45710,null,null,null,null,null,null,45711,45714,45715,45717,45718,45719,45723,45724,45725,45726,45727,45730,45732,45735,45736,45737,45739,45741,45742,45743,45745,45746,45747,45749,45750,45751,null,null,null,null,null,null,45752,45753,45754,45755,45756,45757,45758,45759,45760,45761,45762,45763,45764,45765,45766,45767,45770,45771,45773,45774,45775,45777,45779,45780,45781,45782,45783,45786,45788,45790,45791,45792,45793,45795,45799,45801,45802,45808,45809,45810,45814,45820,45821,45822,45826,45827,45829,45830,45831,45833,45834,45835,45836,45837,45838,45839,45842,45846,45847,45848,45849,45850,45851,45853,45854,45855,45856,45857,45858,45859,45860,45861,45862,45863,45864,45865,45866,45867,45868,45869,45870,45871,45872,45873,45874,45875,45876,45877,45878,45879,45880,45881,45882,45883,45884,45885,45886,45887,45888,45889,45890,45891,45892,45893,45894,45895,45896,45897,45898,45899,45900,45901,45902,45903,45904,45905,45906,45907,45911,45913,45914,45917,45920,45921,45922,45923,45926,45928,45930,45932,45933,45935,45938,45939,45941,45942,45943,45945,45946,45947,45948,45949,45950,45951,45954,45958,45959,45960,45961,45962,45963,45965,null,null,null,null,null,null,45966,45967,45969,45970,45971,45973,45974,45975,45976,45977,45978,45979,45980,45981,45982,45983,45986,45987,45988,45989,45990,45991,45993,45994,45995,45997,null,null,null,null,null,null,45998,45999,46000,46001,46002,46003,46004,46005,46006,46007,46008,46009,46010,46011,46012,46013,46014,46015,46016,46017,46018,46019,46022,46023,46025,46026,46029,46031,46033,46034,46035,46038,46040,46042,46044,46046,46047,46049,46050,46051,46053,46054,46055,46057,46058,46059,46060,46061,46062,46063,46064,46065,46066,46067,46068,46069,46070,46071,46072,46073,46074,46075,46077,46078,46079,46080,46081,46082,46083,46084,46085,46086,46087,46088,46089,46090,46091,46092,46093,46094,46095,46097,46098,46099,46100,46101,46102,46103,46105,46106,46107,46109,46110,46111,46113,46114,46115,46116,46117,46118,46119,46122,46124,46125,46126,46127,46128,46129,46130,46131,46133,46134,46135,46136,46137,46138,46139,46140,46141,46142,46143,46144,46145,46146,46147,46148,46149,46150,46151,46152,46153,46154,46155,46156,46157,46158,46159,46162,46163,46165,46166,46167,46169,46170,46171,46172,46173,46174,46175,46178,46180,46182,null,null,null,null,null,null,46183,46184,46185,46186,46187,46189,46190,46191,46192,46193,46194,46195,46196,46197,46198,46199,46200,46201,46202,46203,46204,46205,46206,46207,46209,46210,null,null,null,null,null,null,46211,46212,46213,46214,46215,46217,46218,46219,46220,46221,46222,46223,46224,46225,46226,46227,46228,46229,46230,46231,46232,46233,46234,46235,46236,46238,46239,46240,46241,46242,46243,46245,46246,46247,46249,46250,46251,46253,46254,46255,46256,46257,46258,46259,46260,46262,46264,46266,46267,46268,46269,46270,46271,46273,46274,46275,46277,46278,46279,46281,46282,46283,46284,46285,46286,46287,46289,46290,46291,46292,46294,46295,46296,46297,46298,46299,46302,46303,46305,46306,46309,46311,46312,46313,46314,46315,46318,46320,46322,46323,46324,46325,46326,46327,46329,46330,46331,46332,46333,46334,46335,46336,46337,46338,46339,46340,46341,46342,46343,46344,46345,46346,46347,46348,46349,46350,46351,46352,46353,46354,46355,46358,46359,46361,46362,46365,46366,46367,46368,46369,46370,46371,46374,46379,46380,46381,46382,46383,46386,46387,46389,46390,46391,46393,46394,46395,46396,46397,46398,46399,46402,46406,null,null,null,null,null,null,46407,46408,46409,46410,46414,46415,46417,46418,46419,46421,46422,46423,46424,46425,46426,46427,46430,46434,46435,46436,46437,46438,46439,46440,46441,46442,null,null,null,null,null,null,46443,46444,46445,46446,46447,46448,46449,46450,46451,46452,46453,46454,46455,46456,46457,46458,46459,46460,46461,46462,46463,46464,46465,46466,46467,46468,46469,46470,46471,46472,46473,46474,46475,46476,46477,46478,46479,46480,46481,46482,46483,46484,46485,46486,46487,46488,46489,46490,46491,46492,46493,46494,46495,46498,46499,46501,46502,46503,46505,46508,46509,46510,46511,46514,46518,46519,46520,46521,46522,46526,46527,46529,46530,46531,46533,46534,46535,46536,46537,46538,46539,46542,46546,46547,46548,46549,46550,46551,46553,46554,46555,46556,46557,46558,46559,46560,46561,46562,46563,46564,46565,46566,46567,46568,46569,46570,46571,46573,46574,46575,46576,46577,46578,46579,46580,46581,46582,46583,46584,46585,46586,46587,46588,46589,46590,46591,46592,46593,46594,46595,46596,46597,46598,46599,46600,46601,46602,46603,46604,46605,46606,46607,46610,46611,46613,46614,46615,46617,46618,46619,46620,46621,null,null,null,null,null,null,46622,46623,46624,46625,46626,46627,46628,46630,46631,46632,46633,46634,46635,46637,46638,46639,46640,46641,46642,46643,46645,46646,46647,46648,46649,46650,null,null,null,null,null,null,46651,46652,46653,46654,46655,46656,46657,46658,46659,46660,46661,46662,46663,46665,46666,46667,46668,46669,46670,46671,46672,46673,46674,46675,46676,46677,46678,46679,46680,46681,46682,46683,46684,46685,46686,46687,46688,46689,46690,46691,46693,46694,46695,46697,46698,46699,46700,46701,46702,46703,46704,46705,46706,46707,46708,46709,46710,46711,46712,46713,46714,46715,46716,46717,46718,46719,46720,46721,46722,46723,46724,46725,46726,46727,46728,46729,46730,46731,46732,46733,46734,46735,46736,46737,46738,46739,46740,46741,46742,46743,46744,46745,46746,46747,46750,46751,46753,46754,46755,46757,46758,46759,46760,46761,46762,46765,46766,46767,46768,46770,46771,46772,46773,46774,46775,46776,46777,46778,46779,46780,46781,46782,46783,46784,46785,46786,46787,46788,46789,46790,46791,46792,46793,46794,46795,46796,46797,46798,46799,46800,46801,46802,46803,46805,46806,46807,46808,46809,46810,46811,46812,46813,null,null,null,null,null,null,46814,46815,46816,46817,46818,46819,46820,46821,46822,46823,46824,46825,46826,46827,46828,46829,46830,46831,46833,46834,46835,46837,46838,46839,46841,46842,null,null,null,null,null,null,46843,46844,46845,46846,46847,46850,46851,46852,46854,46855,46856,46857,46858,46859,46860,46861,46862,46863,46864,46865,46866,46867,46868,46869,46870,46871,46872,46873,46874,46875,46876,46877,46878,46879,46880,46881,46882,46883,46884,46885,46886,46887,46890,46891,46893,46894,46897,46898,46899,46900,46901,46902,46903,46906,46908,46909,46910,46911,46912,46913,46914,46915,46917,46918,46919,46921,46922,46923,46925,46926,46927,46928,46929,46930,46931,46934,46935,46936,46937,46938,46939,46940,46941,46942,46943,46945,46946,46947,46949,46950,46951,46953,46954,46955,46956,46957,46958,46959,46962,46964,46966,46967,46968,46969,46970,46971,46974,46975,46977,46978,46979,46981,46982,46983,46984,46985,46986,46987,46990,46995,46996,46997,47002,47003,47005,47006,47007,47009,47010,47011,47012,47013,47014,47015,47018,47022,47023,47024,47025,47026,47027,47030,47031,47033,47034,47035,47036,47037,47038,47039,47040,47041,null,null,null,null,null,null,47042,47043,47044,47045,47046,47048,47050,47051,47052,47053,47054,47055,47056,47057,47058,47059,47060,47061,47062,47063,47064,47065,47066,47067,47068,47069,null,null,null,null,null,null,47070,47071,47072,47073,47074,47075,47076,47077,47078,47079,47080,47081,47082,47083,47086,47087,47089,47090,47091,47093,47094,47095,47096,47097,47098,47099,47102,47106,47107,47108,47109,47110,47114,47115,47117,47118,47119,47121,47122,47123,47124,47125,47126,47127,47130,47132,47134,47135,47136,47137,47138,47139,47142,47143,47145,47146,47147,47149,47150,47151,47152,47153,47154,47155,47158,47162,47163,47164,47165,47166,47167,47169,47170,47171,47173,47174,47175,47176,47177,47178,47179,47180,47181,47182,47183,47184,47186,47188,47189,47190,47191,47192,47193,47194,47195,47198,47199,47201,47202,47203,47205,47206,47207,47208,47209,47210,47211,47214,47216,47218,47219,47220,47221,47222,47223,47225,47226,47227,47229,47230,47231,47232,47233,47234,47235,47236,47237,47238,47239,47240,47241,47242,47243,47244,47246,47247,47248,47249,47250,47251,47252,47253,47254,47255,47256,47257,47258,47259,47260,47261,47262,47263,null,null,null,null,null,null,47264,47265,47266,47267,47268,47269,47270,47271,47273,47274,47275,47276,47277,47278,47279,47281,47282,47283,47285,47286,47287,47289,47290,47291,47292,47293,null,null,null,null,null,null,47294,47295,47298,47300,47302,47303,47304,47305,47306,47307,47309,47310,47311,47313,47314,47315,47317,47318,47319,47320,47321,47322,47323,47324,47326,47328,47330,47331,47332,47333,47334,47335,47338,47339,47341,47342,47343,47345,47346,47347,47348,47349,47350,47351,47354,47356,47358,47359,47360,47361,47362,47363,47365,47366,47367,47368,47369,47370,47371,47372,47373,47374,47375,47376,47377,47378,47379,47380,47381,47382,47383,47385,47386,47387,47388,47389,47390,47391,47393,47394,47395,47396,47397,47398,47399,47400,47401,47402,47403,47404,47405,47406,47407,47408,47409,47410,47411,47412,47413,47414,47415,47416,47417,47418,47419,47422,47423,47425,47426,47427,47429,47430,47431,47432,47433,47434,47435,47437,47438,47440,47442,47443,47444,47445,47446,47447,47450,47451,47453,47454,47455,47457,47458,47459,47460,47461,47462,47463,47466,47468,47470,47471,47472,47473,47474,47475,47478,47479,47481,47482,47483,47485,null,null,null,null,null,null,47486,47487,47488,47489,47490,47491,47494,47496,47499,47500,47503,47504,47505,47506,47507,47508,47509,47510,47511,47512,47513,47514,47515,47516,47517,47518,null,null,null,null,null,null,47519,47520,47521,47522,47523,47524,47525,47526,47527,47528,47529,47530,47531,47534,47535,47537,47538,47539,47541,47542,47543,47544,47545,47546,47547,47550,47552,47554,47555,47556,47557,47558,47559,47562,47563,47565,47571,47572,47573,47574,47575,47578,47580,47583,47584,47586,47590,47591,47593,47594,47595,47597,47598,47599,47600,47601,47602,47603,47606,47611,47612,47613,47614,47615,47618,47619,47620,47621,47622,47623,47625,47626,47627,47628,47629,47630,47631,47632,47633,47634,47635,47636,47638,47639,47640,47641,47642,47643,47644,47645,47646,47647,47648,47649,47650,47651,47652,47653,47654,47655,47656,47657,47658,47659,47660,47661,47662,47663,47664,47665,47666,47667,47668,47669,47670,47671,47674,47675,47677,47678,47679,47681,47683,47684,47685,47686,47687,47690,47692,47695,47696,47697,47698,47702,47703,47705,47706,47707,47709,47710,47711,47712,47713,47714,47715,47718,47722,47723,47724,47725,47726,47727,null,null,null,null,null,null,47730,47731,47733,47734,47735,47737,47738,47739,47740,47741,47742,47743,47744,47745,47746,47750,47752,47753,47754,47755,47757,47758,47759,47760,47761,47762,null,null,null,null,null,null,47763,47764,47765,47766,47767,47768,47769,47770,47771,47772,47773,47774,47775,47776,47777,47778,47779,47780,47781,47782,47783,47786,47789,47790,47791,47793,47795,47796,47797,47798,47799,47802,47804,47806,47807,47808,47809,47810,47811,47813,47814,47815,47817,47818,47819,47820,47821,47822,47823,47824,47825,47826,47827,47828,47829,47830,47831,47834,47835,47836,47837,47838,47839,47840,47841,47842,47843,47844,47845,47846,47847,47848,47849,47850,47851,47852,47853,47854,47855,47856,47857,47858,47859,47860,47861,47862,47863,47864,47865,47866,47867,47869,47870,47871,47873,47874,47875,47877,47878,47879,47880,47881,47882,47883,47884,47886,47888,47890,47891,47892,47893,47894,47895,47897,47898,47899,47901,47902,47903,47905,47906,47907,47908,47909,47910,47911,47912,47914,47916,47917,47918,47919,47920,47921,47922,47923,47927,47929,47930,47935,47936,47937,47938,47939,47942,47944,47946,47947,47948,47950,47953,47954,null,null,null,null,null,null,47955,47957,47958,47959,47961,47962,47963,47964,47965,47966,47967,47968,47970,47972,47973,47974,47975,47976,47977,47978,47979,47981,47982,47983,47984,47985,null,null,null,null,null,null,47986,47987,47988,47989,47990,47991,47992,47993,47994,47995,47996,47997,47998,47999,48000,48001,48002,48003,48004,48005,48006,48007,48009,48010,48011,48013,48014,48015,48017,48018,48019,48020,48021,48022,48023,48024,48025,48026,48027,48028,48029,48030,48031,48032,48033,48034,48035,48037,48038,48039,48041,48042,48043,48045,48046,48047,48048,48049,48050,48051,48053,48054,48056,48057,48058,48059,48060,48061,48062,48063,48065,48066,48067,48069,48070,48071,48073,48074,48075,48076,48077,48078,48079,48081,48082,48084,48085,48086,48087,48088,48089,48090,48091,48092,48093,48094,48095,48096,48097,48098,48099,48100,48101,48102,48103,48104,48105,48106,48107,48108,48109,48110,48111,48112,48113,48114,48115,48116,48117,48118,48119,48122,48123,48125,48126,48129,48131,48132,48133,48134,48135,48138,48142,48144,48146,48147,48153,48154,48160,48161,48162,48163,48166,48168,48170,48171,48172,48174,48175,48178,48179,48181,null,null,null,null,null,null,48182,48183,48185,48186,48187,48188,48189,48190,48191,48194,48198,48199,48200,48202,48203,48206,48207,48209,48210,48211,48212,48213,48214,48215,48216,48217,null,null,null,null,null,null,48218,48219,48220,48222,48223,48224,48225,48226,48227,48228,48229,48230,48231,48232,48233,48234,48235,48236,48237,48238,48239,48240,48241,48242,48243,48244,48245,48246,48247,48248,48249,48250,48251,48252,48253,48254,48255,48256,48257,48258,48259,48262,48263,48265,48266,48269,48271,48272,48273,48274,48275,48278,48280,48283,48284,48285,48286,48287,48290,48291,48293,48294,48297,48298,48299,48300,48301,48302,48303,48306,48310,48311,48312,48313,48314,48315,48318,48319,48321,48322,48323,48325,48326,48327,48328,48329,48330,48331,48332,48334,48338,48339,48340,48342,48343,48345,48346,48347,48349,48350,48351,48352,48353,48354,48355,48356,48357,48358,48359,48360,48361,48362,48363,48364,48365,48366,48367,48368,48369,48370,48371,48375,48377,48378,48379,48381,48382,48383,48384,48385,48386,48387,48390,48392,48394,48395,48396,48397,48398,48399,48401,48402,48403,48405,48406,48407,48408,48409,48410,48411,48412,48413,null,null,null,null,null,null,48414,48415,48416,48417,48418,48419,48421,48422,48423,48424,48425,48426,48427,48429,48430,48431,48432,48433,48434,48435,48436,48437,48438,48439,48440,48441,null,null,null,null,null,null,48442,48443,48444,48445,48446,48447,48449,48450,48451,48452,48453,48454,48455,48458,48459,48461,48462,48463,48465,48466,48467,48468,48469,48470,48471,48474,48475,48476,48477,48478,48479,48480,48481,48482,48483,48485,48486,48487,48489,48490,48491,48492,48493,48494,48495,48496,48497,48498,48499,48500,48501,48502,48503,48504,48505,48506,48507,48508,48509,48510,48511,48514,48515,48517,48518,48523,48524,48525,48526,48527,48530,48532,48534,48535,48536,48539,48541,48542,48543,48544,48545,48546,48547,48549,48550,48551,48552,48553,48554,48555,48556,48557,48558,48559,48561,48562,48563,48564,48565,48566,48567,48569,48570,48571,48572,48573,48574,48575,48576,48577,48578,48579,48580,48581,48582,48583,48584,48585,48586,48587,48588,48589,48590,48591,48592,48593,48594,48595,48598,48599,48601,48602,48603,48605,48606,48607,48608,48609,48610,48611,48612,48613,48614,48615,48616,48618,48619,48620,48621,48622,48623,48625,null,null,null,null,null,null,48626,48627,48629,48630,48631,48633,48634,48635,48636,48637,48638,48639,48641,48642,48644,48646,48647,48648,48649,48650,48651,48654,48655,48657,48658,48659,null,null,null,null,null,null,48661,48662,48663,48664,48665,48666,48667,48670,48672,48673,48674,48675,48676,48677,48678,48679,48680,48681,48682,48683,48684,48685,48686,48687,48688,48689,48690,48691,48692,48693,48694,48695,48696,48697,48698,48699,48700,48701,48702,48703,48704,48705,48706,48707,48710,48711,48713,48714,48715,48717,48719,48720,48721,48722,48723,48726,48728,48732,48733,48734,48735,48738,48739,48741,48742,48743,48745,48747,48748,48749,48750,48751,48754,48758,48759,48760,48761,48762,48766,48767,48769,48770,48771,48773,48774,48775,48776,48777,48778,48779,48782,48786,48787,48788,48789,48790,48791,48794,48795,48796,48797,48798,48799,48800,48801,48802,48803,48804,48805,48806,48807,48809,48810,48811,48812,48813,48814,48815,48816,48817,48818,48819,48820,48821,48822,48823,48824,48825,48826,48827,48828,48829,48830,48831,48832,48833,48834,48835,48836,48837,48838,48839,48840,48841,48842,48843,48844,48845,48846,48847,48850,48851,null,null,null,null,null,null,48853,48854,48857,48858,48859,48860,48861,48862,48863,48865,48866,48870,48871,48872,48873,48874,48875,48877,48878,48879,48880,48881,48882,48883,48884,48885,null,null,null,null,null,null,48886,48887,48888,48889,48890,48891,48892,48893,48894,48895,48896,48898,48899,48900,48901,48902,48903,48906,48907,48908,48909,48910,48911,48912,48913,48914,48915,48916,48917,48918,48919,48922,48926,48927,48928,48929,48930,48931,48932,48933,48934,48935,48936,48937,48938,48939,48940,48941,48942,48943,48944,48945,48946,48947,48948,48949,48950,48951,48952,48953,48954,48955,48956,48957,48958,48959,48962,48963,48965,48966,48967,48969,48970,48971,48972,48973,48974,48975,48978,48979,48980,48982,48983,48984,48985,48986,48987,48988,48989,48990,48991,48992,48993,48994,48995,48996,48997,48998,48999,49000,49001,49002,49003,49004,49005,49006,49007,49008,49009,49010,49011,49012,49013,49014,49015,49016,49017,49018,49019,49020,49021,49022,49023,49024,49025,49026,49027,49028,49029,49030,49031,49032,49033,49034,49035,49036,49037,49038,49039,49040,49041,49042,49043,49045,49046,49047,49048,49049,49050,49051,49052,49053,null,null,null,null,null,null,49054,49055,49056,49057,49058,49059,49060,49061,49062,49063,49064,49065,49066,49067,49068,49069,49070,49071,49073,49074,49075,49076,49077,49078,49079,49080,null,null,null,null,null,null,49081,49082,49083,49084,49085,49086,49087,49088,49089,49090,49091,49092,49094,49095,49096,49097,49098,49099,49102,49103,49105,49106,49107,49109,49110,49111,49112,49113,49114,49115,49117,49118,49120,49122,49123,49124,49125,49126,49127,49128,49129,49130,49131,49132,49133,49134,49135,49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151,49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167,49168,49169,49170,49171,49172,49173,49174,49175,49176,49177,49178,49179,49180,49181,49182,49183,49184,49185,49186,49187,49188,49189,49190,49191,49192,49193,49194,49195,49196,49197,49198,49199,49200,49201,49202,49203,49204,49205,49206,49207,49208,49209,49210,49211,49213,49214,49215,49216,49217,49218,49219,49220,49221,49222,49223,49224,49225,49226,49227,49228,49229,49230,49231,49232,49234,49235,49236,49237,49238,49239,49241,49242,49243,null,null,null,null,null,null,49245,49246,49247,49249,49250,49251,49252,49253,49254,49255,49258,49259,49260,49261,49262,49263,49264,49265,49266,49267,49268,49269,49270,49271,49272,49273,null,null,null,null,null,null,49274,49275,49276,49277,49278,49279,49280,49281,49282,49283,49284,49285,49286,49287,49288,49289,49290,49291,49292,49293,49294,49295,49298,49299,49301,49302,49303,49305,49306,49307,49308,49309,49310,49311,49314,49316,49318,49319,49320,49321,49322,49323,49326,49329,49330,49335,49336,49337,49338,49339,49342,49346,49347,49348,49350,49351,49354,49355,49357,49358,49359,49361,49362,49363,49364,49365,49366,49367,49370,49374,49375,49376,49377,49378,49379,49382,49383,49385,49386,49387,49389,49390,49391,49392,49393,49394,49395,49398,49400,49402,49403,49404,49405,49406,49407,49409,49410,49411,49413,49414,49415,49417,49418,49419,49420,49421,49422,49423,49425,49426,49427,49428,49430,49431,49432,49433,49434,49435,49441,49442,49445,49448,49449,49450,49451,49454,49458,49459,49460,49461,49463,49466,49467,49469,49470,49471,49473,49474,49475,49476,49477,49478,49479,49482,49486,49487,49488,49489,49490,49491,49494,49495,null,null,null,null,null,null,49497,49498,49499,49501,49502,49503,49504,49505,49506,49507,49510,49514,49515,49516,49517,49518,49519,49521,49522,49523,49525,49526,49527,49529,49530,49531,null,null,null,null,null,null,49532,49533,49534,49535,49536,49537,49538,49539,49540,49542,49543,49544,49545,49546,49547,49551,49553,49554,49555,49557,49559,49560,49561,49562,49563,49566,49568,49570,49571,49572,49574,49575,49578,49579,49581,49582,49583,49585,49586,49587,49588,49589,49590,49591,49592,49593,49594,49595,49596,49598,49599,49600,49601,49602,49603,49605,49606,49607,49609,49610,49611,49613,49614,49615,49616,49617,49618,49619,49621,49622,49625,49626,49627,49628,49629,49630,49631,49633,49634,49635,49637,49638,49639,49641,49642,49643,49644,49645,49646,49647,49650,49652,49653,49654,49655,49656,49657,49658,49659,49662,49663,49665,49666,49667,49669,49670,49671,49672,49673,49674,49675,49678,49680,49682,49683,49684,49685,49686,49687,49690,49691,49693,49694,49697,49698,49699,49700,49701,49702,49703,49706,49708,49710,49712,49715,49717,49718,49719,49720,49721,49722,49723,49724,49725,49726,49727,49728,49729,49730,49731,49732,49733,null,null,null,null,null,null,49734,49735,49737,49738,49739,49740,49741,49742,49743,49746,49747,49749,49750,49751,49753,49754,49755,49756,49757,49758,49759,49761,49762,49763,49764,49766,null,null,null,null,null,null,49767,49768,49769,49770,49771,49774,49775,49777,49778,49779,49781,49782,49783,49784,49785,49786,49787,49790,49792,49794,49795,49796,49797,49798,49799,49802,49803,49804,49805,49806,49807,49809,49810,49811,49812,49813,49814,49815,49817,49818,49820,49822,49823,49824,49825,49826,49827,49830,49831,49833,49834,49835,49838,49839,49840,49841,49842,49843,49846,49848,49850,49851,49852,49853,49854,49855,49856,49857,49858,49859,49860,49861,49862,49863,49864,49865,49866,49867,49868,49869,49870,49871,49872,49873,49874,49875,49876,49877,49878,49879,49880,49881,49882,49883,49886,49887,49889,49890,49893,49894,49895,49896,49897,49898,49902,49904,49906,49907,49908,49909,49911,49914,49917,49918,49919,49921,49922,49923,49924,49925,49926,49927,49930,49931,49934,49935,49936,49937,49938,49942,49943,49945,49946,49947,49949,49950,49951,49952,49953,49954,49955,49958,49959,49962,49963,49964,49965,49966,49967,49968,49969,49970,null,null,null,null,null,null,49971,49972,49973,49974,49975,49976,49977,49978,49979,49980,49981,49982,49983,49984,49985,49986,49987,49988,49990,49991,49992,49993,49994,49995,49996,49997,null,null,null,null,null,null,49998,49999,50000,50001,50002,50003,50004,50005,50006,50007,50008,50009,50010,50011,50012,50013,50014,50015,50016,50017,50018,50019,50020,50021,50022,50023,50026,50027,50029,50030,50031,50033,50035,50036,50037,50038,50039,50042,50043,50046,50047,50048,50049,50050,50051,50053,50054,50055,50057,50058,50059,50061,50062,50063,50064,50065,50066,50067,50068,50069,50070,50071,50072,50073,50074,50075,50076,50077,50078,50079,50080,50081,50082,50083,50084,50085,50086,50087,50088,50089,50090,50091,50092,50093,50094,50095,50096,50097,50098,50099,50100,50101,50102,50103,50104,50105,50106,50107,50108,50109,50110,50111,50113,50114,50115,50116,50117,50118,50119,50120,50121,50122,50123,50124,50125,50126,50127,50128,50129,50130,50131,50132,50133,50134,50135,50138,50139,50141,50142,50145,50147,50148,50149,50150,50151,50154,50155,50156,50158,50159,50160,50161,50162,50163,50166,50167,50169,50170,50171,50172,50173,50174,null,null,null,null,null,null,50175,50176,50177,50178,50179,50180,50181,50182,50183,50185,50186,50187,50188,50189,50190,50191,50193,50194,50195,50196,50197,50198,50199,50200,50201,50202,null,null,null,null,null,null,50203,50204,50205,50206,50207,50208,50209,50210,50211,50213,50214,50215,50216,50217,50218,50219,50221,50222,50223,50225,50226,50227,50229,50230,50231,50232,50233,50234,50235,50238,50239,50240,50241,50242,50243,50244,50245,50246,50247,50249,50250,50251,50252,50253,50254,50255,50256,50257,50258,50259,50260,50261,50262,50263,50264,50265,50266,50267,50268,50269,50270,50271,50272,50273,50274,50275,50278,50279,50281,50282,50283,50285,50286,50287,50288,50289,50290,50291,50294,50295,50296,50298,50299,50300,50301,50302,50303,50305,50306,50307,50308,50309,50310,50311,50312,50313,50314,50315,50316,50317,50318,50319,50320,50321,50322,50323,50325,50326,50327,50328,50329,50330,50331,50333,50334,50335,50336,50337,50338,50339,50340,50341,50342,50343,50344,50345,50346,50347,50348,50349,50350,50351,50352,50353,50354,50355,50356,50357,50358,50359,50361,50362,50363,50365,50366,50367,50368,50369,50370,50371,50372,50373,null,null,null,null,null,null,50374,50375,50376,50377,50378,50379,50380,50381,50382,50383,50384,50385,50386,50387,50388,50389,50390,50391,50392,50393,50394,50395,50396,50397,50398,50399,null,null,null,null,null,null,50400,50401,50402,50403,50404,50405,50406,50407,50408,50410,50411,50412,50413,50414,50415,50418,50419,50421,50422,50423,50425,50427,50428,50429,50430,50434,50435,50436,50437,50438,50439,50440,50441,50442,50443,50445,50446,50447,50449,50450,50451,50453,50454,50455,50456,50457,50458,50459,50461,50462,50463,50464,50465,50466,50467,50468,50469,50470,50471,50474,50475,50477,50478,50479,50481,50482,50483,50484,50485,50486,50487,50490,50492,50494,50495,50496,50497,50498,50499,50502,50503,50507,50511,50512,50513,50514,50518,50522,50523,50524,50527,50530,50531,50533,50534,50535,50537,50538,50539,50540,50541,50542,50543,50546,50550,50551,50552,50553,50554,50555,50558,50559,50561,50562,50563,50565,50566,50568,50569,50570,50571,50574,50576,50578,50579,50580,50582,50585,50586,50587,50589,50590,50591,50593,50594,50595,50596,50597,50598,50599,50600,50602,50603,50604,50605,50606,50607,50608,50609,50610,50611,50614,null,null,null,null,null,null,50615,50618,50623,50624,50625,50626,50627,50635,50637,50639,50642,50643,50645,50646,50647,50649,50650,50651,50652,50653,50654,50655,50658,50660,50662,50663,null,null,null,null,null,null,50664,50665,50666,50667,50671,50673,50674,50675,50677,50680,50681,50682,50683,50690,50691,50692,50697,50698,50699,50701,50702,50703,50705,50706,50707,50708,50709,50710,50711,50714,50717,50718,50719,50720,50721,50722,50723,50726,50727,50729,50730,50731,50735,50737,50738,50742,50744,50746,50748,50749,50750,50751,50754,50755,50757,50758,50759,50761,50762,50763,50764,50765,50766,50767,50770,50774,50775,50776,50777,50778,50779,50782,50783,50785,50786,50787,50788,50789,50790,50791,50792,50793,50794,50795,50797,50798,50800,50802,50803,50804,50805,50806,50807,50810,50811,50813,50814,50815,50817,50818,50819,50820,50821,50822,50823,50826,50828,50830,50831,50832,50833,50834,50835,50838,50839,50841,50842,50843,50845,50846,50847,50848,50849,50850,50851,50854,50856,50858,50859,50860,50861,50862,50863,50866,50867,50869,50870,50871,50875,50876,50877,50878,50879,50882,50884,50886,50887,50888,50889,50890,50891,50894,null,null,null,null,null,null,50895,50897,50898,50899,50901,50902,50903,50904,50905,50906,50907,50910,50911,50914,50915,50916,50917,50918,50919,50922,50923,50925,50926,50927,50929,50930,null,null,null,null,null,null,50931,50932,50933,50934,50935,50938,50939,50940,50942,50943,50944,50945,50946,50947,50950,50951,50953,50954,50955,50957,50958,50959,50960,50961,50962,50963,50966,50968,50970,50971,50972,50973,50974,50975,50978,50979,50981,50982,50983,50985,50986,50987,50988,50989,50990,50991,50994,50996,50998,51000,51001,51002,51003,51006,51007,51009,51010,51011,51013,51014,51015,51016,51017,51019,51022,51024,51033,51034,51035,51037,51038,51039,51041,51042,51043,51044,51045,51046,51047,51049,51050,51052,51053,51054,51055,51056,51057,51058,51059,51062,51063,51065,51066,51067,51071,51072,51073,51074,51078,51083,51084,51085,51087,51090,51091,51093,51097,51099,51100,51101,51102,51103,51106,51111,51112,51113,51114,51115,51118,51119,51121,51122,51123,51125,51126,51127,51128,51129,51130,51131,51134,51138,51139,51140,51141,51142,51143,51146,51147,51149,51151,51153,51154,51155,51156,51157,51158,51159,51161,51162,51163,51164,null,null,null,null,null,null,51166,51167,51168,51169,51170,51171,51173,51174,51175,51177,51178,51179,51181,51182,51183,51184,51185,51186,51187,51188,51189,51190,51191,51192,51193,51194,null,null,null,null,null,null,51195,51196,51197,51198,51199,51202,51203,51205,51206,51207,51209,51211,51212,51213,51214,51215,51218,51220,51223,51224,51225,51226,51227,51230,51231,51233,51234,51235,51237,51238,51239,51240,51241,51242,51243,51246,51248,51250,51251,51252,51253,51254,51255,51257,51258,51259,51261,51262,51263,51265,51266,51267,51268,51269,51270,51271,51274,51275,51278,51279,51280,51281,51282,51283,51285,51286,51287,51288,51289,51290,51291,51292,51293,51294,51295,51296,51297,51298,51299,51300,51301,51302,51303,51304,51305,51306,51307,51308,51309,51310,51311,51314,51315,51317,51318,51319,51321,51323,51324,51325,51326,51327,51330,51332,51336,51337,51338,51342,51343,51344,51345,51346,51347,51349,51350,51351,51352,51353,51354,51355,51356,51358,51360,51362,51363,51364,51365,51366,51367,51369,51370,51371,51372,51373,51374,51375,51376,51377,51378,51379,51380,51381,51382,51383,51384,51385,51386,51387,51390,51391,51392,51393,null,null,null,null,null,null,51394,51395,51397,51398,51399,51401,51402,51403,51405,51406,51407,51408,51409,51410,51411,51414,51416,51418,51419,51420,51421,51422,51423,51426,51427,51429,null,null,null,null,null,null,51430,51431,51432,51433,51434,51435,51436,51437,51438,51439,51440,51441,51442,51443,51444,51446,51447,51448,51449,51450,51451,51454,51455,51457,51458,51459,51463,51464,51465,51466,51467,51470,12288,12289,12290,183,8229,8230,168,12291,173,8213,8741,65340,8764,8216,8217,8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,177,215,247,8800,8804,8805,8734,8756,176,8242,8243,8451,8491,65504,65505,65509,9794,9792,8736,8869,8978,8706,8711,8801,8786,167,8251,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8594,8592,8593,8595,8596,12307,8810,8811,8730,8765,8733,8757,8747,8748,8712,8715,8838,8839,8834,8835,8746,8745,8743,8744,65506,51472,51474,51475,51476,51477,51478,51479,51481,51482,51483,51484,51485,51486,51487,51488,51489,51490,51491,51492,51493,51494,51495,51496,51497,51498,51499,null,null,null,null,null,null,51501,51502,51503,51504,51505,51506,51507,51509,51510,51511,51512,51513,51514,51515,51516,51517,51518,51519,51520,51521,51522,51523,51524,51525,51526,51527,null,null,null,null,null,null,51528,51529,51530,51531,51532,51533,51534,51535,51538,51539,51541,51542,51543,51545,51546,51547,51548,51549,51550,51551,51554,51556,51557,51558,51559,51560,51561,51562,51563,51565,51566,51567,8658,8660,8704,8707,180,65374,711,728,733,730,729,184,731,161,191,720,8750,8721,8719,164,8457,8240,9665,9664,9655,9654,9828,9824,9825,9829,9831,9827,8857,9672,9635,9680,9681,9618,9636,9637,9640,9639,9638,9641,9832,9743,9742,9756,9758,182,8224,8225,8597,8599,8601,8598,8600,9837,9833,9834,9836,12927,12828,8470,13255,8482,13250,13272,8481,8364,174,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,51569,51570,51571,51573,51574,51575,51576,51577,51578,51579,51581,51582,51583,51584,51585,51586,51587,51588,51589,51590,51591,51594,51595,51597,51598,51599,null,null,null,null,null,null,51601,51602,51603,51604,51605,51606,51607,51610,51612,51614,51615,51616,51617,51618,51619,51620,51621,51622,51623,51624,51625,51626,51627,51628,51629,51630,null,null,null,null,null,null,51631,51632,51633,51634,51635,51636,51637,51638,51639,51640,51641,51642,51643,51644,51645,51646,51647,51650,51651,51653,51654,51657,51659,51660,51661,51662,51663,51666,51668,51671,51672,51675,65281,65282,65283,65284,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65510,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65507,51678,51679,51681,51683,51685,51686,51688,51689,51690,51691,51694,51698,51699,51700,51701,51702,51703,51706,51707,51709,51710,51711,51713,51714,51715,51716,null,null,null,null,null,null,51717,51718,51719,51722,51726,51727,51728,51729,51730,51731,51733,51734,51735,51737,51738,51739,51740,51741,51742,51743,51744,51745,51746,51747,51748,51749,null,null,null,null,null,null,51750,51751,51752,51754,51755,51756,51757,51758,51759,51760,51761,51762,51763,51764,51765,51766,51767,51768,51769,51770,51771,51772,51773,51774,51775,51776,51777,51778,51779,51780,51781,51782,12593,12594,12595,12596,12597,12598,12599,12600,12601,12602,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12613,12614,12615,12616,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12630,12631,12632,12633,12634,12635,12636,12637,12638,12639,12640,12641,12642,12643,12644,12645,12646,12647,12648,12649,12650,12651,12652,12653,12654,12655,12656,12657,12658,12659,12660,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12674,12675,12676,12677,12678,12679,12680,12681,12682,12683,12684,12685,12686,51783,51784,51785,51786,51787,51790,51791,51793,51794,51795,51797,51798,51799,51800,51801,51802,51803,51806,51810,51811,51812,51813,51814,51815,51817,51818,null,null,null,null,null,null,51819,51820,51821,51822,51823,51824,51825,51826,51827,51828,51829,51830,51831,51832,51833,51834,51835,51836,51838,51839,51840,51841,51842,51843,51845,51846,null,null,null,null,null,null,51847,51848,51849,51850,51851,51852,51853,51854,51855,51856,51857,51858,51859,51860,51861,51862,51863,51865,51866,51867,51868,51869,51870,51871,51872,51873,51874,51875,51876,51877,51878,51879,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,null,null,null,null,null,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,null,null,null,null,null,null,null,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,null,null,null,null,null,null,null,null,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,null,null,null,null,null,null,51880,51881,51882,51883,51884,51885,51886,51887,51888,51889,51890,51891,51892,51893,51894,51895,51896,51897,51898,51899,51902,51903,51905,51906,51907,51909,null,null,null,null,null,null,51910,51911,51912,51913,51914,51915,51918,51920,51922,51924,51925,51926,51927,51930,51931,51932,51933,51934,51935,51937,51938,51939,51940,51941,51942,51943,null,null,null,null,null,null,51944,51945,51946,51947,51949,51950,51951,51952,51953,51954,51955,51957,51958,51959,51960,51961,51962,51963,51964,51965,51966,51967,51968,51969,51970,51971,51972,51973,51974,51975,51977,51978,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,9490,9489,9498,9497,9494,9493,9486,9485,9502,9503,9505,9506,9510,9511,9513,9514,9517,9518,9521,9522,9525,9526,9529,9530,9533,9534,9536,9537,9539,9540,9541,9542,9543,9544,9545,9546,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,51979,51980,51981,51982,51983,51985,51986,51987,51989,51990,51991,51993,51994,51995,51996,51997,51998,51999,52002,52003,52004,52005,52006,52007,52008,52009,null,null,null,null,null,null,52010,52011,52012,52013,52014,52015,52016,52017,52018,52019,52020,52021,52022,52023,52024,52025,52026,52027,52028,52029,52030,52031,52032,52034,52035,52036,null,null,null,null,null,null,52037,52038,52039,52042,52043,52045,52046,52047,52049,52050,52051,52052,52053,52054,52055,52058,52059,52060,52062,52063,52064,52065,52066,52067,52069,52070,52071,52072,52073,52074,52075,52076,13205,13206,13207,8467,13208,13252,13219,13220,13221,13222,13209,13210,13211,13212,13213,13214,13215,13216,13217,13218,13258,13197,13198,13199,13263,13192,13193,13256,13223,13224,13232,13233,13234,13235,13236,13237,13238,13239,13240,13241,13184,13185,13186,13187,13188,13242,13243,13244,13245,13246,13247,13200,13201,13202,13203,13204,8486,13248,13249,13194,13195,13196,13270,13253,13229,13230,13231,13275,13225,13226,13227,13228,13277,13264,13267,13251,13257,13276,13254,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52077,52078,52079,52080,52081,52082,52083,52084,52085,52086,52087,52090,52091,52092,52093,52094,52095,52096,52097,52098,52099,52100,52101,52102,52103,52104,null,null,null,null,null,null,52105,52106,52107,52108,52109,52110,52111,52112,52113,52114,52115,52116,52117,52118,52119,52120,52121,52122,52123,52125,52126,52127,52128,52129,52130,52131,null,null,null,null,null,null,52132,52133,52134,52135,52136,52137,52138,52139,52140,52141,52142,52143,52144,52145,52146,52147,52148,52149,52150,52151,52153,52154,52155,52156,52157,52158,52159,52160,52161,52162,52163,52164,198,208,170,294,null,306,null,319,321,216,338,186,222,358,330,null,12896,12897,12898,12899,12900,12901,12902,12903,12904,12905,12906,12907,12908,12909,12910,12911,12912,12913,12914,12915,12916,12917,12918,12919,12920,12921,12922,12923,9424,9425,9426,9427,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446,9447,9448,9449,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,189,8531,8532,188,190,8539,8540,8541,8542,52165,52166,52167,52168,52169,52170,52171,52172,52173,52174,52175,52176,52177,52178,52179,52181,52182,52183,52184,52185,52186,52187,52188,52189,52190,52191,null,null,null,null,null,null,52192,52193,52194,52195,52197,52198,52200,52202,52203,52204,52205,52206,52207,52208,52209,52210,52211,52212,52213,52214,52215,52216,52217,52218,52219,52220,null,null,null,null,null,null,52221,52222,52223,52224,52225,52226,52227,52228,52229,52230,52231,52232,52233,52234,52235,52238,52239,52241,52242,52243,52245,52246,52247,52248,52249,52250,52251,52254,52255,52256,52259,52260,230,273,240,295,305,307,312,320,322,248,339,223,254,359,331,329,12800,12801,12802,12803,12804,12805,12806,12807,12808,12809,12810,12811,12812,12813,12814,12815,12816,12817,12818,12819,12820,12821,12822,12823,12824,12825,12826,12827,9372,9373,9374,9375,9376,9377,9378,9379,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389,9390,9391,9392,9393,9394,9395,9396,9397,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,185,178,179,8308,8319,8321,8322,8323,8324,52261,52262,52266,52267,52269,52271,52273,52274,52275,52276,52277,52278,52279,52282,52287,52288,52289,52290,52291,52294,52295,52297,52298,52299,52301,52302,null,null,null,null,null,null,52303,52304,52305,52306,52307,52310,52314,52315,52316,52317,52318,52319,52321,52322,52323,52325,52327,52329,52330,52331,52332,52333,52334,52335,52337,52338,null,null,null,null,null,null,52339,52340,52342,52343,52344,52345,52346,52347,52348,52349,52350,52351,52352,52353,52354,52355,52356,52357,52358,52359,52360,52361,52362,52363,52364,52365,52366,52367,52368,52369,52370,52371,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,null,null,null,null,null,null,null,null,null,null,null,52372,52373,52374,52375,52378,52379,52381,52382,52383,52385,52386,52387,52388,52389,52390,52391,52394,52398,52399,52400,52401,52402,52403,52406,52407,52409,null,null,null,null,null,null,52410,52411,52413,52414,52415,52416,52417,52418,52419,52422,52424,52426,52427,52428,52429,52430,52431,52433,52434,52435,52437,52438,52439,52440,52441,52442,null,null,null,null,null,null,52443,52444,52445,52446,52447,52448,52449,52450,52451,52453,52454,52455,52456,52457,52458,52459,52461,52462,52463,52465,52466,52467,52468,52469,52470,52471,52472,52473,52474,52475,52476,52477,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,null,null,null,null,null,null,null,null,52478,52479,52480,52482,52483,52484,52485,52486,52487,52490,52491,52493,52494,52495,52497,52498,52499,52500,52501,52502,52503,52506,52508,52510,52511,52512,null,null,null,null,null,null,52513,52514,52515,52517,52518,52519,52521,52522,52523,52525,52526,52527,52528,52529,52530,52531,52532,52533,52534,52535,52536,52538,52539,52540,52541,52542,null,null,null,null,null,null,52543,52544,52545,52546,52547,52548,52549,52550,52551,52552,52553,52554,52555,52556,52557,52558,52559,52560,52561,52562,52563,52564,52565,52566,52567,52568,52569,52570,52571,52573,52574,52575,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,null,null,null,null,null,null,null,null,null,null,null,null,null,52577,52578,52579,52581,52582,52583,52584,52585,52586,52587,52590,52592,52594,52595,52596,52597,52598,52599,52601,52602,52603,52604,52605,52606,52607,52608,null,null,null,null,null,null,52609,52610,52611,52612,52613,52614,52615,52617,52618,52619,52620,52621,52622,52623,52624,52625,52626,52627,52630,52631,52633,52634,52635,52637,52638,52639,null,null,null,null,null,null,52640,52641,52642,52643,52646,52648,52650,52651,52652,52653,52654,52655,52657,52658,52659,52660,52661,52662,52663,52664,52665,52666,52667,52668,52669,52670,52671,52672,52673,52674,52675,52677,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52678,52679,52680,52681,52682,52683,52685,52686,52687,52689,52690,52691,52692,52693,52694,52695,52696,52697,52698,52699,52700,52701,52702,52703,52704,52705,null,null,null,null,null,null,52706,52707,52708,52709,52710,52711,52713,52714,52715,52717,52718,52719,52721,52722,52723,52724,52725,52726,52727,52730,52732,52734,52735,52736,52737,52738,null,null,null,null,null,null,52739,52741,52742,52743,52745,52746,52747,52749,52750,52751,52752,52753,52754,52755,52757,52758,52759,52760,52762,52763,52764,52765,52766,52767,52770,52771,52773,52774,52775,52777,52778,52779,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52780,52781,52782,52783,52786,52788,52790,52791,52792,52793,52794,52795,52796,52797,52798,52799,52800,52801,52802,52803,52804,52805,52806,52807,52808,52809,null,null,null,null,null,null,52810,52811,52812,52813,52814,52815,52816,52817,52818,52819,52820,52821,52822,52823,52826,52827,52829,52830,52834,52835,52836,52837,52838,52839,52842,52844,null,null,null,null,null,null,52846,52847,52848,52849,52850,52851,52854,52855,52857,52858,52859,52861,52862,52863,52864,52865,52866,52867,52870,52872,52874,52875,52876,52877,52878,52879,52882,52883,52885,52886,52887,52889,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52890,52891,52892,52893,52894,52895,52898,52902,52903,52904,52905,52906,52907,52910,52911,52912,52913,52914,52915,52916,52917,52918,52919,52920,52921,52922,null,null,null,null,null,null,52923,52924,52925,52926,52927,52928,52930,52931,52932,52933,52934,52935,52936,52937,52938,52939,52940,52941,52942,52943,52944,52945,52946,52947,52948,52949,null,null,null,null,null,null,52950,52951,52952,52953,52954,52955,52956,52957,52958,52959,52960,52961,52962,52963,52966,52967,52969,52970,52973,52974,52975,52976,52977,52978,52979,52982,52986,52987,52988,52989,52990,52991,44032,44033,44036,44039,44040,44041,44042,44048,44049,44050,44051,44052,44053,44054,44055,44057,44058,44059,44060,44061,44064,44068,44076,44077,44079,44080,44081,44088,44089,44092,44096,44107,44109,44116,44120,44124,44144,44145,44148,44151,44152,44154,44160,44161,44163,44164,44165,44166,44169,44170,44171,44172,44176,44180,44188,44189,44191,44192,44193,44200,44201,44202,44204,44207,44208,44216,44217,44219,44220,44221,44225,44228,44232,44236,44245,44247,44256,44257,44260,44263,44264,44266,44268,44271,44272,44273,44275,44277,44278,44284,44285,44288,44292,44294,52994,52995,52997,52998,52999,53001,53002,53003,53004,53005,53006,53007,53010,53012,53014,53015,53016,53017,53018,53019,53021,53022,53023,53025,53026,53027,null,null,null,null,null,null,53029,53030,53031,53032,53033,53034,53035,53038,53042,53043,53044,53045,53046,53047,53049,53050,53051,53052,53053,53054,53055,53056,53057,53058,53059,53060,null,null,null,null,null,null,53061,53062,53063,53064,53065,53066,53067,53068,53069,53070,53071,53072,53073,53074,53075,53078,53079,53081,53082,53083,53085,53086,53087,53088,53089,53090,53091,53094,53096,53098,53099,53100,44300,44301,44303,44305,44312,44316,44320,44329,44332,44333,44340,44341,44344,44348,44356,44357,44359,44361,44368,44372,44376,44385,44387,44396,44397,44400,44403,44404,44405,44406,44411,44412,44413,44415,44417,44418,44424,44425,44428,44432,44444,44445,44452,44471,44480,44481,44484,44488,44496,44497,44499,44508,44512,44516,44536,44537,44540,44543,44544,44545,44552,44553,44555,44557,44564,44592,44593,44596,44599,44600,44602,44608,44609,44611,44613,44614,44618,44620,44621,44622,44624,44628,44630,44636,44637,44639,44640,44641,44645,44648,44649,44652,44656,44664,53101,53102,53103,53106,53107,53109,53110,53111,53113,53114,53115,53116,53117,53118,53119,53121,53122,53123,53124,53126,53127,53128,53129,53130,53131,53133,null,null,null,null,null,null,53134,53135,53136,53137,53138,53139,53140,53141,53142,53143,53144,53145,53146,53147,53148,53149,53150,53151,53152,53154,53155,53156,53157,53158,53159,53161,null,null,null,null,null,null,53162,53163,53164,53165,53166,53167,53169,53170,53171,53172,53173,53174,53175,53176,53177,53178,53179,53180,53181,53182,53183,53184,53185,53186,53187,53189,53190,53191,53192,53193,53194,53195,44665,44667,44668,44669,44676,44677,44684,44732,44733,44734,44736,44740,44748,44749,44751,44752,44753,44760,44761,44764,44776,44779,44781,44788,44792,44796,44807,44808,44813,44816,44844,44845,44848,44850,44852,44860,44861,44863,44865,44866,44867,44872,44873,44880,44892,44893,44900,44901,44921,44928,44932,44936,44944,44945,44949,44956,44984,44985,44988,44992,44999,45000,45001,45003,45005,45006,45012,45020,45032,45033,45040,45041,45044,45048,45056,45057,45060,45068,45072,45076,45084,45085,45096,45124,45125,45128,45130,45132,45134,45139,45140,45141,45143,45145,53196,53197,53198,53199,53200,53201,53202,53203,53204,53205,53206,53207,53208,53209,53210,53211,53212,53213,53214,53215,53218,53219,53221,53222,53223,53225,null,null,null,null,null,null,53226,53227,53228,53229,53230,53231,53234,53236,53238,53239,53240,53241,53242,53243,53245,53246,53247,53249,53250,53251,53253,53254,53255,53256,53257,53258,null,null,null,null,null,null,53259,53260,53261,53262,53263,53264,53266,53267,53268,53269,53270,53271,53273,53274,53275,53276,53277,53278,53279,53280,53281,53282,53283,53284,53285,53286,53287,53288,53289,53290,53291,53292,45149,45180,45181,45184,45188,45196,45197,45199,45201,45208,45209,45210,45212,45215,45216,45217,45218,45224,45225,45227,45228,45229,45230,45231,45233,45235,45236,45237,45240,45244,45252,45253,45255,45256,45257,45264,45265,45268,45272,45280,45285,45320,45321,45323,45324,45328,45330,45331,45336,45337,45339,45340,45341,45347,45348,45349,45352,45356,45364,45365,45367,45368,45369,45376,45377,45380,45384,45392,45393,45396,45397,45400,45404,45408,45432,45433,45436,45440,45442,45448,45449,45451,45453,45458,45459,45460,45464,45468,45480,45516,45520,45524,45532,45533,53294,53295,53296,53297,53298,53299,53302,53303,53305,53306,53307,53309,53310,53311,53312,53313,53314,53315,53318,53320,53322,53323,53324,53325,53326,53327,null,null,null,null,null,null,53329,53330,53331,53333,53334,53335,53337,53338,53339,53340,53341,53342,53343,53345,53346,53347,53348,53349,53350,53351,53352,53353,53354,53355,53358,53359,null,null,null,null,null,null,53361,53362,53363,53365,53366,53367,53368,53369,53370,53371,53374,53375,53376,53378,53379,53380,53381,53382,53383,53384,53385,53386,53387,53388,53389,53390,53391,53392,53393,53394,53395,53396,45535,45544,45545,45548,45552,45561,45563,45565,45572,45573,45576,45579,45580,45588,45589,45591,45593,45600,45620,45628,45656,45660,45664,45672,45673,45684,45685,45692,45700,45701,45705,45712,45713,45716,45720,45721,45722,45728,45729,45731,45733,45734,45738,45740,45744,45748,45768,45769,45772,45776,45778,45784,45785,45787,45789,45794,45796,45797,45798,45800,45803,45804,45805,45806,45807,45811,45812,45813,45815,45816,45817,45818,45819,45823,45824,45825,45828,45832,45840,45841,45843,45844,45845,45852,45908,45909,45910,45912,45915,45916,45918,45919,45924,45925,53397,53398,53399,53400,53401,53402,53403,53404,53405,53406,53407,53408,53409,53410,53411,53414,53415,53417,53418,53419,53421,53422,53423,53424,53425,53426,null,null,null,null,null,null,53427,53430,53432,53434,53435,53436,53437,53438,53439,53442,53443,53445,53446,53447,53450,53451,53452,53453,53454,53455,53458,53462,53463,53464,53465,53466,null,null,null,null,null,null,53467,53470,53471,53473,53474,53475,53477,53478,53479,53480,53481,53482,53483,53486,53490,53491,53492,53493,53494,53495,53497,53498,53499,53500,53501,53502,53503,53504,53505,53506,53507,53508,45927,45929,45931,45934,45936,45937,45940,45944,45952,45953,45955,45956,45957,45964,45968,45972,45984,45985,45992,45996,46020,46021,46024,46027,46028,46030,46032,46036,46037,46039,46041,46043,46045,46048,46052,46056,46076,46096,46104,46108,46112,46120,46121,46123,46132,46160,46161,46164,46168,46176,46177,46179,46181,46188,46208,46216,46237,46244,46248,46252,46261,46263,46265,46272,46276,46280,46288,46293,46300,46301,46304,46307,46308,46310,46316,46317,46319,46321,46328,46356,46357,46360,46363,46364,46372,46373,46375,46376,46377,46378,46384,46385,46388,46392,53509,53510,53511,53512,53513,53514,53515,53516,53518,53519,53520,53521,53522,53523,53524,53525,53526,53527,53528,53529,53530,53531,53532,53533,53534,53535,null,null,null,null,null,null,53536,53537,53538,53539,53540,53541,53542,53543,53544,53545,53546,53547,53548,53549,53550,53551,53554,53555,53557,53558,53559,53561,53563,53564,53565,53566,null,null,null,null,null,null,53567,53570,53574,53575,53576,53577,53578,53579,53582,53583,53585,53586,53587,53589,53590,53591,53592,53593,53594,53595,53598,53600,53602,53603,53604,53605,53606,53607,53609,53610,53611,53613,46400,46401,46403,46404,46405,46411,46412,46413,46416,46420,46428,46429,46431,46432,46433,46496,46497,46500,46504,46506,46507,46512,46513,46515,46516,46517,46523,46524,46525,46528,46532,46540,46541,46543,46544,46545,46552,46572,46608,46609,46612,46616,46629,46636,46644,46664,46692,46696,46748,46749,46752,46756,46763,46764,46769,46804,46832,46836,46840,46848,46849,46853,46888,46889,46892,46895,46896,46904,46905,46907,46916,46920,46924,46932,46933,46944,46948,46952,46960,46961,46963,46965,46972,46973,46976,46980,46988,46989,46991,46992,46993,46994,46998,46999,53614,53615,53616,53617,53618,53619,53620,53621,53622,53623,53624,53625,53626,53627,53629,53630,53631,53632,53633,53634,53635,53637,53638,53639,53641,53642,null,null,null,null,null,null,53643,53644,53645,53646,53647,53648,53649,53650,53651,53652,53653,53654,53655,53656,53657,53658,53659,53660,53661,53662,53663,53666,53667,53669,53670,53671,null,null,null,null,null,null,53673,53674,53675,53676,53677,53678,53679,53682,53684,53686,53687,53688,53689,53691,53693,53694,53695,53697,53698,53699,53700,53701,53702,53703,53704,53705,53706,53707,53708,53709,53710,53711,47000,47001,47004,47008,47016,47017,47019,47020,47021,47028,47029,47032,47047,47049,47084,47085,47088,47092,47100,47101,47103,47104,47105,47111,47112,47113,47116,47120,47128,47129,47131,47133,47140,47141,47144,47148,47156,47157,47159,47160,47161,47168,47172,47185,47187,47196,47197,47200,47204,47212,47213,47215,47217,47224,47228,47245,47272,47280,47284,47288,47296,47297,47299,47301,47308,47312,47316,47325,47327,47329,47336,47337,47340,47344,47352,47353,47355,47357,47364,47384,47392,47420,47421,47424,47428,47436,47439,47441,47448,47449,47452,47456,47464,47465,53712,53713,53714,53715,53716,53717,53718,53719,53721,53722,53723,53724,53725,53726,53727,53728,53729,53730,53731,53732,53733,53734,53735,53736,53737,53738,null,null,null,null,null,null,53739,53740,53741,53742,53743,53744,53745,53746,53747,53749,53750,53751,53753,53754,53755,53756,53757,53758,53759,53760,53761,53762,53763,53764,53765,53766,null,null,null,null,null,null,53768,53770,53771,53772,53773,53774,53775,53777,53778,53779,53780,53781,53782,53783,53784,53785,53786,53787,53788,53789,53790,53791,53792,53793,53794,53795,53796,53797,53798,53799,53800,53801,47467,47469,47476,47477,47480,47484,47492,47493,47495,47497,47498,47501,47502,47532,47533,47536,47540,47548,47549,47551,47553,47560,47561,47564,47566,47567,47568,47569,47570,47576,47577,47579,47581,47582,47585,47587,47588,47589,47592,47596,47604,47605,47607,47608,47609,47610,47616,47617,47624,47637,47672,47673,47676,47680,47682,47688,47689,47691,47693,47694,47699,47700,47701,47704,47708,47716,47717,47719,47720,47721,47728,47729,47732,47736,47747,47748,47749,47751,47756,47784,47785,47787,47788,47792,47794,47800,47801,47803,47805,47812,47816,47832,47833,47868,53802,53803,53806,53807,53809,53810,53811,53813,53814,53815,53816,53817,53818,53819,53822,53824,53826,53827,53828,53829,53830,53831,53833,53834,53835,53836,null,null,null,null,null,null,53837,53838,53839,53840,53841,53842,53843,53844,53845,53846,53847,53848,53849,53850,53851,53853,53854,53855,53856,53857,53858,53859,53861,53862,53863,53864,null,null,null,null,null,null,53865,53866,53867,53868,53869,53870,53871,53872,53873,53874,53875,53876,53877,53878,53879,53880,53881,53882,53883,53884,53885,53886,53887,53890,53891,53893,53894,53895,53897,53898,53899,53900,47872,47876,47885,47887,47889,47896,47900,47904,47913,47915,47924,47925,47926,47928,47931,47932,47933,47934,47940,47941,47943,47945,47949,47951,47952,47956,47960,47969,47971,47980,48008,48012,48016,48036,48040,48044,48052,48055,48064,48068,48072,48080,48083,48120,48121,48124,48127,48128,48130,48136,48137,48139,48140,48141,48143,48145,48148,48149,48150,48151,48152,48155,48156,48157,48158,48159,48164,48165,48167,48169,48173,48176,48177,48180,48184,48192,48193,48195,48196,48197,48201,48204,48205,48208,48221,48260,48261,48264,48267,48268,48270,48276,48277,48279,53901,53902,53903,53906,53907,53908,53910,53911,53912,53913,53914,53915,53917,53918,53919,53921,53922,53923,53925,53926,53927,53928,53929,53930,53931,53933,null,null,null,null,null,null,53934,53935,53936,53938,53939,53940,53941,53942,53943,53946,53947,53949,53950,53953,53955,53956,53957,53958,53959,53962,53964,53965,53966,53967,53968,53969,null,null,null,null,null,null,53970,53971,53973,53974,53975,53977,53978,53979,53981,53982,53983,53984,53985,53986,53987,53990,53991,53992,53993,53994,53995,53996,53997,53998,53999,54002,54003,54005,54006,54007,54009,54010,48281,48282,48288,48289,48292,48295,48296,48304,48305,48307,48308,48309,48316,48317,48320,48324,48333,48335,48336,48337,48341,48344,48348,48372,48373,48374,48376,48380,48388,48389,48391,48393,48400,48404,48420,48428,48448,48456,48457,48460,48464,48472,48473,48484,48488,48512,48513,48516,48519,48520,48521,48522,48528,48529,48531,48533,48537,48538,48540,48548,48560,48568,48596,48597,48600,48604,48617,48624,48628,48632,48640,48643,48645,48652,48653,48656,48660,48668,48669,48671,48708,48709,48712,48716,48718,48724,48725,48727,48729,48730,48731,48736,48737,48740,54011,54012,54013,54014,54015,54018,54020,54022,54023,54024,54025,54026,54027,54031,54033,54034,54035,54037,54039,54040,54041,54042,54043,54046,54050,54051,null,null,null,null,null,null,54052,54054,54055,54058,54059,54061,54062,54063,54065,54066,54067,54068,54069,54070,54071,54074,54078,54079,54080,54081,54082,54083,54086,54087,54088,54089,null,null,null,null,null,null,54090,54091,54092,54093,54094,54095,54096,54097,54098,54099,54100,54101,54102,54103,54104,54105,54106,54107,54108,54109,54110,54111,54112,54113,54114,54115,54116,54117,54118,54119,54120,54121,48744,48746,48752,48753,48755,48756,48757,48763,48764,48765,48768,48772,48780,48781,48783,48784,48785,48792,48793,48808,48848,48849,48852,48855,48856,48864,48867,48868,48869,48876,48897,48904,48905,48920,48921,48923,48924,48925,48960,48961,48964,48968,48976,48977,48981,49044,49072,49093,49100,49101,49104,49108,49116,49119,49121,49212,49233,49240,49244,49248,49256,49257,49296,49297,49300,49304,49312,49313,49315,49317,49324,49325,49327,49328,49331,49332,49333,49334,49340,49341,49343,49344,49345,49349,49352,49353,49356,49360,49368,49369,49371,49372,49373,49380,54122,54123,54124,54125,54126,54127,54128,54129,54130,54131,54132,54133,54134,54135,54136,54137,54138,54139,54142,54143,54145,54146,54147,54149,54150,54151,null,null,null,null,null,null,54152,54153,54154,54155,54158,54162,54163,54164,54165,54166,54167,54170,54171,54173,54174,54175,54177,54178,54179,54180,54181,54182,54183,54186,54188,54190,null,null,null,null,null,null,54191,54192,54193,54194,54195,54197,54198,54199,54201,54202,54203,54205,54206,54207,54208,54209,54210,54211,54214,54215,54218,54219,54220,54221,54222,54223,54225,54226,54227,54228,54229,54230,49381,49384,49388,49396,49397,49399,49401,49408,49412,49416,49424,49429,49436,49437,49438,49439,49440,49443,49444,49446,49447,49452,49453,49455,49456,49457,49462,49464,49465,49468,49472,49480,49481,49483,49484,49485,49492,49493,49496,49500,49508,49509,49511,49512,49513,49520,49524,49528,49541,49548,49549,49550,49552,49556,49558,49564,49565,49567,49569,49573,49576,49577,49580,49584,49597,49604,49608,49612,49620,49623,49624,49632,49636,49640,49648,49649,49651,49660,49661,49664,49668,49676,49677,49679,49681,49688,49689,49692,49695,49696,49704,49705,49707,49709,54231,54233,54234,54235,54236,54237,54238,54239,54240,54242,54244,54245,54246,54247,54248,54249,54250,54251,54254,54255,54257,54258,54259,54261,54262,54263,null,null,null,null,null,null,54264,54265,54266,54267,54270,54272,54274,54275,54276,54277,54278,54279,54281,54282,54283,54284,54285,54286,54287,54288,54289,54290,54291,54292,54293,54294,null,null,null,null,null,null,54295,54296,54297,54298,54299,54300,54302,54303,54304,54305,54306,54307,54308,54309,54310,54311,54312,54313,54314,54315,54316,54317,54318,54319,54320,54321,54322,54323,54324,54325,54326,54327,49711,49713,49714,49716,49736,49744,49745,49748,49752,49760,49765,49772,49773,49776,49780,49788,49789,49791,49793,49800,49801,49808,49816,49819,49821,49828,49829,49832,49836,49837,49844,49845,49847,49849,49884,49885,49888,49891,49892,49899,49900,49901,49903,49905,49910,49912,49913,49915,49916,49920,49928,49929,49932,49933,49939,49940,49941,49944,49948,49956,49957,49960,49961,49989,50024,50025,50028,50032,50034,50040,50041,50044,50045,50052,50056,50060,50112,50136,50137,50140,50143,50144,50146,50152,50153,50157,50164,50165,50168,50184,50192,50212,50220,50224,54328,54329,54330,54331,54332,54333,54334,54335,54337,54338,54339,54341,54342,54343,54344,54345,54346,54347,54348,54349,54350,54351,54352,54353,54354,54355,null,null,null,null,null,null,54356,54357,54358,54359,54360,54361,54362,54363,54365,54366,54367,54369,54370,54371,54373,54374,54375,54376,54377,54378,54379,54380,54382,54384,54385,54386,null,null,null,null,null,null,54387,54388,54389,54390,54391,54394,54395,54397,54398,54401,54403,54404,54405,54406,54407,54410,54412,54414,54415,54416,54417,54418,54419,54421,54422,54423,54424,54425,54426,54427,54428,54429,50228,50236,50237,50248,50276,50277,50280,50284,50292,50293,50297,50304,50324,50332,50360,50364,50409,50416,50417,50420,50424,50426,50431,50432,50433,50444,50448,50452,50460,50472,50473,50476,50480,50488,50489,50491,50493,50500,50501,50504,50505,50506,50508,50509,50510,50515,50516,50517,50519,50520,50521,50525,50526,50528,50529,50532,50536,50544,50545,50547,50548,50549,50556,50557,50560,50564,50567,50572,50573,50575,50577,50581,50583,50584,50588,50592,50601,50612,50613,50616,50617,50619,50620,50621,50622,50628,50629,50630,50631,50632,50633,50634,50636,50638,54430,54431,54432,54433,54434,54435,54436,54437,54438,54439,54440,54442,54443,54444,54445,54446,54447,54448,54449,54450,54451,54452,54453,54454,54455,54456,null,null,null,null,null,null,54457,54458,54459,54460,54461,54462,54463,54464,54465,54466,54467,54468,54469,54470,54471,54472,54473,54474,54475,54477,54478,54479,54481,54482,54483,54485,null,null,null,null,null,null,54486,54487,54488,54489,54490,54491,54493,54494,54496,54497,54498,54499,54500,54501,54502,54503,54505,54506,54507,54509,54510,54511,54513,54514,54515,54516,54517,54518,54519,54521,54522,54524,50640,50641,50644,50648,50656,50657,50659,50661,50668,50669,50670,50672,50676,50678,50679,50684,50685,50686,50687,50688,50689,50693,50694,50695,50696,50700,50704,50712,50713,50715,50716,50724,50725,50728,50732,50733,50734,50736,50739,50740,50741,50743,50745,50747,50752,50753,50756,50760,50768,50769,50771,50772,50773,50780,50781,50784,50796,50799,50801,50808,50809,50812,50816,50824,50825,50827,50829,50836,50837,50840,50844,50852,50853,50855,50857,50864,50865,50868,50872,50873,50874,50880,50881,50883,50885,50892,50893,50896,50900,50908,50909,50912,50913,50920,54526,54527,54528,54529,54530,54531,54533,54534,54535,54537,54538,54539,54541,54542,54543,54544,54545,54546,54547,54550,54552,54553,54554,54555,54556,54557,null,null,null,null,null,null,54558,54559,54560,54561,54562,54563,54564,54565,54566,54567,54568,54569,54570,54571,54572,54573,54574,54575,54576,54577,54578,54579,54580,54581,54582,54583,null,null,null,null,null,null,54584,54585,54586,54587,54590,54591,54593,54594,54595,54597,54598,54599,54600,54601,54602,54603,54606,54608,54610,54611,54612,54613,54614,54615,54618,54619,54621,54622,54623,54625,54626,54627,50921,50924,50928,50936,50937,50941,50948,50949,50952,50956,50964,50965,50967,50969,50976,50977,50980,50984,50992,50993,50995,50997,50999,51004,51005,51008,51012,51018,51020,51021,51023,51025,51026,51027,51028,51029,51030,51031,51032,51036,51040,51048,51051,51060,51061,51064,51068,51069,51070,51075,51076,51077,51079,51080,51081,51082,51086,51088,51089,51092,51094,51095,51096,51098,51104,51105,51107,51108,51109,51110,51116,51117,51120,51124,51132,51133,51135,51136,51137,51144,51145,51148,51150,51152,51160,51165,51172,51176,51180,51200,51201,51204,51208,51210,54628,54630,54631,54634,54636,54638,54639,54640,54641,54642,54643,54646,54647,54649,54650,54651,54653,54654,54655,54656,54657,54658,54659,54662,54666,54667,null,null,null,null,null,null,54668,54669,54670,54671,54673,54674,54675,54676,54677,54678,54679,54680,54681,54682,54683,54684,54685,54686,54687,54688,54689,54690,54691,54692,54694,54695,null,null,null,null,null,null,54696,54697,54698,54699,54700,54701,54702,54703,54704,54705,54706,54707,54708,54709,54710,54711,54712,54713,54714,54715,54716,54717,54718,54719,54720,54721,54722,54723,54724,54725,54726,54727,51216,51217,51219,51221,51222,51228,51229,51232,51236,51244,51245,51247,51249,51256,51260,51264,51272,51273,51276,51277,51284,51312,51313,51316,51320,51322,51328,51329,51331,51333,51334,51335,51339,51340,51341,51348,51357,51359,51361,51368,51388,51389,51396,51400,51404,51412,51413,51415,51417,51424,51425,51428,51445,51452,51453,51456,51460,51461,51462,51468,51469,51471,51473,51480,51500,51508,51536,51537,51540,51544,51552,51553,51555,51564,51568,51572,51580,51592,51593,51596,51600,51608,51609,51611,51613,51648,51649,51652,51655,51656,51658,51664,51665,51667,54730,54731,54733,54734,54735,54737,54739,54740,54741,54742,54743,54746,54748,54750,54751,54752,54753,54754,54755,54758,54759,54761,54762,54763,54765,54766,null,null,null,null,null,null,54767,54768,54769,54770,54771,54774,54776,54778,54779,54780,54781,54782,54783,54786,54787,54789,54790,54791,54793,54794,54795,54796,54797,54798,54799,54802,null,null,null,null,null,null,54806,54807,54808,54809,54810,54811,54813,54814,54815,54817,54818,54819,54821,54822,54823,54824,54825,54826,54827,54828,54830,54831,54832,54833,54834,54835,54836,54837,54838,54839,54842,54843,51669,51670,51673,51674,51676,51677,51680,51682,51684,51687,51692,51693,51695,51696,51697,51704,51705,51708,51712,51720,51721,51723,51724,51725,51732,51736,51753,51788,51789,51792,51796,51804,51805,51807,51808,51809,51816,51837,51844,51864,51900,51901,51904,51908,51916,51917,51919,51921,51923,51928,51929,51936,51948,51956,51976,51984,51988,51992,52000,52001,52033,52040,52041,52044,52048,52056,52057,52061,52068,52088,52089,52124,52152,52180,52196,52199,52201,52236,52237,52240,52244,52252,52253,52257,52258,52263,52264,52265,52268,52270,52272,52280,52281,52283,54845,54846,54847,54849,54850,54851,54852,54854,54855,54858,54860,54862,54863,54864,54866,54867,54870,54871,54873,54874,54875,54877,54878,54879,54880,54881,null,null,null,null,null,null,54882,54883,54884,54885,54886,54888,54890,54891,54892,54893,54894,54895,54898,54899,54901,54902,54903,54904,54905,54906,54907,54908,54909,54910,54911,54912,null,null,null,null,null,null,54913,54914,54916,54918,54919,54920,54921,54922,54923,54926,54927,54929,54930,54931,54933,54934,54935,54936,54937,54938,54939,54940,54942,54944,54946,54947,54948,54949,54950,54951,54953,54954,52284,52285,52286,52292,52293,52296,52300,52308,52309,52311,52312,52313,52320,52324,52326,52328,52336,52341,52376,52377,52380,52384,52392,52393,52395,52396,52397,52404,52405,52408,52412,52420,52421,52423,52425,52432,52436,52452,52460,52464,52481,52488,52489,52492,52496,52504,52505,52507,52509,52516,52520,52524,52537,52572,52576,52580,52588,52589,52591,52593,52600,52616,52628,52629,52632,52636,52644,52645,52647,52649,52656,52676,52684,52688,52712,52716,52720,52728,52729,52731,52733,52740,52744,52748,52756,52761,52768,52769,52772,52776,52784,52785,52787,52789,54955,54957,54958,54959,54961,54962,54963,54964,54965,54966,54967,54968,54970,54972,54973,54974,54975,54976,54977,54978,54979,54982,54983,54985,54986,54987,null,null,null,null,null,null,54989,54990,54991,54992,54994,54995,54997,54998,55000,55002,55003,55004,55005,55006,55007,55009,55010,55011,55013,55014,55015,55017,55018,55019,55020,55021,null,null,null,null,null,null,55022,55023,55025,55026,55027,55028,55030,55031,55032,55033,55034,55035,55038,55039,55041,55042,55043,55045,55046,55047,55048,55049,55050,55051,55052,55053,55054,55055,55056,55058,55059,55060,52824,52825,52828,52831,52832,52833,52840,52841,52843,52845,52852,52853,52856,52860,52868,52869,52871,52873,52880,52881,52884,52888,52896,52897,52899,52900,52901,52908,52909,52929,52964,52965,52968,52971,52972,52980,52981,52983,52984,52985,52992,52993,52996,53000,53008,53009,53011,53013,53020,53024,53028,53036,53037,53039,53040,53041,53048,53076,53077,53080,53084,53092,53093,53095,53097,53104,53105,53108,53112,53120,53125,53132,53153,53160,53168,53188,53216,53217,53220,53224,53232,53233,53235,53237,53244,53248,53252,53265,53272,53293,53300,53301,53304,53308,55061,55062,55063,55066,55067,55069,55070,55071,55073,55074,55075,55076,55077,55078,55079,55082,55084,55086,55087,55088,55089,55090,55091,55094,55095,55097,null,null,null,null,null,null,55098,55099,55101,55102,55103,55104,55105,55106,55107,55109,55110,55112,55114,55115,55116,55117,55118,55119,55122,55123,55125,55130,55131,55132,55133,55134,null,null,null,null,null,null,55135,55138,55140,55142,55143,55144,55146,55147,55149,55150,55151,55153,55154,55155,55157,55158,55159,55160,55161,55162,55163,55166,55167,55168,55170,55171,55172,55173,55174,55175,55178,55179,53316,53317,53319,53321,53328,53332,53336,53344,53356,53357,53360,53364,53372,53373,53377,53412,53413,53416,53420,53428,53429,53431,53433,53440,53441,53444,53448,53449,53456,53457,53459,53460,53461,53468,53469,53472,53476,53484,53485,53487,53488,53489,53496,53517,53552,53553,53556,53560,53562,53568,53569,53571,53572,53573,53580,53581,53584,53588,53596,53597,53599,53601,53608,53612,53628,53636,53640,53664,53665,53668,53672,53680,53681,53683,53685,53690,53692,53696,53720,53748,53752,53767,53769,53776,53804,53805,53808,53812,53820,53821,53823,53825,53832,53852,55181,55182,55183,55185,55186,55187,55188,55189,55190,55191,55194,55196,55198,55199,55200,55201,55202,55203,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,53860,53888,53889,53892,53896,53904,53905,53909,53916,53920,53924,53932,53937,53944,53945,53948,53951,53952,53954,53960,53961,53963,53972,53976,53980,53988,53989,54000,54001,54004,54008,54016,54017,54019,54021,54028,54029,54030,54032,54036,54038,54044,54045,54047,54048,54049,54053,54056,54057,54060,54064,54072,54073,54075,54076,54077,54084,54085,54140,54141,54144,54148,54156,54157,54159,54160,54161,54168,54169,54172,54176,54184,54185,54187,54189,54196,54200,54204,54212,54213,54216,54217,54224,54232,54241,54243,54252,54253,54256,54260,54268,54269,54271,54273,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,54280,54301,54336,54340,54364,54368,54372,54381,54383,54392,54393,54396,54399,54400,54402,54408,54409,54411,54413,54420,54441,54476,54480,54484,54492,54495,54504,54508,54512,54520,54523,54525,54532,54536,54540,54548,54549,54551,54588,54589,54592,54596,54604,54605,54607,54609,54616,54617,54620,54624,54629,54632,54633,54635,54637,54644,54645,54648,54652,54660,54661,54663,54664,54665,54672,54693,54728,54729,54732,54736,54738,54744,54745,54747,54749,54756,54757,54760,54764,54772,54773,54775,54777,54784,54785,54788,54792,54800,54801,54803,54804,54805,54812,54816,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,54820,54829,54840,54841,54844,54848,54853,54856,54857,54859,54861,54865,54868,54869,54872,54876,54887,54889,54896,54897,54900,54915,54917,54924,54925,54928,54932,54941,54943,54945,54952,54956,54960,54969,54971,54980,54981,54984,54988,54993,54996,54999,55001,55008,55012,55016,55024,55029,55036,55037,55040,55044,55057,55064,55065,55068,55072,55080,55081,55083,55085,55092,55093,55096,55100,55108,55111,55113,55120,55121,55124,55126,55127,55128,55129,55136,55137,55139,55141,55145,55148,55152,55156,55164,55165,55169,55176,55177,55180,55184,55192,55193,55195,55197,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20285,20339,20551,20729,21152,21487,21621,21733,22025,23233,23478,26247,26550,26551,26607,27468,29634,30146,31292,33499,33540,34903,34952,35382,36040,36303,36603,36838,39381,21051,21364,21508,24682,24932,27580,29647,33050,35258,35282,38307,20355,21002,22718,22904,23014,24178,24185,25031,25536,26438,26604,26751,28567,30286,30475,30965,31240,31487,31777,32925,33390,33393,35563,38291,20075,21917,26359,28212,30883,31469,33883,35088,34638,38824,21208,22350,22570,23884,24863,25022,25121,25954,26577,27204,28187,29976,30131,30435,30640,32058,37039,37969,37970,40853,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21283,23724,30002,32987,37440,38296,21083,22536,23004,23713,23831,24247,24378,24394,24951,27743,30074,30086,31968,32115,32177,32652,33108,33313,34193,35137,35611,37628,38477,40007,20171,20215,20491,20977,22607,24887,24894,24936,25913,27114,28433,30117,30342,30422,31623,33445,33995,63744,37799,38283,21888,23458,22353,63745,31923,32697,37301,20520,21435,23621,24040,25298,25454,25818,25831,28192,28844,31067,36317,36382,63746,36989,37445,37624,20094,20214,20581,24062,24314,24838,26967,33137,34388,36423,37749,39467,20062,20625,26480,26688,20745,21133,21138,27298,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30652,37392,40660,21163,24623,36850,20552,25001,25581,25802,26684,27268,28608,33160,35233,38548,22533,29309,29356,29956,32121,32365,32937,35211,35700,36963,40273,25225,27770,28500,32080,32570,35363,20860,24906,31645,35609,37463,37772,20140,20435,20510,20670,20742,21185,21197,21375,22384,22659,24218,24465,24950,25004,25806,25964,26223,26299,26356,26775,28039,28805,28913,29855,29861,29898,30169,30828,30956,31455,31478,32069,32147,32789,32831,33051,33686,35686,36629,36885,37857,38915,38968,39514,39912,20418,21843,22586,22865,23395,23622,24760,25106,26690,26800,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26856,28330,30028,30328,30926,31293,31995,32363,32380,35336,35489,35903,38542,40388,21476,21481,21578,21617,22266,22993,23396,23611,24235,25335,25911,25925,25970,26272,26543,27073,27837,30204,30352,30590,31295,32660,32771,32929,33167,33510,33533,33776,34241,34865,34996,35493,63747,36764,37678,38599,39015,39640,40723,21741,26011,26354,26767,31296,35895,40288,22256,22372,23825,26118,26801,26829,28414,29736,34974,39908,27752,63748,39592,20379,20844,20849,21151,23380,24037,24656,24685,25329,25511,25915,29657,31354,34467,36002,38799,20018,23521,25096,26524,29916,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31185,33747,35463,35506,36328,36942,37707,38982,24275,27112,34303,37101,63749,20896,23448,23532,24931,26874,27454,28748,29743,29912,31649,32592,33733,35264,36011,38364,39208,21038,24669,25324,36866,20362,20809,21281,22745,24291,26336,27960,28826,29378,29654,31568,33009,37979,21350,25499,32619,20054,20608,22602,22750,24618,24871,25296,27088,39745,23439,32024,32945,36703,20132,20689,21676,21932,23308,23968,24039,25898,25934,26657,27211,29409,30350,30703,32094,32761,33184,34126,34527,36611,36686,37066,39171,39509,39851,19992,20037,20061,20167,20465,20855,21246,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21312,21475,21477,21646,22036,22389,22434,23495,23943,24272,25084,25304,25937,26552,26601,27083,27472,27590,27628,27714,28317,28792,29399,29590,29699,30655,30697,31350,32127,32777,33276,33285,33290,33503,34914,35635,36092,36544,36881,37041,37476,37558,39378,39493,40169,40407,40860,22283,23616,33738,38816,38827,40628,21531,31384,32676,35033,36557,37089,22528,23624,25496,31391,23470,24339,31353,31406,33422,36524,20518,21048,21240,21367,22280,25331,25458,27402,28099,30519,21413,29527,34152,36470,38357,26426,27331,28528,35437,36556,39243,63750,26231,27512,36020,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,39740,63751,21483,22317,22862,25542,27131,29674,30789,31418,31429,31998,33909,35215,36211,36917,38312,21243,22343,30023,31584,33740,37406,63752,27224,20811,21067,21127,25119,26840,26997,38553,20677,21156,21220,25027,26020,26681,27135,29822,31563,33465,33771,35250,35641,36817,39241,63753,20170,22935,25810,26129,27278,29748,31105,31165,33449,34942,34943,35167,63754,37670,20235,21450,24613,25201,27762,32026,32102,20120,20834,30684,32943,20225,20238,20854,20864,21980,22120,22331,22522,22524,22804,22855,22931,23492,23696,23822,24049,24190,24524,25216,26071,26083,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26398,26399,26462,26827,26820,27231,27450,27683,27773,27778,28103,29592,29734,29738,29826,29859,30072,30079,30849,30959,31041,31047,31048,31098,31637,32000,32186,32648,32774,32813,32908,35352,35663,35912,36215,37665,37668,39138,39249,39438,39439,39525,40594,32202,20342,21513,25326,26708,37329,21931,20794,63755,63756,23068,25062,63757,25295,25343,63758,63759,63760,63761,63762,63763,37027,63764,63765,63766,63767,63768,35582,63769,63770,63771,63772,26262,63773,29014,63774,63775,38627,63776,25423,25466,21335,63777,26511,26976,28275,63778,30007,63779,63780,63781,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32013,63782,63783,34930,22218,23064,63784,63785,63786,63787,63788,20035,63789,20839,22856,26608,32784,63790,22899,24180,25754,31178,24565,24684,25288,25467,23527,23511,21162,63791,22900,24361,24594,63792,63793,63794,29785,63795,63796,63797,63798,63799,63800,39377,63801,63802,63803,63804,63805,63806,63807,63808,63809,63810,63811,28611,63812,63813,33215,36786,24817,63814,63815,33126,63816,63817,23615,63818,63819,63820,63821,63822,63823,63824,63825,23273,35365,26491,32016,63826,63827,63828,63829,63830,63831,33021,63832,63833,23612,27877,21311,28346,22810,33590,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20025,20150,20294,21934,22296,22727,24406,26039,26086,27264,27573,28237,30701,31471,31774,32222,34507,34962,37170,37723,25787,28606,29562,30136,36948,21846,22349,25018,25812,26311,28129,28251,28525,28601,30192,32835,33213,34113,35203,35527,35674,37663,27795,30035,31572,36367,36957,21776,22530,22616,24162,25095,25758,26848,30070,31958,34739,40680,20195,22408,22382,22823,23565,23729,24118,24453,25140,25825,29619,33274,34955,36024,38538,40667,23429,24503,24755,20498,20992,21040,22294,22581,22615,23566,23648,23798,23947,24230,24466,24764,25361,25481,25623,26691,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26873,27330,28120,28193,28372,28644,29182,30428,30585,31153,31291,33796,35241,36077,36339,36424,36867,36884,36947,37117,37709,38518,38876,27602,28678,29272,29346,29544,30563,31167,31716,32411,35712,22697,24775,25958,26109,26302,27788,28958,29129,35930,38931,20077,31361,20189,20908,20941,21205,21516,24999,26481,26704,26847,27934,28540,30140,30643,31461,33012,33891,37509,20828,26007,26460,26515,30168,31431,33651,63834,35910,36887,38957,23663,33216,33434,36929,36975,37389,24471,23965,27225,29128,30331,31561,34276,35588,37159,39472,21895,25078,63835,30313,32645,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,34367,34746,35064,37007,63836,27931,28889,29662,32097,33853,63837,37226,39409,63838,20098,21365,27396,27410,28734,29211,34349,40478,21068,36771,23888,25829,25900,27414,28651,31811,32412,34253,35172,35261,25289,33240,34847,24266,26391,28010,29436,29701,29807,34690,37086,20358,23821,24480,33802,20919,25504,30053,20142,20486,20841,20937,26753,27153,31918,31921,31975,33391,35538,36635,37327,20406,20791,21237,21570,24300,24942,25150,26053,27354,28670,31018,34268,34851,38317,39522,39530,40599,40654,21147,26310,27511,28701,31019,36706,38722,24976,25088,25891,28451,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29001,29833,32244,32879,34030,36646,36899,37706,20925,21015,21155,27916,28872,35010,24265,25986,27566,28610,31806,29557,20196,20278,22265,63839,23738,23994,24604,29618,31533,32666,32718,32838,36894,37428,38646,38728,38936,40801,20363,28583,31150,37300,38583,21214,63840,25736,25796,27347,28510,28696,29200,30439,32769,34310,34396,36335,36613,38706,39791,40442,40565,30860,31103,32160,33737,37636,40575,40595,35542,22751,24324,26407,28711,29903,31840,32894,20769,28712,29282,30922,36034,36058,36084,38647,20102,20698,23534,24278,26009,29134,30274,30637,32842,34044,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36988,39719,40845,22744,23105,23650,27155,28122,28431,30267,32047,32311,34078,35128,37860,38475,21129,26066,26611,27060,27969,28316,28687,29705,29792,30041,30244,30827,35628,39006,20845,25134,38520,20374,20523,23833,28138,32184,36650,24459,24900,26647,63841,38534,21202,32907,20956,20940,26974,31260,32190,33777,38517,20442,21033,21400,21519,21774,23653,24743,26446,26792,28012,29313,29432,29702,29827,63842,30178,31852,32633,32696,33673,35023,35041,37324,37328,38626,39881,21533,28542,29136,29848,34298,36522,38563,40023,40607,26519,28107,29747,33256,38678,30764,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31435,31520,31890,25705,29802,30194,30908,30952,39340,39764,40635,23518,24149,28448,33180,33707,37000,19975,21325,23081,24018,24398,24930,25405,26217,26364,28415,28459,28771,30622,33836,34067,34875,36627,39237,39995,21788,25273,26411,27819,33545,35178,38778,20129,22916,24536,24537,26395,32178,32596,33426,33579,33725,36638,37017,22475,22969,23186,23504,26151,26522,26757,27599,29028,32629,36023,36067,36993,39749,33032,35978,38476,39488,40613,23391,27667,29467,30450,30431,33804,20906,35219,20813,20885,21193,26825,27796,30468,30496,32191,32236,38754,40629,28357,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,34065,20901,21517,21629,26126,26269,26919,28319,30399,30609,33559,33986,34719,37225,37528,40180,34946,20398,20882,21215,22982,24125,24917,25720,25721,26286,26576,27169,27597,27611,29279,29281,29761,30520,30683,32791,33468,33541,35584,35624,35980,26408,27792,29287,30446,30566,31302,40361,27519,27794,22818,26406,33945,21359,22675,22937,24287,25551,26164,26483,28218,29483,31447,33495,37672,21209,24043,25006,25035,25098,25287,25771,26080,26969,27494,27595,28961,29687,30045,32326,33310,33538,34154,35491,36031,38695,40289,22696,40664,20497,21006,21563,21839,25991,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,27766,32010,32011,32862,34442,38272,38639,21247,27797,29289,21619,23194,23614,23883,24396,24494,26410,26806,26979,28220,28228,30473,31859,32654,34183,35598,36855,38753,40692,23735,24758,24845,25003,25935,26107,26108,27665,27887,29599,29641,32225,38292,23494,34588,35600,21085,21338,25293,25615,25778,26420,27192,27850,29632,29854,31636,31893,32283,33162,33334,34180,36843,38649,39361,20276,21322,21453,21467,25292,25644,25856,26001,27075,27886,28504,29677,30036,30242,30436,30460,30928,30971,31020,32070,33324,34784,36820,38930,39151,21187,25300,25765,28196,28497,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30332,36299,37297,37474,39662,39747,20515,20621,22346,22952,23592,24135,24439,25151,25918,26041,26049,26121,26507,27036,28354,30917,32033,32938,33152,33323,33459,33953,34444,35370,35607,37030,38450,40848,20493,20467,63843,22521,24472,25308,25490,26479,28227,28953,30403,32972,32986,35060,35061,35097,36064,36649,37197,38506,20271,20336,24091,26575,26658,30333,30334,39748,24161,27146,29033,29140,30058,63844,32321,34115,34281,39132,20240,31567,32624,38309,20961,24070,26805,27710,27726,27867,29359,31684,33539,27861,29754,20731,21128,22721,25816,27287,29863,30294,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30887,34327,38370,38713,63845,21342,24321,35722,36776,36783,37002,21029,30629,40009,40712,19993,20482,20853,23643,24183,26142,26170,26564,26821,28851,29953,30149,31177,31453,36647,39200,39432,20445,22561,22577,23542,26222,27493,27921,28282,28541,29668,29995,33769,35036,35091,35676,36628,20239,20693,21264,21340,23443,24489,26381,31119,33145,33583,34068,35079,35206,36665,36667,39333,39954,26412,20086,20472,22857,23553,23791,23792,25447,26834,28925,29090,29739,32299,34028,34562,36898,37586,40179,19981,20184,20463,20613,21078,21103,21542,21648,22496,22827,23142,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,23386,23413,23500,24220,63846,25206,25975,26023,28014,28325,29238,31526,31807,32566,33104,33105,33178,33344,33433,33705,35331,36000,36070,36091,36212,36282,37096,37340,38428,38468,39385,40167,21271,20998,21545,22132,22707,22868,22894,24575,24996,25198,26128,27774,28954,30406,31881,31966,32027,33452,36033,38640,63847,20315,24343,24447,25282,23849,26379,26842,30844,32323,40300,19989,20633,21269,21290,21329,22915,23138,24199,24754,24970,25161,25209,26000,26503,27047,27604,27606,27607,27608,27832,63848,29749,30202,30738,30865,31189,31192,31875,32203,32737,32933,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,33086,33218,33778,34586,35048,35513,35692,36027,37145,38750,39131,40763,22188,23338,24428,25996,27315,27567,27996,28657,28693,29277,29613,36007,36051,38971,24977,27703,32856,39425,20045,20107,20123,20181,20282,20284,20351,20447,20735,21490,21496,21766,21987,22235,22763,22882,23057,23531,23546,23556,24051,24107,24473,24605,25448,26012,26031,26614,26619,26797,27515,27801,27863,28195,28681,29509,30722,31038,31040,31072,31169,31721,32023,32114,32902,33293,33678,34001,34503,35039,35408,35422,35613,36060,36198,36781,37034,39164,39391,40605,21066,63849,26388,63850,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20632,21034,23665,25955,27733,29642,29987,30109,31639,33948,37240,38704,20087,25746,27578,29022,34217,19977,63851,26441,26862,28183,33439,34072,34923,25591,28545,37394,39087,19978,20663,20687,20767,21830,21930,22039,23360,23577,23776,24120,24202,24224,24258,24819,26705,27233,28248,29245,29248,29376,30456,31077,31665,32724,35059,35316,35443,35937,36062,38684,22622,29885,36093,21959,63852,31329,32034,33394,29298,29983,29989,63853,31513,22661,22779,23996,24207,24246,24464,24661,25234,25471,25933,26257,26329,26360,26646,26866,29312,29790,31598,32110,32214,32626,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32997,33298,34223,35199,35475,36893,37604,40653,40736,22805,22893,24109,24796,26132,26227,26512,27728,28101,28511,30707,30889,33990,37323,37675,20185,20682,20808,21892,23307,23459,25159,25982,26059,28210,29053,29697,29764,29831,29887,30316,31146,32218,32341,32680,33146,33203,33337,34330,34796,35445,36323,36984,37521,37925,39245,39854,21352,23633,26964,27844,27945,28203,33292,34203,35131,35373,35498,38634,40807,21089,26297,27570,32406,34814,36109,38275,38493,25885,28041,29166,63854,22478,22995,23468,24615,24826,25104,26143,26207,29481,29689,30427,30465,31596,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32854,32882,33125,35488,37266,19990,21218,27506,27927,31237,31545,32048,63855,36016,21484,22063,22609,23477,23567,23569,24034,25152,25475,25620,26157,26803,27836,28040,28335,28703,28836,29138,29990,30095,30094,30233,31505,31712,31787,32032,32057,34092,34157,34311,35380,36877,36961,37045,37559,38902,39479,20439,23660,26463,28049,31903,32396,35606,36118,36895,23403,24061,25613,33984,36956,39137,29575,23435,24730,26494,28126,35359,35494,36865,38924,21047,63856,28753,30862,37782,34928,37335,20462,21463,22013,22234,22402,22781,23234,23432,23723,23744,24101,24833,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,25101,25163,25480,25628,25910,25976,27193,27530,27700,27929,28465,29159,29417,29560,29703,29874,30246,30561,31168,31319,31466,31929,32143,32172,32353,32670,33065,33585,33936,34010,34282,34966,35504,35728,36664,36930,36995,37228,37526,37561,38539,38567,38568,38614,38656,38920,39318,39635,39706,21460,22654,22809,23408,23487,28113,28506,29087,29729,29881,32901,33789,24033,24455,24490,24642,26092,26642,26991,27219,27529,27957,28147,29667,30462,30636,31565,32020,33059,33308,33600,34036,34147,35426,35524,37255,37662,38918,39348,25100,34899,36848,37477,23815,23847,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,23913,29791,33181,34664,28629,25342,32722,35126,35186,19998,20056,20711,21213,21319,25215,26119,32361,34821,38494,20365,21273,22070,22987,23204,23608,23630,23629,24066,24337,24643,26045,26159,26178,26558,26612,29468,30690,31034,32709,33940,33997,35222,35430,35433,35553,35925,35962,22516,23508,24335,24687,25325,26893,27542,28252,29060,31698,34645,35672,36606,39135,39166,20280,20353,20449,21627,23072,23480,24892,26032,26216,29180,30003,31070,32051,33102,33251,33688,34218,34254,34563,35338,36523,36763,63857,36805,22833,23460,23526,24713,23529,23563,24515,27777,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63858,28145,28683,29978,33455,35574,20160,21313,63859,38617,27663,20126,20420,20818,21854,23077,23784,25105,29273,33469,33706,34558,34905,35357,38463,38597,39187,40201,40285,22538,23731,23997,24132,24801,24853,25569,27138,28197,37122,37716,38990,39952,40823,23433,23736,25353,26191,26696,30524,38593,38797,38996,39839,26017,35585,36555,38332,21813,23721,24022,24245,26263,30284,33780,38343,22739,25276,29390,40232,20208,22830,24591,26171,27523,31207,40230,21395,21696,22467,23830,24859,26326,28079,30861,33406,38552,38724,21380,25212,25494,28082,32266,33099,38989,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,27387,32588,40367,40474,20063,20539,20918,22812,24825,25590,26928,29242,32822,63860,37326,24369,63861,63862,32004,33509,33903,33979,34277,36493,63863,20335,63864,63865,22756,23363,24665,25562,25880,25965,26264,63866,26954,27171,27915,28673,29036,30162,30221,31155,31344,63867,32650,63868,35140,63869,35731,37312,38525,63870,39178,22276,24481,26044,28417,30208,31142,35486,39341,39770,40812,20740,25014,25233,27277,33222,20547,22576,24422,28937,35328,35578,23420,34326,20474,20796,22196,22852,25513,28153,23978,26989,20870,20104,20313,63871,63872,63873,22914,63874,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63875,27487,27741,63876,29877,30998,63877,33287,33349,33593,36671,36701,63878,39192,63879,63880,63881,20134,63882,22495,24441,26131,63883,63884,30123,32377,35695,63885,36870,39515,22181,22567,23032,23071,23476,63886,24310,63887,63888,25424,25403,63889,26941,27783,27839,28046,28051,28149,28436,63890,28895,28982,29017,63891,29123,29141,63892,30799,30831,63893,31605,32227,63894,32303,63895,34893,36575,63896,63897,63898,37467,63899,40182,63900,63901,63902,24709,28037,63903,29105,63904,63905,38321,21421,63906,63907,63908,26579,63909,28814,28976,29744,33398,33490,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63910,38331,39653,40573,26308,63911,29121,33865,63912,63913,22603,63914,63915,23992,24433,63916,26144,26254,27001,27054,27704,27891,28214,28481,28634,28699,28719,29008,29151,29552,63917,29787,63918,29908,30408,31310,32403,63919,63920,33521,35424,36814,63921,37704,63922,38681,63923,63924,20034,20522,63925,21000,21473,26355,27757,28618,29450,30591,31330,33454,34269,34306,63926,35028,35427,35709,35947,63927,37555,63928,38675,38928,20116,20237,20425,20658,21320,21566,21555,21978,22626,22714,22887,23067,23524,24735,63929,25034,25942,26111,26212,26791,27738,28595,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,28879,29100,29522,31613,34568,35492,39986,40711,23627,27779,29508,29577,37434,28331,29797,30239,31337,32277,34314,20800,22725,25793,29934,29973,30320,32705,37013,38605,39252,28198,29926,31401,31402,33253,34521,34680,35355,23113,23436,23451,26785,26880,28003,29609,29715,29740,30871,32233,32747,33048,33109,33694,35916,38446,38929,26352,24448,26106,26505,27754,29579,20525,23043,27498,30702,22806,23916,24013,29477,30031,63930,63931,20709,20985,22575,22829,22934,23002,23525,63932,63933,23970,25303,25622,25747,25854,63934,26332,63935,27208,63936,29183,29796,63937,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31368,31407,32327,32350,32768,33136,63938,34799,35201,35616,36953,63939,36992,39250,24958,27442,28020,32287,35109,36785,20433,20653,20887,21191,22471,22665,23481,24248,24898,27029,28044,28263,28342,29076,29794,29992,29996,32883,33592,33993,36362,37780,37854,63940,20110,20305,20598,20778,21448,21451,21491,23431,23507,23588,24858,24962,26100,29275,29591,29760,30402,31056,31121,31161,32006,32701,33419,34261,34398,36802,36935,37109,37354,38533,38632,38633,21206,24423,26093,26161,26671,29020,31286,37057,38922,20113,63941,27218,27550,28560,29065,32792,33464,34131,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36939,38549,38642,38907,34074,39729,20112,29066,38596,20803,21407,21729,22291,22290,22435,23195,23236,23491,24616,24895,25588,27781,27961,28274,28304,29232,29503,29783,33489,34945,36677,36960,63942,38498,39000,40219,26376,36234,37470,20301,20553,20702,21361,22285,22996,23041,23561,24944,26256,28205,29234,29771,32239,32963,33806,33894,34111,34655,34907,35096,35586,36949,38859,39759,20083,20369,20754,20842,63943,21807,21929,23418,23461,24188,24189,24254,24736,24799,24840,24841,25540,25912,26377,63944,26580,26586,63945,26977,26978,27833,27943,63946,28216,63947,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,28641,29494,29495,63948,29788,30001,63949,30290,63950,63951,32173,33278,33848,35029,35480,35547,35565,36400,36418,36938,36926,36986,37193,37321,37742,63952,63953,22537,63954,27603,32905,32946,63955,63956,20801,22891,23609,63957,63958,28516,29607,32996,36103,63959,37399,38287,63960,63961,63962,63963,32895,25102,28700,32104,34701,63964,22432,24681,24903,27575,35518,37504,38577,20057,21535,28139,34093,38512,38899,39150,25558,27875,37009,20957,25033,33210,40441,20381,20506,20736,23452,24847,25087,25836,26885,27589,30097,30691,32681,33380,34191,34811,34915,35516,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,35696,37291,20108,20197,20234,63965,63966,22839,23016,63967,24050,24347,24411,24609,63968,63969,63970,63971,29246,29669,63972,30064,30157,63973,31227,63974,32780,32819,32900,33505,33617,63975,63976,36029,36019,36999,63977,63978,39156,39180,63979,63980,28727,30410,32714,32716,32764,35610,20154,20161,20995,21360,63981,21693,22240,23035,23493,24341,24525,28270,63982,63983,32106,33589,63984,34451,35469,63985,38765,38775,63986,63987,19968,20314,20350,22777,26085,28322,36920,37808,39353,20219,22764,22922,23001,24641,63988,63989,31252,63990,33615,36035,20837,21316,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63991,63992,63993,20173,21097,23381,33471,20180,21050,21672,22985,23039,23376,23383,23388,24675,24904,28363,28825,29038,29574,29943,30133,30913,32043,32773,33258,33576,34071,34249,35566,36039,38604,20316,21242,22204,26027,26152,28796,28856,29237,32189,33421,37196,38592,40306,23409,26855,27544,28538,30430,23697,26283,28507,31668,31786,34870,38620,19976,20183,21280,22580,22715,22767,22892,23559,24115,24196,24373,25484,26290,26454,27167,27299,27404,28479,29254,63994,29520,29835,31456,31911,33144,33247,33255,33674,33900,34083,34196,34255,35037,36115,37292,38263,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38556,20877,21705,22312,23472,25165,26448,26685,26771,28221,28371,28797,32289,35009,36001,36617,40779,40782,29229,31631,35533,37658,20295,20302,20786,21632,22992,24213,25269,26485,26990,27159,27822,28186,29401,29482,30141,31672,32053,33511,33785,33879,34295,35419,36015,36487,36889,37048,38606,40799,21219,21514,23265,23490,25688,25973,28404,29380,63995,30340,31309,31515,31821,32318,32735,33659,35627,36042,36196,36321,36447,36842,36857,36969,37841,20291,20346,20659,20840,20856,21069,21098,22625,22652,22880,23560,23637,24283,24731,25136,26643,27583,27656,28593,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29006,29728,30000,30008,30033,30322,31564,31627,31661,31686,32399,35438,36670,36681,37439,37523,37666,37931,38651,39002,39019,39198,20999,25130,25240,27993,30308,31434,31680,32118,21344,23742,24215,28472,28857,31896,38673,39822,40670,25509,25722,34678,19969,20117,20141,20572,20597,21576,22979,23450,24128,24237,24311,24449,24773,25402,25919,25972,26060,26230,26232,26622,26984,27273,27491,27712,28096,28136,28191,28254,28702,28833,29582,29693,30010,30555,30855,31118,31243,31357,31934,32142,33351,35330,35562,35998,37165,37194,37336,37478,37580,37664,38662,38742,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38748,38914,40718,21046,21137,21884,22564,24093,24351,24716,25552,26799,28639,31085,31532,33229,34234,35069,35576,36420,37261,38500,38555,38717,38988,40778,20430,20806,20939,21161,22066,24340,24427,25514,25805,26089,26177,26362,26361,26397,26781,26839,27133,28437,28526,29031,29157,29226,29866,30522,31062,31066,31199,31264,31381,31895,31967,32068,32368,32903,34299,34468,35412,35519,36249,36481,36896,36973,37347,38459,38613,40165,26063,31751,36275,37827,23384,23562,21330,25305,29469,20519,23447,24478,24752,24939,26837,28121,29742,31278,32066,32156,32305,33131,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36394,36405,37758,37912,20304,22352,24038,24231,25387,32618,20027,20303,20367,20570,23005,32964,21610,21608,22014,22863,23449,24030,24282,26205,26417,26609,26666,27880,27954,28234,28557,28855,29664,30087,31820,32002,32044,32162,33311,34523,35387,35461,36208,36490,36659,36913,37198,37202,37956,39376,31481,31909,20426,20737,20934,22472,23535,23803,26201,27197,27994,28310,28652,28940,30063,31459,34850,36897,36981,38603,39423,33537,20013,20210,34886,37325,21373,27355,26987,27713,33914,22686,24974,26366,25327,28893,29969,30151,32338,33976,35657,36104,20043,21482,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21675,22320,22336,24535,25345,25351,25711,25903,26088,26234,26525,26547,27490,27744,27802,28460,30693,30757,31049,31063,32025,32930,33026,33267,33437,33463,34584,35468,63996,36100,36286,36978,30452,31257,31287,32340,32887,21767,21972,22645,25391,25634,26185,26187,26733,27035,27524,27941,28337,29645,29800,29857,30043,30137,30433,30494,30603,31206,32265,32285,33275,34095,34967,35386,36049,36587,36784,36914,37805,38499,38515,38663,20356,21489,23018,23241,24089,26702,29894,30142,31209,31378,33187,34541,36074,36300,36845,26015,26389,63997,22519,28503,32221,36655,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,37878,38598,24501,25074,28548,19988,20376,20511,21449,21983,23919,24046,27425,27492,30923,31642,63998,36425,36554,36974,25417,25662,30528,31364,37679,38015,40810,25776,28591,29158,29864,29914,31428,31762,32386,31922,32408,35738,36106,38013,39184,39244,21049,23519,25830,26413,32046,20717,21443,22649,24920,24921,25082,26028,31449,35730,35734,20489,20513,21109,21809,23100,24288,24432,24884,25950,26124,26166,26274,27085,28356,28466,29462,30241,31379,33081,33369,33750,33980,20661,22512,23488,23528,24425,25505,30758,32181,33756,34081,37319,37365,20874,26613,31574,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36012,20932,22971,24765,34389,20508,63999,21076,23610,24957,25114,25299,25842,26021,28364,30240,33034,36448,38495,38587,20191,21315,21912,22825,24029,25797,27849,28154,29588,31359,33307,34214,36068,36368,36983,37351,38369,38433,38854,20984,21746,21894,24505,25764,28552,32180,36639,36685,37941,20681,23574,27838,28155,29979,30651,31805,31844,35449,35522,22558,22974,24086,25463,29266,30090,30571,35548,36028,36626,24307,26228,28152,32893,33729,35531,38737,39894,64000,21059,26367,28053,28399,32224,35558,36910,36958,39636,21021,21119,21736,24980,25220,25307,26786,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26898,26970,27189,28818,28966,30813,30977,30990,31186,31245,32918,33400,33493,33609,34121,35970,36229,37218,37259,37294,20419,22225,29165,30679,34560,35320,23544,24534,26449,37032,21474,22618,23541,24740,24961,25696,32317,32880,34085,37507,25774,20652,23828,26368,22684,25277,25512,26894,27000,27166,28267,30394,31179,33467,33833,35535,36264,36861,37138,37195,37276,37648,37656,37786,38619,39478,39949,19985,30044,31069,31482,31569,31689,32302,33988,36441,36468,36600,36880,26149,26943,29763,20986,26414,40668,20805,24544,27798,34802,34909,34935,24756,33205,33795,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36101,21462,21561,22068,23094,23601,28810,32736,32858,33030,33261,36259,37257,39519,40434,20596,20164,21408,24827,28204,23652,20360,20516,21988,23769,24159,24677,26772,27835,28100,29118,30164,30196,30305,31258,31305,32199,32251,32622,33268,34473,36636,38601,39347,40786,21063,21189,39149,35242,19971,26578,28422,20405,23522,26517,27784,28024,29723,30759,37341,37756,34756,31204,31281,24555,20182,21668,21822,22702,22949,24816,25171,25302,26422,26965,33333,38464,39345,39389,20524,21331,21828,22396,64001,25176,64002,25826,26219,26589,28609,28655,29730,29752,35351,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,37944,21585,22022,22374,24392,24986,27470,28760,28845,32187,35477,22890,33067,25506,30472,32829,36010,22612,25645,27067,23445,24081,28271,64003,34153,20812,21488,22826,24608,24907,27526,27760,27888,31518,32974,33492,36294,37040,39089,64004,25799,28580,25745,25860,20814,21520,22303,35342,24927,26742,64005,30171,31570,32113,36890,22534,27084,33151,35114,36864,38969,20600,22871,22956,25237,36879,39722,24925,29305,38358,22369,23110,24052,25226,25773,25850,26487,27874,27966,29228,29750,30772,32631,33453,36315,38935,21028,22338,26495,29256,29923,36009,36774,37393,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38442,20843,21485,25420,20329,21764,24726,25943,27803,28031,29260,29437,31255,35207,35997,24429,28558,28921,33192,24846,20415,20559,25153,29255,31687,32232,32745,36941,38829,39449,36022,22378,24179,26544,33805,35413,21536,23318,24163,24290,24330,25987,32954,34109,38281,38491,20296,21253,21261,21263,21638,21754,22275,24067,24598,25243,25265,25429,64006,27873,28006,30129,30770,32990,33071,33502,33889,33970,34957,35090,36875,37610,39165,39825,24133,26292,26333,28689,29190,64007,20469,21117,24426,24915,26451,27161,28418,29922,31080,34920,35961,39111,39108,39491,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21697,31263,26963,35575,35914,39080,39342,24444,25259,30130,30382,34987,36991,38466,21305,24380,24517,27852,29644,30050,30091,31558,33534,39325,20047,36924,19979,20309,21414,22799,24264,26160,27827,29781,33655,34662,36032,36944,38686,39957,22737,23416,34384,35604,40372,23506,24680,24717,26097,27735,28450,28579,28698,32597,32752,38289,38290,38480,38867,21106,36676,20989,21547,21688,21859,21898,27323,28085,32216,33382,37532,38519,40569,21512,21704,30418,34532,38308,38356,38492,20130,20233,23022,23270,24055,24658,25239,26477,26689,27782,28207,32568,32923,33322,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,64008,64009,38917,20133,20565,21683,22419,22874,23401,23475,25032,26999,28023,28707,34809,35299,35442,35559,36994,39405,39608,21182,26680,20502,24184,26447,33607,34892,20139,21521,22190,29670,37141,38911,39177,39255,39321,22099,22687,34395,35377,25010,27382,29563,36562,27463,38570,39511,22869,29184,36203,38761,20436,23796,24358,25080,26203,27883,28843,29572,29625,29694,30505,30541,32067,32098,32291,33335,34898,64010,36066,37449,39023,23377,31348,34880,38913,23244,20448,21332,22846,23805,25406,28025,29433,33029,33031,33698,37583,38960,20136,20804,21009,22411,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,24418,27842,28366,28677,28752,28847,29074,29673,29801,33610,34722,34913,36872,37026,37795,39336,20846,24407,24800,24935,26291,34137,36426,37295,38795,20046,20114,21628,22741,22778,22909,23733,24359,25142,25160,26122,26215,27627,28009,28111,28246,28408,28564,28640,28649,28765,29392,29733,29786,29920,30355,31068,31946,32286,32993,33446,33899,33983,34382,34399,34676,35703,35946,37804,38912,39013,24785,25110,37239,23130,26127,28151,28222,29759,39746,24573,24794,31503,21700,24344,27742,27859,27946,28888,32005,34425,35340,40251,21270,21644,23301,27194,28779,30069,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31117,31166,33457,33775,35441,35649,36008,38772,64011,25844,25899,30906,30907,31339,20024,21914,22864,23462,24187,24739,25563,27489,26213,26707,28185,29029,29872,32008,36996,39529,39973,27963,28369,29502,35905,38346,20976,24140,24488,24653,24822,24880,24908,26179,26180,27045,27841,28255,28361,28514,29004,29852,30343,31681,31783,33618,34647,36945,38541,40643,21295,22238,24315,24458,24674,24724,25079,26214,26371,27292,28142,28590,28784,29546,32362,33214,33588,34516,35496,36036,21123,29554,23446,27243,37892,21742,22150,23389,25928,25989,26313,26783,28045,28102,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29243,32948,37237,39501,20399,20505,21402,21518,21564,21897,21957,24127,24460,26429,29030,29661,36869,21211,21235,22628,22734,28932,29071,29179,34224,35347,26248,34216,21927,26244,29002,33841,21321,21913,27585,24409,24509,25582,26249,28999,35569,36637,40638,20241,25658,28875,30054,34407,24676,35662,40440,20807,20982,21256,27958,33016,40657,26133,27427,28824,30165,21507,23673,32007,35350,27424,27453,27462,21560,24688,27965,32725,33288,20694,20958,21916,22123,22221,23020,23305,24076,24985,24984,25137,26206,26342,29081,29113,29114,29351,31143,31232,32690,35440,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],
  4338. "gb18030":[19970,19972,19973,19974,19983,19986,19991,19999,20000,20001,20003,20006,20009,20014,20015,20017,20019,20021,20023,20028,20032,20033,20034,20036,20038,20042,20049,20053,20055,20058,20059,20066,20067,20068,20069,20071,20072,20074,20075,20076,20077,20078,20079,20082,20084,20085,20086,20087,20088,20089,20090,20091,20092,20093,20095,20096,20097,20098,20099,20100,20101,20103,20106,20112,20118,20119,20121,20124,20125,20126,20131,20138,20143,20144,20145,20148,20150,20151,20152,20153,20156,20157,20158,20168,20172,20175,20176,20178,20186,20187,20188,20192,20194,20198,20199,20201,20205,20206,20207,20209,20212,20216,20217,20218,20220,20222,20224,20226,20227,20228,20229,20230,20231,20232,20235,20236,20242,20243,20244,20245,20246,20252,20253,20257,20259,20264,20265,20268,20269,20270,20273,20275,20277,20279,20281,20283,20286,20287,20288,20289,20290,20292,20293,20295,20296,20297,20298,20299,20300,20306,20308,20310,20321,20322,20326,20328,20330,20331,20333,20334,20337,20338,20341,20343,20344,20345,20346,20349,20352,20353,20354,20357,20358,20359,20362,20364,20366,20368,20370,20371,20373,20374,20376,20377,20378,20380,20382,20383,20385,20386,20388,20395,20397,20400,20401,20402,20403,20404,20406,20407,20408,20409,20410,20411,20412,20413,20414,20416,20417,20418,20422,20423,20424,20425,20427,20428,20429,20434,20435,20436,20437,20438,20441,20443,20448,20450,20452,20453,20455,20459,20460,20464,20466,20468,20469,20470,20471,20473,20475,20476,20477,20479,20480,20481,20482,20483,20484,20485,20486,20487,20488,20489,20490,20491,20494,20496,20497,20499,20501,20502,20503,20507,20509,20510,20512,20514,20515,20516,20519,20523,20527,20528,20529,20530,20531,20532,20533,20534,20535,20536,20537,20539,20541,20543,20544,20545,20546,20548,20549,20550,20553,20554,20555,20557,20560,20561,20562,20563,20564,20566,20567,20568,20569,20571,20573,20574,20575,20576,20577,20578,20579,20580,20582,20583,20584,20585,20586,20587,20589,20590,20591,20592,20593,20594,20595,20596,20597,20600,20601,20602,20604,20605,20609,20610,20611,20612,20614,20615,20617,20618,20619,20620,20622,20623,20624,20625,20626,20627,20628,20629,20630,20631,20632,20633,20634,20635,20636,20637,20638,20639,20640,20641,20642,20644,20646,20650,20651,20653,20654,20655,20656,20657,20659,20660,20661,20662,20663,20664,20665,20668,20669,20670,20671,20672,20673,20674,20675,20676,20677,20678,20679,20680,20681,20682,20683,20684,20685,20686,20688,20689,20690,20691,20692,20693,20695,20696,20697,20699,20700,20701,20702,20703,20704,20705,20706,20707,20708,20709,20712,20713,20714,20715,20719,20720,20721,20722,20724,20726,20727,20728,20729,20730,20732,20733,20734,20735,20736,20737,20738,20739,20740,20741,20744,20745,20746,20748,20749,20750,20751,20752,20753,20755,20756,20757,20758,20759,20760,20761,20762,20763,20764,20765,20766,20767,20768,20770,20771,20772,20773,20774,20775,20776,20777,20778,20779,20780,20781,20782,20783,20784,20785,20786,20787,20788,20789,20790,20791,20792,20793,20794,20795,20796,20797,20798,20802,20807,20810,20812,20814,20815,20816,20818,20819,20823,20824,20825,20827,20829,20830,20831,20832,20833,20835,20836,20838,20839,20841,20842,20847,20850,20858,20862,20863,20867,20868,20870,20871,20874,20875,20878,20879,20880,20881,20883,20884,20888,20890,20893,20894,20895,20897,20899,20902,20903,20904,20905,20906,20909,20910,20916,20920,20921,20922,20926,20927,20929,20930,20931,20933,20936,20938,20941,20942,20944,20946,20947,20948,20949,20950,20951,20952,20953,20954,20956,20958,20959,20962,20963,20965,20966,20967,20968,20969,20970,20972,20974,20977,20978,20980,20983,20990,20996,20997,21001,21003,21004,21007,21008,21011,21012,21013,21020,21022,21023,21025,21026,21027,21029,21030,21031,21034,21036,21039,21041,21042,21044,21045,21052,21054,21060,21061,21062,21063,21064,21065,21067,21070,21071,21074,21075,21077,21079,21080,21081,21082,21083,21085,21087,21088,21090,21091,21092,21094,21096,21099,21100,21101,21102,21104,21105,21107,21108,21109,21110,21111,21112,21113,21114,21115,21116,21118,21120,21123,21124,21125,21126,21127,21129,21130,21131,21132,21133,21134,21135,21137,21138,21140,21141,21142,21143,21144,21145,21146,21148,21156,21157,21158,21159,21166,21167,21168,21172,21173,21174,21175,21176,21177,21178,21179,21180,21181,21184,21185,21186,21188,21189,21190,21192,21194,21196,21197,21198,21199,21201,21203,21204,21205,21207,21209,21210,21211,21212,21213,21214,21216,21217,21218,21219,21221,21222,21223,21224,21225,21226,21227,21228,21229,21230,21231,21233,21234,21235,21236,21237,21238,21239,21240,21243,21244,21245,21249,21250,21251,21252,21255,21257,21258,21259,21260,21262,21265,21266,21267,21268,21272,21275,21276,21278,21279,21282,21284,21285,21287,21288,21289,21291,21292,21293,21295,21296,21297,21298,21299,21300,21301,21302,21303,21304,21308,21309,21312,21314,21316,21318,21323,21324,21325,21328,21332,21336,21337,21339,21341,21349,21352,21354,21356,21357,21362,21366,21369,21371,21372,21373,21374,21376,21377,21379,21383,21384,21386,21390,21391,21392,21393,21394,21395,21396,21398,21399,21401,21403,21404,21406,21408,21409,21412,21415,21418,21419,21420,21421,21423,21424,21425,21426,21427,21428,21429,21431,21432,21433,21434,21436,21437,21438,21440,21443,21444,21445,21446,21447,21454,21455,21456,21458,21459,21461,21466,21468,21469,21470,21473,21474,21479,21492,21498,21502,21503,21504,21506,21509,21511,21515,21524,21528,21529,21530,21532,21538,21540,21541,21546,21552,21555,21558,21559,21562,21565,21567,21569,21570,21572,21573,21575,21577,21580,21581,21582,21583,21585,21594,21597,21598,21599,21600,21601,21603,21605,21607,21609,21610,21611,21612,21613,21614,21615,21616,21620,21625,21626,21630,21631,21633,21635,21637,21639,21640,21641,21642,21645,21649,21651,21655,21656,21660,21662,21663,21664,21665,21666,21669,21678,21680,21682,21685,21686,21687,21689,21690,21692,21694,21699,21701,21706,21707,21718,21720,21723,21728,21729,21730,21731,21732,21739,21740,21743,21744,21745,21748,21749,21750,21751,21752,21753,21755,21758,21760,21762,21763,21764,21765,21768,21770,21771,21772,21773,21774,21778,21779,21781,21782,21783,21784,21785,21786,21788,21789,21790,21791,21793,21797,21798,21800,21801,21803,21805,21810,21812,21813,21814,21816,21817,21818,21819,21821,21824,21826,21829,21831,21832,21835,21836,21837,21838,21839,21841,21842,21843,21844,21847,21848,21849,21850,21851,21853,21854,21855,21856,21858,21859,21864,21865,21867,21871,21872,21873,21874,21875,21876,21881,21882,21885,21887,21893,21894,21900,21901,21902,21904,21906,21907,21909,21910,21911,21914,21915,21918,21920,21921,21922,21923,21924,21925,21926,21928,21929,21930,21931,21932,21933,21934,21935,21936,21938,21940,21942,21944,21946,21948,21951,21952,21953,21954,21955,21958,21959,21960,21962,21963,21966,21967,21968,21973,21975,21976,21977,21978,21979,21982,21984,21986,21991,21993,21997,21998,22000,22001,22004,22006,22008,22009,22010,22011,22012,22015,22018,22019,22020,22021,22022,22023,22026,22027,22029,22032,22033,22034,22035,22036,22037,22038,22039,22041,22042,22044,22045,22048,22049,22050,22053,22054,22056,22057,22058,22059,22062,22063,22064,22067,22069,22071,22072,22074,22076,22077,22078,22080,22081,22082,22083,22084,22085,22086,22087,22088,22089,22090,22091,22095,22096,22097,22098,22099,22101,22102,22106,22107,22109,22110,22111,22112,22113,22115,22117,22118,22119,22125,22126,22127,22128,22130,22131,22132,22133,22135,22136,22137,22138,22141,22142,22143,22144,22145,22146,22147,22148,22151,22152,22153,22154,22155,22156,22157,22160,22161,22162,22164,22165,22166,22167,22168,22169,22170,22171,22172,22173,22174,22175,22176,22177,22178,22180,22181,22182,22183,22184,22185,22186,22187,22188,22189,22190,22192,22193,22194,22195,22196,22197,22198,22200,22201,22202,22203,22205,22206,22207,22208,22209,22210,22211,22212,22213,22214,22215,22216,22217,22219,22220,22221,22222,22223,22224,22225,22226,22227,22229,22230,22232,22233,22236,22243,22245,22246,22247,22248,22249,22250,22252,22254,22255,22258,22259,22262,22263,22264,22267,22268,22272,22273,22274,22277,22279,22283,22284,22285,22286,22287,22288,22289,22290,22291,22292,22293,22294,22295,22296,22297,22298,22299,22301,22302,22304,22305,22306,22308,22309,22310,22311,22315,22321,22322,22324,22325,22326,22327,22328,22332,22333,22335,22337,22339,22340,22341,22342,22344,22345,22347,22354,22355,22356,22357,22358,22360,22361,22370,22371,22373,22375,22380,22382,22384,22385,22386,22388,22389,22392,22393,22394,22397,22398,22399,22400,22401,22407,22408,22409,22410,22413,22414,22415,22416,22417,22420,22421,22422,22423,22424,22425,22426,22428,22429,22430,22431,22437,22440,22442,22444,22447,22448,22449,22451,22453,22454,22455,22457,22458,22459,22460,22461,22462,22463,22464,22465,22468,22469,22470,22471,22472,22473,22474,22476,22477,22480,22481,22483,22486,22487,22491,22492,22494,22497,22498,22499,22501,22502,22503,22504,22505,22506,22507,22508,22510,22512,22513,22514,22515,22517,22518,22519,22523,22524,22526,22527,22529,22531,22532,22533,22536,22537,22538,22540,22542,22543,22544,22546,22547,22548,22550,22551,22552,22554,22555,22556,22557,22559,22562,22563,22565,22566,22567,22568,22569,22571,22572,22573,22574,22575,22577,22578,22579,22580,22582,22583,22584,22585,22586,22587,22588,22589,22590,22591,22592,22593,22594,22595,22597,22598,22599,22600,22601,22602,22603,22606,22607,22608,22610,22611,22613,22614,22615,22617,22618,22619,22620,22621,22623,22624,22625,22626,22627,22628,22630,22631,22632,22633,22634,22637,22638,22639,22640,22641,22642,22643,22644,22645,22646,22647,22648,22649,22650,22651,22652,22653,22655,22658,22660,22662,22663,22664,22666,22667,22668,22669,22670,22671,22672,22673,22676,22677,22678,22679,22680,22683,22684,22685,22688,22689,22690,22691,22692,22693,22694,22695,22698,22699,22700,22701,22702,22703,22704,22705,22706,22707,22708,22709,22710,22711,22712,22713,22714,22715,22717,22718,22719,22720,22722,22723,22724,22726,22727,22728,22729,22730,22731,22732,22733,22734,22735,22736,22738,22739,22740,22742,22743,22744,22745,22746,22747,22748,22749,22750,22751,22752,22753,22754,22755,22757,22758,22759,22760,22761,22762,22765,22767,22769,22770,22772,22773,22775,22776,22778,22779,22780,22781,22782,22783,22784,22785,22787,22789,22790,22792,22793,22794,22795,22796,22798,22800,22801,22802,22803,22807,22808,22811,22813,22814,22816,22817,22818,22819,22822,22824,22828,22832,22834,22835,22837,22838,22843,22845,22846,22847,22848,22851,22853,22854,22858,22860,22861,22864,22866,22867,22873,22875,22876,22877,22878,22879,22881,22883,22884,22886,22887,22888,22889,22890,22891,22892,22893,22894,22895,22896,22897,22898,22901,22903,22906,22907,22908,22910,22911,22912,22917,22921,22923,22924,22926,22927,22928,22929,22932,22933,22936,22938,22939,22940,22941,22943,22944,22945,22946,22950,22951,22956,22957,22960,22961,22963,22964,22965,22966,22967,22968,22970,22972,22973,22975,22976,22977,22978,22979,22980,22981,22983,22984,22985,22988,22989,22990,22991,22997,22998,23001,23003,23006,23007,23008,23009,23010,23012,23014,23015,23017,23018,23019,23021,23022,23023,23024,23025,23026,23027,23028,23029,23030,23031,23032,23034,23036,23037,23038,23040,23042,23050,23051,23053,23054,23055,23056,23058,23060,23061,23062,23063,23065,23066,23067,23069,23070,23073,23074,23076,23078,23079,23080,23082,23083,23084,23085,23086,23087,23088,23091,23093,23095,23096,23097,23098,23099,23101,23102,23103,23105,23106,23107,23108,23109,23111,23112,23115,23116,23117,23118,23119,23120,23121,23122,23123,23124,23126,23127,23128,23129,23131,23132,23133,23134,23135,23136,23137,23139,23140,23141,23142,23144,23145,23147,23148,23149,23150,23151,23152,23153,23154,23155,23160,23161,23163,23164,23165,23166,23168,23169,23170,23171,23172,23173,23174,23175,23176,23177,23178,23179,23180,23181,23182,23183,23184,23185,23187,23188,23189,23190,23191,23192,23193,23196,23197,23198,23199,23200,23201,23202,23203,23204,23205,23206,23207,23208,23209,23211,23212,23213,23214,23215,23216,23217,23220,23222,23223,23225,23226,23227,23228,23229,23231,23232,23235,23236,23237,23238,23239,23240,23242,23243,23245,23246,23247,23248,23249,23251,23253,23255,23257,23258,23259,23261,23262,23263,23266,23268,23269,23271,23272,23274,23276,23277,23278,23279,23280,23282,23283,23284,23285,23286,23287,23288,23289,23290,23291,23292,23293,23294,23295,23296,23297,23298,23299,23300,23301,23302,23303,23304,23306,23307,23308,23309,23310,23311,23312,23313,23314,23315,23316,23317,23320,23321,23322,23323,23324,23325,23326,23327,23328,23329,23330,23331,23332,23333,23334,23335,23336,23337,23338,23339,23340,23341,23342,23343,23344,23345,23347,23349,23350,23352,23353,23354,23355,23356,23357,23358,23359,23361,23362,23363,23364,23365,23366,23367,23368,23369,23370,23371,23372,23373,23374,23375,23378,23382,23390,23392,23393,23399,23400,23403,23405,23406,23407,23410,23412,23414,23415,23416,23417,23419,23420,23422,23423,23426,23430,23434,23437,23438,23440,23441,23442,23444,23446,23455,23463,23464,23465,23468,23469,23470,23471,23473,23474,23479,23482,23483,23484,23488,23489,23491,23496,23497,23498,23499,23501,23502,23503,23505,23508,23509,23510,23511,23512,23513,23514,23515,23516,23520,23522,23523,23526,23527,23529,23530,23531,23532,23533,23535,23537,23538,23539,23540,23541,23542,23543,23549,23550,23552,23554,23555,23557,23559,23560,23563,23564,23565,23566,23568,23570,23571,23575,23577,23579,23582,23583,23584,23585,23587,23590,23592,23593,23594,23595,23597,23598,23599,23600,23602,23603,23605,23606,23607,23619,23620,23622,23623,23628,23629,23634,23635,23636,23638,23639,23640,23642,23643,23644,23645,23647,23650,23652,23655,23656,23657,23658,23659,23660,23661,23664,23666,23667,23668,23669,23670,23671,23672,23675,23676,23677,23678,23680,23683,23684,23685,23686,23687,23689,23690,23691,23694,23695,23698,23699,23701,23709,23710,23711,23712,23713,23716,23717,23718,23719,23720,23722,23726,23727,23728,23730,23732,23734,23737,23738,23739,23740,23742,23744,23746,23747,23749,23750,23751,23752,23753,23754,23756,23757,23758,23759,23760,23761,23763,23764,23765,23766,23767,23768,23770,23771,23772,23773,23774,23775,23776,23778,23779,23783,23785,23787,23788,23790,23791,23793,23794,23795,23796,23797,23798,23799,23800,23801,23802,23804,23805,23806,23807,23808,23809,23812,23813,23816,23817,23818,23819,23820,23821,23823,23824,23825,23826,23827,23829,23831,23832,23833,23834,23836,23837,23839,23840,23841,23842,23843,23845,23848,23850,23851,23852,23855,23856,23857,23858,23859,23861,23862,23863,23864,23865,23866,23867,23868,23871,23872,23873,23874,23875,23876,23877,23878,23880,23881,23885,23886,23887,23888,23889,23890,23891,23892,23893,23894,23895,23897,23898,23900,23902,23903,23904,23905,23906,23907,23908,23909,23910,23911,23912,23914,23917,23918,23920,23921,23922,23923,23925,23926,23927,23928,23929,23930,23931,23932,23933,23934,23935,23936,23937,23939,23940,23941,23942,23943,23944,23945,23946,23947,23948,23949,23950,23951,23952,23953,23954,23955,23956,23957,23958,23959,23960,23962,23963,23964,23966,23967,23968,23969,23970,23971,23972,23973,23974,23975,23976,23977,23978,23979,23980,23981,23982,23983,23984,23985,23986,23987,23988,23989,23990,23992,23993,23994,23995,23996,23997,23998,23999,24000,24001,24002,24003,24004,24006,24007,24008,24009,24010,24011,24012,24014,24015,24016,24017,24018,24019,24020,24021,24022,24023,24024,24025,24026,24028,24031,24032,24035,24036,24042,24044,24045,24048,24053,24054,24056,24057,24058,24059,24060,24063,24064,24068,24071,24073,24074,24075,24077,24078,24082,24083,24087,24094,24095,24096,24097,24098,24099,24100,24101,24104,24105,24106,24107,24108,24111,24112,24114,24115,24116,24117,24118,24121,24122,24126,24127,24128,24129,24131,24134,24135,24136,24137,24138,24139,24141,24142,24143,24144,24145,24146,24147,24150,24151,24152,24153,24154,24156,24157,24159,24160,24163,24164,24165,24166,24167,24168,24169,24170,24171,24172,24173,24174,24175,24176,24177,24181,24183,24185,24190,24193,24194,24195,24197,24200,24201,24204,24205,24206,24210,24216,24219,24221,24225,24226,24227,24228,24232,24233,24234,24235,24236,24238,24239,24240,24241,24242,24244,24250,24251,24252,24253,24255,24256,24257,24258,24259,24260,24261,24262,24263,24264,24267,24268,24269,24270,24271,24272,24276,24277,24279,24280,24281,24282,24284,24285,24286,24287,24288,24289,24290,24291,24292,24293,24294,24295,24297,24299,24300,24301,24302,24303,24304,24305,24306,24307,24309,24312,24313,24315,24316,24317,24325,24326,24327,24329,24332,24333,24334,24336,24338,24340,24342,24345,24346,24348,24349,24350,24353,24354,24355,24356,24360,24363,24364,24366,24368,24370,24371,24372,24373,24374,24375,24376,24379,24381,24382,24383,24385,24386,24387,24388,24389,24390,24391,24392,24393,24394,24395,24396,24397,24398,24399,24401,24404,24409,24410,24411,24412,24414,24415,24416,24419,24421,24423,24424,24427,24430,24431,24434,24436,24437,24438,24440,24442,24445,24446,24447,24451,24454,24461,24462,24463,24465,24467,24468,24470,24474,24475,24477,24478,24479,24480,24482,24483,24484,24485,24486,24487,24489,24491,24492,24495,24496,24497,24498,24499,24500,24502,24504,24505,24506,24507,24510,24511,24512,24513,24514,24519,24520,24522,24523,24526,24531,24532,24533,24538,24539,24540,24542,24543,24546,24547,24549,24550,24552,24553,24556,24559,24560,24562,24563,24564,24566,24567,24569,24570,24572,24583,24584,24585,24587,24588,24592,24593,24595,24599,24600,24602,24606,24607,24610,24611,24612,24620,24621,24622,24624,24625,24626,24627,24628,24630,24631,24632,24633,24634,24637,24638,24640,24644,24645,24646,24647,24648,24649,24650,24652,24654,24655,24657,24659,24660,24662,24663,24664,24667,24668,24670,24671,24672,24673,24677,24678,24686,24689,24690,24692,24693,24695,24702,24704,24705,24706,24709,24710,24711,24712,24714,24715,24718,24719,24720,24721,24723,24725,24727,24728,24729,24732,24734,24737,24738,24740,24741,24743,24745,24746,24750,24752,24755,24757,24758,24759,24761,24762,24765,24766,24767,24768,24769,24770,24771,24772,24775,24776,24777,24780,24781,24782,24783,24784,24786,24787,24788,24790,24791,24793,24795,24798,24801,24802,24803,24804,24805,24810,24817,24818,24821,24823,24824,24827,24828,24829,24830,24831,24834,24835,24836,24837,24839,24842,24843,24844,24848,24849,24850,24851,24852,24854,24855,24856,24857,24859,24860,24861,24862,24865,24866,24869,24872,24873,24874,24876,24877,24878,24879,24880,24881,24882,24883,24884,24885,24886,24887,24888,24889,24890,24891,24892,24893,24894,24896,24897,24898,24899,24900,24901,24902,24903,24905,24907,24909,24911,24912,24914,24915,24916,24918,24919,24920,24921,24922,24923,24924,24926,24927,24928,24929,24931,24932,24933,24934,24937,24938,24939,24940,24941,24942,24943,24945,24946,24947,24948,24950,24952,24953,24954,24955,24956,24957,24958,24959,24960,24961,24962,24963,24964,24965,24966,24967,24968,24969,24970,24972,24973,24975,24976,24977,24978,24979,24981,24982,24983,24984,24985,24986,24987,24988,24990,24991,24992,24993,24994,24995,24996,24997,24998,25002,25003,25005,25006,25007,25008,25009,25010,25011,25012,25013,25014,25016,25017,25018,25019,25020,25021,25023,25024,25025,25027,25028,25029,25030,25031,25033,25036,25037,25038,25039,25040,25043,25045,25046,25047,25048,25049,25050,25051,25052,25053,25054,25055,25056,25057,25058,25059,25060,25061,25063,25064,25065,25066,25067,25068,25069,25070,25071,25072,25073,25074,25075,25076,25078,25079,25080,25081,25082,25083,25084,25085,25086,25088,25089,25090,25091,25092,25093,25095,25097,25107,25108,25113,25116,25117,25118,25120,25123,25126,25127,25128,25129,25131,25133,25135,25136,25137,25138,25141,25142,25144,25145,25146,25147,25148,25154,25156,25157,25158,25162,25167,25168,25173,25174,25175,25177,25178,25180,25181,25182,25183,25184,25185,25186,25188,25189,25192,25201,25202,25204,25205,25207,25208,25210,25211,25213,25217,25218,25219,25221,25222,25223,25224,25227,25228,25229,25230,25231,25232,25236,25241,25244,25245,25246,25251,25254,25255,25257,25258,25261,25262,25263,25264,25266,25267,25268,25270,25271,25272,25274,25278,25280,25281,25283,25291,25295,25297,25301,25309,25310,25312,25313,25316,25322,25323,25328,25330,25333,25336,25337,25338,25339,25344,25347,25348,25349,25350,25354,25355,25356,25357,25359,25360,25362,25363,25364,25365,25367,25368,25369,25372,25382,25383,25385,25388,25389,25390,25392,25393,25395,25396,25397,25398,25399,25400,25403,25404,25406,25407,25408,25409,25412,25415,25416,25418,25425,25426,25427,25428,25430,25431,25432,25433,25434,25435,25436,25437,25440,25444,25445,25446,25448,25450,25451,25452,25455,25456,25458,25459,25460,25461,25464,25465,25468,25469,25470,25471,25473,25475,25476,25477,25478,25483,25485,25489,25491,25492,25493,25495,25497,25498,25499,25500,25501,25502,25503,25505,25508,25510,25515,25519,25521,25522,25525,25526,25529,25531,25533,25535,25536,25537,25538,25539,25541,25543,25544,25546,25547,25548,25553,25555,25556,25557,25559,25560,25561,25562,25563,25564,25565,25567,25570,25572,25573,25574,25575,25576,25579,25580,25582,25583,25584,25585,25587,25589,25591,25593,25594,25595,25596,25598,25603,25604,25606,25607,25608,25609,25610,25613,25614,25617,25618,25621,25622,25623,25624,25625,25626,25629,25631,25634,25635,25636,25637,25639,25640,25641,25643,25646,25647,25648,25649,25650,25651,25653,25654,25655,25656,25657,25659,25660,25662,25664,25666,25667,25673,25675,25676,25677,25678,25679,25680,25681,25683,25685,25686,25687,25689,25690,25691,25692,25693,25695,25696,25697,25698,25699,25700,25701,25702,25704,25706,25707,25708,25710,25711,25712,25713,25714,25715,25716,25717,25718,25719,25723,25724,25725,25726,25727,25728,25729,25731,25734,25736,25737,25738,25739,25740,25741,25742,25743,25744,25747,25748,25751,25752,25754,25755,25756,25757,25759,25760,25761,25762,25763,25765,25766,25767,25768,25770,25771,25775,25777,25778,25779,25780,25782,25785,25787,25789,25790,25791,25793,25795,25796,25798,25799,25800,25801,25802,25803,25804,25807,25809,25811,25812,25813,25814,25817,25818,25819,25820,25821,25823,25824,25825,25827,25829,25831,25832,25833,25834,25835,25836,25837,25838,25839,25840,25841,25842,25843,25844,25845,25846,25847,25848,25849,25850,25851,25852,25853,25854,25855,25857,25858,25859,25860,25861,25862,25863,25864,25866,25867,25868,25869,25870,25871,25872,25873,25875,25876,25877,25878,25879,25881,25882,25883,25884,25885,25886,25887,25888,25889,25890,25891,25892,25894,25895,25896,25897,25898,25900,25901,25904,25905,25906,25907,25911,25914,25916,25917,25920,25921,25922,25923,25924,25926,25927,25930,25931,25933,25934,25936,25938,25939,25940,25943,25944,25946,25948,25951,25952,25953,25956,25957,25959,25960,25961,25962,25965,25966,25967,25969,25971,25973,25974,25976,25977,25978,25979,25980,25981,25982,25983,25984,25985,25986,25987,25988,25989,25990,25992,25993,25994,25997,25998,25999,26002,26004,26005,26006,26008,26010,26013,26014,26016,26018,26019,26022,26024,26026,26028,26030,26033,26034,26035,26036,26037,26038,26039,26040,26042,26043,26046,26047,26048,26050,26055,26056,26057,26058,26061,26064,26065,26067,26068,26069,26072,26073,26074,26075,26076,26077,26078,26079,26081,26083,26084,26090,26091,26098,26099,26100,26101,26104,26105,26107,26108,26109,26110,26111,26113,26116,26117,26119,26120,26121,26123,26125,26128,26129,26130,26134,26135,26136,26138,26139,26140,26142,26145,26146,26147,26148,26150,26153,26154,26155,26156,26158,26160,26162,26163,26167,26168,26169,26170,26171,26173,26175,26176,26178,26180,26181,26182,26183,26184,26185,26186,26189,26190,26192,26193,26200,26201,26203,26204,26205,26206,26208,26210,26211,26213,26215,26217,26218,26219,26220,26221,26225,26226,26227,26229,26232,26233,26235,26236,26237,26239,26240,26241,26243,26245,26246,26248,26249,26250,26251,26253,26254,26255,26256,26258,26259,26260,26261,26264,26265,26266,26267,26268,26270,26271,26272,26273,26274,26275,26276,26277,26278,26281,26282,26283,26284,26285,26287,26288,26289,26290,26291,26293,26294,26295,26296,26298,26299,26300,26301,26303,26304,26305,26306,26307,26308,26309,26310,26311,26312,26313,26314,26315,26316,26317,26318,26319,26320,26321,26322,26323,26324,26325,26326,26327,26328,26330,26334,26335,26336,26337,26338,26339,26340,26341,26343,26344,26346,26347,26348,26349,26350,26351,26353,26357,26358,26360,26362,26363,26365,26369,26370,26371,26372,26373,26374,26375,26380,26382,26383,26385,26386,26387,26390,26392,26393,26394,26396,26398,26400,26401,26402,26403,26404,26405,26407,26409,26414,26416,26418,26419,26422,26423,26424,26425,26427,26428,26430,26431,26433,26436,26437,26439,26442,26443,26445,26450,26452,26453,26455,26456,26457,26458,26459,26461,26466,26467,26468,26470,26471,26475,26476,26478,26481,26484,26486,26488,26489,26490,26491,26493,26496,26498,26499,26501,26502,26504,26506,26508,26509,26510,26511,26513,26514,26515,26516,26518,26521,26523,26527,26528,26529,26532,26534,26537,26540,26542,26545,26546,26548,26553,26554,26555,26556,26557,26558,26559,26560,26562,26565,26566,26567,26568,26569,26570,26571,26572,26573,26574,26581,26582,26583,26587,26591,26593,26595,26596,26598,26599,26600,26602,26603,26605,26606,26610,26613,26614,26615,26616,26617,26618,26619,26620,26622,26625,26626,26627,26628,26630,26637,26640,26642,26644,26645,26648,26649,26650,26651,26652,26654,26655,26656,26658,26659,26660,26661,26662,26663,26664,26667,26668,26669,26670,26671,26672,26673,26676,26677,26678,26682,26683,26687,26695,26699,26701,26703,26706,26710,26711,26712,26713,26714,26715,26716,26717,26718,26719,26730,26732,26733,26734,26735,26736,26737,26738,26739,26741,26744,26745,26746,26747,26748,26749,26750,26751,26752,26754,26756,26759,26760,26761,26762,26763,26764,26765,26766,26768,26769,26770,26772,26773,26774,26776,26777,26778,26779,26780,26781,26782,26783,26784,26785,26787,26788,26789,26793,26794,26795,26796,26798,26801,26802,26804,26806,26807,26808,26809,26810,26811,26812,26813,26814,26815,26817,26819,26820,26821,26822,26823,26824,26826,26828,26830,26831,26832,26833,26835,26836,26838,26839,26841,26843,26844,26845,26846,26847,26849,26850,26852,26853,26854,26855,26856,26857,26858,26859,26860,26861,26863,26866,26867,26868,26870,26871,26872,26875,26877,26878,26879,26880,26882,26883,26884,26886,26887,26888,26889,26890,26892,26895,26897,26899,26900,26901,26902,26903,26904,26905,26906,26907,26908,26909,26910,26913,26914,26915,26917,26918,26919,26920,26921,26922,26923,26924,26926,26927,26929,26930,26931,26933,26934,26935,26936,26938,26939,26940,26942,26944,26945,26947,26948,26949,26950,26951,26952,26953,26954,26955,26956,26957,26958,26959,26960,26961,26962,26963,26965,26966,26968,26969,26971,26972,26975,26977,26978,26980,26981,26983,26984,26985,26986,26988,26989,26991,26992,26994,26995,26996,26997,26998,27002,27003,27005,27006,27007,27009,27011,27013,27018,27019,27020,27022,27023,27024,27025,27026,27027,27030,27031,27033,27034,27037,27038,27039,27040,27041,27042,27043,27044,27045,27046,27049,27050,27052,27054,27055,27056,27058,27059,27061,27062,27064,27065,27066,27068,27069,27070,27071,27072,27074,27075,27076,27077,27078,27079,27080,27081,27083,27085,27087,27089,27090,27091,27093,27094,27095,27096,27097,27098,27100,27101,27102,27105,27106,27107,27108,27109,27110,27111,27112,27113,27114,27115,27116,27118,27119,27120,27121,27123,27124,27125,27126,27127,27128,27129,27130,27131,27132,27134,27136,27137,27138,27139,27140,27141,27142,27143,27144,27145,27147,27148,27149,27150,27151,27152,27153,27154,27155,27156,27157,27158,27161,27162,27163,27164,27165,27166,27168,27170,27171,27172,27173,27174,27175,27177,27179,27180,27181,27182,27184,27186,27187,27188,27190,27191,27192,27193,27194,27195,27196,27199,27200,27201,27202,27203,27205,27206,27208,27209,27210,27211,27212,27213,27214,27215,27217,27218,27219,27220,27221,27222,27223,27226,27228,27229,27230,27231,27232,27234,27235,27236,27238,27239,27240,27241,27242,27243,27244,27245,27246,27247,27248,27250,27251,27252,27253,27254,27255,27256,27258,27259,27261,27262,27263,27265,27266,27267,27269,27270,27271,27272,27273,27274,27275,27276,27277,27279,27282,27283,27284,27285,27286,27288,27289,27290,27291,27292,27293,27294,27295,27297,27298,27299,27300,27301,27302,27303,27304,27306,27309,27310,27311,27312,27313,27314,27315,27316,27317,27318,27319,27320,27321,27322,27323,27324,27325,27326,27327,27328,27329,27330,27331,27332,27333,27334,27335,27336,27337,27338,27339,27340,27341,27342,27343,27344,27345,27346,27347,27348,27349,27350,27351,27352,27353,27354,27355,27356,27357,27358,27359,27360,27361,27362,27363,27364,27365,27366,27367,27368,27369,27370,27371,27372,27373,27374,27375,27376,27377,27378,27379,27380,27381,27382,27383,27384,27385,27386,27387,27388,27389,27390,27391,27392,27393,27394,27395,27396,27397,27398,27399,27400,27401,27402,27403,27404,27405,27406,27407,27408,27409,27410,27411,27412,27413,27414,27415,27416,27417,27418,27419,27420,27421,27422,27423,27429,27430,27432,27433,27434,27435,27436,27437,27438,27439,27440,27441,27443,27444,27445,27446,27448,27451,27452,27453,27455,27456,27457,27458,27460,27461,27464,27466,27467,27469,27470,27471,27472,27473,27474,27475,27476,27477,27478,27479,27480,27482,27483,27484,27485,27486,27487,27488,27489,27496,27497,27499,27500,27501,27502,27503,27504,27505,27506,27507,27508,27509,27510,27511,27512,27514,27517,27518,27519,27520,27525,27528,27532,27534,27535,27536,27537,27540,27541,27543,27544,27545,27548,27549,27550,27551,27552,27554,27555,27556,27557,27558,27559,27560,27561,27563,27564,27565,27566,27567,27568,27569,27570,27574,27576,27577,27578,27579,27580,27581,27582,27584,27587,27588,27590,27591,27592,27593,27594,27596,27598,27600,27601,27608,27610,27612,27613,27614,27615,27616,27618,27619,27620,27621,27622,27623,27624,27625,27628,27629,27630,27632,27633,27634,27636,27638,27639,27640,27642,27643,27644,27646,27647,27648,27649,27650,27651,27652,27656,27657,27658,27659,27660,27662,27666,27671,27676,27677,27678,27680,27683,27685,27691,27692,27693,27697,27699,27702,27703,27705,27706,27707,27708,27710,27711,27715,27716,27717,27720,27723,27724,27725,27726,27727,27729,27730,27731,27734,27736,27737,27738,27746,27747,27749,27750,27751,27755,27756,27757,27758,27759,27761,27763,27765,27767,27768,27770,27771,27772,27775,27776,27780,27783,27786,27787,27789,27790,27793,27794,27797,27798,27799,27800,27802,27804,27805,27806,27808,27810,27816,27820,27823,27824,27828,27829,27830,27831,27834,27840,27841,27842,27843,27846,27847,27848,27851,27853,27854,27855,27857,27858,27864,27865,27866,27868,27869,27871,27876,27878,27879,27881,27884,27885,27890,27892,27897,27903,27904,27906,27907,27909,27910,27912,27913,27914,27917,27919,27920,27921,27923,27924,27925,27926,27928,27932,27933,27935,27936,27937,27938,27939,27940,27942,27944,27945,27948,27949,27951,27952,27956,27958,27959,27960,27962,27967,27968,27970,27972,27977,27980,27984,27989,27990,27991,27992,27995,27997,27999,28001,28002,28004,28005,28007,28008,28011,28012,28013,28016,28017,28018,28019,28021,28022,28025,28026,28027,28029,28030,28031,28032,28033,28035,28036,28038,28039,28042,28043,28045,28047,28048,28050,28054,28055,28056,28057,28058,28060,28066,28069,28076,28077,28080,28081,28083,28084,28086,28087,28089,28090,28091,28092,28093,28094,28097,28098,28099,28104,28105,28106,28109,28110,28111,28112,28114,28115,28116,28117,28119,28122,28123,28124,28127,28130,28131,28133,28135,28136,28137,28138,28141,28143,28144,28146,28148,28149,28150,28152,28154,28157,28158,28159,28160,28161,28162,28163,28164,28166,28167,28168,28169,28171,28175,28178,28179,28181,28184,28185,28187,28188,28190,28191,28194,28198,28199,28200,28202,28204,28206,28208,28209,28211,28213,28214,28215,28217,28219,28220,28221,28222,28223,28224,28225,28226,28229,28230,28231,28232,28233,28234,28235,28236,28239,28240,28241,28242,28245,28247,28249,28250,28252,28253,28254,28256,28257,28258,28259,28260,28261,28262,28263,28264,28265,28266,28268,28269,28271,28272,28273,28274,28275,28276,28277,28278,28279,28280,28281,28282,28283,28284,28285,28288,28289,28290,28292,28295,28296,28298,28299,28300,28301,28302,28305,28306,28307,28308,28309,28310,28311,28313,28314,28315,28317,28318,28320,28321,28323,28324,28326,28328,28329,28331,28332,28333,28334,28336,28339,28341,28344,28345,28348,28350,28351,28352,28355,28356,28357,28358,28360,28361,28362,28364,28365,28366,28368,28370,28374,28376,28377,28379,28380,28381,28387,28391,28394,28395,28396,28397,28398,28399,28400,28401,28402,28403,28405,28406,28407,28408,28410,28411,28412,28413,28414,28415,28416,28417,28419,28420,28421,28423,28424,28426,28427,28428,28429,28430,28432,28433,28434,28438,28439,28440,28441,28442,28443,28444,28445,28446,28447,28449,28450,28451,28453,28454,28455,28456,28460,28462,28464,28466,28468,28469,28471,28472,28473,28474,28475,28476,28477,28479,28480,28481,28482,28483,28484,28485,28488,28489,28490,28492,28494,28495,28496,28497,28498,28499,28500,28501,28502,28503,28505,28506,28507,28509,28511,28512,28513,28515,28516,28517,28519,28520,28521,28522,28523,28524,28527,28528,28529,28531,28533,28534,28535,28537,28539,28541,28542,28543,28544,28545,28546,28547,28549,28550,28551,28554,28555,28559,28560,28561,28562,28563,28564,28565,28566,28567,28568,28569,28570,28571,28573,28574,28575,28576,28578,28579,28580,28581,28582,28584,28585,28586,28587,28588,28589,28590,28591,28592,28593,28594,28596,28597,28599,28600,28602,28603,28604,28605,28606,28607,28609,28611,28612,28613,28614,28615,28616,28618,28619,28620,28621,28622,28623,28624,28627,28628,28629,28630,28631,28632,28633,28634,28635,28636,28637,28639,28642,28643,28644,28645,28646,28647,28648,28649,28650,28651,28652,28653,28656,28657,28658,28659,28660,28661,28662,28663,28664,28665,28666,28667,28668,28669,28670,28671,28672,28673,28674,28675,28676,28677,28678,28679,28680,28681,28682,28683,28684,28685,28686,28687,28688,28690,28691,28692,28693,28694,28695,28696,28697,28700,28701,28702,28703,28704,28705,28706,28708,28709,28710,28711,28712,28713,28714,28715,28716,28717,28718,28719,28720,28721,28722,28723,28724,28726,28727,28728,28730,28731,28732,28733,28734,28735,28736,28737,28738,28739,28740,28741,28742,28743,28744,28745,28746,28747,28749,28750,28752,28753,28754,28755,28756,28757,28758,28759,28760,28761,28762,28763,28764,28765,28767,28768,28769,28770,28771,28772,28773,28774,28775,28776,28777,28778,28782,28785,28786,28787,28788,28791,28793,28794,28795,28797,28801,28802,28803,28804,28806,28807,28808,28811,28812,28813,28815,28816,28817,28819,28823,28824,28826,28827,28830,28831,28832,28833,28834,28835,28836,28837,28838,28839,28840,28841,28842,28848,28850,28852,28853,28854,28858,28862,28863,28868,28869,28870,28871,28873,28875,28876,28877,28878,28879,28880,28881,28882,28883,28884,28885,28886,28887,28890,28892,28893,28894,28896,28897,28898,28899,28901,28906,28910,28912,28913,28914,28915,28916,28917,28918,28920,28922,28923,28924,28926,28927,28928,28929,28930,28931,28932,28933,28934,28935,28936,28939,28940,28941,28942,28943,28945,28946,28948,28951,28955,28956,28957,28958,28959,28960,28961,28962,28963,28964,28965,28967,28968,28969,28970,28971,28972,28973,28974,28978,28979,28980,28981,28983,28984,28985,28986,28987,28988,28989,28990,28991,28992,28993,28994,28995,28996,28998,28999,29000,29001,29003,29005,29007,29008,29009,29010,29011,29012,29013,29014,29015,29016,29017,29018,29019,29021,29023,29024,29025,29026,29027,29029,29033,29034,29035,29036,29037,29039,29040,29041,29044,29045,29046,29047,29049,29051,29052,29054,29055,29056,29057,29058,29059,29061,29062,29063,29064,29065,29067,29068,29069,29070,29072,29073,29074,29075,29077,29078,29079,29082,29083,29084,29085,29086,29089,29090,29091,29092,29093,29094,29095,29097,29098,29099,29101,29102,29103,29104,29105,29106,29108,29110,29111,29112,29114,29115,29116,29117,29118,29119,29120,29121,29122,29124,29125,29126,29127,29128,29129,29130,29131,29132,29133,29135,29136,29137,29138,29139,29142,29143,29144,29145,29146,29147,29148,29149,29150,29151,29153,29154,29155,29156,29158,29160,29161,29162,29163,29164,29165,29167,29168,29169,29170,29171,29172,29173,29174,29175,29176,29178,29179,29180,29181,29182,29183,29184,29185,29186,29187,29188,29189,29191,29192,29193,29194,29195,29196,29197,29198,29199,29200,29201,29202,29203,29204,29205,29206,29207,29208,29209,29210,29211,29212,29214,29215,29216,29217,29218,29219,29220,29221,29222,29223,29225,29227,29229,29230,29231,29234,29235,29236,29242,29244,29246,29248,29249,29250,29251,29252,29253,29254,29257,29258,29259,29262,29263,29264,29265,29267,29268,29269,29271,29272,29274,29276,29278,29280,29283,29284,29285,29288,29290,29291,29292,29293,29296,29297,29299,29300,29302,29303,29304,29307,29308,29309,29314,29315,29317,29318,29319,29320,29321,29324,29326,29328,29329,29331,29332,29333,29334,29335,29336,29337,29338,29339,29340,29341,29342,29344,29345,29346,29347,29348,29349,29350,29351,29352,29353,29354,29355,29358,29361,29362,29363,29365,29370,29371,29372,29373,29374,29375,29376,29381,29382,29383,29385,29386,29387,29388,29391,29393,29395,29396,29397,29398,29400,29402,29403,58566,58567,58568,58569,58570,58571,58572,58573,58574,58575,58576,58577,58578,58579,58580,58581,58582,58583,58584,58585,58586,58587,58588,58589,58590,58591,58592,58593,58594,58595,58596,58597,58598,58599,58600,58601,58602,58603,58604,58605,58606,58607,58608,58609,58610,58611,58612,58613,58614,58615,58616,58617,58618,58619,58620,58621,58622,58623,58624,58625,58626,58627,58628,58629,58630,58631,58632,58633,58634,58635,58636,58637,58638,58639,58640,58641,58642,58643,58644,58645,58646,58647,58648,58649,58650,58651,58652,58653,58654,58655,58656,58657,58658,58659,58660,58661,12288,12289,12290,183,713,711,168,12291,12293,8212,65374,8214,8230,8216,8217,8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,12310,12311,12304,12305,177,215,247,8758,8743,8744,8721,8719,8746,8745,8712,8759,8730,8869,8741,8736,8978,8857,8747,8750,8801,8780,8776,8765,8733,8800,8814,8815,8804,8805,8734,8757,8756,9794,9792,176,8242,8243,8451,65284,164,65504,65505,8240,167,8470,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,8251,8594,8592,8593,8595,12307,58662,58663,58664,58665,58666,58667,58668,58669,58670,58671,58672,58673,58674,58675,58676,58677,58678,58679,58680,58681,58682,58683,58684,58685,58686,58687,58688,58689,58690,58691,58692,58693,58694,58695,58696,58697,58698,58699,58700,58701,58702,58703,58704,58705,58706,58707,58708,58709,58710,58711,58712,58713,58714,58715,58716,58717,58718,58719,58720,58721,58722,58723,58724,58725,58726,58727,58728,58729,58730,58731,58732,58733,58734,58735,58736,58737,58738,58739,58740,58741,58742,58743,58744,58745,58746,58747,58748,58749,58750,58751,58752,58753,58754,58755,58756,58757,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,59238,59239,59240,59241,59242,59243,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9371,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,9347,9348,9349,9350,9351,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,8364,59245,12832,12833,12834,12835,12836,12837,12838,12839,12840,12841,59246,59247,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,59248,59249,58758,58759,58760,58761,58762,58763,58764,58765,58766,58767,58768,58769,58770,58771,58772,58773,58774,58775,58776,58777,58778,58779,58780,58781,58782,58783,58784,58785,58786,58787,58788,58789,58790,58791,58792,58793,58794,58795,58796,58797,58798,58799,58800,58801,58802,58803,58804,58805,58806,58807,58808,58809,58810,58811,58812,58813,58814,58815,58816,58817,58818,58819,58820,58821,58822,58823,58824,58825,58826,58827,58828,58829,58830,58831,58832,58833,58834,58835,58836,58837,58838,58839,58840,58841,58842,58843,58844,58845,58846,58847,58848,58849,58850,58851,58852,12288,65281,65282,65283,65509,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65340,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65507,58854,58855,58856,58857,58858,58859,58860,58861,58862,58863,58864,58865,58866,58867,58868,58869,58870,58871,58872,58873,58874,58875,58876,58877,58878,58879,58880,58881,58882,58883,58884,58885,58886,58887,58888,58889,58890,58891,58892,58893,58894,58895,58896,58897,58898,58899,58900,58901,58902,58903,58904,58905,58906,58907,58908,58909,58910,58911,58912,58913,58914,58915,58916,58917,58918,58919,58920,58921,58922,58923,58924,58925,58926,58927,58928,58929,58930,58931,58932,58933,58934,58935,58936,58937,58938,58939,58940,58941,58942,58943,58944,58945,58946,58947,58948,58949,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,59250,59251,59252,59253,59254,59255,59256,59257,59258,59259,59260,58950,58951,58952,58953,58954,58955,58956,58957,58958,58959,58960,58961,58962,58963,58964,58965,58966,58967,58968,58969,58970,58971,58972,58973,58974,58975,58976,58977,58978,58979,58980,58981,58982,58983,58984,58985,58986,58987,58988,58989,58990,58991,58992,58993,58994,58995,58996,58997,58998,58999,59000,59001,59002,59003,59004,59005,59006,59007,59008,59009,59010,59011,59012,59013,59014,59015,59016,59017,59018,59019,59020,59021,59022,59023,59024,59025,59026,59027,59028,59029,59030,59031,59032,59033,59034,59035,59036,59037,59038,59039,59040,59041,59042,59043,59044,59045,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,59261,59262,59263,59264,59265,59266,59267,59268,59046,59047,59048,59049,59050,59051,59052,59053,59054,59055,59056,59057,59058,59059,59060,59061,59062,59063,59064,59065,59066,59067,59068,59069,59070,59071,59072,59073,59074,59075,59076,59077,59078,59079,59080,59081,59082,59083,59084,59085,59086,59087,59088,59089,59090,59091,59092,59093,59094,59095,59096,59097,59098,59099,59100,59101,59102,59103,59104,59105,59106,59107,59108,59109,59110,59111,59112,59113,59114,59115,59116,59117,59118,59119,59120,59121,59122,59123,59124,59125,59126,59127,59128,59129,59130,59131,59132,59133,59134,59135,59136,59137,59138,59139,59140,59141,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,59269,59270,59271,59272,59273,59274,59275,59276,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,59277,59278,59279,59280,59281,59282,59283,65077,65078,65081,65082,65087,65088,65085,65086,65089,65090,65091,65092,59284,59285,65083,65084,65079,65080,65073,59286,65075,65076,59287,59288,59289,59290,59291,59292,59293,59294,59295,59142,59143,59144,59145,59146,59147,59148,59149,59150,59151,59152,59153,59154,59155,59156,59157,59158,59159,59160,59161,59162,59163,59164,59165,59166,59167,59168,59169,59170,59171,59172,59173,59174,59175,59176,59177,59178,59179,59180,59181,59182,59183,59184,59185,59186,59187,59188,59189,59190,59191,59192,59193,59194,59195,59196,59197,59198,59199,59200,59201,59202,59203,59204,59205,59206,59207,59208,59209,59210,59211,59212,59213,59214,59215,59216,59217,59218,59219,59220,59221,59222,59223,59224,59225,59226,59227,59228,59229,59230,59231,59232,59233,59234,59235,59236,59237,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,59296,59297,59298,59299,59300,59301,59302,59303,59304,59305,59306,59307,59308,59309,59310,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,59311,59312,59313,59314,59315,59316,59317,59318,59319,59320,59321,59322,59323,714,715,729,8211,8213,8229,8245,8453,8457,8598,8599,8600,8601,8725,8735,8739,8786,8806,8807,8895,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584,9585,9586,9587,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9619,9620,9621,9660,9661,9698,9699,9700,9701,9737,8853,12306,12317,12318,59324,59325,59326,59327,59328,59329,59330,59331,59332,59333,59334,257,225,462,224,275,233,283,232,299,237,464,236,333,243,466,242,363,250,468,249,470,472,474,476,252,234,593,7743,324,328,505,609,59337,59338,59339,59340,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,59341,59342,59343,59344,59345,59346,59347,59348,59349,59350,59351,59352,59353,59354,59355,59356,59357,59358,59359,59360,59361,12321,12322,12323,12324,12325,12326,12327,12328,12329,12963,13198,13199,13212,13213,13214,13217,13252,13262,13265,13266,13269,65072,65506,65508,59362,8481,12849,59363,8208,59364,59365,59366,12540,12443,12444,12541,12542,12294,12445,12446,65097,65098,65099,65100,65101,65102,65103,65104,65105,65106,65108,65109,65110,65111,65113,65114,65115,65116,65117,65118,65119,65120,65121,65122,65123,65124,65125,65126,65128,65129,65130,65131,12350,12272,12273,12274,12275,12276,12277,12278,12279,12280,12281,12282,12283,12295,59380,59381,59382,59383,59384,59385,59386,59387,59388,59389,59390,59391,59392,9472,9473,9474,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506,9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,59393,59394,59395,59396,59397,59398,59399,59400,59401,59402,59403,59404,59405,59406,59407,29404,29405,29407,29410,29411,29412,29413,29414,29415,29418,29419,29429,29430,29433,29437,29438,29439,29440,29442,29444,29445,29446,29447,29448,29449,29451,29452,29453,29455,29456,29457,29458,29460,29464,29465,29466,29471,29472,29475,29476,29478,29479,29480,29485,29487,29488,29490,29491,29493,29494,29498,29499,29500,29501,29504,29505,29506,29507,29508,29509,29510,29511,29512,29513,29514,29515,29516,29518,29519,29521,29523,29524,29525,29526,29528,29529,29530,29531,29532,29533,29534,29535,29537,29538,29539,29540,29541,29542,29543,29544,29545,29546,29547,29550,29552,29553,57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359,57360,57361,57362,57363,57364,57365,57366,57367,57368,57369,57370,57371,57372,57373,57374,57375,57376,57377,57378,57379,57380,57381,57382,57383,57384,57385,57386,57387,57388,57389,57390,57391,57392,57393,57394,57395,57396,57397,57398,57399,57400,57401,57402,57403,57404,57405,57406,57407,57408,57409,57410,57411,57412,57413,57414,57415,57416,57417,57418,57419,57420,57421,57422,57423,57424,57425,57426,57427,57428,57429,57430,57431,57432,57433,57434,57435,57436,57437,29554,29555,29556,29557,29558,29559,29560,29561,29562,29563,29564,29565,29567,29568,29569,29570,29571,29573,29574,29576,29578,29580,29581,29583,29584,29586,29587,29588,29589,29591,29592,29593,29594,29596,29597,29598,29600,29601,29603,29604,29605,29606,29607,29608,29610,29612,29613,29617,29620,29621,29622,29624,29625,29628,29629,29630,29631,29633,29635,29636,29637,29638,29639,29643,29644,29646,29650,29651,29652,29653,29654,29655,29656,29658,29659,29660,29661,29663,29665,29666,29667,29668,29670,29672,29674,29675,29676,29678,29679,29680,29681,29683,29684,29685,29686,29687,57438,57439,57440,57441,57442,57443,57444,57445,57446,57447,57448,57449,57450,57451,57452,57453,57454,57455,57456,57457,57458,57459,57460,57461,57462,57463,57464,57465,57466,57467,57468,57469,57470,57471,57472,57473,57474,57475,57476,57477,57478,57479,57480,57481,57482,57483,57484,57485,57486,57487,57488,57489,57490,57491,57492,57493,57494,57495,57496,57497,57498,57499,57500,57501,57502,57503,57504,57505,57506,57507,57508,57509,57510,57511,57512,57513,57514,57515,57516,57517,57518,57519,57520,57521,57522,57523,57524,57525,57526,57527,57528,57529,57530,57531,29688,29689,29690,29691,29692,29693,29694,29695,29696,29697,29698,29700,29703,29704,29707,29708,29709,29710,29713,29714,29715,29716,29717,29718,29719,29720,29721,29724,29725,29726,29727,29728,29729,29731,29732,29735,29737,29739,29741,29743,29745,29746,29751,29752,29753,29754,29755,29757,29758,29759,29760,29762,29763,29764,29765,29766,29767,29768,29769,29770,29771,29772,29773,29774,29775,29776,29777,29778,29779,29780,29782,29784,29789,29792,29793,29794,29795,29796,29797,29798,29799,29800,29801,29802,29803,29804,29806,29807,29809,29810,29811,29812,29813,29816,29817,29818,57532,57533,57534,57535,57536,57537,57538,57539,57540,57541,57542,57543,57544,57545,57546,57547,57548,57549,57550,57551,57552,57553,57554,57555,57556,57557,57558,57559,57560,57561,57562,57563,57564,57565,57566,57567,57568,57569,57570,57571,57572,57573,57574,57575,57576,57577,57578,57579,57580,57581,57582,57583,57584,57585,57586,57587,57588,57589,57590,57591,57592,57593,57594,57595,57596,57597,57598,57599,57600,57601,57602,57603,57604,57605,57606,57607,57608,57609,57610,57611,57612,57613,57614,57615,57616,57617,57618,57619,57620,57621,57622,57623,57624,57625,29819,29820,29821,29823,29826,29828,29829,29830,29832,29833,29834,29836,29837,29839,29841,29842,29843,29844,29845,29846,29847,29848,29849,29850,29851,29853,29855,29856,29857,29858,29859,29860,29861,29862,29866,29867,29868,29869,29870,29871,29872,29873,29874,29875,29876,29877,29878,29879,29880,29881,29883,29884,29885,29886,29887,29888,29889,29890,29891,29892,29893,29894,29895,29896,29897,29898,29899,29900,29901,29902,29903,29904,29905,29907,29908,29909,29910,29911,29912,29913,29914,29915,29917,29919,29921,29925,29927,29928,29929,29930,29931,29932,29933,29936,29937,29938,57626,57627,57628,57629,57630,57631,57632,57633,57634,57635,57636,57637,57638,57639,57640,57641,57642,57643,57644,57645,57646,57647,57648,57649,57650,57651,57652,57653,57654,57655,57656,57657,57658,57659,57660,57661,57662,57663,57664,57665,57666,57667,57668,57669,57670,57671,57672,57673,57674,57675,57676,57677,57678,57679,57680,57681,57682,57683,57684,57685,57686,57687,57688,57689,57690,57691,57692,57693,57694,57695,57696,57697,57698,57699,57700,57701,57702,57703,57704,57705,57706,57707,57708,57709,57710,57711,57712,57713,57714,57715,57716,57717,57718,57719,29939,29941,29944,29945,29946,29947,29948,29949,29950,29952,29953,29954,29955,29957,29958,29959,29960,29961,29962,29963,29964,29966,29968,29970,29972,29973,29974,29975,29979,29981,29982,29984,29985,29986,29987,29988,29990,29991,29994,29998,30004,30006,30009,30012,30013,30015,30017,30018,30019,30020,30022,30023,30025,30026,30029,30032,30033,30034,30035,30037,30038,30039,30040,30045,30046,30047,30048,30049,30050,30051,30052,30055,30056,30057,30059,30060,30061,30062,30063,30064,30065,30067,30069,30070,30071,30074,30075,30076,30077,30078,30080,30081,30082,30084,30085,30087,57720,57721,57722,57723,57724,57725,57726,57727,57728,57729,57730,57731,57732,57733,57734,57735,57736,57737,57738,57739,57740,57741,57742,57743,57744,57745,57746,57747,57748,57749,57750,57751,57752,57753,57754,57755,57756,57757,57758,57759,57760,57761,57762,57763,57764,57765,57766,57767,57768,57769,57770,57771,57772,57773,57774,57775,57776,57777,57778,57779,57780,57781,57782,57783,57784,57785,57786,57787,57788,57789,57790,57791,57792,57793,57794,57795,57796,57797,57798,57799,57800,57801,57802,57803,57804,57805,57806,57807,57808,57809,57810,57811,57812,57813,30088,30089,30090,30092,30093,30094,30096,30099,30101,30104,30107,30108,30110,30114,30118,30119,30120,30121,30122,30125,30134,30135,30138,30139,30143,30144,30145,30150,30155,30156,30158,30159,30160,30161,30163,30167,30169,30170,30172,30173,30175,30176,30177,30181,30185,30188,30189,30190,30191,30194,30195,30197,30198,30199,30200,30202,30203,30205,30206,30210,30212,30214,30215,30216,30217,30219,30221,30222,30223,30225,30226,30227,30228,30230,30234,30236,30237,30238,30241,30243,30247,30248,30252,30254,30255,30257,30258,30262,30263,30265,30266,30267,30269,30273,30274,30276,57814,57815,57816,57817,57818,57819,57820,57821,57822,57823,57824,57825,57826,57827,57828,57829,57830,57831,57832,57833,57834,57835,57836,57837,57838,57839,57840,57841,57842,57843,57844,57845,57846,57847,57848,57849,57850,57851,57852,57853,57854,57855,57856,57857,57858,57859,57860,57861,57862,57863,57864,57865,57866,57867,57868,57869,57870,57871,57872,57873,57874,57875,57876,57877,57878,57879,57880,57881,57882,57883,57884,57885,57886,57887,57888,57889,57890,57891,57892,57893,57894,57895,57896,57897,57898,57899,57900,57901,57902,57903,57904,57905,57906,57907,30277,30278,30279,30280,30281,30282,30283,30286,30287,30288,30289,30290,30291,30293,30295,30296,30297,30298,30299,30301,30303,30304,30305,30306,30308,30309,30310,30311,30312,30313,30314,30316,30317,30318,30320,30321,30322,30323,30324,30325,30326,30327,30329,30330,30332,30335,30336,30337,30339,30341,30345,30346,30348,30349,30351,30352,30354,30356,30357,30359,30360,30362,30363,30364,30365,30366,30367,30368,30369,30370,30371,30373,30374,30375,30376,30377,30378,30379,30380,30381,30383,30384,30387,30389,30390,30391,30392,30393,30394,30395,30396,30397,30398,30400,30401,30403,21834,38463,22467,25384,21710,21769,21696,30353,30284,34108,30702,33406,30861,29233,38552,38797,27688,23433,20474,25353,26263,23736,33018,26696,32942,26114,30414,20985,25942,29100,32753,34948,20658,22885,25034,28595,33453,25420,25170,21485,21543,31494,20843,30116,24052,25300,36299,38774,25226,32793,22365,38712,32610,29240,30333,26575,30334,25670,20336,36133,25308,31255,26001,29677,25644,25203,33324,39041,26495,29256,25198,25292,20276,29923,21322,21150,32458,37030,24110,26758,27036,33152,32465,26834,30917,34444,38225,20621,35876,33502,32990,21253,35090,21093,30404,30407,30409,30411,30412,30419,30421,30425,30426,30428,30429,30430,30432,30433,30434,30435,30436,30438,30439,30440,30441,30442,30443,30444,30445,30448,30451,30453,30454,30455,30458,30459,30461,30463,30464,30466,30467,30469,30470,30474,30476,30478,30479,30480,30481,30482,30483,30484,30485,30486,30487,30488,30491,30492,30493,30494,30497,30499,30500,30501,30503,30506,30507,30508,30510,30512,30513,30514,30515,30516,30521,30523,30525,30526,30527,30530,30532,30533,30534,30536,30537,30538,30539,30540,30541,30542,30543,30546,30547,30548,30549,30550,30551,30552,30553,30556,34180,38649,20445,22561,39281,23453,25265,25253,26292,35961,40077,29190,26479,30865,24754,21329,21271,36744,32972,36125,38049,20493,29384,22791,24811,28953,34987,22868,33519,26412,31528,23849,32503,29997,27893,36454,36856,36924,40763,27604,37145,31508,24444,30887,34006,34109,27605,27609,27606,24065,24199,30201,38381,25949,24330,24517,36767,22721,33218,36991,38491,38829,36793,32534,36140,25153,20415,21464,21342,36776,36777,36779,36941,26631,24426,33176,34920,40150,24971,21035,30250,24428,25996,28626,28392,23486,25672,20853,20912,26564,19993,31177,39292,28851,30557,30558,30559,30560,30564,30567,30569,30570,30573,30574,30575,30576,30577,30578,30579,30580,30581,30582,30583,30584,30586,30587,30588,30593,30594,30595,30598,30599,30600,30601,30602,30603,30607,30608,30611,30612,30613,30614,30615,30616,30617,30618,30619,30620,30621,30622,30625,30627,30628,30630,30632,30635,30637,30638,30639,30641,30642,30644,30646,30647,30648,30649,30650,30652,30654,30656,30657,30658,30659,30660,30661,30662,30663,30664,30665,30666,30667,30668,30670,30671,30672,30673,30674,30675,30676,30677,30678,30680,30681,30682,30685,30686,30687,30688,30689,30692,30149,24182,29627,33760,25773,25320,38069,27874,21338,21187,25615,38082,31636,20271,24091,33334,33046,33162,28196,27850,39539,25429,21340,21754,34917,22496,19981,24067,27493,31807,37096,24598,25830,29468,35009,26448,25165,36130,30572,36393,37319,24425,33756,34081,39184,21442,34453,27531,24813,24808,28799,33485,33329,20179,27815,34255,25805,31961,27133,26361,33609,21397,31574,20391,20876,27979,23618,36461,25554,21449,33580,33590,26597,30900,25661,23519,23700,24046,35815,25286,26612,35962,25600,25530,34633,39307,35863,32544,38130,20135,38416,39076,26124,29462,30694,30696,30698,30703,30704,30705,30706,30708,30709,30711,30713,30714,30715,30716,30723,30724,30725,30726,30727,30728,30730,30731,30734,30735,30736,30739,30741,30745,30747,30750,30752,30753,30754,30756,30760,30762,30763,30766,30767,30769,30770,30771,30773,30774,30781,30783,30785,30786,30787,30788,30790,30792,30793,30794,30795,30797,30799,30801,30803,30804,30808,30809,30810,30811,30812,30814,30815,30816,30817,30818,30819,30820,30821,30822,30823,30824,30825,30831,30832,30833,30834,30835,30836,30837,30838,30840,30841,30842,30843,30845,30846,30847,30848,30849,30850,30851,22330,23581,24120,38271,20607,32928,21378,25950,30021,21809,20513,36229,25220,38046,26397,22066,28526,24034,21557,28818,36710,25199,25764,25507,24443,28552,37108,33251,36784,23576,26216,24561,27785,38472,36225,34924,25745,31216,22478,27225,25104,21576,20056,31243,24809,28548,35802,25215,36894,39563,31204,21507,30196,25345,21273,27744,36831,24347,39536,32827,40831,20360,23610,36196,32709,26021,28861,20805,20914,34411,23815,23456,25277,37228,30068,36364,31264,24833,31609,20167,32504,30597,19985,33261,21021,20986,27249,21416,36487,38148,38607,28353,38500,26970,30852,30853,30854,30856,30858,30859,30863,30864,30866,30868,30869,30870,30873,30877,30878,30880,30882,30884,30886,30888,30889,30890,30891,30892,30893,30894,30895,30901,30902,30903,30904,30906,30907,30908,30909,30911,30912,30914,30915,30916,30918,30919,30920,30924,30925,30926,30927,30929,30930,30931,30934,30935,30936,30938,30939,30940,30941,30942,30943,30944,30945,30946,30947,30948,30949,30950,30951,30953,30954,30955,30957,30958,30959,30960,30961,30963,30965,30966,30968,30969,30971,30972,30973,30974,30975,30976,30978,30979,30980,30982,30983,30984,30985,30986,30987,30988,30784,20648,30679,25616,35302,22788,25571,24029,31359,26941,20256,33337,21912,20018,30126,31383,24162,24202,38383,21019,21561,28810,25462,38180,22402,26149,26943,37255,21767,28147,32431,34850,25139,32496,30133,33576,30913,38604,36766,24904,29943,35789,27492,21050,36176,27425,32874,33905,22257,21254,20174,19995,20945,31895,37259,31751,20419,36479,31713,31388,25703,23828,20652,33030,30209,31929,28140,32736,26449,23384,23544,30923,25774,25619,25514,25387,38169,25645,36798,31572,30249,25171,22823,21574,27513,20643,25140,24102,27526,20195,36151,34955,24453,36910,30989,30990,30991,30992,30993,30994,30996,30997,30998,30999,31000,31001,31002,31003,31004,31005,31007,31008,31009,31010,31011,31013,31014,31015,31016,31017,31018,31019,31020,31021,31022,31023,31024,31025,31026,31027,31029,31030,31031,31032,31033,31037,31039,31042,31043,31044,31045,31047,31050,31051,31052,31053,31054,31055,31056,31057,31058,31060,31061,31064,31065,31073,31075,31076,31078,31081,31082,31083,31084,31086,31088,31089,31090,31091,31092,31093,31094,31097,31099,31100,31101,31102,31103,31106,31107,31110,31111,31112,31113,31115,31116,31117,31118,31120,31121,31122,24608,32829,25285,20025,21333,37112,25528,32966,26086,27694,20294,24814,28129,35806,24377,34507,24403,25377,20826,33633,26723,20992,25443,36424,20498,23707,31095,23548,21040,31291,24764,36947,30423,24503,24471,30340,36460,28783,30331,31561,30634,20979,37011,22564,20302,28404,36842,25932,31515,29380,28068,32735,23265,25269,24213,22320,33922,31532,24093,24351,36882,32532,39072,25474,28359,30872,28857,20856,38747,22443,30005,20291,30008,24215,24806,22880,28096,27583,30857,21500,38613,20939,20993,25481,21514,38035,35843,36300,29241,30879,34678,36845,35853,21472,31123,31124,31125,31126,31127,31128,31129,31131,31132,31133,31134,31135,31136,31137,31138,31139,31140,31141,31142,31144,31145,31146,31147,31148,31149,31150,31151,31152,31153,31154,31156,31157,31158,31159,31160,31164,31167,31170,31172,31173,31175,31176,31178,31180,31182,31183,31184,31187,31188,31190,31191,31193,31194,31195,31196,31197,31198,31200,31201,31202,31205,31208,31210,31212,31214,31217,31218,31219,31220,31221,31222,31223,31225,31226,31228,31230,31231,31233,31236,31237,31239,31240,31241,31242,31244,31247,31248,31249,31250,31251,31253,31254,31256,31257,31259,31260,19969,30447,21486,38025,39030,40718,38189,23450,35746,20002,19996,20908,33891,25026,21160,26635,20375,24683,20923,27934,20828,25238,26007,38497,35910,36887,30168,37117,30563,27602,29322,29420,35835,22581,30585,36172,26460,38208,32922,24230,28193,22930,31471,30701,38203,27573,26029,32526,22534,20817,38431,23545,22697,21544,36466,25958,39039,22244,38045,30462,36929,25479,21702,22810,22842,22427,36530,26421,36346,33333,21057,24816,22549,34558,23784,40517,20420,39069,35769,23077,24694,21380,25212,36943,37122,39295,24681,32780,20799,32819,23572,39285,27953,20108,31261,31263,31265,31266,31268,31269,31270,31271,31272,31273,31274,31275,31276,31277,31278,31279,31280,31281,31282,31284,31285,31286,31288,31290,31294,31296,31297,31298,31299,31300,31301,31303,31304,31305,31306,31307,31308,31309,31310,31311,31312,31314,31315,31316,31317,31318,31320,31321,31322,31323,31324,31325,31326,31327,31328,31329,31330,31331,31332,31333,31334,31335,31336,31337,31338,31339,31340,31341,31342,31343,31345,31346,31347,31349,31355,31356,31357,31358,31362,31365,31367,31369,31370,31371,31372,31374,31375,31376,31379,31380,31385,31386,31387,31390,31393,31394,36144,21457,32602,31567,20240,20047,38400,27861,29648,34281,24070,30058,32763,27146,30718,38034,32321,20961,28902,21453,36820,33539,36137,29359,39277,27867,22346,33459,26041,32938,25151,38450,22952,20223,35775,32442,25918,33778,38750,21857,39134,32933,21290,35837,21536,32954,24223,27832,36153,33452,37210,21545,27675,20998,32439,22367,28954,27774,31881,22859,20221,24575,24868,31914,20016,23553,26539,34562,23792,38155,39118,30127,28925,36898,20911,32541,35773,22857,20964,20315,21542,22827,25975,32932,23413,25206,25282,36752,24133,27679,31526,20239,20440,26381,31395,31396,31399,31401,31402,31403,31406,31407,31408,31409,31410,31412,31413,31414,31415,31416,31417,31418,31419,31420,31421,31422,31424,31425,31426,31427,31428,31429,31430,31431,31432,31433,31434,31436,31437,31438,31439,31440,31441,31442,31443,31444,31445,31447,31448,31450,31451,31452,31453,31457,31458,31460,31463,31464,31465,31466,31467,31468,31470,31472,31473,31474,31475,31476,31477,31478,31479,31480,31483,31484,31486,31488,31489,31490,31493,31495,31497,31500,31501,31502,31504,31506,31507,31510,31511,31512,31514,31516,31517,31519,31521,31522,31523,31527,31529,31533,28014,28074,31119,34993,24343,29995,25242,36741,20463,37340,26023,33071,33105,24220,33104,36212,21103,35206,36171,22797,20613,20184,38428,29238,33145,36127,23500,35747,38468,22919,32538,21648,22134,22030,35813,25913,27010,38041,30422,28297,24178,29976,26438,26577,31487,32925,36214,24863,31174,25954,36195,20872,21018,38050,32568,32923,32434,23703,28207,26464,31705,30347,39640,33167,32660,31957,25630,38224,31295,21578,21733,27468,25601,25096,40509,33011,30105,21106,38761,33883,26684,34532,38401,38548,38124,20010,21508,32473,26681,36319,32789,26356,24218,32697,31535,31536,31538,31540,31541,31542,31543,31545,31547,31549,31551,31552,31553,31554,31555,31556,31558,31560,31562,31565,31566,31571,31573,31575,31577,31580,31582,31583,31585,31587,31588,31589,31590,31591,31592,31593,31594,31595,31596,31597,31599,31600,31603,31604,31606,31608,31610,31612,31613,31615,31617,31618,31619,31620,31622,31623,31624,31625,31626,31627,31628,31630,31631,31633,31634,31635,31638,31640,31641,31642,31643,31646,31647,31648,31651,31652,31653,31662,31663,31664,31666,31667,31669,31670,31671,31673,31674,31675,31676,31677,31678,31679,31680,31682,31683,31684,22466,32831,26775,24037,25915,21151,24685,40858,20379,36524,20844,23467,24339,24041,27742,25329,36129,20849,38057,21246,27807,33503,29399,22434,26500,36141,22815,36764,33735,21653,31629,20272,27837,23396,22993,40723,21476,34506,39592,35895,32929,25925,39038,22266,38599,21038,29916,21072,23521,25346,35074,20054,25296,24618,26874,20851,23448,20896,35266,31649,39302,32592,24815,28748,36143,20809,24191,36891,29808,35268,22317,30789,24402,40863,38394,36712,39740,35809,30328,26690,26588,36330,36149,21053,36746,28378,26829,38149,37101,22269,26524,35065,36807,21704,31685,31688,31689,31690,31691,31693,31694,31695,31696,31698,31700,31701,31702,31703,31704,31707,31708,31710,31711,31712,31714,31715,31716,31719,31720,31721,31723,31724,31725,31727,31728,31730,31731,31732,31733,31734,31736,31737,31738,31739,31741,31743,31744,31745,31746,31747,31748,31749,31750,31752,31753,31754,31757,31758,31760,31761,31762,31763,31764,31765,31767,31768,31769,31770,31771,31772,31773,31774,31776,31777,31778,31779,31780,31781,31784,31785,31787,31788,31789,31790,31791,31792,31793,31794,31795,31796,31797,31798,31799,31801,31802,31803,31804,31805,31806,31810,39608,23401,28023,27686,20133,23475,39559,37219,25000,37039,38889,21547,28085,23506,20989,21898,32597,32752,25788,25421,26097,25022,24717,28938,27735,27721,22831,26477,33322,22741,22158,35946,27627,37085,22909,32791,21495,28009,21621,21917,33655,33743,26680,31166,21644,20309,21512,30418,35977,38402,27827,28088,36203,35088,40548,36154,22079,40657,30165,24456,29408,24680,21756,20136,27178,34913,24658,36720,21700,28888,34425,40511,27946,23439,24344,32418,21897,20399,29492,21564,21402,20505,21518,21628,20046,24573,29786,22774,33899,32993,34676,29392,31946,28246,31811,31812,31813,31814,31815,31816,31817,31818,31819,31820,31822,31823,31824,31825,31826,31827,31828,31829,31830,31831,31832,31833,31834,31835,31836,31837,31838,31839,31840,31841,31842,31843,31844,31845,31846,31847,31848,31849,31850,31851,31852,31853,31854,31855,31856,31857,31858,31861,31862,31863,31864,31865,31866,31870,31871,31872,31873,31874,31875,31876,31877,31878,31879,31880,31882,31883,31884,31885,31886,31887,31888,31891,31892,31894,31897,31898,31899,31904,31905,31907,31910,31911,31912,31913,31915,31916,31917,31919,31920,31924,31925,31926,31927,31928,31930,31931,24359,34382,21804,25252,20114,27818,25143,33457,21719,21326,29502,28369,30011,21010,21270,35805,27088,24458,24576,28142,22351,27426,29615,26707,36824,32531,25442,24739,21796,30186,35938,28949,28067,23462,24187,33618,24908,40644,30970,34647,31783,30343,20976,24822,29004,26179,24140,24653,35854,28784,25381,36745,24509,24674,34516,22238,27585,24724,24935,21321,24800,26214,36159,31229,20250,28905,27719,35763,35826,32472,33636,26127,23130,39746,27985,28151,35905,27963,20249,28779,33719,25110,24785,38669,36135,31096,20987,22334,22522,26426,30072,31293,31215,31637,31935,31936,31938,31939,31940,31942,31945,31947,31950,31951,31952,31953,31954,31955,31956,31960,31962,31963,31965,31966,31969,31970,31971,31972,31973,31974,31975,31977,31978,31979,31980,31981,31982,31984,31985,31986,31987,31988,31989,31990,31991,31993,31994,31996,31997,31998,31999,32000,32001,32002,32003,32004,32005,32006,32007,32008,32009,32011,32012,32013,32014,32015,32016,32017,32018,32019,32020,32021,32022,32023,32024,32025,32026,32027,32028,32029,32030,32031,32033,32035,32036,32037,32038,32040,32041,32042,32044,32045,32046,32048,32049,32050,32051,32052,32053,32054,32908,39269,36857,28608,35749,40481,23020,32489,32521,21513,26497,26840,36753,31821,38598,21450,24613,30142,27762,21363,23241,32423,25380,20960,33034,24049,34015,25216,20864,23395,20238,31085,21058,24760,27982,23492,23490,35745,35760,26082,24524,38469,22931,32487,32426,22025,26551,22841,20339,23478,21152,33626,39050,36158,30002,38078,20551,31292,20215,26550,39550,23233,27516,30417,22362,23574,31546,38388,29006,20860,32937,33392,22904,32516,33575,26816,26604,30897,30839,25315,25441,31616,20461,21098,20943,33616,27099,37492,36341,36145,35265,38190,31661,20214,32055,32056,32057,32058,32059,32060,32061,32062,32063,32064,32065,32066,32067,32068,32069,32070,32071,32072,32073,32074,32075,32076,32077,32078,32079,32080,32081,32082,32083,32084,32085,32086,32087,32088,32089,32090,32091,32092,32093,32094,32095,32096,32097,32098,32099,32100,32101,32102,32103,32104,32105,32106,32107,32108,32109,32111,32112,32113,32114,32115,32116,32117,32118,32120,32121,32122,32123,32124,32125,32126,32127,32128,32129,32130,32131,32132,32133,32134,32135,32136,32137,32138,32139,32140,32141,32142,32143,32144,32145,32146,32147,32148,32149,32150,32151,32152,20581,33328,21073,39279,28176,28293,28071,24314,20725,23004,23558,27974,27743,30086,33931,26728,22870,35762,21280,37233,38477,34121,26898,30977,28966,33014,20132,37066,27975,39556,23047,22204,25605,38128,30699,20389,33050,29409,35282,39290,32564,32478,21119,25945,37237,36735,36739,21483,31382,25581,25509,30342,31224,34903,38454,25130,21163,33410,26708,26480,25463,30571,31469,27905,32467,35299,22992,25106,34249,33445,30028,20511,20171,30117,35819,23626,24062,31563,26020,37329,20170,27941,35167,32039,38182,20165,35880,36827,38771,26187,31105,36817,28908,28024,32153,32154,32155,32156,32157,32158,32159,32160,32161,32162,32163,32164,32165,32167,32168,32169,32170,32171,32172,32173,32175,32176,32177,32178,32179,32180,32181,32182,32183,32184,32185,32186,32187,32188,32189,32190,32191,32192,32193,32194,32195,32196,32197,32198,32199,32200,32201,32202,32203,32204,32205,32206,32207,32208,32209,32210,32211,32212,32213,32214,32215,32216,32217,32218,32219,32220,32221,32222,32223,32224,32225,32226,32227,32228,32229,32230,32231,32232,32233,32234,32235,32236,32237,32238,32239,32240,32241,32242,32243,32244,32245,32246,32247,32248,32249,32250,23613,21170,33606,20834,33550,30555,26230,40120,20140,24778,31934,31923,32463,20117,35686,26223,39048,38745,22659,25964,38236,24452,30153,38742,31455,31454,20928,28847,31384,25578,31350,32416,29590,38893,20037,28792,20061,37202,21417,25937,26087,33276,33285,21646,23601,30106,38816,25304,29401,30141,23621,39545,33738,23616,21632,30697,20030,27822,32858,25298,25454,24040,20855,36317,36382,38191,20465,21477,24807,28844,21095,25424,40515,23071,20518,30519,21367,32482,25733,25899,25225,25496,20500,29237,35273,20915,35776,32477,22343,33740,38055,20891,21531,23803,32251,32252,32253,32254,32255,32256,32257,32258,32259,32260,32261,32262,32263,32264,32265,32266,32267,32268,32269,32270,32271,32272,32273,32274,32275,32276,32277,32278,32279,32280,32281,32282,32283,32284,32285,32286,32287,32288,32289,32290,32291,32292,32293,32294,32295,32296,32297,32298,32299,32300,32301,32302,32303,32304,32305,32306,32307,32308,32309,32310,32311,32312,32313,32314,32316,32317,32318,32319,32320,32322,32323,32324,32325,32326,32328,32329,32330,32331,32332,32333,32334,32335,32336,32337,32338,32339,32340,32341,32342,32343,32344,32345,32346,32347,32348,32349,20426,31459,27994,37089,39567,21888,21654,21345,21679,24320,25577,26999,20975,24936,21002,22570,21208,22350,30733,30475,24247,24951,31968,25179,25239,20130,28821,32771,25335,28900,38752,22391,33499,26607,26869,30933,39063,31185,22771,21683,21487,28212,20811,21051,23458,35838,32943,21827,22438,24691,22353,21549,31354,24656,23380,25511,25248,21475,25187,23495,26543,21741,31391,33510,37239,24211,35044,22840,22446,25358,36328,33007,22359,31607,20393,24555,23485,27454,21281,31568,29378,26694,30719,30518,26103,20917,20111,30420,23743,31397,33909,22862,39745,20608,32350,32351,32352,32353,32354,32355,32356,32357,32358,32359,32360,32361,32362,32363,32364,32365,32366,32367,32368,32369,32370,32371,32372,32373,32374,32375,32376,32377,32378,32379,32380,32381,32382,32383,32384,32385,32387,32388,32389,32390,32391,32392,32393,32394,32395,32396,32397,32398,32399,32400,32401,32402,32403,32404,32405,32406,32407,32408,32409,32410,32412,32413,32414,32430,32436,32443,32444,32470,32484,32492,32505,32522,32528,32542,32567,32569,32571,32572,32573,32574,32575,32576,32577,32579,32582,32583,32584,32585,32586,32587,32588,32589,32590,32591,32594,32595,39304,24871,28291,22372,26118,25414,22256,25324,25193,24275,38420,22403,25289,21895,34593,33098,36771,21862,33713,26469,36182,34013,23146,26639,25318,31726,38417,20848,28572,35888,25597,35272,25042,32518,28866,28389,29701,27028,29436,24266,37070,26391,28010,25438,21171,29282,32769,20332,23013,37226,28889,28061,21202,20048,38647,38253,34174,30922,32047,20769,22418,25794,32907,31867,27882,26865,26974,20919,21400,26792,29313,40654,31729,29432,31163,28435,29702,26446,37324,40100,31036,33673,33620,21519,26647,20029,21385,21169,30782,21382,21033,20616,20363,20432,32598,32601,32603,32604,32605,32606,32608,32611,32612,32613,32614,32615,32619,32620,32621,32623,32624,32627,32629,32630,32631,32632,32634,32635,32636,32637,32639,32640,32642,32643,32644,32645,32646,32647,32648,32649,32651,32653,32655,32656,32657,32658,32659,32661,32662,32663,32664,32665,32667,32668,32672,32674,32675,32677,32678,32680,32681,32682,32683,32684,32685,32686,32689,32691,32692,32693,32694,32695,32698,32699,32702,32704,32706,32707,32708,32710,32711,32712,32713,32715,32717,32719,32720,32721,32722,32723,32726,32727,32729,32730,32731,32732,32733,32734,32738,32739,30178,31435,31890,27813,38582,21147,29827,21737,20457,32852,33714,36830,38256,24265,24604,28063,24088,25947,33080,38142,24651,28860,32451,31918,20937,26753,31921,33391,20004,36742,37327,26238,20142,35845,25769,32842,20698,30103,29134,23525,36797,28518,20102,25730,38243,24278,26009,21015,35010,28872,21155,29454,29747,26519,30967,38678,20020,37051,40158,28107,20955,36161,21533,25294,29618,33777,38646,40836,38083,20278,32666,20940,28789,38517,23725,39046,21478,20196,28316,29705,27060,30827,39311,30041,21016,30244,27969,26611,20845,40857,32843,21657,31548,31423,32740,32743,32744,32746,32747,32748,32749,32751,32754,32756,32757,32758,32759,32760,32761,32762,32765,32766,32767,32770,32775,32776,32777,32778,32782,32783,32785,32787,32794,32795,32797,32798,32799,32801,32803,32804,32811,32812,32813,32814,32815,32816,32818,32820,32825,32826,32828,32830,32832,32833,32836,32837,32839,32840,32841,32846,32847,32848,32849,32851,32853,32854,32855,32857,32859,32860,32861,32862,32863,32864,32865,32866,32867,32868,32869,32870,32871,32872,32875,32876,32877,32878,32879,32880,32882,32883,32884,32885,32886,32887,32888,32889,32890,32891,32892,32893,38534,22404,25314,38471,27004,23044,25602,31699,28431,38475,33446,21346,39045,24208,28809,25523,21348,34383,40065,40595,30860,38706,36335,36162,40575,28510,31108,24405,38470,25134,39540,21525,38109,20387,26053,23653,23649,32533,34385,27695,24459,29575,28388,32511,23782,25371,23402,28390,21365,20081,25504,30053,25249,36718,20262,20177,27814,32438,35770,33821,34746,32599,36923,38179,31657,39585,35064,33853,27931,39558,32476,22920,40635,29595,30721,34434,39532,39554,22043,21527,22475,20080,40614,21334,36808,33033,30610,39314,34542,28385,34067,26364,24930,28459,32894,32897,32898,32901,32904,32906,32909,32910,32911,32912,32913,32914,32916,32917,32919,32921,32926,32931,32934,32935,32936,32940,32944,32947,32949,32950,32952,32953,32955,32965,32967,32968,32969,32970,32971,32975,32976,32977,32978,32979,32980,32981,32984,32991,32992,32994,32995,32998,33006,33013,33015,33017,33019,33022,33023,33024,33025,33027,33028,33029,33031,33032,33035,33036,33045,33047,33049,33051,33052,33053,33055,33056,33057,33058,33059,33060,33061,33062,33063,33064,33065,33066,33067,33069,33070,33072,33075,33076,33077,33079,33081,33082,33083,33084,33085,33087,35881,33426,33579,30450,27667,24537,33725,29483,33541,38170,27611,30683,38086,21359,33538,20882,24125,35980,36152,20040,29611,26522,26757,37238,38665,29028,27809,30473,23186,38209,27599,32654,26151,23504,22969,23194,38376,38391,20204,33804,33945,27308,30431,38192,29467,26790,23391,30511,37274,38753,31964,36855,35868,24357,31859,31192,35269,27852,34588,23494,24130,26825,30496,32501,20885,20813,21193,23081,32517,38754,33495,25551,30596,34256,31186,28218,24217,22937,34065,28781,27665,25279,30399,25935,24751,38397,26126,34719,40483,38125,21517,21629,35884,25720,33088,33089,33090,33091,33092,33093,33095,33097,33101,33102,33103,33106,33110,33111,33112,33115,33116,33117,33118,33119,33121,33122,33123,33124,33126,33128,33130,33131,33132,33135,33138,33139,33141,33142,33143,33144,33153,33155,33156,33157,33158,33159,33161,33163,33164,33165,33166,33168,33170,33171,33172,33173,33174,33175,33177,33178,33182,33183,33184,33185,33186,33188,33189,33191,33193,33195,33196,33197,33198,33199,33200,33201,33202,33204,33205,33206,33207,33208,33209,33212,33213,33214,33215,33220,33221,33223,33224,33225,33227,33229,33230,33231,33232,33233,33234,33235,25721,34321,27169,33180,30952,25705,39764,25273,26411,33707,22696,40664,27819,28448,23518,38476,35851,29279,26576,25287,29281,20137,22982,27597,22675,26286,24149,21215,24917,26408,30446,30566,29287,31302,25343,21738,21584,38048,37027,23068,32435,27670,20035,22902,32784,22856,21335,30007,38590,22218,25376,33041,24700,38393,28118,21602,39297,20869,23273,33021,22958,38675,20522,27877,23612,25311,20320,21311,33147,36870,28346,34091,25288,24180,30910,25781,25467,24565,23064,37247,40479,23615,25423,32834,23421,21870,38218,38221,28037,24744,26592,29406,20957,23425,33236,33237,33238,33239,33240,33241,33242,33243,33244,33245,33246,33247,33248,33249,33250,33252,33253,33254,33256,33257,33259,33262,33263,33264,33265,33266,33269,33270,33271,33272,33273,33274,33277,33279,33283,33287,33288,33289,33290,33291,33294,33295,33297,33299,33301,33302,33303,33304,33305,33306,33309,33312,33316,33317,33318,33319,33321,33326,33330,33338,33340,33341,33343,33344,33345,33346,33347,33349,33350,33352,33354,33356,33357,33358,33360,33361,33362,33363,33364,33365,33366,33367,33369,33371,33372,33373,33374,33376,33377,33378,33379,33380,33381,33382,33383,33385,25319,27870,29275,25197,38062,32445,33043,27987,20892,24324,22900,21162,24594,22899,26262,34384,30111,25386,25062,31983,35834,21734,27431,40485,27572,34261,21589,20598,27812,21866,36276,29228,24085,24597,29750,25293,25490,29260,24472,28227,27966,25856,28504,30424,30928,30460,30036,21028,21467,20051,24222,26049,32810,32982,25243,21638,21032,28846,34957,36305,27873,21624,32986,22521,35060,36180,38506,37197,20329,27803,21943,30406,30768,25256,28921,28558,24429,34028,26842,30844,31735,33192,26379,40527,25447,30896,22383,30738,38713,25209,25259,21128,29749,27607,33386,33387,33388,33389,33393,33397,33398,33399,33400,33403,33404,33408,33409,33411,33413,33414,33415,33417,33420,33424,33427,33428,33429,33430,33434,33435,33438,33440,33442,33443,33447,33458,33461,33462,33466,33467,33468,33471,33472,33474,33475,33477,33478,33481,33488,33494,33497,33498,33501,33506,33511,33512,33513,33514,33516,33517,33518,33520,33522,33523,33525,33526,33528,33530,33532,33533,33534,33535,33536,33546,33547,33549,33552,33554,33555,33558,33560,33561,33565,33566,33567,33568,33569,33570,33571,33572,33573,33574,33577,33578,33582,33584,33586,33591,33595,33597,21860,33086,30130,30382,21305,30174,20731,23617,35692,31687,20559,29255,39575,39128,28418,29922,31080,25735,30629,25340,39057,36139,21697,32856,20050,22378,33529,33805,24179,20973,29942,35780,23631,22369,27900,39047,23110,30772,39748,36843,31893,21078,25169,38138,20166,33670,33889,33769,33970,22484,26420,22275,26222,28006,35889,26333,28689,26399,27450,26646,25114,22971,19971,20932,28422,26578,27791,20854,26827,22855,27495,30054,23822,33040,40784,26071,31048,31041,39569,36215,23682,20062,20225,21551,22865,30732,22120,27668,36804,24323,27773,27875,35755,25488,33598,33599,33601,33602,33604,33605,33608,33610,33611,33612,33613,33614,33619,33621,33622,33623,33624,33625,33629,33634,33648,33649,33650,33651,33652,33653,33654,33657,33658,33662,33663,33664,33665,33666,33667,33668,33671,33672,33674,33675,33676,33677,33679,33680,33681,33684,33685,33686,33687,33689,33690,33693,33695,33697,33698,33699,33700,33701,33702,33703,33708,33709,33710,33711,33717,33723,33726,33727,33730,33731,33732,33734,33736,33737,33739,33741,33742,33744,33745,33746,33747,33749,33751,33753,33754,33755,33758,33762,33763,33764,33766,33767,33768,33771,33772,33773,24688,27965,29301,25190,38030,38085,21315,36801,31614,20191,35878,20094,40660,38065,38067,21069,28508,36963,27973,35892,22545,23884,27424,27465,26538,21595,33108,32652,22681,34103,24378,25250,27207,38201,25970,24708,26725,30631,20052,20392,24039,38808,25772,32728,23789,20431,31373,20999,33540,19988,24623,31363,38054,20405,20146,31206,29748,21220,33465,25810,31165,23517,27777,38738,36731,27682,20542,21375,28165,25806,26228,27696,24773,39031,35831,24198,29756,31351,31179,19992,37041,29699,27714,22234,37195,27845,36235,21306,34502,26354,36527,23624,39537,28192,33774,33775,33779,33780,33781,33782,33783,33786,33787,33788,33790,33791,33792,33794,33797,33799,33800,33801,33802,33808,33810,33811,33812,33813,33814,33815,33817,33818,33819,33822,33823,33824,33825,33826,33827,33833,33834,33835,33836,33837,33838,33839,33840,33842,33843,33844,33845,33846,33847,33849,33850,33851,33854,33855,33856,33857,33858,33859,33860,33861,33863,33864,33865,33866,33867,33868,33869,33870,33871,33872,33874,33875,33876,33877,33878,33880,33885,33886,33887,33888,33890,33892,33893,33894,33895,33896,33898,33902,33903,33904,33906,33908,33911,33913,33915,33916,21462,23094,40843,36259,21435,22280,39079,26435,37275,27849,20840,30154,25331,29356,21048,21149,32570,28820,30264,21364,40522,27063,30830,38592,35033,32676,28982,29123,20873,26579,29924,22756,25880,22199,35753,39286,25200,32469,24825,28909,22764,20161,20154,24525,38887,20219,35748,20995,22922,32427,25172,20173,26085,25102,33592,33993,33635,34701,29076,28342,23481,32466,20887,25545,26580,32905,33593,34837,20754,23418,22914,36785,20083,27741,20837,35109,36719,38446,34122,29790,38160,38384,28070,33509,24369,25746,27922,33832,33134,40131,22622,36187,19977,21441,33917,33918,33919,33920,33921,33923,33924,33925,33926,33930,33933,33935,33936,33937,33938,33939,33940,33941,33942,33944,33946,33947,33949,33950,33951,33952,33954,33955,33956,33957,33958,33959,33960,33961,33962,33963,33964,33965,33966,33968,33969,33971,33973,33974,33975,33979,33980,33982,33984,33986,33987,33989,33990,33991,33992,33995,33996,33998,33999,34002,34004,34005,34007,34008,34009,34010,34011,34012,34014,34017,34018,34020,34023,34024,34025,34026,34027,34029,34030,34031,34033,34034,34035,34036,34037,34038,34039,34040,34041,34042,34043,34045,34046,34048,34049,34050,20254,25955,26705,21971,20007,25620,39578,25195,23234,29791,33394,28073,26862,20711,33678,30722,26432,21049,27801,32433,20667,21861,29022,31579,26194,29642,33515,26441,23665,21024,29053,34923,38378,38485,25797,36193,33203,21892,27733,25159,32558,22674,20260,21830,36175,26188,19978,23578,35059,26786,25422,31245,28903,33421,21242,38902,23569,21736,37045,32461,22882,36170,34503,33292,33293,36198,25668,23556,24913,28041,31038,35774,30775,30003,21627,20280,36523,28145,23072,32453,31070,27784,23457,23158,29978,32958,24910,28183,22768,29983,29989,29298,21319,32499,34051,34052,34053,34054,34055,34056,34057,34058,34059,34061,34062,34063,34064,34066,34068,34069,34070,34072,34073,34075,34076,34077,34078,34080,34082,34083,34084,34085,34086,34087,34088,34089,34090,34093,34094,34095,34096,34097,34098,34099,34100,34101,34102,34110,34111,34112,34113,34114,34116,34117,34118,34119,34123,34124,34125,34126,34127,34128,34129,34130,34131,34132,34133,34135,34136,34138,34139,34140,34141,34143,34144,34145,34146,34147,34149,34150,34151,34153,34154,34155,34156,34157,34158,34159,34160,34161,34163,34165,34166,34167,34168,34172,34173,34175,34176,34177,30465,30427,21097,32988,22307,24072,22833,29422,26045,28287,35799,23608,34417,21313,30707,25342,26102,20160,39135,34432,23454,35782,21490,30690,20351,23630,39542,22987,24335,31034,22763,19990,26623,20107,25325,35475,36893,21183,26159,21980,22124,36866,20181,20365,37322,39280,27663,24066,24643,23460,35270,35797,25910,25163,39318,23432,23551,25480,21806,21463,30246,20861,34092,26530,26803,27530,25234,36755,21460,33298,28113,30095,20070,36174,23408,29087,34223,26257,26329,32626,34560,40653,40736,23646,26415,36848,26641,26463,25101,31446,22661,24246,25968,28465,34178,34179,34182,34184,34185,34186,34187,34188,34189,34190,34192,34193,34194,34195,34196,34197,34198,34199,34200,34201,34202,34205,34206,34207,34208,34209,34210,34211,34213,34214,34215,34217,34219,34220,34221,34225,34226,34227,34228,34229,34230,34232,34234,34235,34236,34237,34238,34239,34240,34242,34243,34244,34245,34246,34247,34248,34250,34251,34252,34253,34254,34257,34258,34260,34262,34263,34264,34265,34266,34267,34269,34270,34271,34272,34273,34274,34275,34277,34278,34279,34280,34282,34283,34284,34285,34286,34287,34288,34289,34290,34291,34292,34293,34294,34295,34296,24661,21047,32781,25684,34928,29993,24069,26643,25332,38684,21452,29245,35841,27700,30561,31246,21550,30636,39034,33308,35828,30805,26388,28865,26031,25749,22070,24605,31169,21496,19997,27515,32902,23546,21987,22235,20282,20284,39282,24051,26494,32824,24578,39042,36865,23435,35772,35829,25628,33368,25822,22013,33487,37221,20439,32032,36895,31903,20723,22609,28335,23487,35785,32899,37240,33948,31639,34429,38539,38543,32485,39635,30862,23681,31319,36930,38567,31071,23385,25439,31499,34001,26797,21766,32553,29712,32034,38145,25152,22604,20182,23427,22905,22612,34297,34298,34300,34301,34302,34304,34305,34306,34307,34308,34310,34311,34312,34313,34314,34315,34316,34317,34318,34319,34320,34322,34323,34324,34325,34327,34328,34329,34330,34331,34332,34333,34334,34335,34336,34337,34338,34339,34340,34341,34342,34344,34346,34347,34348,34349,34350,34351,34352,34353,34354,34355,34356,34357,34358,34359,34361,34362,34363,34365,34366,34367,34368,34369,34370,34371,34372,34373,34374,34375,34376,34377,34378,34379,34380,34386,34387,34389,34390,34391,34392,34393,34395,34396,34397,34399,34400,34401,34403,34404,34405,34406,34407,34408,34409,34410,29549,25374,36427,36367,32974,33492,25260,21488,27888,37214,22826,24577,27760,22349,25674,36138,30251,28393,22363,27264,30192,28525,35885,35848,22374,27631,34962,30899,25506,21497,28845,27748,22616,25642,22530,26848,33179,21776,31958,20504,36538,28108,36255,28907,25487,28059,28372,32486,33796,26691,36867,28120,38518,35752,22871,29305,34276,33150,30140,35466,26799,21076,36386,38161,25552,39064,36420,21884,20307,26367,22159,24789,28053,21059,23625,22825,28155,22635,30000,29980,24684,33300,33094,25361,26465,36834,30522,36339,36148,38081,24086,21381,21548,28867,34413,34415,34416,34418,34419,34420,34421,34422,34423,34424,34435,34436,34437,34438,34439,34440,34441,34446,34447,34448,34449,34450,34452,34454,34455,34456,34457,34458,34459,34462,34463,34464,34465,34466,34469,34470,34475,34477,34478,34482,34483,34487,34488,34489,34491,34492,34493,34494,34495,34497,34498,34499,34501,34504,34508,34509,34514,34515,34517,34518,34519,34522,34524,34525,34528,34529,34530,34531,34533,34534,34535,34536,34538,34539,34540,34543,34549,34550,34551,34554,34555,34556,34557,34559,34561,34564,34565,34566,34571,34572,34574,34575,34576,34577,34580,34582,27712,24311,20572,20141,24237,25402,33351,36890,26704,37230,30643,21516,38108,24420,31461,26742,25413,31570,32479,30171,20599,25237,22836,36879,20984,31171,31361,22270,24466,36884,28034,23648,22303,21520,20820,28237,22242,25512,39059,33151,34581,35114,36864,21534,23663,33216,25302,25176,33073,40501,38464,39534,39548,26925,22949,25299,21822,25366,21703,34521,27964,23043,29926,34972,27498,22806,35916,24367,28286,29609,39037,20024,28919,23436,30871,25405,26202,30358,24779,23451,23113,19975,33109,27754,29579,20129,26505,32593,24448,26106,26395,24536,22916,23041,34585,34587,34589,34591,34592,34596,34598,34599,34600,34602,34603,34604,34605,34607,34608,34610,34611,34613,34614,34616,34617,34618,34620,34621,34624,34625,34626,34627,34628,34629,34630,34634,34635,34637,34639,34640,34641,34642,34644,34645,34646,34648,34650,34651,34652,34653,34654,34655,34657,34658,34662,34663,34664,34665,34666,34667,34668,34669,34671,34673,34674,34675,34677,34679,34680,34681,34682,34687,34688,34689,34692,34694,34695,34697,34698,34700,34702,34703,34704,34705,34706,34708,34709,34710,34712,34713,34714,34715,34716,34717,34718,34720,34721,34722,34723,34724,24013,24494,21361,38886,36829,26693,22260,21807,24799,20026,28493,32500,33479,33806,22996,20255,20266,23614,32428,26410,34074,21619,30031,32963,21890,39759,20301,28205,35859,23561,24944,21355,30239,28201,34442,25991,38395,32441,21563,31283,32010,38382,21985,32705,29934,25373,34583,28065,31389,25105,26017,21351,25569,27779,24043,21596,38056,20044,27745,35820,23627,26080,33436,26791,21566,21556,27595,27494,20116,25410,21320,33310,20237,20398,22366,25098,38654,26212,29289,21247,21153,24735,35823,26132,29081,26512,35199,30802,30717,26224,22075,21560,38177,29306,34725,34726,34727,34729,34730,34734,34736,34737,34738,34740,34742,34743,34744,34745,34747,34748,34750,34751,34753,34754,34755,34756,34757,34759,34760,34761,34764,34765,34766,34767,34768,34772,34773,34774,34775,34776,34777,34778,34780,34781,34782,34783,34785,34786,34787,34788,34790,34791,34792,34793,34795,34796,34797,34799,34800,34801,34802,34803,34804,34805,34806,34807,34808,34810,34811,34812,34813,34815,34816,34817,34818,34820,34821,34822,34823,34824,34825,34827,34828,34829,34830,34831,34832,34833,34834,34836,34839,34840,34841,34842,34844,34845,34846,34847,34848,34851,31232,24687,24076,24713,33181,22805,24796,29060,28911,28330,27728,29312,27268,34989,24109,20064,23219,21916,38115,27927,31995,38553,25103,32454,30606,34430,21283,38686,36758,26247,23777,20384,29421,19979,21414,22799,21523,25472,38184,20808,20185,40092,32420,21688,36132,34900,33335,38386,28046,24358,23244,26174,38505,29616,29486,21439,33146,39301,32673,23466,38519,38480,32447,30456,21410,38262,39321,31665,35140,28248,20065,32724,31077,35814,24819,21709,20139,39033,24055,27233,20687,21521,35937,33831,30813,38660,21066,21742,22179,38144,28040,23477,28102,26195,34852,34853,34854,34855,34856,34857,34858,34859,34860,34861,34862,34863,34864,34865,34867,34868,34869,34870,34871,34872,34874,34875,34877,34878,34879,34881,34882,34883,34886,34887,34888,34889,34890,34891,34894,34895,34896,34897,34898,34899,34901,34902,34904,34906,34907,34908,34909,34910,34911,34912,34918,34919,34922,34925,34927,34929,34931,34932,34933,34934,34936,34937,34938,34939,34940,34944,34947,34950,34951,34953,34954,34956,34958,34959,34960,34961,34963,34964,34965,34967,34968,34969,34970,34971,34973,34974,34975,34976,34977,34979,34981,34982,34983,34984,34985,34986,23567,23389,26657,32918,21880,31505,25928,26964,20123,27463,34638,38795,21327,25375,25658,37034,26012,32961,35856,20889,26800,21368,34809,25032,27844,27899,35874,23633,34218,33455,38156,27427,36763,26032,24571,24515,20449,34885,26143,33125,29481,24826,20852,21009,22411,24418,37026,34892,37266,24184,26447,24615,22995,20804,20982,33016,21256,27769,38596,29066,20241,20462,32670,26429,21957,38152,31168,34966,32483,22687,25100,38656,34394,22040,39035,24464,35768,33988,37207,21465,26093,24207,30044,24676,32110,23167,32490,32493,36713,21927,23459,24748,26059,29572,34988,34990,34991,34992,34994,34995,34996,34997,34998,35000,35001,35002,35003,35005,35006,35007,35008,35011,35012,35015,35016,35018,35019,35020,35021,35023,35024,35025,35027,35030,35031,35034,35035,35036,35037,35038,35040,35041,35046,35047,35049,35050,35051,35052,35053,35054,35055,35058,35061,35062,35063,35066,35067,35069,35071,35072,35073,35075,35076,35077,35078,35079,35080,35081,35083,35084,35085,35086,35087,35089,35092,35093,35094,35095,35096,35100,35101,35102,35103,35104,35106,35107,35108,35110,35111,35112,35113,35116,35117,35118,35119,35121,35122,35123,35125,35127,36873,30307,30505,32474,38772,34203,23398,31348,38634,34880,21195,29071,24490,26092,35810,23547,39535,24033,27529,27739,35757,35759,36874,36805,21387,25276,40486,40493,21568,20011,33469,29273,34460,23830,34905,28079,38597,21713,20122,35766,28937,21693,38409,28895,28153,30416,20005,30740,34578,23721,24310,35328,39068,38414,28814,27839,22852,25513,30524,34893,28436,33395,22576,29141,21388,30746,38593,21761,24422,28976,23476,35866,39564,27523,22830,40495,31207,26472,25196,20335,30113,32650,27915,38451,27687,20208,30162,20859,26679,28478,36992,33136,22934,29814,35128,35129,35130,35131,35132,35133,35134,35135,35136,35138,35139,35141,35142,35143,35144,35145,35146,35147,35148,35149,35150,35151,35152,35153,35154,35155,35156,35157,35158,35159,35160,35161,35162,35163,35164,35165,35168,35169,35170,35171,35172,35173,35175,35176,35177,35178,35179,35180,35181,35182,35183,35184,35185,35186,35187,35188,35189,35190,35191,35192,35193,35194,35196,35197,35198,35200,35202,35204,35205,35207,35208,35209,35210,35211,35212,35213,35214,35215,35216,35217,35218,35219,35220,35221,35222,35223,35224,35225,35226,35227,35228,35229,35230,35231,35232,35233,25671,23591,36965,31377,35875,23002,21676,33280,33647,35201,32768,26928,22094,32822,29239,37326,20918,20063,39029,25494,19994,21494,26355,33099,22812,28082,19968,22777,21307,25558,38129,20381,20234,34915,39056,22839,36951,31227,20202,33008,30097,27778,23452,23016,24413,26885,34433,20506,24050,20057,30691,20197,33402,25233,26131,37009,23673,20159,24441,33222,36920,32900,30123,20134,35028,24847,27589,24518,20041,30410,28322,35811,35758,35850,35793,24322,32764,32716,32462,33589,33643,22240,27575,38899,38452,23035,21535,38134,28139,23493,39278,23609,24341,38544,35234,35235,35236,35237,35238,35239,35240,35241,35242,35243,35244,35245,35246,35247,35248,35249,35250,35251,35252,35253,35254,35255,35256,35257,35258,35259,35260,35261,35262,35263,35264,35267,35277,35283,35284,35285,35287,35288,35289,35291,35293,35295,35296,35297,35298,35300,35303,35304,35305,35306,35308,35309,35310,35312,35313,35314,35316,35317,35318,35319,35320,35321,35322,35323,35324,35325,35326,35327,35329,35330,35331,35332,35333,35334,35336,35337,35338,35339,35340,35341,35342,35343,35344,35345,35346,35347,35348,35349,35350,35351,35352,35353,35354,35355,35356,35357,21360,33521,27185,23156,40560,24212,32552,33721,33828,33829,33639,34631,36814,36194,30408,24433,39062,30828,26144,21727,25317,20323,33219,30152,24248,38605,36362,34553,21647,27891,28044,27704,24703,21191,29992,24189,20248,24736,24551,23588,30001,37038,38080,29369,27833,28216,37193,26377,21451,21491,20305,37321,35825,21448,24188,36802,28132,20110,30402,27014,34398,24858,33286,20313,20446,36926,40060,24841,28189,28180,38533,20104,23089,38632,19982,23679,31161,23431,35821,32701,29577,22495,33419,37057,21505,36935,21947,23786,24481,24840,27442,29425,32946,35465,35358,35359,35360,35361,35362,35363,35364,35365,35366,35367,35368,35369,35370,35371,35372,35373,35374,35375,35376,35377,35378,35379,35380,35381,35382,35383,35384,35385,35386,35387,35388,35389,35391,35392,35393,35394,35395,35396,35397,35398,35399,35401,35402,35403,35404,35405,35406,35407,35408,35409,35410,35411,35412,35413,35414,35415,35416,35417,35418,35419,35420,35421,35422,35423,35424,35425,35426,35427,35428,35429,35430,35431,35432,35433,35434,35435,35436,35437,35438,35439,35440,35441,35442,35443,35444,35445,35446,35447,35448,35450,35451,35452,35453,35454,35455,35456,28020,23507,35029,39044,35947,39533,40499,28170,20900,20803,22435,34945,21407,25588,36757,22253,21592,22278,29503,28304,32536,36828,33489,24895,24616,38498,26352,32422,36234,36291,38053,23731,31908,26376,24742,38405,32792,20113,37095,21248,38504,20801,36816,34164,37213,26197,38901,23381,21277,30776,26434,26685,21705,28798,23472,36733,20877,22312,21681,25874,26242,36190,36163,33039,33900,36973,31967,20991,34299,26531,26089,28577,34468,36481,22122,36896,30338,28790,29157,36131,25321,21017,27901,36156,24590,22686,24974,26366,36192,25166,21939,28195,26413,36711,35457,35458,35459,35460,35461,35462,35463,35464,35467,35468,35469,35470,35471,35472,35473,35474,35476,35477,35478,35479,35480,35481,35482,35483,35484,35485,35486,35487,35488,35489,35490,35491,35492,35493,35494,35495,35496,35497,35498,35499,35500,35501,35502,35503,35504,35505,35506,35507,35508,35509,35510,35511,35512,35513,35514,35515,35516,35517,35518,35519,35520,35521,35522,35523,35524,35525,35526,35527,35528,35529,35530,35531,35532,35533,35534,35535,35536,35537,35538,35539,35540,35541,35542,35543,35544,35545,35546,35547,35548,35549,35550,35551,35552,35553,35554,35555,38113,38392,30504,26629,27048,21643,20045,28856,35784,25688,25995,23429,31364,20538,23528,30651,27617,35449,31896,27838,30415,26025,36759,23853,23637,34360,26632,21344,25112,31449,28251,32509,27167,31456,24432,28467,24352,25484,28072,26454,19976,24080,36134,20183,32960,30260,38556,25307,26157,25214,27836,36213,29031,32617,20806,32903,21484,36974,25240,21746,34544,36761,32773,38167,34071,36825,27993,29645,26015,30495,29956,30759,33275,36126,38024,20390,26517,30137,35786,38663,25391,38215,38453,33976,25379,30529,24449,29424,20105,24596,25972,25327,27491,25919,35556,35557,35558,35559,35560,35561,35562,35563,35564,35565,35566,35567,35568,35569,35570,35571,35572,35573,35574,35575,35576,35577,35578,35579,35580,35581,35582,35583,35584,35585,35586,35587,35588,35589,35590,35592,35593,35594,35595,35596,35597,35598,35599,35600,35601,35602,35603,35604,35605,35606,35607,35608,35609,35610,35611,35612,35613,35614,35615,35616,35617,35618,35619,35620,35621,35623,35624,35625,35626,35627,35628,35629,35630,35631,35632,35633,35634,35635,35636,35637,35638,35639,35640,35641,35642,35643,35644,35645,35646,35647,35648,35649,35650,35651,35652,35653,24103,30151,37073,35777,33437,26525,25903,21553,34584,30693,32930,33026,27713,20043,32455,32844,30452,26893,27542,25191,20540,20356,22336,25351,27490,36286,21482,26088,32440,24535,25370,25527,33267,33268,32622,24092,23769,21046,26234,31209,31258,36136,28825,30164,28382,27835,31378,20013,30405,24544,38047,34935,32456,31181,32959,37325,20210,20247,33311,21608,24030,27954,35788,31909,36724,32920,24090,21650,30385,23449,26172,39588,29664,26666,34523,26417,29482,35832,35803,36880,31481,28891,29038,25284,30633,22065,20027,33879,26609,21161,34496,36142,38136,31569,35654,35655,35656,35657,35658,35659,35660,35661,35662,35663,35664,35665,35666,35667,35668,35669,35670,35671,35672,35673,35674,35675,35676,35677,35678,35679,35680,35681,35682,35683,35684,35685,35687,35688,35689,35690,35691,35693,35694,35695,35696,35697,35698,35699,35700,35701,35702,35703,35704,35705,35706,35707,35708,35709,35710,35711,35712,35713,35714,35715,35716,35717,35718,35719,35720,35721,35722,35723,35724,35725,35726,35727,35728,35729,35730,35731,35732,35733,35734,35735,35736,35737,35738,35739,35740,35741,35742,35743,35756,35761,35771,35783,35792,35818,35849,35870,20303,27880,31069,39547,25235,29226,25341,19987,30742,36716,25776,36186,31686,26729,24196,35013,22918,25758,22766,29366,26894,38181,36861,36184,22368,32512,35846,20934,25417,25305,21331,26700,29730,33537,37196,21828,30528,28796,27978,20857,21672,36164,23039,28363,28100,23388,32043,20180,31869,28371,23376,33258,28173,23383,39683,26837,36394,23447,32508,24635,32437,37049,36208,22863,25549,31199,36275,21330,26063,31062,35781,38459,32452,38075,32386,22068,37257,26368,32618,23562,36981,26152,24038,20304,26590,20570,20316,22352,24231,59408,59409,59410,59411,59412,35896,35897,35898,35899,35900,35901,35902,35903,35904,35906,35907,35908,35909,35912,35914,35915,35917,35918,35919,35920,35921,35922,35923,35924,35926,35927,35928,35929,35931,35932,35933,35934,35935,35936,35939,35940,35941,35942,35943,35944,35945,35948,35949,35950,35951,35952,35953,35954,35956,35957,35958,35959,35963,35964,35965,35966,35967,35968,35969,35971,35972,35974,35975,35976,35979,35981,35982,35983,35984,35985,35986,35987,35989,35990,35991,35993,35994,35995,35996,35997,35998,35999,36000,36001,36002,36003,36004,36005,36006,36007,36008,36009,36010,36011,36012,36013,20109,19980,20800,19984,24319,21317,19989,20120,19998,39730,23404,22121,20008,31162,20031,21269,20039,22829,29243,21358,27664,22239,32996,39319,27603,30590,40727,20022,20127,40720,20060,20073,20115,33416,23387,21868,22031,20164,21389,21405,21411,21413,21422,38757,36189,21274,21493,21286,21294,21310,36188,21350,21347,20994,21000,21006,21037,21043,21055,21056,21068,21086,21089,21084,33967,21117,21122,21121,21136,21139,20866,32596,20155,20163,20169,20162,20200,20193,20203,20190,20251,20211,20258,20324,20213,20261,20263,20233,20267,20318,20327,25912,20314,20317,36014,36015,36016,36017,36018,36019,36020,36021,36022,36023,36024,36025,36026,36027,36028,36029,36030,36031,36032,36033,36034,36035,36036,36037,36038,36039,36040,36041,36042,36043,36044,36045,36046,36047,36048,36049,36050,36051,36052,36053,36054,36055,36056,36057,36058,36059,36060,36061,36062,36063,36064,36065,36066,36067,36068,36069,36070,36071,36072,36073,36074,36075,36076,36077,36078,36079,36080,36081,36082,36083,36084,36085,36086,36087,36088,36089,36090,36091,36092,36093,36094,36095,36096,36097,36098,36099,36100,36101,36102,36103,36104,36105,36106,36107,36108,36109,20319,20311,20274,20285,20342,20340,20369,20361,20355,20367,20350,20347,20394,20348,20396,20372,20454,20456,20458,20421,20442,20451,20444,20433,20447,20472,20521,20556,20467,20524,20495,20526,20525,20478,20508,20492,20517,20520,20606,20547,20565,20552,20558,20588,20603,20645,20647,20649,20666,20694,20742,20717,20716,20710,20718,20743,20747,20189,27709,20312,20325,20430,40864,27718,31860,20846,24061,40649,39320,20865,22804,21241,21261,35335,21264,20971,22809,20821,20128,20822,20147,34926,34980,20149,33044,35026,31104,23348,34819,32696,20907,20913,20925,20924,36110,36111,36112,36113,36114,36115,36116,36117,36118,36119,36120,36121,36122,36123,36124,36128,36177,36178,36183,36191,36197,36200,36201,36202,36204,36206,36207,36209,36210,36216,36217,36218,36219,36220,36221,36222,36223,36224,36226,36227,36230,36231,36232,36233,36236,36237,36238,36239,36240,36242,36243,36245,36246,36247,36248,36249,36250,36251,36252,36253,36254,36256,36257,36258,36260,36261,36262,36263,36264,36265,36266,36267,36268,36269,36270,36271,36272,36274,36278,36279,36281,36283,36285,36288,36289,36290,36293,36295,36296,36297,36298,36301,36304,36306,36307,36308,20935,20886,20898,20901,35744,35750,35751,35754,35764,35765,35767,35778,35779,35787,35791,35790,35794,35795,35796,35798,35800,35801,35804,35807,35808,35812,35816,35817,35822,35824,35827,35830,35833,35836,35839,35840,35842,35844,35847,35852,35855,35857,35858,35860,35861,35862,35865,35867,35864,35869,35871,35872,35873,35877,35879,35882,35883,35886,35887,35890,35891,35893,35894,21353,21370,38429,38434,38433,38449,38442,38461,38460,38466,38473,38484,38495,38503,38508,38514,38516,38536,38541,38551,38576,37015,37019,37021,37017,37036,37025,37044,37043,37046,37050,36309,36312,36313,36316,36320,36321,36322,36325,36326,36327,36329,36333,36334,36336,36337,36338,36340,36342,36348,36350,36351,36352,36353,36354,36355,36356,36358,36359,36360,36363,36365,36366,36368,36369,36370,36371,36373,36374,36375,36376,36377,36378,36379,36380,36384,36385,36388,36389,36390,36391,36392,36395,36397,36400,36402,36403,36404,36406,36407,36408,36411,36412,36414,36415,36419,36421,36422,36428,36429,36430,36431,36432,36435,36436,36437,36438,36439,36440,36442,36443,36444,36445,36446,36447,36448,36449,36450,36451,36452,36453,36455,36456,36458,36459,36462,36465,37048,37040,37071,37061,37054,37072,37060,37063,37075,37094,37090,37084,37079,37083,37099,37103,37118,37124,37154,37150,37155,37169,37167,37177,37187,37190,21005,22850,21154,21164,21165,21182,21759,21200,21206,21232,21471,29166,30669,24308,20981,20988,39727,21430,24321,30042,24047,22348,22441,22433,22654,22716,22725,22737,22313,22316,22314,22323,22329,22318,22319,22364,22331,22338,22377,22405,22379,22406,22396,22395,22376,22381,22390,22387,22445,22436,22412,22450,22479,22439,22452,22419,22432,22485,22488,22490,22489,22482,22456,22516,22511,22520,22500,22493,36467,36469,36471,36472,36473,36474,36475,36477,36478,36480,36482,36483,36484,36486,36488,36489,36490,36491,36492,36493,36494,36497,36498,36499,36501,36502,36503,36504,36505,36506,36507,36509,36511,36512,36513,36514,36515,36516,36517,36518,36519,36520,36521,36522,36525,36526,36528,36529,36531,36532,36533,36534,36535,36536,36537,36539,36540,36541,36542,36543,36544,36545,36546,36547,36548,36549,36550,36551,36552,36553,36554,36555,36556,36557,36559,36560,36561,36562,36563,36564,36565,36566,36567,36568,36569,36570,36571,36572,36573,36574,36575,36576,36577,36578,36579,36580,22539,22541,22525,22509,22528,22558,22553,22596,22560,22629,22636,22657,22665,22682,22656,39336,40729,25087,33401,33405,33407,33423,33418,33448,33412,33422,33425,33431,33433,33451,33464,33470,33456,33480,33482,33507,33432,33463,33454,33483,33484,33473,33449,33460,33441,33450,33439,33476,33486,33444,33505,33545,33527,33508,33551,33543,33500,33524,33490,33496,33548,33531,33491,33553,33562,33542,33556,33557,33504,33493,33564,33617,33627,33628,33544,33682,33596,33588,33585,33691,33630,33583,33615,33607,33603,33631,33600,33559,33632,33581,33594,33587,33638,33637,36581,36582,36583,36584,36585,36586,36587,36588,36589,36590,36591,36592,36593,36594,36595,36596,36597,36598,36599,36600,36601,36602,36603,36604,36605,36606,36607,36608,36609,36610,36611,36612,36613,36614,36615,36616,36617,36618,36619,36620,36621,36622,36623,36624,36625,36626,36627,36628,36629,36630,36631,36632,36633,36634,36635,36636,36637,36638,36639,36640,36641,36642,36643,36644,36645,36646,36647,36648,36649,36650,36651,36652,36653,36654,36655,36656,36657,36658,36659,36660,36661,36662,36663,36664,36665,36666,36667,36668,36669,36670,36671,36672,36673,36674,36675,36676,33640,33563,33641,33644,33642,33645,33646,33712,33656,33715,33716,33696,33706,33683,33692,33669,33660,33718,33705,33661,33720,33659,33688,33694,33704,33722,33724,33729,33793,33765,33752,22535,33816,33803,33757,33789,33750,33820,33848,33809,33798,33748,33759,33807,33795,33784,33785,33770,33733,33728,33830,33776,33761,33884,33873,33882,33881,33907,33927,33928,33914,33929,33912,33852,33862,33897,33910,33932,33934,33841,33901,33985,33997,34000,34022,33981,34003,33994,33983,33978,34016,33953,33977,33972,33943,34021,34019,34060,29965,34104,34032,34105,34079,34106,36677,36678,36679,36680,36681,36682,36683,36684,36685,36686,36687,36688,36689,36690,36691,36692,36693,36694,36695,36696,36697,36698,36699,36700,36701,36702,36703,36704,36705,36706,36707,36708,36709,36714,36736,36748,36754,36765,36768,36769,36770,36772,36773,36774,36775,36778,36780,36781,36782,36783,36786,36787,36788,36789,36791,36792,36794,36795,36796,36799,36800,36803,36806,36809,36810,36811,36812,36813,36815,36818,36822,36823,36826,36832,36833,36835,36839,36844,36847,36849,36850,36852,36853,36854,36858,36859,36860,36862,36863,36871,36872,36876,36878,36883,36885,36888,34134,34107,34047,34044,34137,34120,34152,34148,34142,34170,30626,34115,34162,34171,34212,34216,34183,34191,34169,34222,34204,34181,34233,34231,34224,34259,34241,34268,34303,34343,34309,34345,34326,34364,24318,24328,22844,22849,32823,22869,22874,22872,21263,23586,23589,23596,23604,25164,25194,25247,25275,25290,25306,25303,25326,25378,25334,25401,25419,25411,25517,25590,25457,25466,25486,25524,25453,25516,25482,25449,25518,25532,25586,25592,25568,25599,25540,25566,25550,25682,25542,25534,25669,25665,25611,25627,25632,25612,25638,25633,25694,25732,25709,25750,36889,36892,36899,36900,36901,36903,36904,36905,36906,36907,36908,36912,36913,36914,36915,36916,36919,36921,36922,36925,36927,36928,36931,36933,36934,36936,36937,36938,36939,36940,36942,36948,36949,36950,36953,36954,36956,36957,36958,36959,36960,36961,36964,36966,36967,36969,36970,36971,36972,36975,36976,36977,36978,36979,36982,36983,36984,36985,36986,36987,36988,36990,36993,36996,36997,36998,36999,37001,37002,37004,37005,37006,37007,37008,37010,37012,37014,37016,37018,37020,37022,37023,37024,37028,37029,37031,37032,37033,37035,37037,37042,37047,37052,37053,37055,37056,25722,25783,25784,25753,25786,25792,25808,25815,25828,25826,25865,25893,25902,24331,24530,29977,24337,21343,21489,21501,21481,21480,21499,21522,21526,21510,21579,21586,21587,21588,21590,21571,21537,21591,21593,21539,21554,21634,21652,21623,21617,21604,21658,21659,21636,21622,21606,21661,21712,21677,21698,21684,21714,21671,21670,21715,21716,21618,21667,21717,21691,21695,21708,21721,21722,21724,21673,21674,21668,21725,21711,21726,21787,21735,21792,21757,21780,21747,21794,21795,21775,21777,21799,21802,21863,21903,21941,21833,21869,21825,21845,21823,21840,21820,37058,37059,37062,37064,37065,37067,37068,37069,37074,37076,37077,37078,37080,37081,37082,37086,37087,37088,37091,37092,37093,37097,37098,37100,37102,37104,37105,37106,37107,37109,37110,37111,37113,37114,37115,37116,37119,37120,37121,37123,37125,37126,37127,37128,37129,37130,37131,37132,37133,37134,37135,37136,37137,37138,37139,37140,37141,37142,37143,37144,37146,37147,37148,37149,37151,37152,37153,37156,37157,37158,37159,37160,37161,37162,37163,37164,37165,37166,37168,37170,37171,37172,37173,37174,37175,37176,37178,37179,37180,37181,37182,37183,37184,37185,37186,37188,21815,21846,21877,21878,21879,21811,21808,21852,21899,21970,21891,21937,21945,21896,21889,21919,21886,21974,21905,21883,21983,21949,21950,21908,21913,21994,22007,21961,22047,21969,21995,21996,21972,21990,21981,21956,21999,21989,22002,22003,21964,21965,21992,22005,21988,36756,22046,22024,22028,22017,22052,22051,22014,22016,22055,22061,22104,22073,22103,22060,22093,22114,22105,22108,22092,22100,22150,22116,22129,22123,22139,22140,22149,22163,22191,22228,22231,22237,22241,22261,22251,22265,22271,22276,22282,22281,22300,24079,24089,24084,24081,24113,24123,24124,37189,37191,37192,37201,37203,37204,37205,37206,37208,37209,37211,37212,37215,37216,37222,37223,37224,37227,37229,37235,37242,37243,37244,37248,37249,37250,37251,37252,37254,37256,37258,37262,37263,37267,37268,37269,37270,37271,37272,37273,37276,37277,37278,37279,37280,37281,37284,37285,37286,37287,37288,37289,37291,37292,37296,37297,37298,37299,37302,37303,37304,37305,37307,37308,37309,37310,37311,37312,37313,37314,37315,37316,37317,37318,37320,37323,37328,37330,37331,37332,37333,37334,37335,37336,37337,37338,37339,37341,37342,37343,37344,37345,37346,37347,37348,37349,24119,24132,24148,24155,24158,24161,23692,23674,23693,23696,23702,23688,23704,23705,23697,23706,23708,23733,23714,23741,23724,23723,23729,23715,23745,23735,23748,23762,23780,23755,23781,23810,23811,23847,23846,23854,23844,23838,23814,23835,23896,23870,23860,23869,23916,23899,23919,23901,23915,23883,23882,23913,23924,23938,23961,23965,35955,23991,24005,24435,24439,24450,24455,24457,24460,24469,24473,24476,24488,24493,24501,24508,34914,24417,29357,29360,29364,29367,29368,29379,29377,29390,29389,29394,29416,29423,29417,29426,29428,29431,29441,29427,29443,29434,37350,37351,37352,37353,37354,37355,37356,37357,37358,37359,37360,37361,37362,37363,37364,37365,37366,37367,37368,37369,37370,37371,37372,37373,37374,37375,37376,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37387,37388,37389,37390,37391,37392,37393,37394,37395,37396,37397,37398,37399,37400,37401,37402,37403,37404,37405,37406,37407,37408,37409,37410,37411,37412,37413,37414,37415,37416,37417,37418,37419,37420,37421,37422,37423,37424,37425,37426,37427,37428,37429,37430,37431,37432,37433,37434,37435,37436,37437,37438,37439,37440,37441,37442,37443,37444,37445,29435,29463,29459,29473,29450,29470,29469,29461,29474,29497,29477,29484,29496,29489,29520,29517,29527,29536,29548,29551,29566,33307,22821,39143,22820,22786,39267,39271,39272,39273,39274,39275,39276,39284,39287,39293,39296,39300,39303,39306,39309,39312,39313,39315,39316,39317,24192,24209,24203,24214,24229,24224,24249,24245,24254,24243,36179,24274,24273,24283,24296,24298,33210,24516,24521,24534,24527,24579,24558,24580,24545,24548,24574,24581,24582,24554,24557,24568,24601,24629,24614,24603,24591,24589,24617,24619,24586,24639,24609,24696,24697,24699,24698,24642,37446,37447,37448,37449,37450,37451,37452,37453,37454,37455,37456,37457,37458,37459,37460,37461,37462,37463,37464,37465,37466,37467,37468,37469,37470,37471,37472,37473,37474,37475,37476,37477,37478,37479,37480,37481,37482,37483,37484,37485,37486,37487,37488,37489,37490,37491,37493,37494,37495,37496,37497,37498,37499,37500,37501,37502,37503,37504,37505,37506,37507,37508,37509,37510,37511,37512,37513,37514,37515,37516,37517,37519,37520,37521,37522,37523,37524,37525,37526,37527,37528,37529,37530,37531,37532,37533,37534,37535,37536,37537,37538,37539,37540,37541,37542,37543,24682,24701,24726,24730,24749,24733,24707,24722,24716,24731,24812,24763,24753,24797,24792,24774,24794,24756,24864,24870,24853,24867,24820,24832,24846,24875,24906,24949,25004,24980,24999,25015,25044,25077,24541,38579,38377,38379,38385,38387,38389,38390,38396,38398,38403,38404,38406,38408,38410,38411,38412,38413,38415,38418,38421,38422,38423,38425,38426,20012,29247,25109,27701,27732,27740,27722,27811,27781,27792,27796,27788,27752,27753,27764,27766,27782,27817,27856,27860,27821,27895,27896,27889,27863,27826,27872,27862,27898,27883,27886,27825,27859,27887,27902,37544,37545,37546,37547,37548,37549,37551,37552,37553,37554,37555,37556,37557,37558,37559,37560,37561,37562,37563,37564,37565,37566,37567,37568,37569,37570,37571,37572,37573,37574,37575,37577,37578,37579,37580,37581,37582,37583,37584,37585,37586,37587,37588,37589,37590,37591,37592,37593,37594,37595,37596,37597,37598,37599,37600,37601,37602,37603,37604,37605,37606,37607,37608,37609,37610,37611,37612,37613,37614,37615,37616,37617,37618,37619,37620,37621,37622,37623,37624,37625,37626,37627,37628,37629,37630,37631,37632,37633,37634,37635,37636,37637,37638,37639,37640,37641,27961,27943,27916,27971,27976,27911,27908,27929,27918,27947,27981,27950,27957,27930,27983,27986,27988,27955,28049,28015,28062,28064,27998,28051,28052,27996,28000,28028,28003,28186,28103,28101,28126,28174,28095,28128,28177,28134,28125,28121,28182,28075,28172,28078,28203,28270,28238,28267,28338,28255,28294,28243,28244,28210,28197,28228,28383,28337,28312,28384,28461,28386,28325,28327,28349,28347,28343,28375,28340,28367,28303,28354,28319,28514,28486,28487,28452,28437,28409,28463,28470,28491,28532,28458,28425,28457,28553,28557,28556,28536,28530,28540,28538,28625,37642,37643,37644,37645,37646,37647,37648,37649,37650,37651,37652,37653,37654,37655,37656,37657,37658,37659,37660,37661,37662,37663,37664,37665,37666,37667,37668,37669,37670,37671,37672,37673,37674,37675,37676,37677,37678,37679,37680,37681,37682,37683,37684,37685,37686,37687,37688,37689,37690,37691,37692,37693,37695,37696,37697,37698,37699,37700,37701,37702,37703,37704,37705,37706,37707,37708,37709,37710,37711,37712,37713,37714,37715,37716,37717,37718,37719,37720,37721,37722,37723,37724,37725,37726,37727,37728,37729,37730,37731,37732,37733,37734,37735,37736,37737,37739,28617,28583,28601,28598,28610,28641,28654,28638,28640,28655,28698,28707,28699,28729,28725,28751,28766,23424,23428,23445,23443,23461,23480,29999,39582,25652,23524,23534,35120,23536,36423,35591,36790,36819,36821,36837,36846,36836,36841,36838,36851,36840,36869,36868,36875,36902,36881,36877,36886,36897,36917,36918,36909,36911,36932,36945,36946,36944,36968,36952,36962,36955,26297,36980,36989,36994,37000,36995,37003,24400,24407,24406,24408,23611,21675,23632,23641,23409,23651,23654,32700,24362,24361,24365,33396,24380,39739,23662,22913,22915,22925,22953,22954,22947,37740,37741,37742,37743,37744,37745,37746,37747,37748,37749,37750,37751,37752,37753,37754,37755,37756,37757,37758,37759,37760,37761,37762,37763,37764,37765,37766,37767,37768,37769,37770,37771,37772,37773,37774,37776,37777,37778,37779,37780,37781,37782,37783,37784,37785,37786,37787,37788,37789,37790,37791,37792,37793,37794,37795,37796,37797,37798,37799,37800,37801,37802,37803,37804,37805,37806,37807,37808,37809,37810,37811,37812,37813,37814,37815,37816,37817,37818,37819,37820,37821,37822,37823,37824,37825,37826,37827,37828,37829,37830,37831,37832,37833,37835,37836,37837,22935,22986,22955,22942,22948,22994,22962,22959,22999,22974,23045,23046,23005,23048,23011,23000,23033,23052,23049,23090,23092,23057,23075,23059,23104,23143,23114,23125,23100,23138,23157,33004,23210,23195,23159,23162,23230,23275,23218,23250,23252,23224,23264,23267,23281,23254,23270,23256,23260,23305,23319,23318,23346,23351,23360,23573,23580,23386,23397,23411,23377,23379,23394,39541,39543,39544,39546,39551,39549,39552,39553,39557,39560,39562,39568,39570,39571,39574,39576,39579,39580,39581,39583,39584,39586,39587,39589,39591,32415,32417,32419,32421,32424,32425,37838,37839,37840,37841,37842,37843,37844,37845,37847,37848,37849,37850,37851,37852,37853,37854,37855,37856,37857,37858,37859,37860,37861,37862,37863,37864,37865,37866,37867,37868,37869,37870,37871,37872,37873,37874,37875,37876,37877,37878,37879,37880,37881,37882,37883,37884,37885,37886,37887,37888,37889,37890,37891,37892,37893,37894,37895,37896,37897,37898,37899,37900,37901,37902,37903,37904,37905,37906,37907,37908,37909,37910,37911,37912,37913,37914,37915,37916,37917,37918,37919,37920,37921,37922,37923,37924,37925,37926,37927,37928,37929,37930,37931,37932,37933,37934,32429,32432,32446,32448,32449,32450,32457,32459,32460,32464,32468,32471,32475,32480,32481,32488,32491,32494,32495,32497,32498,32525,32502,32506,32507,32510,32513,32514,32515,32519,32520,32523,32524,32527,32529,32530,32535,32537,32540,32539,32543,32545,32546,32547,32548,32549,32550,32551,32554,32555,32556,32557,32559,32560,32561,32562,32563,32565,24186,30079,24027,30014,37013,29582,29585,29614,29602,29599,29647,29634,29649,29623,29619,29632,29641,29640,29669,29657,39036,29706,29673,29671,29662,29626,29682,29711,29738,29787,29734,29733,29736,29744,29742,29740,37935,37936,37937,37938,37939,37940,37941,37942,37943,37944,37945,37946,37947,37948,37949,37951,37952,37953,37954,37955,37956,37957,37958,37959,37960,37961,37962,37963,37964,37965,37966,37967,37968,37969,37970,37971,37972,37973,37974,37975,37976,37977,37978,37979,37980,37981,37982,37983,37984,37985,37986,37987,37988,37989,37990,37991,37992,37993,37994,37996,37997,37998,37999,38000,38001,38002,38003,38004,38005,38006,38007,38008,38009,38010,38011,38012,38013,38014,38015,38016,38017,38018,38019,38020,38033,38038,38040,38087,38095,38099,38100,38106,38118,38139,38172,38176,29723,29722,29761,29788,29783,29781,29785,29815,29805,29822,29852,29838,29824,29825,29831,29835,29854,29864,29865,29840,29863,29906,29882,38890,38891,38892,26444,26451,26462,26440,26473,26533,26503,26474,26483,26520,26535,26485,26536,26526,26541,26507,26487,26492,26608,26633,26584,26634,26601,26544,26636,26585,26549,26586,26547,26589,26624,26563,26552,26594,26638,26561,26621,26674,26675,26720,26721,26702,26722,26692,26724,26755,26653,26709,26726,26689,26727,26688,26686,26698,26697,26665,26805,26767,26740,26743,26771,26731,26818,26990,26876,26911,26912,26873,38183,38195,38205,38211,38216,38219,38229,38234,38240,38254,38260,38261,38263,38264,38265,38266,38267,38268,38269,38270,38272,38273,38274,38275,38276,38277,38278,38279,38280,38281,38282,38283,38284,38285,38286,38287,38288,38289,38290,38291,38292,38293,38294,38295,38296,38297,38298,38299,38300,38301,38302,38303,38304,38305,38306,38307,38308,38309,38310,38311,38312,38313,38314,38315,38316,38317,38318,38319,38320,38321,38322,38323,38324,38325,38326,38327,38328,38329,38330,38331,38332,38333,38334,38335,38336,38337,38338,38339,38340,38341,38342,38343,38344,38345,38346,38347,26916,26864,26891,26881,26967,26851,26896,26993,26937,26976,26946,26973,27012,26987,27008,27032,27000,26932,27084,27015,27016,27086,27017,26982,26979,27001,27035,27047,27067,27051,27053,27092,27057,27073,27082,27103,27029,27104,27021,27135,27183,27117,27159,27160,27237,27122,27204,27198,27296,27216,27227,27189,27278,27257,27197,27176,27224,27260,27281,27280,27305,27287,27307,29495,29522,27521,27522,27527,27524,27538,27539,27533,27546,27547,27553,27562,36715,36717,36721,36722,36723,36725,36726,36728,36727,36729,36730,36732,36734,36737,36738,36740,36743,36747,38348,38349,38350,38351,38352,38353,38354,38355,38356,38357,38358,38359,38360,38361,38362,38363,38364,38365,38366,38367,38368,38369,38370,38371,38372,38373,38374,38375,38380,38399,38407,38419,38424,38427,38430,38432,38435,38436,38437,38438,38439,38440,38441,38443,38444,38445,38447,38448,38455,38456,38457,38458,38462,38465,38467,38474,38478,38479,38481,38482,38483,38486,38487,38488,38489,38490,38492,38493,38494,38496,38499,38501,38502,38507,38509,38510,38511,38512,38513,38515,38520,38521,38522,38523,38524,38525,38526,38527,38528,38529,38530,38531,38532,38535,38537,38538,36749,36750,36751,36760,36762,36558,25099,25111,25115,25119,25122,25121,25125,25124,25132,33255,29935,29940,29951,29967,29969,29971,25908,26094,26095,26096,26122,26137,26482,26115,26133,26112,28805,26359,26141,26164,26161,26166,26165,32774,26207,26196,26177,26191,26198,26209,26199,26231,26244,26252,26279,26269,26302,26331,26332,26342,26345,36146,36147,36150,36155,36157,36160,36165,36166,36168,36169,36167,36173,36181,36185,35271,35274,35275,35276,35278,35279,35280,35281,29294,29343,29277,29286,29295,29310,29311,29316,29323,29325,29327,29330,25352,25394,25520,38540,38542,38545,38546,38547,38549,38550,38554,38555,38557,38558,38559,38560,38561,38562,38563,38564,38565,38566,38568,38569,38570,38571,38572,38573,38574,38575,38577,38578,38580,38581,38583,38584,38586,38587,38591,38594,38595,38600,38602,38603,38608,38609,38611,38612,38614,38615,38616,38617,38618,38619,38620,38621,38622,38623,38625,38626,38627,38628,38629,38630,38631,38635,38636,38637,38638,38640,38641,38642,38644,38645,38648,38650,38651,38652,38653,38655,38658,38659,38661,38666,38667,38668,38672,38673,38674,38676,38677,38679,38680,38681,38682,38683,38685,38687,38688,25663,25816,32772,27626,27635,27645,27637,27641,27653,27655,27654,27661,27669,27672,27673,27674,27681,27689,27684,27690,27698,25909,25941,25963,29261,29266,29270,29232,34402,21014,32927,32924,32915,32956,26378,32957,32945,32939,32941,32948,32951,32999,33000,33001,33002,32987,32962,32964,32985,32973,32983,26384,32989,33003,33009,33012,33005,33037,33038,33010,33020,26389,33042,35930,33078,33054,33068,33048,33074,33096,33100,33107,33140,33113,33114,33137,33120,33129,33148,33149,33133,33127,22605,23221,33160,33154,33169,28373,33187,33194,33228,26406,33226,33211,38689,38690,38691,38692,38693,38694,38695,38696,38697,38699,38700,38702,38703,38705,38707,38708,38709,38710,38711,38714,38715,38716,38717,38719,38720,38721,38722,38723,38724,38725,38726,38727,38728,38729,38730,38731,38732,38733,38734,38735,38736,38737,38740,38741,38743,38744,38746,38748,38749,38751,38755,38756,38758,38759,38760,38762,38763,38764,38765,38766,38767,38768,38769,38770,38773,38775,38776,38777,38778,38779,38781,38782,38783,38784,38785,38786,38787,38788,38790,38791,38792,38793,38794,38796,38798,38799,38800,38803,38805,38806,38807,38809,38810,38811,38812,38813,33217,33190,27428,27447,27449,27459,27462,27481,39121,39122,39123,39125,39129,39130,27571,24384,27586,35315,26000,40785,26003,26044,26054,26052,26051,26060,26062,26066,26070,28800,28828,28822,28829,28859,28864,28855,28843,28849,28904,28874,28944,28947,28950,28975,28977,29043,29020,29032,28997,29042,29002,29048,29050,29080,29107,29109,29096,29088,29152,29140,29159,29177,29213,29224,28780,28952,29030,29113,25150,25149,25155,25160,25161,31035,31040,31046,31049,31067,31068,31059,31066,31074,31063,31072,31087,31079,31098,31109,31114,31130,31143,31155,24529,24528,38814,38815,38817,38818,38820,38821,38822,38823,38824,38825,38826,38828,38830,38832,38833,38835,38837,38838,38839,38840,38841,38842,38843,38844,38845,38846,38847,38848,38849,38850,38851,38852,38853,38854,38855,38856,38857,38858,38859,38860,38861,38862,38863,38864,38865,38866,38867,38868,38869,38870,38871,38872,38873,38874,38875,38876,38877,38878,38879,38880,38881,38882,38883,38884,38885,38888,38894,38895,38896,38897,38898,38900,38903,38904,38905,38906,38907,38908,38909,38910,38911,38912,38913,38914,38915,38916,38917,38918,38919,38920,38921,38922,38923,38924,38925,38926,24636,24669,24666,24679,24641,24665,24675,24747,24838,24845,24925,25001,24989,25035,25041,25094,32896,32895,27795,27894,28156,30710,30712,30720,30729,30743,30744,30737,26027,30765,30748,30749,30777,30778,30779,30751,30780,30757,30764,30755,30761,30798,30829,30806,30807,30758,30800,30791,30796,30826,30875,30867,30874,30855,30876,30881,30883,30898,30905,30885,30932,30937,30921,30956,30962,30981,30964,30995,31012,31006,31028,40859,40697,40699,40700,30449,30468,30477,30457,30471,30472,30490,30498,30489,30509,30502,30517,30520,30544,30545,30535,30531,30554,30568,38927,38928,38929,38930,38931,38932,38933,38934,38935,38936,38937,38938,38939,38940,38941,38942,38943,38944,38945,38946,38947,38948,38949,38950,38951,38952,38953,38954,38955,38956,38957,38958,38959,38960,38961,38962,38963,38964,38965,38966,38967,38968,38969,38970,38971,38972,38973,38974,38975,38976,38977,38978,38979,38980,38981,38982,38983,38984,38985,38986,38987,38988,38989,38990,38991,38992,38993,38994,38995,38996,38997,38998,38999,39000,39001,39002,39003,39004,39005,39006,39007,39008,39009,39010,39011,39012,39013,39014,39015,39016,39017,39018,39019,39020,39021,39022,30562,30565,30591,30605,30589,30592,30604,30609,30623,30624,30640,30645,30653,30010,30016,30030,30027,30024,30043,30066,30073,30083,32600,32609,32607,35400,32616,32628,32625,32633,32641,32638,30413,30437,34866,38021,38022,38023,38027,38026,38028,38029,38031,38032,38036,38039,38037,38042,38043,38044,38051,38052,38059,38058,38061,38060,38063,38064,38066,38068,38070,38071,38072,38073,38074,38076,38077,38079,38084,38088,38089,38090,38091,38092,38093,38094,38096,38097,38098,38101,38102,38103,38105,38104,38107,38110,38111,38112,38114,38116,38117,38119,38120,38122,39023,39024,39025,39026,39027,39028,39051,39054,39058,39061,39065,39075,39080,39081,39082,39083,39084,39085,39086,39087,39088,39089,39090,39091,39092,39093,39094,39095,39096,39097,39098,39099,39100,39101,39102,39103,39104,39105,39106,39107,39108,39109,39110,39111,39112,39113,39114,39115,39116,39117,39119,39120,39124,39126,39127,39131,39132,39133,39136,39137,39138,39139,39140,39141,39142,39145,39146,39147,39148,39149,39150,39151,39152,39153,39154,39155,39156,39157,39158,39159,39160,39161,39162,39163,39164,39165,39166,39167,39168,39169,39170,39171,39172,39173,39174,39175,38121,38123,38126,38127,38131,38132,38133,38135,38137,38140,38141,38143,38147,38146,38150,38151,38153,38154,38157,38158,38159,38162,38163,38164,38165,38166,38168,38171,38173,38174,38175,38178,38186,38187,38185,38188,38193,38194,38196,38198,38199,38200,38204,38206,38207,38210,38197,38212,38213,38214,38217,38220,38222,38223,38226,38227,38228,38230,38231,38232,38233,38235,38238,38239,38237,38241,38242,38244,38245,38246,38247,38248,38249,38250,38251,38252,38255,38257,38258,38259,38202,30695,30700,38601,31189,31213,31203,31211,31238,23879,31235,31234,31262,31252,39176,39177,39178,39179,39180,39182,39183,39185,39186,39187,39188,39189,39190,39191,39192,39193,39194,39195,39196,39197,39198,39199,39200,39201,39202,39203,39204,39205,39206,39207,39208,39209,39210,39211,39212,39213,39215,39216,39217,39218,39219,39220,39221,39222,39223,39224,39225,39226,39227,39228,39229,39230,39231,39232,39233,39234,39235,39236,39237,39238,39239,39240,39241,39242,39243,39244,39245,39246,39247,39248,39249,39250,39251,39254,39255,39256,39257,39258,39259,39260,39261,39262,39263,39264,39265,39266,39268,39270,39283,39288,39289,39291,39294,39298,39299,39305,31289,31287,31313,40655,39333,31344,30344,30350,30355,30361,30372,29918,29920,29996,40480,40482,40488,40489,40490,40491,40492,40498,40497,40502,40504,40503,40505,40506,40510,40513,40514,40516,40518,40519,40520,40521,40523,40524,40526,40529,40533,40535,40538,40539,40540,40542,40547,40550,40551,40552,40553,40554,40555,40556,40561,40557,40563,30098,30100,30102,30112,30109,30124,30115,30131,30132,30136,30148,30129,30128,30147,30146,30166,30157,30179,30184,30182,30180,30187,30183,30211,30193,30204,30207,30224,30208,30213,30220,30231,30218,30245,30232,30229,30233,39308,39310,39322,39323,39324,39325,39326,39327,39328,39329,39330,39331,39332,39334,39335,39337,39338,39339,39340,39341,39342,39343,39344,39345,39346,39347,39348,39349,39350,39351,39352,39353,39354,39355,39356,39357,39358,39359,39360,39361,39362,39363,39364,39365,39366,39367,39368,39369,39370,39371,39372,39373,39374,39375,39376,39377,39378,39379,39380,39381,39382,39383,39384,39385,39386,39387,39388,39389,39390,39391,39392,39393,39394,39395,39396,39397,39398,39399,39400,39401,39402,39403,39404,39405,39406,39407,39408,39409,39410,39411,39412,39413,39414,39415,39416,39417,30235,30268,30242,30240,30272,30253,30256,30271,30261,30275,30270,30259,30285,30302,30292,30300,30294,30315,30319,32714,31462,31352,31353,31360,31366,31368,31381,31398,31392,31404,31400,31405,31411,34916,34921,34930,34941,34943,34946,34978,35014,34999,35004,35017,35042,35022,35043,35045,35057,35098,35068,35048,35070,35056,35105,35097,35091,35099,35082,35124,35115,35126,35137,35174,35195,30091,32997,30386,30388,30684,32786,32788,32790,32796,32800,32802,32805,32806,32807,32809,32808,32817,32779,32821,32835,32838,32845,32850,32873,32881,35203,39032,39040,39043,39418,39419,39420,39421,39422,39423,39424,39425,39426,39427,39428,39429,39430,39431,39432,39433,39434,39435,39436,39437,39438,39439,39440,39441,39442,39443,39444,39445,39446,39447,39448,39449,39450,39451,39452,39453,39454,39455,39456,39457,39458,39459,39460,39461,39462,39463,39464,39465,39466,39467,39468,39469,39470,39471,39472,39473,39474,39475,39476,39477,39478,39479,39480,39481,39482,39483,39484,39485,39486,39487,39488,39489,39490,39491,39492,39493,39494,39495,39496,39497,39498,39499,39500,39501,39502,39503,39504,39505,39506,39507,39508,39509,39510,39511,39512,39513,39049,39052,39053,39055,39060,39066,39067,39070,39071,39073,39074,39077,39078,34381,34388,34412,34414,34431,34426,34428,34427,34472,34445,34443,34476,34461,34471,34467,34474,34451,34473,34486,34500,34485,34510,34480,34490,34481,34479,34505,34511,34484,34537,34545,34546,34541,34547,34512,34579,34526,34548,34527,34520,34513,34563,34567,34552,34568,34570,34573,34569,34595,34619,34590,34597,34606,34586,34622,34632,34612,34609,34601,34615,34623,34690,34594,34685,34686,34683,34656,34672,34636,34670,34699,34643,34659,34684,34660,34649,34661,34707,34735,34728,34770,39514,39515,39516,39517,39518,39519,39520,39521,39522,39523,39524,39525,39526,39527,39528,39529,39530,39531,39538,39555,39561,39565,39566,39572,39573,39577,39590,39593,39594,39595,39596,39597,39598,39599,39602,39603,39604,39605,39609,39611,39613,39614,39615,39619,39620,39622,39623,39624,39625,39626,39629,39630,39631,39632,39634,39636,39637,39638,39639,39641,39642,39643,39644,39645,39646,39648,39650,39651,39652,39653,39655,39656,39657,39658,39660,39662,39664,39665,39666,39667,39668,39669,39670,39671,39672,39674,39676,39677,39678,39679,39680,39681,39682,39684,39685,39686,34758,34696,34693,34733,34711,34691,34731,34789,34732,34741,34739,34763,34771,34749,34769,34752,34762,34779,34794,34784,34798,34838,34835,34814,34826,34843,34849,34873,34876,32566,32578,32580,32581,33296,31482,31485,31496,31491,31492,31509,31498,31531,31503,31559,31544,31530,31513,31534,31537,31520,31525,31524,31539,31550,31518,31576,31578,31557,31605,31564,31581,31584,31598,31611,31586,31602,31601,31632,31654,31655,31672,31660,31645,31656,31621,31658,31644,31650,31659,31668,31697,31681,31692,31709,31706,31717,31718,31722,31756,31742,31740,31759,31766,31755,39687,39689,39690,39691,39692,39693,39694,39696,39697,39698,39700,39701,39702,39703,39704,39705,39706,39707,39708,39709,39710,39712,39713,39714,39716,39717,39718,39719,39720,39721,39722,39723,39724,39725,39726,39728,39729,39731,39732,39733,39734,39735,39736,39737,39738,39741,39742,39743,39744,39750,39754,39755,39756,39758,39760,39762,39763,39765,39766,39767,39768,39769,39770,39771,39772,39773,39774,39775,39776,39777,39778,39779,39780,39781,39782,39783,39784,39785,39786,39787,39788,39789,39790,39791,39792,39793,39794,39795,39796,39797,39798,39799,39800,39801,39802,39803,31775,31786,31782,31800,31809,31808,33278,33281,33282,33284,33260,34884,33313,33314,33315,33325,33327,33320,33323,33336,33339,33331,33332,33342,33348,33353,33355,33359,33370,33375,33384,34942,34949,34952,35032,35039,35166,32669,32671,32679,32687,32688,32690,31868,25929,31889,31901,31900,31902,31906,31922,31932,31933,31937,31943,31948,31949,31944,31941,31959,31976,33390,26280,32703,32718,32725,32741,32737,32742,32745,32750,32755,31992,32119,32166,32174,32327,32411,40632,40628,36211,36228,36244,36241,36273,36199,36205,35911,35913,37194,37200,37198,37199,37220,39804,39805,39806,39807,39808,39809,39810,39811,39812,39813,39814,39815,39816,39817,39818,39819,39820,39821,39822,39823,39824,39825,39826,39827,39828,39829,39830,39831,39832,39833,39834,39835,39836,39837,39838,39839,39840,39841,39842,39843,39844,39845,39846,39847,39848,39849,39850,39851,39852,39853,39854,39855,39856,39857,39858,39859,39860,39861,39862,39863,39864,39865,39866,39867,39868,39869,39870,39871,39872,39873,39874,39875,39876,39877,39878,39879,39880,39881,39882,39883,39884,39885,39886,39887,39888,39889,39890,39891,39892,39893,39894,39895,39896,39897,39898,39899,37218,37217,37232,37225,37231,37245,37246,37234,37236,37241,37260,37253,37264,37261,37265,37282,37283,37290,37293,37294,37295,37301,37300,37306,35925,40574,36280,36331,36357,36441,36457,36277,36287,36284,36282,36292,36310,36311,36314,36318,36302,36303,36315,36294,36332,36343,36344,36323,36345,36347,36324,36361,36349,36372,36381,36383,36396,36398,36387,36399,36410,36416,36409,36405,36413,36401,36425,36417,36418,36433,36434,36426,36464,36470,36476,36463,36468,36485,36495,36500,36496,36508,36510,35960,35970,35978,35973,35992,35988,26011,35286,35294,35290,35292,39900,39901,39902,39903,39904,39905,39906,39907,39908,39909,39910,39911,39912,39913,39914,39915,39916,39917,39918,39919,39920,39921,39922,39923,39924,39925,39926,39927,39928,39929,39930,39931,39932,39933,39934,39935,39936,39937,39938,39939,39940,39941,39942,39943,39944,39945,39946,39947,39948,39949,39950,39951,39952,39953,39954,39955,39956,39957,39958,39959,39960,39961,39962,39963,39964,39965,39966,39967,39968,39969,39970,39971,39972,39973,39974,39975,39976,39977,39978,39979,39980,39981,39982,39983,39984,39985,39986,39987,39988,39989,39990,39991,39992,39993,39994,39995,35301,35307,35311,35390,35622,38739,38633,38643,38639,38662,38657,38664,38671,38670,38698,38701,38704,38718,40832,40835,40837,40838,40839,40840,40841,40842,40844,40702,40715,40717,38585,38588,38589,38606,38610,30655,38624,37518,37550,37576,37694,37738,37834,37775,37950,37995,40063,40066,40069,40070,40071,40072,31267,40075,40078,40080,40081,40082,40084,40085,40090,40091,40094,40095,40096,40097,40098,40099,40101,40102,40103,40104,40105,40107,40109,40110,40112,40113,40114,40115,40116,40117,40118,40119,40122,40123,40124,40125,40132,40133,40134,40135,40138,40139,39996,39997,39998,39999,40000,40001,40002,40003,40004,40005,40006,40007,40008,40009,40010,40011,40012,40013,40014,40015,40016,40017,40018,40019,40020,40021,40022,40023,40024,40025,40026,40027,40028,40029,40030,40031,40032,40033,40034,40035,40036,40037,40038,40039,40040,40041,40042,40043,40044,40045,40046,40047,40048,40049,40050,40051,40052,40053,40054,40055,40056,40057,40058,40059,40061,40062,40064,40067,40068,40073,40074,40076,40079,40083,40086,40087,40088,40089,40093,40106,40108,40111,40121,40126,40127,40128,40129,40130,40136,40137,40145,40146,40154,40155,40160,40161,40140,40141,40142,40143,40144,40147,40148,40149,40151,40152,40153,40156,40157,40159,40162,38780,38789,38801,38802,38804,38831,38827,38819,38834,38836,39601,39600,39607,40536,39606,39610,39612,39617,39616,39621,39618,39627,39628,39633,39749,39747,39751,39753,39752,39757,39761,39144,39181,39214,39253,39252,39647,39649,39654,39663,39659,39675,39661,39673,39688,39695,39699,39711,39715,40637,40638,32315,40578,40583,40584,40587,40594,37846,40605,40607,40667,40668,40669,40672,40671,40674,40681,40679,40677,40682,40687,40738,40748,40751,40761,40759,40765,40766,40772,40163,40164,40165,40166,40167,40168,40169,40170,40171,40172,40173,40174,40175,40176,40177,40178,40179,40180,40181,40182,40183,40184,40185,40186,40187,40188,40189,40190,40191,40192,40193,40194,40195,40196,40197,40198,40199,40200,40201,40202,40203,40204,40205,40206,40207,40208,40209,40210,40211,40212,40213,40214,40215,40216,40217,40218,40219,40220,40221,40222,40223,40224,40225,40226,40227,40228,40229,40230,40231,40232,40233,40234,40235,40236,40237,40238,40239,40240,40241,40242,40243,40244,40245,40246,40247,40248,40249,40250,40251,40252,40253,40254,40255,40256,40257,40258,57908,57909,57910,57911,57912,57913,57914,57915,57916,57917,57918,57919,57920,57921,57922,57923,57924,57925,57926,57927,57928,57929,57930,57931,57932,57933,57934,57935,57936,57937,57938,57939,57940,57941,57942,57943,57944,57945,57946,57947,57948,57949,57950,57951,57952,57953,57954,57955,57956,57957,57958,57959,57960,57961,57962,57963,57964,57965,57966,57967,57968,57969,57970,57971,57972,57973,57974,57975,57976,57977,57978,57979,57980,57981,57982,57983,57984,57985,57986,57987,57988,57989,57990,57991,57992,57993,57994,57995,57996,57997,57998,57999,58000,58001,40259,40260,40261,40262,40263,40264,40265,40266,40267,40268,40269,40270,40271,40272,40273,40274,40275,40276,40277,40278,40279,40280,40281,40282,40283,40284,40285,40286,40287,40288,40289,40290,40291,40292,40293,40294,40295,40296,40297,40298,40299,40300,40301,40302,40303,40304,40305,40306,40307,40308,40309,40310,40311,40312,40313,40314,40315,40316,40317,40318,40319,40320,40321,40322,40323,40324,40325,40326,40327,40328,40329,40330,40331,40332,40333,40334,40335,40336,40337,40338,40339,40340,40341,40342,40343,40344,40345,40346,40347,40348,40349,40350,40351,40352,40353,40354,58002,58003,58004,58005,58006,58007,58008,58009,58010,58011,58012,58013,58014,58015,58016,58017,58018,58019,58020,58021,58022,58023,58024,58025,58026,58027,58028,58029,58030,58031,58032,58033,58034,58035,58036,58037,58038,58039,58040,58041,58042,58043,58044,58045,58046,58047,58048,58049,58050,58051,58052,58053,58054,58055,58056,58057,58058,58059,58060,58061,58062,58063,58064,58065,58066,58067,58068,58069,58070,58071,58072,58073,58074,58075,58076,58077,58078,58079,58080,58081,58082,58083,58084,58085,58086,58087,58088,58089,58090,58091,58092,58093,58094,58095,40355,40356,40357,40358,40359,40360,40361,40362,40363,40364,40365,40366,40367,40368,40369,40370,40371,40372,40373,40374,40375,40376,40377,40378,40379,40380,40381,40382,40383,40384,40385,40386,40387,40388,40389,40390,40391,40392,40393,40394,40395,40396,40397,40398,40399,40400,40401,40402,40403,40404,40405,40406,40407,40408,40409,40410,40411,40412,40413,40414,40415,40416,40417,40418,40419,40420,40421,40422,40423,40424,40425,40426,40427,40428,40429,40430,40431,40432,40433,40434,40435,40436,40437,40438,40439,40440,40441,40442,40443,40444,40445,40446,40447,40448,40449,40450,58096,58097,58098,58099,58100,58101,58102,58103,58104,58105,58106,58107,58108,58109,58110,58111,58112,58113,58114,58115,58116,58117,58118,58119,58120,58121,58122,58123,58124,58125,58126,58127,58128,58129,58130,58131,58132,58133,58134,58135,58136,58137,58138,58139,58140,58141,58142,58143,58144,58145,58146,58147,58148,58149,58150,58151,58152,58153,58154,58155,58156,58157,58158,58159,58160,58161,58162,58163,58164,58165,58166,58167,58168,58169,58170,58171,58172,58173,58174,58175,58176,58177,58178,58179,58180,58181,58182,58183,58184,58185,58186,58187,58188,58189,40451,40452,40453,40454,40455,40456,40457,40458,40459,40460,40461,40462,40463,40464,40465,40466,40467,40468,40469,40470,40471,40472,40473,40474,40475,40476,40477,40478,40484,40487,40494,40496,40500,40507,40508,40512,40525,40528,40530,40531,40532,40534,40537,40541,40543,40544,40545,40546,40549,40558,40559,40562,40564,40565,40566,40567,40568,40569,40570,40571,40572,40573,40576,40577,40579,40580,40581,40582,40585,40586,40588,40589,40590,40591,40592,40593,40596,40597,40598,40599,40600,40601,40602,40603,40604,40606,40608,40609,40610,40611,40612,40613,40615,40616,40617,40618,58190,58191,58192,58193,58194,58195,58196,58197,58198,58199,58200,58201,58202,58203,58204,58205,58206,58207,58208,58209,58210,58211,58212,58213,58214,58215,58216,58217,58218,58219,58220,58221,58222,58223,58224,58225,58226,58227,58228,58229,58230,58231,58232,58233,58234,58235,58236,58237,58238,58239,58240,58241,58242,58243,58244,58245,58246,58247,58248,58249,58250,58251,58252,58253,58254,58255,58256,58257,58258,58259,58260,58261,58262,58263,58264,58265,58266,58267,58268,58269,58270,58271,58272,58273,58274,58275,58276,58277,58278,58279,58280,58281,58282,58283,40619,40620,40621,40622,40623,40624,40625,40626,40627,40629,40630,40631,40633,40634,40636,40639,40640,40641,40642,40643,40645,40646,40647,40648,40650,40651,40652,40656,40658,40659,40661,40662,40663,40665,40666,40670,40673,40675,40676,40678,40680,40683,40684,40685,40686,40688,40689,40690,40691,40692,40693,40694,40695,40696,40698,40701,40703,40704,40705,40706,40707,40708,40709,40710,40711,40712,40713,40714,40716,40719,40721,40722,40724,40725,40726,40728,40730,40731,40732,40733,40734,40735,40737,40739,40740,40741,40742,40743,40744,40745,40746,40747,40749,40750,40752,40753,58284,58285,58286,58287,58288,58289,58290,58291,58292,58293,58294,58295,58296,58297,58298,58299,58300,58301,58302,58303,58304,58305,58306,58307,58308,58309,58310,58311,58312,58313,58314,58315,58316,58317,58318,58319,58320,58321,58322,58323,58324,58325,58326,58327,58328,58329,58330,58331,58332,58333,58334,58335,58336,58337,58338,58339,58340,58341,58342,58343,58344,58345,58346,58347,58348,58349,58350,58351,58352,58353,58354,58355,58356,58357,58358,58359,58360,58361,58362,58363,58364,58365,58366,58367,58368,58369,58370,58371,58372,58373,58374,58375,58376,58377,40754,40755,40756,40757,40758,40760,40762,40764,40767,40768,40769,40770,40771,40773,40774,40775,40776,40777,40778,40779,40780,40781,40782,40783,40786,40787,40788,40789,40790,40791,40792,40793,40794,40795,40796,40797,40798,40799,40800,40801,40802,40803,40804,40805,40806,40807,40808,40809,40810,40811,40812,40813,40814,40815,40816,40817,40818,40819,40820,40821,40822,40823,40824,40825,40826,40827,40828,40829,40830,40833,40834,40845,40846,40847,40848,40849,40850,40851,40852,40853,40854,40855,40856,40860,40861,40862,40865,40866,40867,40868,40869,63788,63865,63893,63975,63985,58378,58379,58380,58381,58382,58383,58384,58385,58386,58387,58388,58389,58390,58391,58392,58393,58394,58395,58396,58397,58398,58399,58400,58401,58402,58403,58404,58405,58406,58407,58408,58409,58410,58411,58412,58413,58414,58415,58416,58417,58418,58419,58420,58421,58422,58423,58424,58425,58426,58427,58428,58429,58430,58431,58432,58433,58434,58435,58436,58437,58438,58439,58440,58441,58442,58443,58444,58445,58446,58447,58448,58449,58450,58451,58452,58453,58454,58455,58456,58457,58458,58459,58460,58461,58462,58463,58464,58465,58466,58467,58468,58469,58470,58471,64012,64013,64014,64015,64017,64019,64020,64024,64031,64032,64033,64035,64036,64039,64040,64041,11905,59414,59415,59416,11908,13427,13383,11912,11915,59422,13726,13850,13838,11916,11927,14702,14616,59430,14799,14815,14963,14800,59435,59436,15182,15470,15584,11943,59441,59442,11946,16470,16735,11950,17207,11955,11958,11959,59451,17329,17324,11963,17373,17622,18017,17996,59459,18211,18217,18300,18317,11978,18759,18810,18813,18818,18819,18821,18822,18847,18843,18871,18870,59476,59477,19619,19615,19616,19617,19575,19618,19731,19732,19733,19734,19735,19736,19737,19886,59492,58472,58473,58474,58475,58476,58477,58478,58479,58480,58481,58482,58483,58484,58485,58486,58487,58488,58489,58490,58491,58492,58493,58494,58495,58496,58497,58498,58499,58500,58501,58502,58503,58504,58505,58506,58507,58508,58509,58510,58511,58512,58513,58514,58515,58516,58517,58518,58519,58520,58521,58522,58523,58524,58525,58526,58527,58528,58529,58530,58531,58532,58533,58534,58535,58536,58537,58538,58539,58540,58541,58542,58543,58544,58545,58546,58547,58548,58549,58550,58551,58552,58553,58554,58555,58556,58557,58558,58559,58560,58561,58562,58563,58564,58565],
  4339. "gb18030-ranges":[[0,128],[36,165],[38,169],[45,178],[50,184],[81,216],[89,226],[95,235],[96,238],[100,244],[103,248],[104,251],[105,253],[109,258],[126,276],[133,284],[148,300],[172,325],[175,329],[179,334],[208,364],[306,463],[307,465],[308,467],[309,469],[310,471],[311,473],[312,475],[313,477],[341,506],[428,594],[443,610],[544,712],[545,716],[558,730],[741,930],[742,938],[749,962],[750,970],[805,1026],[819,1104],[820,1106],[7922,8209],[7924,8215],[7925,8218],[7927,8222],[7934,8231],[7943,8241],[7944,8244],[7945,8246],[7950,8252],[8062,8365],[8148,8452],[8149,8454],[8152,8458],[8164,8471],[8174,8482],[8236,8556],[8240,8570],[8262,8596],[8264,8602],[8374,8713],[8380,8720],[8381,8722],[8384,8726],[8388,8731],[8390,8737],[8392,8740],[8393,8742],[8394,8748],[8396,8751],[8401,8760],[8406,8766],[8416,8777],[8419,8781],[8424,8787],[8437,8802],[8439,8808],[8445,8816],[8482,8854],[8485,8858],[8496,8870],[8521,8896],[8603,8979],[8936,9322],[8946,9372],[9046,9548],[9050,9588],[9063,9616],[9066,9622],[9076,9634],[9092,9652],[9100,9662],[9108,9672],[9111,9676],[9113,9680],[9131,9702],[9162,9735],[9164,9738],[9218,9793],[9219,9795],[11329,11906],[11331,11909],[11334,11913],[11336,11917],[11346,11928],[11361,11944],[11363,11947],[11366,11951],[11370,11956],[11372,11960],[11375,11964],[11389,11979],[11682,12284],[11686,12292],[11687,12312],[11692,12319],[11694,12330],[11714,12351],[11716,12436],[11723,12447],[11725,12535],[11730,12543],[11736,12586],[11982,12842],[11989,12850],[12102,12964],[12336,13200],[12348,13215],[12350,13218],[12384,13253],[12393,13263],[12395,13267],[12397,13270],[12510,13384],[12553,13428],[12851,13727],[12962,13839],[12973,13851],[13738,14617],[13823,14703],[13919,14801],[13933,14816],[14080,14964],[14298,15183],[14585,15471],[14698,15585],[15583,16471],[15847,16736],[16318,17208],[16434,17325],[16438,17330],[16481,17374],[16729,17623],[17102,17997],[17122,18018],[17315,18212],[17320,18218],[17402,18301],[17418,18318],[17859,18760],[17909,18811],[17911,18814],[17915,18820],[17916,18823],[17936,18844],[17939,18848],[17961,18872],[18664,19576],[18703,19620],[18814,19738],[18962,19887],[19043,40870],[33469,59244],[33470,59336],[33471,59367],[33484,59413],[33485,59417],[33490,59423],[33497,59431],[33501,59437],[33505,59443],[33513,59452],[33520,59460],[33536,59478],[33550,59493],[37845,63789],[37921,63866],[37948,63894],[38029,63976],[38038,63986],[38064,64016],[38065,64018],[38066,64021],[38069,64025],[38075,64034],[38076,64037],[38078,64042],[39108,65074],[39109,65093],[39113,65107],[39114,65112],[39115,65127],[39116,65132],[39265,65375],[39394,65510],[189000,65536]],
  4340. "jis0208":[12288,12289,12290,65292,65294,12539,65306,65307,65311,65281,12443,12444,180,65344,168,65342,65507,65343,12541,12542,12445,12446,12291,20189,12293,12294,12295,12540,8213,8208,65295,65340,65374,8741,65372,8230,8229,8216,8217,8220,8221,65288,65289,12308,12309,65339,65341,65371,65373,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,65291,65293,177,215,247,65309,8800,65308,65310,8806,8807,8734,8756,9794,9792,176,8242,8243,8451,65509,65284,65504,65505,65285,65283,65286,65290,65312,167,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8251,12306,8594,8592,8593,8595,12307,null,null,null,null,null,null,null,null,null,null,null,8712,8715,8838,8839,8834,8835,8746,8745,null,null,null,null,null,null,null,null,8743,8744,65506,8658,8660,8704,8707,null,null,null,null,null,null,null,null,null,null,null,8736,8869,8978,8706,8711,8801,8786,8810,8811,8730,8765,8733,8757,8747,8748,null,null,null,null,null,null,null,8491,8240,9839,9837,9834,8224,8225,182,null,null,null,null,9711,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,null,null,null,null,null,null,null,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,null,null,null,null,null,null,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,null,null,null,null,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,null,null,null,null,null,null,null,null,null,null,null,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,null,null,null,null,null,null,null,null,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,null,null,null,null,null,null,null,null,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,null,null,null,null,null,null,null,null,null,null,null,null,null,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,null,13129,13076,13090,13133,13080,13095,13059,13110,13137,13143,13069,13094,13091,13099,13130,13115,13212,13213,13214,13198,13199,13252,13217,null,null,null,null,null,null,null,null,13179,12317,12319,8470,13261,8481,12964,12965,12966,12967,12968,12849,12850,12857,13182,13181,13180,8786,8801,8747,8750,8721,8730,8869,8736,8735,8895,8757,8745,8746,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20124,21782,23043,38463,21696,24859,25384,23030,36898,33909,33564,31312,24746,25569,28197,26093,33894,33446,39925,26771,22311,26017,25201,23451,22992,34427,39156,32098,32190,39822,25110,31903,34999,23433,24245,25353,26263,26696,38343,38797,26447,20197,20234,20301,20381,20553,22258,22839,22996,23041,23561,24799,24847,24944,26131,26885,28858,30031,30064,31227,32173,32239,32963,33806,34915,35586,36949,36986,21307,20117,20133,22495,32946,37057,30959,19968,22769,28322,36920,31282,33576,33419,39983,20801,21360,21693,21729,22240,23035,24341,39154,28139,32996,34093,38498,38512,38560,38907,21515,21491,23431,28879,32701,36802,38632,21359,40284,31418,19985,30867,33276,28198,22040,21764,27421,34074,39995,23013,21417,28006,29916,38287,22082,20113,36939,38642,33615,39180,21473,21942,23344,24433,26144,26355,26628,27704,27891,27945,29787,30408,31310,38964,33521,34907,35424,37613,28082,30123,30410,39365,24742,35585,36234,38322,27022,21421,20870,22290,22576,22852,23476,24310,24616,25513,25588,27839,28436,28814,28948,29017,29141,29503,32257,33398,33489,34199,36960,37467,40219,22633,26044,27738,29989,20985,22830,22885,24448,24540,25276,26106,27178,27431,27572,29579,32705,35158,40236,40206,40644,23713,27798,33659,20740,23627,25014,33222,26742,29281,20057,20474,21368,24681,28201,31311,38899,19979,21270,20206,20309,20285,20385,20339,21152,21487,22025,22799,23233,23478,23521,31185,26247,26524,26550,27468,27827,28779,29634,31117,31166,31292,31623,33457,33499,33540,33655,33775,33747,34662,35506,22057,36008,36838,36942,38686,34442,20420,23784,25105,29273,30011,33253,33469,34558,36032,38597,39187,39381,20171,20250,35299,22238,22602,22730,24315,24555,24618,24724,24674,25040,25106,25296,25913,39745,26214,26800,28023,28784,30028,30342,32117,33445,34809,38283,38542,35997,20977,21182,22806,21683,23475,23830,24936,27010,28079,30861,33995,34903,35442,37799,39608,28012,39336,34521,22435,26623,34510,37390,21123,22151,21508,24275,25313,25785,26684,26680,27579,29554,30906,31339,35226,35282,36203,36611,37101,38307,38548,38761,23398,23731,27005,38989,38990,25499,31520,27179,27263,26806,39949,28511,21106,21917,24688,25324,27963,28167,28369,33883,35088,36676,19988,39993,21494,26907,27194,38788,26666,20828,31427,33970,37340,37772,22107,40232,26658,33541,33841,31909,21000,33477,29926,20094,20355,20896,23506,21002,21208,21223,24059,21914,22570,23014,23436,23448,23515,24178,24185,24739,24863,24931,25022,25563,25954,26577,26707,26874,27454,27475,27735,28450,28567,28485,29872,29976,30435,30475,31487,31649,31777,32233,32566,32752,32925,33382,33694,35251,35532,36011,36996,37969,38291,38289,38306,38501,38867,39208,33304,20024,21547,23736,24012,29609,30284,30524,23721,32747,36107,38593,38929,38996,39000,20225,20238,21361,21916,22120,22522,22855,23305,23492,23696,24076,24190,24524,25582,26426,26071,26082,26399,26827,26820,27231,24112,27589,27671,27773,30079,31048,23395,31232,32000,24509,35215,35352,36020,36215,36556,36637,39138,39438,39740,20096,20605,20736,22931,23452,25135,25216,25836,27450,29344,30097,31047,32681,34811,35516,35696,25516,33738,38816,21513,21507,21931,26708,27224,35440,30759,26485,40653,21364,23458,33050,34384,36870,19992,20037,20167,20241,21450,21560,23470,24339,24613,25937,26429,27714,27762,27875,28792,29699,31350,31406,31496,32026,31998,32102,26087,29275,21435,23621,24040,25298,25312,25369,28192,34394,35377,36317,37624,28417,31142,39770,20136,20139,20140,20379,20384,20689,20807,31478,20849,20982,21332,21281,21375,21483,21932,22659,23777,24375,24394,24623,24656,24685,25375,25945,27211,27841,29378,29421,30703,33016,33029,33288,34126,37111,37857,38911,39255,39514,20208,20957,23597,26241,26989,23616,26354,26997,29577,26704,31873,20677,21220,22343,24062,37670,26020,27427,27453,29748,31105,31165,31563,32202,33465,33740,34943,35167,35641,36817,37329,21535,37504,20061,20534,21477,21306,29399,29590,30697,33510,36527,39366,39368,39378,20855,24858,34398,21936,31354,20598,23507,36935,38533,20018,27355,37351,23633,23624,25496,31391,27795,38772,36705,31402,29066,38536,31874,26647,32368,26705,37740,21234,21531,34219,35347,32676,36557,37089,21350,34952,31041,20418,20670,21009,20804,21843,22317,29674,22411,22865,24418,24452,24693,24950,24935,25001,25522,25658,25964,26223,26690,28179,30054,31293,31995,32076,32153,32331,32619,33550,33610,34509,35336,35427,35686,36605,38938,40335,33464,36814,39912,21127,25119,25731,28608,38553,26689,20625,27424,27770,28500,31348,32080,34880,35363,26376,20214,20537,20518,20581,20860,21048,21091,21927,22287,22533,23244,24314,25010,25080,25331,25458,26908,27177,29309,29356,29486,30740,30831,32121,30476,32937,35211,35609,36066,36562,36963,37749,38522,38997,39443,40568,20803,21407,21427,24187,24358,28187,28304,29572,29694,32067,33335,35328,35578,38480,20046,20491,21476,21628,22266,22993,23396,24049,24235,24359,25144,25925,26543,28246,29392,31946,34996,32929,32993,33776,34382,35463,36328,37431,38599,39015,40723,20116,20114,20237,21320,21577,21566,23087,24460,24481,24735,26791,27278,29786,30849,35486,35492,35703,37264,20062,39881,20132,20348,20399,20505,20502,20809,20844,21151,21177,21246,21402,21475,21521,21518,21897,22353,22434,22909,23380,23389,23439,24037,24039,24055,24184,24195,24218,24247,24344,24658,24908,25239,25304,25511,25915,26114,26179,26356,26477,26657,26775,27083,27743,27946,28009,28207,28317,30002,30343,30828,31295,31968,32005,32024,32094,32177,32789,32771,32943,32945,33108,33167,33322,33618,34892,34913,35611,36002,36092,37066,37237,37489,30783,37628,38308,38477,38917,39321,39640,40251,21083,21163,21495,21512,22741,25335,28640,35946,36703,40633,20811,21051,21578,22269,31296,37239,40288,40658,29508,28425,33136,29969,24573,24794,39592,29403,36796,27492,38915,20170,22256,22372,22718,23130,24680,25031,26127,26118,26681,26801,28151,30165,32058,33390,39746,20123,20304,21449,21766,23919,24038,24046,26619,27801,29811,30722,35408,37782,35039,22352,24231,25387,20661,20652,20877,26368,21705,22622,22971,23472,24425,25165,25505,26685,27507,28168,28797,37319,29312,30741,30758,31085,25998,32048,33756,35009,36617,38555,21092,22312,26448,32618,36001,20916,22338,38442,22586,27018,32948,21682,23822,22524,30869,40442,20316,21066,21643,25662,26152,26388,26613,31364,31574,32034,37679,26716,39853,31545,21273,20874,21047,23519,25334,25774,25830,26413,27578,34217,38609,30352,39894,25420,37638,39851,30399,26194,19977,20632,21442,23665,24808,25746,25955,26719,29158,29642,29987,31639,32386,34453,35715,36059,37240,39184,26028,26283,27531,20181,20180,20282,20351,21050,21496,21490,21987,22235,22763,22987,22985,23039,23376,23629,24066,24107,24535,24605,25351,25903,23388,26031,26045,26088,26525,27490,27515,27663,29509,31049,31169,31992,32025,32043,32930,33026,33267,35222,35422,35433,35430,35468,35566,36039,36060,38604,39164,27503,20107,20284,20365,20816,23383,23546,24904,25345,26178,27425,28363,27835,29246,29885,30164,30913,31034,32780,32819,33258,33940,36766,27728,40575,24335,35672,40235,31482,36600,23437,38635,19971,21489,22519,22833,23241,23460,24713,28287,28422,30142,36074,23455,34048,31712,20594,26612,33437,23649,34122,32286,33294,20889,23556,25448,36198,26012,29038,31038,32023,32773,35613,36554,36974,34503,37034,20511,21242,23610,26451,28796,29237,37196,37320,37675,33509,23490,24369,24825,20027,21462,23432,25163,26417,27530,29417,29664,31278,33131,36259,37202,39318,20754,21463,21610,23551,25480,27193,32172,38656,22234,21454,21608,23447,23601,24030,20462,24833,25342,27954,31168,31179,32066,32333,32722,33261,33311,33936,34886,35186,35728,36468,36655,36913,37195,37228,38598,37276,20160,20303,20805,21313,24467,25102,26580,27713,28171,29539,32294,37325,37507,21460,22809,23487,28113,31069,32302,31899,22654,29087,20986,34899,36848,20426,23803,26149,30636,31459,33308,39423,20934,24490,26092,26991,27529,28147,28310,28516,30462,32020,24033,36981,37255,38918,20966,21021,25152,26257,26329,28186,24246,32210,32626,26360,34223,34295,35576,21161,21465,22899,24207,24464,24661,37604,38500,20663,20767,21213,21280,21319,21484,21736,21830,21809,22039,22888,22974,23100,23477,23558,23567,23569,23578,24196,24202,24288,24432,25215,25220,25307,25484,25463,26119,26124,26157,26230,26494,26786,27167,27189,27836,28040,28169,28248,28988,28966,29031,30151,30465,30813,30977,31077,31216,31456,31505,31911,32057,32918,33750,33931,34121,34909,35059,35359,35388,35412,35443,35937,36062,37284,37478,37758,37912,38556,38808,19978,19976,19998,20055,20887,21104,22478,22580,22732,23330,24120,24773,25854,26465,26454,27972,29366,30067,31331,33976,35698,37304,37664,22065,22516,39166,25325,26893,27542,29165,32340,32887,33394,35302,39135,34645,36785,23611,20280,20449,20405,21767,23072,23517,23529,24515,24910,25391,26032,26187,26862,27035,28024,28145,30003,30137,30495,31070,31206,32051,33251,33455,34218,35242,35386,36523,36763,36914,37341,38663,20154,20161,20995,22645,22764,23563,29978,23613,33102,35338,36805,38499,38765,31525,35535,38920,37218,22259,21416,36887,21561,22402,24101,25512,27700,28810,30561,31883,32736,34928,36930,37204,37648,37656,38543,29790,39620,23815,23913,25968,26530,36264,38619,25454,26441,26905,33733,38935,38592,35070,28548,25722,23544,19990,28716,30045,26159,20932,21046,21218,22995,24449,24615,25104,25919,25972,26143,26228,26866,26646,27491,28165,29298,29983,30427,31934,32854,22768,35069,35199,35488,35475,35531,36893,37266,38738,38745,25993,31246,33030,38587,24109,24796,25114,26021,26132,26512,30707,31309,31821,32318,33034,36012,36196,36321,36447,30889,20999,25305,25509,25666,25240,35373,31363,31680,35500,38634,32118,33292,34633,20185,20808,21315,21344,23459,23554,23574,24029,25126,25159,25776,26643,26676,27849,27973,27927,26579,28508,29006,29053,26059,31359,31661,32218,32330,32680,33146,33307,33337,34214,35438,36046,36341,36984,36983,37549,37521,38275,39854,21069,21892,28472,28982,20840,31109,32341,33203,31950,22092,22609,23720,25514,26366,26365,26970,29401,30095,30094,30990,31062,31199,31895,32032,32068,34311,35380,38459,36961,40736,20711,21109,21452,21474,20489,21930,22766,22863,29245,23435,23652,21277,24803,24819,25436,25475,25407,25531,25805,26089,26361,24035,27085,27133,28437,29157,20105,30185,30456,31379,31967,32207,32156,32865,33609,33624,33900,33980,34299,35013,36208,36865,36973,37783,38684,39442,20687,22679,24974,33235,34101,36104,36896,20419,20596,21063,21363,24687,25417,26463,28204,36275,36895,20439,23646,36042,26063,32154,21330,34966,20854,25539,23384,23403,23562,25613,26449,36956,20182,22810,22826,27760,35409,21822,22549,22949,24816,25171,26561,33333,26965,38464,39364,39464,20307,22534,23550,32784,23729,24111,24453,24608,24907,25140,26367,27888,28382,32974,33151,33492,34955,36024,36864,36910,38538,40667,39899,20195,21488,22823,31532,37261,38988,40441,28381,28711,21331,21828,23429,25176,25246,25299,27810,28655,29730,35351,37944,28609,35582,33592,20967,34552,21482,21481,20294,36948,36784,22890,33073,24061,31466,36799,26842,35895,29432,40008,27197,35504,20025,21336,22022,22374,25285,25506,26086,27470,28129,28251,28845,30701,31471,31658,32187,32829,32966,34507,35477,37723,22243,22727,24382,26029,26262,27264,27573,30007,35527,20516,30693,22320,24347,24677,26234,27744,30196,31258,32622,33268,34584,36933,39347,31689,30044,31481,31569,33988,36880,31209,31378,33590,23265,30528,20013,20210,23449,24544,25277,26172,26609,27880,34411,34935,35387,37198,37619,39376,27159,28710,29482,33511,33879,36015,19969,20806,20939,21899,23541,24086,24115,24193,24340,24373,24427,24500,25074,25361,26274,26397,28526,29266,30010,30522,32884,33081,33144,34678,35519,35548,36229,36339,37530,38263,38914,40165,21189,25431,30452,26389,27784,29645,36035,37806,38515,27941,22684,26894,27084,36861,37786,30171,36890,22618,26626,25524,27131,20291,28460,26584,36795,34086,32180,37716,26943,28528,22378,22775,23340,32044,29226,21514,37347,40372,20141,20302,20572,20597,21059,35998,21576,22564,23450,24093,24213,24237,24311,24351,24716,25269,25402,25552,26799,27712,30855,31118,31243,32224,33351,35330,35558,36420,36883,37048,37165,37336,40718,27877,25688,25826,25973,28404,30340,31515,36969,37841,28346,21746,24505,25764,36685,36845,37444,20856,22635,22825,23637,24215,28155,32399,29980,36028,36578,39003,28857,20253,27583,28593,30000,38651,20814,21520,22581,22615,22956,23648,24466,26007,26460,28193,30331,33759,36077,36884,37117,37709,30757,30778,21162,24230,22303,22900,24594,20498,20826,20908,20941,20992,21776,22612,22616,22871,23445,23798,23947,24764,25237,25645,26481,26691,26812,26847,30423,28120,28271,28059,28783,29128,24403,30168,31095,31561,31572,31570,31958,32113,21040,33891,34153,34276,35342,35588,35910,36367,36867,36879,37913,38518,38957,39472,38360,20685,21205,21516,22530,23566,24999,25758,27934,30643,31461,33012,33796,36947,37509,23776,40199,21311,24471,24499,28060,29305,30563,31167,31716,27602,29420,35501,26627,27233,20984,31361,26932,23626,40182,33515,23493,37193,28702,22136,23663,24775,25958,27788,35930,36929,38931,21585,26311,37389,22856,37027,20869,20045,20970,34201,35598,28760,25466,37707,26978,39348,32260,30071,21335,26976,36575,38627,27741,20108,23612,24336,36841,21250,36049,32905,34425,24319,26085,20083,20837,22914,23615,38894,20219,22922,24525,35469,28641,31152,31074,23527,33905,29483,29105,24180,24565,25467,25754,29123,31896,20035,24316,20043,22492,22178,24745,28611,32013,33021,33075,33215,36786,35223,34468,24052,25226,25773,35207,26487,27874,27966,29750,30772,23110,32629,33453,39340,20467,24259,25309,25490,25943,26479,30403,29260,32972,32954,36649,37197,20493,22521,23186,26757,26995,29028,29437,36023,22770,36064,38506,36889,34687,31204,30695,33833,20271,21093,21338,25293,26575,27850,30333,31636,31893,33334,34180,36843,26333,28448,29190,32283,33707,39361,40614,20989,31665,30834,31672,32903,31560,27368,24161,32908,30033,30048,20843,37474,28300,30330,37271,39658,20240,32624,25244,31567,38309,40169,22138,22617,34532,38588,20276,21028,21322,21453,21467,24070,25644,26001,26495,27710,27726,29256,29359,29677,30036,32321,33324,34281,36009,31684,37318,29033,38930,39151,25405,26217,30058,30436,30928,34115,34542,21290,21329,21542,22915,24199,24444,24754,25161,25209,25259,26000,27604,27852,30130,30382,30865,31192,32203,32631,32933,34987,35513,36027,36991,38750,39131,27147,31800,20633,23614,24494,26503,27608,29749,30473,32654,40763,26570,31255,21305,30091,39661,24422,33181,33777,32920,24380,24517,30050,31558,36924,26727,23019,23195,32016,30334,35628,20469,24426,27161,27703,28418,29922,31080,34920,35413,35961,24287,25551,30149,31186,33495,37672,37618,33948,34541,39981,21697,24428,25996,27996,28693,36007,36051,38971,25935,29942,19981,20184,22496,22827,23142,23500,20904,24067,24220,24598,25206,25975,26023,26222,28014,29238,31526,33104,33178,33433,35676,36000,36070,36212,38428,38468,20398,25771,27494,33310,33889,34154,37096,23553,26963,39080,33914,34135,20239,21103,24489,24133,26381,31119,33145,35079,35206,28149,24343,25173,27832,20175,29289,39826,20998,21563,22132,22707,24996,25198,28954,22894,31881,31966,32027,38640,25991,32862,19993,20341,20853,22592,24163,24179,24330,26564,20006,34109,38281,38491,31859,38913,20731,22721,30294,30887,21029,30629,34065,31622,20559,22793,29255,31687,32232,36794,36820,36941,20415,21193,23081,24321,38829,20445,33303,37610,22275,25429,27497,29995,35036,36628,31298,21215,22675,24917,25098,26286,27597,31807,33769,20515,20472,21253,21574,22577,22857,23453,23792,23791,23849,24214,25265,25447,25918,26041,26379,27861,27873,28921,30770,32299,32990,33459,33804,34028,34562,35090,35370,35914,37030,37586,39165,40179,40300,20047,20129,20621,21078,22346,22952,24125,24536,24537,25151,26292,26395,26576,26834,20882,32033,32938,33192,35584,35980,36031,37502,38450,21536,38956,21271,20693,21340,22696,25778,26420,29287,30566,31302,37350,21187,27809,27526,22528,24140,22868,26412,32763,20961,30406,25705,30952,39764,40635,22475,22969,26151,26522,27598,21737,27097,24149,33180,26517,39850,26622,40018,26717,20134,20451,21448,25273,26411,27819,36804,20397,32365,40639,19975,24930,28288,28459,34067,21619,26410,39749,24051,31637,23724,23494,34588,28234,34001,31252,33032,22937,31885,27665,30496,21209,22818,28961,29279,30683,38695,40289,26891,23167,23064,20901,21517,21629,26126,30431,36855,37528,40180,23018,29277,28357,20813,26825,32191,32236,38754,40634,25720,27169,33538,22916,23391,27611,29467,30450,32178,32791,33945,20786,26408,40665,30446,26466,21247,39173,23588,25147,31870,36016,21839,24758,32011,38272,21249,20063,20918,22812,29242,32822,37326,24357,30690,21380,24441,32004,34220,35379,36493,38742,26611,34222,37971,24841,24840,27833,30290,35565,36664,21807,20305,20778,21191,21451,23461,24189,24736,24962,25558,26377,26586,28263,28044,29494,29495,30001,31056,35029,35480,36938,37009,37109,38596,34701,22805,20104,20313,19982,35465,36671,38928,20653,24188,22934,23481,24248,25562,25594,25793,26332,26954,27096,27915,28342,29076,29992,31407,32650,32768,33865,33993,35201,35617,36362,36965,38525,39178,24958,25233,27442,27779,28020,32716,32764,28096,32645,34746,35064,26469,33713,38972,38647,27931,32097,33853,37226,20081,21365,23888,27396,28651,34253,34349,35239,21033,21519,23653,26446,26792,29702,29827,30178,35023,35041,37324,38626,38520,24459,29575,31435,33870,25504,30053,21129,27969,28316,29705,30041,30827,31890,38534,31452,40845,20406,24942,26053,34396,20102,20142,20698,20001,20940,23534,26009,26753,28092,29471,30274,30637,31260,31975,33391,35538,36988,37327,38517,38936,21147,32209,20523,21400,26519,28107,29136,29747,33256,36650,38563,40023,40607,29792,22593,28057,32047,39006,20196,20278,20363,20919,21169,23994,24604,29618,31036,33491,37428,38583,38646,38666,40599,40802,26278,27508,21015,21155,28872,35010,24265,24651,24976,28451,29001,31806,32244,32879,34030,36899,37676,21570,39791,27347,28809,36034,36335,38706,21172,23105,24266,24324,26391,27004,27028,28010,28431,29282,29436,31725,32769,32894,34635,37070,20845,40595,31108,32907,37682,35542,20525,21644,35441,27498,36036,33031,24785,26528,40434,20121,20120,39952,35435,34241,34152,26880,28286,30871,33109,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,24332,19984,19989,20010,20017,20022,20028,20031,20034,20054,20056,20098,20101,35947,20106,33298,24333,20110,20126,20127,20128,20130,20144,20147,20150,20174,20173,20164,20166,20162,20183,20190,20205,20191,20215,20233,20314,20272,20315,20317,20311,20295,20342,20360,20367,20376,20347,20329,20336,20369,20335,20358,20374,20760,20436,20447,20430,20440,20443,20433,20442,20432,20452,20453,20506,20520,20500,20522,20517,20485,20252,20470,20513,20521,20524,20478,20463,20497,20486,20547,20551,26371,20565,20560,20552,20570,20566,20588,20600,20608,20634,20613,20660,20658,20681,20682,20659,20674,20694,20702,20709,20717,20707,20718,20729,20725,20745,20737,20738,20758,20757,20756,20762,20769,20794,20791,20796,20795,20799,20800,20818,20812,20820,20834,31480,20841,20842,20846,20864,20866,22232,20876,20873,20879,20881,20883,20885,20886,20900,20902,20898,20905,20906,20907,20915,20913,20914,20912,20917,20925,20933,20937,20955,20960,34389,20969,20973,20976,20981,20990,20996,21003,21012,21006,21031,21034,21038,21043,21049,21071,21060,21067,21068,21086,21076,21098,21108,21097,21107,21119,21117,21133,21140,21138,21105,21128,21137,36776,36775,21164,21165,21180,21173,21185,21197,21207,21214,21219,21222,39149,21216,21235,21237,21240,21241,21254,21256,30008,21261,21264,21263,21269,21274,21283,21295,21297,21299,21304,21312,21318,21317,19991,21321,21325,20950,21342,21353,21358,22808,21371,21367,21378,21398,21408,21414,21413,21422,21424,21430,21443,31762,38617,21471,26364,29166,21486,21480,21485,21498,21505,21565,21568,21548,21549,21564,21550,21558,21545,21533,21582,21647,21621,21646,21599,21617,21623,21616,21650,21627,21632,21622,21636,21648,21638,21703,21666,21688,21669,21676,21700,21704,21672,21675,21698,21668,21694,21692,21720,21733,21734,21775,21780,21757,21742,21741,21754,21730,21817,21824,21859,21836,21806,21852,21829,21846,21847,21816,21811,21853,21913,21888,21679,21898,21919,21883,21886,21912,21918,21934,21884,21891,21929,21895,21928,21978,21957,21983,21956,21980,21988,21972,22036,22007,22038,22014,22013,22043,22009,22094,22096,29151,22068,22070,22066,22072,22123,22116,22063,22124,22122,22150,22144,22154,22176,22164,22159,22181,22190,22198,22196,22210,22204,22209,22211,22208,22216,22222,22225,22227,22231,22254,22265,22272,22271,22276,22281,22280,22283,22285,22291,22296,22294,21959,22300,22310,22327,22328,22350,22331,22336,22351,22377,22464,22408,22369,22399,22409,22419,22432,22451,22436,22442,22448,22467,22470,22484,22482,22483,22538,22486,22499,22539,22553,22557,22642,22561,22626,22603,22640,27584,22610,22589,22649,22661,22713,22687,22699,22714,22750,22715,22712,22702,22725,22739,22737,22743,22745,22744,22757,22748,22756,22751,22767,22778,22777,22779,22780,22781,22786,22794,22800,22811,26790,22821,22828,22829,22834,22840,22846,31442,22869,22864,22862,22874,22872,22882,22880,22887,22892,22889,22904,22913,22941,20318,20395,22947,22962,22982,23016,23004,22925,23001,23002,23077,23071,23057,23068,23049,23066,23104,23148,23113,23093,23094,23138,23146,23194,23228,23230,23243,23234,23229,23267,23255,23270,23273,23254,23290,23291,23308,23307,23318,23346,23248,23338,23350,23358,23363,23365,23360,23377,23381,23386,23387,23397,23401,23408,23411,23413,23416,25992,23418,23424,23427,23462,23480,23491,23495,23497,23508,23504,23524,23526,23522,23518,23525,23531,23536,23542,23539,23557,23559,23560,23565,23571,23584,23586,23592,23608,23609,23617,23622,23630,23635,23632,23631,23409,23660,23662,20066,23670,23673,23692,23697,23700,22939,23723,23739,23734,23740,23735,23749,23742,23751,23769,23785,23805,23802,23789,23948,23786,23819,23829,23831,23900,23839,23835,23825,23828,23842,23834,23833,23832,23884,23890,23886,23883,23916,23923,23926,23943,23940,23938,23970,23965,23980,23982,23997,23952,23991,23996,24009,24013,24019,24018,24022,24027,24043,24050,24053,24075,24090,24089,24081,24091,24118,24119,24132,24131,24128,24142,24151,24148,24159,24162,24164,24135,24181,24182,24186,40636,24191,24224,24257,24258,24264,24272,24271,24278,24291,24285,24282,24283,24290,24289,24296,24297,24300,24305,24307,24304,24308,24312,24318,24323,24329,24413,24412,24331,24337,24342,24361,24365,24376,24385,24392,24396,24398,24367,24401,24406,24407,24409,24417,24429,24435,24439,24451,24450,24447,24458,24456,24465,24455,24478,24473,24472,24480,24488,24493,24508,24534,24571,24548,24568,24561,24541,24755,24575,24609,24672,24601,24592,24617,24590,24625,24603,24597,24619,24614,24591,24634,24666,24641,24682,24695,24671,24650,24646,24653,24675,24643,24676,24642,24684,24683,24665,24705,24717,24807,24707,24730,24708,24731,24726,24727,24722,24743,24715,24801,24760,24800,24787,24756,24560,24765,24774,24757,24792,24909,24853,24838,24822,24823,24832,24820,24826,24835,24865,24827,24817,24845,24846,24903,24894,24872,24871,24906,24895,24892,24876,24884,24893,24898,24900,24947,24951,24920,24921,24922,24939,24948,24943,24933,24945,24927,24925,24915,24949,24985,24982,24967,25004,24980,24986,24970,24977,25003,25006,25036,25034,25033,25079,25032,25027,25030,25018,25035,32633,25037,25062,25059,25078,25082,25076,25087,25085,25084,25086,25088,25096,25097,25101,25100,25108,25115,25118,25121,25130,25134,25136,25138,25139,25153,25166,25182,25187,25179,25184,25192,25212,25218,25225,25214,25234,25235,25238,25300,25219,25236,25303,25297,25275,25295,25343,25286,25812,25288,25308,25292,25290,25282,25287,25243,25289,25356,25326,25329,25383,25346,25352,25327,25333,25424,25406,25421,25628,25423,25494,25486,25472,25515,25462,25507,25487,25481,25503,25525,25451,25449,25534,25577,25536,25542,25571,25545,25554,25590,25540,25622,25652,25606,25619,25638,25654,25885,25623,25640,25615,25703,25711,25718,25678,25898,25749,25747,25765,25769,25736,25788,25818,25810,25797,25799,25787,25816,25794,25841,25831,33289,25824,25825,25260,25827,25839,25900,25846,25844,25842,25850,25856,25853,25880,25884,25861,25892,25891,25899,25908,25909,25911,25910,25912,30027,25928,25942,25941,25933,25944,25950,25949,25970,25976,25986,25987,35722,26011,26015,26027,26039,26051,26054,26049,26052,26060,26066,26075,26073,26080,26081,26097,26482,26122,26115,26107,26483,26165,26166,26164,26140,26191,26180,26185,26177,26206,26205,26212,26215,26216,26207,26210,26224,26243,26248,26254,26249,26244,26264,26269,26305,26297,26313,26302,26300,26308,26296,26326,26330,26336,26175,26342,26345,26352,26357,26359,26383,26390,26398,26406,26407,38712,26414,26431,26422,26433,26424,26423,26438,26462,26464,26457,26467,26468,26505,26480,26537,26492,26474,26508,26507,26534,26529,26501,26551,26607,26548,26604,26547,26601,26552,26596,26590,26589,26594,26606,26553,26574,26566,26599,27292,26654,26694,26665,26688,26701,26674,26702,26803,26667,26713,26723,26743,26751,26783,26767,26797,26772,26781,26779,26755,27310,26809,26740,26805,26784,26810,26895,26765,26750,26881,26826,26888,26840,26914,26918,26849,26892,26829,26836,26855,26837,26934,26898,26884,26839,26851,26917,26873,26848,26863,26920,26922,26906,26915,26913,26822,27001,26999,26972,27000,26987,26964,27006,26990,26937,26996,26941,26969,26928,26977,26974,26973,27009,26986,27058,27054,27088,27071,27073,27091,27070,27086,23528,27082,27101,27067,27075,27047,27182,27025,27040,27036,27029,27060,27102,27112,27138,27163,27135,27402,27129,27122,27111,27141,27057,27166,27117,27156,27115,27146,27154,27329,27171,27155,27204,27148,27250,27190,27256,27207,27234,27225,27238,27208,27192,27170,27280,27277,27296,27268,27298,27299,27287,34327,27323,27331,27330,27320,27315,27308,27358,27345,27359,27306,27354,27370,27387,27397,34326,27386,27410,27414,39729,27423,27448,27447,30428,27449,39150,27463,27459,27465,27472,27481,27476,27483,27487,27489,27512,27513,27519,27520,27524,27523,27533,27544,27541,27550,27556,27562,27563,27567,27570,27569,27571,27575,27580,27590,27595,27603,27615,27628,27627,27635,27631,40638,27656,27667,27668,27675,27684,27683,27742,27733,27746,27754,27778,27789,27802,27777,27803,27774,27752,27763,27794,27792,27844,27889,27859,27837,27863,27845,27869,27822,27825,27838,27834,27867,27887,27865,27882,27935,34893,27958,27947,27965,27960,27929,27957,27955,27922,27916,28003,28051,28004,27994,28025,27993,28046,28053,28644,28037,28153,28181,28170,28085,28103,28134,28088,28102,28140,28126,28108,28136,28114,28101,28154,28121,28132,28117,28138,28142,28205,28270,28206,28185,28274,28255,28222,28195,28267,28203,28278,28237,28191,28227,28218,28238,28196,28415,28189,28216,28290,28330,28312,28361,28343,28371,28349,28335,28356,28338,28372,28373,28303,28325,28354,28319,28481,28433,28748,28396,28408,28414,28479,28402,28465,28399,28466,28364,28478,28435,28407,28550,28538,28536,28545,28544,28527,28507,28659,28525,28546,28540,28504,28558,28561,28610,28518,28595,28579,28577,28580,28601,28614,28586,28639,28629,28652,28628,28632,28657,28654,28635,28681,28683,28666,28689,28673,28687,28670,28699,28698,28532,28701,28696,28703,28720,28734,28722,28753,28771,28825,28818,28847,28913,28844,28856,28851,28846,28895,28875,28893,28889,28937,28925,28956,28953,29029,29013,29064,29030,29026,29004,29014,29036,29071,29179,29060,29077,29096,29100,29143,29113,29118,29138,29129,29140,29134,29152,29164,29159,29173,29180,29177,29183,29197,29200,29211,29224,29229,29228,29232,29234,29243,29244,29247,29248,29254,29259,29272,29300,29310,29314,29313,29319,29330,29334,29346,29351,29369,29362,29379,29382,29380,29390,29394,29410,29408,29409,29433,29431,20495,29463,29450,29468,29462,29469,29492,29487,29481,29477,29502,29518,29519,40664,29527,29546,29544,29552,29560,29557,29563,29562,29640,29619,29646,29627,29632,29669,29678,29662,29858,29701,29807,29733,29688,29746,29754,29781,29759,29791,29785,29761,29788,29801,29808,29795,29802,29814,29822,29835,29854,29863,29898,29903,29908,29681,29920,29923,29927,29929,29934,29938,29936,29937,29944,29943,29956,29955,29957,29964,29966,29965,29973,29971,29982,29990,29996,30012,30020,30029,30026,30025,30043,30022,30042,30057,30052,30055,30059,30061,30072,30070,30086,30087,30068,30090,30089,30082,30100,30106,30109,30117,30115,30146,30131,30147,30133,30141,30136,30140,30129,30157,30154,30162,30169,30179,30174,30206,30207,30204,30209,30192,30202,30194,30195,30219,30221,30217,30239,30247,30240,30241,30242,30244,30260,30256,30267,30279,30280,30278,30300,30296,30305,30306,30312,30313,30314,30311,30316,30320,30322,30326,30328,30332,30336,30339,30344,30347,30350,30358,30355,30361,30362,30384,30388,30392,30393,30394,30402,30413,30422,30418,30430,30433,30437,30439,30442,34351,30459,30472,30471,30468,30505,30500,30494,30501,30502,30491,30519,30520,30535,30554,30568,30571,30555,30565,30591,30590,30585,30606,30603,30609,30624,30622,30640,30646,30649,30655,30652,30653,30651,30663,30669,30679,30682,30684,30691,30702,30716,30732,30738,31014,30752,31018,30789,30862,30836,30854,30844,30874,30860,30883,30901,30890,30895,30929,30918,30923,30932,30910,30908,30917,30922,30956,30951,30938,30973,30964,30983,30994,30993,31001,31020,31019,31040,31072,31063,31071,31066,31061,31059,31098,31103,31114,31133,31143,40779,31146,31150,31155,31161,31162,31177,31189,31207,31212,31201,31203,31240,31245,31256,31257,31264,31263,31104,31281,31291,31294,31287,31299,31319,31305,31329,31330,31337,40861,31344,31353,31357,31368,31383,31381,31384,31382,31401,31432,31408,31414,31429,31428,31423,36995,31431,31434,31437,31439,31445,31443,31449,31450,31453,31457,31458,31462,31469,31472,31490,31503,31498,31494,31539,31512,31513,31518,31541,31528,31542,31568,31610,31492,31565,31499,31564,31557,31605,31589,31604,31591,31600,31601,31596,31598,31645,31640,31647,31629,31644,31642,31627,31634,31631,31581,31641,31691,31681,31692,31695,31668,31686,31709,31721,31761,31764,31718,31717,31840,31744,31751,31763,31731,31735,31767,31757,31734,31779,31783,31786,31775,31799,31787,31805,31820,31811,31828,31823,31808,31824,31832,31839,31844,31830,31845,31852,31861,31875,31888,31908,31917,31906,31915,31905,31912,31923,31922,31921,31918,31929,31933,31936,31941,31938,31960,31954,31964,31970,39739,31983,31986,31988,31990,31994,32006,32002,32028,32021,32010,32069,32075,32046,32050,32063,32053,32070,32115,32086,32078,32114,32104,32110,32079,32099,32147,32137,32091,32143,32125,32155,32186,32174,32163,32181,32199,32189,32171,32317,32162,32175,32220,32184,32159,32176,32216,32221,32228,32222,32251,32242,32225,32261,32266,32291,32289,32274,32305,32287,32265,32267,32290,32326,32358,32315,32309,32313,32323,32311,32306,32314,32359,32349,32342,32350,32345,32346,32377,32362,32361,32380,32379,32387,32213,32381,36782,32383,32392,32393,32396,32402,32400,32403,32404,32406,32398,32411,32412,32568,32570,32581,32588,32589,32590,32592,32593,32597,32596,32600,32607,32608,32616,32617,32615,32632,32642,32646,32643,32648,32647,32652,32660,32670,32669,32666,32675,32687,32690,32697,32686,32694,32696,35697,32709,32710,32714,32725,32724,32737,32742,32745,32755,32761,39132,32774,32772,32779,32786,32792,32793,32796,32801,32808,32831,32827,32842,32838,32850,32856,32858,32863,32866,32872,32883,32882,32880,32886,32889,32893,32895,32900,32902,32901,32923,32915,32922,32941,20880,32940,32987,32997,32985,32989,32964,32986,32982,33033,33007,33009,33051,33065,33059,33071,33099,38539,33094,33086,33107,33105,33020,33137,33134,33125,33126,33140,33155,33160,33162,33152,33154,33184,33173,33188,33187,33119,33171,33193,33200,33205,33214,33208,33213,33216,33218,33210,33225,33229,33233,33241,33240,33224,33242,33247,33248,33255,33274,33275,33278,33281,33282,33285,33287,33290,33293,33296,33302,33321,33323,33336,33331,33344,33369,33368,33373,33370,33375,33380,33378,33384,33386,33387,33326,33393,33399,33400,33406,33421,33426,33451,33439,33467,33452,33505,33507,33503,33490,33524,33523,33530,33683,33539,33531,33529,33502,33542,33500,33545,33497,33589,33588,33558,33586,33585,33600,33593,33616,33605,33583,33579,33559,33560,33669,33690,33706,33695,33698,33686,33571,33678,33671,33674,33660,33717,33651,33653,33696,33673,33704,33780,33811,33771,33742,33789,33795,33752,33803,33729,33783,33799,33760,33778,33805,33826,33824,33725,33848,34054,33787,33901,33834,33852,34138,33924,33911,33899,33965,33902,33922,33897,33862,33836,33903,33913,33845,33994,33890,33977,33983,33951,34009,33997,33979,34010,34000,33985,33990,34006,33953,34081,34047,34036,34071,34072,34092,34079,34069,34068,34044,34112,34147,34136,34120,34113,34306,34123,34133,34176,34212,34184,34193,34186,34216,34157,34196,34203,34282,34183,34204,34167,34174,34192,34249,34234,34255,34233,34256,34261,34269,34277,34268,34297,34314,34323,34315,34302,34298,34310,34338,34330,34352,34367,34381,20053,34388,34399,34407,34417,34451,34467,34473,34474,34443,34444,34486,34479,34500,34502,34480,34505,34851,34475,34516,34526,34537,34540,34527,34523,34543,34578,34566,34568,34560,34563,34555,34577,34569,34573,34553,34570,34612,34623,34615,34619,34597,34601,34586,34656,34655,34680,34636,34638,34676,34647,34664,34670,34649,34643,34659,34666,34821,34722,34719,34690,34735,34763,34749,34752,34768,38614,34731,34756,34739,34759,34758,34747,34799,34802,34784,34831,34829,34814,34806,34807,34830,34770,34833,34838,34837,34850,34849,34865,34870,34873,34855,34875,34884,34882,34898,34905,34910,34914,34923,34945,34942,34974,34933,34941,34997,34930,34946,34967,34962,34990,34969,34978,34957,34980,34992,35007,34993,35011,35012,35028,35032,35033,35037,35065,35074,35068,35060,35048,35058,35076,35084,35082,35091,35139,35102,35109,35114,35115,35137,35140,35131,35126,35128,35148,35101,35168,35166,35174,35172,35181,35178,35183,35188,35191,35198,35203,35208,35210,35219,35224,35233,35241,35238,35244,35247,35250,35258,35261,35263,35264,35290,35292,35293,35303,35316,35320,35331,35350,35344,35340,35355,35357,35365,35382,35393,35419,35410,35398,35400,35452,35437,35436,35426,35461,35458,35460,35496,35489,35473,35493,35494,35482,35491,35524,35533,35522,35546,35563,35571,35559,35556,35569,35604,35552,35554,35575,35550,35547,35596,35591,35610,35553,35606,35600,35607,35616,35635,38827,35622,35627,35646,35624,35649,35660,35663,35662,35657,35670,35675,35674,35691,35679,35692,35695,35700,35709,35712,35724,35726,35730,35731,35734,35737,35738,35898,35905,35903,35912,35916,35918,35920,35925,35938,35948,35960,35962,35970,35977,35973,35978,35981,35982,35988,35964,35992,25117,36013,36010,36029,36018,36019,36014,36022,36040,36033,36068,36067,36058,36093,36090,36091,36100,36101,36106,36103,36111,36109,36112,40782,36115,36045,36116,36118,36199,36205,36209,36211,36225,36249,36290,36286,36282,36303,36314,36310,36300,36315,36299,36330,36331,36319,36323,36348,36360,36361,36351,36381,36382,36368,36383,36418,36405,36400,36404,36426,36423,36425,36428,36432,36424,36441,36452,36448,36394,36451,36437,36470,36466,36476,36481,36487,36485,36484,36491,36490,36499,36497,36500,36505,36522,36513,36524,36528,36550,36529,36542,36549,36552,36555,36571,36579,36604,36603,36587,36606,36618,36613,36629,36626,36633,36627,36636,36639,36635,36620,36646,36659,36667,36665,36677,36674,36670,36684,36681,36678,36686,36695,36700,36706,36707,36708,36764,36767,36771,36781,36783,36791,36826,36837,36834,36842,36847,36999,36852,36869,36857,36858,36881,36885,36897,36877,36894,36886,36875,36903,36918,36917,36921,36856,36943,36944,36945,36946,36878,36937,36926,36950,36952,36958,36968,36975,36982,38568,36978,36994,36989,36993,36992,37002,37001,37007,37032,37039,37041,37045,37090,37092,25160,37083,37122,37138,37145,37170,37168,37194,37206,37208,37219,37221,37225,37235,37234,37259,37257,37250,37282,37291,37295,37290,37301,37300,37306,37312,37313,37321,37323,37328,37334,37343,37345,37339,37372,37365,37366,37406,37375,37396,37420,37397,37393,37470,37463,37445,37449,37476,37448,37525,37439,37451,37456,37532,37526,37523,37531,37466,37583,37561,37559,37609,37647,37626,37700,37678,37657,37666,37658,37667,37690,37685,37691,37724,37728,37756,37742,37718,37808,37804,37805,37780,37817,37846,37847,37864,37861,37848,37827,37853,37840,37832,37860,37914,37908,37907,37891,37895,37904,37942,37931,37941,37921,37946,37953,37970,37956,37979,37984,37986,37982,37994,37417,38000,38005,38007,38013,37978,38012,38014,38017,38015,38274,38279,38282,38292,38294,38296,38297,38304,38312,38311,38317,38332,38331,38329,38334,38346,28662,38339,38349,38348,38357,38356,38358,38364,38369,38373,38370,38433,38440,38446,38447,38466,38476,38479,38475,38519,38492,38494,38493,38495,38502,38514,38508,38541,38552,38549,38551,38570,38567,38577,38578,38576,38580,38582,38584,38585,38606,38603,38601,38605,35149,38620,38669,38613,38649,38660,38662,38664,38675,38670,38673,38671,38678,38681,38692,38698,38704,38713,38717,38718,38724,38726,38728,38722,38729,38748,38752,38756,38758,38760,21202,38763,38769,38777,38789,38780,38785,38778,38790,38795,38799,38800,38812,38824,38822,38819,38835,38836,38851,38854,38856,38859,38876,38893,40783,38898,31455,38902,38901,38927,38924,38968,38948,38945,38967,38973,38982,38991,38987,39019,39023,39024,39025,39028,39027,39082,39087,39089,39094,39108,39107,39110,39145,39147,39171,39177,39186,39188,39192,39201,39197,39198,39204,39200,39212,39214,39229,39230,39234,39241,39237,39248,39243,39249,39250,39244,39253,39319,39320,39333,39341,39342,39356,39391,39387,39389,39384,39377,39405,39406,39409,39410,39419,39416,39425,39439,39429,39394,39449,39467,39479,39493,39490,39488,39491,39486,39509,39501,39515,39511,39519,39522,39525,39524,39529,39531,39530,39597,39600,39612,39616,39631,39633,39635,39636,39646,39647,39650,39651,39654,39663,39659,39662,39668,39665,39671,39675,39686,39704,39706,39711,39714,39715,39717,39719,39720,39721,39722,39726,39727,39730,39748,39747,39759,39757,39758,39761,39768,39796,39827,39811,39825,39830,39831,39839,39840,39848,39860,39872,39882,39865,39878,39887,39889,39890,39907,39906,39908,39892,39905,39994,39922,39921,39920,39957,39956,39945,39955,39948,39942,39944,39954,39946,39940,39982,39963,39973,39972,39969,39984,40007,39986,40006,39998,40026,40032,40039,40054,40056,40167,40172,40176,40201,40200,40171,40195,40198,40234,40230,40367,40227,40223,40260,40213,40210,40257,40255,40254,40262,40264,40285,40286,40292,40273,40272,40281,40306,40329,40327,40363,40303,40314,40346,40356,40361,40370,40388,40385,40379,40376,40378,40390,40399,40386,40409,40403,40440,40422,40429,40431,40445,40474,40475,40478,40565,40569,40573,40577,40584,40587,40588,40594,40597,40593,40605,40613,40617,40632,40618,40621,38753,40652,40654,40655,40656,40660,40668,40670,40669,40672,40677,40680,40687,40692,40694,40695,40697,40699,40700,40701,40711,40712,30391,40725,40737,40748,40766,40778,40786,40788,40803,40799,40800,40801,40806,40807,40812,40810,40823,40818,40822,40853,40860,40864,22575,27079,36953,29796,20956,29081,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,null,null,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,65506,65508,65287,65282,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,65506,65508,65287,65282,12849,8470,8481,8757,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],
  4341. "jis0212":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,728,711,184,729,733,175,731,730,65374,900,901,null,null,null,null,null,null,null,null,161,166,191,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,186,170,169,174,8482,164,8470,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,902,904,905,906,938,null,908,null,910,939,null,911,null,null,null,null,940,941,942,943,970,912,972,962,973,971,944,974,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1038,1039,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1118,1119,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,198,272,null,294,null,306,null,321,319,null,330,216,338,null,358,222,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,230,273,240,295,305,307,312,322,320,329,331,248,339,223,359,254,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,193,192,196,194,258,461,256,260,197,195,262,264,268,199,266,270,201,200,203,202,282,278,274,280,null,284,286,290,288,292,205,204,207,206,463,304,298,302,296,308,310,313,317,315,323,327,325,209,211,210,214,212,465,336,332,213,340,344,342,346,348,352,350,356,354,218,217,220,219,364,467,368,362,370,366,360,471,475,473,469,372,221,376,374,377,381,379,null,null,null,null,null,null,null,225,224,228,226,259,462,257,261,229,227,263,265,269,231,267,271,233,232,235,234,283,279,275,281,501,285,287,null,289,293,237,236,239,238,464,null,299,303,297,309,311,314,318,316,324,328,326,241,243,242,246,244,466,337,333,245,341,345,343,347,349,353,351,357,355,250,249,252,251,365,468,369,363,371,367,361,472,476,474,470,373,253,255,375,378,382,380,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,19970,19972,19973,19980,19986,19999,20003,20004,20008,20011,20014,20015,20016,20021,20032,20033,20036,20039,20049,20058,20060,20067,20072,20073,20084,20085,20089,20095,20109,20118,20119,20125,20143,20153,20163,20176,20186,20187,20192,20193,20194,20200,20207,20209,20211,20213,20221,20222,20223,20224,20226,20227,20232,20235,20236,20242,20245,20246,20247,20249,20270,20273,20320,20275,20277,20279,20281,20283,20286,20288,20290,20296,20297,20299,20300,20306,20308,20310,20312,20319,20323,20330,20332,20334,20337,20343,20344,20345,20346,20349,20350,20353,20354,20356,20357,20361,20362,20364,20366,20368,20370,20371,20372,20375,20377,20378,20382,20383,20402,20407,20409,20411,20412,20413,20414,20416,20417,20421,20422,20424,20425,20427,20428,20429,20431,20434,20444,20448,20450,20464,20466,20476,20477,20479,20480,20481,20484,20487,20490,20492,20494,20496,20499,20503,20504,20507,20508,20509,20510,20514,20519,20526,20528,20530,20531,20533,20544,20545,20546,20549,20550,20554,20556,20558,20561,20562,20563,20567,20569,20575,20576,20578,20579,20582,20583,20586,20589,20592,20593,20539,20609,20611,20612,20614,20618,20622,20623,20624,20626,20627,20628,20630,20635,20636,20638,20639,20640,20641,20642,20650,20655,20656,20665,20666,20669,20672,20675,20676,20679,20684,20686,20688,20691,20692,20696,20700,20701,20703,20706,20708,20710,20712,20713,20719,20721,20726,20730,20734,20739,20742,20743,20744,20747,20748,20749,20750,20722,20752,20759,20761,20763,20764,20765,20766,20771,20775,20776,20780,20781,20783,20785,20787,20788,20789,20792,20793,20802,20810,20815,20819,20821,20823,20824,20831,20836,20838,20862,20867,20868,20875,20878,20888,20893,20897,20899,20909,20920,20922,20924,20926,20927,20930,20936,20943,20945,20946,20947,20949,20952,20958,20962,20965,20974,20978,20979,20980,20983,20993,20994,20997,21010,21011,21013,21014,21016,21026,21032,21041,21042,21045,21052,21061,21065,21077,21079,21080,21082,21084,21087,21088,21089,21094,21102,21111,21112,21113,21120,21122,21125,21130,21132,21139,21141,21142,21143,21144,21146,21148,21156,21157,21158,21159,21167,21168,21174,21175,21176,21178,21179,21181,21184,21188,21190,21192,21196,21199,21201,21204,21206,21211,21212,21217,21221,21224,21225,21226,21228,21232,21233,21236,21238,21239,21248,21251,21258,21259,21260,21265,21267,21272,21275,21276,21278,21279,21285,21287,21288,21289,21291,21292,21293,21296,21298,21301,21308,21309,21310,21314,21324,21323,21337,21339,21345,21347,21349,21356,21357,21362,21369,21374,21379,21383,21384,21390,21395,21396,21401,21405,21409,21412,21418,21419,21423,21426,21428,21429,21431,21432,21434,21437,21440,21445,21455,21458,21459,21461,21466,21469,21470,21472,21478,21479,21493,21506,21523,21530,21537,21543,21544,21546,21551,21553,21556,21557,21571,21572,21575,21581,21583,21598,21602,21604,21606,21607,21609,21611,21613,21614,21620,21631,21633,21635,21637,21640,21641,21645,21649,21653,21654,21660,21663,21665,21670,21671,21673,21674,21677,21678,21681,21687,21689,21690,21691,21695,21702,21706,21709,21710,21728,21738,21740,21743,21750,21756,21758,21759,21760,21761,21765,21768,21769,21772,21773,21774,21781,21802,21803,21810,21813,21814,21819,21820,21821,21825,21831,21833,21834,21837,21840,21841,21848,21850,21851,21854,21856,21857,21860,21862,21887,21889,21890,21894,21896,21902,21903,21905,21906,21907,21908,21911,21923,21924,21933,21938,21951,21953,21955,21958,21961,21963,21964,21966,21969,21970,21971,21975,21976,21979,21982,21986,21993,22006,22015,22021,22024,22026,22029,22030,22031,22032,22033,22034,22041,22060,22064,22067,22069,22071,22073,22075,22076,22077,22079,22080,22081,22083,22084,22086,22089,22091,22093,22095,22100,22110,22112,22113,22114,22115,22118,22121,22125,22127,22129,22130,22133,22148,22149,22152,22155,22156,22165,22169,22170,22173,22174,22175,22182,22183,22184,22185,22187,22188,22189,22193,22195,22199,22206,22213,22217,22218,22219,22223,22224,22220,22221,22233,22236,22237,22239,22241,22244,22245,22246,22247,22248,22257,22251,22253,22262,22263,22273,22274,22279,22282,22284,22289,22293,22298,22299,22301,22304,22306,22307,22308,22309,22313,22314,22316,22318,22319,22323,22324,22333,22334,22335,22341,22342,22348,22349,22354,22370,22373,22375,22376,22379,22381,22382,22383,22384,22385,22387,22388,22389,22391,22393,22394,22395,22396,22398,22401,22403,22412,22420,22423,22425,22426,22428,22429,22430,22431,22433,22421,22439,22440,22441,22444,22456,22461,22471,22472,22476,22479,22485,22493,22494,22500,22502,22503,22505,22509,22512,22517,22518,22520,22525,22526,22527,22531,22532,22536,22537,22497,22540,22541,22555,22558,22559,22560,22566,22567,22573,22578,22585,22591,22601,22604,22605,22607,22608,22613,22623,22625,22628,22631,22632,22648,22652,22655,22656,22657,22663,22664,22665,22666,22668,22669,22671,22672,22676,22678,22685,22688,22689,22690,22694,22697,22705,22706,22724,22716,22722,22728,22733,22734,22736,22738,22740,22742,22746,22749,22753,22754,22761,22771,22789,22790,22795,22796,22802,22803,22804,34369,22813,22817,22819,22820,22824,22831,22832,22835,22837,22838,22847,22851,22854,22866,22867,22873,22875,22877,22878,22879,22881,22883,22891,22893,22895,22898,22901,22902,22905,22907,22908,22923,22924,22926,22930,22933,22935,22943,22948,22951,22957,22958,22959,22960,22963,22967,22970,22972,22977,22979,22980,22984,22986,22989,22994,23005,23006,23007,23011,23012,23015,23022,23023,23025,23026,23028,23031,23040,23044,23052,23053,23054,23058,23059,23070,23075,23076,23079,23080,23082,23085,23088,23108,23109,23111,23112,23116,23120,23125,23134,23139,23141,23143,23149,23159,23162,23163,23166,23179,23184,23187,23190,23193,23196,23198,23199,23200,23202,23207,23212,23217,23218,23219,23221,23224,23226,23227,23231,23236,23238,23240,23247,23258,23260,23264,23269,23274,23278,23285,23286,23293,23296,23297,23304,23319,23348,23321,23323,23325,23329,23333,23341,23352,23361,23371,23372,23378,23382,23390,23400,23406,23407,23420,23421,23422,23423,23425,23428,23430,23434,23438,23440,23441,23443,23444,23446,23464,23465,23468,23469,23471,23473,23474,23479,23482,23484,23488,23489,23501,23503,23510,23511,23512,23513,23514,23520,23535,23537,23540,23549,23564,23575,23582,23583,23587,23590,23593,23595,23596,23598,23600,23602,23605,23606,23641,23642,23644,23650,23651,23655,23656,23657,23661,23664,23668,23669,23674,23675,23676,23677,23687,23688,23690,23695,23698,23709,23711,23712,23714,23715,23718,23722,23730,23732,23733,23738,23753,23755,23762,23773,23767,23790,23793,23794,23796,23809,23814,23821,23826,23851,23843,23844,23846,23847,23857,23860,23865,23869,23871,23874,23875,23878,23880,23893,23889,23897,23882,23903,23904,23905,23906,23908,23914,23917,23920,23929,23930,23934,23935,23937,23939,23944,23946,23954,23955,23956,23957,23961,23963,23967,23968,23975,23979,23984,23988,23992,23993,24003,24007,24011,24016,24014,24024,24025,24032,24036,24041,24056,24057,24064,24071,24077,24082,24084,24085,24088,24095,24096,24110,24104,24114,24117,24126,24139,24144,24137,24145,24150,24152,24155,24156,24158,24168,24170,24171,24172,24173,24174,24176,24192,24203,24206,24226,24228,24229,24232,24234,24236,24241,24243,24253,24254,24255,24262,24268,24267,24270,24273,24274,24276,24277,24284,24286,24293,24299,24322,24326,24327,24328,24334,24345,24348,24349,24353,24354,24355,24356,24360,24363,24364,24366,24368,24372,24374,24379,24381,24383,24384,24388,24389,24391,24397,24400,24404,24408,24411,24416,24419,24420,24423,24431,24434,24436,24437,24440,24442,24445,24446,24457,24461,24463,24470,24476,24477,24482,24487,24491,24484,24492,24495,24496,24497,24504,24516,24519,24520,24521,24523,24528,24529,24530,24531,24532,24542,24545,24546,24552,24553,24554,24556,24557,24558,24559,24562,24563,24566,24570,24572,24583,24586,24589,24595,24596,24599,24600,24602,24607,24612,24621,24627,24629,24640,24647,24648,24649,24652,24657,24660,24662,24663,24669,24673,24679,24689,24702,24703,24706,24710,24712,24714,24718,24721,24723,24725,24728,24733,24734,24738,24740,24741,24744,24752,24753,24759,24763,24766,24770,24772,24776,24777,24778,24779,24782,24783,24788,24789,24793,24795,24797,24798,24802,24805,24818,24821,24824,24828,24829,24834,24839,24842,24844,24848,24849,24850,24851,24852,24854,24855,24857,24860,24862,24866,24874,24875,24880,24881,24885,24886,24887,24889,24897,24901,24902,24905,24926,24928,24940,24946,24952,24955,24956,24959,24960,24961,24963,24964,24971,24973,24978,24979,24983,24984,24988,24989,24991,24992,24997,25000,25002,25005,25016,25017,25020,25024,25025,25026,25038,25039,25045,25052,25053,25054,25055,25057,25058,25063,25065,25061,25068,25069,25071,25089,25091,25092,25095,25107,25109,25116,25120,25122,25123,25127,25129,25131,25145,25149,25154,25155,25156,25158,25164,25168,25169,25170,25172,25174,25178,25180,25188,25197,25199,25203,25210,25213,25229,25230,25231,25232,25254,25256,25267,25270,25271,25274,25278,25279,25284,25294,25301,25302,25306,25322,25330,25332,25340,25341,25347,25348,25354,25355,25357,25360,25363,25366,25368,25385,25386,25389,25397,25398,25401,25404,25409,25410,25411,25412,25414,25418,25419,25422,25426,25427,25428,25432,25435,25445,25446,25452,25453,25457,25460,25461,25464,25468,25469,25471,25474,25476,25479,25482,25488,25492,25493,25497,25498,25502,25508,25510,25517,25518,25519,25533,25537,25541,25544,25550,25553,25555,25556,25557,25564,25568,25573,25578,25580,25586,25587,25589,25592,25593,25609,25610,25616,25618,25620,25624,25630,25632,25634,25636,25637,25641,25642,25647,25648,25653,25661,25663,25675,25679,25681,25682,25683,25684,25690,25691,25692,25693,25695,25696,25697,25699,25709,25715,25716,25723,25725,25733,25735,25743,25744,25745,25752,25753,25755,25757,25759,25761,25763,25766,25768,25772,25779,25789,25790,25791,25796,25801,25802,25803,25804,25806,25808,25809,25813,25815,25828,25829,25833,25834,25837,25840,25845,25847,25851,25855,25857,25860,25864,25865,25866,25871,25875,25876,25878,25881,25883,25886,25887,25890,25894,25897,25902,25905,25914,25916,25917,25923,25927,25929,25936,25938,25940,25951,25952,25959,25963,25978,25981,25985,25989,25994,26002,26005,26008,26013,26016,26019,26022,26030,26034,26035,26036,26047,26050,26056,26057,26062,26064,26068,26070,26072,26079,26096,26098,26100,26101,26105,26110,26111,26112,26116,26120,26121,26125,26129,26130,26133,26134,26141,26142,26145,26146,26147,26148,26150,26153,26154,26155,26156,26158,26160,26161,26163,26169,26167,26176,26181,26182,26186,26188,26193,26190,26199,26200,26201,26203,26204,26208,26209,26363,26218,26219,26220,26238,26227,26229,26239,26231,26232,26233,26235,26240,26236,26251,26252,26253,26256,26258,26265,26266,26267,26268,26271,26272,26276,26285,26289,26290,26293,26299,26303,26304,26306,26307,26312,26316,26318,26319,26324,26331,26335,26344,26347,26348,26350,26362,26373,26375,26382,26387,26393,26396,26400,26402,26419,26430,26437,26439,26440,26444,26452,26453,26461,26470,26476,26478,26484,26486,26491,26497,26500,26510,26511,26513,26515,26518,26520,26521,26523,26544,26545,26546,26549,26555,26556,26557,26617,26560,26562,26563,26565,26568,26569,26578,26583,26585,26588,26593,26598,26608,26610,26614,26615,26706,26644,26649,26653,26655,26664,26663,26668,26669,26671,26672,26673,26675,26683,26687,26692,26693,26698,26700,26709,26711,26712,26715,26731,26734,26735,26736,26737,26738,26741,26745,26746,26747,26748,26754,26756,26758,26760,26774,26776,26778,26780,26785,26787,26789,26793,26794,26798,26802,26811,26821,26824,26828,26831,26832,26833,26835,26838,26841,26844,26845,26853,26856,26858,26859,26860,26861,26864,26865,26869,26870,26875,26876,26877,26886,26889,26890,26896,26897,26899,26902,26903,26929,26931,26933,26936,26939,26946,26949,26953,26958,26967,26971,26979,26980,26981,26982,26984,26985,26988,26992,26993,26994,27002,27003,27007,27008,27021,27026,27030,27032,27041,27045,27046,27048,27051,27053,27055,27063,27064,27066,27068,27077,27080,27089,27094,27095,27106,27109,27118,27119,27121,27123,27125,27134,27136,27137,27139,27151,27153,27157,27162,27165,27168,27172,27176,27184,27186,27188,27191,27195,27198,27199,27205,27206,27209,27210,27214,27216,27217,27218,27221,27222,27227,27236,27239,27242,27249,27251,27262,27265,27267,27270,27271,27273,27275,27281,27291,27293,27294,27295,27301,27307,27311,27312,27313,27316,27325,27326,27327,27334,27337,27336,27340,27344,27348,27349,27350,27356,27357,27364,27367,27372,27376,27377,27378,27388,27389,27394,27395,27398,27399,27401,27407,27408,27409,27415,27419,27422,27428,27432,27435,27436,27439,27445,27446,27451,27455,27462,27466,27469,27474,27478,27480,27485,27488,27495,27499,27502,27504,27509,27517,27518,27522,27525,27543,27547,27551,27552,27554,27555,27560,27561,27564,27565,27566,27568,27576,27577,27581,27582,27587,27588,27593,27596,27606,27610,27617,27619,27622,27623,27630,27633,27639,27641,27647,27650,27652,27653,27657,27661,27662,27664,27666,27673,27679,27686,27687,27688,27692,27694,27699,27701,27702,27706,27707,27711,27722,27723,27725,27727,27730,27732,27737,27739,27740,27755,27757,27759,27764,27766,27768,27769,27771,27781,27782,27783,27785,27796,27797,27799,27800,27804,27807,27824,27826,27828,27842,27846,27853,27855,27856,27857,27858,27860,27862,27866,27868,27872,27879,27881,27883,27884,27886,27890,27892,27908,27911,27914,27918,27919,27921,27923,27930,27942,27943,27944,27751,27950,27951,27953,27961,27964,27967,27991,27998,27999,28001,28005,28007,28015,28016,28028,28034,28039,28049,28050,28052,28054,28055,28056,28074,28076,28084,28087,28089,28093,28095,28100,28104,28106,28110,28111,28118,28123,28125,28127,28128,28130,28133,28137,28143,28144,28148,28150,28156,28160,28164,28190,28194,28199,28210,28214,28217,28219,28220,28228,28229,28232,28233,28235,28239,28241,28242,28243,28244,28247,28252,28253,28254,28258,28259,28264,28275,28283,28285,28301,28307,28313,28320,28327,28333,28334,28337,28339,28347,28351,28352,28353,28355,28359,28360,28362,28365,28366,28367,28395,28397,28398,28409,28411,28413,28420,28424,28426,28428,28429,28438,28440,28442,28443,28454,28457,28458,28463,28464,28467,28470,28475,28476,28461,28495,28497,28498,28499,28503,28505,28506,28509,28510,28513,28514,28520,28524,28541,28542,28547,28551,28552,28555,28556,28557,28560,28562,28563,28564,28566,28570,28575,28576,28581,28582,28583,28584,28590,28591,28592,28597,28598,28604,28613,28615,28616,28618,28634,28638,28648,28649,28656,28661,28665,28668,28669,28672,28677,28678,28679,28685,28695,28704,28707,28719,28724,28727,28729,28732,28739,28740,28744,28745,28746,28747,28756,28757,28765,28766,28750,28772,28773,28780,28782,28789,28790,28798,28801,28805,28806,28820,28821,28822,28823,28824,28827,28836,28843,28848,28849,28852,28855,28874,28881,28883,28884,28885,28886,28888,28892,28900,28922,28931,28932,28933,28934,28935,28939,28940,28943,28958,28960,28971,28973,28975,28976,28977,28984,28993,28997,28998,28999,29002,29003,29008,29010,29015,29018,29020,29022,29024,29032,29049,29056,29061,29063,29068,29074,29082,29083,29088,29090,29103,29104,29106,29107,29114,29119,29120,29121,29124,29131,29132,29139,29142,29145,29146,29148,29176,29182,29184,29191,29192,29193,29203,29207,29210,29213,29215,29220,29227,29231,29236,29240,29241,29249,29250,29251,29253,29262,29263,29264,29267,29269,29270,29274,29276,29278,29280,29283,29288,29291,29294,29295,29297,29303,29304,29307,29308,29311,29316,29321,29325,29326,29331,29339,29352,29357,29358,29361,29364,29374,29377,29383,29385,29388,29397,29398,29400,29407,29413,29427,29428,29434,29435,29438,29442,29444,29445,29447,29451,29453,29458,29459,29464,29465,29470,29474,29476,29479,29480,29484,29489,29490,29493,29498,29499,29501,29507,29517,29520,29522,29526,29528,29533,29534,29535,29536,29542,29543,29545,29547,29548,29550,29551,29553,29559,29561,29564,29568,29569,29571,29573,29574,29582,29584,29587,29589,29591,29592,29596,29598,29599,29600,29602,29605,29606,29610,29611,29613,29621,29623,29625,29628,29629,29631,29637,29638,29641,29643,29644,29647,29650,29651,29654,29657,29661,29665,29667,29670,29671,29673,29684,29685,29687,29689,29690,29691,29693,29695,29696,29697,29700,29703,29706,29713,29722,29723,29732,29734,29736,29737,29738,29739,29740,29741,29742,29743,29744,29745,29753,29760,29763,29764,29766,29767,29771,29773,29777,29778,29783,29789,29794,29798,29799,29800,29803,29805,29806,29809,29810,29824,29825,29829,29830,29831,29833,29839,29840,29841,29842,29848,29849,29850,29852,29855,29856,29857,29859,29862,29864,29865,29866,29867,29870,29871,29873,29874,29877,29881,29883,29887,29896,29897,29900,29904,29907,29912,29914,29915,29918,29919,29924,29928,29930,29931,29935,29940,29946,29947,29948,29951,29958,29970,29974,29975,29984,29985,29988,29991,29993,29994,29999,30006,30009,30013,30014,30015,30016,30019,30023,30024,30030,30032,30034,30039,30046,30047,30049,30063,30065,30073,30074,30075,30076,30077,30078,30081,30085,30096,30098,30099,30101,30105,30108,30114,30116,30132,30138,30143,30144,30145,30148,30150,30156,30158,30159,30167,30172,30175,30176,30177,30180,30183,30188,30190,30191,30193,30201,30208,30210,30211,30212,30215,30216,30218,30220,30223,30226,30227,30229,30230,30233,30235,30236,30237,30238,30243,30245,30246,30249,30253,30258,30259,30261,30264,30265,30266,30268,30282,30272,30273,30275,30276,30277,30281,30283,30293,30297,30303,30308,30309,30317,30318,30319,30321,30324,30337,30341,30348,30349,30357,30363,30364,30365,30367,30368,30370,30371,30372,30373,30374,30375,30376,30378,30381,30397,30401,30405,30409,30411,30412,30414,30420,30425,30432,30438,30440,30444,30448,30449,30454,30457,30460,30464,30470,30474,30478,30482,30484,30485,30487,30489,30490,30492,30498,30504,30509,30510,30511,30516,30517,30518,30521,30525,30526,30530,30533,30534,30538,30541,30542,30543,30546,30550,30551,30556,30558,30559,30560,30562,30564,30567,30570,30572,30576,30578,30579,30580,30586,30589,30592,30596,30604,30605,30612,30613,30614,30618,30623,30626,30631,30634,30638,30639,30641,30645,30654,30659,30665,30673,30674,30677,30681,30686,30687,30688,30692,30694,30698,30700,30704,30705,30708,30712,30715,30725,30726,30729,30733,30734,30737,30749,30753,30754,30755,30765,30766,30768,30773,30775,30787,30788,30791,30792,30796,30798,30802,30812,30814,30816,30817,30819,30820,30824,30826,30830,30842,30846,30858,30863,30868,30872,30881,30877,30878,30879,30884,30888,30892,30893,30896,30897,30898,30899,30907,30909,30911,30919,30920,30921,30924,30926,30930,30931,30933,30934,30948,30939,30943,30944,30945,30950,30954,30962,30963,30976,30966,30967,30970,30971,30975,30982,30988,30992,31002,31004,31006,31007,31008,31013,31015,31017,31021,31025,31028,31029,31035,31037,31039,31044,31045,31046,31050,31051,31055,31057,31060,31064,31067,31068,31079,31081,31083,31090,31097,31099,31100,31102,31115,31116,31121,31123,31124,31125,31126,31128,31131,31132,31137,31144,31145,31147,31151,31153,31156,31160,31163,31170,31172,31175,31176,31178,31183,31188,31190,31194,31197,31198,31200,31202,31205,31210,31211,31213,31217,31224,31228,31234,31235,31239,31241,31242,31244,31249,31253,31259,31262,31265,31271,31275,31277,31279,31280,31284,31285,31288,31289,31290,31300,31301,31303,31304,31308,31317,31318,31321,31324,31325,31327,31328,31333,31335,31338,31341,31349,31352,31358,31360,31362,31365,31366,31370,31371,31376,31377,31380,31390,31392,31395,31404,31411,31413,31417,31419,31420,31430,31433,31436,31438,31441,31451,31464,31465,31467,31468,31473,31476,31483,31485,31486,31495,31508,31519,31523,31527,31529,31530,31531,31533,31534,31535,31536,31537,31540,31549,31551,31552,31553,31559,31566,31573,31584,31588,31590,31593,31594,31597,31599,31602,31603,31607,31620,31625,31630,31632,31633,31638,31643,31646,31648,31653,31660,31663,31664,31666,31669,31670,31674,31675,31676,31677,31682,31685,31688,31690,31700,31702,31703,31705,31706,31707,31720,31722,31730,31732,31733,31736,31737,31738,31740,31742,31745,31746,31747,31748,31750,31753,31755,31756,31758,31759,31769,31771,31776,31781,31782,31784,31788,31793,31795,31796,31798,31801,31802,31814,31818,31829,31825,31826,31827,31833,31834,31835,31836,31837,31838,31841,31843,31847,31849,31853,31854,31856,31858,31865,31868,31869,31878,31879,31887,31892,31902,31904,31910,31920,31926,31927,31930,31931,31932,31935,31940,31943,31944,31945,31949,31951,31955,31956,31957,31959,31961,31962,31965,31974,31977,31979,31989,32003,32007,32008,32009,32015,32017,32018,32019,32022,32029,32030,32035,32038,32042,32045,32049,32060,32061,32062,32064,32065,32071,32072,32077,32081,32083,32087,32089,32090,32092,32093,32101,32103,32106,32112,32120,32122,32123,32127,32129,32130,32131,32133,32134,32136,32139,32140,32141,32145,32150,32151,32157,32158,32166,32167,32170,32179,32182,32183,32185,32194,32195,32196,32197,32198,32204,32205,32206,32215,32217,32256,32226,32229,32230,32234,32235,32237,32241,32245,32246,32249,32250,32264,32272,32273,32277,32279,32284,32285,32288,32295,32296,32300,32301,32303,32307,32310,32319,32324,32325,32327,32334,32336,32338,32344,32351,32353,32354,32357,32363,32366,32367,32371,32376,32382,32385,32390,32391,32394,32397,32401,32405,32408,32410,32413,32414,32572,32571,32573,32574,32575,32579,32580,32583,32591,32594,32595,32603,32604,32605,32609,32611,32612,32613,32614,32621,32625,32637,32638,32639,32640,32651,32653,32655,32656,32657,32662,32663,32668,32673,32674,32678,32682,32685,32692,32700,32703,32704,32707,32712,32718,32719,32731,32735,32739,32741,32744,32748,32750,32751,32754,32762,32765,32766,32767,32775,32776,32778,32781,32782,32783,32785,32787,32788,32790,32797,32798,32799,32800,32804,32806,32812,32814,32816,32820,32821,32823,32825,32826,32828,32830,32832,32836,32864,32868,32870,32877,32881,32885,32897,32904,32910,32924,32926,32934,32935,32939,32952,32953,32968,32973,32975,32978,32980,32981,32983,32984,32992,33005,33006,33008,33010,33011,33014,33017,33018,33022,33027,33035,33046,33047,33048,33052,33054,33056,33060,33063,33068,33072,33077,33082,33084,33093,33095,33098,33100,33106,33111,33120,33121,33127,33128,33129,33133,33135,33143,33153,33168,33156,33157,33158,33163,33166,33174,33176,33179,33182,33186,33198,33202,33204,33211,33227,33219,33221,33226,33230,33231,33237,33239,33243,33245,33246,33249,33252,33259,33260,33264,33265,33266,33269,33270,33272,33273,33277,33279,33280,33283,33295,33299,33300,33305,33306,33309,33313,33314,33320,33330,33332,33338,33347,33348,33349,33350,33355,33358,33359,33361,33366,33372,33376,33379,33383,33389,33396,33403,33405,33407,33408,33409,33411,33412,33415,33417,33418,33422,33425,33428,33430,33432,33434,33435,33440,33441,33443,33444,33447,33448,33449,33450,33454,33456,33458,33460,33463,33466,33468,33470,33471,33478,33488,33493,33498,33504,33506,33508,33512,33514,33517,33519,33526,33527,33533,33534,33536,33537,33543,33544,33546,33547,33620,33563,33565,33566,33567,33569,33570,33580,33581,33582,33584,33587,33591,33594,33596,33597,33602,33603,33604,33607,33613,33614,33617,33621,33622,33623,33648,33656,33661,33663,33664,33666,33668,33670,33677,33682,33684,33685,33688,33689,33691,33692,33693,33702,33703,33705,33708,33726,33727,33728,33735,33737,33743,33744,33745,33748,33757,33619,33768,33770,33782,33784,33785,33788,33793,33798,33802,33807,33809,33813,33817,33709,33839,33849,33861,33863,33864,33866,33869,33871,33873,33874,33878,33880,33881,33882,33884,33888,33892,33893,33895,33898,33904,33907,33908,33910,33912,33916,33917,33921,33925,33938,33939,33941,33950,33958,33960,33961,33962,33967,33969,33972,33978,33981,33982,33984,33986,33991,33992,33996,33999,34003,34012,34023,34026,34031,34032,34033,34034,34039,34098,34042,34043,34045,34050,34051,34055,34060,34062,34064,34076,34078,34082,34083,34084,34085,34087,34090,34091,34095,34099,34100,34102,34111,34118,34127,34128,34129,34130,34131,34134,34137,34140,34141,34142,34143,34144,34145,34146,34148,34155,34159,34169,34170,34171,34173,34175,34177,34181,34182,34185,34187,34188,34191,34195,34200,34205,34207,34208,34210,34213,34215,34228,34230,34231,34232,34236,34237,34238,34239,34242,34247,34250,34251,34254,34221,34264,34266,34271,34272,34278,34280,34285,34291,34294,34300,34303,34304,34308,34309,34317,34318,34320,34321,34322,34328,34329,34331,34334,34337,34343,34345,34358,34360,34362,34364,34365,34368,34370,34374,34386,34387,34390,34391,34392,34393,34397,34400,34401,34402,34403,34404,34409,34412,34415,34421,34422,34423,34426,34445,34449,34454,34456,34458,34460,34465,34470,34471,34472,34477,34481,34483,34484,34485,34487,34488,34489,34495,34496,34497,34499,34501,34513,34514,34517,34519,34522,34524,34528,34531,34533,34535,34440,34554,34556,34557,34564,34565,34567,34571,34574,34575,34576,34579,34580,34585,34590,34591,34593,34595,34600,34606,34607,34609,34610,34617,34618,34620,34621,34622,34624,34627,34629,34637,34648,34653,34657,34660,34661,34671,34673,34674,34683,34691,34692,34693,34694,34695,34696,34697,34699,34700,34704,34707,34709,34711,34712,34713,34718,34720,34723,34727,34732,34733,34734,34737,34741,34750,34751,34753,34760,34761,34762,34766,34773,34774,34777,34778,34780,34783,34786,34787,34788,34794,34795,34797,34801,34803,34808,34810,34815,34817,34819,34822,34825,34826,34827,34832,34841,34834,34835,34836,34840,34842,34843,34844,34846,34847,34856,34861,34862,34864,34866,34869,34874,34876,34881,34883,34885,34888,34889,34890,34891,34894,34897,34901,34902,34904,34906,34908,34911,34912,34916,34921,34929,34937,34939,34944,34968,34970,34971,34972,34975,34976,34984,34986,35002,35005,35006,35008,35018,35019,35020,35021,35022,35025,35026,35027,35035,35038,35047,35055,35056,35057,35061,35063,35073,35078,35085,35086,35087,35093,35094,35096,35097,35098,35100,35104,35110,35111,35112,35120,35121,35122,35125,35129,35130,35134,35136,35138,35141,35142,35145,35151,35154,35159,35162,35163,35164,35169,35170,35171,35179,35182,35184,35187,35189,35194,35195,35196,35197,35209,35213,35216,35220,35221,35227,35228,35231,35232,35237,35248,35252,35253,35254,35255,35260,35284,35285,35286,35287,35288,35301,35305,35307,35309,35313,35315,35318,35321,35325,35327,35332,35333,35335,35343,35345,35346,35348,35349,35358,35360,35362,35364,35366,35371,35372,35375,35381,35383,35389,35390,35392,35395,35397,35399,35401,35405,35406,35411,35414,35415,35416,35420,35421,35425,35429,35431,35445,35446,35447,35449,35450,35451,35454,35455,35456,35459,35462,35467,35471,35472,35474,35478,35479,35481,35487,35495,35497,35502,35503,35507,35510,35511,35515,35518,35523,35526,35528,35529,35530,35537,35539,35540,35541,35543,35549,35551,35564,35568,35572,35573,35574,35580,35583,35589,35590,35595,35601,35612,35614,35615,35594,35629,35632,35639,35644,35650,35651,35652,35653,35654,35656,35666,35667,35668,35673,35661,35678,35683,35693,35702,35704,35705,35708,35710,35713,35716,35717,35723,35725,35727,35732,35733,35740,35742,35743,35896,35897,35901,35902,35909,35911,35913,35915,35919,35921,35923,35924,35927,35928,35931,35933,35929,35939,35940,35942,35944,35945,35949,35955,35957,35958,35963,35966,35974,35975,35979,35984,35986,35987,35993,35995,35996,36004,36025,36026,36037,36038,36041,36043,36047,36054,36053,36057,36061,36065,36072,36076,36079,36080,36082,36085,36087,36088,36094,36095,36097,36099,36105,36114,36119,36123,36197,36201,36204,36206,36223,36226,36228,36232,36237,36240,36241,36245,36254,36255,36256,36262,36267,36268,36271,36274,36277,36279,36281,36283,36288,36293,36294,36295,36296,36298,36302,36305,36308,36309,36311,36313,36324,36325,36327,36332,36336,36284,36337,36338,36340,36349,36353,36356,36357,36358,36363,36369,36372,36374,36384,36385,36386,36387,36390,36391,36401,36403,36406,36407,36408,36409,36413,36416,36417,36427,36429,36430,36431,36436,36443,36444,36445,36446,36449,36450,36457,36460,36461,36463,36464,36465,36473,36474,36475,36482,36483,36489,36496,36498,36501,36506,36507,36509,36510,36514,36519,36521,36525,36526,36531,36533,36538,36539,36544,36545,36547,36548,36551,36559,36561,36564,36572,36584,36590,36592,36593,36599,36601,36602,36589,36608,36610,36615,36616,36623,36624,36630,36631,36632,36638,36640,36641,36643,36645,36647,36648,36652,36653,36654,36660,36661,36662,36663,36666,36672,36673,36675,36679,36687,36689,36690,36691,36692,36693,36696,36701,36702,36709,36765,36768,36769,36772,36773,36774,36789,36790,36792,36798,36800,36801,36806,36810,36811,36813,36816,36818,36819,36821,36832,36835,36836,36840,36846,36849,36853,36854,36859,36862,36866,36868,36872,36876,36888,36891,36904,36905,36911,36906,36908,36909,36915,36916,36919,36927,36931,36932,36940,36955,36957,36962,36966,36967,36972,36976,36980,36985,36997,37000,37003,37004,37006,37008,37013,37015,37016,37017,37019,37024,37025,37026,37029,37040,37042,37043,37044,37046,37053,37068,37054,37059,37060,37061,37063,37064,37077,37079,37080,37081,37084,37085,37087,37093,37074,37110,37099,37103,37104,37108,37118,37119,37120,37124,37125,37126,37128,37133,37136,37140,37142,37143,37144,37146,37148,37150,37152,37157,37154,37155,37159,37161,37166,37167,37169,37172,37174,37175,37177,37178,37180,37181,37187,37191,37192,37199,37203,37207,37209,37210,37211,37217,37220,37223,37229,37236,37241,37242,37243,37249,37251,37253,37254,37258,37262,37265,37267,37268,37269,37272,37278,37281,37286,37288,37292,37293,37294,37296,37297,37298,37299,37302,37307,37308,37309,37311,37314,37315,37317,37331,37332,37335,37337,37338,37342,37348,37349,37353,37354,37356,37357,37358,37359,37360,37361,37367,37369,37371,37373,37376,37377,37380,37381,37382,37383,37385,37386,37388,37392,37394,37395,37398,37400,37404,37405,37411,37412,37413,37414,37416,37422,37423,37424,37427,37429,37430,37432,37433,37434,37436,37438,37440,37442,37443,37446,37447,37450,37453,37454,37455,37457,37464,37465,37468,37469,37472,37473,37477,37479,37480,37481,37486,37487,37488,37493,37494,37495,37496,37497,37499,37500,37501,37503,37512,37513,37514,37517,37518,37522,37527,37529,37535,37536,37540,37541,37543,37544,37547,37551,37554,37558,37560,37562,37563,37564,37565,37567,37568,37569,37570,37571,37573,37574,37575,37576,37579,37580,37581,37582,37584,37587,37589,37591,37592,37593,37596,37597,37599,37600,37601,37603,37605,37607,37608,37612,37614,37616,37625,37627,37631,37632,37634,37640,37645,37649,37652,37653,37660,37661,37662,37663,37665,37668,37669,37671,37673,37674,37683,37684,37686,37687,37703,37704,37705,37712,37713,37714,37717,37719,37720,37722,37726,37732,37733,37735,37737,37738,37741,37743,37744,37745,37747,37748,37750,37754,37757,37759,37760,37761,37762,37768,37770,37771,37773,37775,37778,37781,37784,37787,37790,37793,37795,37796,37798,37800,37803,37812,37813,37814,37818,37801,37825,37828,37829,37830,37831,37833,37834,37835,37836,37837,37843,37849,37852,37854,37855,37858,37862,37863,37881,37879,37880,37882,37883,37885,37889,37890,37892,37896,37897,37901,37902,37903,37909,37910,37911,37919,37934,37935,37937,37938,37939,37940,37947,37951,37949,37955,37957,37960,37962,37964,37973,37977,37980,37983,37985,37987,37992,37995,37997,37998,37999,38001,38002,38020,38019,38264,38265,38270,38276,38280,38284,38285,38286,38301,38302,38303,38305,38310,38313,38315,38316,38324,38326,38330,38333,38335,38342,38344,38345,38347,38352,38353,38354,38355,38361,38362,38365,38366,38367,38368,38372,38374,38429,38430,38434,38436,38437,38438,38444,38449,38451,38455,38456,38457,38458,38460,38461,38465,38482,38484,38486,38487,38488,38497,38510,38516,38523,38524,38526,38527,38529,38530,38531,38532,38537,38545,38550,38554,38557,38559,38564,38565,38566,38569,38574,38575,38579,38586,38602,38610,23986,38616,38618,38621,38622,38623,38633,38639,38641,38650,38658,38659,38661,38665,38682,38683,38685,38689,38690,38691,38696,38705,38707,38721,38723,38730,38734,38735,38741,38743,38744,38746,38747,38755,38759,38762,38766,38771,38774,38775,38776,38779,38781,38783,38784,38793,38805,38806,38807,38809,38810,38814,38815,38818,38828,38830,38833,38834,38837,38838,38840,38841,38842,38844,38846,38847,38849,38852,38853,38855,38857,38858,38860,38861,38862,38864,38865,38868,38871,38872,38873,38877,38878,38880,38875,38881,38884,38895,38897,38900,38903,38904,38906,38919,38922,38937,38925,38926,38932,38934,38940,38942,38944,38947,38950,38955,38958,38959,38960,38962,38963,38965,38949,38974,38980,38983,38986,38993,38994,38995,38998,38999,39001,39002,39010,39011,39013,39014,39018,39020,39083,39085,39086,39088,39092,39095,39096,39098,39099,39103,39106,39109,39112,39116,39137,39139,39141,39142,39143,39146,39155,39158,39170,39175,39176,39185,39189,39190,39191,39194,39195,39196,39199,39202,39206,39207,39211,39217,39218,39219,39220,39221,39225,39226,39227,39228,39232,39233,39238,39239,39240,39245,39246,39252,39256,39257,39259,39260,39262,39263,39264,39323,39325,39327,39334,39344,39345,39346,39349,39353,39354,39357,39359,39363,39369,39379,39380,39385,39386,39388,39390,39399,39402,39403,39404,39408,39412,39413,39417,39421,39422,39426,39427,39428,39435,39436,39440,39441,39446,39454,39456,39458,39459,39460,39463,39469,39470,39475,39477,39478,39480,39495,39489,39492,39498,39499,39500,39502,39505,39508,39510,39517,39594,39596,39598,39599,39602,39604,39605,39606,39609,39611,39614,39615,39617,39619,39622,39624,39630,39632,39634,39637,39638,39639,39643,39644,39648,39652,39653,39655,39657,39660,39666,39667,39669,39673,39674,39677,39679,39680,39681,39682,39683,39684,39685,39688,39689,39691,39692,39693,39694,39696,39698,39702,39705,39707,39708,39712,39718,39723,39725,39731,39732,39733,39735,39737,39738,39741,39752,39755,39756,39765,39766,39767,39771,39774,39777,39779,39781,39782,39784,39786,39787,39788,39789,39790,39795,39797,39799,39800,39801,39807,39808,39812,39813,39814,39815,39817,39818,39819,39821,39823,39824,39828,39834,39837,39838,39846,39847,39849,39852,39856,39857,39858,39863,39864,39867,39868,39870,39871,39873,39879,39880,39886,39888,39895,39896,39901,39903,39909,39911,39914,39915,39919,39923,39927,39928,39929,39930,39933,39935,39936,39938,39947,39951,39953,39958,39960,39961,39962,39964,39966,39970,39971,39974,39975,39976,39977,39978,39985,39989,39990,39991,39997,40001,40003,40004,40005,40009,40010,40014,40015,40016,40019,40020,40022,40024,40027,40029,40030,40031,40035,40041,40042,40028,40043,40040,40046,40048,40050,40053,40055,40059,40166,40178,40183,40185,40203,40194,40209,40215,40216,40220,40221,40222,40239,40240,40242,40243,40244,40250,40252,40261,40253,40258,40259,40263,40266,40275,40276,40287,40291,40290,40293,40297,40298,40299,40304,40310,40311,40315,40316,40318,40323,40324,40326,40330,40333,40334,40338,40339,40341,40342,40343,40344,40353,40362,40364,40366,40369,40373,40377,40380,40383,40387,40391,40393,40394,40404,40405,40406,40407,40410,40414,40415,40416,40421,40423,40425,40427,40430,40432,40435,40436,40446,40458,40450,40455,40462,40464,40465,40466,40469,40470,40473,40476,40477,40570,40571,40572,40576,40578,40579,40580,40581,40583,40590,40591,40598,40600,40603,40606,40612,40616,40620,40622,40623,40624,40627,40628,40629,40646,40648,40651,40661,40671,40676,40679,40684,40685,40686,40688,40689,40690,40693,40696,40703,40706,40707,40713,40719,40720,40721,40722,40724,40726,40727,40729,40730,40731,40735,40738,40742,40746,40747,40751,40753,40754,40756,40759,40761,40762,40764,40765,40767,40769,40771,40772,40773,40774,40775,40787,40789,40790,40791,40792,40794,40797,40798,40808,40809,40813,40814,40815,40816,40817,40819,40821,40826,40829,40847,40848,40849,40850,40852,40854,40855,40862,40865,40866,40867,40869,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],
  4342. "ibm866":[1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,9617,9618,9619,9474,9508,9569,9570,9558,9557,9571,9553,9559,9565,9564,9563,9488,9492,9524,9516,9500,9472,9532,9566,9567,9562,9556,9577,9574,9568,9552,9580,9575,9576,9572,9573,9561,9560,9554,9555,9579,9578,9496,9484,9608,9604,9612,9616,9600,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1025,1105,1028,1108,1031,1111,1038,1118,176,8729,183,8730,8470,164,9632,160],
  4343. "iso-8859-2":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,728,321,164,317,346,167,168,352,350,356,377,173,381,379,176,261,731,322,180,318,347,711,184,353,351,357,378,733,382,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729],
  4344. "iso-8859-3":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,294,728,163,164,null,292,167,168,304,350,286,308,173,null,379,176,295,178,179,180,181,293,183,184,305,351,287,309,189,null,380,192,193,194,null,196,266,264,199,200,201,202,203,204,205,206,207,null,209,210,211,212,288,214,215,284,217,218,219,220,364,348,223,224,225,226,null,228,267,265,231,232,233,234,235,236,237,238,239,null,241,242,243,244,289,246,247,285,249,250,251,252,365,349,729],
  4345. "iso-8859-4":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,312,342,164,296,315,167,168,352,274,290,358,173,381,175,176,261,731,343,180,297,316,711,184,353,275,291,359,330,382,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,298,272,325,332,310,212,213,214,215,216,370,218,219,220,360,362,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,299,273,326,333,311,244,245,246,247,248,371,250,251,252,361,363,729],
  4346. "iso-8859-5":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,173,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8470,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,167,1118,1119],
  4347. "iso-8859-6":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,null,null,null,164,null,null,null,null,null,null,null,1548,173,null,null,null,null,null,null,null,null,null,null,null,null,null,1563,null,null,null,1567,null,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,null,null,null,null,null,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,null,null,null,null,null,null,null,null,null,null,null,null,null],
  4348. "iso-8859-7":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,8216,8217,163,8364,8367,166,167,168,169,890,171,172,173,null,8213,176,177,178,179,900,901,902,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,null,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,null],
  4349. "iso-8859-8":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,null,162,163,164,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,8215,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,null,null,8206,8207,null],
  4350. "iso-8859-10":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,274,290,298,296,310,167,315,272,352,358,381,173,362,330,176,261,275,291,299,297,311,183,316,273,353,359,382,8213,363,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,207,208,325,332,211,212,213,214,360,216,370,218,219,220,221,222,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,239,240,326,333,243,244,245,246,361,248,371,250,251,252,253,254,312],
  4351. "iso-8859-13":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,8221,162,163,164,8222,166,167,216,169,342,171,172,173,174,198,176,177,178,179,8220,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,8217],
  4352. "iso-8859-14":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,7682,7683,163,266,267,7690,167,7808,169,7810,7691,7922,173,174,376,7710,7711,288,289,7744,7745,182,7766,7809,7767,7811,7776,7923,7812,7813,7777,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,372,209,210,211,212,213,214,7786,216,217,218,219,220,221,374,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,373,241,242,243,244,245,246,7787,248,249,250,251,252,253,375,255],
  4353. "iso-8859-15":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,8364,165,352,167,353,169,170,171,172,173,174,175,176,177,178,179,381,181,182,183,382,185,186,187,338,339,376,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255],
  4354. "iso-8859-16":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,261,321,8364,8222,352,167,353,169,536,171,377,173,378,379,176,177,268,322,381,8221,182,183,382,269,537,187,338,339,376,380,192,193,194,258,196,262,198,199,200,201,202,203,204,205,206,207,272,323,210,211,212,336,214,346,368,217,218,219,220,280,538,223,224,225,226,259,228,263,230,231,232,233,234,235,236,237,238,239,273,324,242,243,244,337,246,347,369,249,250,251,252,281,539,255],
  4355. "koi8-r":[9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,1025,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066],
  4356. "koi8-u":[9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,1108,9556,1110,1111,9559,9560,9561,9562,9563,1169,1118,9566,9567,9568,9569,1025,1028,9571,1030,1031,9574,9575,9576,9577,9578,1168,1038,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066],
  4357. "macintosh":[196,197,199,201,209,214,220,225,224,226,228,227,229,231,233,232,234,235,237,236,238,239,241,243,242,244,246,245,250,249,251,252,8224,176,162,163,167,8226,182,223,174,169,8482,180,168,8800,198,216,8734,177,8804,8805,165,181,8706,8721,8719,960,8747,170,186,937,230,248,191,161,172,8730,402,8776,8710,171,187,8230,160,192,195,213,338,339,8211,8212,8220,8221,8216,8217,247,9674,255,376,8260,8364,8249,8250,64257,64258,8225,183,8218,8222,8240,194,202,193,203,200,205,206,207,204,211,212,63743,210,218,219,217,305,710,732,175,728,729,730,184,733,731,711],
  4358. "windows-874":[8364,129,130,131,132,8230,134,135,136,137,138,139,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,153,154,155,156,157,158,159,160,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,null,null,null,null,3647,3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,null,null,null,null],
  4359. "windows-1250":[8364,129,8218,131,8222,8230,8224,8225,136,8240,352,8249,346,356,381,377,144,8216,8217,8220,8221,8226,8211,8212,152,8482,353,8250,347,357,382,378,160,711,728,321,164,260,166,167,168,169,350,171,172,173,174,379,176,177,731,322,180,181,182,183,184,261,351,187,317,733,318,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729],
  4360. "windows-1251":[1026,1027,8218,1107,8222,8230,8224,8225,8364,8240,1033,8249,1034,1036,1035,1039,1106,8216,8217,8220,8221,8226,8211,8212,152,8482,1113,8250,1114,1116,1115,1119,160,1038,1118,1032,164,1168,166,167,1025,169,1028,171,172,173,174,1031,176,177,1030,1110,1169,181,182,183,1105,8470,1108,187,1112,1029,1109,1111,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103],
  4361. "windows-1252":[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,381,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,382,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255],
  4362. "windows-1253":[8364,129,8218,402,8222,8230,8224,8225,136,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,157,158,159,160,901,902,163,164,165,166,167,168,169,null,171,172,173,174,8213,176,177,178,179,900,181,182,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,null,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,null],
  4363. "windows-1254":[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,286,209,210,211,212,213,214,215,216,217,218,219,220,304,350,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,287,241,242,243,244,245,246,247,248,249,250,251,252,305,351,255],
  4364. "windows-1255":[8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,156,157,158,159,160,161,162,163,8362,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,191,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1520,1521,1522,1523,1524,null,null,null,null,null,null,null,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,null,null,8206,8207,null],
  4365. "windows-1256":[8364,1662,8218,402,8222,8230,8224,8225,710,8240,1657,8249,338,1670,1688,1672,1711,8216,8217,8220,8221,8226,8211,8212,1705,8482,1681,8250,339,8204,8205,1722,160,1548,162,163,164,165,166,167,168,169,1726,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,1563,187,188,189,190,1567,1729,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,215,1591,1592,1593,1594,1600,1601,1602,1603,224,1604,226,1605,1606,1607,1608,231,232,233,234,235,1609,1610,238,239,1611,1612,1613,1614,244,1615,1616,247,1617,249,1618,251,252,8206,8207,1746],
  4366. "windows-1257":[8364,129,8218,131,8222,8230,8224,8225,136,8240,138,8249,140,168,711,184,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,175,731,159,160,null,162,163,164,null,166,167,216,169,342,171,172,173,174,198,176,177,178,179,180,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,729],
  4367. "windows-1258":[8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,258,196,197,198,199,200,201,202,203,768,205,206,207,272,209,777,211,212,416,214,215,216,217,218,219,220,431,771,223,224,225,226,259,228,229,230,231,232,233,234,235,769,237,238,239,273,241,803,243,244,417,246,247,248,249,250,251,252,432,8363,255],
  4368. "x-mac-cyrillic":[1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,8224,176,1168,163,167,8226,182,1030,174,169,8482,1026,1106,8800,1027,1107,8734,177,8804,8805,1110,181,1169,1032,1028,1108,1031,1111,1033,1113,1034,1114,1112,1029,172,8730,402,8776,8710,171,187,8230,160,1035,1115,1036,1116,1109,8211,8212,8220,8221,8216,8217,247,8222,1038,1118,1039,1119,8470,1025,1105,1103,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,8364]
  4369. };
  4370. // For strict environments where `this` inside the global scope
  4371. // is `undefined`, take a pure object instead
  4372. }(this || {}));
  4373. },{}],68:[function(require,module,exports){
  4374. // This is free and unencumbered software released into the public domain.
  4375. // See LICENSE.md for more information.
  4376. /**
  4377. * @fileoverview Global |this| required for resolving indexes in node.
  4378. * @suppress {globalThis}
  4379. */
  4380. (function(global) {
  4381. 'use strict';
  4382. // If we're in node require encoding-indexes and attach it to the global.
  4383. if (typeof module !== "undefined" && module.exports &&
  4384. !global["encoding-indexes"]) {
  4385. global["encoding-indexes"] =
  4386. require("./encoding-indexes.js")["encoding-indexes"];
  4387. }
  4388. //
  4389. // Utilities
  4390. //
  4391. /**
  4392. * @param {number} a The number to test.
  4393. * @param {number} min The minimum value in the range, inclusive.
  4394. * @param {number} max The maximum value in the range, inclusive.
  4395. * @return {boolean} True if a >= min and a <= max.
  4396. */
  4397. function inRange(a, min, max) {
  4398. return min <= a && a <= max;
  4399. }
  4400. /**
  4401. * @param {!Array.<*>} array The array to check.
  4402. * @param {*} item The item to look for in the array.
  4403. * @return {boolean} True if the item appears in the array.
  4404. */
  4405. function includes(array, item) {
  4406. return array.indexOf(item) !== -1;
  4407. }
  4408. var floor = Math.floor;
  4409. /**
  4410. * @param {*} o
  4411. * @return {Object}
  4412. */
  4413. function ToDictionary(o) {
  4414. if (o === undefined) return {};
  4415. if (o === Object(o)) return o;
  4416. throw TypeError('Could not convert argument to dictionary');
  4417. }
  4418. /**
  4419. * @param {string} string Input string of UTF-16 code units.
  4420. * @return {!Array.<number>} Code points.
  4421. */
  4422. function stringToCodePoints(string) {
  4423. // https://heycam.github.io/webidl/#dfn-obtain-unicode
  4424. // 1. Let S be the DOMString value.
  4425. var s = String(string);
  4426. // 2. Let n be the length of S.
  4427. var n = s.length;
  4428. // 3. Initialize i to 0.
  4429. var i = 0;
  4430. // 4. Initialize U to be an empty sequence of Unicode characters.
  4431. var u = [];
  4432. // 5. While i < n:
  4433. while (i < n) {
  4434. // 1. Let c be the code unit in S at index i.
  4435. var c = s.charCodeAt(i);
  4436. // 2. Depending on the value of c:
  4437. // c < 0xD800 or c > 0xDFFF
  4438. if (c < 0xD800 || c > 0xDFFF) {
  4439. // Append to U the Unicode character with code point c.
  4440. u.push(c);
  4441. }
  4442. // 0xDC00 ≤ c ≤ 0xDFFF
  4443. else if (0xDC00 <= c && c <= 0xDFFF) {
  4444. // Append to U a U+FFFD REPLACEMENT CHARACTER.
  4445. u.push(0xFFFD);
  4446. }
  4447. // 0xD800 ≤ c ≤ 0xDBFF
  4448. else if (0xD800 <= c && c <= 0xDBFF) {
  4449. // 1. If i = n−1, then append to U a U+FFFD REPLACEMENT
  4450. // CHARACTER.
  4451. if (i === n - 1) {
  4452. u.push(0xFFFD);
  4453. }
  4454. // 2. Otherwise, i < n−1:
  4455. else {
  4456. // 1. Let d be the code unit in S at index i+1.
  4457. var d = s.charCodeAt(i + 1);
  4458. // 2. If 0xDC00 ≤ d ≤ 0xDFFF, then:
  4459. if (0xDC00 <= d && d <= 0xDFFF) {
  4460. // 1. Let a be c & 0x3FF.
  4461. var a = c & 0x3FF;
  4462. // 2. Let b be d & 0x3FF.
  4463. var b = d & 0x3FF;
  4464. // 3. Append to U the Unicode character with code point
  4465. // 2^16+2^10*a+b.
  4466. u.push(0x10000 + (a << 10) + b);
  4467. // 4. Set i to i+1.
  4468. i += 1;
  4469. }
  4470. // 3. Otherwise, d < 0xDC00 or d > 0xDFFF. Append to U a
  4471. // U+FFFD REPLACEMENT CHARACTER.
  4472. else {
  4473. u.push(0xFFFD);
  4474. }
  4475. }
  4476. }
  4477. // 3. Set i to i+1.
  4478. i += 1;
  4479. }
  4480. // 6. Return U.
  4481. return u;
  4482. }
  4483. /**
  4484. * @param {!Array.<number>} code_points Array of code points.
  4485. * @return {string} string String of UTF-16 code units.
  4486. */
  4487. function codePointsToString(code_points) {
  4488. var s = '';
  4489. for (var i = 0; i < code_points.length; ++i) {
  4490. var cp = code_points[i];
  4491. if (cp <= 0xFFFF) {
  4492. s += String.fromCharCode(cp);
  4493. } else {
  4494. cp -= 0x10000;
  4495. s += String.fromCharCode((cp >> 10) + 0xD800,
  4496. (cp & 0x3FF) + 0xDC00);
  4497. }
  4498. }
  4499. return s;
  4500. }
  4501. //
  4502. // Implementation of Encoding specification
  4503. // https://encoding.spec.whatwg.org/
  4504. //
  4505. //
  4506. // 4. Terminology
  4507. //
  4508. /**
  4509. * An ASCII byte is a byte in the range 0x00 to 0x7F, inclusive.
  4510. * @param {number} a The number to test.
  4511. * @return {boolean} True if a is in the range 0x00 to 0x7F, inclusive.
  4512. */
  4513. function isASCIIByte(a) {
  4514. return 0x00 <= a && a <= 0x7F;
  4515. }
  4516. /**
  4517. * An ASCII code point is a code point in the range U+0000 to
  4518. * U+007F, inclusive.
  4519. */
  4520. var isASCIICodePoint = isASCIIByte;
  4521. /**
  4522. * End-of-stream is a special token that signifies no more tokens
  4523. * are in the stream.
  4524. * @const
  4525. */ var end_of_stream = -1;
  4526. /**
  4527. * A stream represents an ordered sequence of tokens.
  4528. *
  4529. * @constructor
  4530. * @param {!(Array.<number>|Uint8Array)} tokens Array of tokens that provide
  4531. * the stream.
  4532. */
  4533. function Stream(tokens) {
  4534. /** @type {!Array.<number>} */
  4535. this.tokens = [].slice.call(tokens);
  4536. // Reversed as push/pop is more efficient than shift/unshift.
  4537. this.tokens.reverse();
  4538. }
  4539. Stream.prototype = {
  4540. /**
  4541. * @return {boolean} True if end-of-stream has been hit.
  4542. */
  4543. endOfStream: function() {
  4544. return !this.tokens.length;
  4545. },
  4546. /**
  4547. * When a token is read from a stream, the first token in the
  4548. * stream must be returned and subsequently removed, and
  4549. * end-of-stream must be returned otherwise.
  4550. *
  4551. * @return {number} Get the next token from the stream, or
  4552. * end_of_stream.
  4553. */
  4554. read: function() {
  4555. if (!this.tokens.length)
  4556. return end_of_stream;
  4557. return this.tokens.pop();
  4558. },
  4559. /**
  4560. * When one or more tokens are prepended to a stream, those tokens
  4561. * must be inserted, in given order, before the first token in the
  4562. * stream.
  4563. *
  4564. * @param {(number|!Array.<number>)} token The token(s) to prepend to the
  4565. * stream.
  4566. */
  4567. prepend: function(token) {
  4568. if (Array.isArray(token)) {
  4569. var tokens = /**@type {!Array.<number>}*/(token);
  4570. while (tokens.length)
  4571. this.tokens.push(tokens.pop());
  4572. } else {
  4573. this.tokens.push(token);
  4574. }
  4575. },
  4576. /**
  4577. * When one or more tokens are pushed to a stream, those tokens
  4578. * must be inserted, in given order, after the last token in the
  4579. * stream.
  4580. *
  4581. * @param {(number|!Array.<number>)} token The tokens(s) to push to the
  4582. * stream.
  4583. */
  4584. push: function(token) {
  4585. if (Array.isArray(token)) {
  4586. var tokens = /**@type {!Array.<number>}*/(token);
  4587. while (tokens.length)
  4588. this.tokens.unshift(tokens.shift());
  4589. } else {
  4590. this.tokens.unshift(token);
  4591. }
  4592. }
  4593. };
  4594. //
  4595. // 5. Encodings
  4596. //
  4597. // 5.1 Encoders and decoders
  4598. /** @const */
  4599. var finished = -1;
  4600. /**
  4601. * @param {boolean} fatal If true, decoding errors raise an exception.
  4602. * @param {number=} opt_code_point Override the standard fallback code point.
  4603. * @return {number} The code point to insert on a decoding error.
  4604. */
  4605. function decoderError(fatal, opt_code_point) {
  4606. if (fatal)
  4607. throw TypeError('Decoder error');
  4608. return opt_code_point || 0xFFFD;
  4609. }
  4610. /**
  4611. * @param {number} code_point The code point that could not be encoded.
  4612. * @return {number} Always throws, no value is actually returned.
  4613. */
  4614. function encoderError(code_point) {
  4615. throw TypeError('The code point ' + code_point + ' could not be encoded.');
  4616. }
  4617. /** @interface */
  4618. function Decoder() {}
  4619. Decoder.prototype = {
  4620. /**
  4621. * @param {Stream} stream The stream of bytes being decoded.
  4622. * @param {number} bite The next byte read from the stream.
  4623. * @return {?(number|!Array.<number>)} The next code point(s)
  4624. * decoded, or null if not enough data exists in the input
  4625. * stream to decode a complete code point, or |finished|.
  4626. */
  4627. handler: function(stream, bite) {}
  4628. };
  4629. /** @interface */
  4630. function Encoder() {}
  4631. Encoder.prototype = {
  4632. /**
  4633. * @param {Stream} stream The stream of code points being encoded.
  4634. * @param {number} code_point Next code point read from the stream.
  4635. * @return {(number|!Array.<number>)} Byte(s) to emit, or |finished|.
  4636. */
  4637. handler: function(stream, code_point) {}
  4638. };
  4639. // 5.2 Names and labels
  4640. // TODO: Define @typedef for Encoding: {name:string,labels:Array.<string>}
  4641. // https://github.com/google/closure-compiler/issues/247
  4642. /**
  4643. * @param {string} label The encoding label.
  4644. * @return {?{name:string,labels:Array.<string>}}
  4645. */
  4646. function getEncoding(label) {
  4647. // 1. Remove any leading and trailing ASCII whitespace from label.
  4648. label = String(label).trim().toLowerCase();
  4649. // 2. If label is an ASCII case-insensitive match for any of the
  4650. // labels listed in the table below, return the corresponding
  4651. // encoding, and failure otherwise.
  4652. if (Object.prototype.hasOwnProperty.call(label_to_encoding, label)) {
  4653. return label_to_encoding[label];
  4654. }
  4655. return null;
  4656. }
  4657. /**
  4658. * Encodings table: https://encoding.spec.whatwg.org/encodings.json
  4659. * @const
  4660. * @type {!Array.<{
  4661. * heading: string,
  4662. * encodings: Array.<{name:string,labels:Array.<string>}>
  4663. * }>}
  4664. */
  4665. var encodings = [
  4666. {
  4667. "encodings": [
  4668. {
  4669. "labels": [
  4670. "unicode-1-1-utf-8",
  4671. "utf-8",
  4672. "utf8"
  4673. ],
  4674. "name": "UTF-8"
  4675. }
  4676. ],
  4677. "heading": "The Encoding"
  4678. },
  4679. {
  4680. "encodings": [
  4681. {
  4682. "labels": [
  4683. "866",
  4684. "cp866",
  4685. "csibm866",
  4686. "ibm866"
  4687. ],
  4688. "name": "IBM866"
  4689. },
  4690. {
  4691. "labels": [
  4692. "csisolatin2",
  4693. "iso-8859-2",
  4694. "iso-ir-101",
  4695. "iso8859-2",
  4696. "iso88592",
  4697. "iso_8859-2",
  4698. "iso_8859-2:1987",
  4699. "l2",
  4700. "latin2"
  4701. ],
  4702. "name": "ISO-8859-2"
  4703. },
  4704. {
  4705. "labels": [
  4706. "csisolatin3",
  4707. "iso-8859-3",
  4708. "iso-ir-109",
  4709. "iso8859-3",
  4710. "iso88593",
  4711. "iso_8859-3",
  4712. "iso_8859-3:1988",
  4713. "l3",
  4714. "latin3"
  4715. ],
  4716. "name": "ISO-8859-3"
  4717. },
  4718. {
  4719. "labels": [
  4720. "csisolatin4",
  4721. "iso-8859-4",
  4722. "iso-ir-110",
  4723. "iso8859-4",
  4724. "iso88594",
  4725. "iso_8859-4",
  4726. "iso_8859-4:1988",
  4727. "l4",
  4728. "latin4"
  4729. ],
  4730. "name": "ISO-8859-4"
  4731. },
  4732. {
  4733. "labels": [
  4734. "csisolatincyrillic",
  4735. "cyrillic",
  4736. "iso-8859-5",
  4737. "iso-ir-144",
  4738. "iso8859-5",
  4739. "iso88595",
  4740. "iso_8859-5",
  4741. "iso_8859-5:1988"
  4742. ],
  4743. "name": "ISO-8859-5"
  4744. },
  4745. {
  4746. "labels": [
  4747. "arabic",
  4748. "asmo-708",
  4749. "csiso88596e",
  4750. "csiso88596i",
  4751. "csisolatinarabic",
  4752. "ecma-114",
  4753. "iso-8859-6",
  4754. "iso-8859-6-e",
  4755. "iso-8859-6-i",
  4756. "iso-ir-127",
  4757. "iso8859-6",
  4758. "iso88596",
  4759. "iso_8859-6",
  4760. "iso_8859-6:1987"
  4761. ],
  4762. "name": "ISO-8859-6"
  4763. },
  4764. {
  4765. "labels": [
  4766. "csisolatingreek",
  4767. "ecma-118",
  4768. "elot_928",
  4769. "greek",
  4770. "greek8",
  4771. "iso-8859-7",
  4772. "iso-ir-126",
  4773. "iso8859-7",
  4774. "iso88597",
  4775. "iso_8859-7",
  4776. "iso_8859-7:1987",
  4777. "sun_eu_greek"
  4778. ],
  4779. "name": "ISO-8859-7"
  4780. },
  4781. {
  4782. "labels": [
  4783. "csiso88598e",
  4784. "csisolatinhebrew",
  4785. "hebrew",
  4786. "iso-8859-8",
  4787. "iso-8859-8-e",
  4788. "iso-ir-138",
  4789. "iso8859-8",
  4790. "iso88598",
  4791. "iso_8859-8",
  4792. "iso_8859-8:1988",
  4793. "visual"
  4794. ],
  4795. "name": "ISO-8859-8"
  4796. },
  4797. {
  4798. "labels": [
  4799. "csiso88598i",
  4800. "iso-8859-8-i",
  4801. "logical"
  4802. ],
  4803. "name": "ISO-8859-8-I"
  4804. },
  4805. {
  4806. "labels": [
  4807. "csisolatin6",
  4808. "iso-8859-10",
  4809. "iso-ir-157",
  4810. "iso8859-10",
  4811. "iso885910",
  4812. "l6",
  4813. "latin6"
  4814. ],
  4815. "name": "ISO-8859-10"
  4816. },
  4817. {
  4818. "labels": [
  4819. "iso-8859-13",
  4820. "iso8859-13",
  4821. "iso885913"
  4822. ],
  4823. "name": "ISO-8859-13"
  4824. },
  4825. {
  4826. "labels": [
  4827. "iso-8859-14",
  4828. "iso8859-14",
  4829. "iso885914"
  4830. ],
  4831. "name": "ISO-8859-14"
  4832. },
  4833. {
  4834. "labels": [
  4835. "csisolatin9",
  4836. "iso-8859-15",
  4837. "iso8859-15",
  4838. "iso885915",
  4839. "iso_8859-15",
  4840. "l9"
  4841. ],
  4842. "name": "ISO-8859-15"
  4843. },
  4844. {
  4845. "labels": [
  4846. "iso-8859-16"
  4847. ],
  4848. "name": "ISO-8859-16"
  4849. },
  4850. {
  4851. "labels": [
  4852. "cskoi8r",
  4853. "koi",
  4854. "koi8",
  4855. "koi8-r",
  4856. "koi8_r"
  4857. ],
  4858. "name": "KOI8-R"
  4859. },
  4860. {
  4861. "labels": [
  4862. "koi8-ru",
  4863. "koi8-u"
  4864. ],
  4865. "name": "KOI8-U"
  4866. },
  4867. {
  4868. "labels": [
  4869. "csmacintosh",
  4870. "mac",
  4871. "macintosh",
  4872. "x-mac-roman"
  4873. ],
  4874. "name": "macintosh"
  4875. },
  4876. {
  4877. "labels": [
  4878. "dos-874",
  4879. "iso-8859-11",
  4880. "iso8859-11",
  4881. "iso885911",
  4882. "tis-620",
  4883. "windows-874"
  4884. ],
  4885. "name": "windows-874"
  4886. },
  4887. {
  4888. "labels": [
  4889. "cp1250",
  4890. "windows-1250",
  4891. "x-cp1250"
  4892. ],
  4893. "name": "windows-1250"
  4894. },
  4895. {
  4896. "labels": [
  4897. "cp1251",
  4898. "windows-1251",
  4899. "x-cp1251"
  4900. ],
  4901. "name": "windows-1251"
  4902. },
  4903. {
  4904. "labels": [
  4905. "ansi_x3.4-1968",
  4906. "ascii",
  4907. "cp1252",
  4908. "cp819",
  4909. "csisolatin1",
  4910. "ibm819",
  4911. "iso-8859-1",
  4912. "iso-ir-100",
  4913. "iso8859-1",
  4914. "iso88591",
  4915. "iso_8859-1",
  4916. "iso_8859-1:1987",
  4917. "l1",
  4918. "latin1",
  4919. "us-ascii",
  4920. "windows-1252",
  4921. "x-cp1252"
  4922. ],
  4923. "name": "windows-1252"
  4924. },
  4925. {
  4926. "labels": [
  4927. "cp1253",
  4928. "windows-1253",
  4929. "x-cp1253"
  4930. ],
  4931. "name": "windows-1253"
  4932. },
  4933. {
  4934. "labels": [
  4935. "cp1254",
  4936. "csisolatin5",
  4937. "iso-8859-9",
  4938. "iso-ir-148",
  4939. "iso8859-9",
  4940. "iso88599",
  4941. "iso_8859-9",
  4942. "iso_8859-9:1989",
  4943. "l5",
  4944. "latin5",
  4945. "windows-1254",
  4946. "x-cp1254"
  4947. ],
  4948. "name": "windows-1254"
  4949. },
  4950. {
  4951. "labels": [
  4952. "cp1255",
  4953. "windows-1255",
  4954. "x-cp1255"
  4955. ],
  4956. "name": "windows-1255"
  4957. },
  4958. {
  4959. "labels": [
  4960. "cp1256",
  4961. "windows-1256",
  4962. "x-cp1256"
  4963. ],
  4964. "name": "windows-1256"
  4965. },
  4966. {
  4967. "labels": [
  4968. "cp1257",
  4969. "windows-1257",
  4970. "x-cp1257"
  4971. ],
  4972. "name": "windows-1257"
  4973. },
  4974. {
  4975. "labels": [
  4976. "cp1258",
  4977. "windows-1258",
  4978. "x-cp1258"
  4979. ],
  4980. "name": "windows-1258"
  4981. },
  4982. {
  4983. "labels": [
  4984. "x-mac-cyrillic",
  4985. "x-mac-ukrainian"
  4986. ],
  4987. "name": "x-mac-cyrillic"
  4988. }
  4989. ],
  4990. "heading": "Legacy single-byte encodings"
  4991. },
  4992. {
  4993. "encodings": [
  4994. {
  4995. "labels": [
  4996. "chinese",
  4997. "csgb2312",
  4998. "csiso58gb231280",
  4999. "gb2312",
  5000. "gb_2312",
  5001. "gb_2312-80",
  5002. "gbk",
  5003. "iso-ir-58",
  5004. "x-gbk"
  5005. ],
  5006. "name": "GBK"
  5007. },
  5008. {
  5009. "labels": [
  5010. "gb18030"
  5011. ],
  5012. "name": "gb18030"
  5013. }
  5014. ],
  5015. "heading": "Legacy multi-byte Chinese (simplified) encodings"
  5016. },
  5017. {
  5018. "encodings": [
  5019. {
  5020. "labels": [
  5021. "big5",
  5022. "big5-hkscs",
  5023. "cn-big5",
  5024. "csbig5",
  5025. "x-x-big5"
  5026. ],
  5027. "name": "Big5"
  5028. }
  5029. ],
  5030. "heading": "Legacy multi-byte Chinese (traditional) encodings"
  5031. },
  5032. {
  5033. "encodings": [
  5034. {
  5035. "labels": [
  5036. "cseucpkdfmtjapanese",
  5037. "euc-jp",
  5038. "x-euc-jp"
  5039. ],
  5040. "name": "EUC-JP"
  5041. },
  5042. {
  5043. "labels": [
  5044. "csiso2022jp",
  5045. "iso-2022-jp"
  5046. ],
  5047. "name": "ISO-2022-JP"
  5048. },
  5049. {
  5050. "labels": [
  5051. "csshiftjis",
  5052. "ms932",
  5053. "ms_kanji",
  5054. "shift-jis",
  5055. "shift_jis",
  5056. "sjis",
  5057. "windows-31j",
  5058. "x-sjis"
  5059. ],
  5060. "name": "Shift_JIS"
  5061. }
  5062. ],
  5063. "heading": "Legacy multi-byte Japanese encodings"
  5064. },
  5065. {
  5066. "encodings": [
  5067. {
  5068. "labels": [
  5069. "cseuckr",
  5070. "csksc56011987",
  5071. "euc-kr",
  5072. "iso-ir-149",
  5073. "korean",
  5074. "ks_c_5601-1987",
  5075. "ks_c_5601-1989",
  5076. "ksc5601",
  5077. "ksc_5601",
  5078. "windows-949"
  5079. ],
  5080. "name": "EUC-KR"
  5081. }
  5082. ],
  5083. "heading": "Legacy multi-byte Korean encodings"
  5084. },
  5085. {
  5086. "encodings": [
  5087. {
  5088. "labels": [
  5089. "csiso2022kr",
  5090. "hz-gb-2312",
  5091. "iso-2022-cn",
  5092. "iso-2022-cn-ext",
  5093. "iso-2022-kr"
  5094. ],
  5095. "name": "replacement"
  5096. },
  5097. {
  5098. "labels": [
  5099. "utf-16be"
  5100. ],
  5101. "name": "UTF-16BE"
  5102. },
  5103. {
  5104. "labels": [
  5105. "utf-16",
  5106. "utf-16le"
  5107. ],
  5108. "name": "UTF-16LE"
  5109. },
  5110. {
  5111. "labels": [
  5112. "x-user-defined"
  5113. ],
  5114. "name": "x-user-defined"
  5115. }
  5116. ],
  5117. "heading": "Legacy miscellaneous encodings"
  5118. }
  5119. ];
  5120. // Label to encoding registry.
  5121. /** @type {Object.<string,{name:string,labels:Array.<string>}>} */
  5122. var label_to_encoding = {};
  5123. encodings.forEach(function(category) {
  5124. category.encodings.forEach(function(encoding) {
  5125. encoding.labels.forEach(function(label) {
  5126. label_to_encoding[label] = encoding;
  5127. });
  5128. });
  5129. });
  5130. // Registry of of encoder/decoder factories, by encoding name.
  5131. /** @type {Object.<string, function({fatal:boolean}): Encoder>} */
  5132. var encoders = {};
  5133. /** @type {Object.<string, function({fatal:boolean}): Decoder>} */
  5134. var decoders = {};
  5135. //
  5136. // 6. Indexes
  5137. //
  5138. /**
  5139. * @param {number} pointer The |pointer| to search for.
  5140. * @param {(!Array.<?number>|undefined)} index The |index| to search within.
  5141. * @return {?number} The code point corresponding to |pointer| in |index|,
  5142. * or null if |code point| is not in |index|.
  5143. */
  5144. function indexCodePointFor(pointer, index) {
  5145. if (!index) return null;
  5146. return index[pointer] || null;
  5147. }
  5148. /**
  5149. * @param {number} code_point The |code point| to search for.
  5150. * @param {!Array.<?number>} index The |index| to search within.
  5151. * @return {?number} The first pointer corresponding to |code point| in
  5152. * |index|, or null if |code point| is not in |index|.
  5153. */
  5154. function indexPointerFor(code_point, index) {
  5155. var pointer = index.indexOf(code_point);
  5156. return pointer === -1 ? null : pointer;
  5157. }
  5158. /**
  5159. * @param {string} name Name of the index.
  5160. * @return {(!Array.<number>|!Array.<Array.<number>>)}
  5161. * */
  5162. function index(name) {
  5163. if (!('encoding-indexes' in global)) {
  5164. throw Error("Indexes missing." +
  5165. " Did you forget to include encoding-indexes.js first?");
  5166. }
  5167. return global['encoding-indexes'][name];
  5168. }
  5169. /**
  5170. * @param {number} pointer The |pointer| to search for in the gb18030 index.
  5171. * @return {?number} The code point corresponding to |pointer| in |index|,
  5172. * or null if |code point| is not in the gb18030 index.
  5173. */
  5174. function indexGB18030RangesCodePointFor(pointer) {
  5175. // 1. If pointer is greater than 39419 and less than 189000, or
  5176. // pointer is greater than 1237575, return null.
  5177. if ((pointer > 39419 && pointer < 189000) || (pointer > 1237575))
  5178. return null;
  5179. // 2. If pointer is 7457, return code point U+E7C7.
  5180. if (pointer === 7457) return 0xE7C7;
  5181. // 3. Let offset be the last pointer in index gb18030 ranges that
  5182. // is equal to or less than pointer and let code point offset be
  5183. // its corresponding code point.
  5184. var offset = 0;
  5185. var code_point_offset = 0;
  5186. var idx = index('gb18030-ranges');
  5187. var i;
  5188. for (i = 0; i < idx.length; ++i) {
  5189. /** @type {!Array.<number>} */
  5190. var entry = idx[i];
  5191. if (entry[0] <= pointer) {
  5192. offset = entry[0];
  5193. code_point_offset = entry[1];
  5194. } else {
  5195. break;
  5196. }
  5197. }
  5198. // 4. Return a code point whose value is code point offset +
  5199. // pointer − offset.
  5200. return code_point_offset + pointer - offset;
  5201. }
  5202. /**
  5203. * @param {number} code_point The |code point| to locate in the gb18030 index.
  5204. * @return {number} The first pointer corresponding to |code point| in the
  5205. * gb18030 index.
  5206. */
  5207. function indexGB18030RangesPointerFor(code_point) {
  5208. // 1. If code point is U+E7C7, return pointer 7457.
  5209. if (code_point === 0xE7C7) return 7457;
  5210. // 2. Let offset be the last code point in index gb18030 ranges
  5211. // that is equal to or less than code point and let pointer offset
  5212. // be its corresponding pointer.
  5213. var offset = 0;
  5214. var pointer_offset = 0;
  5215. var idx = index('gb18030-ranges');
  5216. var i;
  5217. for (i = 0; i < idx.length; ++i) {
  5218. /** @type {!Array.<number>} */
  5219. var entry = idx[i];
  5220. if (entry[1] <= code_point) {
  5221. offset = entry[1];
  5222. pointer_offset = entry[0];
  5223. } else {
  5224. break;
  5225. }
  5226. }
  5227. // 3. Return a pointer whose value is pointer offset + code point
  5228. // − offset.
  5229. return pointer_offset + code_point - offset;
  5230. }
  5231. /**
  5232. * @param {number} code_point The |code_point| to search for in the Shift_JIS
  5233. * index.
  5234. * @return {?number} The code point corresponding to |pointer| in |index|,
  5235. * or null if |code point| is not in the Shift_JIS index.
  5236. */
  5237. function indexShiftJISPointerFor(code_point) {
  5238. // 1. Let index be index jis0208 excluding all entries whose
  5239. // pointer is in the range 8272 to 8835, inclusive.
  5240. shift_jis_index = shift_jis_index ||
  5241. index('jis0208').map(function(code_point, pointer) {
  5242. return inRange(pointer, 8272, 8835) ? null : code_point;
  5243. });
  5244. var index_ = shift_jis_index;
  5245. // 2. Return the index pointer for code point in index.
  5246. return index_.indexOf(code_point);
  5247. }
  5248. var shift_jis_index;
  5249. /**
  5250. * @param {number} code_point The |code_point| to search for in the big5
  5251. * index.
  5252. * @return {?number} The code point corresponding to |pointer| in |index|,
  5253. * or null if |code point| is not in the big5 index.
  5254. */
  5255. function indexBig5PointerFor(code_point) {
  5256. // 1. Let index be index Big5 excluding all entries whose pointer
  5257. big5_index_no_hkscs = big5_index_no_hkscs ||
  5258. index('big5').map(function(code_point, pointer) {
  5259. return (pointer < (0xA1 - 0x81) * 157) ? null : code_point;
  5260. });
  5261. var index_ = big5_index_no_hkscs;
  5262. // 2. If code point is U+2550, U+255E, U+2561, U+256A, U+5341, or
  5263. // U+5345, return the last pointer corresponding to code point in
  5264. // index.
  5265. if (code_point === 0x2550 || code_point === 0x255E ||
  5266. code_point === 0x2561 || code_point === 0x256A ||
  5267. code_point === 0x5341 || code_point === 0x5345) {
  5268. return index_.lastIndexOf(code_point);
  5269. }
  5270. // 3. Return the index pointer for code point in index.
  5271. return indexPointerFor(code_point, index_);
  5272. }
  5273. var big5_index_no_hkscs;
  5274. //
  5275. // 8. API
  5276. //
  5277. /** @const */ var DEFAULT_ENCODING = 'utf-8';
  5278. // 8.1 Interface TextDecoder
  5279. /**
  5280. * @constructor
  5281. * @param {string=} label The label of the encoding;
  5282. * defaults to 'utf-8'.
  5283. * @param {Object=} options
  5284. */
  5285. function TextDecoder(label, options) {
  5286. // Web IDL conventions
  5287. if (!(this instanceof TextDecoder))
  5288. throw TypeError('Called as a function. Did you forget \'new\'?');
  5289. label = label !== undefined ? String(label) : DEFAULT_ENCODING;
  5290. options = ToDictionary(options);
  5291. // A TextDecoder object has an associated encoding, decoder,
  5292. // stream, ignore BOM flag (initially unset), BOM seen flag
  5293. // (initially unset), error mode (initially replacement), and do
  5294. // not flush flag (initially unset).
  5295. /** @private */
  5296. this._encoding = null;
  5297. /** @private @type {?Decoder} */
  5298. this._decoder = null;
  5299. /** @private @type {boolean} */
  5300. this._ignoreBOM = false;
  5301. /** @private @type {boolean} */
  5302. this._BOMseen = false;
  5303. /** @private @type {string} */
  5304. this._error_mode = 'replacement';
  5305. /** @private @type {boolean} */
  5306. this._do_not_flush = false;
  5307. // 1. Let encoding be the result of getting an encoding from
  5308. // label.
  5309. var encoding = getEncoding(label);
  5310. // 2. If encoding is failure or replacement, throw a RangeError.
  5311. if (encoding === null || encoding.name === 'replacement')
  5312. throw RangeError('Unknown encoding: ' + label);
  5313. if (!decoders[encoding.name]) {
  5314. throw Error('Decoder not present.' +
  5315. ' Did you forget to include encoding-indexes.js first?');
  5316. }
  5317. // 3. Let dec be a new TextDecoder object.
  5318. var dec = this;
  5319. // 4. Set dec's encoding to encoding.
  5320. dec._encoding = encoding;
  5321. // 5. If options's fatal member is true, set dec's error mode to
  5322. // fatal.
  5323. if (Boolean(options['fatal']))
  5324. dec._error_mode = 'fatal';
  5325. // 6. If options's ignoreBOM member is true, set dec's ignore BOM
  5326. // flag.
  5327. if (Boolean(options['ignoreBOM']))
  5328. dec._ignoreBOM = true;
  5329. // For pre-ES5 runtimes:
  5330. if (!Object.defineProperty) {
  5331. this.encoding = dec._encoding.name.toLowerCase();
  5332. this.fatal = dec._error_mode === 'fatal';
  5333. this.ignoreBOM = dec._ignoreBOM;
  5334. }
  5335. // 7. Return dec.
  5336. return dec;
  5337. }
  5338. if (Object.defineProperty) {
  5339. // The encoding attribute's getter must return encoding's name.
  5340. Object.defineProperty(TextDecoder.prototype, 'encoding', {
  5341. /** @this {TextDecoder} */
  5342. get: function() { return this._encoding.name.toLowerCase(); }
  5343. });
  5344. // The fatal attribute's getter must return true if error mode
  5345. // is fatal, and false otherwise.
  5346. Object.defineProperty(TextDecoder.prototype, 'fatal', {
  5347. /** @this {TextDecoder} */
  5348. get: function() { return this._error_mode === 'fatal'; }
  5349. });
  5350. // The ignoreBOM attribute's getter must return true if ignore
  5351. // BOM flag is set, and false otherwise.
  5352. Object.defineProperty(TextDecoder.prototype, 'ignoreBOM', {
  5353. /** @this {TextDecoder} */
  5354. get: function() { return this._ignoreBOM; }
  5355. });
  5356. }
  5357. /**
  5358. * @param {BufferSource=} input The buffer of bytes to decode.
  5359. * @param {Object=} options
  5360. * @return {string} The decoded string.
  5361. */
  5362. TextDecoder.prototype.decode = function decode(input, options) {
  5363. var bytes;
  5364. if (typeof input === 'object' && input instanceof ArrayBuffer) {
  5365. bytes = new Uint8Array(input);
  5366. } else if (typeof input === 'object' && 'buffer' in input &&
  5367. input.buffer instanceof ArrayBuffer) {
  5368. bytes = new Uint8Array(input.buffer,
  5369. input.byteOffset,
  5370. input.byteLength);
  5371. } else {
  5372. bytes = new Uint8Array(0);
  5373. }
  5374. options = ToDictionary(options);
  5375. // 1. If the do not flush flag is unset, set decoder to a new
  5376. // encoding's decoder, set stream to a new stream, and unset the
  5377. // BOM seen flag.
  5378. if (!this._do_not_flush) {
  5379. this._decoder = decoders[this._encoding.name]({
  5380. fatal: this._error_mode === 'fatal'});
  5381. this._BOMseen = false;
  5382. }
  5383. // 2. If options's stream is true, set the do not flush flag, and
  5384. // unset the do not flush flag otherwise.
  5385. this._do_not_flush = Boolean(options['stream']);
  5386. // 3. If input is given, push a copy of input to stream.
  5387. // TODO: Align with spec algorithm - maintain stream on instance.
  5388. var input_stream = new Stream(bytes);
  5389. // 4. Let output be a new stream.
  5390. var output = [];
  5391. /** @type {?(number|!Array.<number>)} */
  5392. var result;
  5393. // 5. While true:
  5394. while (true) {
  5395. // 1. Let token be the result of reading from stream.
  5396. var token = input_stream.read();
  5397. // 2. If token is end-of-stream and the do not flush flag is
  5398. // set, return output, serialized.
  5399. // TODO: Align with spec algorithm.
  5400. if (token === end_of_stream)
  5401. break;
  5402. // 3. Otherwise, run these subsubsteps:
  5403. // 1. Let result be the result of processing token for decoder,
  5404. // stream, output, and error mode.
  5405. result = this._decoder.handler(input_stream, token);
  5406. // 2. If result is finished, return output, serialized.
  5407. if (result === finished)
  5408. break;
  5409. if (result !== null) {
  5410. if (Array.isArray(result))
  5411. output.push.apply(output, /**@type {!Array.<number>}*/(result));
  5412. else
  5413. output.push(result);
  5414. }
  5415. // 3. Otherwise, if result is error, throw a TypeError.
  5416. // (Thrown in handler)
  5417. // 4. Otherwise, do nothing.
  5418. }
  5419. // TODO: Align with spec algorithm.
  5420. if (!this._do_not_flush) {
  5421. do {
  5422. result = this._decoder.handler(input_stream, input_stream.read());
  5423. if (result === finished)
  5424. break;
  5425. if (result === null)
  5426. continue;
  5427. if (Array.isArray(result))
  5428. output.push.apply(output, /**@type {!Array.<number>}*/(result));
  5429. else
  5430. output.push(result);
  5431. } while (!input_stream.endOfStream());
  5432. this._decoder = null;
  5433. }
  5434. // A TextDecoder object also has an associated serialize stream
  5435. // algorithm...
  5436. /**
  5437. * @param {!Array.<number>} stream
  5438. * @return {string}
  5439. * @this {TextDecoder}
  5440. */
  5441. function serializeStream(stream) {
  5442. // 1. Let token be the result of reading from stream.
  5443. // (Done in-place on array, rather than as a stream)
  5444. // 2. If encoding is UTF-8, UTF-16BE, or UTF-16LE, and ignore
  5445. // BOM flag and BOM seen flag are unset, run these subsubsteps:
  5446. if (includes(['UTF-8', 'UTF-16LE', 'UTF-16BE'], this._encoding.name) &&
  5447. !this._ignoreBOM && !this._BOMseen) {
  5448. if (stream.length > 0 && stream[0] === 0xFEFF) {
  5449. // 1. If token is U+FEFF, set BOM seen flag.
  5450. this._BOMseen = true;
  5451. stream.shift();
  5452. } else if (stream.length > 0) {
  5453. // 2. Otherwise, if token is not end-of-stream, set BOM seen
  5454. // flag and append token to stream.
  5455. this._BOMseen = true;
  5456. } else {
  5457. // 3. Otherwise, if token is not end-of-stream, append token
  5458. // to output.
  5459. // (no-op)
  5460. }
  5461. }
  5462. // 4. Otherwise, return output.
  5463. return codePointsToString(stream);
  5464. }
  5465. return serializeStream.call(this, output);
  5466. };
  5467. // 8.2 Interface TextEncoder
  5468. /**
  5469. * @constructor
  5470. * @param {string=} label The label of the encoding. NONSTANDARD.
  5471. * @param {Object=} options NONSTANDARD.
  5472. */
  5473. function TextEncoder(label, options) {
  5474. // Web IDL conventions
  5475. if (!(this instanceof TextEncoder))
  5476. throw TypeError('Called as a function. Did you forget \'new\'?');
  5477. options = ToDictionary(options);
  5478. // A TextEncoder object has an associated encoding and encoder.
  5479. /** @private */
  5480. this._encoding = null;
  5481. /** @private @type {?Encoder} */
  5482. this._encoder = null;
  5483. // Non-standard
  5484. /** @private @type {boolean} */
  5485. this._do_not_flush = false;
  5486. /** @private @type {string} */
  5487. this._fatal = Boolean(options['fatal']) ? 'fatal' : 'replacement';
  5488. // 1. Let enc be a new TextEncoder object.
  5489. var enc = this;
  5490. // 2. Set enc's encoding to UTF-8's encoder.
  5491. if (Boolean(options['NONSTANDARD_allowLegacyEncoding'])) {
  5492. // NONSTANDARD behavior.
  5493. label = label !== undefined ? String(label) : DEFAULT_ENCODING;
  5494. var encoding = getEncoding(label);
  5495. if (encoding === null || encoding.name === 'replacement')
  5496. throw RangeError('Unknown encoding: ' + label);
  5497. if (!encoders[encoding.name]) {
  5498. throw Error('Encoder not present.' +
  5499. ' Did you forget to include encoding-indexes.js first?');
  5500. }
  5501. enc._encoding = encoding;
  5502. } else {
  5503. // Standard behavior.
  5504. enc._encoding = getEncoding('utf-8');
  5505. if (label !== undefined && 'console' in global) {
  5506. console.warn('TextEncoder constructor called with encoding label, '
  5507. + 'which is ignored.');
  5508. }
  5509. }
  5510. // For pre-ES5 runtimes:
  5511. if (!Object.defineProperty)
  5512. this.encoding = enc._encoding.name.toLowerCase();
  5513. // 3. Return enc.
  5514. return enc;
  5515. }
  5516. if (Object.defineProperty) {
  5517. // The encoding attribute's getter must return encoding's name.
  5518. Object.defineProperty(TextEncoder.prototype, 'encoding', {
  5519. /** @this {TextEncoder} */
  5520. get: function() { return this._encoding.name.toLowerCase(); }
  5521. });
  5522. }
  5523. /**
  5524. * @param {string=} opt_string The string to encode.
  5525. * @param {Object=} options
  5526. * @return {!Uint8Array} Encoded bytes, as a Uint8Array.
  5527. */
  5528. TextEncoder.prototype.encode = function encode(opt_string, options) {
  5529. opt_string = opt_string === undefined ? '' : String(opt_string);
  5530. options = ToDictionary(options);
  5531. // NOTE: This option is nonstandard. None of the encodings
  5532. // permitted for encoding (i.e. UTF-8, UTF-16) are stateful when
  5533. // the input is a USVString so streaming is not necessary.
  5534. if (!this._do_not_flush)
  5535. this._encoder = encoders[this._encoding.name]({
  5536. fatal: this._fatal === 'fatal'});
  5537. this._do_not_flush = Boolean(options['stream']);
  5538. // 1. Convert input to a stream.
  5539. var input = new Stream(stringToCodePoints(opt_string));
  5540. // 2. Let output be a new stream
  5541. var output = [];
  5542. /** @type {?(number|!Array.<number>)} */
  5543. var result;
  5544. // 3. While true, run these substeps:
  5545. while (true) {
  5546. // 1. Let token be the result of reading from input.
  5547. var token = input.read();
  5548. if (token === end_of_stream)
  5549. break;
  5550. // 2. Let result be the result of processing token for encoder,
  5551. // input, output.
  5552. result = this._encoder.handler(input, token);
  5553. if (result === finished)
  5554. break;
  5555. if (Array.isArray(result))
  5556. output.push.apply(output, /**@type {!Array.<number>}*/(result));
  5557. else
  5558. output.push(result);
  5559. }
  5560. // TODO: Align with spec algorithm.
  5561. if (!this._do_not_flush) {
  5562. while (true) {
  5563. result = this._encoder.handler(input, input.read());
  5564. if (result === finished)
  5565. break;
  5566. if (Array.isArray(result))
  5567. output.push.apply(output, /**@type {!Array.<number>}*/(result));
  5568. else
  5569. output.push(result);
  5570. }
  5571. this._encoder = null;
  5572. }
  5573. // 3. If result is finished, convert output into a byte sequence,
  5574. // and then return a Uint8Array object wrapping an ArrayBuffer
  5575. // containing output.
  5576. return new Uint8Array(output);
  5577. };
  5578. //
  5579. // 9. The encoding
  5580. //
  5581. // 9.1 utf-8
  5582. // 9.1.1 utf-8 decoder
  5583. /**
  5584. * @constructor
  5585. * @implements {Decoder}
  5586. * @param {{fatal: boolean}} options
  5587. */
  5588. function UTF8Decoder(options) {
  5589. var fatal = options.fatal;
  5590. // utf-8's decoder's has an associated utf-8 code point, utf-8
  5591. // bytes seen, and utf-8 bytes needed (all initially 0), a utf-8
  5592. // lower boundary (initially 0x80), and a utf-8 upper boundary
  5593. // (initially 0xBF).
  5594. var /** @type {number} */ utf8_code_point = 0,
  5595. /** @type {number} */ utf8_bytes_seen = 0,
  5596. /** @type {number} */ utf8_bytes_needed = 0,
  5597. /** @type {number} */ utf8_lower_boundary = 0x80,
  5598. /** @type {number} */ utf8_upper_boundary = 0xBF;
  5599. /**
  5600. * @param {Stream} stream The stream of bytes being decoded.
  5601. * @param {number} bite The next byte read from the stream.
  5602. * @return {?(number|!Array.<number>)} The next code point(s)
  5603. * decoded, or null if not enough data exists in the input
  5604. * stream to decode a complete code point.
  5605. */
  5606. this.handler = function(stream, bite) {
  5607. // 1. If byte is end-of-stream and utf-8 bytes needed is not 0,
  5608. // set utf-8 bytes needed to 0 and return error.
  5609. if (bite === end_of_stream && utf8_bytes_needed !== 0) {
  5610. utf8_bytes_needed = 0;
  5611. return decoderError(fatal);
  5612. }
  5613. // 2. If byte is end-of-stream, return finished.
  5614. if (bite === end_of_stream)
  5615. return finished;
  5616. // 3. If utf-8 bytes needed is 0, based on byte:
  5617. if (utf8_bytes_needed === 0) {
  5618. // 0x00 to 0x7F
  5619. if (inRange(bite, 0x00, 0x7F)) {
  5620. // Return a code point whose value is byte.
  5621. return bite;
  5622. }
  5623. // 0xC2 to 0xDF
  5624. else if (inRange(bite, 0xC2, 0xDF)) {
  5625. // 1. Set utf-8 bytes needed to 1.
  5626. utf8_bytes_needed = 1;
  5627. // 2. Set UTF-8 code point to byte & 0x1F.
  5628. utf8_code_point = bite & 0x1F;
  5629. }
  5630. // 0xE0 to 0xEF
  5631. else if (inRange(bite, 0xE0, 0xEF)) {
  5632. // 1. If byte is 0xE0, set utf-8 lower boundary to 0xA0.
  5633. if (bite === 0xE0)
  5634. utf8_lower_boundary = 0xA0;
  5635. // 2. If byte is 0xED, set utf-8 upper boundary to 0x9F.
  5636. if (bite === 0xED)
  5637. utf8_upper_boundary = 0x9F;
  5638. // 3. Set utf-8 bytes needed to 2.
  5639. utf8_bytes_needed = 2;
  5640. // 4. Set UTF-8 code point to byte & 0xF.
  5641. utf8_code_point = bite & 0xF;
  5642. }
  5643. // 0xF0 to 0xF4
  5644. else if (inRange(bite, 0xF0, 0xF4)) {
  5645. // 1. If byte is 0xF0, set utf-8 lower boundary to 0x90.
  5646. if (bite === 0xF0)
  5647. utf8_lower_boundary = 0x90;
  5648. // 2. If byte is 0xF4, set utf-8 upper boundary to 0x8F.
  5649. if (bite === 0xF4)
  5650. utf8_upper_boundary = 0x8F;
  5651. // 3. Set utf-8 bytes needed to 3.
  5652. utf8_bytes_needed = 3;
  5653. // 4. Set UTF-8 code point to byte & 0x7.
  5654. utf8_code_point = bite & 0x7;
  5655. }
  5656. // Otherwise
  5657. else {
  5658. // Return error.
  5659. return decoderError(fatal);
  5660. }
  5661. // Return continue.
  5662. return null;
  5663. }
  5664. // 4. If byte is not in the range utf-8 lower boundary to utf-8
  5665. // upper boundary, inclusive, run these substeps:
  5666. if (!inRange(bite, utf8_lower_boundary, utf8_upper_boundary)) {
  5667. // 1. Set utf-8 code point, utf-8 bytes needed, and utf-8
  5668. // bytes seen to 0, set utf-8 lower boundary to 0x80, and set
  5669. // utf-8 upper boundary to 0xBF.
  5670. utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0;
  5671. utf8_lower_boundary = 0x80;
  5672. utf8_upper_boundary = 0xBF;
  5673. // 2. Prepend byte to stream.
  5674. stream.prepend(bite);
  5675. // 3. Return error.
  5676. return decoderError(fatal);
  5677. }
  5678. // 5. Set utf-8 lower boundary to 0x80 and utf-8 upper boundary
  5679. // to 0xBF.
  5680. utf8_lower_boundary = 0x80;
  5681. utf8_upper_boundary = 0xBF;
  5682. // 6. Set UTF-8 code point to (UTF-8 code point << 6) | (byte &
  5683. // 0x3F)
  5684. utf8_code_point = (utf8_code_point << 6) | (bite & 0x3F);
  5685. // 7. Increase utf-8 bytes seen by one.
  5686. utf8_bytes_seen += 1;
  5687. // 8. If utf-8 bytes seen is not equal to utf-8 bytes needed,
  5688. // continue.
  5689. if (utf8_bytes_seen !== utf8_bytes_needed)
  5690. return null;
  5691. // 9. Let code point be utf-8 code point.
  5692. var code_point = utf8_code_point;
  5693. // 10. Set utf-8 code point, utf-8 bytes needed, and utf-8 bytes
  5694. // seen to 0.
  5695. utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0;
  5696. // 11. Return a code point whose value is code point.
  5697. return code_point;
  5698. };
  5699. }
  5700. // 9.1.2 utf-8 encoder
  5701. /**
  5702. * @constructor
  5703. * @implements {Encoder}
  5704. * @param {{fatal: boolean}} options
  5705. */
  5706. function UTF8Encoder(options) {
  5707. var fatal = options.fatal;
  5708. /**
  5709. * @param {Stream} stream Input stream.
  5710. * @param {number} code_point Next code point read from the stream.
  5711. * @return {(number|!Array.<number>)} Byte(s) to emit.
  5712. */
  5713. this.handler = function(stream, code_point) {
  5714. // 1. If code point is end-of-stream, return finished.
  5715. if (code_point === end_of_stream)
  5716. return finished;
  5717. // 2. If code point is an ASCII code point, return a byte whose
  5718. // value is code point.
  5719. if (isASCIICodePoint(code_point))
  5720. return code_point;
  5721. // 3. Set count and offset based on the range code point is in:
  5722. var count, offset;
  5723. // U+0080 to U+07FF, inclusive:
  5724. if (inRange(code_point, 0x0080, 0x07FF)) {
  5725. // 1 and 0xC0
  5726. count = 1;
  5727. offset = 0xC0;
  5728. }
  5729. // U+0800 to U+FFFF, inclusive:
  5730. else if (inRange(code_point, 0x0800, 0xFFFF)) {
  5731. // 2 and 0xE0
  5732. count = 2;
  5733. offset = 0xE0;
  5734. }
  5735. // U+10000 to U+10FFFF, inclusive:
  5736. else if (inRange(code_point, 0x10000, 0x10FFFF)) {
  5737. // 3 and 0xF0
  5738. count = 3;
  5739. offset = 0xF0;
  5740. }
  5741. // 4. Let bytes be a byte sequence whose first byte is (code
  5742. // point >> (6 × count)) + offset.
  5743. var bytes = [(code_point >> (6 * count)) + offset];
  5744. // 5. Run these substeps while count is greater than 0:
  5745. while (count > 0) {
  5746. // 1. Set temp to code point >> (6 × (count − 1)).
  5747. var temp = code_point >> (6 * (count - 1));
  5748. // 2. Append to bytes 0x80 | (temp & 0x3F).
  5749. bytes.push(0x80 | (temp & 0x3F));
  5750. // 3. Decrease count by one.
  5751. count -= 1;
  5752. }
  5753. // 6. Return bytes bytes, in order.
  5754. return bytes;
  5755. };
  5756. }
  5757. /** @param {{fatal: boolean}} options */
  5758. encoders['UTF-8'] = function(options) {
  5759. return new UTF8Encoder(options);
  5760. };
  5761. /** @param {{fatal: boolean}} options */
  5762. decoders['UTF-8'] = function(options) {
  5763. return new UTF8Decoder(options);
  5764. };
  5765. //
  5766. // 10. Legacy single-byte encodings
  5767. //
  5768. // 10.1 single-byte decoder
  5769. /**
  5770. * @constructor
  5771. * @implements {Decoder}
  5772. * @param {!Array.<number>} index The encoding index.
  5773. * @param {{fatal: boolean}} options
  5774. */
  5775. function SingleByteDecoder(index, options) {
  5776. var fatal = options.fatal;
  5777. /**
  5778. * @param {Stream} stream The stream of bytes being decoded.
  5779. * @param {number} bite The next byte read from the stream.
  5780. * @return {?(number|!Array.<number>)} The next code point(s)
  5781. * decoded, or null if not enough data exists in the input
  5782. * stream to decode a complete code point.
  5783. */
  5784. this.handler = function(stream, bite) {
  5785. // 1. If byte is end-of-stream, return finished.
  5786. if (bite === end_of_stream)
  5787. return finished;
  5788. // 2. If byte is an ASCII byte, return a code point whose value
  5789. // is byte.
  5790. if (isASCIIByte(bite))
  5791. return bite;
  5792. // 3. Let code point be the index code point for byte − 0x80 in
  5793. // index single-byte.
  5794. var code_point = index[bite - 0x80];
  5795. // 4. If code point is null, return error.
  5796. if (code_point === null)
  5797. return decoderError(fatal);
  5798. // 5. Return a code point whose value is code point.
  5799. return code_point;
  5800. };
  5801. }
  5802. // 10.2 single-byte encoder
  5803. /**
  5804. * @constructor
  5805. * @implements {Encoder}
  5806. * @param {!Array.<?number>} index The encoding index.
  5807. * @param {{fatal: boolean}} options
  5808. */
  5809. function SingleByteEncoder(index, options) {
  5810. var fatal = options.fatal;
  5811. /**
  5812. * @param {Stream} stream Input stream.
  5813. * @param {number} code_point Next code point read from the stream.
  5814. * @return {(number|!Array.<number>)} Byte(s) to emit.
  5815. */
  5816. this.handler = function(stream, code_point) {
  5817. // 1. If code point is end-of-stream, return finished.
  5818. if (code_point === end_of_stream)
  5819. return finished;
  5820. // 2. If code point is an ASCII code point, return a byte whose
  5821. // value is code point.
  5822. if (isASCIICodePoint(code_point))
  5823. return code_point;
  5824. // 3. Let pointer be the index pointer for code point in index
  5825. // single-byte.
  5826. var pointer = indexPointerFor(code_point, index);
  5827. // 4. If pointer is null, return error with code point.
  5828. if (pointer === null)
  5829. encoderError(code_point);
  5830. // 5. Return a byte whose value is pointer + 0x80.
  5831. return pointer + 0x80;
  5832. };
  5833. }
  5834. (function() {
  5835. if (!('encoding-indexes' in global))
  5836. return;
  5837. encodings.forEach(function(category) {
  5838. if (category.heading !== 'Legacy single-byte encodings')
  5839. return;
  5840. category.encodings.forEach(function(encoding) {
  5841. var name = encoding.name;
  5842. var idx = index(name.toLowerCase());
  5843. /** @param {{fatal: boolean}} options */
  5844. decoders[name] = function(options) {
  5845. return new SingleByteDecoder(idx, options);
  5846. };
  5847. /** @param {{fatal: boolean}} options */
  5848. encoders[name] = function(options) {
  5849. return new SingleByteEncoder(idx, options);
  5850. };
  5851. });
  5852. });
  5853. }());
  5854. //
  5855. // 11. Legacy multi-byte Chinese (simplified) encodings
  5856. //
  5857. // 11.1 gbk
  5858. // 11.1.1 gbk decoder
  5859. // gbk's decoder is gb18030's decoder.
  5860. /** @param {{fatal: boolean}} options */
  5861. decoders['GBK'] = function(options) {
  5862. return new GB18030Decoder(options);
  5863. };
  5864. // 11.1.2 gbk encoder
  5865. // gbk's encoder is gb18030's encoder with its gbk flag set.
  5866. /** @param {{fatal: boolean}} options */
  5867. encoders['GBK'] = function(options) {
  5868. return new GB18030Encoder(options, true);
  5869. };
  5870. // 11.2 gb18030
  5871. // 11.2.1 gb18030 decoder
  5872. /**
  5873. * @constructor
  5874. * @implements {Decoder}
  5875. * @param {{fatal: boolean}} options
  5876. */
  5877. function GB18030Decoder(options) {
  5878. var fatal = options.fatal;
  5879. // gb18030's decoder has an associated gb18030 first, gb18030
  5880. // second, and gb18030 third (all initially 0x00).
  5881. var /** @type {number} */ gb18030_first = 0x00,
  5882. /** @type {number} */ gb18030_second = 0x00,
  5883. /** @type {number} */ gb18030_third = 0x00;
  5884. /**
  5885. * @param {Stream} stream The stream of bytes being decoded.
  5886. * @param {number} bite The next byte read from the stream.
  5887. * @return {?(number|!Array.<number>)} The next code point(s)
  5888. * decoded, or null if not enough data exists in the input
  5889. * stream to decode a complete code point.
  5890. */
  5891. this.handler = function(stream, bite) {
  5892. // 1. If byte is end-of-stream and gb18030 first, gb18030
  5893. // second, and gb18030 third are 0x00, return finished.
  5894. if (bite === end_of_stream && gb18030_first === 0x00 &&
  5895. gb18030_second === 0x00 && gb18030_third === 0x00) {
  5896. return finished;
  5897. }
  5898. // 2. If byte is end-of-stream, and gb18030 first, gb18030
  5899. // second, or gb18030 third is not 0x00, set gb18030 first,
  5900. // gb18030 second, and gb18030 third to 0x00, and return error.
  5901. if (bite === end_of_stream &&
  5902. (gb18030_first !== 0x00 || gb18030_second !== 0x00 ||
  5903. gb18030_third !== 0x00)) {
  5904. gb18030_first = 0x00;
  5905. gb18030_second = 0x00;
  5906. gb18030_third = 0x00;
  5907. decoderError(fatal);
  5908. }
  5909. var code_point;
  5910. // 3. If gb18030 third is not 0x00, run these substeps:
  5911. if (gb18030_third !== 0x00) {
  5912. // 1. Let code point be null.
  5913. code_point = null;
  5914. // 2. If byte is in the range 0x30 to 0x39, inclusive, set
  5915. // code point to the index gb18030 ranges code point for
  5916. // (((gb18030 first − 0x81) × 10 + gb18030 second − 0x30) ×
  5917. // 126 + gb18030 third − 0x81) × 10 + byte − 0x30.
  5918. if (inRange(bite, 0x30, 0x39)) {
  5919. code_point = indexGB18030RangesCodePointFor(
  5920. (((gb18030_first - 0x81) * 10 + gb18030_second - 0x30) * 126 +
  5921. gb18030_third - 0x81) * 10 + bite - 0x30);
  5922. }
  5923. // 3. Let buffer be a byte sequence consisting of gb18030
  5924. // second, gb18030 third, and byte, in order.
  5925. var buffer = [gb18030_second, gb18030_third, bite];
  5926. // 4. Set gb18030 first, gb18030 second, and gb18030 third to
  5927. // 0x00.
  5928. gb18030_first = 0x00;
  5929. gb18030_second = 0x00;
  5930. gb18030_third = 0x00;
  5931. // 5. If code point is null, prepend buffer to stream and
  5932. // return error.
  5933. if (code_point === null) {
  5934. stream.prepend(buffer);
  5935. return decoderError(fatal);
  5936. }
  5937. // 6. Return a code point whose value is code point.
  5938. return code_point;
  5939. }
  5940. // 4. If gb18030 second is not 0x00, run these substeps:
  5941. if (gb18030_second !== 0x00) {
  5942. // 1. If byte is in the range 0x81 to 0xFE, inclusive, set
  5943. // gb18030 third to byte and return continue.
  5944. if (inRange(bite, 0x81, 0xFE)) {
  5945. gb18030_third = bite;
  5946. return null;
  5947. }
  5948. // 2. Prepend gb18030 second followed by byte to stream, set
  5949. // gb18030 first and gb18030 second to 0x00, and return error.
  5950. stream.prepend([gb18030_second, bite]);
  5951. gb18030_first = 0x00;
  5952. gb18030_second = 0x00;
  5953. return decoderError(fatal);
  5954. }
  5955. // 5. If gb18030 first is not 0x00, run these substeps:
  5956. if (gb18030_first !== 0x00) {
  5957. // 1. If byte is in the range 0x30 to 0x39, inclusive, set
  5958. // gb18030 second to byte and return continue.
  5959. if (inRange(bite, 0x30, 0x39)) {
  5960. gb18030_second = bite;
  5961. return null;
  5962. }
  5963. // 2. Let lead be gb18030 first, let pointer be null, and set
  5964. // gb18030 first to 0x00.
  5965. var lead = gb18030_first;
  5966. var pointer = null;
  5967. gb18030_first = 0x00;
  5968. // 3. Let offset be 0x40 if byte is less than 0x7F and 0x41
  5969. // otherwise.
  5970. var offset = bite < 0x7F ? 0x40 : 0x41;
  5971. // 4. If byte is in the range 0x40 to 0x7E, inclusive, or 0x80
  5972. // to 0xFE, inclusive, set pointer to (lead − 0x81) × 190 +
  5973. // (byte − offset).
  5974. if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0x80, 0xFE))
  5975. pointer = (lead - 0x81) * 190 + (bite - offset);
  5976. // 5. Let code point be null if pointer is null and the index
  5977. // code point for pointer in index gb18030 otherwise.
  5978. code_point = pointer === null ? null :
  5979. indexCodePointFor(pointer, index('gb18030'));
  5980. // 6. If code point is null and byte is an ASCII byte, prepend
  5981. // byte to stream.
  5982. if (code_point === null && isASCIIByte(bite))
  5983. stream.prepend(bite);
  5984. // 7. If code point is null, return error.
  5985. if (code_point === null)
  5986. return decoderError(fatal);
  5987. // 8. Return a code point whose value is code point.
  5988. return code_point;
  5989. }
  5990. // 6. If byte is an ASCII byte, return a code point whose value
  5991. // is byte.
  5992. if (isASCIIByte(bite))
  5993. return bite;
  5994. // 7. If byte is 0x80, return code point U+20AC.
  5995. if (bite === 0x80)
  5996. return 0x20AC;
  5997. // 8. If byte is in the range 0x81 to 0xFE, inclusive, set
  5998. // gb18030 first to byte and return continue.
  5999. if (inRange(bite, 0x81, 0xFE)) {
  6000. gb18030_first = bite;
  6001. return null;
  6002. }
  6003. // 9. Return error.
  6004. return decoderError(fatal);
  6005. };
  6006. }
  6007. // 11.2.2 gb18030 encoder
  6008. /**
  6009. * @constructor
  6010. * @implements {Encoder}
  6011. * @param {{fatal: boolean}} options
  6012. * @param {boolean=} gbk_flag
  6013. */
  6014. function GB18030Encoder(options, gbk_flag) {
  6015. var fatal = options.fatal;
  6016. // gb18030's decoder has an associated gbk flag (initially unset).
  6017. /**
  6018. * @param {Stream} stream Input stream.
  6019. * @param {number} code_point Next code point read from the stream.
  6020. * @return {(number|!Array.<number>)} Byte(s) to emit.
  6021. */
  6022. this.handler = function(stream, code_point) {
  6023. // 1. If code point is end-of-stream, return finished.
  6024. if (code_point === end_of_stream)
  6025. return finished;
  6026. // 2. If code point is an ASCII code point, return a byte whose
  6027. // value is code point.
  6028. if (isASCIICodePoint(code_point))
  6029. return code_point;
  6030. // 3. If code point is U+E5E5, return error with code point.
  6031. if (code_point === 0xE5E5)
  6032. return encoderError(code_point);
  6033. // 4. If the gbk flag is set and code point is U+20AC, return
  6034. // byte 0x80.
  6035. if (gbk_flag && code_point === 0x20AC)
  6036. return 0x80;
  6037. // 5. Let pointer be the index pointer for code point in index
  6038. // gb18030.
  6039. var pointer = indexPointerFor(code_point, index('gb18030'));
  6040. // 6. If pointer is not null, run these substeps:
  6041. if (pointer !== null) {
  6042. // 1. Let lead be floor(pointer / 190) + 0x81.
  6043. var lead = floor(pointer / 190) + 0x81;
  6044. // 2. Let trail be pointer % 190.
  6045. var trail = pointer % 190;
  6046. // 3. Let offset be 0x40 if trail is less than 0x3F and 0x41 otherwise.
  6047. var offset = trail < 0x3F ? 0x40 : 0x41;
  6048. // 4. Return two bytes whose values are lead and trail + offset.
  6049. return [lead, trail + offset];
  6050. }
  6051. // 7. If gbk flag is set, return error with code point.
  6052. if (gbk_flag)
  6053. return encoderError(code_point);
  6054. // 8. Set pointer to the index gb18030 ranges pointer for code
  6055. // point.
  6056. pointer = indexGB18030RangesPointerFor(code_point);
  6057. // 9. Let byte1 be floor(pointer / 10 / 126 / 10).
  6058. var byte1 = floor(pointer / 10 / 126 / 10);
  6059. // 10. Set pointer to pointer − byte1 × 10 × 126 × 10.
  6060. pointer = pointer - byte1 * 10 * 126 * 10;
  6061. // 11. Let byte2 be floor(pointer / 10 / 126).
  6062. var byte2 = floor(pointer / 10 / 126);
  6063. // 12. Set pointer to pointer − byte2 × 10 × 126.
  6064. pointer = pointer - byte2 * 10 * 126;
  6065. // 13. Let byte3 be floor(pointer / 10).
  6066. var byte3 = floor(pointer / 10);
  6067. // 14. Let byte4 be pointer − byte3 × 10.
  6068. var byte4 = pointer - byte3 * 10;
  6069. // 15. Return four bytes whose values are byte1 + 0x81, byte2 +
  6070. // 0x30, byte3 + 0x81, byte4 + 0x30.
  6071. return [byte1 + 0x81,
  6072. byte2 + 0x30,
  6073. byte3 + 0x81,
  6074. byte4 + 0x30];
  6075. };
  6076. }
  6077. /** @param {{fatal: boolean}} options */
  6078. encoders['gb18030'] = function(options) {
  6079. return new GB18030Encoder(options);
  6080. };
  6081. /** @param {{fatal: boolean}} options */
  6082. decoders['gb18030'] = function(options) {
  6083. return new GB18030Decoder(options);
  6084. };
  6085. //
  6086. // 12. Legacy multi-byte Chinese (traditional) encodings
  6087. //
  6088. // 12.1 Big5
  6089. // 12.1.1 Big5 decoder
  6090. /**
  6091. * @constructor
  6092. * @implements {Decoder}
  6093. * @param {{fatal: boolean}} options
  6094. */
  6095. function Big5Decoder(options) {
  6096. var fatal = options.fatal;
  6097. // Big5's decoder has an associated Big5 lead (initially 0x00).
  6098. var /** @type {number} */ Big5_lead = 0x00;
  6099. /**
  6100. * @param {Stream} stream The stream of bytes being decoded.
  6101. * @param {number} bite The next byte read from the stream.
  6102. * @return {?(number|!Array.<number>)} The next code point(s)
  6103. * decoded, or null if not enough data exists in the input
  6104. * stream to decode a complete code point.
  6105. */
  6106. this.handler = function(stream, bite) {
  6107. // 1. If byte is end-of-stream and Big5 lead is not 0x00, set
  6108. // Big5 lead to 0x00 and return error.
  6109. if (bite === end_of_stream && Big5_lead !== 0x00) {
  6110. Big5_lead = 0x00;
  6111. return decoderError(fatal);
  6112. }
  6113. // 2. If byte is end-of-stream and Big5 lead is 0x00, return
  6114. // finished.
  6115. if (bite === end_of_stream && Big5_lead === 0x00)
  6116. return finished;
  6117. // 3. If Big5 lead is not 0x00, let lead be Big5 lead, let
  6118. // pointer be null, set Big5 lead to 0x00, and then run these
  6119. // substeps:
  6120. if (Big5_lead !== 0x00) {
  6121. var lead = Big5_lead;
  6122. var pointer = null;
  6123. Big5_lead = 0x00;
  6124. // 1. Let offset be 0x40 if byte is less than 0x7F and 0x62
  6125. // otherwise.
  6126. var offset = bite < 0x7F ? 0x40 : 0x62;
  6127. // 2. If byte is in the range 0x40 to 0x7E, inclusive, or 0xA1
  6128. // to 0xFE, inclusive, set pointer to (lead − 0x81) × 157 +
  6129. // (byte − offset).
  6130. if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0xA1, 0xFE))
  6131. pointer = (lead - 0x81) * 157 + (bite - offset);
  6132. // 3. If there is a row in the table below whose first column
  6133. // is pointer, return the two code points listed in its second
  6134. // column
  6135. // Pointer | Code points
  6136. // --------+--------------
  6137. // 1133 | U+00CA U+0304
  6138. // 1135 | U+00CA U+030C
  6139. // 1164 | U+00EA U+0304
  6140. // 1166 | U+00EA U+030C
  6141. switch (pointer) {
  6142. case 1133: return [0x00CA, 0x0304];
  6143. case 1135: return [0x00CA, 0x030C];
  6144. case 1164: return [0x00EA, 0x0304];
  6145. case 1166: return [0x00EA, 0x030C];
  6146. }
  6147. // 4. Let code point be null if pointer is null and the index
  6148. // code point for pointer in index Big5 otherwise.
  6149. var code_point = (pointer === null) ? null :
  6150. indexCodePointFor(pointer, index('big5'));
  6151. // 5. If code point is null and byte is an ASCII byte, prepend
  6152. // byte to stream.
  6153. if (code_point === null && isASCIIByte(bite))
  6154. stream.prepend(bite);
  6155. // 6. If code point is null, return error.
  6156. if (code_point === null)
  6157. return decoderError(fatal);
  6158. // 7. Return a code point whose value is code point.
  6159. return code_point;
  6160. }
  6161. // 4. If byte is an ASCII byte, return a code point whose value
  6162. // is byte.
  6163. if (isASCIIByte(bite))
  6164. return bite;
  6165. // 5. If byte is in the range 0x81 to 0xFE, inclusive, set Big5
  6166. // lead to byte and return continue.
  6167. if (inRange(bite, 0x81, 0xFE)) {
  6168. Big5_lead = bite;
  6169. return null;
  6170. }
  6171. // 6. Return error.
  6172. return decoderError(fatal);
  6173. };
  6174. }
  6175. // 12.1.2 Big5 encoder
  6176. /**
  6177. * @constructor
  6178. * @implements {Encoder}
  6179. * @param {{fatal: boolean}} options
  6180. */
  6181. function Big5Encoder(options) {
  6182. var fatal = options.fatal;
  6183. /**
  6184. * @param {Stream} stream Input stream.
  6185. * @param {number} code_point Next code point read from the stream.
  6186. * @return {(number|!Array.<number>)} Byte(s) to emit.
  6187. */
  6188. this.handler = function(stream, code_point) {
  6189. // 1. If code point is end-of-stream, return finished.
  6190. if (code_point === end_of_stream)
  6191. return finished;
  6192. // 2. If code point is an ASCII code point, return a byte whose
  6193. // value is code point.
  6194. if (isASCIICodePoint(code_point))
  6195. return code_point;
  6196. // 3. Let pointer be the index Big5 pointer for code point.
  6197. var pointer = indexBig5PointerFor(code_point);
  6198. // 4. If pointer is null, return error with code point.
  6199. if (pointer === null)
  6200. return encoderError(code_point);
  6201. // 5. Let lead be floor(pointer / 157) + 0x81.
  6202. var lead = floor(pointer / 157) + 0x81;
  6203. // 6. If lead is less than 0xA1, return error with code point.
  6204. if (lead < 0xA1)
  6205. return encoderError(code_point);
  6206. // 7. Let trail be pointer % 157.
  6207. var trail = pointer % 157;
  6208. // 8. Let offset be 0x40 if trail is less than 0x3F and 0x62
  6209. // otherwise.
  6210. var offset = trail < 0x3F ? 0x40 : 0x62;
  6211. // Return two bytes whose values are lead and trail + offset.
  6212. return [lead, trail + offset];
  6213. };
  6214. }
  6215. /** @param {{fatal: boolean}} options */
  6216. encoders['Big5'] = function(options) {
  6217. return new Big5Encoder(options);
  6218. };
  6219. /** @param {{fatal: boolean}} options */
  6220. decoders['Big5'] = function(options) {
  6221. return new Big5Decoder(options);
  6222. };
  6223. //
  6224. // 13. Legacy multi-byte Japanese encodings
  6225. //
  6226. // 13.1 euc-jp
  6227. // 13.1.1 euc-jp decoder
  6228. /**
  6229. * @constructor
  6230. * @implements {Decoder}
  6231. * @param {{fatal: boolean}} options
  6232. */
  6233. function EUCJPDecoder(options) {
  6234. var fatal = options.fatal;
  6235. // euc-jp's decoder has an associated euc-jp jis0212 flag
  6236. // (initially unset) and euc-jp lead (initially 0x00).
  6237. var /** @type {boolean} */ eucjp_jis0212_flag = false,
  6238. /** @type {number} */ eucjp_lead = 0x00;
  6239. /**
  6240. * @param {Stream} stream The stream of bytes being decoded.
  6241. * @param {number} bite The next byte read from the stream.
  6242. * @return {?(number|!Array.<number>)} The next code point(s)
  6243. * decoded, or null if not enough data exists in the input
  6244. * stream to decode a complete code point.
  6245. */
  6246. this.handler = function(stream, bite) {
  6247. // 1. If byte is end-of-stream and euc-jp lead is not 0x00, set
  6248. // euc-jp lead to 0x00, and return error.
  6249. if (bite === end_of_stream && eucjp_lead !== 0x00) {
  6250. eucjp_lead = 0x00;
  6251. return decoderError(fatal);
  6252. }
  6253. // 2. If byte is end-of-stream and euc-jp lead is 0x00, return
  6254. // finished.
  6255. if (bite === end_of_stream && eucjp_lead === 0x00)
  6256. return finished;
  6257. // 3. If euc-jp lead is 0x8E and byte is in the range 0xA1 to
  6258. // 0xDF, inclusive, set euc-jp lead to 0x00 and return a code
  6259. // point whose value is 0xFF61 − 0xA1 + byte.
  6260. if (eucjp_lead === 0x8E && inRange(bite, 0xA1, 0xDF)) {
  6261. eucjp_lead = 0x00;
  6262. return 0xFF61 - 0xA1 + bite;
  6263. }
  6264. // 4. If euc-jp lead is 0x8F and byte is in the range 0xA1 to
  6265. // 0xFE, inclusive, set the euc-jp jis0212 flag, set euc-jp lead
  6266. // to byte, and return continue.
  6267. if (eucjp_lead === 0x8F && inRange(bite, 0xA1, 0xFE)) {
  6268. eucjp_jis0212_flag = true;
  6269. eucjp_lead = bite;
  6270. return null;
  6271. }
  6272. // 5. If euc-jp lead is not 0x00, let lead be euc-jp lead, set
  6273. // euc-jp lead to 0x00, and run these substeps:
  6274. if (eucjp_lead !== 0x00) {
  6275. var lead = eucjp_lead;
  6276. eucjp_lead = 0x00;
  6277. // 1. Let code point be null.
  6278. var code_point = null;
  6279. // 2. If lead and byte are both in the range 0xA1 to 0xFE,
  6280. // inclusive, set code point to the index code point for (lead
  6281. // − 0xA1) × 94 + byte − 0xA1 in index jis0208 if the euc-jp
  6282. // jis0212 flag is unset and in index jis0212 otherwise.
  6283. if (inRange(lead, 0xA1, 0xFE) && inRange(bite, 0xA1, 0xFE)) {
  6284. code_point = indexCodePointFor(
  6285. (lead - 0xA1) * 94 + (bite - 0xA1),
  6286. index(!eucjp_jis0212_flag ? 'jis0208' : 'jis0212'));
  6287. }
  6288. // 3. Unset the euc-jp jis0212 flag.
  6289. eucjp_jis0212_flag = false;
  6290. // 4. If byte is not in the range 0xA1 to 0xFE, inclusive,
  6291. // prepend byte to stream.
  6292. if (!inRange(bite, 0xA1, 0xFE))
  6293. stream.prepend(bite);
  6294. // 5. If code point is null, return error.
  6295. if (code_point === null)
  6296. return decoderError(fatal);
  6297. // 6. Return a code point whose value is code point.
  6298. return code_point;
  6299. }
  6300. // 6. If byte is an ASCII byte, return a code point whose value
  6301. // is byte.
  6302. if (isASCIIByte(bite))
  6303. return bite;
  6304. // 7. If byte is 0x8E, 0x8F, or in the range 0xA1 to 0xFE,
  6305. // inclusive, set euc-jp lead to byte and return continue.
  6306. if (bite === 0x8E || bite === 0x8F || inRange(bite, 0xA1, 0xFE)) {
  6307. eucjp_lead = bite;
  6308. return null;
  6309. }
  6310. // 8. Return error.
  6311. return decoderError(fatal);
  6312. };
  6313. }
  6314. // 13.1.2 euc-jp encoder
  6315. /**
  6316. * @constructor
  6317. * @implements {Encoder}
  6318. * @param {{fatal: boolean}} options
  6319. */
  6320. function EUCJPEncoder(options) {
  6321. var fatal = options.fatal;
  6322. /**
  6323. * @param {Stream} stream Input stream.
  6324. * @param {number} code_point Next code point read from the stream.
  6325. * @return {(number|!Array.<number>)} Byte(s) to emit.
  6326. */
  6327. this.handler = function(stream, code_point) {
  6328. // 1. If code point is end-of-stream, return finished.
  6329. if (code_point === end_of_stream)
  6330. return finished;
  6331. // 2. If code point is an ASCII code point, return a byte whose
  6332. // value is code point.
  6333. if (isASCIICodePoint(code_point))
  6334. return code_point;
  6335. // 3. If code point is U+00A5, return byte 0x5C.
  6336. if (code_point === 0x00A5)
  6337. return 0x5C;
  6338. // 4. If code point is U+203E, return byte 0x7E.
  6339. if (code_point === 0x203E)
  6340. return 0x7E;
  6341. // 5. If code point is in the range U+FF61 to U+FF9F, inclusive,
  6342. // return two bytes whose values are 0x8E and code point −
  6343. // 0xFF61 + 0xA1.
  6344. if (inRange(code_point, 0xFF61, 0xFF9F))
  6345. return [0x8E, code_point - 0xFF61 + 0xA1];
  6346. // 6. If code point is U+2212, set it to U+FF0D.
  6347. if (code_point === 0x2212)
  6348. code_point = 0xFF0D;
  6349. // 7. Let pointer be the index pointer for code point in index
  6350. // jis0208.
  6351. var pointer = indexPointerFor(code_point, index('jis0208'));
  6352. // 8. If pointer is null, return error with code point.
  6353. if (pointer === null)
  6354. return encoderError(code_point);
  6355. // 9. Let lead be floor(pointer / 94) + 0xA1.
  6356. var lead = floor(pointer / 94) + 0xA1;
  6357. // 10. Let trail be pointer % 94 + 0xA1.
  6358. var trail = pointer % 94 + 0xA1;
  6359. // 11. Return two bytes whose values are lead and trail.
  6360. return [lead, trail];
  6361. };
  6362. }
  6363. /** @param {{fatal: boolean}} options */
  6364. encoders['EUC-JP'] = function(options) {
  6365. return new EUCJPEncoder(options);
  6366. };
  6367. /** @param {{fatal: boolean}} options */
  6368. decoders['EUC-JP'] = function(options) {
  6369. return new EUCJPDecoder(options);
  6370. };
  6371. // 13.2 iso-2022-jp
  6372. // 13.2.1 iso-2022-jp decoder
  6373. /**
  6374. * @constructor
  6375. * @implements {Decoder}
  6376. * @param {{fatal: boolean}} options
  6377. */
  6378. function ISO2022JPDecoder(options) {
  6379. var fatal = options.fatal;
  6380. /** @enum */
  6381. var states = {
  6382. ASCII: 0,
  6383. Roman: 1,
  6384. Katakana: 2,
  6385. LeadByte: 3,
  6386. TrailByte: 4,
  6387. EscapeStart: 5,
  6388. Escape: 6
  6389. };
  6390. // iso-2022-jp's decoder has an associated iso-2022-jp decoder
  6391. // state (initially ASCII), iso-2022-jp decoder output state
  6392. // (initially ASCII), iso-2022-jp lead (initially 0x00), and
  6393. // iso-2022-jp output flag (initially unset).
  6394. var /** @type {number} */ iso2022jp_decoder_state = states.ASCII,
  6395. /** @type {number} */ iso2022jp_decoder_output_state = states.ASCII,
  6396. /** @type {number} */ iso2022jp_lead = 0x00,
  6397. /** @type {boolean} */ iso2022jp_output_flag = false;
  6398. /**
  6399. * @param {Stream} stream The stream of bytes being decoded.
  6400. * @param {number} bite The next byte read from the stream.
  6401. * @return {?(number|!Array.<number>)} The next code point(s)
  6402. * decoded, or null if not enough data exists in the input
  6403. * stream to decode a complete code point.
  6404. */
  6405. this.handler = function(stream, bite) {
  6406. // switching on iso-2022-jp decoder state:
  6407. switch (iso2022jp_decoder_state) {
  6408. default:
  6409. case states.ASCII:
  6410. // ASCII
  6411. // Based on byte:
  6412. // 0x1B
  6413. if (bite === 0x1B) {
  6414. // Set iso-2022-jp decoder state to escape start and return
  6415. // continue.
  6416. iso2022jp_decoder_state = states.EscapeStart;
  6417. return null;
  6418. }
  6419. // 0x00 to 0x7F, excluding 0x0E, 0x0F, and 0x1B
  6420. if (inRange(bite, 0x00, 0x7F) && bite !== 0x0E
  6421. && bite !== 0x0F && bite !== 0x1B) {
  6422. // Unset the iso-2022-jp output flag and return a code point
  6423. // whose value is byte.
  6424. iso2022jp_output_flag = false;
  6425. return bite;
  6426. }
  6427. // end-of-stream
  6428. if (bite === end_of_stream) {
  6429. // Return finished.
  6430. return finished;
  6431. }
  6432. // Otherwise
  6433. // Unset the iso-2022-jp output flag and return error.
  6434. iso2022jp_output_flag = false;
  6435. return decoderError(fatal);
  6436. case states.Roman:
  6437. // Roman
  6438. // Based on byte:
  6439. // 0x1B
  6440. if (bite === 0x1B) {
  6441. // Set iso-2022-jp decoder state to escape start and return
  6442. // continue.
  6443. iso2022jp_decoder_state = states.EscapeStart;
  6444. return null;
  6445. }
  6446. // 0x5C
  6447. if (bite === 0x5C) {
  6448. // Unset the iso-2022-jp output flag and return code point
  6449. // U+00A5.
  6450. iso2022jp_output_flag = false;
  6451. return 0x00A5;
  6452. }
  6453. // 0x7E
  6454. if (bite === 0x7E) {
  6455. // Unset the iso-2022-jp output flag and return code point
  6456. // U+203E.
  6457. iso2022jp_output_flag = false;
  6458. return 0x203E;
  6459. }
  6460. // 0x00 to 0x7F, excluding 0x0E, 0x0F, 0x1B, 0x5C, and 0x7E
  6461. if (inRange(bite, 0x00, 0x7F) && bite !== 0x0E && bite !== 0x0F
  6462. && bite !== 0x1B && bite !== 0x5C && bite !== 0x7E) {
  6463. // Unset the iso-2022-jp output flag and return a code point
  6464. // whose value is byte.
  6465. iso2022jp_output_flag = false;
  6466. return bite;
  6467. }
  6468. // end-of-stream
  6469. if (bite === end_of_stream) {
  6470. // Return finished.
  6471. return finished;
  6472. }
  6473. // Otherwise
  6474. // Unset the iso-2022-jp output flag and return error.
  6475. iso2022jp_output_flag = false;
  6476. return decoderError(fatal);
  6477. case states.Katakana:
  6478. // Katakana
  6479. // Based on byte:
  6480. // 0x1B
  6481. if (bite === 0x1B) {
  6482. // Set iso-2022-jp decoder state to escape start and return
  6483. // continue.
  6484. iso2022jp_decoder_state = states.EscapeStart;
  6485. return null;
  6486. }
  6487. // 0x21 to 0x5F
  6488. if (inRange(bite, 0x21, 0x5F)) {
  6489. // Unset the iso-2022-jp output flag and return a code point
  6490. // whose value is 0xFF61 − 0x21 + byte.
  6491. iso2022jp_output_flag = false;
  6492. return 0xFF61 - 0x21 + bite;
  6493. }
  6494. // end-of-stream
  6495. if (bite === end_of_stream) {
  6496. // Return finished.
  6497. return finished;
  6498. }
  6499. // Otherwise
  6500. // Unset the iso-2022-jp output flag and return error.
  6501. iso2022jp_output_flag = false;
  6502. return decoderError(fatal);
  6503. case states.LeadByte:
  6504. // Lead byte
  6505. // Based on byte:
  6506. // 0x1B
  6507. if (bite === 0x1B) {
  6508. // Set iso-2022-jp decoder state to escape start and return
  6509. // continue.
  6510. iso2022jp_decoder_state = states.EscapeStart;
  6511. return null;
  6512. }
  6513. // 0x21 to 0x7E
  6514. if (inRange(bite, 0x21, 0x7E)) {
  6515. // Unset the iso-2022-jp output flag, set iso-2022-jp lead
  6516. // to byte, iso-2022-jp decoder state to trail byte, and
  6517. // return continue.
  6518. iso2022jp_output_flag = false;
  6519. iso2022jp_lead = bite;
  6520. iso2022jp_decoder_state = states.TrailByte;
  6521. return null;
  6522. }
  6523. // end-of-stream
  6524. if (bite === end_of_stream) {
  6525. // Return finished.
  6526. return finished;
  6527. }
  6528. // Otherwise
  6529. // Unset the iso-2022-jp output flag and return error.
  6530. iso2022jp_output_flag = false;
  6531. return decoderError(fatal);
  6532. case states.TrailByte:
  6533. // Trail byte
  6534. // Based on byte:
  6535. // 0x1B
  6536. if (bite === 0x1B) {
  6537. // Set iso-2022-jp decoder state to escape start and return
  6538. // continue.
  6539. iso2022jp_decoder_state = states.EscapeStart;
  6540. return decoderError(fatal);
  6541. }
  6542. // 0x21 to 0x7E
  6543. if (inRange(bite, 0x21, 0x7E)) {
  6544. // 1. Set the iso-2022-jp decoder state to lead byte.
  6545. iso2022jp_decoder_state = states.LeadByte;
  6546. // 2. Let pointer be (iso-2022-jp lead − 0x21) × 94 + byte − 0x21.
  6547. var pointer = (iso2022jp_lead - 0x21) * 94 + bite - 0x21;
  6548. // 3. Let code point be the index code point for pointer in
  6549. // index jis0208.
  6550. var code_point = indexCodePointFor(pointer, index('jis0208'));
  6551. // 4. If code point is null, return error.
  6552. if (code_point === null)
  6553. return decoderError(fatal);
  6554. // 5. Return a code point whose value is code point.
  6555. return code_point;
  6556. }
  6557. // end-of-stream
  6558. if (bite === end_of_stream) {
  6559. // Set the iso-2022-jp decoder state to lead byte, prepend
  6560. // byte to stream, and return error.
  6561. iso2022jp_decoder_state = states.LeadByte;
  6562. stream.prepend(bite);
  6563. return decoderError(fatal);
  6564. }
  6565. // Otherwise
  6566. // Set iso-2022-jp decoder state to lead byte and return
  6567. // error.
  6568. iso2022jp_decoder_state = states.LeadByte;
  6569. return decoderError(fatal);
  6570. case states.EscapeStart:
  6571. // Escape start
  6572. // 1. If byte is either 0x24 or 0x28, set iso-2022-jp lead to
  6573. // byte, iso-2022-jp decoder state to escape, and return
  6574. // continue.
  6575. if (bite === 0x24 || bite === 0x28) {
  6576. iso2022jp_lead = bite;
  6577. iso2022jp_decoder_state = states.Escape;
  6578. return null;
  6579. }
  6580. // 2. Prepend byte to stream.
  6581. stream.prepend(bite);
  6582. // 3. Unset the iso-2022-jp output flag, set iso-2022-jp
  6583. // decoder state to iso-2022-jp decoder output state, and
  6584. // return error.
  6585. iso2022jp_output_flag = false;
  6586. iso2022jp_decoder_state = iso2022jp_decoder_output_state;
  6587. return decoderError(fatal);
  6588. case states.Escape:
  6589. // Escape
  6590. // 1. Let lead be iso-2022-jp lead and set iso-2022-jp lead to
  6591. // 0x00.
  6592. var lead = iso2022jp_lead;
  6593. iso2022jp_lead = 0x00;
  6594. // 2. Let state be null.
  6595. var state = null;
  6596. // 3. If lead is 0x28 and byte is 0x42, set state to ASCII.
  6597. if (lead === 0x28 && bite === 0x42)
  6598. state = states.ASCII;
  6599. // 4. If lead is 0x28 and byte is 0x4A, set state to Roman.
  6600. if (lead === 0x28 && bite === 0x4A)
  6601. state = states.Roman;
  6602. // 5. If lead is 0x28 and byte is 0x49, set state to Katakana.
  6603. if (lead === 0x28 && bite === 0x49)
  6604. state = states.Katakana;
  6605. // 6. If lead is 0x24 and byte is either 0x40 or 0x42, set
  6606. // state to lead byte.
  6607. if (lead === 0x24 && (bite === 0x40 || bite === 0x42))
  6608. state = states.LeadByte;
  6609. // 7. If state is non-null, run these substeps:
  6610. if (state !== null) {
  6611. // 1. Set iso-2022-jp decoder state and iso-2022-jp decoder
  6612. // output state to states.
  6613. iso2022jp_decoder_state = iso2022jp_decoder_state = state;
  6614. // 2. Let output flag be the iso-2022-jp output flag.
  6615. var output_flag = iso2022jp_output_flag;
  6616. // 3. Set the iso-2022-jp output flag.
  6617. iso2022jp_output_flag = true;
  6618. // 4. Return continue, if output flag is unset, and error
  6619. // otherwise.
  6620. return !output_flag ? null : decoderError(fatal);
  6621. }
  6622. // 8. Prepend lead and byte to stream.
  6623. stream.prepend([lead, bite]);
  6624. // 9. Unset the iso-2022-jp output flag, set iso-2022-jp
  6625. // decoder state to iso-2022-jp decoder output state and
  6626. // return error.
  6627. iso2022jp_output_flag = false;
  6628. iso2022jp_decoder_state = iso2022jp_decoder_output_state;
  6629. return decoderError(fatal);
  6630. }
  6631. };
  6632. }
  6633. // 13.2.2 iso-2022-jp encoder
  6634. /**
  6635. * @constructor
  6636. * @implements {Encoder}
  6637. * @param {{fatal: boolean}} options
  6638. */
  6639. function ISO2022JPEncoder(options) {
  6640. var fatal = options.fatal;
  6641. // iso-2022-jp's encoder has an associated iso-2022-jp encoder
  6642. // state which is one of ASCII, Roman, and jis0208 (initially
  6643. // ASCII).
  6644. /** @enum */
  6645. var states = {
  6646. ASCII: 0,
  6647. Roman: 1,
  6648. jis0208: 2
  6649. };
  6650. var /** @type {number} */ iso2022jp_state = states.ASCII;
  6651. /**
  6652. * @param {Stream} stream Input stream.
  6653. * @param {number} code_point Next code point read from the stream.
  6654. * @return {(number|!Array.<number>)} Byte(s) to emit.
  6655. */
  6656. this.handler = function(stream, code_point) {
  6657. // 1. If code point is end-of-stream and iso-2022-jp encoder
  6658. // state is not ASCII, prepend code point to stream, set
  6659. // iso-2022-jp encoder state to ASCII, and return three bytes
  6660. // 0x1B 0x28 0x42.
  6661. if (code_point === end_of_stream &&
  6662. iso2022jp_state !== states.ASCII) {
  6663. stream.prepend(code_point);
  6664. iso2022jp_state = states.ASCII;
  6665. return [0x1B, 0x28, 0x42];
  6666. }
  6667. // 2. If code point is end-of-stream and iso-2022-jp encoder
  6668. // state is ASCII, return finished.
  6669. if (code_point === end_of_stream && iso2022jp_state === states.ASCII)
  6670. return finished;
  6671. // 3. If ISO-2022-JP encoder state is ASCII or Roman, and code
  6672. // point is U+000E, U+000F, or U+001B, return error with U+FFFD.
  6673. if ((iso2022jp_state === states.ASCII ||
  6674. iso2022jp_state === states.Roman) &&
  6675. (code_point === 0x000E || code_point === 0x000F ||
  6676. code_point === 0x001B)) {
  6677. return encoderError(0xFFFD);
  6678. }
  6679. // 4. If iso-2022-jp encoder state is ASCII and code point is an
  6680. // ASCII code point, return a byte whose value is code point.
  6681. if (iso2022jp_state === states.ASCII &&
  6682. isASCIICodePoint(code_point))
  6683. return code_point;
  6684. // 5. If iso-2022-jp encoder state is Roman and code point is an
  6685. // ASCII code point, excluding U+005C and U+007E, or is U+00A5
  6686. // or U+203E, run these substeps:
  6687. if (iso2022jp_state === states.Roman &&
  6688. ((isASCIICodePoint(code_point) &&
  6689. code_point !== 0x005C && code_point !== 0x007E) ||
  6690. (code_point == 0x00A5 || code_point == 0x203E))) {
  6691. // 1. If code point is an ASCII code point, return a byte
  6692. // whose value is code point.
  6693. if (isASCIICodePoint(code_point))
  6694. return code_point;
  6695. // 2. If code point is U+00A5, return byte 0x5C.
  6696. if (code_point === 0x00A5)
  6697. return 0x5C;
  6698. // 3. If code point is U+203E, return byte 0x7E.
  6699. if (code_point === 0x203E)
  6700. return 0x7E;
  6701. }
  6702. // 6. If code point is an ASCII code point, and iso-2022-jp
  6703. // encoder state is not ASCII, prepend code point to stream, set
  6704. // iso-2022-jp encoder state to ASCII, and return three bytes
  6705. // 0x1B 0x28 0x42.
  6706. if (isASCIICodePoint(code_point) &&
  6707. iso2022jp_state !== states.ASCII) {
  6708. stream.prepend(code_point);
  6709. iso2022jp_state = states.ASCII;
  6710. return [0x1B, 0x28, 0x42];
  6711. }
  6712. // 7. If code point is either U+00A5 or U+203E, and iso-2022-jp
  6713. // encoder state is not Roman, prepend code point to stream, set
  6714. // iso-2022-jp encoder state to Roman, and return three bytes
  6715. // 0x1B 0x28 0x4A.
  6716. if ((code_point === 0x00A5 || code_point === 0x203E) &&
  6717. iso2022jp_state !== states.Roman) {
  6718. stream.prepend(code_point);
  6719. iso2022jp_state = states.Roman;
  6720. return [0x1B, 0x28, 0x4A];
  6721. }
  6722. // 8. If code point is U+2212, set it to U+FF0D.
  6723. if (code_point === 0x2212)
  6724. code_point = 0xFF0D;
  6725. // 9. Let pointer be the index pointer for code point in index
  6726. // jis0208.
  6727. var pointer = indexPointerFor(code_point, index('jis0208'));
  6728. // 10. If pointer is null, return error with code point.
  6729. if (pointer === null)
  6730. return encoderError(code_point);
  6731. // 11. If iso-2022-jp encoder state is not jis0208, prepend code
  6732. // point to stream, set iso-2022-jp encoder state to jis0208,
  6733. // and return three bytes 0x1B 0x24 0x42.
  6734. if (iso2022jp_state !== states.jis0208) {
  6735. stream.prepend(code_point);
  6736. iso2022jp_state = states.jis0208;
  6737. return [0x1B, 0x24, 0x42];
  6738. }
  6739. // 12. Let lead be floor(pointer / 94) + 0x21.
  6740. var lead = floor(pointer / 94) + 0x21;
  6741. // 13. Let trail be pointer % 94 + 0x21.
  6742. var trail = pointer % 94 + 0x21;
  6743. // 14. Return two bytes whose values are lead and trail.
  6744. return [lead, trail];
  6745. };
  6746. }
  6747. /** @param {{fatal: boolean}} options */
  6748. encoders['ISO-2022-JP'] = function(options) {
  6749. return new ISO2022JPEncoder(options);
  6750. };
  6751. /** @param {{fatal: boolean}} options */
  6752. decoders['ISO-2022-JP'] = function(options) {
  6753. return new ISO2022JPDecoder(options);
  6754. };
  6755. // 13.3 Shift_JIS
  6756. // 13.3.1 Shift_JIS decoder
  6757. /**
  6758. * @constructor
  6759. * @implements {Decoder}
  6760. * @param {{fatal: boolean}} options
  6761. */
  6762. function ShiftJISDecoder(options) {
  6763. var fatal = options.fatal;
  6764. // Shift_JIS's decoder has an associated Shift_JIS lead (initially
  6765. // 0x00).
  6766. var /** @type {number} */ Shift_JIS_lead = 0x00;
  6767. /**
  6768. * @param {Stream} stream The stream of bytes being decoded.
  6769. * @param {number} bite The next byte read from the stream.
  6770. * @return {?(number|!Array.<number>)} The next code point(s)
  6771. * decoded, or null if not enough data exists in the input
  6772. * stream to decode a complete code point.
  6773. */
  6774. this.handler = function(stream, bite) {
  6775. // 1. If byte is end-of-stream and Shift_JIS lead is not 0x00,
  6776. // set Shift_JIS lead to 0x00 and return error.
  6777. if (bite === end_of_stream && Shift_JIS_lead !== 0x00) {
  6778. Shift_JIS_lead = 0x00;
  6779. return decoderError(fatal);
  6780. }
  6781. // 2. If byte is end-of-stream and Shift_JIS lead is 0x00,
  6782. // return finished.
  6783. if (bite === end_of_stream && Shift_JIS_lead === 0x00)
  6784. return finished;
  6785. // 3. If Shift_JIS lead is not 0x00, let lead be Shift_JIS lead,
  6786. // let pointer be null, set Shift_JIS lead to 0x00, and then run
  6787. // these substeps:
  6788. if (Shift_JIS_lead !== 0x00) {
  6789. var lead = Shift_JIS_lead;
  6790. var pointer = null;
  6791. Shift_JIS_lead = 0x00;
  6792. // 1. Let offset be 0x40, if byte is less than 0x7F, and 0x41
  6793. // otherwise.
  6794. var offset = (bite < 0x7F) ? 0x40 : 0x41;
  6795. // 2. Let lead offset be 0x81, if lead is less than 0xA0, and
  6796. // 0xC1 otherwise.
  6797. var lead_offset = (lead < 0xA0) ? 0x81 : 0xC1;
  6798. // 3. If byte is in the range 0x40 to 0x7E, inclusive, or 0x80
  6799. // to 0xFC, inclusive, set pointer to (lead − lead offset) ×
  6800. // 188 + byte − offset.
  6801. if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0x80, 0xFC))
  6802. pointer = (lead - lead_offset) * 188 + bite - offset;
  6803. // 4. If pointer is in the range 8836 to 10715, inclusive,
  6804. // return a code point whose value is 0xE000 − 8836 + pointer.
  6805. if (inRange(pointer, 8836, 10715))
  6806. return 0xE000 - 8836 + pointer;
  6807. // 5. Let code point be null, if pointer is null, and the
  6808. // index code point for pointer in index jis0208 otherwise.
  6809. var code_point = (pointer === null) ? null :
  6810. indexCodePointFor(pointer, index('jis0208'));
  6811. // 6. If code point is null and byte is an ASCII byte, prepend
  6812. // byte to stream.
  6813. if (code_point === null && isASCIIByte(bite))
  6814. stream.prepend(bite);
  6815. // 7. If code point is null, return error.
  6816. if (code_point === null)
  6817. return decoderError(fatal);
  6818. // 8. Return a code point whose value is code point.
  6819. return code_point;
  6820. }
  6821. // 4. If byte is an ASCII byte or 0x80, return a code point
  6822. // whose value is byte.
  6823. if (isASCIIByte(bite) || bite === 0x80)
  6824. return bite;
  6825. // 5. If byte is in the range 0xA1 to 0xDF, inclusive, return a
  6826. // code point whose value is 0xFF61 − 0xA1 + byte.
  6827. if (inRange(bite, 0xA1, 0xDF))
  6828. return 0xFF61 - 0xA1 + bite;
  6829. // 6. If byte is in the range 0x81 to 0x9F, inclusive, or 0xE0
  6830. // to 0xFC, inclusive, set Shift_JIS lead to byte and return
  6831. // continue.
  6832. if (inRange(bite, 0x81, 0x9F) || inRange(bite, 0xE0, 0xFC)) {
  6833. Shift_JIS_lead = bite;
  6834. return null;
  6835. }
  6836. // 7. Return error.
  6837. return decoderError(fatal);
  6838. };
  6839. }
  6840. // 13.3.2 Shift_JIS encoder
  6841. /**
  6842. * @constructor
  6843. * @implements {Encoder}
  6844. * @param {{fatal: boolean}} options
  6845. */
  6846. function ShiftJISEncoder(options) {
  6847. var fatal = options.fatal;
  6848. /**
  6849. * @param {Stream} stream Input stream.
  6850. * @param {number} code_point Next code point read from the stream.
  6851. * @return {(number|!Array.<number>)} Byte(s) to emit.
  6852. */
  6853. this.handler = function(stream, code_point) {
  6854. // 1. If code point is end-of-stream, return finished.
  6855. if (code_point === end_of_stream)
  6856. return finished;
  6857. // 2. If code point is an ASCII code point or U+0080, return a
  6858. // byte whose value is code point.
  6859. if (isASCIICodePoint(code_point) || code_point === 0x0080)
  6860. return code_point;
  6861. // 3. If code point is U+00A5, return byte 0x5C.
  6862. if (code_point === 0x00A5)
  6863. return 0x5C;
  6864. // 4. If code point is U+203E, return byte 0x7E.
  6865. if (code_point === 0x203E)
  6866. return 0x7E;
  6867. // 5. If code point is in the range U+FF61 to U+FF9F, inclusive,
  6868. // return a byte whose value is code point − 0xFF61 + 0xA1.
  6869. if (inRange(code_point, 0xFF61, 0xFF9F))
  6870. return code_point - 0xFF61 + 0xA1;
  6871. // 6. If code point is U+2212, set it to U+FF0D.
  6872. if (code_point === 0x2212)
  6873. code_point = 0xFF0D;
  6874. // 7. Let pointer be the index Shift_JIS pointer for code point.
  6875. var pointer = indexShiftJISPointerFor(code_point);
  6876. // 8. If pointer is null, return error with code point.
  6877. if (pointer === null)
  6878. return encoderError(code_point);
  6879. // 9. Let lead be floor(pointer / 188).
  6880. var lead = floor(pointer / 188);
  6881. // 10. Let lead offset be 0x81, if lead is less than 0x1F, and
  6882. // 0xC1 otherwise.
  6883. var lead_offset = (lead < 0x1F) ? 0x81 : 0xC1;
  6884. // 11. Let trail be pointer % 188.
  6885. var trail = pointer % 188;
  6886. // 12. Let offset be 0x40, if trail is less than 0x3F, and 0x41
  6887. // otherwise.
  6888. var offset = (trail < 0x3F) ? 0x40 : 0x41;
  6889. // 13. Return two bytes whose values are lead + lead offset and
  6890. // trail + offset.
  6891. return [lead + lead_offset, trail + offset];
  6892. };
  6893. }
  6894. /** @param {{fatal: boolean}} options */
  6895. encoders['Shift_JIS'] = function(options) {
  6896. return new ShiftJISEncoder(options);
  6897. };
  6898. /** @param {{fatal: boolean}} options */
  6899. decoders['Shift_JIS'] = function(options) {
  6900. return new ShiftJISDecoder(options);
  6901. };
  6902. //
  6903. // 14. Legacy multi-byte Korean encodings
  6904. //
  6905. // 14.1 euc-kr
  6906. // 14.1.1 euc-kr decoder
  6907. /**
  6908. * @constructor
  6909. * @implements {Decoder}
  6910. * @param {{fatal: boolean}} options
  6911. */
  6912. function EUCKRDecoder(options) {
  6913. var fatal = options.fatal;
  6914. // euc-kr's decoder has an associated euc-kr lead (initially 0x00).
  6915. var /** @type {number} */ euckr_lead = 0x00;
  6916. /**
  6917. * @param {Stream} stream The stream of bytes being decoded.
  6918. * @param {number} bite The next byte read from the stream.
  6919. * @return {?(number|!Array.<number>)} The next code point(s)
  6920. * decoded, or null if not enough data exists in the input
  6921. * stream to decode a complete code point.
  6922. */
  6923. this.handler = function(stream, bite) {
  6924. // 1. If byte is end-of-stream and euc-kr lead is not 0x00, set
  6925. // euc-kr lead to 0x00 and return error.
  6926. if (bite === end_of_stream && euckr_lead !== 0) {
  6927. euckr_lead = 0x00;
  6928. return decoderError(fatal);
  6929. }
  6930. // 2. If byte is end-of-stream and euc-kr lead is 0x00, return
  6931. // finished.
  6932. if (bite === end_of_stream && euckr_lead === 0)
  6933. return finished;
  6934. // 3. If euc-kr lead is not 0x00, let lead be euc-kr lead, let
  6935. // pointer be null, set euc-kr lead to 0x00, and then run these
  6936. // substeps:
  6937. if (euckr_lead !== 0x00) {
  6938. var lead = euckr_lead;
  6939. var pointer = null;
  6940. euckr_lead = 0x00;
  6941. // 1. If byte is in the range 0x41 to 0xFE, inclusive, set
  6942. // pointer to (lead − 0x81) × 190 + (byte − 0x41).
  6943. if (inRange(bite, 0x41, 0xFE))
  6944. pointer = (lead - 0x81) * 190 + (bite - 0x41);
  6945. // 2. Let code point be null, if pointer is null, and the
  6946. // index code point for pointer in index euc-kr otherwise.
  6947. var code_point = (pointer === null)
  6948. ? null : indexCodePointFor(pointer, index('euc-kr'));
  6949. // 3. If code point is null and byte is an ASCII byte, prepend
  6950. // byte to stream.
  6951. if (pointer === null && isASCIIByte(bite))
  6952. stream.prepend(bite);
  6953. // 4. If code point is null, return error.
  6954. if (code_point === null)
  6955. return decoderError(fatal);
  6956. // 5. Return a code point whose value is code point.
  6957. return code_point;
  6958. }
  6959. // 4. If byte is an ASCII byte, return a code point whose value
  6960. // is byte.
  6961. if (isASCIIByte(bite))
  6962. return bite;
  6963. // 5. If byte is in the range 0x81 to 0xFE, inclusive, set
  6964. // euc-kr lead to byte and return continue.
  6965. if (inRange(bite, 0x81, 0xFE)) {
  6966. euckr_lead = bite;
  6967. return null;
  6968. }
  6969. // 6. Return error.
  6970. return decoderError(fatal);
  6971. };
  6972. }
  6973. // 14.1.2 euc-kr encoder
  6974. /**
  6975. * @constructor
  6976. * @implements {Encoder}
  6977. * @param {{fatal: boolean}} options
  6978. */
  6979. function EUCKREncoder(options) {
  6980. var fatal = options.fatal;
  6981. /**
  6982. * @param {Stream} stream Input stream.
  6983. * @param {number} code_point Next code point read from the stream.
  6984. * @return {(number|!Array.<number>)} Byte(s) to emit.
  6985. */
  6986. this.handler = function(stream, code_point) {
  6987. // 1. If code point is end-of-stream, return finished.
  6988. if (code_point === end_of_stream)
  6989. return finished;
  6990. // 2. If code point is an ASCII code point, return a byte whose
  6991. // value is code point.
  6992. if (isASCIICodePoint(code_point))
  6993. return code_point;
  6994. // 3. Let pointer be the index pointer for code point in index
  6995. // euc-kr.
  6996. var pointer = indexPointerFor(code_point, index('euc-kr'));
  6997. // 4. If pointer is null, return error with code point.
  6998. if (pointer === null)
  6999. return encoderError(code_point);
  7000. // 5. Let lead be floor(pointer / 190) + 0x81.
  7001. var lead = floor(pointer / 190) + 0x81;
  7002. // 6. Let trail be pointer % 190 + 0x41.
  7003. var trail = (pointer % 190) + 0x41;
  7004. // 7. Return two bytes whose values are lead and trail.
  7005. return [lead, trail];
  7006. };
  7007. }
  7008. /** @param {{fatal: boolean}} options */
  7009. encoders['EUC-KR'] = function(options) {
  7010. return new EUCKREncoder(options);
  7011. };
  7012. /** @param {{fatal: boolean}} options */
  7013. decoders['EUC-KR'] = function(options) {
  7014. return new EUCKRDecoder(options);
  7015. };
  7016. //
  7017. // 15. Legacy miscellaneous encodings
  7018. //
  7019. // 15.1 replacement
  7020. // Not needed - API throws RangeError
  7021. // 15.2 Common infrastructure for utf-16be and utf-16le
  7022. /**
  7023. * @param {number} code_unit
  7024. * @param {boolean} utf16be
  7025. * @return {!Array.<number>} bytes
  7026. */
  7027. function convertCodeUnitToBytes(code_unit, utf16be) {
  7028. // 1. Let byte1 be code unit >> 8.
  7029. var byte1 = code_unit >> 8;
  7030. // 2. Let byte2 be code unit & 0x00FF.
  7031. var byte2 = code_unit & 0x00FF;
  7032. // 3. Then return the bytes in order:
  7033. // utf-16be flag is set: byte1, then byte2.
  7034. if (utf16be)
  7035. return [byte1, byte2];
  7036. // utf-16be flag is unset: byte2, then byte1.
  7037. return [byte2, byte1];
  7038. }
  7039. // 15.2.1 shared utf-16 decoder
  7040. /**
  7041. * @constructor
  7042. * @implements {Decoder}
  7043. * @param {boolean} utf16_be True if big-endian, false if little-endian.
  7044. * @param {{fatal: boolean}} options
  7045. */
  7046. function UTF16Decoder(utf16_be, options) {
  7047. var fatal = options.fatal;
  7048. var /** @type {?number} */ utf16_lead_byte = null,
  7049. /** @type {?number} */ utf16_lead_surrogate = null;
  7050. /**
  7051. * @param {Stream} stream The stream of bytes being decoded.
  7052. * @param {number} bite The next byte read from the stream.
  7053. * @return {?(number|!Array.<number>)} The next code point(s)
  7054. * decoded, or null if not enough data exists in the input
  7055. * stream to decode a complete code point.
  7056. */
  7057. this.handler = function(stream, bite) {
  7058. // 1. If byte is end-of-stream and either utf-16 lead byte or
  7059. // utf-16 lead surrogate is not null, set utf-16 lead byte and
  7060. // utf-16 lead surrogate to null, and return error.
  7061. if (bite === end_of_stream && (utf16_lead_byte !== null ||
  7062. utf16_lead_surrogate !== null)) {
  7063. return decoderError(fatal);
  7064. }
  7065. // 2. If byte is end-of-stream and utf-16 lead byte and utf-16
  7066. // lead surrogate are null, return finished.
  7067. if (bite === end_of_stream && utf16_lead_byte === null &&
  7068. utf16_lead_surrogate === null) {
  7069. return finished;
  7070. }
  7071. // 3. If utf-16 lead byte is null, set utf-16 lead byte to byte
  7072. // and return continue.
  7073. if (utf16_lead_byte === null) {
  7074. utf16_lead_byte = bite;
  7075. return null;
  7076. }
  7077. // 4. Let code unit be the result of:
  7078. var code_unit;
  7079. if (utf16_be) {
  7080. // utf-16be decoder flag is set
  7081. // (utf-16 lead byte << 8) + byte.
  7082. code_unit = (utf16_lead_byte << 8) + bite;
  7083. } else {
  7084. // utf-16be decoder flag is unset
  7085. // (byte << 8) + utf-16 lead byte.
  7086. code_unit = (bite << 8) + utf16_lead_byte;
  7087. }
  7088. // Then set utf-16 lead byte to null.
  7089. utf16_lead_byte = null;
  7090. // 5. If utf-16 lead surrogate is not null, let lead surrogate
  7091. // be utf-16 lead surrogate, set utf-16 lead surrogate to null,
  7092. // and then run these substeps:
  7093. if (utf16_lead_surrogate !== null) {
  7094. var lead_surrogate = utf16_lead_surrogate;
  7095. utf16_lead_surrogate = null;
  7096. // 1. If code unit is in the range U+DC00 to U+DFFF,
  7097. // inclusive, return a code point whose value is 0x10000 +
  7098. // ((lead surrogate − 0xD800) << 10) + (code unit − 0xDC00).
  7099. if (inRange(code_unit, 0xDC00, 0xDFFF)) {
  7100. return 0x10000 + (lead_surrogate - 0xD800) * 0x400 +
  7101. (code_unit - 0xDC00);
  7102. }
  7103. // 2. Prepend the sequence resulting of converting code unit
  7104. // to bytes using utf-16be decoder flag to stream and return
  7105. // error.
  7106. stream.prepend(convertCodeUnitToBytes(code_unit, utf16_be));
  7107. return decoderError(fatal);
  7108. }
  7109. // 6. If code unit is in the range U+D800 to U+DBFF, inclusive,
  7110. // set utf-16 lead surrogate to code unit and return continue.
  7111. if (inRange(code_unit, 0xD800, 0xDBFF)) {
  7112. utf16_lead_surrogate = code_unit;
  7113. return null;
  7114. }
  7115. // 7. If code unit is in the range U+DC00 to U+DFFF, inclusive,
  7116. // return error.
  7117. if (inRange(code_unit, 0xDC00, 0xDFFF))
  7118. return decoderError(fatal);
  7119. // 8. Return code point code unit.
  7120. return code_unit;
  7121. };
  7122. }
  7123. // 15.2.2 shared utf-16 encoder
  7124. /**
  7125. * @constructor
  7126. * @implements {Encoder}
  7127. * @param {boolean} utf16_be True if big-endian, false if little-endian.
  7128. * @param {{fatal: boolean}} options
  7129. */
  7130. function UTF16Encoder(utf16_be, options) {
  7131. var fatal = options.fatal;
  7132. /**
  7133. * @param {Stream} stream Input stream.
  7134. * @param {number} code_point Next code point read from the stream.
  7135. * @return {(number|!Array.<number>)} Byte(s) to emit.
  7136. */
  7137. this.handler = function(stream, code_point) {
  7138. // 1. If code point is end-of-stream, return finished.
  7139. if (code_point === end_of_stream)
  7140. return finished;
  7141. // 2. If code point is in the range U+0000 to U+FFFF, inclusive,
  7142. // return the sequence resulting of converting code point to
  7143. // bytes using utf-16be encoder flag.
  7144. if (inRange(code_point, 0x0000, 0xFFFF))
  7145. return convertCodeUnitToBytes(code_point, utf16_be);
  7146. // 3. Let lead be ((code point − 0x10000) >> 10) + 0xD800,
  7147. // converted to bytes using utf-16be encoder flag.
  7148. var lead = convertCodeUnitToBytes(
  7149. ((code_point - 0x10000) >> 10) + 0xD800, utf16_be);
  7150. // 4. Let trail be ((code point − 0x10000) & 0x3FF) + 0xDC00,
  7151. // converted to bytes using utf-16be encoder flag.
  7152. var trail = convertCodeUnitToBytes(
  7153. ((code_point - 0x10000) & 0x3FF) + 0xDC00, utf16_be);
  7154. // 5. Return a byte sequence of lead followed by trail.
  7155. return lead.concat(trail);
  7156. };
  7157. }
  7158. // 15.3 utf-16be
  7159. // 15.3.1 utf-16be decoder
  7160. /** @param {{fatal: boolean}} options */
  7161. encoders['UTF-16BE'] = function(options) {
  7162. return new UTF16Encoder(true, options);
  7163. };
  7164. // 15.3.2 utf-16be encoder
  7165. /** @param {{fatal: boolean}} options */
  7166. decoders['UTF-16BE'] = function(options) {
  7167. return new UTF16Decoder(true, options);
  7168. };
  7169. // 15.4 utf-16le
  7170. // 15.4.1 utf-16le decoder
  7171. /** @param {{fatal: boolean}} options */
  7172. encoders['UTF-16LE'] = function(options) {
  7173. return new UTF16Encoder(false, options);
  7174. };
  7175. // 15.4.2 utf-16le encoder
  7176. /** @param {{fatal: boolean}} options */
  7177. decoders['UTF-16LE'] = function(options) {
  7178. return new UTF16Decoder(false, options);
  7179. };
  7180. // 15.5 x-user-defined
  7181. // 15.5.1 x-user-defined decoder
  7182. /**
  7183. * @constructor
  7184. * @implements {Decoder}
  7185. * @param {{fatal: boolean}} options
  7186. */
  7187. function XUserDefinedDecoder(options) {
  7188. var fatal = options.fatal;
  7189. /**
  7190. * @param {Stream} stream The stream of bytes being decoded.
  7191. * @param {number} bite The next byte read from the stream.
  7192. * @return {?(number|!Array.<number>)} The next code point(s)
  7193. * decoded, or null if not enough data exists in the input
  7194. * stream to decode a complete code point.
  7195. */
  7196. this.handler = function(stream, bite) {
  7197. // 1. If byte is end-of-stream, return finished.
  7198. if (bite === end_of_stream)
  7199. return finished;
  7200. // 2. If byte is an ASCII byte, return a code point whose value
  7201. // is byte.
  7202. if (isASCIIByte(bite))
  7203. return bite;
  7204. // 3. Return a code point whose value is 0xF780 + byte − 0x80.
  7205. return 0xF780 + bite - 0x80;
  7206. };
  7207. }
  7208. // 15.5.2 x-user-defined encoder
  7209. /**
  7210. * @constructor
  7211. * @implements {Encoder}
  7212. * @param {{fatal: boolean}} options
  7213. */
  7214. function XUserDefinedEncoder(options) {
  7215. var fatal = options.fatal;
  7216. /**
  7217. * @param {Stream} stream Input stream.
  7218. * @param {number} code_point Next code point read from the stream.
  7219. * @return {(number|!Array.<number>)} Byte(s) to emit.
  7220. */
  7221. this.handler = function(stream, code_point) {
  7222. // 1.If code point is end-of-stream, return finished.
  7223. if (code_point === end_of_stream)
  7224. return finished;
  7225. // 2. If code point is an ASCII code point, return a byte whose
  7226. // value is code point.
  7227. if (isASCIICodePoint(code_point))
  7228. return code_point;
  7229. // 3. If code point is in the range U+F780 to U+F7FF, inclusive,
  7230. // return a byte whose value is code point − 0xF780 + 0x80.
  7231. if (inRange(code_point, 0xF780, 0xF7FF))
  7232. return code_point - 0xF780 + 0x80;
  7233. // 4. Return error with code point.
  7234. return encoderError(code_point);
  7235. };
  7236. }
  7237. /** @param {{fatal: boolean}} options */
  7238. encoders['x-user-defined'] = function(options) {
  7239. return new XUserDefinedEncoder(options);
  7240. };
  7241. /** @param {{fatal: boolean}} options */
  7242. decoders['x-user-defined'] = function(options) {
  7243. return new XUserDefinedDecoder(options);
  7244. };
  7245. if (!global['TextEncoder'])
  7246. global['TextEncoder'] = TextEncoder;
  7247. if (!global['TextDecoder'])
  7248. global['TextDecoder'] = TextDecoder;
  7249. if (typeof module !== "undefined" && module.exports) {
  7250. module.exports = {
  7251. TextEncoder: global['TextEncoder'],
  7252. TextDecoder: global['TextDecoder'],
  7253. EncodingIndexes: global["encoding-indexes"]
  7254. };
  7255. }
  7256. // For strict environments where `this` inside the global scope
  7257. // is `undefined`, take a pure object instead
  7258. }(this || {}));
  7259. },{"./encoding-indexes.js":67}],69:[function(require,module,exports){
  7260. /*!
  7261. diff v3.5.0
  7262. Software License Agreement (BSD License)
  7263. Copyright (c) 2009-2015, Kevin Decker <kpdecker@gmail.com>
  7264. All rights reserved.
  7265. Redistribution and use of this software in source and binary forms, with or without modification,
  7266. are permitted provided that the following conditions are met:
  7267. * Redistributions of source code must retain the above
  7268. copyright notice, this list of conditions and the
  7269. following disclaimer.
  7270. * Redistributions in binary form must reproduce the above
  7271. copyright notice, this list of conditions and the
  7272. following disclaimer in the documentation and/or other
  7273. materials provided with the distribution.
  7274. * Neither the name of Kevin Decker nor the names of its
  7275. contributors may be used to endorse or promote products
  7276. derived from this software without specific prior
  7277. written permission.
  7278. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
  7279. IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  7280. FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  7281. CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  7282. DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  7283. DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
  7284. IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  7285. OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  7286. @license
  7287. */
  7288. (function webpackUniversalModuleDefinition(root, factory) {
  7289. if(typeof exports === 'object' && typeof module === 'object')
  7290. module.exports = factory();
  7291. else if(typeof define === 'function' && define.amd)
  7292. define([], factory);
  7293. else if(typeof exports === 'object')
  7294. exports["JsDiff"] = factory();
  7295. else
  7296. root["JsDiff"] = factory();
  7297. })(this, function() {
  7298. return /******/ (function(modules) { // webpackBootstrap
  7299. /******/ // The module cache
  7300. /******/ var installedModules = {};
  7301. /******/ // The require function
  7302. /******/ function __webpack_require__(moduleId) {
  7303. /******/ // Check if module is in cache
  7304. /******/ if(installedModules[moduleId])
  7305. /******/ return installedModules[moduleId].exports;
  7306. /******/ // Create a new module (and put it into the cache)
  7307. /******/ var module = installedModules[moduleId] = {
  7308. /******/ exports: {},
  7309. /******/ id: moduleId,
  7310. /******/ loaded: false
  7311. /******/ };
  7312. /******/ // Execute the module function
  7313. /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  7314. /******/ // Flag the module as loaded
  7315. /******/ module.loaded = true;
  7316. /******/ // Return the exports of the module
  7317. /******/ return module.exports;
  7318. /******/ }
  7319. /******/ // expose the modules object (__webpack_modules__)
  7320. /******/ __webpack_require__.m = modules;
  7321. /******/ // expose the module cache
  7322. /******/ __webpack_require__.c = installedModules;
  7323. /******/ // __webpack_public_path__
  7324. /******/ __webpack_require__.p = "";
  7325. /******/ // Load entry module and return exports
  7326. /******/ return __webpack_require__(0);
  7327. /******/ })
  7328. /************************************************************************/
  7329. /******/ ([
  7330. /* 0 */
  7331. /***/ (function(module, exports, __webpack_require__) {
  7332. /*istanbul ignore start*/'use strict';
  7333. exports.__esModule = true;
  7334. exports.canonicalize = exports.convertChangesToXML = exports.convertChangesToDMP = exports.merge = exports.parsePatch = exports.applyPatches = exports.applyPatch = exports.createPatch = exports.createTwoFilesPatch = exports.structuredPatch = exports.diffArrays = exports.diffJson = exports.diffCss = exports.diffSentences = exports.diffTrimmedLines = exports.diffLines = exports.diffWordsWithSpace = exports.diffWords = exports.diffChars = exports.Diff = undefined;
  7335. /*istanbul ignore end*/var /*istanbul ignore start*/_base = __webpack_require__(1) /*istanbul ignore end*/;
  7336. /*istanbul ignore start*/var _base2 = _interopRequireDefault(_base);
  7337. /*istanbul ignore end*/var /*istanbul ignore start*/_character = __webpack_require__(2) /*istanbul ignore end*/;
  7338. var /*istanbul ignore start*/_word = __webpack_require__(3) /*istanbul ignore end*/;
  7339. var /*istanbul ignore start*/_line = __webpack_require__(5) /*istanbul ignore end*/;
  7340. var /*istanbul ignore start*/_sentence = __webpack_require__(6) /*istanbul ignore end*/;
  7341. var /*istanbul ignore start*/_css = __webpack_require__(7) /*istanbul ignore end*/;
  7342. var /*istanbul ignore start*/_json = __webpack_require__(8) /*istanbul ignore end*/;
  7343. var /*istanbul ignore start*/_array = __webpack_require__(9) /*istanbul ignore end*/;
  7344. var /*istanbul ignore start*/_apply = __webpack_require__(10) /*istanbul ignore end*/;
  7345. var /*istanbul ignore start*/_parse = __webpack_require__(11) /*istanbul ignore end*/;
  7346. var /*istanbul ignore start*/_merge = __webpack_require__(13) /*istanbul ignore end*/;
  7347. var /*istanbul ignore start*/_create = __webpack_require__(14) /*istanbul ignore end*/;
  7348. var /*istanbul ignore start*/_dmp = __webpack_require__(16) /*istanbul ignore end*/;
  7349. var /*istanbul ignore start*/_xml = __webpack_require__(17) /*istanbul ignore end*/;
  7350. /*istanbul ignore start*/function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
  7351. /* See LICENSE file for terms of use */
  7352. /*
  7353. * Text diff implementation.
  7354. *
  7355. * This library supports the following APIS:
  7356. * JsDiff.diffChars: Character by character diff
  7357. * JsDiff.diffWords: Word (as defined by \b regex) diff which ignores whitespace
  7358. * JsDiff.diffLines: Line based diff
  7359. *
  7360. * JsDiff.diffCss: Diff targeted at CSS content
  7361. *
  7362. * These methods are based on the implementation proposed in
  7363. * "An O(ND) Difference Algorithm and its Variations" (Myers, 1986).
  7364. * http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.6927
  7365. */
  7366. exports. /*istanbul ignore end*/Diff = _base2['default'];
  7367. /*istanbul ignore start*/exports. /*istanbul ignore end*/diffChars = _character.diffChars;
  7368. /*istanbul ignore start*/exports. /*istanbul ignore end*/diffWords = _word.diffWords;
  7369. /*istanbul ignore start*/exports. /*istanbul ignore end*/diffWordsWithSpace = _word.diffWordsWithSpace;
  7370. /*istanbul ignore start*/exports. /*istanbul ignore end*/diffLines = _line.diffLines;
  7371. /*istanbul ignore start*/exports. /*istanbul ignore end*/diffTrimmedLines = _line.diffTrimmedLines;
  7372. /*istanbul ignore start*/exports. /*istanbul ignore end*/diffSentences = _sentence.diffSentences;
  7373. /*istanbul ignore start*/exports. /*istanbul ignore end*/diffCss = _css.diffCss;
  7374. /*istanbul ignore start*/exports. /*istanbul ignore end*/diffJson = _json.diffJson;
  7375. /*istanbul ignore start*/exports. /*istanbul ignore end*/diffArrays = _array.diffArrays;
  7376. /*istanbul ignore start*/exports. /*istanbul ignore end*/structuredPatch = _create.structuredPatch;
  7377. /*istanbul ignore start*/exports. /*istanbul ignore end*/createTwoFilesPatch = _create.createTwoFilesPatch;
  7378. /*istanbul ignore start*/exports. /*istanbul ignore end*/createPatch = _create.createPatch;
  7379. /*istanbul ignore start*/exports. /*istanbul ignore end*/applyPatch = _apply.applyPatch;
  7380. /*istanbul ignore start*/exports. /*istanbul ignore end*/applyPatches = _apply.applyPatches;
  7381. /*istanbul ignore start*/exports. /*istanbul ignore end*/parsePatch = _parse.parsePatch;
  7382. /*istanbul ignore start*/exports. /*istanbul ignore end*/merge = _merge.merge;
  7383. /*istanbul ignore start*/exports. /*istanbul ignore end*/convertChangesToDMP = _dmp.convertChangesToDMP;
  7384. /*istanbul ignore start*/exports. /*istanbul ignore end*/convertChangesToXML = _xml.convertChangesToXML;
  7385. /*istanbul ignore start*/exports. /*istanbul ignore end*/canonicalize = _json.canonicalize;
  7386. /***/ }),
  7387. /* 1 */
  7388. /***/ (function(module, exports) {
  7389. /*istanbul ignore start*/'use strict';
  7390. exports.__esModule = true;
  7391. exports['default'] = /*istanbul ignore end*/Diff;
  7392. function Diff() {}
  7393. Diff.prototype = {
  7394. /*istanbul ignore start*/ /*istanbul ignore end*/diff: function diff(oldString, newString) {
  7395. /*istanbul ignore start*/var /*istanbul ignore end*/options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  7396. var callback = options.callback;
  7397. if (typeof options === 'function') {
  7398. callback = options;
  7399. options = {};
  7400. }
  7401. this.options = options;
  7402. var self = this;
  7403. function done(value) {
  7404. if (callback) {
  7405. setTimeout(function () {
  7406. callback(undefined, value);
  7407. }, 0);
  7408. return true;
  7409. } else {
  7410. return value;
  7411. }
  7412. }
  7413. // Allow subclasses to massage the input prior to running
  7414. oldString = this.castInput(oldString);
  7415. newString = this.castInput(newString);
  7416. oldString = this.removeEmpty(this.tokenize(oldString));
  7417. newString = this.removeEmpty(this.tokenize(newString));
  7418. var newLen = newString.length,
  7419. oldLen = oldString.length;
  7420. var editLength = 1;
  7421. var maxEditLength = newLen + oldLen;
  7422. var bestPath = [{ newPos: -1, components: [] }];
  7423. // Seed editLength = 0, i.e. the content starts with the same values
  7424. var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0);
  7425. if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {
  7426. // Identity per the equality and tokenizer
  7427. return done([{ value: this.join(newString), count: newString.length }]);
  7428. }
  7429. // Main worker method. checks all permutations of a given edit length for acceptance.
  7430. function execEditLength() {
  7431. for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) {
  7432. var basePath = /*istanbul ignore start*/void 0 /*istanbul ignore end*/;
  7433. var addPath = bestPath[diagonalPath - 1],
  7434. removePath = bestPath[diagonalPath + 1],
  7435. _oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;
  7436. if (addPath) {
  7437. // No one else is going to attempt to use this value, clear it
  7438. bestPath[diagonalPath - 1] = undefined;
  7439. }
  7440. var canAdd = addPath && addPath.newPos + 1 < newLen,
  7441. canRemove = removePath && 0 <= _oldPos && _oldPos < oldLen;
  7442. if (!canAdd && !canRemove) {
  7443. // If this path is a terminal then prune
  7444. bestPath[diagonalPath] = undefined;
  7445. continue;
  7446. }
  7447. // Select the diagonal that we want to branch from. We select the prior
  7448. // path whose position in the new string is the farthest from the origin
  7449. // and does not pass the bounds of the diff graph
  7450. if (!canAdd || canRemove && addPath.newPos < removePath.newPos) {
  7451. basePath = clonePath(removePath);
  7452. self.pushComponent(basePath.components, undefined, true);
  7453. } else {
  7454. basePath = addPath; // No need to clone, we've pulled it from the list
  7455. basePath.newPos++;
  7456. self.pushComponent(basePath.components, true, undefined);
  7457. }
  7458. _oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath);
  7459. // If we have hit the end of both strings, then we are done
  7460. if (basePath.newPos + 1 >= newLen && _oldPos + 1 >= oldLen) {
  7461. return done(buildValues(self, basePath.components, newString, oldString, self.useLongestToken));
  7462. } else {
  7463. // Otherwise track this path as a potential candidate and continue.
  7464. bestPath[diagonalPath] = basePath;
  7465. }
  7466. }
  7467. editLength++;
  7468. }
  7469. // Performs the length of edit iteration. Is a bit fugly as this has to support the
  7470. // sync and async mode which is never fun. Loops over execEditLength until a value
  7471. // is produced.
  7472. if (callback) {
  7473. (function exec() {
  7474. setTimeout(function () {
  7475. // This should not happen, but we want to be safe.
  7476. /* istanbul ignore next */
  7477. if (editLength > maxEditLength) {
  7478. return callback();
  7479. }
  7480. if (!execEditLength()) {
  7481. exec();
  7482. }
  7483. }, 0);
  7484. })();
  7485. } else {
  7486. while (editLength <= maxEditLength) {
  7487. var ret = execEditLength();
  7488. if (ret) {
  7489. return ret;
  7490. }
  7491. }
  7492. }
  7493. },
  7494. /*istanbul ignore start*/ /*istanbul ignore end*/pushComponent: function pushComponent(components, added, removed) {
  7495. var last = components[components.length - 1];
  7496. if (last && last.added === added && last.removed === removed) {
  7497. // We need to clone here as the component clone operation is just
  7498. // as shallow array clone
  7499. components[components.length - 1] = { count: last.count + 1, added: added, removed: removed };
  7500. } else {
  7501. components.push({ count: 1, added: added, removed: removed });
  7502. }
  7503. },
  7504. /*istanbul ignore start*/ /*istanbul ignore end*/extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) {
  7505. var newLen = newString.length,
  7506. oldLen = oldString.length,
  7507. newPos = basePath.newPos,
  7508. oldPos = newPos - diagonalPath,
  7509. commonCount = 0;
  7510. while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) {
  7511. newPos++;
  7512. oldPos++;
  7513. commonCount++;
  7514. }
  7515. if (commonCount) {
  7516. basePath.components.push({ count: commonCount });
  7517. }
  7518. basePath.newPos = newPos;
  7519. return oldPos;
  7520. },
  7521. /*istanbul ignore start*/ /*istanbul ignore end*/equals: function equals(left, right) {
  7522. if (this.options.comparator) {
  7523. return this.options.comparator(left, right);
  7524. } else {
  7525. return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase();
  7526. }
  7527. },
  7528. /*istanbul ignore start*/ /*istanbul ignore end*/removeEmpty: function removeEmpty(array) {
  7529. var ret = [];
  7530. for (var i = 0; i < array.length; i++) {
  7531. if (array[i]) {
  7532. ret.push(array[i]);
  7533. }
  7534. }
  7535. return ret;
  7536. },
  7537. /*istanbul ignore start*/ /*istanbul ignore end*/castInput: function castInput(value) {
  7538. return value;
  7539. },
  7540. /*istanbul ignore start*/ /*istanbul ignore end*/tokenize: function tokenize(value) {
  7541. return value.split('');
  7542. },
  7543. /*istanbul ignore start*/ /*istanbul ignore end*/join: function join(chars) {
  7544. return chars.join('');
  7545. }
  7546. };
  7547. function buildValues(diff, components, newString, oldString, useLongestToken) {
  7548. var componentPos = 0,
  7549. componentLen = components.length,
  7550. newPos = 0,
  7551. oldPos = 0;
  7552. for (; componentPos < componentLen; componentPos++) {
  7553. var component = components[componentPos];
  7554. if (!component.removed) {
  7555. if (!component.added && useLongestToken) {
  7556. var value = newString.slice(newPos, newPos + component.count);
  7557. value = value.map(function (value, i) {
  7558. var oldValue = oldString[oldPos + i];
  7559. return oldValue.length > value.length ? oldValue : value;
  7560. });
  7561. component.value = diff.join(value);
  7562. } else {
  7563. component.value = diff.join(newString.slice(newPos, newPos + component.count));
  7564. }
  7565. newPos += component.count;
  7566. // Common case
  7567. if (!component.added) {
  7568. oldPos += component.count;
  7569. }
  7570. } else {
  7571. component.value = diff.join(oldString.slice(oldPos, oldPos + component.count));
  7572. oldPos += component.count;
  7573. // Reverse add and remove so removes are output first to match common convention
  7574. // The diffing algorithm is tied to add then remove output and this is the simplest
  7575. // route to get the desired output with minimal overhead.
  7576. if (componentPos && components[componentPos - 1].added) {
  7577. var tmp = components[componentPos - 1];
  7578. components[componentPos - 1] = components[componentPos];
  7579. components[componentPos] = tmp;
  7580. }
  7581. }
  7582. }
  7583. // Special case handle for when one terminal is ignored (i.e. whitespace).
  7584. // For this case we merge the terminal into the prior string and drop the change.
  7585. // This is only available for string mode.
  7586. var lastComponent = components[componentLen - 1];
  7587. if (componentLen > 1 && typeof lastComponent.value === 'string' && (lastComponent.added || lastComponent.removed) && diff.equals('', lastComponent.value)) {
  7588. components[componentLen - 2].value += lastComponent.value;
  7589. components.pop();
  7590. }
  7591. return components;
  7592. }
  7593. function clonePath(path) {
  7594. return { newPos: path.newPos, components: path.components.slice(0) };
  7595. }
  7596. /***/ }),
  7597. /* 2 */
  7598. /***/ (function(module, exports, __webpack_require__) {
  7599. /*istanbul ignore start*/'use strict';
  7600. exports.__esModule = true;
  7601. exports.characterDiff = undefined;
  7602. exports. /*istanbul ignore end*/diffChars = diffChars;
  7603. var /*istanbul ignore start*/_base = __webpack_require__(1) /*istanbul ignore end*/;
  7604. /*istanbul ignore start*/var _base2 = _interopRequireDefault(_base);
  7605. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
  7606. /*istanbul ignore end*/var characterDiff = /*istanbul ignore start*/exports. /*istanbul ignore end*/characterDiff = new /*istanbul ignore start*/_base2['default'] /*istanbul ignore end*/();
  7607. function diffChars(oldStr, newStr, options) {
  7608. return characterDiff.diff(oldStr, newStr, options);
  7609. }
  7610. /***/ }),
  7611. /* 3 */
  7612. /***/ (function(module, exports, __webpack_require__) {
  7613. /*istanbul ignore start*/'use strict';
  7614. exports.__esModule = true;
  7615. exports.wordDiff = undefined;
  7616. exports. /*istanbul ignore end*/diffWords = diffWords;
  7617. /*istanbul ignore start*/exports. /*istanbul ignore end*/diffWordsWithSpace = diffWordsWithSpace;
  7618. var /*istanbul ignore start*/_base = __webpack_require__(1) /*istanbul ignore end*/;
  7619. /*istanbul ignore start*/var _base2 = _interopRequireDefault(_base);
  7620. /*istanbul ignore end*/var /*istanbul ignore start*/_params = __webpack_require__(4) /*istanbul ignore end*/;
  7621. /*istanbul ignore start*/function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
  7622. /*istanbul ignore end*/ // Based on https://en.wikipedia.org/wiki/Latin_script_in_Unicode
  7623. //
  7624. // Ranges and exceptions:
  7625. // Latin-1 Supplement, 0080–00FF
  7626. // - U+00D7 × Multiplication sign
  7627. // - U+00F7 ÷ Division sign
  7628. // Latin Extended-A, 0100–017F
  7629. // Latin Extended-B, 0180–024F
  7630. // IPA Extensions, 0250–02AF
  7631. // Spacing Modifier Letters, 02B0–02FF
  7632. // - U+02C7 ˇ &#711; Caron
  7633. // - U+02D8 ˘ &#728; Breve
  7634. // - U+02D9 ˙ &#729; Dot Above
  7635. // - U+02DA ˚ &#730; Ring Above
  7636. // - U+02DB ˛ &#731; Ogonek
  7637. // - U+02DC ˜ &#732; Small Tilde
  7638. // - U+02DD ˝ &#733; Double Acute Accent
  7639. // Latin Extended Additional, 1E00–1EFF
  7640. var extendedWordChars = /^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/;
  7641. var reWhitespace = /\S/;
  7642. var wordDiff = /*istanbul ignore start*/exports. /*istanbul ignore end*/wordDiff = new /*istanbul ignore start*/_base2['default'] /*istanbul ignore end*/();
  7643. wordDiff.equals = function (left, right) {
  7644. if (this.options.ignoreCase) {
  7645. left = left.toLowerCase();
  7646. right = right.toLowerCase();
  7647. }
  7648. return left === right || this.options.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right);
  7649. };
  7650. wordDiff.tokenize = function (value) {
  7651. var tokens = value.split(/(\s+|\b)/);
  7652. // Join the boundary splits that we do not consider to be boundaries. This is primarily the extended Latin character set.
  7653. for (var i = 0; i < tokens.length - 1; i++) {
  7654. // If we have an empty string in the next field and we have only word chars before and after, merge
  7655. if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars.test(tokens[i]) && extendedWordChars.test(tokens[i + 2])) {
  7656. tokens[i] += tokens[i + 2];
  7657. tokens.splice(i + 1, 2);
  7658. i--;
  7659. }
  7660. }
  7661. return tokens;
  7662. };
  7663. function diffWords(oldStr, newStr, options) {
  7664. options = /*istanbul ignore start*/(0, _params.generateOptions) /*istanbul ignore end*/(options, { ignoreWhitespace: true });
  7665. return wordDiff.diff(oldStr, newStr, options);
  7666. }
  7667. function diffWordsWithSpace(oldStr, newStr, options) {
  7668. return wordDiff.diff(oldStr, newStr, options);
  7669. }
  7670. /***/ }),
  7671. /* 4 */
  7672. /***/ (function(module, exports) {
  7673. /*istanbul ignore start*/'use strict';
  7674. exports.__esModule = true;
  7675. exports. /*istanbul ignore end*/generateOptions = generateOptions;
  7676. function generateOptions(options, defaults) {
  7677. if (typeof options === 'function') {
  7678. defaults.callback = options;
  7679. } else if (options) {
  7680. for (var name in options) {
  7681. /* istanbul ignore else */
  7682. if (options.hasOwnProperty(name)) {
  7683. defaults[name] = options[name];
  7684. }
  7685. }
  7686. }
  7687. return defaults;
  7688. }
  7689. /***/ }),
  7690. /* 5 */
  7691. /***/ (function(module, exports, __webpack_require__) {
  7692. /*istanbul ignore start*/'use strict';
  7693. exports.__esModule = true;
  7694. exports.lineDiff = undefined;
  7695. exports. /*istanbul ignore end*/diffLines = diffLines;
  7696. /*istanbul ignore start*/exports. /*istanbul ignore end*/diffTrimmedLines = diffTrimmedLines;
  7697. var /*istanbul ignore start*/_base = __webpack_require__(1) /*istanbul ignore end*/;
  7698. /*istanbul ignore start*/var _base2 = _interopRequireDefault(_base);
  7699. /*istanbul ignore end*/var /*istanbul ignore start*/_params = __webpack_require__(4) /*istanbul ignore end*/;
  7700. /*istanbul ignore start*/function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
  7701. /*istanbul ignore end*/var lineDiff = /*istanbul ignore start*/exports. /*istanbul ignore end*/lineDiff = new /*istanbul ignore start*/_base2['default'] /*istanbul ignore end*/();
  7702. lineDiff.tokenize = function (value) {
  7703. var retLines = [],
  7704. linesAndNewlines = value.split(/(\n|\r\n)/);
  7705. // Ignore the final empty token that occurs if the string ends with a new line
  7706. if (!linesAndNewlines[linesAndNewlines.length - 1]) {
  7707. linesAndNewlines.pop();
  7708. }
  7709. // Merge the content and line separators into single tokens
  7710. for (var i = 0; i < linesAndNewlines.length; i++) {
  7711. var line = linesAndNewlines[i];
  7712. if (i % 2 && !this.options.newlineIsToken) {
  7713. retLines[retLines.length - 1] += line;
  7714. } else {
  7715. if (this.options.ignoreWhitespace) {
  7716. line = line.trim();
  7717. }
  7718. retLines.push(line);
  7719. }
  7720. }
  7721. return retLines;
  7722. };
  7723. function diffLines(oldStr, newStr, callback) {
  7724. return lineDiff.diff(oldStr, newStr, callback);
  7725. }
  7726. function diffTrimmedLines(oldStr, newStr, callback) {
  7727. var options = /*istanbul ignore start*/(0, _params.generateOptions) /*istanbul ignore end*/(callback, { ignoreWhitespace: true });
  7728. return lineDiff.diff(oldStr, newStr, options);
  7729. }
  7730. /***/ }),
  7731. /* 6 */
  7732. /***/ (function(module, exports, __webpack_require__) {
  7733. /*istanbul ignore start*/'use strict';
  7734. exports.__esModule = true;
  7735. exports.sentenceDiff = undefined;
  7736. exports. /*istanbul ignore end*/diffSentences = diffSentences;
  7737. var /*istanbul ignore start*/_base = __webpack_require__(1) /*istanbul ignore end*/;
  7738. /*istanbul ignore start*/var _base2 = _interopRequireDefault(_base);
  7739. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
  7740. /*istanbul ignore end*/var sentenceDiff = /*istanbul ignore start*/exports. /*istanbul ignore end*/sentenceDiff = new /*istanbul ignore start*/_base2['default'] /*istanbul ignore end*/();
  7741. sentenceDiff.tokenize = function (value) {
  7742. return value.split(/(\S.+?[.!?])(?=\s+|$)/);
  7743. };
  7744. function diffSentences(oldStr, newStr, callback) {
  7745. return sentenceDiff.diff(oldStr, newStr, callback);
  7746. }
  7747. /***/ }),
  7748. /* 7 */
  7749. /***/ (function(module, exports, __webpack_require__) {
  7750. /*istanbul ignore start*/'use strict';
  7751. exports.__esModule = true;
  7752. exports.cssDiff = undefined;
  7753. exports. /*istanbul ignore end*/diffCss = diffCss;
  7754. var /*istanbul ignore start*/_base = __webpack_require__(1) /*istanbul ignore end*/;
  7755. /*istanbul ignore start*/var _base2 = _interopRequireDefault(_base);
  7756. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
  7757. /*istanbul ignore end*/var cssDiff = /*istanbul ignore start*/exports. /*istanbul ignore end*/cssDiff = new /*istanbul ignore start*/_base2['default'] /*istanbul ignore end*/();
  7758. cssDiff.tokenize = function (value) {
  7759. return value.split(/([{}:;,]|\s+)/);
  7760. };
  7761. function diffCss(oldStr, newStr, callback) {
  7762. return cssDiff.diff(oldStr, newStr, callback);
  7763. }
  7764. /***/ }),
  7765. /* 8 */
  7766. /***/ (function(module, exports, __webpack_require__) {
  7767. /*istanbul ignore start*/'use strict';
  7768. exports.__esModule = true;
  7769. exports.jsonDiff = undefined;
  7770. var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
  7771. exports. /*istanbul ignore end*/diffJson = diffJson;
  7772. /*istanbul ignore start*/exports. /*istanbul ignore end*/canonicalize = canonicalize;
  7773. var /*istanbul ignore start*/_base = __webpack_require__(1) /*istanbul ignore end*/;
  7774. /*istanbul ignore start*/var _base2 = _interopRequireDefault(_base);
  7775. /*istanbul ignore end*/var /*istanbul ignore start*/_line = __webpack_require__(5) /*istanbul ignore end*/;
  7776. /*istanbul ignore start*/function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
  7777. /*istanbul ignore end*/var objectPrototypeToString = Object.prototype.toString;
  7778. var jsonDiff = /*istanbul ignore start*/exports. /*istanbul ignore end*/jsonDiff = new /*istanbul ignore start*/_base2['default'] /*istanbul ignore end*/();
  7779. // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a
  7780. // dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output:
  7781. jsonDiff.useLongestToken = true;
  7782. jsonDiff.tokenize = /*istanbul ignore start*/_line.lineDiff /*istanbul ignore end*/.tokenize;
  7783. jsonDiff.castInput = function (value) {
  7784. /*istanbul ignore start*/var _options = /*istanbul ignore end*/this.options,
  7785. undefinedReplacement = _options.undefinedReplacement,
  7786. _options$stringifyRep = _options.stringifyReplacer,
  7787. stringifyReplacer = _options$stringifyRep === undefined ? function (k, v) /*istanbul ignore start*/{
  7788. return (/*istanbul ignore end*/typeof v === 'undefined' ? undefinedReplacement : v
  7789. );
  7790. } : _options$stringifyRep;
  7791. return typeof value === 'string' ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, ' ');
  7792. };
  7793. jsonDiff.equals = function (left, right) {
  7794. return (/*istanbul ignore start*/_base2['default'] /*istanbul ignore end*/.prototype.equals.call(jsonDiff, left.replace(/,([\r\n])/g, '$1'), right.replace(/,([\r\n])/g, '$1'))
  7795. );
  7796. };
  7797. function diffJson(oldObj, newObj, options) {
  7798. return jsonDiff.diff(oldObj, newObj, options);
  7799. }
  7800. // This function handles the presence of circular references by bailing out when encountering an
  7801. // object that is already on the "stack" of items being processed. Accepts an optional replacer
  7802. function canonicalize(obj, stack, replacementStack, replacer, key) {
  7803. stack = stack || [];
  7804. replacementStack = replacementStack || [];
  7805. if (replacer) {
  7806. obj = replacer(key, obj);
  7807. }
  7808. var i = /*istanbul ignore start*/void 0 /*istanbul ignore end*/;
  7809. for (i = 0; i < stack.length; i += 1) {
  7810. if (stack[i] === obj) {
  7811. return replacementStack[i];
  7812. }
  7813. }
  7814. var canonicalizedObj = /*istanbul ignore start*/void 0 /*istanbul ignore end*/;
  7815. if ('[object Array]' === objectPrototypeToString.call(obj)) {
  7816. stack.push(obj);
  7817. canonicalizedObj = new Array(obj.length);
  7818. replacementStack.push(canonicalizedObj);
  7819. for (i = 0; i < obj.length; i += 1) {
  7820. canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key);
  7821. }
  7822. stack.pop();
  7823. replacementStack.pop();
  7824. return canonicalizedObj;
  7825. }
  7826. if (obj && obj.toJSON) {
  7827. obj = obj.toJSON();
  7828. }
  7829. if ( /*istanbul ignore start*/(typeof /*istanbul ignore end*/obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && obj !== null) {
  7830. stack.push(obj);
  7831. canonicalizedObj = {};
  7832. replacementStack.push(canonicalizedObj);
  7833. var sortedKeys = [],
  7834. _key = /*istanbul ignore start*/void 0 /*istanbul ignore end*/;
  7835. for (_key in obj) {
  7836. /* istanbul ignore else */
  7837. if (obj.hasOwnProperty(_key)) {
  7838. sortedKeys.push(_key);
  7839. }
  7840. }
  7841. sortedKeys.sort();
  7842. for (i = 0; i < sortedKeys.length; i += 1) {
  7843. _key = sortedKeys[i];
  7844. canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key);
  7845. }
  7846. stack.pop();
  7847. replacementStack.pop();
  7848. } else {
  7849. canonicalizedObj = obj;
  7850. }
  7851. return canonicalizedObj;
  7852. }
  7853. /***/ }),
  7854. /* 9 */
  7855. /***/ (function(module, exports, __webpack_require__) {
  7856. /*istanbul ignore start*/'use strict';
  7857. exports.__esModule = true;
  7858. exports.arrayDiff = undefined;
  7859. exports. /*istanbul ignore end*/diffArrays = diffArrays;
  7860. var /*istanbul ignore start*/_base = __webpack_require__(1) /*istanbul ignore end*/;
  7861. /*istanbul ignore start*/var _base2 = _interopRequireDefault(_base);
  7862. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
  7863. /*istanbul ignore end*/var arrayDiff = /*istanbul ignore start*/exports. /*istanbul ignore end*/arrayDiff = new /*istanbul ignore start*/_base2['default'] /*istanbul ignore end*/();
  7864. arrayDiff.tokenize = function (value) {
  7865. return value.slice();
  7866. };
  7867. arrayDiff.join = arrayDiff.removeEmpty = function (value) {
  7868. return value;
  7869. };
  7870. function diffArrays(oldArr, newArr, callback) {
  7871. return arrayDiff.diff(oldArr, newArr, callback);
  7872. }
  7873. /***/ }),
  7874. /* 10 */
  7875. /***/ (function(module, exports, __webpack_require__) {
  7876. /*istanbul ignore start*/'use strict';
  7877. exports.__esModule = true;
  7878. exports. /*istanbul ignore end*/applyPatch = applyPatch;
  7879. /*istanbul ignore start*/exports. /*istanbul ignore end*/applyPatches = applyPatches;
  7880. var /*istanbul ignore start*/_parse = __webpack_require__(11) /*istanbul ignore end*/;
  7881. var /*istanbul ignore start*/_distanceIterator = __webpack_require__(12) /*istanbul ignore end*/;
  7882. /*istanbul ignore start*/var _distanceIterator2 = _interopRequireDefault(_distanceIterator);
  7883. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
  7884. /*istanbul ignore end*/function applyPatch(source, uniDiff) {
  7885. /*istanbul ignore start*/var /*istanbul ignore end*/options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  7886. if (typeof uniDiff === 'string') {
  7887. uniDiff = /*istanbul ignore start*/(0, _parse.parsePatch) /*istanbul ignore end*/(uniDiff);
  7888. }
  7889. if (Array.isArray(uniDiff)) {
  7890. if (uniDiff.length > 1) {
  7891. throw new Error('applyPatch only works with a single input.');
  7892. }
  7893. uniDiff = uniDiff[0];
  7894. }
  7895. // Apply the diff to the input
  7896. var lines = source.split(/\r\n|[\n\v\f\r\x85]/),
  7897. delimiters = source.match(/\r\n|[\n\v\f\r\x85]/g) || [],
  7898. hunks = uniDiff.hunks,
  7899. compareLine = options.compareLine || function (lineNumber, line, operation, patchContent) /*istanbul ignore start*/{
  7900. return (/*istanbul ignore end*/line === patchContent
  7901. );
  7902. },
  7903. errorCount = 0,
  7904. fuzzFactor = options.fuzzFactor || 0,
  7905. minLine = 0,
  7906. offset = 0,
  7907. removeEOFNL = /*istanbul ignore start*/void 0 /*istanbul ignore end*/,
  7908. addEOFNL = /*istanbul ignore start*/void 0 /*istanbul ignore end*/;
  7909. /**
  7910. * Checks if the hunk exactly fits on the provided location
  7911. */
  7912. function hunkFits(hunk, toPos) {
  7913. for (var j = 0; j < hunk.lines.length; j++) {
  7914. var line = hunk.lines[j],
  7915. operation = line.length > 0 ? line[0] : ' ',
  7916. content = line.length > 0 ? line.substr(1) : line;
  7917. if (operation === ' ' || operation === '-') {
  7918. // Context sanity check
  7919. if (!compareLine(toPos + 1, lines[toPos], operation, content)) {
  7920. errorCount++;
  7921. if (errorCount > fuzzFactor) {
  7922. return false;
  7923. }
  7924. }
  7925. toPos++;
  7926. }
  7927. }
  7928. return true;
  7929. }
  7930. // Search best fit offsets for each hunk based on the previous ones
  7931. for (var i = 0; i < hunks.length; i++) {
  7932. var hunk = hunks[i],
  7933. maxLine = lines.length - hunk.oldLines,
  7934. localOffset = 0,
  7935. toPos = offset + hunk.oldStart - 1;
  7936. var iterator = /*istanbul ignore start*/(0, _distanceIterator2['default']) /*istanbul ignore end*/(toPos, minLine, maxLine);
  7937. for (; localOffset !== undefined; localOffset = iterator()) {
  7938. if (hunkFits(hunk, toPos + localOffset)) {
  7939. hunk.offset = offset += localOffset;
  7940. break;
  7941. }
  7942. }
  7943. if (localOffset === undefined) {
  7944. return false;
  7945. }
  7946. // Set lower text limit to end of the current hunk, so next ones don't try
  7947. // to fit over already patched text
  7948. minLine = hunk.offset + hunk.oldStart + hunk.oldLines;
  7949. }
  7950. // Apply patch hunks
  7951. var diffOffset = 0;
  7952. for (var _i = 0; _i < hunks.length; _i++) {
  7953. var _hunk = hunks[_i],
  7954. _toPos = _hunk.oldStart + _hunk.offset + diffOffset - 1;
  7955. diffOffset += _hunk.newLines - _hunk.oldLines;
  7956. if (_toPos < 0) {
  7957. // Creating a new file
  7958. _toPos = 0;
  7959. }
  7960. for (var j = 0; j < _hunk.lines.length; j++) {
  7961. var line = _hunk.lines[j],
  7962. operation = line.length > 0 ? line[0] : ' ',
  7963. content = line.length > 0 ? line.substr(1) : line,
  7964. delimiter = _hunk.linedelimiters[j];
  7965. if (operation === ' ') {
  7966. _toPos++;
  7967. } else if (operation === '-') {
  7968. lines.splice(_toPos, 1);
  7969. delimiters.splice(_toPos, 1);
  7970. /* istanbul ignore else */
  7971. } else if (operation === '+') {
  7972. lines.splice(_toPos, 0, content);
  7973. delimiters.splice(_toPos, 0, delimiter);
  7974. _toPos++;
  7975. } else if (operation === '\\') {
  7976. var previousOperation = _hunk.lines[j - 1] ? _hunk.lines[j - 1][0] : null;
  7977. if (previousOperation === '+') {
  7978. removeEOFNL = true;
  7979. } else if (previousOperation === '-') {
  7980. addEOFNL = true;
  7981. }
  7982. }
  7983. }
  7984. }
  7985. // Handle EOFNL insertion/removal
  7986. if (removeEOFNL) {
  7987. while (!lines[lines.length - 1]) {
  7988. lines.pop();
  7989. delimiters.pop();
  7990. }
  7991. } else if (addEOFNL) {
  7992. lines.push('');
  7993. delimiters.push('\n');
  7994. }
  7995. for (var _k = 0; _k < lines.length - 1; _k++) {
  7996. lines[_k] = lines[_k] + delimiters[_k];
  7997. }
  7998. return lines.join('');
  7999. }
  8000. // Wrapper that supports multiple file patches via callbacks.
  8001. function applyPatches(uniDiff, options) {
  8002. if (typeof uniDiff === 'string') {
  8003. uniDiff = /*istanbul ignore start*/(0, _parse.parsePatch) /*istanbul ignore end*/(uniDiff);
  8004. }
  8005. var currentIndex = 0;
  8006. function processIndex() {
  8007. var index = uniDiff[currentIndex++];
  8008. if (!index) {
  8009. return options.complete();
  8010. }
  8011. options.loadFile(index, function (err, data) {
  8012. if (err) {
  8013. return options.complete(err);
  8014. }
  8015. var updatedContent = applyPatch(data, index, options);
  8016. options.patched(index, updatedContent, function (err) {
  8017. if (err) {
  8018. return options.complete(err);
  8019. }
  8020. processIndex();
  8021. });
  8022. });
  8023. }
  8024. processIndex();
  8025. }
  8026. /***/ }),
  8027. /* 11 */
  8028. /***/ (function(module, exports) {
  8029. /*istanbul ignore start*/'use strict';
  8030. exports.__esModule = true;
  8031. exports. /*istanbul ignore end*/parsePatch = parsePatch;
  8032. function parsePatch(uniDiff) {
  8033. /*istanbul ignore start*/var /*istanbul ignore end*/options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  8034. var diffstr = uniDiff.split(/\r\n|[\n\v\f\r\x85]/),
  8035. delimiters = uniDiff.match(/\r\n|[\n\v\f\r\x85]/g) || [],
  8036. list = [],
  8037. i = 0;
  8038. function parseIndex() {
  8039. var index = {};
  8040. list.push(index);
  8041. // Parse diff metadata
  8042. while (i < diffstr.length) {
  8043. var line = diffstr[i];
  8044. // File header found, end parsing diff metadata
  8045. if (/^(\-\-\-|\+\+\+|@@)\s/.test(line)) {
  8046. break;
  8047. }
  8048. // Diff index
  8049. var header = /^(?:Index:|diff(?: -r \w+)+)\s+(.+?)\s*$/.exec(line);
  8050. if (header) {
  8051. index.index = header[1];
  8052. }
  8053. i++;
  8054. }
  8055. // Parse file headers if they are defined. Unified diff requires them, but
  8056. // there's no technical issues to have an isolated hunk without file header
  8057. parseFileHeader(index);
  8058. parseFileHeader(index);
  8059. // Parse hunks
  8060. index.hunks = [];
  8061. while (i < diffstr.length) {
  8062. var _line = diffstr[i];
  8063. if (/^(Index:|diff|\-\-\-|\+\+\+)\s/.test(_line)) {
  8064. break;
  8065. } else if (/^@@/.test(_line)) {
  8066. index.hunks.push(parseHunk());
  8067. } else if (_line && options.strict) {
  8068. // Ignore unexpected content unless in strict mode
  8069. throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(_line));
  8070. } else {
  8071. i++;
  8072. }
  8073. }
  8074. }
  8075. // Parses the --- and +++ headers, if none are found, no lines
  8076. // are consumed.
  8077. function parseFileHeader(index) {
  8078. var fileHeader = /^(---|\+\+\+)\s+(.*)$/.exec(diffstr[i]);
  8079. if (fileHeader) {
  8080. var keyPrefix = fileHeader[1] === '---' ? 'old' : 'new';
  8081. var data = fileHeader[2].split('\t', 2);
  8082. var fileName = data[0].replace(/\\\\/g, '\\');
  8083. if (/^".*"$/.test(fileName)) {
  8084. fileName = fileName.substr(1, fileName.length - 2);
  8085. }
  8086. index[keyPrefix + 'FileName'] = fileName;
  8087. index[keyPrefix + 'Header'] = (data[1] || '').trim();
  8088. i++;
  8089. }
  8090. }
  8091. // Parses a hunk
  8092. // This assumes that we are at the start of a hunk.
  8093. function parseHunk() {
  8094. var chunkHeaderIndex = i,
  8095. chunkHeaderLine = diffstr[i++],
  8096. chunkHeader = chunkHeaderLine.split(/@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/);
  8097. var hunk = {
  8098. oldStart: +chunkHeader[1],
  8099. oldLines: +chunkHeader[2] || 1,
  8100. newStart: +chunkHeader[3],
  8101. newLines: +chunkHeader[4] || 1,
  8102. lines: [],
  8103. linedelimiters: []
  8104. };
  8105. var addCount = 0,
  8106. removeCount = 0;
  8107. for (; i < diffstr.length; i++) {
  8108. // Lines starting with '---' could be mistaken for the "remove line" operation
  8109. // But they could be the header for the next file. Therefore prune such cases out.
  8110. if (diffstr[i].indexOf('--- ') === 0 && i + 2 < diffstr.length && diffstr[i + 1].indexOf('+++ ') === 0 && diffstr[i + 2].indexOf('@@') === 0) {
  8111. break;
  8112. }
  8113. var operation = diffstr[i].length == 0 && i != diffstr.length - 1 ? ' ' : diffstr[i][0];
  8114. if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\') {
  8115. hunk.lines.push(diffstr[i]);
  8116. hunk.linedelimiters.push(delimiters[i] || '\n');
  8117. if (operation === '+') {
  8118. addCount++;
  8119. } else if (operation === '-') {
  8120. removeCount++;
  8121. } else if (operation === ' ') {
  8122. addCount++;
  8123. removeCount++;
  8124. }
  8125. } else {
  8126. break;
  8127. }
  8128. }
  8129. // Handle the empty block count case
  8130. if (!addCount && hunk.newLines === 1) {
  8131. hunk.newLines = 0;
  8132. }
  8133. if (!removeCount && hunk.oldLines === 1) {
  8134. hunk.oldLines = 0;
  8135. }
  8136. // Perform optional sanity checking
  8137. if (options.strict) {
  8138. if (addCount !== hunk.newLines) {
  8139. throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1));
  8140. }
  8141. if (removeCount !== hunk.oldLines) {
  8142. throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1));
  8143. }
  8144. }
  8145. return hunk;
  8146. }
  8147. while (i < diffstr.length) {
  8148. parseIndex();
  8149. }
  8150. return list;
  8151. }
  8152. /***/ }),
  8153. /* 12 */
  8154. /***/ (function(module, exports) {
  8155. /*istanbul ignore start*/"use strict";
  8156. exports.__esModule = true;
  8157. exports["default"] = /*istanbul ignore end*/function (start, minLine, maxLine) {
  8158. var wantForward = true,
  8159. backwardExhausted = false,
  8160. forwardExhausted = false,
  8161. localOffset = 1;
  8162. return function iterator() {
  8163. if (wantForward && !forwardExhausted) {
  8164. if (backwardExhausted) {
  8165. localOffset++;
  8166. } else {
  8167. wantForward = false;
  8168. }
  8169. // Check if trying to fit beyond text length, and if not, check it fits
  8170. // after offset location (or desired location on first iteration)
  8171. if (start + localOffset <= maxLine) {
  8172. return localOffset;
  8173. }
  8174. forwardExhausted = true;
  8175. }
  8176. if (!backwardExhausted) {
  8177. if (!forwardExhausted) {
  8178. wantForward = true;
  8179. }
  8180. // Check if trying to fit before text beginning, and if not, check it fits
  8181. // before offset location
  8182. if (minLine <= start - localOffset) {
  8183. return -localOffset++;
  8184. }
  8185. backwardExhausted = true;
  8186. return iterator();
  8187. }
  8188. // We tried to fit hunk before text beginning and beyond text length, then
  8189. // hunk can't fit on the text. Return undefined
  8190. };
  8191. };
  8192. /***/ }),
  8193. /* 13 */
  8194. /***/ (function(module, exports, __webpack_require__) {
  8195. /*istanbul ignore start*/'use strict';
  8196. exports.__esModule = true;
  8197. exports. /*istanbul ignore end*/calcLineCount = calcLineCount;
  8198. /*istanbul ignore start*/exports. /*istanbul ignore end*/merge = merge;
  8199. var /*istanbul ignore start*/_create = __webpack_require__(14) /*istanbul ignore end*/;
  8200. var /*istanbul ignore start*/_parse = __webpack_require__(11) /*istanbul ignore end*/;
  8201. var /*istanbul ignore start*/_array = __webpack_require__(15) /*istanbul ignore end*/;
  8202. /*istanbul ignore start*/function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
  8203. /*istanbul ignore end*/function calcLineCount(hunk) {
  8204. /*istanbul ignore start*/var _calcOldNewLineCount = /*istanbul ignore end*/calcOldNewLineCount(hunk.lines),
  8205. oldLines = _calcOldNewLineCount.oldLines,
  8206. newLines = _calcOldNewLineCount.newLines;
  8207. if (oldLines !== undefined) {
  8208. hunk.oldLines = oldLines;
  8209. } else {
  8210. delete hunk.oldLines;
  8211. }
  8212. if (newLines !== undefined) {
  8213. hunk.newLines = newLines;
  8214. } else {
  8215. delete hunk.newLines;
  8216. }
  8217. }
  8218. function merge(mine, theirs, base) {
  8219. mine = loadPatch(mine, base);
  8220. theirs = loadPatch(theirs, base);
  8221. var ret = {};
  8222. // For index we just let it pass through as it doesn't have any necessary meaning.
  8223. // Leaving sanity checks on this to the API consumer that may know more about the
  8224. // meaning in their own context.
  8225. if (mine.index || theirs.index) {
  8226. ret.index = mine.index || theirs.index;
  8227. }
  8228. if (mine.newFileName || theirs.newFileName) {
  8229. if (!fileNameChanged(mine)) {
  8230. // No header or no change in ours, use theirs (and ours if theirs does not exist)
  8231. ret.oldFileName = theirs.oldFileName || mine.oldFileName;
  8232. ret.newFileName = theirs.newFileName || mine.newFileName;
  8233. ret.oldHeader = theirs.oldHeader || mine.oldHeader;
  8234. ret.newHeader = theirs.newHeader || mine.newHeader;
  8235. } else if (!fileNameChanged(theirs)) {
  8236. // No header or no change in theirs, use ours
  8237. ret.oldFileName = mine.oldFileName;
  8238. ret.newFileName = mine.newFileName;
  8239. ret.oldHeader = mine.oldHeader;
  8240. ret.newHeader = mine.newHeader;
  8241. } else {
  8242. // Both changed... figure it out
  8243. ret.oldFileName = selectField(ret, mine.oldFileName, theirs.oldFileName);
  8244. ret.newFileName = selectField(ret, mine.newFileName, theirs.newFileName);
  8245. ret.oldHeader = selectField(ret, mine.oldHeader, theirs.oldHeader);
  8246. ret.newHeader = selectField(ret, mine.newHeader, theirs.newHeader);
  8247. }
  8248. }
  8249. ret.hunks = [];
  8250. var mineIndex = 0,
  8251. theirsIndex = 0,
  8252. mineOffset = 0,
  8253. theirsOffset = 0;
  8254. while (mineIndex < mine.hunks.length || theirsIndex < theirs.hunks.length) {
  8255. var mineCurrent = mine.hunks[mineIndex] || { oldStart: Infinity },
  8256. theirsCurrent = theirs.hunks[theirsIndex] || { oldStart: Infinity };
  8257. if (hunkBefore(mineCurrent, theirsCurrent)) {
  8258. // This patch does not overlap with any of the others, yay.
  8259. ret.hunks.push(cloneHunk(mineCurrent, mineOffset));
  8260. mineIndex++;
  8261. theirsOffset += mineCurrent.newLines - mineCurrent.oldLines;
  8262. } else if (hunkBefore(theirsCurrent, mineCurrent)) {
  8263. // This patch does not overlap with any of the others, yay.
  8264. ret.hunks.push(cloneHunk(theirsCurrent, theirsOffset));
  8265. theirsIndex++;
  8266. mineOffset += theirsCurrent.newLines - theirsCurrent.oldLines;
  8267. } else {
  8268. // Overlap, merge as best we can
  8269. var mergedHunk = {
  8270. oldStart: Math.min(mineCurrent.oldStart, theirsCurrent.oldStart),
  8271. oldLines: 0,
  8272. newStart: Math.min(mineCurrent.newStart + mineOffset, theirsCurrent.oldStart + theirsOffset),
  8273. newLines: 0,
  8274. lines: []
  8275. };
  8276. mergeLines(mergedHunk, mineCurrent.oldStart, mineCurrent.lines, theirsCurrent.oldStart, theirsCurrent.lines);
  8277. theirsIndex++;
  8278. mineIndex++;
  8279. ret.hunks.push(mergedHunk);
  8280. }
  8281. }
  8282. return ret;
  8283. }
  8284. function loadPatch(param, base) {
  8285. if (typeof param === 'string') {
  8286. if (/^@@/m.test(param) || /^Index:/m.test(param)) {
  8287. return (/*istanbul ignore start*/(0, _parse.parsePatch) /*istanbul ignore end*/(param)[0]
  8288. );
  8289. }
  8290. if (!base) {
  8291. throw new Error('Must provide a base reference or pass in a patch');
  8292. }
  8293. return (/*istanbul ignore start*/(0, _create.structuredPatch) /*istanbul ignore end*/(undefined, undefined, base, param)
  8294. );
  8295. }
  8296. return param;
  8297. }
  8298. function fileNameChanged(patch) {
  8299. return patch.newFileName && patch.newFileName !== patch.oldFileName;
  8300. }
  8301. function selectField(index, mine, theirs) {
  8302. if (mine === theirs) {
  8303. return mine;
  8304. } else {
  8305. index.conflict = true;
  8306. return { mine: mine, theirs: theirs };
  8307. }
  8308. }
  8309. function hunkBefore(test, check) {
  8310. return test.oldStart < check.oldStart && test.oldStart + test.oldLines < check.oldStart;
  8311. }
  8312. function cloneHunk(hunk, offset) {
  8313. return {
  8314. oldStart: hunk.oldStart, oldLines: hunk.oldLines,
  8315. newStart: hunk.newStart + offset, newLines: hunk.newLines,
  8316. lines: hunk.lines
  8317. };
  8318. }
  8319. function mergeLines(hunk, mineOffset, mineLines, theirOffset, theirLines) {
  8320. // This will generally result in a conflicted hunk, but there are cases where the context
  8321. // is the only overlap where we can successfully merge the content here.
  8322. var mine = { offset: mineOffset, lines: mineLines, index: 0 },
  8323. their = { offset: theirOffset, lines: theirLines, index: 0 };
  8324. // Handle any leading content
  8325. insertLeading(hunk, mine, their);
  8326. insertLeading(hunk, their, mine);
  8327. // Now in the overlap content. Scan through and select the best changes from each.
  8328. while (mine.index < mine.lines.length && their.index < their.lines.length) {
  8329. var mineCurrent = mine.lines[mine.index],
  8330. theirCurrent = their.lines[their.index];
  8331. if ((mineCurrent[0] === '-' || mineCurrent[0] === '+') && (theirCurrent[0] === '-' || theirCurrent[0] === '+')) {
  8332. // Both modified ...
  8333. mutualChange(hunk, mine, their);
  8334. } else if (mineCurrent[0] === '+' && theirCurrent[0] === ' ') {
  8335. /*istanbul ignore start*/var _hunk$lines;
  8336. /*istanbul ignore end*/ // Mine inserted
  8337. /*istanbul ignore start*/(_hunk$lines = /*istanbul ignore end*/hunk.lines).push. /*istanbul ignore start*/apply /*istanbul ignore end*/( /*istanbul ignore start*/_hunk$lines /*istanbul ignore end*/, /*istanbul ignore start*/_toConsumableArray( /*istanbul ignore end*/collectChange(mine)));
  8338. } else if (theirCurrent[0] === '+' && mineCurrent[0] === ' ') {
  8339. /*istanbul ignore start*/var _hunk$lines2;
  8340. /*istanbul ignore end*/ // Theirs inserted
  8341. /*istanbul ignore start*/(_hunk$lines2 = /*istanbul ignore end*/hunk.lines).push. /*istanbul ignore start*/apply /*istanbul ignore end*/( /*istanbul ignore start*/_hunk$lines2 /*istanbul ignore end*/, /*istanbul ignore start*/_toConsumableArray( /*istanbul ignore end*/collectChange(their)));
  8342. } else if (mineCurrent[0] === '-' && theirCurrent[0] === ' ') {
  8343. // Mine removed or edited
  8344. removal(hunk, mine, their);
  8345. } else if (theirCurrent[0] === '-' && mineCurrent[0] === ' ') {
  8346. // Their removed or edited
  8347. removal(hunk, their, mine, true);
  8348. } else if (mineCurrent === theirCurrent) {
  8349. // Context identity
  8350. hunk.lines.push(mineCurrent);
  8351. mine.index++;
  8352. their.index++;
  8353. } else {
  8354. // Context mismatch
  8355. conflict(hunk, collectChange(mine), collectChange(their));
  8356. }
  8357. }
  8358. // Now push anything that may be remaining
  8359. insertTrailing(hunk, mine);
  8360. insertTrailing(hunk, their);
  8361. calcLineCount(hunk);
  8362. }
  8363. function mutualChange(hunk, mine, their) {
  8364. var myChanges = collectChange(mine),
  8365. theirChanges = collectChange(their);
  8366. if (allRemoves(myChanges) && allRemoves(theirChanges)) {
  8367. // Special case for remove changes that are supersets of one another
  8368. if ( /*istanbul ignore start*/(0, _array.arrayStartsWith) /*istanbul ignore end*/(myChanges, theirChanges) && skipRemoveSuperset(their, myChanges, myChanges.length - theirChanges.length)) {
  8369. /*istanbul ignore start*/var _hunk$lines3;
  8370. /*istanbul ignore end*/ /*istanbul ignore start*/(_hunk$lines3 = /*istanbul ignore end*/hunk.lines).push. /*istanbul ignore start*/apply /*istanbul ignore end*/( /*istanbul ignore start*/_hunk$lines3 /*istanbul ignore end*/, /*istanbul ignore start*/_toConsumableArray( /*istanbul ignore end*/myChanges));
  8371. return;
  8372. } else if ( /*istanbul ignore start*/(0, _array.arrayStartsWith) /*istanbul ignore end*/(theirChanges, myChanges) && skipRemoveSuperset(mine, theirChanges, theirChanges.length - myChanges.length)) {
  8373. /*istanbul ignore start*/var _hunk$lines4;
  8374. /*istanbul ignore end*/ /*istanbul ignore start*/(_hunk$lines4 = /*istanbul ignore end*/hunk.lines).push. /*istanbul ignore start*/apply /*istanbul ignore end*/( /*istanbul ignore start*/_hunk$lines4 /*istanbul ignore end*/, /*istanbul ignore start*/_toConsumableArray( /*istanbul ignore end*/theirChanges));
  8375. return;
  8376. }
  8377. } else if ( /*istanbul ignore start*/(0, _array.arrayEqual) /*istanbul ignore end*/(myChanges, theirChanges)) {
  8378. /*istanbul ignore start*/var _hunk$lines5;
  8379. /*istanbul ignore end*/ /*istanbul ignore start*/(_hunk$lines5 = /*istanbul ignore end*/hunk.lines).push. /*istanbul ignore start*/apply /*istanbul ignore end*/( /*istanbul ignore start*/_hunk$lines5 /*istanbul ignore end*/, /*istanbul ignore start*/_toConsumableArray( /*istanbul ignore end*/myChanges));
  8380. return;
  8381. }
  8382. conflict(hunk, myChanges, theirChanges);
  8383. }
  8384. function removal(hunk, mine, their, swap) {
  8385. var myChanges = collectChange(mine),
  8386. theirChanges = collectContext(their, myChanges);
  8387. if (theirChanges.merged) {
  8388. /*istanbul ignore start*/var _hunk$lines6;
  8389. /*istanbul ignore end*/ /*istanbul ignore start*/(_hunk$lines6 = /*istanbul ignore end*/hunk.lines).push. /*istanbul ignore start*/apply /*istanbul ignore end*/( /*istanbul ignore start*/_hunk$lines6 /*istanbul ignore end*/, /*istanbul ignore start*/_toConsumableArray( /*istanbul ignore end*/theirChanges.merged));
  8390. } else {
  8391. conflict(hunk, swap ? theirChanges : myChanges, swap ? myChanges : theirChanges);
  8392. }
  8393. }
  8394. function conflict(hunk, mine, their) {
  8395. hunk.conflict = true;
  8396. hunk.lines.push({
  8397. conflict: true,
  8398. mine: mine,
  8399. theirs: their
  8400. });
  8401. }
  8402. function insertLeading(hunk, insert, their) {
  8403. while (insert.offset < their.offset && insert.index < insert.lines.length) {
  8404. var line = insert.lines[insert.index++];
  8405. hunk.lines.push(line);
  8406. insert.offset++;
  8407. }
  8408. }
  8409. function insertTrailing(hunk, insert) {
  8410. while (insert.index < insert.lines.length) {
  8411. var line = insert.lines[insert.index++];
  8412. hunk.lines.push(line);
  8413. }
  8414. }
  8415. function collectChange(state) {
  8416. var ret = [],
  8417. operation = state.lines[state.index][0];
  8418. while (state.index < state.lines.length) {
  8419. var line = state.lines[state.index];
  8420. // Group additions that are immediately after subtractions and treat them as one "atomic" modify change.
  8421. if (operation === '-' && line[0] === '+') {
  8422. operation = '+';
  8423. }
  8424. if (operation === line[0]) {
  8425. ret.push(line);
  8426. state.index++;
  8427. } else {
  8428. break;
  8429. }
  8430. }
  8431. return ret;
  8432. }
  8433. function collectContext(state, matchChanges) {
  8434. var changes = [],
  8435. merged = [],
  8436. matchIndex = 0,
  8437. contextChanges = false,
  8438. conflicted = false;
  8439. while (matchIndex < matchChanges.length && state.index < state.lines.length) {
  8440. var change = state.lines[state.index],
  8441. match = matchChanges[matchIndex];
  8442. // Once we've hit our add, then we are done
  8443. if (match[0] === '+') {
  8444. break;
  8445. }
  8446. contextChanges = contextChanges || change[0] !== ' ';
  8447. merged.push(match);
  8448. matchIndex++;
  8449. // Consume any additions in the other block as a conflict to attempt
  8450. // to pull in the remaining context after this
  8451. if (change[0] === '+') {
  8452. conflicted = true;
  8453. while (change[0] === '+') {
  8454. changes.push(change);
  8455. change = state.lines[++state.index];
  8456. }
  8457. }
  8458. if (match.substr(1) === change.substr(1)) {
  8459. changes.push(change);
  8460. state.index++;
  8461. } else {
  8462. conflicted = true;
  8463. }
  8464. }
  8465. if ((matchChanges[matchIndex] || '')[0] === '+' && contextChanges) {
  8466. conflicted = true;
  8467. }
  8468. if (conflicted) {
  8469. return changes;
  8470. }
  8471. while (matchIndex < matchChanges.length) {
  8472. merged.push(matchChanges[matchIndex++]);
  8473. }
  8474. return {
  8475. merged: merged,
  8476. changes: changes
  8477. };
  8478. }
  8479. function allRemoves(changes) {
  8480. return changes.reduce(function (prev, change) {
  8481. return prev && change[0] === '-';
  8482. }, true);
  8483. }
  8484. function skipRemoveSuperset(state, removeChanges, delta) {
  8485. for (var i = 0; i < delta; i++) {
  8486. var changeContent = removeChanges[removeChanges.length - delta + i].substr(1);
  8487. if (state.lines[state.index + i] !== ' ' + changeContent) {
  8488. return false;
  8489. }
  8490. }
  8491. state.index += delta;
  8492. return true;
  8493. }
  8494. function calcOldNewLineCount(lines) {
  8495. var oldLines = 0;
  8496. var newLines = 0;
  8497. lines.forEach(function (line) {
  8498. if (typeof line !== 'string') {
  8499. var myCount = calcOldNewLineCount(line.mine);
  8500. var theirCount = calcOldNewLineCount(line.theirs);
  8501. if (oldLines !== undefined) {
  8502. if (myCount.oldLines === theirCount.oldLines) {
  8503. oldLines += myCount.oldLines;
  8504. } else {
  8505. oldLines = undefined;
  8506. }
  8507. }
  8508. if (newLines !== undefined) {
  8509. if (myCount.newLines === theirCount.newLines) {
  8510. newLines += myCount.newLines;
  8511. } else {
  8512. newLines = undefined;
  8513. }
  8514. }
  8515. } else {
  8516. if (newLines !== undefined && (line[0] === '+' || line[0] === ' ')) {
  8517. newLines++;
  8518. }
  8519. if (oldLines !== undefined && (line[0] === '-' || line[0] === ' ')) {
  8520. oldLines++;
  8521. }
  8522. }
  8523. });
  8524. return { oldLines: oldLines, newLines: newLines };
  8525. }
  8526. /***/ }),
  8527. /* 14 */
  8528. /***/ (function(module, exports, __webpack_require__) {
  8529. /*istanbul ignore start*/'use strict';
  8530. exports.__esModule = true;
  8531. exports. /*istanbul ignore end*/structuredPatch = structuredPatch;
  8532. /*istanbul ignore start*/exports. /*istanbul ignore end*/createTwoFilesPatch = createTwoFilesPatch;
  8533. /*istanbul ignore start*/exports. /*istanbul ignore end*/createPatch = createPatch;
  8534. var /*istanbul ignore start*/_line = __webpack_require__(5) /*istanbul ignore end*/;
  8535. /*istanbul ignore start*/function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
  8536. /*istanbul ignore end*/function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {
  8537. if (!options) {
  8538. options = {};
  8539. }
  8540. if (typeof options.context === 'undefined') {
  8541. options.context = 4;
  8542. }
  8543. var diff = /*istanbul ignore start*/(0, _line.diffLines) /*istanbul ignore end*/(oldStr, newStr, options);
  8544. diff.push({ value: '', lines: [] }); // Append an empty value to make cleanup easier
  8545. function contextLines(lines) {
  8546. return lines.map(function (entry) {
  8547. return ' ' + entry;
  8548. });
  8549. }
  8550. var hunks = [];
  8551. var oldRangeStart = 0,
  8552. newRangeStart = 0,
  8553. curRange = [],
  8554. oldLine = 1,
  8555. newLine = 1;
  8556. /*istanbul ignore start*/var _loop = function _loop( /*istanbul ignore end*/i) {
  8557. var current = diff[i],
  8558. lines = current.lines || current.value.replace(/\n$/, '').split('\n');
  8559. current.lines = lines;
  8560. if (current.added || current.removed) {
  8561. /*istanbul ignore start*/var _curRange;
  8562. /*istanbul ignore end*/ // If we have previous context, start with that
  8563. if (!oldRangeStart) {
  8564. var prev = diff[i - 1];
  8565. oldRangeStart = oldLine;
  8566. newRangeStart = newLine;
  8567. if (prev) {
  8568. curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : [];
  8569. oldRangeStart -= curRange.length;
  8570. newRangeStart -= curRange.length;
  8571. }
  8572. }
  8573. // Output our changes
  8574. /*istanbul ignore start*/(_curRange = /*istanbul ignore end*/curRange).push. /*istanbul ignore start*/apply /*istanbul ignore end*/( /*istanbul ignore start*/_curRange /*istanbul ignore end*/, /*istanbul ignore start*/_toConsumableArray( /*istanbul ignore end*/lines.map(function (entry) {
  8575. return (current.added ? '+' : '-') + entry;
  8576. })));
  8577. // Track the updated file position
  8578. if (current.added) {
  8579. newLine += lines.length;
  8580. } else {
  8581. oldLine += lines.length;
  8582. }
  8583. } else {
  8584. // Identical context lines. Track line changes
  8585. if (oldRangeStart) {
  8586. // Close out any changes that have been output (or join overlapping)
  8587. if (lines.length <= options.context * 2 && i < diff.length - 2) {
  8588. /*istanbul ignore start*/var _curRange2;
  8589. /*istanbul ignore end*/ // Overlapping
  8590. /*istanbul ignore start*/(_curRange2 = /*istanbul ignore end*/curRange).push. /*istanbul ignore start*/apply /*istanbul ignore end*/( /*istanbul ignore start*/_curRange2 /*istanbul ignore end*/, /*istanbul ignore start*/_toConsumableArray( /*istanbul ignore end*/contextLines(lines)));
  8591. } else {
  8592. /*istanbul ignore start*/var _curRange3;
  8593. /*istanbul ignore end*/ // end the range and output
  8594. var contextSize = Math.min(lines.length, options.context);
  8595. /*istanbul ignore start*/(_curRange3 = /*istanbul ignore end*/curRange).push. /*istanbul ignore start*/apply /*istanbul ignore end*/( /*istanbul ignore start*/_curRange3 /*istanbul ignore end*/, /*istanbul ignore start*/_toConsumableArray( /*istanbul ignore end*/contextLines(lines.slice(0, contextSize))));
  8596. var hunk = {
  8597. oldStart: oldRangeStart,
  8598. oldLines: oldLine - oldRangeStart + contextSize,
  8599. newStart: newRangeStart,
  8600. newLines: newLine - newRangeStart + contextSize,
  8601. lines: curRange
  8602. };
  8603. if (i >= diff.length - 2 && lines.length <= options.context) {
  8604. // EOF is inside this hunk
  8605. var oldEOFNewline = /\n$/.test(oldStr);
  8606. var newEOFNewline = /\n$/.test(newStr);
  8607. if (lines.length == 0 && !oldEOFNewline) {
  8608. // special case: old has no eol and no trailing context; no-nl can end up before adds
  8609. curRange.splice(hunk.oldLines, 0, '\\ No newline at end of file');
  8610. } else if (!oldEOFNewline || !newEOFNewline) {
  8611. curRange.push('\\ No newline at end of file');
  8612. }
  8613. }
  8614. hunks.push(hunk);
  8615. oldRangeStart = 0;
  8616. newRangeStart = 0;
  8617. curRange = [];
  8618. }
  8619. }
  8620. oldLine += lines.length;
  8621. newLine += lines.length;
  8622. }
  8623. };
  8624. for (var i = 0; i < diff.length; i++) {
  8625. /*istanbul ignore start*/_loop( /*istanbul ignore end*/i);
  8626. }
  8627. return {
  8628. oldFileName: oldFileName, newFileName: newFileName,
  8629. oldHeader: oldHeader, newHeader: newHeader,
  8630. hunks: hunks
  8631. };
  8632. }
  8633. function createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {
  8634. var diff = structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options);
  8635. var ret = [];
  8636. if (oldFileName == newFileName) {
  8637. ret.push('Index: ' + oldFileName);
  8638. }
  8639. ret.push('===================================================================');
  8640. ret.push('--- ' + diff.oldFileName + (typeof diff.oldHeader === 'undefined' ? '' : '\t' + diff.oldHeader));
  8641. ret.push('+++ ' + diff.newFileName + (typeof diff.newHeader === 'undefined' ? '' : '\t' + diff.newHeader));
  8642. for (var i = 0; i < diff.hunks.length; i++) {
  8643. var hunk = diff.hunks[i];
  8644. ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@');
  8645. ret.push.apply(ret, hunk.lines);
  8646. }
  8647. return ret.join('\n') + '\n';
  8648. }
  8649. function createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) {
  8650. return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options);
  8651. }
  8652. /***/ }),
  8653. /* 15 */
  8654. /***/ (function(module, exports) {
  8655. /*istanbul ignore start*/"use strict";
  8656. exports.__esModule = true;
  8657. exports. /*istanbul ignore end*/arrayEqual = arrayEqual;
  8658. /*istanbul ignore start*/exports. /*istanbul ignore end*/arrayStartsWith = arrayStartsWith;
  8659. function arrayEqual(a, b) {
  8660. if (a.length !== b.length) {
  8661. return false;
  8662. }
  8663. return arrayStartsWith(a, b);
  8664. }
  8665. function arrayStartsWith(array, start) {
  8666. if (start.length > array.length) {
  8667. return false;
  8668. }
  8669. for (var i = 0; i < start.length; i++) {
  8670. if (start[i] !== array[i]) {
  8671. return false;
  8672. }
  8673. }
  8674. return true;
  8675. }
  8676. /***/ }),
  8677. /* 16 */
  8678. /***/ (function(module, exports) {
  8679. /*istanbul ignore start*/"use strict";
  8680. exports.__esModule = true;
  8681. exports. /*istanbul ignore end*/convertChangesToDMP = convertChangesToDMP;
  8682. // See: http://code.google.com/p/google-diff-match-patch/wiki/API
  8683. function convertChangesToDMP(changes) {
  8684. var ret = [],
  8685. change = /*istanbul ignore start*/void 0 /*istanbul ignore end*/,
  8686. operation = /*istanbul ignore start*/void 0 /*istanbul ignore end*/;
  8687. for (var i = 0; i < changes.length; i++) {
  8688. change = changes[i];
  8689. if (change.added) {
  8690. operation = 1;
  8691. } else if (change.removed) {
  8692. operation = -1;
  8693. } else {
  8694. operation = 0;
  8695. }
  8696. ret.push([operation, change.value]);
  8697. }
  8698. return ret;
  8699. }
  8700. /***/ }),
  8701. /* 17 */
  8702. /***/ (function(module, exports) {
  8703. /*istanbul ignore start*/'use strict';
  8704. exports.__esModule = true;
  8705. exports. /*istanbul ignore end*/convertChangesToXML = convertChangesToXML;
  8706. function convertChangesToXML(changes) {
  8707. var ret = [];
  8708. for (var i = 0; i < changes.length; i++) {
  8709. var change = changes[i];
  8710. if (change.added) {
  8711. ret.push('<ins>');
  8712. } else if (change.removed) {
  8713. ret.push('<del>');
  8714. }
  8715. ret.push(escapeHTML(change.value));
  8716. if (change.added) {
  8717. ret.push('</ins>');
  8718. } else if (change.removed) {
  8719. ret.push('</del>');
  8720. }
  8721. }
  8722. return ret.join('');
  8723. }
  8724. function escapeHTML(s) {
  8725. var n = s;
  8726. n = n.replace(/&/g, '&amp;');
  8727. n = n.replace(/</g, '&lt;');
  8728. n = n.replace(/>/g, '&gt;');
  8729. n = n.replace(/"/g, '&quot;');
  8730. return n;
  8731. }
  8732. /***/ })
  8733. /******/ ])
  8734. });
  8735. ;
  8736. },{}],70:[function(require,module,exports){
  8737. module.exports = Array.isArray || function (arr) {
  8738. return Object.prototype.toString.call(arr) == '[object Array]';
  8739. };
  8740. },{}],71:[function(require,module,exports){
  8741. module.exports = extend;
  8742. /*
  8743. var obj = {a: 3, b: 5};
  8744. extend(obj, {a: 4, c: 8}); // {a: 4, b: 5, c: 8}
  8745. obj; // {a: 4, b: 5, c: 8}
  8746. var obj = {a: 3, b: 5};
  8747. extend({}, obj, {a: 4, c: 8}); // {a: 4, b: 5, c: 8}
  8748. obj; // {a: 3, b: 5}
  8749. var arr = [1, 2, 3];
  8750. var obj = {a: 3, b: 5};
  8751. extend(obj, {c: arr}); // {a: 3, b: 5, c: [1, 2, 3]}
  8752. arr.push(4);
  8753. obj; // {a: 3, b: 5, c: [1, 2, 3, 4]}
  8754. var arr = [1, 2, 3];
  8755. var obj = {a: 3, b: 5};
  8756. extend(true, obj, {c: arr}); // {a: 3, b: 5, c: [1, 2, 3]}
  8757. arr.push(4);
  8758. obj; // {a: 3, b: 5, c: [1, 2, 3]}
  8759. extend({a: 4, b: 5}); // {a: 4, b: 5}
  8760. extend({a: 4, b: 5}, 3); {a: 4, b: 5}
  8761. extend({a: 4, b: 5}, true); {a: 4, b: 5}
  8762. extend('hello', {a: 4, b: 5}); // throws
  8763. extend(3, {a: 4, b: 5}); // throws
  8764. */
  8765. function extend(/* [deep], obj1, obj2, [objn] */) {
  8766. var args = [].slice.call(arguments);
  8767. var deep = false;
  8768. if (typeof args[0] == 'boolean') {
  8769. deep = args.shift();
  8770. }
  8771. var result = args[0];
  8772. if (!result || (typeof result != 'object' && typeof result != 'function')) {
  8773. throw new Error('extendee must be an object');
  8774. }
  8775. var extenders = args.slice(1);
  8776. var len = extenders.length;
  8777. for (var i = 0; i < len; i++) {
  8778. var extender = extenders[i];
  8779. for (var key in extender) {
  8780. if (extender.hasOwnProperty(key)) {
  8781. var value = extender[key];
  8782. if (deep && isCloneable(value)) {
  8783. var base = Array.isArray(value) ? [] : {};
  8784. result[key] = extend(true, result.hasOwnProperty(key) ? result[key] : base, value);
  8785. } else {
  8786. result[key] = value;
  8787. }
  8788. }
  8789. }
  8790. }
  8791. return result;
  8792. }
  8793. function isCloneable(obj) {
  8794. return Array.isArray(obj) || {}.toString.call(obj) == '[object Object]';
  8795. }
  8796. },{}],72:[function(require,module,exports){
  8797. (function (global){
  8798. /**
  8799. * @license
  8800. * Lodash <https://lodash.com/>
  8801. * Copyright JS Foundation and other contributors <https://js.foundation/>
  8802. * Released under MIT license <https://lodash.com/license>
  8803. * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
  8804. * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
  8805. */
  8806. ;(function() {
  8807. /** Used as a safe reference for `undefined` in pre-ES5 environments. */
  8808. var undefined;
  8809. /** Used as the semantic version number. */
  8810. var VERSION = '4.17.11';
  8811. /** Used as the size to enable large array optimizations. */
  8812. var LARGE_ARRAY_SIZE = 200;
  8813. /** Error message constants. */
  8814. var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',
  8815. FUNC_ERROR_TEXT = 'Expected a function';
  8816. /** Used to stand-in for `undefined` hash values. */
  8817. var HASH_UNDEFINED = '__lodash_hash_undefined__';
  8818. /** Used as the maximum memoize cache size. */
  8819. var MAX_MEMOIZE_SIZE = 500;
  8820. /** Used as the internal argument placeholder. */
  8821. var PLACEHOLDER = '__lodash_placeholder__';
  8822. /** Used to compose bitmasks for cloning. */
  8823. var CLONE_DEEP_FLAG = 1,
  8824. CLONE_FLAT_FLAG = 2,
  8825. CLONE_SYMBOLS_FLAG = 4;
  8826. /** Used to compose bitmasks for value comparisons. */
  8827. var COMPARE_PARTIAL_FLAG = 1,
  8828. COMPARE_UNORDERED_FLAG = 2;
  8829. /** Used to compose bitmasks for function metadata. */
  8830. var WRAP_BIND_FLAG = 1,
  8831. WRAP_BIND_KEY_FLAG = 2,
  8832. WRAP_CURRY_BOUND_FLAG = 4,
  8833. WRAP_CURRY_FLAG = 8,
  8834. WRAP_CURRY_RIGHT_FLAG = 16,
  8835. WRAP_PARTIAL_FLAG = 32,
  8836. WRAP_PARTIAL_RIGHT_FLAG = 64,
  8837. WRAP_ARY_FLAG = 128,
  8838. WRAP_REARG_FLAG = 256,
  8839. WRAP_FLIP_FLAG = 512;
  8840. /** Used as default options for `_.truncate`. */
  8841. var DEFAULT_TRUNC_LENGTH = 30,
  8842. DEFAULT_TRUNC_OMISSION = '...';
  8843. /** Used to detect hot functions by number of calls within a span of milliseconds. */
  8844. var HOT_COUNT = 800,
  8845. HOT_SPAN = 16;
  8846. /** Used to indicate the type of lazy iteratees. */
  8847. var LAZY_FILTER_FLAG = 1,
  8848. LAZY_MAP_FLAG = 2,
  8849. LAZY_WHILE_FLAG = 3;
  8850. /** Used as references for various `Number` constants. */
  8851. var INFINITY = 1 / 0,
  8852. MAX_SAFE_INTEGER = 9007199254740991,
  8853. MAX_INTEGER = 1.7976931348623157e+308,
  8854. NAN = 0 / 0;
  8855. /** Used as references for the maximum length and index of an array. */
  8856. var MAX_ARRAY_LENGTH = 4294967295,
  8857. MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,
  8858. HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;
  8859. /** Used to associate wrap methods with their bit flags. */
  8860. var wrapFlags = [
  8861. ['ary', WRAP_ARY_FLAG],
  8862. ['bind', WRAP_BIND_FLAG],
  8863. ['bindKey', WRAP_BIND_KEY_FLAG],
  8864. ['curry', WRAP_CURRY_FLAG],
  8865. ['curryRight', WRAP_CURRY_RIGHT_FLAG],
  8866. ['flip', WRAP_FLIP_FLAG],
  8867. ['partial', WRAP_PARTIAL_FLAG],
  8868. ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],
  8869. ['rearg', WRAP_REARG_FLAG]
  8870. ];
  8871. /** `Object#toString` result references. */
  8872. var argsTag = '[object Arguments]',
  8873. arrayTag = '[object Array]',
  8874. asyncTag = '[object AsyncFunction]',
  8875. boolTag = '[object Boolean]',
  8876. dateTag = '[object Date]',
  8877. domExcTag = '[object DOMException]',
  8878. errorTag = '[object Error]',
  8879. funcTag = '[object Function]',
  8880. genTag = '[object GeneratorFunction]',
  8881. mapTag = '[object Map]',
  8882. numberTag = '[object Number]',
  8883. nullTag = '[object Null]',
  8884. objectTag = '[object Object]',
  8885. promiseTag = '[object Promise]',
  8886. proxyTag = '[object Proxy]',
  8887. regexpTag = '[object RegExp]',
  8888. setTag = '[object Set]',
  8889. stringTag = '[object String]',
  8890. symbolTag = '[object Symbol]',
  8891. undefinedTag = '[object Undefined]',
  8892. weakMapTag = '[object WeakMap]',
  8893. weakSetTag = '[object WeakSet]';
  8894. var arrayBufferTag = '[object ArrayBuffer]',
  8895. dataViewTag = '[object DataView]',
  8896. float32Tag = '[object Float32Array]',
  8897. float64Tag = '[object Float64Array]',
  8898. int8Tag = '[object Int8Array]',
  8899. int16Tag = '[object Int16Array]',
  8900. int32Tag = '[object Int32Array]',
  8901. uint8Tag = '[object Uint8Array]',
  8902. uint8ClampedTag = '[object Uint8ClampedArray]',
  8903. uint16Tag = '[object Uint16Array]',
  8904. uint32Tag = '[object Uint32Array]';
  8905. /** Used to match empty string literals in compiled template source. */
  8906. var reEmptyStringLeading = /\b__p \+= '';/g,
  8907. reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
  8908. reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
  8909. /** Used to match HTML entities and HTML characters. */
  8910. var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,
  8911. reUnescapedHtml = /[&<>"']/g,
  8912. reHasEscapedHtml = RegExp(reEscapedHtml.source),
  8913. reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
  8914. /** Used to match template delimiters. */
  8915. var reEscape = /<%-([\s\S]+?)%>/g,
  8916. reEvaluate = /<%([\s\S]+?)%>/g,
  8917. reInterpolate = /<%=([\s\S]+?)%>/g;
  8918. /** Used to match property names within property paths. */
  8919. var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
  8920. reIsPlainProp = /^\w*$/,
  8921. rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
  8922. /**
  8923. * Used to match `RegExp`
  8924. * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
  8925. */
  8926. var reRegExpChar = /[\\^$.*+?()[\]{}|]/g,
  8927. reHasRegExpChar = RegExp(reRegExpChar.source);
  8928. /** Used to match leading and trailing whitespace. */
  8929. var reTrim = /^\s+|\s+$/g,
  8930. reTrimStart = /^\s+/,
  8931. reTrimEnd = /\s+$/;
  8932. /** Used to match wrap detail comments. */
  8933. var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,
  8934. reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/,
  8935. reSplitDetails = /,? & /;
  8936. /** Used to match words composed of alphanumeric characters. */
  8937. var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;
  8938. /** Used to match backslashes in property paths. */
  8939. var reEscapeChar = /\\(\\)?/g;
  8940. /**
  8941. * Used to match
  8942. * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).
  8943. */
  8944. var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
  8945. /** Used to match `RegExp` flags from their coerced string values. */
  8946. var reFlags = /\w*$/;
  8947. /** Used to detect bad signed hexadecimal string values. */
  8948. var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
  8949. /** Used to detect binary string values. */
  8950. var reIsBinary = /^0b[01]+$/i;
  8951. /** Used to detect host constructors (Safari). */
  8952. var reIsHostCtor = /^\[object .+?Constructor\]$/;
  8953. /** Used to detect octal string values. */
  8954. var reIsOctal = /^0o[0-7]+$/i;
  8955. /** Used to detect unsigned integer values. */
  8956. var reIsUint = /^(?:0|[1-9]\d*)$/;
  8957. /** Used to match Latin Unicode letters (excluding mathematical operators). */
  8958. var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;
  8959. /** Used to ensure capturing order of template delimiters. */
  8960. var reNoMatch = /($^)/;
  8961. /** Used to match unescaped characters in compiled string literals. */
  8962. var reUnescapedString = /['\n\r\u2028\u2029\\]/g;
  8963. /** Used to compose unicode character classes. */
  8964. var rsAstralRange = '\\ud800-\\udfff',
  8965. rsComboMarksRange = '\\u0300-\\u036f',
  8966. reComboHalfMarksRange = '\\ufe20-\\ufe2f',
  8967. rsComboSymbolsRange = '\\u20d0-\\u20ff',
  8968. rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
  8969. rsDingbatRange = '\\u2700-\\u27bf',
  8970. rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff',
  8971. rsMathOpRange = '\\xac\\xb1\\xd7\\xf7',
  8972. rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf',
  8973. rsPunctuationRange = '\\u2000-\\u206f',
  8974. rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000',
  8975. rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde',
  8976. rsVarRange = '\\ufe0e\\ufe0f',
  8977. rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;
  8978. /** Used to compose unicode capture groups. */
  8979. var rsApos = "['\u2019]",
  8980. rsAstral = '[' + rsAstralRange + ']',
  8981. rsBreak = '[' + rsBreakRange + ']',
  8982. rsCombo = '[' + rsComboRange + ']',
  8983. rsDigits = '\\d+',
  8984. rsDingbat = '[' + rsDingbatRange + ']',
  8985. rsLower = '[' + rsLowerRange + ']',
  8986. rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',
  8987. rsFitz = '\\ud83c[\\udffb-\\udfff]',
  8988. rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
  8989. rsNonAstral = '[^' + rsAstralRange + ']',
  8990. rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
  8991. rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
  8992. rsUpper = '[' + rsUpperRange + ']',
  8993. rsZWJ = '\\u200d';
  8994. /** Used to compose unicode regexes. */
  8995. var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',
  8996. rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',
  8997. rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',
  8998. rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',
  8999. reOptMod = rsModifier + '?',
  9000. rsOptVar = '[' + rsVarRange + ']?',
  9001. rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
  9002. rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])',
  9003. rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])',
  9004. rsSeq = rsOptVar + reOptMod + rsOptJoin,
  9005. rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,
  9006. rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';
  9007. /** Used to match apostrophes. */
  9008. var reApos = RegExp(rsApos, 'g');
  9009. /**
  9010. * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and
  9011. * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).
  9012. */
  9013. var reComboMark = RegExp(rsCombo, 'g');
  9014. /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
  9015. var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');
  9016. /** Used to match complex or compound words. */
  9017. var reUnicodeWord = RegExp([
  9018. rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',
  9019. rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',
  9020. rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,
  9021. rsUpper + '+' + rsOptContrUpper,
  9022. rsOrdUpper,
  9023. rsOrdLower,
  9024. rsDigits,
  9025. rsEmoji
  9026. ].join('|'), 'g');
  9027. /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
  9028. var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');
  9029. /** Used to detect strings that need a more robust regexp to match words. */
  9030. var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;
  9031. /** Used to assign default `context` object properties. */
  9032. var contextProps = [
  9033. 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',
  9034. 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',
  9035. 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',
  9036. 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',
  9037. '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'
  9038. ];
  9039. /** Used to make template sourceURLs easier to identify. */
  9040. var templateCounter = -1;
  9041. /** Used to identify `toStringTag` values of typed arrays. */
  9042. var typedArrayTags = {};
  9043. typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
  9044. typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
  9045. typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
  9046. typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
  9047. typedArrayTags[uint32Tag] = true;
  9048. typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
  9049. typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
  9050. typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
  9051. typedArrayTags[errorTag] = typedArrayTags[funcTag] =
  9052. typedArrayTags[mapTag] = typedArrayTags[numberTag] =
  9053. typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
  9054. typedArrayTags[setTag] = typedArrayTags[stringTag] =
  9055. typedArrayTags[weakMapTag] = false;
  9056. /** Used to identify `toStringTag` values supported by `_.clone`. */
  9057. var cloneableTags = {};
  9058. cloneableTags[argsTag] = cloneableTags[arrayTag] =
  9059. cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =
  9060. cloneableTags[boolTag] = cloneableTags[dateTag] =
  9061. cloneableTags[float32Tag] = cloneableTags[float64Tag] =
  9062. cloneableTags[int8Tag] = cloneableTags[int16Tag] =
  9063. cloneableTags[int32Tag] = cloneableTags[mapTag] =
  9064. cloneableTags[numberTag] = cloneableTags[objectTag] =
  9065. cloneableTags[regexpTag] = cloneableTags[setTag] =
  9066. cloneableTags[stringTag] = cloneableTags[symbolTag] =
  9067. cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
  9068. cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
  9069. cloneableTags[errorTag] = cloneableTags[funcTag] =
  9070. cloneableTags[weakMapTag] = false;
  9071. /** Used to map Latin Unicode letters to basic Latin letters. */
  9072. var deburredLetters = {
  9073. // Latin-1 Supplement block.
  9074. '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A',
  9075. '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a',
  9076. '\xc7': 'C', '\xe7': 'c',
  9077. '\xd0': 'D', '\xf0': 'd',
  9078. '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E',
  9079. '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e',
  9080. '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I',
  9081. '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i',
  9082. '\xd1': 'N', '\xf1': 'n',
  9083. '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O',
  9084. '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o',
  9085. '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U',
  9086. '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u',
  9087. '\xdd': 'Y', '\xfd': 'y', '\xff': 'y',
  9088. '\xc6': 'Ae', '\xe6': 'ae',
  9089. '\xde': 'Th', '\xfe': 'th',
  9090. '\xdf': 'ss',
  9091. // Latin Extended-A block.
  9092. '\u0100': 'A', '\u0102': 'A', '\u0104': 'A',
  9093. '\u0101': 'a', '\u0103': 'a', '\u0105': 'a',
  9094. '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C',
  9095. '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c',
  9096. '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd',
  9097. '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E',
  9098. '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e',
  9099. '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G',
  9100. '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g',
  9101. '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h',
  9102. '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I',
  9103. '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i',
  9104. '\u0134': 'J', '\u0135': 'j',
  9105. '\u0136': 'K', '\u0137': 'k', '\u0138': 'k',
  9106. '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L',
  9107. '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l',
  9108. '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N',
  9109. '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n',
  9110. '\u014c': 'O', '\u014e': 'O', '\u0150': 'O',
  9111. '\u014d': 'o', '\u014f': 'o', '\u0151': 'o',
  9112. '\u0154': 'R', '\u0156': 'R', '\u0158': 'R',
  9113. '\u0155': 'r', '\u0157': 'r', '\u0159': 'r',
  9114. '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S',
  9115. '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's',
  9116. '\u0162': 'T', '\u0164': 'T', '\u0166': 'T',
  9117. '\u0163': 't', '\u0165': 't', '\u0167': 't',
  9118. '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U',
  9119. '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u',
  9120. '\u0174': 'W', '\u0175': 'w',
  9121. '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y',
  9122. '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z',
  9123. '\u017a': 'z', '\u017c': 'z', '\u017e': 'z',
  9124. '\u0132': 'IJ', '\u0133': 'ij',
  9125. '\u0152': 'Oe', '\u0153': 'oe',
  9126. '\u0149': "'n", '\u017f': 's'
  9127. };
  9128. /** Used to map characters to HTML entities. */
  9129. var htmlEscapes = {
  9130. '&': '&amp;',
  9131. '<': '&lt;',
  9132. '>': '&gt;',
  9133. '"': '&quot;',
  9134. "'": '&#39;'
  9135. };
  9136. /** Used to map HTML entities to characters. */
  9137. var htmlUnescapes = {
  9138. '&amp;': '&',
  9139. '&lt;': '<',
  9140. '&gt;': '>',
  9141. '&quot;': '"',
  9142. '&#39;': "'"
  9143. };
  9144. /** Used to escape characters for inclusion in compiled string literals. */
  9145. var stringEscapes = {
  9146. '\\': '\\',
  9147. "'": "'",
  9148. '\n': 'n',
  9149. '\r': 'r',
  9150. '\u2028': 'u2028',
  9151. '\u2029': 'u2029'
  9152. };
  9153. /** Built-in method references without a dependency on `root`. */
  9154. var freeParseFloat = parseFloat,
  9155. freeParseInt = parseInt;
  9156. /** Detect free variable `global` from Node.js. */
  9157. var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
  9158. /** Detect free variable `self`. */
  9159. var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
  9160. /** Used as a reference to the global object. */
  9161. var root = freeGlobal || freeSelf || Function('return this')();
  9162. /** Detect free variable `exports`. */
  9163. var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;
  9164. /** Detect free variable `module`. */
  9165. var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
  9166. /** Detect the popular CommonJS extension `module.exports`. */
  9167. var moduleExports = freeModule && freeModule.exports === freeExports;
  9168. /** Detect free variable `process` from Node.js. */
  9169. var freeProcess = moduleExports && freeGlobal.process;
  9170. /** Used to access faster Node.js helpers. */
  9171. var nodeUtil = (function() {
  9172. try {
  9173. // Use `util.types` for Node.js 10+.
  9174. var types = freeModule && freeModule.require && freeModule.require('util').types;
  9175. if (types) {
  9176. return types;
  9177. }
  9178. // Legacy `process.binding('util')` for Node.js < 10.
  9179. return freeProcess && freeProcess.binding && freeProcess.binding('util');
  9180. } catch (e) {}
  9181. }());
  9182. /* Node.js helper references. */
  9183. var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,
  9184. nodeIsDate = nodeUtil && nodeUtil.isDate,
  9185. nodeIsMap = nodeUtil && nodeUtil.isMap,
  9186. nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,
  9187. nodeIsSet = nodeUtil && nodeUtil.isSet,
  9188. nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
  9189. /*--------------------------------------------------------------------------*/
  9190. /**
  9191. * A faster alternative to `Function#apply`, this function invokes `func`
  9192. * with the `this` binding of `thisArg` and the arguments of `args`.
  9193. *
  9194. * @private
  9195. * @param {Function} func The function to invoke.
  9196. * @param {*} thisArg The `this` binding of `func`.
  9197. * @param {Array} args The arguments to invoke `func` with.
  9198. * @returns {*} Returns the result of `func`.
  9199. */
  9200. function apply(func, thisArg, args) {
  9201. switch (args.length) {
  9202. case 0: return func.call(thisArg);
  9203. case 1: return func.call(thisArg, args[0]);
  9204. case 2: return func.call(thisArg, args[0], args[1]);
  9205. case 3: return func.call(thisArg, args[0], args[1], args[2]);
  9206. }
  9207. return func.apply(thisArg, args);
  9208. }
  9209. /**
  9210. * A specialized version of `baseAggregator` for arrays.
  9211. *
  9212. * @private
  9213. * @param {Array} [array] The array to iterate over.
  9214. * @param {Function} setter The function to set `accumulator` values.
  9215. * @param {Function} iteratee The iteratee to transform keys.
  9216. * @param {Object} accumulator The initial aggregated object.
  9217. * @returns {Function} Returns `accumulator`.
  9218. */
  9219. function arrayAggregator(array, setter, iteratee, accumulator) {
  9220. var index = -1,
  9221. length = array == null ? 0 : array.length;
  9222. while (++index < length) {
  9223. var value = array[index];
  9224. setter(accumulator, value, iteratee(value), array);
  9225. }
  9226. return accumulator;
  9227. }
  9228. /**
  9229. * A specialized version of `_.forEach` for arrays without support for
  9230. * iteratee shorthands.
  9231. *
  9232. * @private
  9233. * @param {Array} [array] The array to iterate over.
  9234. * @param {Function} iteratee The function invoked per iteration.
  9235. * @returns {Array} Returns `array`.
  9236. */
  9237. function arrayEach(array, iteratee) {
  9238. var index = -1,
  9239. length = array == null ? 0 : array.length;
  9240. while (++index < length) {
  9241. if (iteratee(array[index], index, array) === false) {
  9242. break;
  9243. }
  9244. }
  9245. return array;
  9246. }
  9247. /**
  9248. * A specialized version of `_.forEachRight` for arrays without support for
  9249. * iteratee shorthands.
  9250. *
  9251. * @private
  9252. * @param {Array} [array] The array to iterate over.
  9253. * @param {Function} iteratee The function invoked per iteration.
  9254. * @returns {Array} Returns `array`.
  9255. */
  9256. function arrayEachRight(array, iteratee) {
  9257. var length = array == null ? 0 : array.length;
  9258. while (length--) {
  9259. if (iteratee(array[length], length, array) === false) {
  9260. break;
  9261. }
  9262. }
  9263. return array;
  9264. }
  9265. /**
  9266. * A specialized version of `_.every` for arrays without support for
  9267. * iteratee shorthands.
  9268. *
  9269. * @private
  9270. * @param {Array} [array] The array to iterate over.
  9271. * @param {Function} predicate The function invoked per iteration.
  9272. * @returns {boolean} Returns `true` if all elements pass the predicate check,
  9273. * else `false`.
  9274. */
  9275. function arrayEvery(array, predicate) {
  9276. var index = -1,
  9277. length = array == null ? 0 : array.length;
  9278. while (++index < length) {
  9279. if (!predicate(array[index], index, array)) {
  9280. return false;
  9281. }
  9282. }
  9283. return true;
  9284. }
  9285. /**
  9286. * A specialized version of `_.filter` for arrays without support for
  9287. * iteratee shorthands.
  9288. *
  9289. * @private
  9290. * @param {Array} [array] The array to iterate over.
  9291. * @param {Function} predicate The function invoked per iteration.
  9292. * @returns {Array} Returns the new filtered array.
  9293. */
  9294. function arrayFilter(array, predicate) {
  9295. var index = -1,
  9296. length = array == null ? 0 : array.length,
  9297. resIndex = 0,
  9298. result = [];
  9299. while (++index < length) {
  9300. var value = array[index];
  9301. if (predicate(value, index, array)) {
  9302. result[resIndex++] = value;
  9303. }
  9304. }
  9305. return result;
  9306. }
  9307. /**
  9308. * A specialized version of `_.includes` for arrays without support for
  9309. * specifying an index to search from.
  9310. *
  9311. * @private
  9312. * @param {Array} [array] The array to inspect.
  9313. * @param {*} target The value to search for.
  9314. * @returns {boolean} Returns `true` if `target` is found, else `false`.
  9315. */
  9316. function arrayIncludes(array, value) {
  9317. var length = array == null ? 0 : array.length;
  9318. return !!length && baseIndexOf(array, value, 0) > -1;
  9319. }
  9320. /**
  9321. * This function is like `arrayIncludes` except that it accepts a comparator.
  9322. *
  9323. * @private
  9324. * @param {Array} [array] The array to inspect.
  9325. * @param {*} target The value to search for.
  9326. * @param {Function} comparator The comparator invoked per element.
  9327. * @returns {boolean} Returns `true` if `target` is found, else `false`.
  9328. */
  9329. function arrayIncludesWith(array, value, comparator) {
  9330. var index = -1,
  9331. length = array == null ? 0 : array.length;
  9332. while (++index < length) {
  9333. if (comparator(value, array[index])) {
  9334. return true;
  9335. }
  9336. }
  9337. return false;
  9338. }
  9339. /**
  9340. * A specialized version of `_.map` for arrays without support for iteratee
  9341. * shorthands.
  9342. *
  9343. * @private
  9344. * @param {Array} [array] The array to iterate over.
  9345. * @param {Function} iteratee The function invoked per iteration.
  9346. * @returns {Array} Returns the new mapped array.
  9347. */
  9348. function arrayMap(array, iteratee) {
  9349. var index = -1,
  9350. length = array == null ? 0 : array.length,
  9351. result = Array(length);
  9352. while (++index < length) {
  9353. result[index] = iteratee(array[index], index, array);
  9354. }
  9355. return result;
  9356. }
  9357. /**
  9358. * Appends the elements of `values` to `array`.
  9359. *
  9360. * @private
  9361. * @param {Array} array The array to modify.
  9362. * @param {Array} values The values to append.
  9363. * @returns {Array} Returns `array`.
  9364. */
  9365. function arrayPush(array, values) {
  9366. var index = -1,
  9367. length = values.length,
  9368. offset = array.length;
  9369. while (++index < length) {
  9370. array[offset + index] = values[index];
  9371. }
  9372. return array;
  9373. }
  9374. /**
  9375. * A specialized version of `_.reduce` for arrays without support for
  9376. * iteratee shorthands.
  9377. *
  9378. * @private
  9379. * @param {Array} [array] The array to iterate over.
  9380. * @param {Function} iteratee The function invoked per iteration.
  9381. * @param {*} [accumulator] The initial value.
  9382. * @param {boolean} [initAccum] Specify using the first element of `array` as
  9383. * the initial value.
  9384. * @returns {*} Returns the accumulated value.
  9385. */
  9386. function arrayReduce(array, iteratee, accumulator, initAccum) {
  9387. var index = -1,
  9388. length = array == null ? 0 : array.length;
  9389. if (initAccum && length) {
  9390. accumulator = array[++index];
  9391. }
  9392. while (++index < length) {
  9393. accumulator = iteratee(accumulator, array[index], index, array);
  9394. }
  9395. return accumulator;
  9396. }
  9397. /**
  9398. * A specialized version of `_.reduceRight` for arrays without support for
  9399. * iteratee shorthands.
  9400. *
  9401. * @private
  9402. * @param {Array} [array] The array to iterate over.
  9403. * @param {Function} iteratee The function invoked per iteration.
  9404. * @param {*} [accumulator] The initial value.
  9405. * @param {boolean} [initAccum] Specify using the last element of `array` as
  9406. * the initial value.
  9407. * @returns {*} Returns the accumulated value.
  9408. */
  9409. function arrayReduceRight(array, iteratee, accumulator, initAccum) {
  9410. var length = array == null ? 0 : array.length;
  9411. if (initAccum && length) {
  9412. accumulator = array[--length];
  9413. }
  9414. while (length--) {
  9415. accumulator = iteratee(accumulator, array[length], length, array);
  9416. }
  9417. return accumulator;
  9418. }
  9419. /**
  9420. * A specialized version of `_.some` for arrays without support for iteratee
  9421. * shorthands.
  9422. *
  9423. * @private
  9424. * @param {Array} [array] The array to iterate over.
  9425. * @param {Function} predicate The function invoked per iteration.
  9426. * @returns {boolean} Returns `true` if any element passes the predicate check,
  9427. * else `false`.
  9428. */
  9429. function arraySome(array, predicate) {
  9430. var index = -1,
  9431. length = array == null ? 0 : array.length;
  9432. while (++index < length) {
  9433. if (predicate(array[index], index, array)) {
  9434. return true;
  9435. }
  9436. }
  9437. return false;
  9438. }
  9439. /**
  9440. * Gets the size of an ASCII `string`.
  9441. *
  9442. * @private
  9443. * @param {string} string The string inspect.
  9444. * @returns {number} Returns the string size.
  9445. */
  9446. var asciiSize = baseProperty('length');
  9447. /**
  9448. * Converts an ASCII `string` to an array.
  9449. *
  9450. * @private
  9451. * @param {string} string The string to convert.
  9452. * @returns {Array} Returns the converted array.
  9453. */
  9454. function asciiToArray(string) {
  9455. return string.split('');
  9456. }
  9457. /**
  9458. * Splits an ASCII `string` into an array of its words.
  9459. *
  9460. * @private
  9461. * @param {string} The string to inspect.
  9462. * @returns {Array} Returns the words of `string`.
  9463. */
  9464. function asciiWords(string) {
  9465. return string.match(reAsciiWord) || [];
  9466. }
  9467. /**
  9468. * The base implementation of methods like `_.findKey` and `_.findLastKey`,
  9469. * without support for iteratee shorthands, which iterates over `collection`
  9470. * using `eachFunc`.
  9471. *
  9472. * @private
  9473. * @param {Array|Object} collection The collection to inspect.
  9474. * @param {Function} predicate The function invoked per iteration.
  9475. * @param {Function} eachFunc The function to iterate over `collection`.
  9476. * @returns {*} Returns the found element or its key, else `undefined`.
  9477. */
  9478. function baseFindKey(collection, predicate, eachFunc) {
  9479. var result;
  9480. eachFunc(collection, function(value, key, collection) {
  9481. if (predicate(value, key, collection)) {
  9482. result = key;
  9483. return false;
  9484. }
  9485. });
  9486. return result;
  9487. }
  9488. /**
  9489. * The base implementation of `_.findIndex` and `_.findLastIndex` without
  9490. * support for iteratee shorthands.
  9491. *
  9492. * @private
  9493. * @param {Array} array The array to inspect.
  9494. * @param {Function} predicate The function invoked per iteration.
  9495. * @param {number} fromIndex The index to search from.
  9496. * @param {boolean} [fromRight] Specify iterating from right to left.
  9497. * @returns {number} Returns the index of the matched value, else `-1`.
  9498. */
  9499. function baseFindIndex(array, predicate, fromIndex, fromRight) {
  9500. var length = array.length,
  9501. index = fromIndex + (fromRight ? 1 : -1);
  9502. while ((fromRight ? index-- : ++index < length)) {
  9503. if (predicate(array[index], index, array)) {
  9504. return index;
  9505. }
  9506. }
  9507. return -1;
  9508. }
  9509. /**
  9510. * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
  9511. *
  9512. * @private
  9513. * @param {Array} array The array to inspect.
  9514. * @param {*} value The value to search for.
  9515. * @param {number} fromIndex The index to search from.
  9516. * @returns {number} Returns the index of the matched value, else `-1`.
  9517. */
  9518. function baseIndexOf(array, value, fromIndex) {
  9519. return value === value
  9520. ? strictIndexOf(array, value, fromIndex)
  9521. : baseFindIndex(array, baseIsNaN, fromIndex);
  9522. }
  9523. /**
  9524. * This function is like `baseIndexOf` except that it accepts a comparator.
  9525. *
  9526. * @private
  9527. * @param {Array} array The array to inspect.
  9528. * @param {*} value The value to search for.
  9529. * @param {number} fromIndex The index to search from.
  9530. * @param {Function} comparator The comparator invoked per element.
  9531. * @returns {number} Returns the index of the matched value, else `-1`.
  9532. */
  9533. function baseIndexOfWith(array, value, fromIndex, comparator) {
  9534. var index = fromIndex - 1,
  9535. length = array.length;
  9536. while (++index < length) {
  9537. if (comparator(array[index], value)) {
  9538. return index;
  9539. }
  9540. }
  9541. return -1;
  9542. }
  9543. /**
  9544. * The base implementation of `_.isNaN` without support for number objects.
  9545. *
  9546. * @private
  9547. * @param {*} value The value to check.
  9548. * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
  9549. */
  9550. function baseIsNaN(value) {
  9551. return value !== value;
  9552. }
  9553. /**
  9554. * The base implementation of `_.mean` and `_.meanBy` without support for
  9555. * iteratee shorthands.
  9556. *
  9557. * @private
  9558. * @param {Array} array The array to iterate over.
  9559. * @param {Function} iteratee The function invoked per iteration.
  9560. * @returns {number} Returns the mean.
  9561. */
  9562. function baseMean(array, iteratee) {
  9563. var length = array == null ? 0 : array.length;
  9564. return length ? (baseSum(array, iteratee) / length) : NAN;
  9565. }
  9566. /**
  9567. * The base implementation of `_.property` without support for deep paths.
  9568. *
  9569. * @private
  9570. * @param {string} key The key of the property to get.
  9571. * @returns {Function} Returns the new accessor function.
  9572. */
  9573. function baseProperty(key) {
  9574. return function(object) {
  9575. return object == null ? undefined : object[key];
  9576. };
  9577. }
  9578. /**
  9579. * The base implementation of `_.propertyOf` without support for deep paths.
  9580. *
  9581. * @private
  9582. * @param {Object} object The object to query.
  9583. * @returns {Function} Returns the new accessor function.
  9584. */
  9585. function basePropertyOf(object) {
  9586. return function(key) {
  9587. return object == null ? undefined : object[key];
  9588. };
  9589. }
  9590. /**
  9591. * The base implementation of `_.reduce` and `_.reduceRight`, without support
  9592. * for iteratee shorthands, which iterates over `collection` using `eachFunc`.
  9593. *
  9594. * @private
  9595. * @param {Array|Object} collection The collection to iterate over.
  9596. * @param {Function} iteratee The function invoked per iteration.
  9597. * @param {*} accumulator The initial value.
  9598. * @param {boolean} initAccum Specify using the first or last element of
  9599. * `collection` as the initial value.
  9600. * @param {Function} eachFunc The function to iterate over `collection`.
  9601. * @returns {*} Returns the accumulated value.
  9602. */
  9603. function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {
  9604. eachFunc(collection, function(value, index, collection) {
  9605. accumulator = initAccum
  9606. ? (initAccum = false, value)
  9607. : iteratee(accumulator, value, index, collection);
  9608. });
  9609. return accumulator;
  9610. }
  9611. /**
  9612. * The base implementation of `_.sortBy` which uses `comparer` to define the
  9613. * sort order of `array` and replaces criteria objects with their corresponding
  9614. * values.
  9615. *
  9616. * @private
  9617. * @param {Array} array The array to sort.
  9618. * @param {Function} comparer The function to define sort order.
  9619. * @returns {Array} Returns `array`.
  9620. */
  9621. function baseSortBy(array, comparer) {
  9622. var length = array.length;
  9623. array.sort(comparer);
  9624. while (length--) {
  9625. array[length] = array[length].value;
  9626. }
  9627. return array;
  9628. }
  9629. /**
  9630. * The base implementation of `_.sum` and `_.sumBy` without support for
  9631. * iteratee shorthands.
  9632. *
  9633. * @private
  9634. * @param {Array} array The array to iterate over.
  9635. * @param {Function} iteratee The function invoked per iteration.
  9636. * @returns {number} Returns the sum.
  9637. */
  9638. function baseSum(array, iteratee) {
  9639. var result,
  9640. index = -1,
  9641. length = array.length;
  9642. while (++index < length) {
  9643. var current = iteratee(array[index]);
  9644. if (current !== undefined) {
  9645. result = result === undefined ? current : (result + current);
  9646. }
  9647. }
  9648. return result;
  9649. }
  9650. /**
  9651. * The base implementation of `_.times` without support for iteratee shorthands
  9652. * or max array length checks.
  9653. *
  9654. * @private
  9655. * @param {number} n The number of times to invoke `iteratee`.
  9656. * @param {Function} iteratee The function invoked per iteration.
  9657. * @returns {Array} Returns the array of results.
  9658. */
  9659. function baseTimes(n, iteratee) {
  9660. var index = -1,
  9661. result = Array(n);
  9662. while (++index < n) {
  9663. result[index] = iteratee(index);
  9664. }
  9665. return result;
  9666. }
  9667. /**
  9668. * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array
  9669. * of key-value pairs for `object` corresponding to the property names of `props`.
  9670. *
  9671. * @private
  9672. * @param {Object} object The object to query.
  9673. * @param {Array} props The property names to get values for.
  9674. * @returns {Object} Returns the key-value pairs.
  9675. */
  9676. function baseToPairs(object, props) {
  9677. return arrayMap(props, function(key) {
  9678. return [key, object[key]];
  9679. });
  9680. }
  9681. /**
  9682. * The base implementation of `_.unary` without support for storing metadata.
  9683. *
  9684. * @private
  9685. * @param {Function} func The function to cap arguments for.
  9686. * @returns {Function} Returns the new capped function.
  9687. */
  9688. function baseUnary(func) {
  9689. return function(value) {
  9690. return func(value);
  9691. };
  9692. }
  9693. /**
  9694. * The base implementation of `_.values` and `_.valuesIn` which creates an
  9695. * array of `object` property values corresponding to the property names
  9696. * of `props`.
  9697. *
  9698. * @private
  9699. * @param {Object} object The object to query.
  9700. * @param {Array} props The property names to get values for.
  9701. * @returns {Object} Returns the array of property values.
  9702. */
  9703. function baseValues(object, props) {
  9704. return arrayMap(props, function(key) {
  9705. return object[key];
  9706. });
  9707. }
  9708. /**
  9709. * Checks if a `cache` value for `key` exists.
  9710. *
  9711. * @private
  9712. * @param {Object} cache The cache to query.
  9713. * @param {string} key The key of the entry to check.
  9714. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
  9715. */
  9716. function cacheHas(cache, key) {
  9717. return cache.has(key);
  9718. }
  9719. /**
  9720. * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol
  9721. * that is not found in the character symbols.
  9722. *
  9723. * @private
  9724. * @param {Array} strSymbols The string symbols to inspect.
  9725. * @param {Array} chrSymbols The character symbols to find.
  9726. * @returns {number} Returns the index of the first unmatched string symbol.
  9727. */
  9728. function charsStartIndex(strSymbols, chrSymbols) {
  9729. var index = -1,
  9730. length = strSymbols.length;
  9731. while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
  9732. return index;
  9733. }
  9734. /**
  9735. * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol
  9736. * that is not found in the character symbols.
  9737. *
  9738. * @private
  9739. * @param {Array} strSymbols The string symbols to inspect.
  9740. * @param {Array} chrSymbols The character symbols to find.
  9741. * @returns {number} Returns the index of the last unmatched string symbol.
  9742. */
  9743. function charsEndIndex(strSymbols, chrSymbols) {
  9744. var index = strSymbols.length;
  9745. while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
  9746. return index;
  9747. }
  9748. /**
  9749. * Gets the number of `placeholder` occurrences in `array`.
  9750. *
  9751. * @private
  9752. * @param {Array} array The array to inspect.
  9753. * @param {*} placeholder The placeholder to search for.
  9754. * @returns {number} Returns the placeholder count.
  9755. */
  9756. function countHolders(array, placeholder) {
  9757. var length = array.length,
  9758. result = 0;
  9759. while (length--) {
  9760. if (array[length] === placeholder) {
  9761. ++result;
  9762. }
  9763. }
  9764. return result;
  9765. }
  9766. /**
  9767. * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A
  9768. * letters to basic Latin letters.
  9769. *
  9770. * @private
  9771. * @param {string} letter The matched letter to deburr.
  9772. * @returns {string} Returns the deburred letter.
  9773. */
  9774. var deburrLetter = basePropertyOf(deburredLetters);
  9775. /**
  9776. * Used by `_.escape` to convert characters to HTML entities.
  9777. *
  9778. * @private
  9779. * @param {string} chr The matched character to escape.
  9780. * @returns {string} Returns the escaped character.
  9781. */
  9782. var escapeHtmlChar = basePropertyOf(htmlEscapes);
  9783. /**
  9784. * Used by `_.template` to escape characters for inclusion in compiled string literals.
  9785. *
  9786. * @private
  9787. * @param {string} chr The matched character to escape.
  9788. * @returns {string} Returns the escaped character.
  9789. */
  9790. function escapeStringChar(chr) {
  9791. return '\\' + stringEscapes[chr];
  9792. }
  9793. /**
  9794. * Gets the value at `key` of `object`.
  9795. *
  9796. * @private
  9797. * @param {Object} [object] The object to query.
  9798. * @param {string} key The key of the property to get.
  9799. * @returns {*} Returns the property value.
  9800. */
  9801. function getValue(object, key) {
  9802. return object == null ? undefined : object[key];
  9803. }
  9804. /**
  9805. * Checks if `string` contains Unicode symbols.
  9806. *
  9807. * @private
  9808. * @param {string} string The string to inspect.
  9809. * @returns {boolean} Returns `true` if a symbol is found, else `false`.
  9810. */
  9811. function hasUnicode(string) {
  9812. return reHasUnicode.test(string);
  9813. }
  9814. /**
  9815. * Checks if `string` contains a word composed of Unicode symbols.
  9816. *
  9817. * @private
  9818. * @param {string} string The string to inspect.
  9819. * @returns {boolean} Returns `true` if a word is found, else `false`.
  9820. */
  9821. function hasUnicodeWord(string) {
  9822. return reHasUnicodeWord.test(string);
  9823. }
  9824. /**
  9825. * Converts `iterator` to an array.
  9826. *
  9827. * @private
  9828. * @param {Object} iterator The iterator to convert.
  9829. * @returns {Array} Returns the converted array.
  9830. */
  9831. function iteratorToArray(iterator) {
  9832. var data,
  9833. result = [];
  9834. while (!(data = iterator.next()).done) {
  9835. result.push(data.value);
  9836. }
  9837. return result;
  9838. }
  9839. /**
  9840. * Converts `map` to its key-value pairs.
  9841. *
  9842. * @private
  9843. * @param {Object} map The map to convert.
  9844. * @returns {Array} Returns the key-value pairs.
  9845. */
  9846. function mapToArray(map) {
  9847. var index = -1,
  9848. result = Array(map.size);
  9849. map.forEach(function(value, key) {
  9850. result[++index] = [key, value];
  9851. });
  9852. return result;
  9853. }
  9854. /**
  9855. * Creates a unary function that invokes `func` with its argument transformed.
  9856. *
  9857. * @private
  9858. * @param {Function} func The function to wrap.
  9859. * @param {Function} transform The argument transform.
  9860. * @returns {Function} Returns the new function.
  9861. */
  9862. function overArg(func, transform) {
  9863. return function(arg) {
  9864. return func(transform(arg));
  9865. };
  9866. }
  9867. /**
  9868. * Replaces all `placeholder` elements in `array` with an internal placeholder
  9869. * and returns an array of their indexes.
  9870. *
  9871. * @private
  9872. * @param {Array} array The array to modify.
  9873. * @param {*} placeholder The placeholder to replace.
  9874. * @returns {Array} Returns the new array of placeholder indexes.
  9875. */
  9876. function replaceHolders(array, placeholder) {
  9877. var index = -1,
  9878. length = array.length,
  9879. resIndex = 0,
  9880. result = [];
  9881. while (++index < length) {
  9882. var value = array[index];
  9883. if (value === placeholder || value === PLACEHOLDER) {
  9884. array[index] = PLACEHOLDER;
  9885. result[resIndex++] = index;
  9886. }
  9887. }
  9888. return result;
  9889. }
  9890. /**
  9891. * Converts `set` to an array of its values.
  9892. *
  9893. * @private
  9894. * @param {Object} set The set to convert.
  9895. * @returns {Array} Returns the values.
  9896. */
  9897. function setToArray(set) {
  9898. var index = -1,
  9899. result = Array(set.size);
  9900. set.forEach(function(value) {
  9901. result[++index] = value;
  9902. });
  9903. return result;
  9904. }
  9905. /**
  9906. * Converts `set` to its value-value pairs.
  9907. *
  9908. * @private
  9909. * @param {Object} set The set to convert.
  9910. * @returns {Array} Returns the value-value pairs.
  9911. */
  9912. function setToPairs(set) {
  9913. var index = -1,
  9914. result = Array(set.size);
  9915. set.forEach(function(value) {
  9916. result[++index] = [value, value];
  9917. });
  9918. return result;
  9919. }
  9920. /**
  9921. * A specialized version of `_.indexOf` which performs strict equality
  9922. * comparisons of values, i.e. `===`.
  9923. *
  9924. * @private
  9925. * @param {Array} array The array to inspect.
  9926. * @param {*} value The value to search for.
  9927. * @param {number} fromIndex The index to search from.
  9928. * @returns {number} Returns the index of the matched value, else `-1`.
  9929. */
  9930. function strictIndexOf(array, value, fromIndex) {
  9931. var index = fromIndex - 1,
  9932. length = array.length;
  9933. while (++index < length) {
  9934. if (array[index] === value) {
  9935. return index;
  9936. }
  9937. }
  9938. return -1;
  9939. }
  9940. /**
  9941. * A specialized version of `_.lastIndexOf` which performs strict equality
  9942. * comparisons of values, i.e. `===`.
  9943. *
  9944. * @private
  9945. * @param {Array} array The array to inspect.
  9946. * @param {*} value The value to search for.
  9947. * @param {number} fromIndex The index to search from.
  9948. * @returns {number} Returns the index of the matched value, else `-1`.
  9949. */
  9950. function strictLastIndexOf(array, value, fromIndex) {
  9951. var index = fromIndex + 1;
  9952. while (index--) {
  9953. if (array[index] === value) {
  9954. return index;
  9955. }
  9956. }
  9957. return index;
  9958. }
  9959. /**
  9960. * Gets the number of symbols in `string`.
  9961. *
  9962. * @private
  9963. * @param {string} string The string to inspect.
  9964. * @returns {number} Returns the string size.
  9965. */
  9966. function stringSize(string) {
  9967. return hasUnicode(string)
  9968. ? unicodeSize(string)
  9969. : asciiSize(string);
  9970. }
  9971. /**
  9972. * Converts `string` to an array.
  9973. *
  9974. * @private
  9975. * @param {string} string The string to convert.
  9976. * @returns {Array} Returns the converted array.
  9977. */
  9978. function stringToArray(string) {
  9979. return hasUnicode(string)
  9980. ? unicodeToArray(string)
  9981. : asciiToArray(string);
  9982. }
  9983. /**
  9984. * Used by `_.unescape` to convert HTML entities to characters.
  9985. *
  9986. * @private
  9987. * @param {string} chr The matched character to unescape.
  9988. * @returns {string} Returns the unescaped character.
  9989. */
  9990. var unescapeHtmlChar = basePropertyOf(htmlUnescapes);
  9991. /**
  9992. * Gets the size of a Unicode `string`.
  9993. *
  9994. * @private
  9995. * @param {string} string The string inspect.
  9996. * @returns {number} Returns the string size.
  9997. */
  9998. function unicodeSize(string) {
  9999. var result = reUnicode.lastIndex = 0;
  10000. while (reUnicode.test(string)) {
  10001. ++result;
  10002. }
  10003. return result;
  10004. }
  10005. /**
  10006. * Converts a Unicode `string` to an array.
  10007. *
  10008. * @private
  10009. * @param {string} string The string to convert.
  10010. * @returns {Array} Returns the converted array.
  10011. */
  10012. function unicodeToArray(string) {
  10013. return string.match(reUnicode) || [];
  10014. }
  10015. /**
  10016. * Splits a Unicode `string` into an array of its words.
  10017. *
  10018. * @private
  10019. * @param {string} The string to inspect.
  10020. * @returns {Array} Returns the words of `string`.
  10021. */
  10022. function unicodeWords(string) {
  10023. return string.match(reUnicodeWord) || [];
  10024. }
  10025. /*--------------------------------------------------------------------------*/
  10026. /**
  10027. * Create a new pristine `lodash` function using the `context` object.
  10028. *
  10029. * @static
  10030. * @memberOf _
  10031. * @since 1.1.0
  10032. * @category Util
  10033. * @param {Object} [context=root] The context object.
  10034. * @returns {Function} Returns a new `lodash` function.
  10035. * @example
  10036. *
  10037. * _.mixin({ 'foo': _.constant('foo') });
  10038. *
  10039. * var lodash = _.runInContext();
  10040. * lodash.mixin({ 'bar': lodash.constant('bar') });
  10041. *
  10042. * _.isFunction(_.foo);
  10043. * // => true
  10044. * _.isFunction(_.bar);
  10045. * // => false
  10046. *
  10047. * lodash.isFunction(lodash.foo);
  10048. * // => false
  10049. * lodash.isFunction(lodash.bar);
  10050. * // => true
  10051. *
  10052. * // Create a suped-up `defer` in Node.js.
  10053. * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;
  10054. */
  10055. var runInContext = (function runInContext(context) {
  10056. context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));
  10057. /** Built-in constructor references. */
  10058. var Array = context.Array,
  10059. Date = context.Date,
  10060. Error = context.Error,
  10061. Function = context.Function,
  10062. Math = context.Math,
  10063. Object = context.Object,
  10064. RegExp = context.RegExp,
  10065. String = context.String,
  10066. TypeError = context.TypeError;
  10067. /** Used for built-in method references. */
  10068. var arrayProto = Array.prototype,
  10069. funcProto = Function.prototype,
  10070. objectProto = Object.prototype;
  10071. /** Used to detect overreaching core-js shims. */
  10072. var coreJsData = context['__core-js_shared__'];
  10073. /** Used to resolve the decompiled source of functions. */
  10074. var funcToString = funcProto.toString;
  10075. /** Used to check objects for own properties. */
  10076. var hasOwnProperty = objectProto.hasOwnProperty;
  10077. /** Used to generate unique IDs. */
  10078. var idCounter = 0;
  10079. /** Used to detect methods masquerading as native. */
  10080. var maskSrcKey = (function() {
  10081. var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
  10082. return uid ? ('Symbol(src)_1.' + uid) : '';
  10083. }());
  10084. /**
  10085. * Used to resolve the
  10086. * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
  10087. * of values.
  10088. */
  10089. var nativeObjectToString = objectProto.toString;
  10090. /** Used to infer the `Object` constructor. */
  10091. var objectCtorString = funcToString.call(Object);
  10092. /** Used to restore the original `_` reference in `_.noConflict`. */
  10093. var oldDash = root._;
  10094. /** Used to detect if a method is native. */
  10095. var reIsNative = RegExp('^' +
  10096. funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
  10097. .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
  10098. );
  10099. /** Built-in value references. */
  10100. var Buffer = moduleExports ? context.Buffer : undefined,
  10101. Symbol = context.Symbol,
  10102. Uint8Array = context.Uint8Array,
  10103. allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,
  10104. getPrototype = overArg(Object.getPrototypeOf, Object),
  10105. objectCreate = Object.create,
  10106. propertyIsEnumerable = objectProto.propertyIsEnumerable,
  10107. splice = arrayProto.splice,
  10108. spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,
  10109. symIterator = Symbol ? Symbol.iterator : undefined,
  10110. symToStringTag = Symbol ? Symbol.toStringTag : undefined;
  10111. var defineProperty = (function() {
  10112. try {
  10113. var func = getNative(Object, 'defineProperty');
  10114. func({}, '', {});
  10115. return func;
  10116. } catch (e) {}
  10117. }());
  10118. /** Mocked built-ins. */
  10119. var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,
  10120. ctxNow = Date && Date.now !== root.Date.now && Date.now,
  10121. ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;
  10122. /* Built-in method references for those with the same name as other `lodash` methods. */
  10123. var nativeCeil = Math.ceil,
  10124. nativeFloor = Math.floor,
  10125. nativeGetSymbols = Object.getOwnPropertySymbols,
  10126. nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,
  10127. nativeIsFinite = context.isFinite,
  10128. nativeJoin = arrayProto.join,
  10129. nativeKeys = overArg(Object.keys, Object),
  10130. nativeMax = Math.max,
  10131. nativeMin = Math.min,
  10132. nativeNow = Date.now,
  10133. nativeParseInt = context.parseInt,
  10134. nativeRandom = Math.random,
  10135. nativeReverse = arrayProto.reverse;
  10136. /* Built-in method references that are verified to be native. */
  10137. var DataView = getNative(context, 'DataView'),
  10138. Map = getNative(context, 'Map'),
  10139. Promise = getNative(context, 'Promise'),
  10140. Set = getNative(context, 'Set'),
  10141. WeakMap = getNative(context, 'WeakMap'),
  10142. nativeCreate = getNative(Object, 'create');
  10143. /** Used to store function metadata. */
  10144. var metaMap = WeakMap && new WeakMap;
  10145. /** Used to lookup unminified function names. */
  10146. var realNames = {};
  10147. /** Used to detect maps, sets, and weakmaps. */
  10148. var dataViewCtorString = toSource(DataView),
  10149. mapCtorString = toSource(Map),
  10150. promiseCtorString = toSource(Promise),
  10151. setCtorString = toSource(Set),
  10152. weakMapCtorString = toSource(WeakMap);
  10153. /** Used to convert symbols to primitives and strings. */
  10154. var symbolProto = Symbol ? Symbol.prototype : undefined,
  10155. symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,
  10156. symbolToString = symbolProto ? symbolProto.toString : undefined;
  10157. /*------------------------------------------------------------------------*/
  10158. /**
  10159. * Creates a `lodash` object which wraps `value` to enable implicit method
  10160. * chain sequences. Methods that operate on and return arrays, collections,
  10161. * and functions can be chained together. Methods that retrieve a single value
  10162. * or may return a primitive value will automatically end the chain sequence
  10163. * and return the unwrapped value. Otherwise, the value must be unwrapped
  10164. * with `_#value`.
  10165. *
  10166. * Explicit chain sequences, which must be unwrapped with `_#value`, may be
  10167. * enabled using `_.chain`.
  10168. *
  10169. * The execution of chained methods is lazy, that is, it's deferred until
  10170. * `_#value` is implicitly or explicitly called.
  10171. *
  10172. * Lazy evaluation allows several methods to support shortcut fusion.
  10173. * Shortcut fusion is an optimization to merge iteratee calls; this avoids
  10174. * the creation of intermediate arrays and can greatly reduce the number of
  10175. * iteratee executions. Sections of a chain sequence qualify for shortcut
  10176. * fusion if the section is applied to an array and iteratees accept only
  10177. * one argument. The heuristic for whether a section qualifies for shortcut
  10178. * fusion is subject to change.
  10179. *
  10180. * Chaining is supported in custom builds as long as the `_#value` method is
  10181. * directly or indirectly included in the build.
  10182. *
  10183. * In addition to lodash methods, wrappers have `Array` and `String` methods.
  10184. *
  10185. * The wrapper `Array` methods are:
  10186. * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`
  10187. *
  10188. * The wrapper `String` methods are:
  10189. * `replace` and `split`
  10190. *
  10191. * The wrapper methods that support shortcut fusion are:
  10192. * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,
  10193. * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,
  10194. * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`
  10195. *
  10196. * The chainable wrapper methods are:
  10197. * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,
  10198. * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,
  10199. * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,
  10200. * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,
  10201. * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,
  10202. * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,
  10203. * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,
  10204. * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,
  10205. * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,
  10206. * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,
  10207. * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,
  10208. * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,
  10209. * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,
  10210. * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,
  10211. * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,
  10212. * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,
  10213. * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,
  10214. * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,
  10215. * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,
  10216. * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,
  10217. * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,
  10218. * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,
  10219. * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,
  10220. * `zipObject`, `zipObjectDeep`, and `zipWith`
  10221. *
  10222. * The wrapper methods that are **not** chainable by default are:
  10223. * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,
  10224. * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,
  10225. * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,
  10226. * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,
  10227. * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,
  10228. * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,
  10229. * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,
  10230. * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,
  10231. * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,
  10232. * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,
  10233. * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,
  10234. * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,
  10235. * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,
  10236. * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,
  10237. * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,
  10238. * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,
  10239. * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,
  10240. * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,
  10241. * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,
  10242. * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,
  10243. * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,
  10244. * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,
  10245. * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,
  10246. * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,
  10247. * `upperFirst`, `value`, and `words`
  10248. *
  10249. * @name _
  10250. * @constructor
  10251. * @category Seq
  10252. * @param {*} value The value to wrap in a `lodash` instance.
  10253. * @returns {Object} Returns the new `lodash` wrapper instance.
  10254. * @example
  10255. *
  10256. * function square(n) {
  10257. * return n * n;
  10258. * }
  10259. *
  10260. * var wrapped = _([1, 2, 3]);
  10261. *
  10262. * // Returns an unwrapped value.
  10263. * wrapped.reduce(_.add);
  10264. * // => 6
  10265. *
  10266. * // Returns a wrapped value.
  10267. * var squares = wrapped.map(square);
  10268. *
  10269. * _.isArray(squares);
  10270. * // => false
  10271. *
  10272. * _.isArray(squares.value());
  10273. * // => true
  10274. */
  10275. function lodash(value) {
  10276. if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {
  10277. if (value instanceof LodashWrapper) {
  10278. return value;
  10279. }
  10280. if (hasOwnProperty.call(value, '__wrapped__')) {
  10281. return wrapperClone(value);
  10282. }
  10283. }
  10284. return new LodashWrapper(value);
  10285. }
  10286. /**
  10287. * The base implementation of `_.create` without support for assigning
  10288. * properties to the created object.
  10289. *
  10290. * @private
  10291. * @param {Object} proto The object to inherit from.
  10292. * @returns {Object} Returns the new object.
  10293. */
  10294. var baseCreate = (function() {
  10295. function object() {}
  10296. return function(proto) {
  10297. if (!isObject(proto)) {
  10298. return {};
  10299. }
  10300. if (objectCreate) {
  10301. return objectCreate(proto);
  10302. }
  10303. object.prototype = proto;
  10304. var result = new object;
  10305. object.prototype = undefined;
  10306. return result;
  10307. };
  10308. }());
  10309. /**
  10310. * The function whose prototype chain sequence wrappers inherit from.
  10311. *
  10312. * @private
  10313. */
  10314. function baseLodash() {
  10315. // No operation performed.
  10316. }
  10317. /**
  10318. * The base constructor for creating `lodash` wrapper objects.
  10319. *
  10320. * @private
  10321. * @param {*} value The value to wrap.
  10322. * @param {boolean} [chainAll] Enable explicit method chain sequences.
  10323. */
  10324. function LodashWrapper(value, chainAll) {
  10325. this.__wrapped__ = value;
  10326. this.__actions__ = [];
  10327. this.__chain__ = !!chainAll;
  10328. this.__index__ = 0;
  10329. this.__values__ = undefined;
  10330. }
  10331. /**
  10332. * By default, the template delimiters used by lodash are like those in
  10333. * embedded Ruby (ERB) as well as ES2015 template strings. Change the
  10334. * following template settings to use alternative delimiters.
  10335. *
  10336. * @static
  10337. * @memberOf _
  10338. * @type {Object}
  10339. */
  10340. lodash.templateSettings = {
  10341. /**
  10342. * Used to detect `data` property values to be HTML-escaped.
  10343. *
  10344. * @memberOf _.templateSettings
  10345. * @type {RegExp}
  10346. */
  10347. 'escape': reEscape,
  10348. /**
  10349. * Used to detect code to be evaluated.
  10350. *
  10351. * @memberOf _.templateSettings
  10352. * @type {RegExp}
  10353. */
  10354. 'evaluate': reEvaluate,
  10355. /**
  10356. * Used to detect `data` property values to inject.
  10357. *
  10358. * @memberOf _.templateSettings
  10359. * @type {RegExp}
  10360. */
  10361. 'interpolate': reInterpolate,
  10362. /**
  10363. * Used to reference the data object in the template text.
  10364. *
  10365. * @memberOf _.templateSettings
  10366. * @type {string}
  10367. */
  10368. 'variable': '',
  10369. /**
  10370. * Used to import variables into the compiled template.
  10371. *
  10372. * @memberOf _.templateSettings
  10373. * @type {Object}
  10374. */
  10375. 'imports': {
  10376. /**
  10377. * A reference to the `lodash` function.
  10378. *
  10379. * @memberOf _.templateSettings.imports
  10380. * @type {Function}
  10381. */
  10382. '_': lodash
  10383. }
  10384. };
  10385. // Ensure wrappers are instances of `baseLodash`.
  10386. lodash.prototype = baseLodash.prototype;
  10387. lodash.prototype.constructor = lodash;
  10388. LodashWrapper.prototype = baseCreate(baseLodash.prototype);
  10389. LodashWrapper.prototype.constructor = LodashWrapper;
  10390. /*------------------------------------------------------------------------*/
  10391. /**
  10392. * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.
  10393. *
  10394. * @private
  10395. * @constructor
  10396. * @param {*} value The value to wrap.
  10397. */
  10398. function LazyWrapper(value) {
  10399. this.__wrapped__ = value;
  10400. this.__actions__ = [];
  10401. this.__dir__ = 1;
  10402. this.__filtered__ = false;
  10403. this.__iteratees__ = [];
  10404. this.__takeCount__ = MAX_ARRAY_LENGTH;
  10405. this.__views__ = [];
  10406. }
  10407. /**
  10408. * Creates a clone of the lazy wrapper object.
  10409. *
  10410. * @private
  10411. * @name clone
  10412. * @memberOf LazyWrapper
  10413. * @returns {Object} Returns the cloned `LazyWrapper` object.
  10414. */
  10415. function lazyClone() {
  10416. var result = new LazyWrapper(this.__wrapped__);
  10417. result.__actions__ = copyArray(this.__actions__);
  10418. result.__dir__ = this.__dir__;
  10419. result.__filtered__ = this.__filtered__;
  10420. result.__iteratees__ = copyArray(this.__iteratees__);
  10421. result.__takeCount__ = this.__takeCount__;
  10422. result.__views__ = copyArray(this.__views__);
  10423. return result;
  10424. }
  10425. /**
  10426. * Reverses the direction of lazy iteration.
  10427. *
  10428. * @private
  10429. * @name reverse
  10430. * @memberOf LazyWrapper
  10431. * @returns {Object} Returns the new reversed `LazyWrapper` object.
  10432. */
  10433. function lazyReverse() {
  10434. if (this.__filtered__) {
  10435. var result = new LazyWrapper(this);
  10436. result.__dir__ = -1;
  10437. result.__filtered__ = true;
  10438. } else {
  10439. result = this.clone();
  10440. result.__dir__ *= -1;
  10441. }
  10442. return result;
  10443. }
  10444. /**
  10445. * Extracts the unwrapped value from its lazy wrapper.
  10446. *
  10447. * @private
  10448. * @name value
  10449. * @memberOf LazyWrapper
  10450. * @returns {*} Returns the unwrapped value.
  10451. */
  10452. function lazyValue() {
  10453. var array = this.__wrapped__.value(),
  10454. dir = this.__dir__,
  10455. isArr = isArray(array),
  10456. isRight = dir < 0,
  10457. arrLength = isArr ? array.length : 0,
  10458. view = getView(0, arrLength, this.__views__),
  10459. start = view.start,
  10460. end = view.end,
  10461. length = end - start,
  10462. index = isRight ? end : (start - 1),
  10463. iteratees = this.__iteratees__,
  10464. iterLength = iteratees.length,
  10465. resIndex = 0,
  10466. takeCount = nativeMin(length, this.__takeCount__);
  10467. if (!isArr || (!isRight && arrLength == length && takeCount == length)) {
  10468. return baseWrapperValue(array, this.__actions__);
  10469. }
  10470. var result = [];
  10471. outer:
  10472. while (length-- && resIndex < takeCount) {
  10473. index += dir;
  10474. var iterIndex = -1,
  10475. value = array[index];
  10476. while (++iterIndex < iterLength) {
  10477. var data = iteratees[iterIndex],
  10478. iteratee = data.iteratee,
  10479. type = data.type,
  10480. computed = iteratee(value);
  10481. if (type == LAZY_MAP_FLAG) {
  10482. value = computed;
  10483. } else if (!computed) {
  10484. if (type == LAZY_FILTER_FLAG) {
  10485. continue outer;
  10486. } else {
  10487. break outer;
  10488. }
  10489. }
  10490. }
  10491. result[resIndex++] = value;
  10492. }
  10493. return result;
  10494. }
  10495. // Ensure `LazyWrapper` is an instance of `baseLodash`.
  10496. LazyWrapper.prototype = baseCreate(baseLodash.prototype);
  10497. LazyWrapper.prototype.constructor = LazyWrapper;
  10498. /*------------------------------------------------------------------------*/
  10499. /**
  10500. * Creates a hash object.
  10501. *
  10502. * @private
  10503. * @constructor
  10504. * @param {Array} [entries] The key-value pairs to cache.
  10505. */
  10506. function Hash(entries) {
  10507. var index = -1,
  10508. length = entries == null ? 0 : entries.length;
  10509. this.clear();
  10510. while (++index < length) {
  10511. var entry = entries[index];
  10512. this.set(entry[0], entry[1]);
  10513. }
  10514. }
  10515. /**
  10516. * Removes all key-value entries from the hash.
  10517. *
  10518. * @private
  10519. * @name clear
  10520. * @memberOf Hash
  10521. */
  10522. function hashClear() {
  10523. this.__data__ = nativeCreate ? nativeCreate(null) : {};
  10524. this.size = 0;
  10525. }
  10526. /**
  10527. * Removes `key` and its value from the hash.
  10528. *
  10529. * @private
  10530. * @name delete
  10531. * @memberOf Hash
  10532. * @param {Object} hash The hash to modify.
  10533. * @param {string} key The key of the value to remove.
  10534. * @returns {boolean} Returns `true` if the entry was removed, else `false`.
  10535. */
  10536. function hashDelete(key) {
  10537. var result = this.has(key) && delete this.__data__[key];
  10538. this.size -= result ? 1 : 0;
  10539. return result;
  10540. }
  10541. /**
  10542. * Gets the hash value for `key`.
  10543. *
  10544. * @private
  10545. * @name get
  10546. * @memberOf Hash
  10547. * @param {string} key The key of the value to get.
  10548. * @returns {*} Returns the entry value.
  10549. */
  10550. function hashGet(key) {
  10551. var data = this.__data__;
  10552. if (nativeCreate) {
  10553. var result = data[key];
  10554. return result === HASH_UNDEFINED ? undefined : result;
  10555. }
  10556. return hasOwnProperty.call(data, key) ? data[key] : undefined;
  10557. }
  10558. /**
  10559. * Checks if a hash value for `key` exists.
  10560. *
  10561. * @private
  10562. * @name has
  10563. * @memberOf Hash
  10564. * @param {string} key The key of the entry to check.
  10565. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
  10566. */
  10567. function hashHas(key) {
  10568. var data = this.__data__;
  10569. return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);
  10570. }
  10571. /**
  10572. * Sets the hash `key` to `value`.
  10573. *
  10574. * @private
  10575. * @name set
  10576. * @memberOf Hash
  10577. * @param {string} key The key of the value to set.
  10578. * @param {*} value The value to set.
  10579. * @returns {Object} Returns the hash instance.
  10580. */
  10581. function hashSet(key, value) {
  10582. var data = this.__data__;
  10583. this.size += this.has(key) ? 0 : 1;
  10584. data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
  10585. return this;
  10586. }
  10587. // Add methods to `Hash`.
  10588. Hash.prototype.clear = hashClear;
  10589. Hash.prototype['delete'] = hashDelete;
  10590. Hash.prototype.get = hashGet;
  10591. Hash.prototype.has = hashHas;
  10592. Hash.prototype.set = hashSet;
  10593. /*------------------------------------------------------------------------*/
  10594. /**
  10595. * Creates an list cache object.
  10596. *
  10597. * @private
  10598. * @constructor
  10599. * @param {Array} [entries] The key-value pairs to cache.
  10600. */
  10601. function ListCache(entries) {
  10602. var index = -1,
  10603. length = entries == null ? 0 : entries.length;
  10604. this.clear();
  10605. while (++index < length) {
  10606. var entry = entries[index];
  10607. this.set(entry[0], entry[1]);
  10608. }
  10609. }
  10610. /**
  10611. * Removes all key-value entries from the list cache.
  10612. *
  10613. * @private
  10614. * @name clear
  10615. * @memberOf ListCache
  10616. */
  10617. function listCacheClear() {
  10618. this.__data__ = [];
  10619. this.size = 0;
  10620. }
  10621. /**
  10622. * Removes `key` and its value from the list cache.
  10623. *
  10624. * @private
  10625. * @name delete
  10626. * @memberOf ListCache
  10627. * @param {string} key The key of the value to remove.
  10628. * @returns {boolean} Returns `true` if the entry was removed, else `false`.
  10629. */
  10630. function listCacheDelete(key) {
  10631. var data = this.__data__,
  10632. index = assocIndexOf(data, key);
  10633. if (index < 0) {
  10634. return false;
  10635. }
  10636. var lastIndex = data.length - 1;
  10637. if (index == lastIndex) {
  10638. data.pop();
  10639. } else {
  10640. splice.call(data, index, 1);
  10641. }
  10642. --this.size;
  10643. return true;
  10644. }
  10645. /**
  10646. * Gets the list cache value for `key`.
  10647. *
  10648. * @private
  10649. * @name get
  10650. * @memberOf ListCache
  10651. * @param {string} key The key of the value to get.
  10652. * @returns {*} Returns the entry value.
  10653. */
  10654. function listCacheGet(key) {
  10655. var data = this.__data__,
  10656. index = assocIndexOf(data, key);
  10657. return index < 0 ? undefined : data[index][1];
  10658. }
  10659. /**
  10660. * Checks if a list cache value for `key` exists.
  10661. *
  10662. * @private
  10663. * @name has
  10664. * @memberOf ListCache
  10665. * @param {string} key The key of the entry to check.
  10666. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
  10667. */
  10668. function listCacheHas(key) {
  10669. return assocIndexOf(this.__data__, key) > -1;
  10670. }
  10671. /**
  10672. * Sets the list cache `key` to `value`.
  10673. *
  10674. * @private
  10675. * @name set
  10676. * @memberOf ListCache
  10677. * @param {string} key The key of the value to set.
  10678. * @param {*} value The value to set.
  10679. * @returns {Object} Returns the list cache instance.
  10680. */
  10681. function listCacheSet(key, value) {
  10682. var data = this.__data__,
  10683. index = assocIndexOf(data, key);
  10684. if (index < 0) {
  10685. ++this.size;
  10686. data.push([key, value]);
  10687. } else {
  10688. data[index][1] = value;
  10689. }
  10690. return this;
  10691. }
  10692. // Add methods to `ListCache`.
  10693. ListCache.prototype.clear = listCacheClear;
  10694. ListCache.prototype['delete'] = listCacheDelete;
  10695. ListCache.prototype.get = listCacheGet;
  10696. ListCache.prototype.has = listCacheHas;
  10697. ListCache.prototype.set = listCacheSet;
  10698. /*------------------------------------------------------------------------*/
  10699. /**
  10700. * Creates a map cache object to store key-value pairs.
  10701. *
  10702. * @private
  10703. * @constructor
  10704. * @param {Array} [entries] The key-value pairs to cache.
  10705. */
  10706. function MapCache(entries) {
  10707. var index = -1,
  10708. length = entries == null ? 0 : entries.length;
  10709. this.clear();
  10710. while (++index < length) {
  10711. var entry = entries[index];
  10712. this.set(entry[0], entry[1]);
  10713. }
  10714. }
  10715. /**
  10716. * Removes all key-value entries from the map.
  10717. *
  10718. * @private
  10719. * @name clear
  10720. * @memberOf MapCache
  10721. */
  10722. function mapCacheClear() {
  10723. this.size = 0;
  10724. this.__data__ = {
  10725. 'hash': new Hash,
  10726. 'map': new (Map || ListCache),
  10727. 'string': new Hash
  10728. };
  10729. }
  10730. /**
  10731. * Removes `key` and its value from the map.
  10732. *
  10733. * @private
  10734. * @name delete
  10735. * @memberOf MapCache
  10736. * @param {string} key The key of the value to remove.
  10737. * @returns {boolean} Returns `true` if the entry was removed, else `false`.
  10738. */
  10739. function mapCacheDelete(key) {
  10740. var result = getMapData(this, key)['delete'](key);
  10741. this.size -= result ? 1 : 0;
  10742. return result;
  10743. }
  10744. /**
  10745. * Gets the map value for `key`.
  10746. *
  10747. * @private
  10748. * @name get
  10749. * @memberOf MapCache
  10750. * @param {string} key The key of the value to get.
  10751. * @returns {*} Returns the entry value.
  10752. */
  10753. function mapCacheGet(key) {
  10754. return getMapData(this, key).get(key);
  10755. }
  10756. /**
  10757. * Checks if a map value for `key` exists.
  10758. *
  10759. * @private
  10760. * @name has
  10761. * @memberOf MapCache
  10762. * @param {string} key The key of the entry to check.
  10763. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
  10764. */
  10765. function mapCacheHas(key) {
  10766. return getMapData(this, key).has(key);
  10767. }
  10768. /**
  10769. * Sets the map `key` to `value`.
  10770. *
  10771. * @private
  10772. * @name set
  10773. * @memberOf MapCache
  10774. * @param {string} key The key of the value to set.
  10775. * @param {*} value The value to set.
  10776. * @returns {Object} Returns the map cache instance.
  10777. */
  10778. function mapCacheSet(key, value) {
  10779. var data = getMapData(this, key),
  10780. size = data.size;
  10781. data.set(key, value);
  10782. this.size += data.size == size ? 0 : 1;
  10783. return this;
  10784. }
  10785. // Add methods to `MapCache`.
  10786. MapCache.prototype.clear = mapCacheClear;
  10787. MapCache.prototype['delete'] = mapCacheDelete;
  10788. MapCache.prototype.get = mapCacheGet;
  10789. MapCache.prototype.has = mapCacheHas;
  10790. MapCache.prototype.set = mapCacheSet;
  10791. /*------------------------------------------------------------------------*/
  10792. /**
  10793. *
  10794. * Creates an array cache object to store unique values.
  10795. *
  10796. * @private
  10797. * @constructor
  10798. * @param {Array} [values] The values to cache.
  10799. */
  10800. function SetCache(values) {
  10801. var index = -1,
  10802. length = values == null ? 0 : values.length;
  10803. this.__data__ = new MapCache;
  10804. while (++index < length) {
  10805. this.add(values[index]);
  10806. }
  10807. }
  10808. /**
  10809. * Adds `value` to the array cache.
  10810. *
  10811. * @private
  10812. * @name add
  10813. * @memberOf SetCache
  10814. * @alias push
  10815. * @param {*} value The value to cache.
  10816. * @returns {Object} Returns the cache instance.
  10817. */
  10818. function setCacheAdd(value) {
  10819. this.__data__.set(value, HASH_UNDEFINED);
  10820. return this;
  10821. }
  10822. /**
  10823. * Checks if `value` is in the array cache.
  10824. *
  10825. * @private
  10826. * @name has
  10827. * @memberOf SetCache
  10828. * @param {*} value The value to search for.
  10829. * @returns {number} Returns `true` if `value` is found, else `false`.
  10830. */
  10831. function setCacheHas(value) {
  10832. return this.__data__.has(value);
  10833. }
  10834. // Add methods to `SetCache`.
  10835. SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
  10836. SetCache.prototype.has = setCacheHas;
  10837. /*------------------------------------------------------------------------*/
  10838. /**
  10839. * Creates a stack cache object to store key-value pairs.
  10840. *
  10841. * @private
  10842. * @constructor
  10843. * @param {Array} [entries] The key-value pairs to cache.
  10844. */
  10845. function Stack(entries) {
  10846. var data = this.__data__ = new ListCache(entries);
  10847. this.size = data.size;
  10848. }
  10849. /**
  10850. * Removes all key-value entries from the stack.
  10851. *
  10852. * @private
  10853. * @name clear
  10854. * @memberOf Stack
  10855. */
  10856. function stackClear() {
  10857. this.__data__ = new ListCache;
  10858. this.size = 0;
  10859. }
  10860. /**
  10861. * Removes `key` and its value from the stack.
  10862. *
  10863. * @private
  10864. * @name delete
  10865. * @memberOf Stack
  10866. * @param {string} key The key of the value to remove.
  10867. * @returns {boolean} Returns `true` if the entry was removed, else `false`.
  10868. */
  10869. function stackDelete(key) {
  10870. var data = this.__data__,
  10871. result = data['delete'](key);
  10872. this.size = data.size;
  10873. return result;
  10874. }
  10875. /**
  10876. * Gets the stack value for `key`.
  10877. *
  10878. * @private
  10879. * @name get
  10880. * @memberOf Stack
  10881. * @param {string} key The key of the value to get.
  10882. * @returns {*} Returns the entry value.
  10883. */
  10884. function stackGet(key) {
  10885. return this.__data__.get(key);
  10886. }
  10887. /**
  10888. * Checks if a stack value for `key` exists.
  10889. *
  10890. * @private
  10891. * @name has
  10892. * @memberOf Stack
  10893. * @param {string} key The key of the entry to check.
  10894. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
  10895. */
  10896. function stackHas(key) {
  10897. return this.__data__.has(key);
  10898. }
  10899. /**
  10900. * Sets the stack `key` to `value`.
  10901. *
  10902. * @private
  10903. * @name set
  10904. * @memberOf Stack
  10905. * @param {string} key The key of the value to set.
  10906. * @param {*} value The value to set.
  10907. * @returns {Object} Returns the stack cache instance.
  10908. */
  10909. function stackSet(key, value) {
  10910. var data = this.__data__;
  10911. if (data instanceof ListCache) {
  10912. var pairs = data.__data__;
  10913. if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
  10914. pairs.push([key, value]);
  10915. this.size = ++data.size;
  10916. return this;
  10917. }
  10918. data = this.__data__ = new MapCache(pairs);
  10919. }
  10920. data.set(key, value);
  10921. this.size = data.size;
  10922. return this;
  10923. }
  10924. // Add methods to `Stack`.
  10925. Stack.prototype.clear = stackClear;
  10926. Stack.prototype['delete'] = stackDelete;
  10927. Stack.prototype.get = stackGet;
  10928. Stack.prototype.has = stackHas;
  10929. Stack.prototype.set = stackSet;
  10930. /*------------------------------------------------------------------------*/
  10931. /**
  10932. * Creates an array of the enumerable property names of the array-like `value`.
  10933. *
  10934. * @private
  10935. * @param {*} value The value to query.
  10936. * @param {boolean} inherited Specify returning inherited property names.
  10937. * @returns {Array} Returns the array of property names.
  10938. */
  10939. function arrayLikeKeys(value, inherited) {
  10940. var isArr = isArray(value),
  10941. isArg = !isArr && isArguments(value),
  10942. isBuff = !isArr && !isArg && isBuffer(value),
  10943. isType = !isArr && !isArg && !isBuff && isTypedArray(value),
  10944. skipIndexes = isArr || isArg || isBuff || isType,
  10945. result = skipIndexes ? baseTimes(value.length, String) : [],
  10946. length = result.length;
  10947. for (var key in value) {
  10948. if ((inherited || hasOwnProperty.call(value, key)) &&
  10949. !(skipIndexes && (
  10950. // Safari 9 has enumerable `arguments.length` in strict mode.
  10951. key == 'length' ||
  10952. // Node.js 0.10 has enumerable non-index properties on buffers.
  10953. (isBuff && (key == 'offset' || key == 'parent')) ||
  10954. // PhantomJS 2 has enumerable non-index properties on typed arrays.
  10955. (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
  10956. // Skip index properties.
  10957. isIndex(key, length)
  10958. ))) {
  10959. result.push(key);
  10960. }
  10961. }
  10962. return result;
  10963. }
  10964. /**
  10965. * A specialized version of `_.sample` for arrays.
  10966. *
  10967. * @private
  10968. * @param {Array} array The array to sample.
  10969. * @returns {*} Returns the random element.
  10970. */
  10971. function arraySample(array) {
  10972. var length = array.length;
  10973. return length ? array[baseRandom(0, length - 1)] : undefined;
  10974. }
  10975. /**
  10976. * A specialized version of `_.sampleSize` for arrays.
  10977. *
  10978. * @private
  10979. * @param {Array} array The array to sample.
  10980. * @param {number} n The number of elements to sample.
  10981. * @returns {Array} Returns the random elements.
  10982. */
  10983. function arraySampleSize(array, n) {
  10984. return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));
  10985. }
  10986. /**
  10987. * A specialized version of `_.shuffle` for arrays.
  10988. *
  10989. * @private
  10990. * @param {Array} array The array to shuffle.
  10991. * @returns {Array} Returns the new shuffled array.
  10992. */
  10993. function arrayShuffle(array) {
  10994. return shuffleSelf(copyArray(array));
  10995. }
  10996. /**
  10997. * This function is like `assignValue` except that it doesn't assign
  10998. * `undefined` values.
  10999. *
  11000. * @private
  11001. * @param {Object} object The object to modify.
  11002. * @param {string} key The key of the property to assign.
  11003. * @param {*} value The value to assign.
  11004. */
  11005. function assignMergeValue(object, key, value) {
  11006. if ((value !== undefined && !eq(object[key], value)) ||
  11007. (value === undefined && !(key in object))) {
  11008. baseAssignValue(object, key, value);
  11009. }
  11010. }
  11011. /**
  11012. * Assigns `value` to `key` of `object` if the existing value is not equivalent
  11013. * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
  11014. * for equality comparisons.
  11015. *
  11016. * @private
  11017. * @param {Object} object The object to modify.
  11018. * @param {string} key The key of the property to assign.
  11019. * @param {*} value The value to assign.
  11020. */
  11021. function assignValue(object, key, value) {
  11022. var objValue = object[key];
  11023. if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
  11024. (value === undefined && !(key in object))) {
  11025. baseAssignValue(object, key, value);
  11026. }
  11027. }
  11028. /**
  11029. * Gets the index at which the `key` is found in `array` of key-value pairs.
  11030. *
  11031. * @private
  11032. * @param {Array} array The array to inspect.
  11033. * @param {*} key The key to search for.
  11034. * @returns {number} Returns the index of the matched value, else `-1`.
  11035. */
  11036. function assocIndexOf(array, key) {
  11037. var length = array.length;
  11038. while (length--) {
  11039. if (eq(array[length][0], key)) {
  11040. return length;
  11041. }
  11042. }
  11043. return -1;
  11044. }
  11045. /**
  11046. * Aggregates elements of `collection` on `accumulator` with keys transformed
  11047. * by `iteratee` and values set by `setter`.
  11048. *
  11049. * @private
  11050. * @param {Array|Object} collection The collection to iterate over.
  11051. * @param {Function} setter The function to set `accumulator` values.
  11052. * @param {Function} iteratee The iteratee to transform keys.
  11053. * @param {Object} accumulator The initial aggregated object.
  11054. * @returns {Function} Returns `accumulator`.
  11055. */
  11056. function baseAggregator(collection, setter, iteratee, accumulator) {
  11057. baseEach(collection, function(value, key, collection) {
  11058. setter(accumulator, value, iteratee(value), collection);
  11059. });
  11060. return accumulator;
  11061. }
  11062. /**
  11063. * The base implementation of `_.assign` without support for multiple sources
  11064. * or `customizer` functions.
  11065. *
  11066. * @private
  11067. * @param {Object} object The destination object.
  11068. * @param {Object} source The source object.
  11069. * @returns {Object} Returns `object`.
  11070. */
  11071. function baseAssign(object, source) {
  11072. return object && copyObject(source, keys(source), object);
  11073. }
  11074. /**
  11075. * The base implementation of `_.assignIn` without support for multiple sources
  11076. * or `customizer` functions.
  11077. *
  11078. * @private
  11079. * @param {Object} object The destination object.
  11080. * @param {Object} source The source object.
  11081. * @returns {Object} Returns `object`.
  11082. */
  11083. function baseAssignIn(object, source) {
  11084. return object && copyObject(source, keysIn(source), object);
  11085. }
  11086. /**
  11087. * The base implementation of `assignValue` and `assignMergeValue` without
  11088. * value checks.
  11089. *
  11090. * @private
  11091. * @param {Object} object The object to modify.
  11092. * @param {string} key The key of the property to assign.
  11093. * @param {*} value The value to assign.
  11094. */
  11095. function baseAssignValue(object, key, value) {
  11096. if (key == '__proto__' && defineProperty) {
  11097. defineProperty(object, key, {
  11098. 'configurable': true,
  11099. 'enumerable': true,
  11100. 'value': value,
  11101. 'writable': true
  11102. });
  11103. } else {
  11104. object[key] = value;
  11105. }
  11106. }
  11107. /**
  11108. * The base implementation of `_.at` without support for individual paths.
  11109. *
  11110. * @private
  11111. * @param {Object} object The object to iterate over.
  11112. * @param {string[]} paths The property paths to pick.
  11113. * @returns {Array} Returns the picked elements.
  11114. */
  11115. function baseAt(object, paths) {
  11116. var index = -1,
  11117. length = paths.length,
  11118. result = Array(length),
  11119. skip = object == null;
  11120. while (++index < length) {
  11121. result[index] = skip ? undefined : get(object, paths[index]);
  11122. }
  11123. return result;
  11124. }
  11125. /**
  11126. * The base implementation of `_.clamp` which doesn't coerce arguments.
  11127. *
  11128. * @private
  11129. * @param {number} number The number to clamp.
  11130. * @param {number} [lower] The lower bound.
  11131. * @param {number} upper The upper bound.
  11132. * @returns {number} Returns the clamped number.
  11133. */
  11134. function baseClamp(number, lower, upper) {
  11135. if (number === number) {
  11136. if (upper !== undefined) {
  11137. number = number <= upper ? number : upper;
  11138. }
  11139. if (lower !== undefined) {
  11140. number = number >= lower ? number : lower;
  11141. }
  11142. }
  11143. return number;
  11144. }
  11145. /**
  11146. * The base implementation of `_.clone` and `_.cloneDeep` which tracks
  11147. * traversed objects.
  11148. *
  11149. * @private
  11150. * @param {*} value The value to clone.
  11151. * @param {boolean} bitmask The bitmask flags.
  11152. * 1 - Deep clone
  11153. * 2 - Flatten inherited properties
  11154. * 4 - Clone symbols
  11155. * @param {Function} [customizer] The function to customize cloning.
  11156. * @param {string} [key] The key of `value`.
  11157. * @param {Object} [object] The parent object of `value`.
  11158. * @param {Object} [stack] Tracks traversed objects and their clone counterparts.
  11159. * @returns {*} Returns the cloned value.
  11160. */
  11161. function baseClone(value, bitmask, customizer, key, object, stack) {
  11162. var result,
  11163. isDeep = bitmask & CLONE_DEEP_FLAG,
  11164. isFlat = bitmask & CLONE_FLAT_FLAG,
  11165. isFull = bitmask & CLONE_SYMBOLS_FLAG;
  11166. if (customizer) {
  11167. result = object ? customizer(value, key, object, stack) : customizer(value);
  11168. }
  11169. if (result !== undefined) {
  11170. return result;
  11171. }
  11172. if (!isObject(value)) {
  11173. return value;
  11174. }
  11175. var isArr = isArray(value);
  11176. if (isArr) {
  11177. result = initCloneArray(value);
  11178. if (!isDeep) {
  11179. return copyArray(value, result);
  11180. }
  11181. } else {
  11182. var tag = getTag(value),
  11183. isFunc = tag == funcTag || tag == genTag;
  11184. if (isBuffer(value)) {
  11185. return cloneBuffer(value, isDeep);
  11186. }
  11187. if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
  11188. result = (isFlat || isFunc) ? {} : initCloneObject(value);
  11189. if (!isDeep) {
  11190. return isFlat
  11191. ? copySymbolsIn(value, baseAssignIn(result, value))
  11192. : copySymbols(value, baseAssign(result, value));
  11193. }
  11194. } else {
  11195. if (!cloneableTags[tag]) {
  11196. return object ? value : {};
  11197. }
  11198. result = initCloneByTag(value, tag, isDeep);
  11199. }
  11200. }
  11201. // Check for circular references and return its corresponding clone.
  11202. stack || (stack = new Stack);
  11203. var stacked = stack.get(value);
  11204. if (stacked) {
  11205. return stacked;
  11206. }
  11207. stack.set(value, result);
  11208. if (isSet(value)) {
  11209. value.forEach(function(subValue) {
  11210. result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
  11211. });
  11212. return result;
  11213. }
  11214. if (isMap(value)) {
  11215. value.forEach(function(subValue, key) {
  11216. result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));
  11217. });
  11218. return result;
  11219. }
  11220. var keysFunc = isFull
  11221. ? (isFlat ? getAllKeysIn : getAllKeys)
  11222. : (isFlat ? keysIn : keys);
  11223. var props = isArr ? undefined : keysFunc(value);
  11224. arrayEach(props || value, function(subValue, key) {
  11225. if (props) {
  11226. key = subValue;
  11227. subValue = value[key];
  11228. }
  11229. // Recursively populate clone (susceptible to call stack limits).
  11230. assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));
  11231. });
  11232. return result;
  11233. }
  11234. /**
  11235. * The base implementation of `_.conforms` which doesn't clone `source`.
  11236. *
  11237. * @private
  11238. * @param {Object} source The object of property predicates to conform to.
  11239. * @returns {Function} Returns the new spec function.
  11240. */
  11241. function baseConforms(source) {
  11242. var props = keys(source);
  11243. return function(object) {
  11244. return baseConformsTo(object, source, props);
  11245. };
  11246. }
  11247. /**
  11248. * The base implementation of `_.conformsTo` which accepts `props` to check.
  11249. *
  11250. * @private
  11251. * @param {Object} object The object to inspect.
  11252. * @param {Object} source The object of property predicates to conform to.
  11253. * @returns {boolean} Returns `true` if `object` conforms, else `false`.
  11254. */
  11255. function baseConformsTo(object, source, props) {
  11256. var length = props.length;
  11257. if (object == null) {
  11258. return !length;
  11259. }
  11260. object = Object(object);
  11261. while (length--) {
  11262. var key = props[length],
  11263. predicate = source[key],
  11264. value = object[key];
  11265. if ((value === undefined && !(key in object)) || !predicate(value)) {
  11266. return false;
  11267. }
  11268. }
  11269. return true;
  11270. }
  11271. /**
  11272. * The base implementation of `_.delay` and `_.defer` which accepts `args`
  11273. * to provide to `func`.
  11274. *
  11275. * @private
  11276. * @param {Function} func The function to delay.
  11277. * @param {number} wait The number of milliseconds to delay invocation.
  11278. * @param {Array} args The arguments to provide to `func`.
  11279. * @returns {number|Object} Returns the timer id or timeout object.
  11280. */
  11281. function baseDelay(func, wait, args) {
  11282. if (typeof func != 'function') {
  11283. throw new TypeError(FUNC_ERROR_TEXT);
  11284. }
  11285. return setTimeout(function() { func.apply(undefined, args); }, wait);
  11286. }
  11287. /**
  11288. * The base implementation of methods like `_.difference` without support
  11289. * for excluding multiple arrays or iteratee shorthands.
  11290. *
  11291. * @private
  11292. * @param {Array} array The array to inspect.
  11293. * @param {Array} values The values to exclude.
  11294. * @param {Function} [iteratee] The iteratee invoked per element.
  11295. * @param {Function} [comparator] The comparator invoked per element.
  11296. * @returns {Array} Returns the new array of filtered values.
  11297. */
  11298. function baseDifference(array, values, iteratee, comparator) {
  11299. var index = -1,
  11300. includes = arrayIncludes,
  11301. isCommon = true,
  11302. length = array.length,
  11303. result = [],
  11304. valuesLength = values.length;
  11305. if (!length) {
  11306. return result;
  11307. }
  11308. if (iteratee) {
  11309. values = arrayMap(values, baseUnary(iteratee));
  11310. }
  11311. if (comparator) {
  11312. includes = arrayIncludesWith;
  11313. isCommon = false;
  11314. }
  11315. else if (values.length >= LARGE_ARRAY_SIZE) {
  11316. includes = cacheHas;
  11317. isCommon = false;
  11318. values = new SetCache(values);
  11319. }
  11320. outer:
  11321. while (++index < length) {
  11322. var value = array[index],
  11323. computed = iteratee == null ? value : iteratee(value);
  11324. value = (comparator || value !== 0) ? value : 0;
  11325. if (isCommon && computed === computed) {
  11326. var valuesIndex = valuesLength;
  11327. while (valuesIndex--) {
  11328. if (values[valuesIndex] === computed) {
  11329. continue outer;
  11330. }
  11331. }
  11332. result.push(value);
  11333. }
  11334. else if (!includes(values, computed, comparator)) {
  11335. result.push(value);
  11336. }
  11337. }
  11338. return result;
  11339. }
  11340. /**
  11341. * The base implementation of `_.forEach` without support for iteratee shorthands.
  11342. *
  11343. * @private
  11344. * @param {Array|Object} collection The collection to iterate over.
  11345. * @param {Function} iteratee The function invoked per iteration.
  11346. * @returns {Array|Object} Returns `collection`.
  11347. */
  11348. var baseEach = createBaseEach(baseForOwn);
  11349. /**
  11350. * The base implementation of `_.forEachRight` without support for iteratee shorthands.
  11351. *
  11352. * @private
  11353. * @param {Array|Object} collection The collection to iterate over.
  11354. * @param {Function} iteratee The function invoked per iteration.
  11355. * @returns {Array|Object} Returns `collection`.
  11356. */
  11357. var baseEachRight = createBaseEach(baseForOwnRight, true);
  11358. /**
  11359. * The base implementation of `_.every` without support for iteratee shorthands.
  11360. *
  11361. * @private
  11362. * @param {Array|Object} collection The collection to iterate over.
  11363. * @param {Function} predicate The function invoked per iteration.
  11364. * @returns {boolean} Returns `true` if all elements pass the predicate check,
  11365. * else `false`
  11366. */
  11367. function baseEvery(collection, predicate) {
  11368. var result = true;
  11369. baseEach(collection, function(value, index, collection) {
  11370. result = !!predicate(value, index, collection);
  11371. return result;
  11372. });
  11373. return result;
  11374. }
  11375. /**
  11376. * The base implementation of methods like `_.max` and `_.min` which accepts a
  11377. * `comparator` to determine the extremum value.
  11378. *
  11379. * @private
  11380. * @param {Array} array The array to iterate over.
  11381. * @param {Function} iteratee The iteratee invoked per iteration.
  11382. * @param {Function} comparator The comparator used to compare values.
  11383. * @returns {*} Returns the extremum value.
  11384. */
  11385. function baseExtremum(array, iteratee, comparator) {
  11386. var index = -1,
  11387. length = array.length;
  11388. while (++index < length) {
  11389. var value = array[index],
  11390. current = iteratee(value);
  11391. if (current != null && (computed === undefined
  11392. ? (current === current && !isSymbol(current))
  11393. : comparator(current, computed)
  11394. )) {
  11395. var computed = current,
  11396. result = value;
  11397. }
  11398. }
  11399. return result;
  11400. }
  11401. /**
  11402. * The base implementation of `_.fill` without an iteratee call guard.
  11403. *
  11404. * @private
  11405. * @param {Array} array The array to fill.
  11406. * @param {*} value The value to fill `array` with.
  11407. * @param {number} [start=0] The start position.
  11408. * @param {number} [end=array.length] The end position.
  11409. * @returns {Array} Returns `array`.
  11410. */
  11411. function baseFill(array, value, start, end) {
  11412. var length = array.length;
  11413. start = toInteger(start);
  11414. if (start < 0) {
  11415. start = -start > length ? 0 : (length + start);
  11416. }
  11417. end = (end === undefined || end > length) ? length : toInteger(end);
  11418. if (end < 0) {
  11419. end += length;
  11420. }
  11421. end = start > end ? 0 : toLength(end);
  11422. while (start < end) {
  11423. array[start++] = value;
  11424. }
  11425. return array;
  11426. }
  11427. /**
  11428. * The base implementation of `_.filter` without support for iteratee shorthands.
  11429. *
  11430. * @private
  11431. * @param {Array|Object} collection The collection to iterate over.
  11432. * @param {Function} predicate The function invoked per iteration.
  11433. * @returns {Array} Returns the new filtered array.
  11434. */
  11435. function baseFilter(collection, predicate) {
  11436. var result = [];
  11437. baseEach(collection, function(value, index, collection) {
  11438. if (predicate(value, index, collection)) {
  11439. result.push(value);
  11440. }
  11441. });
  11442. return result;
  11443. }
  11444. /**
  11445. * The base implementation of `_.flatten` with support for restricting flattening.
  11446. *
  11447. * @private
  11448. * @param {Array} array The array to flatten.
  11449. * @param {number} depth The maximum recursion depth.
  11450. * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
  11451. * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
  11452. * @param {Array} [result=[]] The initial result value.
  11453. * @returns {Array} Returns the new flattened array.
  11454. */
  11455. function baseFlatten(array, depth, predicate, isStrict, result) {
  11456. var index = -1,
  11457. length = array.length;
  11458. predicate || (predicate = isFlattenable);
  11459. result || (result = []);
  11460. while (++index < length) {
  11461. var value = array[index];
  11462. if (depth > 0 && predicate(value)) {
  11463. if (depth > 1) {
  11464. // Recursively flatten arrays (susceptible to call stack limits).
  11465. baseFlatten(value, depth - 1, predicate, isStrict, result);
  11466. } else {
  11467. arrayPush(result, value);
  11468. }
  11469. } else if (!isStrict) {
  11470. result[result.length] = value;
  11471. }
  11472. }
  11473. return result;
  11474. }
  11475. /**
  11476. * The base implementation of `baseForOwn` which iterates over `object`
  11477. * properties returned by `keysFunc` and invokes `iteratee` for each property.
  11478. * Iteratee functions may exit iteration early by explicitly returning `false`.
  11479. *
  11480. * @private
  11481. * @param {Object} object The object to iterate over.
  11482. * @param {Function} iteratee The function invoked per iteration.
  11483. * @param {Function} keysFunc The function to get the keys of `object`.
  11484. * @returns {Object} Returns `object`.
  11485. */
  11486. var baseFor = createBaseFor();
  11487. /**
  11488. * This function is like `baseFor` except that it iterates over properties
  11489. * in the opposite order.
  11490. *
  11491. * @private
  11492. * @param {Object} object The object to iterate over.
  11493. * @param {Function} iteratee The function invoked per iteration.
  11494. * @param {Function} keysFunc The function to get the keys of `object`.
  11495. * @returns {Object} Returns `object`.
  11496. */
  11497. var baseForRight = createBaseFor(true);
  11498. /**
  11499. * The base implementation of `_.forOwn` without support for iteratee shorthands.
  11500. *
  11501. * @private
  11502. * @param {Object} object The object to iterate over.
  11503. * @param {Function} iteratee The function invoked per iteration.
  11504. * @returns {Object} Returns `object`.
  11505. */
  11506. function baseForOwn(object, iteratee) {
  11507. return object && baseFor(object, iteratee, keys);
  11508. }
  11509. /**
  11510. * The base implementation of `_.forOwnRight` without support for iteratee shorthands.
  11511. *
  11512. * @private
  11513. * @param {Object} object The object to iterate over.
  11514. * @param {Function} iteratee The function invoked per iteration.
  11515. * @returns {Object} Returns `object`.
  11516. */
  11517. function baseForOwnRight(object, iteratee) {
  11518. return object && baseForRight(object, iteratee, keys);
  11519. }
  11520. /**
  11521. * The base implementation of `_.functions` which creates an array of
  11522. * `object` function property names filtered from `props`.
  11523. *
  11524. * @private
  11525. * @param {Object} object The object to inspect.
  11526. * @param {Array} props The property names to filter.
  11527. * @returns {Array} Returns the function names.
  11528. */
  11529. function baseFunctions(object, props) {
  11530. return arrayFilter(props, function(key) {
  11531. return isFunction(object[key]);
  11532. });
  11533. }
  11534. /**
  11535. * The base implementation of `_.get` without support for default values.
  11536. *
  11537. * @private
  11538. * @param {Object} object The object to query.
  11539. * @param {Array|string} path The path of the property to get.
  11540. * @returns {*} Returns the resolved value.
  11541. */
  11542. function baseGet(object, path) {
  11543. path = castPath(path, object);
  11544. var index = 0,
  11545. length = path.length;
  11546. while (object != null && index < length) {
  11547. object = object[toKey(path[index++])];
  11548. }
  11549. return (index && index == length) ? object : undefined;
  11550. }
  11551. /**
  11552. * The base implementation of `getAllKeys` and `getAllKeysIn` which uses
  11553. * `keysFunc` and `symbolsFunc` to get the enumerable property names and
  11554. * symbols of `object`.
  11555. *
  11556. * @private
  11557. * @param {Object} object The object to query.
  11558. * @param {Function} keysFunc The function to get the keys of `object`.
  11559. * @param {Function} symbolsFunc The function to get the symbols of `object`.
  11560. * @returns {Array} Returns the array of property names and symbols.
  11561. */
  11562. function baseGetAllKeys(object, keysFunc, symbolsFunc) {
  11563. var result = keysFunc(object);
  11564. return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
  11565. }
  11566. /**
  11567. * The base implementation of `getTag` without fallbacks for buggy environments.
  11568. *
  11569. * @private
  11570. * @param {*} value The value to query.
  11571. * @returns {string} Returns the `toStringTag`.
  11572. */
  11573. function baseGetTag(value) {
  11574. if (value == null) {
  11575. return value === undefined ? undefinedTag : nullTag;
  11576. }
  11577. return (symToStringTag && symToStringTag in Object(value))
  11578. ? getRawTag(value)
  11579. : objectToString(value);
  11580. }
  11581. /**
  11582. * The base implementation of `_.gt` which doesn't coerce arguments.
  11583. *
  11584. * @private
  11585. * @param {*} value The value to compare.
  11586. * @param {*} other The other value to compare.
  11587. * @returns {boolean} Returns `true` if `value` is greater than `other`,
  11588. * else `false`.
  11589. */
  11590. function baseGt(value, other) {
  11591. return value > other;
  11592. }
  11593. /**
  11594. * The base implementation of `_.has` without support for deep paths.
  11595. *
  11596. * @private
  11597. * @param {Object} [object] The object to query.
  11598. * @param {Array|string} key The key to check.
  11599. * @returns {boolean} Returns `true` if `key` exists, else `false`.
  11600. */
  11601. function baseHas(object, key) {
  11602. return object != null && hasOwnProperty.call(object, key);
  11603. }
  11604. /**
  11605. * The base implementation of `_.hasIn` without support for deep paths.
  11606. *
  11607. * @private
  11608. * @param {Object} [object] The object to query.
  11609. * @param {Array|string} key The key to check.
  11610. * @returns {boolean} Returns `true` if `key` exists, else `false`.
  11611. */
  11612. function baseHasIn(object, key) {
  11613. return object != null && key in Object(object);
  11614. }
  11615. /**
  11616. * The base implementation of `_.inRange` which doesn't coerce arguments.
  11617. *
  11618. * @private
  11619. * @param {number} number The number to check.
  11620. * @param {number} start The start of the range.
  11621. * @param {number} end The end of the range.
  11622. * @returns {boolean} Returns `true` if `number` is in the range, else `false`.
  11623. */
  11624. function baseInRange(number, start, end) {
  11625. return number >= nativeMin(start, end) && number < nativeMax(start, end);
  11626. }
  11627. /**
  11628. * The base implementation of methods like `_.intersection`, without support
  11629. * for iteratee shorthands, that accepts an array of arrays to inspect.
  11630. *
  11631. * @private
  11632. * @param {Array} arrays The arrays to inspect.
  11633. * @param {Function} [iteratee] The iteratee invoked per element.
  11634. * @param {Function} [comparator] The comparator invoked per element.
  11635. * @returns {Array} Returns the new array of shared values.
  11636. */
  11637. function baseIntersection(arrays, iteratee, comparator) {
  11638. var includes = comparator ? arrayIncludesWith : arrayIncludes,
  11639. length = arrays[0].length,
  11640. othLength = arrays.length,
  11641. othIndex = othLength,
  11642. caches = Array(othLength),
  11643. maxLength = Infinity,
  11644. result = [];
  11645. while (othIndex--) {
  11646. var array = arrays[othIndex];
  11647. if (othIndex && iteratee) {
  11648. array = arrayMap(array, baseUnary(iteratee));
  11649. }
  11650. maxLength = nativeMin(array.length, maxLength);
  11651. caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))
  11652. ? new SetCache(othIndex && array)
  11653. : undefined;
  11654. }
  11655. array = arrays[0];
  11656. var index = -1,
  11657. seen = caches[0];
  11658. outer:
  11659. while (++index < length && result.length < maxLength) {
  11660. var value = array[index],
  11661. computed = iteratee ? iteratee(value) : value;
  11662. value = (comparator || value !== 0) ? value : 0;
  11663. if (!(seen
  11664. ? cacheHas(seen, computed)
  11665. : includes(result, computed, comparator)
  11666. )) {
  11667. othIndex = othLength;
  11668. while (--othIndex) {
  11669. var cache = caches[othIndex];
  11670. if (!(cache
  11671. ? cacheHas(cache, computed)
  11672. : includes(arrays[othIndex], computed, comparator))
  11673. ) {
  11674. continue outer;
  11675. }
  11676. }
  11677. if (seen) {
  11678. seen.push(computed);
  11679. }
  11680. result.push(value);
  11681. }
  11682. }
  11683. return result;
  11684. }
  11685. /**
  11686. * The base implementation of `_.invert` and `_.invertBy` which inverts
  11687. * `object` with values transformed by `iteratee` and set by `setter`.
  11688. *
  11689. * @private
  11690. * @param {Object} object The object to iterate over.
  11691. * @param {Function} setter The function to set `accumulator` values.
  11692. * @param {Function} iteratee The iteratee to transform values.
  11693. * @param {Object} accumulator The initial inverted object.
  11694. * @returns {Function} Returns `accumulator`.
  11695. */
  11696. function baseInverter(object, setter, iteratee, accumulator) {
  11697. baseForOwn(object, function(value, key, object) {
  11698. setter(accumulator, iteratee(value), key, object);
  11699. });
  11700. return accumulator;
  11701. }
  11702. /**
  11703. * The base implementation of `_.invoke` without support for individual
  11704. * method arguments.
  11705. *
  11706. * @private
  11707. * @param {Object} object The object to query.
  11708. * @param {Array|string} path The path of the method to invoke.
  11709. * @param {Array} args The arguments to invoke the method with.
  11710. * @returns {*} Returns the result of the invoked method.
  11711. */
  11712. function baseInvoke(object, path, args) {
  11713. path = castPath(path, object);
  11714. object = parent(object, path);
  11715. var func = object == null ? object : object[toKey(last(path))];
  11716. return func == null ? undefined : apply(func, object, args);
  11717. }
  11718. /**
  11719. * The base implementation of `_.isArguments`.
  11720. *
  11721. * @private
  11722. * @param {*} value The value to check.
  11723. * @returns {boolean} Returns `true` if `value` is an `arguments` object,
  11724. */
  11725. function baseIsArguments(value) {
  11726. return isObjectLike(value) && baseGetTag(value) == argsTag;
  11727. }
  11728. /**
  11729. * The base implementation of `_.isArrayBuffer` without Node.js optimizations.
  11730. *
  11731. * @private
  11732. * @param {*} value The value to check.
  11733. * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
  11734. */
  11735. function baseIsArrayBuffer(value) {
  11736. return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;
  11737. }
  11738. /**
  11739. * The base implementation of `_.isDate` without Node.js optimizations.
  11740. *
  11741. * @private
  11742. * @param {*} value The value to check.
  11743. * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
  11744. */
  11745. function baseIsDate(value) {
  11746. return isObjectLike(value) && baseGetTag(value) == dateTag;
  11747. }
  11748. /**
  11749. * The base implementation of `_.isEqual` which supports partial comparisons
  11750. * and tracks traversed objects.
  11751. *
  11752. * @private
  11753. * @param {*} value The value to compare.
  11754. * @param {*} other The other value to compare.
  11755. * @param {boolean} bitmask The bitmask flags.
  11756. * 1 - Unordered comparison
  11757. * 2 - Partial comparison
  11758. * @param {Function} [customizer] The function to customize comparisons.
  11759. * @param {Object} [stack] Tracks traversed `value` and `other` objects.
  11760. * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
  11761. */
  11762. function baseIsEqual(value, other, bitmask, customizer, stack) {
  11763. if (value === other) {
  11764. return true;
  11765. }
  11766. if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {
  11767. return value !== value && other !== other;
  11768. }
  11769. return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
  11770. }
  11771. /**
  11772. * A specialized version of `baseIsEqual` for arrays and objects which performs
  11773. * deep comparisons and tracks traversed objects enabling objects with circular
  11774. * references to be compared.
  11775. *
  11776. * @private
  11777. * @param {Object} object The object to compare.
  11778. * @param {Object} other The other object to compare.
  11779. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
  11780. * @param {Function} customizer The function to customize comparisons.
  11781. * @param {Function} equalFunc The function to determine equivalents of values.
  11782. * @param {Object} [stack] Tracks traversed `object` and `other` objects.
  11783. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
  11784. */
  11785. function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
  11786. var objIsArr = isArray(object),
  11787. othIsArr = isArray(other),
  11788. objTag = objIsArr ? arrayTag : getTag(object),
  11789. othTag = othIsArr ? arrayTag : getTag(other);
  11790. objTag = objTag == argsTag ? objectTag : objTag;
  11791. othTag = othTag == argsTag ? objectTag : othTag;
  11792. var objIsObj = objTag == objectTag,
  11793. othIsObj = othTag == objectTag,
  11794. isSameTag = objTag == othTag;
  11795. if (isSameTag && isBuffer(object)) {
  11796. if (!isBuffer(other)) {
  11797. return false;
  11798. }
  11799. objIsArr = true;
  11800. objIsObj = false;
  11801. }
  11802. if (isSameTag && !objIsObj) {
  11803. stack || (stack = new Stack);
  11804. return (objIsArr || isTypedArray(object))
  11805. ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
  11806. : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
  11807. }
  11808. if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
  11809. var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
  11810. othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
  11811. if (objIsWrapped || othIsWrapped) {
  11812. var objUnwrapped = objIsWrapped ? object.value() : object,
  11813. othUnwrapped = othIsWrapped ? other.value() : other;
  11814. stack || (stack = new Stack);
  11815. return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
  11816. }
  11817. }
  11818. if (!isSameTag) {
  11819. return false;
  11820. }
  11821. stack || (stack = new Stack);
  11822. return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
  11823. }
  11824. /**
  11825. * The base implementation of `_.isMap` without Node.js optimizations.
  11826. *
  11827. * @private
  11828. * @param {*} value The value to check.
  11829. * @returns {boolean} Returns `true` if `value` is a map, else `false`.
  11830. */
  11831. function baseIsMap(value) {
  11832. return isObjectLike(value) && getTag(value) == mapTag;
  11833. }
  11834. /**
  11835. * The base implementation of `_.isMatch` without support for iteratee shorthands.
  11836. *
  11837. * @private
  11838. * @param {Object} object The object to inspect.
  11839. * @param {Object} source The object of property values to match.
  11840. * @param {Array} matchData The property names, values, and compare flags to match.
  11841. * @param {Function} [customizer] The function to customize comparisons.
  11842. * @returns {boolean} Returns `true` if `object` is a match, else `false`.
  11843. */
  11844. function baseIsMatch(object, source, matchData, customizer) {
  11845. var index = matchData.length,
  11846. length = index,
  11847. noCustomizer = !customizer;
  11848. if (object == null) {
  11849. return !length;
  11850. }
  11851. object = Object(object);
  11852. while (index--) {
  11853. var data = matchData[index];
  11854. if ((noCustomizer && data[2])
  11855. ? data[1] !== object[data[0]]
  11856. : !(data[0] in object)
  11857. ) {
  11858. return false;
  11859. }
  11860. }
  11861. while (++index < length) {
  11862. data = matchData[index];
  11863. var key = data[0],
  11864. objValue = object[key],
  11865. srcValue = data[1];
  11866. if (noCustomizer && data[2]) {
  11867. if (objValue === undefined && !(key in object)) {
  11868. return false;
  11869. }
  11870. } else {
  11871. var stack = new Stack;
  11872. if (customizer) {
  11873. var result = customizer(objValue, srcValue, key, object, source, stack);
  11874. }
  11875. if (!(result === undefined
  11876. ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)
  11877. : result
  11878. )) {
  11879. return false;
  11880. }
  11881. }
  11882. }
  11883. return true;
  11884. }
  11885. /**
  11886. * The base implementation of `_.isNative` without bad shim checks.
  11887. *
  11888. * @private
  11889. * @param {*} value The value to check.
  11890. * @returns {boolean} Returns `true` if `value` is a native function,
  11891. * else `false`.
  11892. */
  11893. function baseIsNative(value) {
  11894. if (!isObject(value) || isMasked(value)) {
  11895. return false;
  11896. }
  11897. var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
  11898. return pattern.test(toSource(value));
  11899. }
  11900. /**
  11901. * The base implementation of `_.isRegExp` without Node.js optimizations.
  11902. *
  11903. * @private
  11904. * @param {*} value The value to check.
  11905. * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
  11906. */
  11907. function baseIsRegExp(value) {
  11908. return isObjectLike(value) && baseGetTag(value) == regexpTag;
  11909. }
  11910. /**
  11911. * The base implementation of `_.isSet` without Node.js optimizations.
  11912. *
  11913. * @private
  11914. * @param {*} value The value to check.
  11915. * @returns {boolean} Returns `true` if `value` is a set, else `false`.
  11916. */
  11917. function baseIsSet(value) {
  11918. return isObjectLike(value) && getTag(value) == setTag;
  11919. }
  11920. /**
  11921. * The base implementation of `_.isTypedArray` without Node.js optimizations.
  11922. *
  11923. * @private
  11924. * @param {*} value The value to check.
  11925. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
  11926. */
  11927. function baseIsTypedArray(value) {
  11928. return isObjectLike(value) &&
  11929. isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
  11930. }
  11931. /**
  11932. * The base implementation of `_.iteratee`.
  11933. *
  11934. * @private
  11935. * @param {*} [value=_.identity] The value to convert to an iteratee.
  11936. * @returns {Function} Returns the iteratee.
  11937. */
  11938. function baseIteratee(value) {
  11939. // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
  11940. // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
  11941. if (typeof value == 'function') {
  11942. return value;
  11943. }
  11944. if (value == null) {
  11945. return identity;
  11946. }
  11947. if (typeof value == 'object') {
  11948. return isArray(value)
  11949. ? baseMatchesProperty(value[0], value[1])
  11950. : baseMatches(value);
  11951. }
  11952. return property(value);
  11953. }
  11954. /**
  11955. * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
  11956. *
  11957. * @private
  11958. * @param {Object} object The object to query.
  11959. * @returns {Array} Returns the array of property names.
  11960. */
  11961. function baseKeys(object) {
  11962. if (!isPrototype(object)) {
  11963. return nativeKeys(object);
  11964. }
  11965. var result = [];
  11966. for (var key in Object(object)) {
  11967. if (hasOwnProperty.call(object, key) && key != 'constructor') {
  11968. result.push(key);
  11969. }
  11970. }
  11971. return result;
  11972. }
  11973. /**
  11974. * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.
  11975. *
  11976. * @private
  11977. * @param {Object} object The object to query.
  11978. * @returns {Array} Returns the array of property names.
  11979. */
  11980. function baseKeysIn(object) {
  11981. if (!isObject(object)) {
  11982. return nativeKeysIn(object);
  11983. }
  11984. var isProto = isPrototype(object),
  11985. result = [];
  11986. for (var key in object) {
  11987. if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
  11988. result.push(key);
  11989. }
  11990. }
  11991. return result;
  11992. }
  11993. /**
  11994. * The base implementation of `_.lt` which doesn't coerce arguments.
  11995. *
  11996. * @private
  11997. * @param {*} value The value to compare.
  11998. * @param {*} other The other value to compare.
  11999. * @returns {boolean} Returns `true` if `value` is less than `other`,
  12000. * else `false`.
  12001. */
  12002. function baseLt(value, other) {
  12003. return value < other;
  12004. }
  12005. /**
  12006. * The base implementation of `_.map` without support for iteratee shorthands.
  12007. *
  12008. * @private
  12009. * @param {Array|Object} collection The collection to iterate over.
  12010. * @param {Function} iteratee The function invoked per iteration.
  12011. * @returns {Array} Returns the new mapped array.
  12012. */
  12013. function baseMap(collection, iteratee) {
  12014. var index = -1,
  12015. result = isArrayLike(collection) ? Array(collection.length) : [];
  12016. baseEach(collection, function(value, key, collection) {
  12017. result[++index] = iteratee(value, key, collection);
  12018. });
  12019. return result;
  12020. }
  12021. /**
  12022. * The base implementation of `_.matches` which doesn't clone `source`.
  12023. *
  12024. * @private
  12025. * @param {Object} source The object of property values to match.
  12026. * @returns {Function} Returns the new spec function.
  12027. */
  12028. function baseMatches(source) {
  12029. var matchData = getMatchData(source);
  12030. if (matchData.length == 1 && matchData[0][2]) {
  12031. return matchesStrictComparable(matchData[0][0], matchData[0][1]);
  12032. }
  12033. return function(object) {
  12034. return object === source || baseIsMatch(object, source, matchData);
  12035. };
  12036. }
  12037. /**
  12038. * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
  12039. *
  12040. * @private
  12041. * @param {string} path The path of the property to get.
  12042. * @param {*} srcValue The value to match.
  12043. * @returns {Function} Returns the new spec function.
  12044. */
  12045. function baseMatchesProperty(path, srcValue) {
  12046. if (isKey(path) && isStrictComparable(srcValue)) {
  12047. return matchesStrictComparable(toKey(path), srcValue);
  12048. }
  12049. return function(object) {
  12050. var objValue = get(object, path);
  12051. return (objValue === undefined && objValue === srcValue)
  12052. ? hasIn(object, path)
  12053. : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
  12054. };
  12055. }
  12056. /**
  12057. * The base implementation of `_.merge` without support for multiple sources.
  12058. *
  12059. * @private
  12060. * @param {Object} object The destination object.
  12061. * @param {Object} source The source object.
  12062. * @param {number} srcIndex The index of `source`.
  12063. * @param {Function} [customizer] The function to customize merged values.
  12064. * @param {Object} [stack] Tracks traversed source values and their merged
  12065. * counterparts.
  12066. */
  12067. function baseMerge(object, source, srcIndex, customizer, stack) {
  12068. if (object === source) {
  12069. return;
  12070. }
  12071. baseFor(source, function(srcValue, key) {
  12072. if (isObject(srcValue)) {
  12073. stack || (stack = new Stack);
  12074. baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
  12075. }
  12076. else {
  12077. var newValue = customizer
  12078. ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)
  12079. : undefined;
  12080. if (newValue === undefined) {
  12081. newValue = srcValue;
  12082. }
  12083. assignMergeValue(object, key, newValue);
  12084. }
  12085. }, keysIn);
  12086. }
  12087. /**
  12088. * A specialized version of `baseMerge` for arrays and objects which performs
  12089. * deep merges and tracks traversed objects enabling objects with circular
  12090. * references to be merged.
  12091. *
  12092. * @private
  12093. * @param {Object} object The destination object.
  12094. * @param {Object} source The source object.
  12095. * @param {string} key The key of the value to merge.
  12096. * @param {number} srcIndex The index of `source`.
  12097. * @param {Function} mergeFunc The function to merge values.
  12098. * @param {Function} [customizer] The function to customize assigned values.
  12099. * @param {Object} [stack] Tracks traversed source values and their merged
  12100. * counterparts.
  12101. */
  12102. function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {
  12103. var objValue = safeGet(object, key),
  12104. srcValue = safeGet(source, key),
  12105. stacked = stack.get(srcValue);
  12106. if (stacked) {
  12107. assignMergeValue(object, key, stacked);
  12108. return;
  12109. }
  12110. var newValue = customizer
  12111. ? customizer(objValue, srcValue, (key + ''), object, source, stack)
  12112. : undefined;
  12113. var isCommon = newValue === undefined;
  12114. if (isCommon) {
  12115. var isArr = isArray(srcValue),
  12116. isBuff = !isArr && isBuffer(srcValue),
  12117. isTyped = !isArr && !isBuff && isTypedArray(srcValue);
  12118. newValue = srcValue;
  12119. if (isArr || isBuff || isTyped) {
  12120. if (isArray(objValue)) {
  12121. newValue = objValue;
  12122. }
  12123. else if (isArrayLikeObject(objValue)) {
  12124. newValue = copyArray(objValue);
  12125. }
  12126. else if (isBuff) {
  12127. isCommon = false;
  12128. newValue = cloneBuffer(srcValue, true);
  12129. }
  12130. else if (isTyped) {
  12131. isCommon = false;
  12132. newValue = cloneTypedArray(srcValue, true);
  12133. }
  12134. else {
  12135. newValue = [];
  12136. }
  12137. }
  12138. else if (isPlainObject(srcValue) || isArguments(srcValue)) {
  12139. newValue = objValue;
  12140. if (isArguments(objValue)) {
  12141. newValue = toPlainObject(objValue);
  12142. }
  12143. else if (!isObject(objValue) || isFunction(objValue)) {
  12144. newValue = initCloneObject(srcValue);
  12145. }
  12146. }
  12147. else {
  12148. isCommon = false;
  12149. }
  12150. }
  12151. if (isCommon) {
  12152. // Recursively merge objects and arrays (susceptible to call stack limits).
  12153. stack.set(srcValue, newValue);
  12154. mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
  12155. stack['delete'](srcValue);
  12156. }
  12157. assignMergeValue(object, key, newValue);
  12158. }
  12159. /**
  12160. * The base implementation of `_.nth` which doesn't coerce arguments.
  12161. *
  12162. * @private
  12163. * @param {Array} array The array to query.
  12164. * @param {number} n The index of the element to return.
  12165. * @returns {*} Returns the nth element of `array`.
  12166. */
  12167. function baseNth(array, n) {
  12168. var length = array.length;
  12169. if (!length) {
  12170. return;
  12171. }
  12172. n += n < 0 ? length : 0;
  12173. return isIndex(n, length) ? array[n] : undefined;
  12174. }
  12175. /**
  12176. * The base implementation of `_.orderBy` without param guards.
  12177. *
  12178. * @private
  12179. * @param {Array|Object} collection The collection to iterate over.
  12180. * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
  12181. * @param {string[]} orders The sort orders of `iteratees`.
  12182. * @returns {Array} Returns the new sorted array.
  12183. */
  12184. function baseOrderBy(collection, iteratees, orders) {
  12185. var index = -1;
  12186. iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee()));
  12187. var result = baseMap(collection, function(value, key, collection) {
  12188. var criteria = arrayMap(iteratees, function(iteratee) {
  12189. return iteratee(value);
  12190. });
  12191. return { 'criteria': criteria, 'index': ++index, 'value': value };
  12192. });
  12193. return baseSortBy(result, function(object, other) {
  12194. return compareMultiple(object, other, orders);
  12195. });
  12196. }
  12197. /**
  12198. * The base implementation of `_.pick` without support for individual
  12199. * property identifiers.
  12200. *
  12201. * @private
  12202. * @param {Object} object The source object.
  12203. * @param {string[]} paths The property paths to pick.
  12204. * @returns {Object} Returns the new object.
  12205. */
  12206. function basePick(object, paths) {
  12207. return basePickBy(object, paths, function(value, path) {
  12208. return hasIn(object, path);
  12209. });
  12210. }
  12211. /**
  12212. * The base implementation of `_.pickBy` without support for iteratee shorthands.
  12213. *
  12214. * @private
  12215. * @param {Object} object The source object.
  12216. * @param {string[]} paths The property paths to pick.
  12217. * @param {Function} predicate The function invoked per property.
  12218. * @returns {Object} Returns the new object.
  12219. */
  12220. function basePickBy(object, paths, predicate) {
  12221. var index = -1,
  12222. length = paths.length,
  12223. result = {};
  12224. while (++index < length) {
  12225. var path = paths[index],
  12226. value = baseGet(object, path);
  12227. if (predicate(value, path)) {
  12228. baseSet(result, castPath(path, object), value);
  12229. }
  12230. }
  12231. return result;
  12232. }
  12233. /**
  12234. * A specialized version of `baseProperty` which supports deep paths.
  12235. *
  12236. * @private
  12237. * @param {Array|string} path The path of the property to get.
  12238. * @returns {Function} Returns the new accessor function.
  12239. */
  12240. function basePropertyDeep(path) {
  12241. return function(object) {
  12242. return baseGet(object, path);
  12243. };
  12244. }
  12245. /**
  12246. * The base implementation of `_.pullAllBy` without support for iteratee
  12247. * shorthands.
  12248. *
  12249. * @private
  12250. * @param {Array} array The array to modify.
  12251. * @param {Array} values The values to remove.
  12252. * @param {Function} [iteratee] The iteratee invoked per element.
  12253. * @param {Function} [comparator] The comparator invoked per element.
  12254. * @returns {Array} Returns `array`.
  12255. */
  12256. function basePullAll(array, values, iteratee, comparator) {
  12257. var indexOf = comparator ? baseIndexOfWith : baseIndexOf,
  12258. index = -1,
  12259. length = values.length,
  12260. seen = array;
  12261. if (array === values) {
  12262. values = copyArray(values);
  12263. }
  12264. if (iteratee) {
  12265. seen = arrayMap(array, baseUnary(iteratee));
  12266. }
  12267. while (++index < length) {
  12268. var fromIndex = 0,
  12269. value = values[index],
  12270. computed = iteratee ? iteratee(value) : value;
  12271. while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {
  12272. if (seen !== array) {
  12273. splice.call(seen, fromIndex, 1);
  12274. }
  12275. splice.call(array, fromIndex, 1);
  12276. }
  12277. }
  12278. return array;
  12279. }
  12280. /**
  12281. * The base implementation of `_.pullAt` without support for individual
  12282. * indexes or capturing the removed elements.
  12283. *
  12284. * @private
  12285. * @param {Array} array The array to modify.
  12286. * @param {number[]} indexes The indexes of elements to remove.
  12287. * @returns {Array} Returns `array`.
  12288. */
  12289. function basePullAt(array, indexes) {
  12290. var length = array ? indexes.length : 0,
  12291. lastIndex = length - 1;
  12292. while (length--) {
  12293. var index = indexes[length];
  12294. if (length == lastIndex || index !== previous) {
  12295. var previous = index;
  12296. if (isIndex(index)) {
  12297. splice.call(array, index, 1);
  12298. } else {
  12299. baseUnset(array, index);
  12300. }
  12301. }
  12302. }
  12303. return array;
  12304. }
  12305. /**
  12306. * The base implementation of `_.random` without support for returning
  12307. * floating-point numbers.
  12308. *
  12309. * @private
  12310. * @param {number} lower The lower bound.
  12311. * @param {number} upper The upper bound.
  12312. * @returns {number} Returns the random number.
  12313. */
  12314. function baseRandom(lower, upper) {
  12315. return lower + nativeFloor(nativeRandom() * (upper - lower + 1));
  12316. }
  12317. /**
  12318. * The base implementation of `_.range` and `_.rangeRight` which doesn't
  12319. * coerce arguments.
  12320. *
  12321. * @private
  12322. * @param {number} start The start of the range.
  12323. * @param {number} end The end of the range.
  12324. * @param {number} step The value to increment or decrement by.
  12325. * @param {boolean} [fromRight] Specify iterating from right to left.
  12326. * @returns {Array} Returns the range of numbers.
  12327. */
  12328. function baseRange(start, end, step, fromRight) {
  12329. var index = -1,
  12330. length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),
  12331. result = Array(length);
  12332. while (length--) {
  12333. result[fromRight ? length : ++index] = start;
  12334. start += step;
  12335. }
  12336. return result;
  12337. }
  12338. /**
  12339. * The base implementation of `_.repeat` which doesn't coerce arguments.
  12340. *
  12341. * @private
  12342. * @param {string} string The string to repeat.
  12343. * @param {number} n The number of times to repeat the string.
  12344. * @returns {string} Returns the repeated string.
  12345. */
  12346. function baseRepeat(string, n) {
  12347. var result = '';
  12348. if (!string || n < 1 || n > MAX_SAFE_INTEGER) {
  12349. return result;
  12350. }
  12351. // Leverage the exponentiation by squaring algorithm for a faster repeat.
  12352. // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.
  12353. do {
  12354. if (n % 2) {
  12355. result += string;
  12356. }
  12357. n = nativeFloor(n / 2);
  12358. if (n) {
  12359. string += string;
  12360. }
  12361. } while (n);
  12362. return result;
  12363. }
  12364. /**
  12365. * The base implementation of `_.rest` which doesn't validate or coerce arguments.
  12366. *
  12367. * @private
  12368. * @param {Function} func The function to apply a rest parameter to.
  12369. * @param {number} [start=func.length-1] The start position of the rest parameter.
  12370. * @returns {Function} Returns the new function.
  12371. */
  12372. function baseRest(func, start) {
  12373. return setToString(overRest(func, start, identity), func + '');
  12374. }
  12375. /**
  12376. * The base implementation of `_.sample`.
  12377. *
  12378. * @private
  12379. * @param {Array|Object} collection The collection to sample.
  12380. * @returns {*} Returns the random element.
  12381. */
  12382. function baseSample(collection) {
  12383. return arraySample(values(collection));
  12384. }
  12385. /**
  12386. * The base implementation of `_.sampleSize` without param guards.
  12387. *
  12388. * @private
  12389. * @param {Array|Object} collection The collection to sample.
  12390. * @param {number} n The number of elements to sample.
  12391. * @returns {Array} Returns the random elements.
  12392. */
  12393. function baseSampleSize(collection, n) {
  12394. var array = values(collection);
  12395. return shuffleSelf(array, baseClamp(n, 0, array.length));
  12396. }
  12397. /**
  12398. * The base implementation of `_.set`.
  12399. *
  12400. * @private
  12401. * @param {Object} object The object to modify.
  12402. * @param {Array|string} path The path of the property to set.
  12403. * @param {*} value The value to set.
  12404. * @param {Function} [customizer] The function to customize path creation.
  12405. * @returns {Object} Returns `object`.
  12406. */
  12407. function baseSet(object, path, value, customizer) {
  12408. if (!isObject(object)) {
  12409. return object;
  12410. }
  12411. path = castPath(path, object);
  12412. var index = -1,
  12413. length = path.length,
  12414. lastIndex = length - 1,
  12415. nested = object;
  12416. while (nested != null && ++index < length) {
  12417. var key = toKey(path[index]),
  12418. newValue = value;
  12419. if (index != lastIndex) {
  12420. var objValue = nested[key];
  12421. newValue = customizer ? customizer(objValue, key, nested) : undefined;
  12422. if (newValue === undefined) {
  12423. newValue = isObject(objValue)
  12424. ? objValue
  12425. : (isIndex(path[index + 1]) ? [] : {});
  12426. }
  12427. }
  12428. assignValue(nested, key, newValue);
  12429. nested = nested[key];
  12430. }
  12431. return object;
  12432. }
  12433. /**
  12434. * The base implementation of `setData` without support for hot loop shorting.
  12435. *
  12436. * @private
  12437. * @param {Function} func The function to associate metadata with.
  12438. * @param {*} data The metadata.
  12439. * @returns {Function} Returns `func`.
  12440. */
  12441. var baseSetData = !metaMap ? identity : function(func, data) {
  12442. metaMap.set(func, data);
  12443. return func;
  12444. };
  12445. /**
  12446. * The base implementation of `setToString` without support for hot loop shorting.
  12447. *
  12448. * @private
  12449. * @param {Function} func The function to modify.
  12450. * @param {Function} string The `toString` result.
  12451. * @returns {Function} Returns `func`.
  12452. */
  12453. var baseSetToString = !defineProperty ? identity : function(func, string) {
  12454. return defineProperty(func, 'toString', {
  12455. 'configurable': true,
  12456. 'enumerable': false,
  12457. 'value': constant(string),
  12458. 'writable': true
  12459. });
  12460. };
  12461. /**
  12462. * The base implementation of `_.shuffle`.
  12463. *
  12464. * @private
  12465. * @param {Array|Object} collection The collection to shuffle.
  12466. * @returns {Array} Returns the new shuffled array.
  12467. */
  12468. function baseShuffle(collection) {
  12469. return shuffleSelf(values(collection));
  12470. }
  12471. /**
  12472. * The base implementation of `_.slice` without an iteratee call guard.
  12473. *
  12474. * @private
  12475. * @param {Array} array The array to slice.
  12476. * @param {number} [start=0] The start position.
  12477. * @param {number} [end=array.length] The end position.
  12478. * @returns {Array} Returns the slice of `array`.
  12479. */
  12480. function baseSlice(array, start, end) {
  12481. var index = -1,
  12482. length = array.length;
  12483. if (start < 0) {
  12484. start = -start > length ? 0 : (length + start);
  12485. }
  12486. end = end > length ? length : end;
  12487. if (end < 0) {
  12488. end += length;
  12489. }
  12490. length = start > end ? 0 : ((end - start) >>> 0);
  12491. start >>>= 0;
  12492. var result = Array(length);
  12493. while (++index < length) {
  12494. result[index] = array[index + start];
  12495. }
  12496. return result;
  12497. }
  12498. /**
  12499. * The base implementation of `_.some` without support for iteratee shorthands.
  12500. *
  12501. * @private
  12502. * @param {Array|Object} collection The collection to iterate over.
  12503. * @param {Function} predicate The function invoked per iteration.
  12504. * @returns {boolean} Returns `true` if any element passes the predicate check,
  12505. * else `false`.
  12506. */
  12507. function baseSome(collection, predicate) {
  12508. var result;
  12509. baseEach(collection, function(value, index, collection) {
  12510. result = predicate(value, index, collection);
  12511. return !result;
  12512. });
  12513. return !!result;
  12514. }
  12515. /**
  12516. * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which
  12517. * performs a binary search of `array` to determine the index at which `value`
  12518. * should be inserted into `array` in order to maintain its sort order.
  12519. *
  12520. * @private
  12521. * @param {Array} array The sorted array to inspect.
  12522. * @param {*} value The value to evaluate.
  12523. * @param {boolean} [retHighest] Specify returning the highest qualified index.
  12524. * @returns {number} Returns the index at which `value` should be inserted
  12525. * into `array`.
  12526. */
  12527. function baseSortedIndex(array, value, retHighest) {
  12528. var low = 0,
  12529. high = array == null ? low : array.length;
  12530. if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {
  12531. while (low < high) {
  12532. var mid = (low + high) >>> 1,
  12533. computed = array[mid];
  12534. if (computed !== null && !isSymbol(computed) &&
  12535. (retHighest ? (computed <= value) : (computed < value))) {
  12536. low = mid + 1;
  12537. } else {
  12538. high = mid;
  12539. }
  12540. }
  12541. return high;
  12542. }
  12543. return baseSortedIndexBy(array, value, identity, retHighest);
  12544. }
  12545. /**
  12546. * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`
  12547. * which invokes `iteratee` for `value` and each element of `array` to compute
  12548. * their sort ranking. The iteratee is invoked with one argument; (value).
  12549. *
  12550. * @private
  12551. * @param {Array} array The sorted array to inspect.
  12552. * @param {*} value The value to evaluate.
  12553. * @param {Function} iteratee The iteratee invoked per element.
  12554. * @param {boolean} [retHighest] Specify returning the highest qualified index.
  12555. * @returns {number} Returns the index at which `value` should be inserted
  12556. * into `array`.
  12557. */
  12558. function baseSortedIndexBy(array, value, iteratee, retHighest) {
  12559. value = iteratee(value);
  12560. var low = 0,
  12561. high = array == null ? 0 : array.length,
  12562. valIsNaN = value !== value,
  12563. valIsNull = value === null,
  12564. valIsSymbol = isSymbol(value),
  12565. valIsUndefined = value === undefined;
  12566. while (low < high) {
  12567. var mid = nativeFloor((low + high) / 2),
  12568. computed = iteratee(array[mid]),
  12569. othIsDefined = computed !== undefined,
  12570. othIsNull = computed === null,
  12571. othIsReflexive = computed === computed,
  12572. othIsSymbol = isSymbol(computed);
  12573. if (valIsNaN) {
  12574. var setLow = retHighest || othIsReflexive;
  12575. } else if (valIsUndefined) {
  12576. setLow = othIsReflexive && (retHighest || othIsDefined);
  12577. } else if (valIsNull) {
  12578. setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);
  12579. } else if (valIsSymbol) {
  12580. setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);
  12581. } else if (othIsNull || othIsSymbol) {
  12582. setLow = false;
  12583. } else {
  12584. setLow = retHighest ? (computed <= value) : (computed < value);
  12585. }
  12586. if (setLow) {
  12587. low = mid + 1;
  12588. } else {
  12589. high = mid;
  12590. }
  12591. }
  12592. return nativeMin(high, MAX_ARRAY_INDEX);
  12593. }
  12594. /**
  12595. * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without
  12596. * support for iteratee shorthands.
  12597. *
  12598. * @private
  12599. * @param {Array} array The array to inspect.
  12600. * @param {Function} [iteratee] The iteratee invoked per element.
  12601. * @returns {Array} Returns the new duplicate free array.
  12602. */
  12603. function baseSortedUniq(array, iteratee) {
  12604. var index = -1,
  12605. length = array.length,
  12606. resIndex = 0,
  12607. result = [];
  12608. while (++index < length) {
  12609. var value = array[index],
  12610. computed = iteratee ? iteratee(value) : value;
  12611. if (!index || !eq(computed, seen)) {
  12612. var seen = computed;
  12613. result[resIndex++] = value === 0 ? 0 : value;
  12614. }
  12615. }
  12616. return result;
  12617. }
  12618. /**
  12619. * The base implementation of `_.toNumber` which doesn't ensure correct
  12620. * conversions of binary, hexadecimal, or octal string values.
  12621. *
  12622. * @private
  12623. * @param {*} value The value to process.
  12624. * @returns {number} Returns the number.
  12625. */
  12626. function baseToNumber(value) {
  12627. if (typeof value == 'number') {
  12628. return value;
  12629. }
  12630. if (isSymbol(value)) {
  12631. return NAN;
  12632. }
  12633. return +value;
  12634. }
  12635. /**
  12636. * The base implementation of `_.toString` which doesn't convert nullish
  12637. * values to empty strings.
  12638. *
  12639. * @private
  12640. * @param {*} value The value to process.
  12641. * @returns {string} Returns the string.
  12642. */
  12643. function baseToString(value) {
  12644. // Exit early for strings to avoid a performance hit in some environments.
  12645. if (typeof value == 'string') {
  12646. return value;
  12647. }
  12648. if (isArray(value)) {
  12649. // Recursively convert values (susceptible to call stack limits).
  12650. return arrayMap(value, baseToString) + '';
  12651. }
  12652. if (isSymbol(value)) {
  12653. return symbolToString ? symbolToString.call(value) : '';
  12654. }
  12655. var result = (value + '');
  12656. return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
  12657. }
  12658. /**
  12659. * The base implementation of `_.uniqBy` without support for iteratee shorthands.
  12660. *
  12661. * @private
  12662. * @param {Array} array The array to inspect.
  12663. * @param {Function} [iteratee] The iteratee invoked per element.
  12664. * @param {Function} [comparator] The comparator invoked per element.
  12665. * @returns {Array} Returns the new duplicate free array.
  12666. */
  12667. function baseUniq(array, iteratee, comparator) {
  12668. var index = -1,
  12669. includes = arrayIncludes,
  12670. length = array.length,
  12671. isCommon = true,
  12672. result = [],
  12673. seen = result;
  12674. if (comparator) {
  12675. isCommon = false;
  12676. includes = arrayIncludesWith;
  12677. }
  12678. else if (length >= LARGE_ARRAY_SIZE) {
  12679. var set = iteratee ? null : createSet(array);
  12680. if (set) {
  12681. return setToArray(set);
  12682. }
  12683. isCommon = false;
  12684. includes = cacheHas;
  12685. seen = new SetCache;
  12686. }
  12687. else {
  12688. seen = iteratee ? [] : result;
  12689. }
  12690. outer:
  12691. while (++index < length) {
  12692. var value = array[index],
  12693. computed = iteratee ? iteratee(value) : value;
  12694. value = (comparator || value !== 0) ? value : 0;
  12695. if (isCommon && computed === computed) {
  12696. var seenIndex = seen.length;
  12697. while (seenIndex--) {
  12698. if (seen[seenIndex] === computed) {
  12699. continue outer;
  12700. }
  12701. }
  12702. if (iteratee) {
  12703. seen.push(computed);
  12704. }
  12705. result.push(value);
  12706. }
  12707. else if (!includes(seen, computed, comparator)) {
  12708. if (seen !== result) {
  12709. seen.push(computed);
  12710. }
  12711. result.push(value);
  12712. }
  12713. }
  12714. return result;
  12715. }
  12716. /**
  12717. * The base implementation of `_.unset`.
  12718. *
  12719. * @private
  12720. * @param {Object} object The object to modify.
  12721. * @param {Array|string} path The property path to unset.
  12722. * @returns {boolean} Returns `true` if the property is deleted, else `false`.
  12723. */
  12724. function baseUnset(object, path) {
  12725. path = castPath(path, object);
  12726. object = parent(object, path);
  12727. return object == null || delete object[toKey(last(path))];
  12728. }
  12729. /**
  12730. * The base implementation of `_.update`.
  12731. *
  12732. * @private
  12733. * @param {Object} object The object to modify.
  12734. * @param {Array|string} path The path of the property to update.
  12735. * @param {Function} updater The function to produce the updated value.
  12736. * @param {Function} [customizer] The function to customize path creation.
  12737. * @returns {Object} Returns `object`.
  12738. */
  12739. function baseUpdate(object, path, updater, customizer) {
  12740. return baseSet(object, path, updater(baseGet(object, path)), customizer);
  12741. }
  12742. /**
  12743. * The base implementation of methods like `_.dropWhile` and `_.takeWhile`
  12744. * without support for iteratee shorthands.
  12745. *
  12746. * @private
  12747. * @param {Array} array The array to query.
  12748. * @param {Function} predicate The function invoked per iteration.
  12749. * @param {boolean} [isDrop] Specify dropping elements instead of taking them.
  12750. * @param {boolean} [fromRight] Specify iterating from right to left.
  12751. * @returns {Array} Returns the slice of `array`.
  12752. */
  12753. function baseWhile(array, predicate, isDrop, fromRight) {
  12754. var length = array.length,
  12755. index = fromRight ? length : -1;
  12756. while ((fromRight ? index-- : ++index < length) &&
  12757. predicate(array[index], index, array)) {}
  12758. return isDrop
  12759. ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))
  12760. : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));
  12761. }
  12762. /**
  12763. * The base implementation of `wrapperValue` which returns the result of
  12764. * performing a sequence of actions on the unwrapped `value`, where each
  12765. * successive action is supplied the return value of the previous.
  12766. *
  12767. * @private
  12768. * @param {*} value The unwrapped value.
  12769. * @param {Array} actions Actions to perform to resolve the unwrapped value.
  12770. * @returns {*} Returns the resolved value.
  12771. */
  12772. function baseWrapperValue(value, actions) {
  12773. var result = value;
  12774. if (result instanceof LazyWrapper) {
  12775. result = result.value();
  12776. }
  12777. return arrayReduce(actions, function(result, action) {
  12778. return action.func.apply(action.thisArg, arrayPush([result], action.args));
  12779. }, result);
  12780. }
  12781. /**
  12782. * The base implementation of methods like `_.xor`, without support for
  12783. * iteratee shorthands, that accepts an array of arrays to inspect.
  12784. *
  12785. * @private
  12786. * @param {Array} arrays The arrays to inspect.
  12787. * @param {Function} [iteratee] The iteratee invoked per element.
  12788. * @param {Function} [comparator] The comparator invoked per element.
  12789. * @returns {Array} Returns the new array of values.
  12790. */
  12791. function baseXor(arrays, iteratee, comparator) {
  12792. var length = arrays.length;
  12793. if (length < 2) {
  12794. return length ? baseUniq(arrays[0]) : [];
  12795. }
  12796. var index = -1,
  12797. result = Array(length);
  12798. while (++index < length) {
  12799. var array = arrays[index],
  12800. othIndex = -1;
  12801. while (++othIndex < length) {
  12802. if (othIndex != index) {
  12803. result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);
  12804. }
  12805. }
  12806. }
  12807. return baseUniq(baseFlatten(result, 1), iteratee, comparator);
  12808. }
  12809. /**
  12810. * This base implementation of `_.zipObject` which assigns values using `assignFunc`.
  12811. *
  12812. * @private
  12813. * @param {Array} props The property identifiers.
  12814. * @param {Array} values The property values.
  12815. * @param {Function} assignFunc The function to assign values.
  12816. * @returns {Object} Returns the new object.
  12817. */
  12818. function baseZipObject(props, values, assignFunc) {
  12819. var index = -1,
  12820. length = props.length,
  12821. valsLength = values.length,
  12822. result = {};
  12823. while (++index < length) {
  12824. var value = index < valsLength ? values[index] : undefined;
  12825. assignFunc(result, props[index], value);
  12826. }
  12827. return result;
  12828. }
  12829. /**
  12830. * Casts `value` to an empty array if it's not an array like object.
  12831. *
  12832. * @private
  12833. * @param {*} value The value to inspect.
  12834. * @returns {Array|Object} Returns the cast array-like object.
  12835. */
  12836. function castArrayLikeObject(value) {
  12837. return isArrayLikeObject(value) ? value : [];
  12838. }
  12839. /**
  12840. * Casts `value` to `identity` if it's not a function.
  12841. *
  12842. * @private
  12843. * @param {*} value The value to inspect.
  12844. * @returns {Function} Returns cast function.
  12845. */
  12846. function castFunction(value) {
  12847. return typeof value == 'function' ? value : identity;
  12848. }
  12849. /**
  12850. * Casts `value` to a path array if it's not one.
  12851. *
  12852. * @private
  12853. * @param {*} value The value to inspect.
  12854. * @param {Object} [object] The object to query keys on.
  12855. * @returns {Array} Returns the cast property path array.
  12856. */
  12857. function castPath(value, object) {
  12858. if (isArray(value)) {
  12859. return value;
  12860. }
  12861. return isKey(value, object) ? [value] : stringToPath(toString(value));
  12862. }
  12863. /**
  12864. * A `baseRest` alias which can be replaced with `identity` by module
  12865. * replacement plugins.
  12866. *
  12867. * @private
  12868. * @type {Function}
  12869. * @param {Function} func The function to apply a rest parameter to.
  12870. * @returns {Function} Returns the new function.
  12871. */
  12872. var castRest = baseRest;
  12873. /**
  12874. * Casts `array` to a slice if it's needed.
  12875. *
  12876. * @private
  12877. * @param {Array} array The array to inspect.
  12878. * @param {number} start The start position.
  12879. * @param {number} [end=array.length] The end position.
  12880. * @returns {Array} Returns the cast slice.
  12881. */
  12882. function castSlice(array, start, end) {
  12883. var length = array.length;
  12884. end = end === undefined ? length : end;
  12885. return (!start && end >= length) ? array : baseSlice(array, start, end);
  12886. }
  12887. /**
  12888. * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).
  12889. *
  12890. * @private
  12891. * @param {number|Object} id The timer id or timeout object of the timer to clear.
  12892. */
  12893. var clearTimeout = ctxClearTimeout || function(id) {
  12894. return root.clearTimeout(id);
  12895. };
  12896. /**
  12897. * Creates a clone of `buffer`.
  12898. *
  12899. * @private
  12900. * @param {Buffer} buffer The buffer to clone.
  12901. * @param {boolean} [isDeep] Specify a deep clone.
  12902. * @returns {Buffer} Returns the cloned buffer.
  12903. */
  12904. function cloneBuffer(buffer, isDeep) {
  12905. if (isDeep) {
  12906. return buffer.slice();
  12907. }
  12908. var length = buffer.length,
  12909. result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);
  12910. buffer.copy(result);
  12911. return result;
  12912. }
  12913. /**
  12914. * Creates a clone of `arrayBuffer`.
  12915. *
  12916. * @private
  12917. * @param {ArrayBuffer} arrayBuffer The array buffer to clone.
  12918. * @returns {ArrayBuffer} Returns the cloned array buffer.
  12919. */
  12920. function cloneArrayBuffer(arrayBuffer) {
  12921. var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
  12922. new Uint8Array(result).set(new Uint8Array(arrayBuffer));
  12923. return result;
  12924. }
  12925. /**
  12926. * Creates a clone of `dataView`.
  12927. *
  12928. * @private
  12929. * @param {Object} dataView The data view to clone.
  12930. * @param {boolean} [isDeep] Specify a deep clone.
  12931. * @returns {Object} Returns the cloned data view.
  12932. */
  12933. function cloneDataView(dataView, isDeep) {
  12934. var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;
  12935. return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
  12936. }
  12937. /**
  12938. * Creates a clone of `regexp`.
  12939. *
  12940. * @private
  12941. * @param {Object} regexp The regexp to clone.
  12942. * @returns {Object} Returns the cloned regexp.
  12943. */
  12944. function cloneRegExp(regexp) {
  12945. var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
  12946. result.lastIndex = regexp.lastIndex;
  12947. return result;
  12948. }
  12949. /**
  12950. * Creates a clone of the `symbol` object.
  12951. *
  12952. * @private
  12953. * @param {Object} symbol The symbol object to clone.
  12954. * @returns {Object} Returns the cloned symbol object.
  12955. */
  12956. function cloneSymbol(symbol) {
  12957. return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};
  12958. }
  12959. /**
  12960. * Creates a clone of `typedArray`.
  12961. *
  12962. * @private
  12963. * @param {Object} typedArray The typed array to clone.
  12964. * @param {boolean} [isDeep] Specify a deep clone.
  12965. * @returns {Object} Returns the cloned typed array.
  12966. */
  12967. function cloneTypedArray(typedArray, isDeep) {
  12968. var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
  12969. return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
  12970. }
  12971. /**
  12972. * Compares values to sort them in ascending order.
  12973. *
  12974. * @private
  12975. * @param {*} value The value to compare.
  12976. * @param {*} other The other value to compare.
  12977. * @returns {number} Returns the sort order indicator for `value`.
  12978. */
  12979. function compareAscending(value, other) {
  12980. if (value !== other) {
  12981. var valIsDefined = value !== undefined,
  12982. valIsNull = value === null,
  12983. valIsReflexive = value === value,
  12984. valIsSymbol = isSymbol(value);
  12985. var othIsDefined = other !== undefined,
  12986. othIsNull = other === null,
  12987. othIsReflexive = other === other,
  12988. othIsSymbol = isSymbol(other);
  12989. if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||
  12990. (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||
  12991. (valIsNull && othIsDefined && othIsReflexive) ||
  12992. (!valIsDefined && othIsReflexive) ||
  12993. !valIsReflexive) {
  12994. return 1;
  12995. }
  12996. if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||
  12997. (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||
  12998. (othIsNull && valIsDefined && valIsReflexive) ||
  12999. (!othIsDefined && valIsReflexive) ||
  13000. !othIsReflexive) {
  13001. return -1;
  13002. }
  13003. }
  13004. return 0;
  13005. }
  13006. /**
  13007. * Used by `_.orderBy` to compare multiple properties of a value to another
  13008. * and stable sort them.
  13009. *
  13010. * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,
  13011. * specify an order of "desc" for descending or "asc" for ascending sort order
  13012. * of corresponding values.
  13013. *
  13014. * @private
  13015. * @param {Object} object The object to compare.
  13016. * @param {Object} other The other object to compare.
  13017. * @param {boolean[]|string[]} orders The order to sort by for each property.
  13018. * @returns {number} Returns the sort order indicator for `object`.
  13019. */
  13020. function compareMultiple(object, other, orders) {
  13021. var index = -1,
  13022. objCriteria = object.criteria,
  13023. othCriteria = other.criteria,
  13024. length = objCriteria.length,
  13025. ordersLength = orders.length;
  13026. while (++index < length) {
  13027. var result = compareAscending(objCriteria[index], othCriteria[index]);
  13028. if (result) {
  13029. if (index >= ordersLength) {
  13030. return result;
  13031. }
  13032. var order = orders[index];
  13033. return result * (order == 'desc' ? -1 : 1);
  13034. }
  13035. }
  13036. // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
  13037. // that causes it, under certain circumstances, to provide the same value for
  13038. // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247
  13039. // for more details.
  13040. //
  13041. // This also ensures a stable sort in V8 and other engines.
  13042. // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.
  13043. return object.index - other.index;
  13044. }
  13045. /**
  13046. * Creates an array that is the composition of partially applied arguments,
  13047. * placeholders, and provided arguments into a single array of arguments.
  13048. *
  13049. * @private
  13050. * @param {Array} args The provided arguments.
  13051. * @param {Array} partials The arguments to prepend to those provided.
  13052. * @param {Array} holders The `partials` placeholder indexes.
  13053. * @params {boolean} [isCurried] Specify composing for a curried function.
  13054. * @returns {Array} Returns the new array of composed arguments.
  13055. */
  13056. function composeArgs(args, partials, holders, isCurried) {
  13057. var argsIndex = -1,
  13058. argsLength = args.length,
  13059. holdersLength = holders.length,
  13060. leftIndex = -1,
  13061. leftLength = partials.length,
  13062. rangeLength = nativeMax(argsLength - holdersLength, 0),
  13063. result = Array(leftLength + rangeLength),
  13064. isUncurried = !isCurried;
  13065. while (++leftIndex < leftLength) {
  13066. result[leftIndex] = partials[leftIndex];
  13067. }
  13068. while (++argsIndex < holdersLength) {
  13069. if (isUncurried || argsIndex < argsLength) {
  13070. result[holders[argsIndex]] = args[argsIndex];
  13071. }
  13072. }
  13073. while (rangeLength--) {
  13074. result[leftIndex++] = args[argsIndex++];
  13075. }
  13076. return result;
  13077. }
  13078. /**
  13079. * This function is like `composeArgs` except that the arguments composition
  13080. * is tailored for `_.partialRight`.
  13081. *
  13082. * @private
  13083. * @param {Array} args The provided arguments.
  13084. * @param {Array} partials The arguments to append to those provided.
  13085. * @param {Array} holders The `partials` placeholder indexes.
  13086. * @params {boolean} [isCurried] Specify composing for a curried function.
  13087. * @returns {Array} Returns the new array of composed arguments.
  13088. */
  13089. function composeArgsRight(args, partials, holders, isCurried) {
  13090. var argsIndex = -1,
  13091. argsLength = args.length,
  13092. holdersIndex = -1,
  13093. holdersLength = holders.length,
  13094. rightIndex = -1,
  13095. rightLength = partials.length,
  13096. rangeLength = nativeMax(argsLength - holdersLength, 0),
  13097. result = Array(rangeLength + rightLength),
  13098. isUncurried = !isCurried;
  13099. while (++argsIndex < rangeLength) {
  13100. result[argsIndex] = args[argsIndex];
  13101. }
  13102. var offset = argsIndex;
  13103. while (++rightIndex < rightLength) {
  13104. result[offset + rightIndex] = partials[rightIndex];
  13105. }
  13106. while (++holdersIndex < holdersLength) {
  13107. if (isUncurried || argsIndex < argsLength) {
  13108. result[offset + holders[holdersIndex]] = args[argsIndex++];
  13109. }
  13110. }
  13111. return result;
  13112. }
  13113. /**
  13114. * Copies the values of `source` to `array`.
  13115. *
  13116. * @private
  13117. * @param {Array} source The array to copy values from.
  13118. * @param {Array} [array=[]] The array to copy values to.
  13119. * @returns {Array} Returns `array`.
  13120. */
  13121. function copyArray(source, array) {
  13122. var index = -1,
  13123. length = source.length;
  13124. array || (array = Array(length));
  13125. while (++index < length) {
  13126. array[index] = source[index];
  13127. }
  13128. return array;
  13129. }
  13130. /**
  13131. * Copies properties of `source` to `object`.
  13132. *
  13133. * @private
  13134. * @param {Object} source The object to copy properties from.
  13135. * @param {Array} props The property identifiers to copy.
  13136. * @param {Object} [object={}] The object to copy properties to.
  13137. * @param {Function} [customizer] The function to customize copied values.
  13138. * @returns {Object} Returns `object`.
  13139. */
  13140. function copyObject(source, props, object, customizer) {
  13141. var isNew = !object;
  13142. object || (object = {});
  13143. var index = -1,
  13144. length = props.length;
  13145. while (++index < length) {
  13146. var key = props[index];
  13147. var newValue = customizer
  13148. ? customizer(object[key], source[key], key, object, source)
  13149. : undefined;
  13150. if (newValue === undefined) {
  13151. newValue = source[key];
  13152. }
  13153. if (isNew) {
  13154. baseAssignValue(object, key, newValue);
  13155. } else {
  13156. assignValue(object, key, newValue);
  13157. }
  13158. }
  13159. return object;
  13160. }
  13161. /**
  13162. * Copies own symbols of `source` to `object`.
  13163. *
  13164. * @private
  13165. * @param {Object} source The object to copy symbols from.
  13166. * @param {Object} [object={}] The object to copy symbols to.
  13167. * @returns {Object} Returns `object`.
  13168. */
  13169. function copySymbols(source, object) {
  13170. return copyObject(source, getSymbols(source), object);
  13171. }
  13172. /**
  13173. * Copies own and inherited symbols of `source` to `object`.
  13174. *
  13175. * @private
  13176. * @param {Object} source The object to copy symbols from.
  13177. * @param {Object} [object={}] The object to copy symbols to.
  13178. * @returns {Object} Returns `object`.
  13179. */
  13180. function copySymbolsIn(source, object) {
  13181. return copyObject(source, getSymbolsIn(source), object);
  13182. }
  13183. /**
  13184. * Creates a function like `_.groupBy`.
  13185. *
  13186. * @private
  13187. * @param {Function} setter The function to set accumulator values.
  13188. * @param {Function} [initializer] The accumulator object initializer.
  13189. * @returns {Function} Returns the new aggregator function.
  13190. */
  13191. function createAggregator(setter, initializer) {
  13192. return function(collection, iteratee) {
  13193. var func = isArray(collection) ? arrayAggregator : baseAggregator,
  13194. accumulator = initializer ? initializer() : {};
  13195. return func(collection, setter, getIteratee(iteratee, 2), accumulator);
  13196. };
  13197. }
  13198. /**
  13199. * Creates a function like `_.assign`.
  13200. *
  13201. * @private
  13202. * @param {Function} assigner The function to assign values.
  13203. * @returns {Function} Returns the new assigner function.
  13204. */
  13205. function createAssigner(assigner) {
  13206. return baseRest(function(object, sources) {
  13207. var index = -1,
  13208. length = sources.length,
  13209. customizer = length > 1 ? sources[length - 1] : undefined,
  13210. guard = length > 2 ? sources[2] : undefined;
  13211. customizer = (assigner.length > 3 && typeof customizer == 'function')
  13212. ? (length--, customizer)
  13213. : undefined;
  13214. if (guard && isIterateeCall(sources[0], sources[1], guard)) {
  13215. customizer = length < 3 ? undefined : customizer;
  13216. length = 1;
  13217. }
  13218. object = Object(object);
  13219. while (++index < length) {
  13220. var source = sources[index];
  13221. if (source) {
  13222. assigner(object, source, index, customizer);
  13223. }
  13224. }
  13225. return object;
  13226. });
  13227. }
  13228. /**
  13229. * Creates a `baseEach` or `baseEachRight` function.
  13230. *
  13231. * @private
  13232. * @param {Function} eachFunc The function to iterate over a collection.
  13233. * @param {boolean} [fromRight] Specify iterating from right to left.
  13234. * @returns {Function} Returns the new base function.
  13235. */
  13236. function createBaseEach(eachFunc, fromRight) {
  13237. return function(collection, iteratee) {
  13238. if (collection == null) {
  13239. return collection;
  13240. }
  13241. if (!isArrayLike(collection)) {
  13242. return eachFunc(collection, iteratee);
  13243. }
  13244. var length = collection.length,
  13245. index = fromRight ? length : -1,
  13246. iterable = Object(collection);
  13247. while ((fromRight ? index-- : ++index < length)) {
  13248. if (iteratee(iterable[index], index, iterable) === false) {
  13249. break;
  13250. }
  13251. }
  13252. return collection;
  13253. };
  13254. }
  13255. /**
  13256. * Creates a base function for methods like `_.forIn` and `_.forOwn`.
  13257. *
  13258. * @private
  13259. * @param {boolean} [fromRight] Specify iterating from right to left.
  13260. * @returns {Function} Returns the new base function.
  13261. */
  13262. function createBaseFor(fromRight) {
  13263. return function(object, iteratee, keysFunc) {
  13264. var index = -1,
  13265. iterable = Object(object),
  13266. props = keysFunc(object),
  13267. length = props.length;
  13268. while (length--) {
  13269. var key = props[fromRight ? length : ++index];
  13270. if (iteratee(iterable[key], key, iterable) === false) {
  13271. break;
  13272. }
  13273. }
  13274. return object;
  13275. };
  13276. }
  13277. /**
  13278. * Creates a function that wraps `func` to invoke it with the optional `this`
  13279. * binding of `thisArg`.
  13280. *
  13281. * @private
  13282. * @param {Function} func The function to wrap.
  13283. * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
  13284. * @param {*} [thisArg] The `this` binding of `func`.
  13285. * @returns {Function} Returns the new wrapped function.
  13286. */
  13287. function createBind(func, bitmask, thisArg) {
  13288. var isBind = bitmask & WRAP_BIND_FLAG,
  13289. Ctor = createCtor(func);
  13290. function wrapper() {
  13291. var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
  13292. return fn.apply(isBind ? thisArg : this, arguments);
  13293. }
  13294. return wrapper;
  13295. }
  13296. /**
  13297. * Creates a function like `_.lowerFirst`.
  13298. *
  13299. * @private
  13300. * @param {string} methodName The name of the `String` case method to use.
  13301. * @returns {Function} Returns the new case function.
  13302. */
  13303. function createCaseFirst(methodName) {
  13304. return function(string) {
  13305. string = toString(string);
  13306. var strSymbols = hasUnicode(string)
  13307. ? stringToArray(string)
  13308. : undefined;
  13309. var chr = strSymbols
  13310. ? strSymbols[0]
  13311. : string.charAt(0);
  13312. var trailing = strSymbols
  13313. ? castSlice(strSymbols, 1).join('')
  13314. : string.slice(1);
  13315. return chr[methodName]() + trailing;
  13316. };
  13317. }
  13318. /**
  13319. * Creates a function like `_.camelCase`.
  13320. *
  13321. * @private
  13322. * @param {Function} callback The function to combine each word.
  13323. * @returns {Function} Returns the new compounder function.
  13324. */
  13325. function createCompounder(callback) {
  13326. return function(string) {
  13327. return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');
  13328. };
  13329. }
  13330. /**
  13331. * Creates a function that produces an instance of `Ctor` regardless of
  13332. * whether it was invoked as part of a `new` expression or by `call` or `apply`.
  13333. *
  13334. * @private
  13335. * @param {Function} Ctor The constructor to wrap.
  13336. * @returns {Function} Returns the new wrapped function.
  13337. */
  13338. function createCtor(Ctor) {
  13339. return function() {
  13340. // Use a `switch` statement to work with class constructors. See
  13341. // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist
  13342. // for more details.
  13343. var args = arguments;
  13344. switch (args.length) {
  13345. case 0: return new Ctor;
  13346. case 1: return new Ctor(args[0]);
  13347. case 2: return new Ctor(args[0], args[1]);
  13348. case 3: return new Ctor(args[0], args[1], args[2]);
  13349. case 4: return new Ctor(args[0], args[1], args[2], args[3]);
  13350. case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);
  13351. case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);
  13352. case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
  13353. }
  13354. var thisBinding = baseCreate(Ctor.prototype),
  13355. result = Ctor.apply(thisBinding, args);
  13356. // Mimic the constructor's `return` behavior.
  13357. // See https://es5.github.io/#x13.2.2 for more details.
  13358. return isObject(result) ? result : thisBinding;
  13359. };
  13360. }
  13361. /**
  13362. * Creates a function that wraps `func` to enable currying.
  13363. *
  13364. * @private
  13365. * @param {Function} func The function to wrap.
  13366. * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
  13367. * @param {number} arity The arity of `func`.
  13368. * @returns {Function} Returns the new wrapped function.
  13369. */
  13370. function createCurry(func, bitmask, arity) {
  13371. var Ctor = createCtor(func);
  13372. function wrapper() {
  13373. var length = arguments.length,
  13374. args = Array(length),
  13375. index = length,
  13376. placeholder = getHolder(wrapper);
  13377. while (index--) {
  13378. args[index] = arguments[index];
  13379. }
  13380. var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)
  13381. ? []
  13382. : replaceHolders(args, placeholder);
  13383. length -= holders.length;
  13384. if (length < arity) {
  13385. return createRecurry(
  13386. func, bitmask, createHybrid, wrapper.placeholder, undefined,
  13387. args, holders, undefined, undefined, arity - length);
  13388. }
  13389. var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
  13390. return apply(fn, this, args);
  13391. }
  13392. return wrapper;
  13393. }
  13394. /**
  13395. * Creates a `_.find` or `_.findLast` function.
  13396. *
  13397. * @private
  13398. * @param {Function} findIndexFunc The function to find the collection index.
  13399. * @returns {Function} Returns the new find function.
  13400. */
  13401. function createFind(findIndexFunc) {
  13402. return function(collection, predicate, fromIndex) {
  13403. var iterable = Object(collection);
  13404. if (!isArrayLike(collection)) {
  13405. var iteratee = getIteratee(predicate, 3);
  13406. collection = keys(collection);
  13407. predicate = function(key) { return iteratee(iterable[key], key, iterable); };
  13408. }
  13409. var index = findIndexFunc(collection, predicate, fromIndex);
  13410. return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;
  13411. };
  13412. }
  13413. /**
  13414. * Creates a `_.flow` or `_.flowRight` function.
  13415. *
  13416. * @private
  13417. * @param {boolean} [fromRight] Specify iterating from right to left.
  13418. * @returns {Function} Returns the new flow function.
  13419. */
  13420. function createFlow(fromRight) {
  13421. return flatRest(function(funcs) {
  13422. var length = funcs.length,
  13423. index = length,
  13424. prereq = LodashWrapper.prototype.thru;
  13425. if (fromRight) {
  13426. funcs.reverse();
  13427. }
  13428. while (index--) {
  13429. var func = funcs[index];
  13430. if (typeof func != 'function') {
  13431. throw new TypeError(FUNC_ERROR_TEXT);
  13432. }
  13433. if (prereq && !wrapper && getFuncName(func) == 'wrapper') {
  13434. var wrapper = new LodashWrapper([], true);
  13435. }
  13436. }
  13437. index = wrapper ? index : length;
  13438. while (++index < length) {
  13439. func = funcs[index];
  13440. var funcName = getFuncName(func),
  13441. data = funcName == 'wrapper' ? getData(func) : undefined;
  13442. if (data && isLaziable(data[0]) &&
  13443. data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&
  13444. !data[4].length && data[9] == 1
  13445. ) {
  13446. wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
  13447. } else {
  13448. wrapper = (func.length == 1 && isLaziable(func))
  13449. ? wrapper[funcName]()
  13450. : wrapper.thru(func);
  13451. }
  13452. }
  13453. return function() {
  13454. var args = arguments,
  13455. value = args[0];
  13456. if (wrapper && args.length == 1 && isArray(value)) {
  13457. return wrapper.plant(value).value();
  13458. }
  13459. var index = 0,
  13460. result = length ? funcs[index].apply(this, args) : value;
  13461. while (++index < length) {
  13462. result = funcs[index].call(this, result);
  13463. }
  13464. return result;
  13465. };
  13466. });
  13467. }
  13468. /**
  13469. * Creates a function that wraps `func` to invoke it with optional `this`
  13470. * binding of `thisArg`, partial application, and currying.
  13471. *
  13472. * @private
  13473. * @param {Function|string} func The function or method name to wrap.
  13474. * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
  13475. * @param {*} [thisArg] The `this` binding of `func`.
  13476. * @param {Array} [partials] The arguments to prepend to those provided to
  13477. * the new function.
  13478. * @param {Array} [holders] The `partials` placeholder indexes.
  13479. * @param {Array} [partialsRight] The arguments to append to those provided
  13480. * to the new function.
  13481. * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.
  13482. * @param {Array} [argPos] The argument positions of the new function.
  13483. * @param {number} [ary] The arity cap of `func`.
  13484. * @param {number} [arity] The arity of `func`.
  13485. * @returns {Function} Returns the new wrapped function.
  13486. */
  13487. function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
  13488. var isAry = bitmask & WRAP_ARY_FLAG,
  13489. isBind = bitmask & WRAP_BIND_FLAG,
  13490. isBindKey = bitmask & WRAP_BIND_KEY_FLAG,
  13491. isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),
  13492. isFlip = bitmask & WRAP_FLIP_FLAG,
  13493. Ctor = isBindKey ? undefined : createCtor(func);
  13494. function wrapper() {
  13495. var length = arguments.length,
  13496. args = Array(length),
  13497. index = length;
  13498. while (index--) {
  13499. args[index] = arguments[index];
  13500. }
  13501. if (isCurried) {
  13502. var placeholder = getHolder(wrapper),
  13503. holdersCount = countHolders(args, placeholder);
  13504. }
  13505. if (partials) {
  13506. args = composeArgs(args, partials, holders, isCurried);
  13507. }
  13508. if (partialsRight) {
  13509. args = composeArgsRight(args, partialsRight, holdersRight, isCurried);
  13510. }
  13511. length -= holdersCount;
  13512. if (isCurried && length < arity) {
  13513. var newHolders = replaceHolders(args, placeholder);
  13514. return createRecurry(
  13515. func, bitmask, createHybrid, wrapper.placeholder, thisArg,
  13516. args, newHolders, argPos, ary, arity - length
  13517. );
  13518. }
  13519. var thisBinding = isBind ? thisArg : this,
  13520. fn = isBindKey ? thisBinding[func] : func;
  13521. length = args.length;
  13522. if (argPos) {
  13523. args = reorder(args, argPos);
  13524. } else if (isFlip && length > 1) {
  13525. args.reverse();
  13526. }
  13527. if (isAry && ary < length) {
  13528. args.length = ary;
  13529. }
  13530. if (this && this !== root && this instanceof wrapper) {
  13531. fn = Ctor || createCtor(fn);
  13532. }
  13533. return fn.apply(thisBinding, args);
  13534. }
  13535. return wrapper;
  13536. }
  13537. /**
  13538. * Creates a function like `_.invertBy`.
  13539. *
  13540. * @private
  13541. * @param {Function} setter The function to set accumulator values.
  13542. * @param {Function} toIteratee The function to resolve iteratees.
  13543. * @returns {Function} Returns the new inverter function.
  13544. */
  13545. function createInverter(setter, toIteratee) {
  13546. return function(object, iteratee) {
  13547. return baseInverter(object, setter, toIteratee(iteratee), {});
  13548. };
  13549. }
  13550. /**
  13551. * Creates a function that performs a mathematical operation on two values.
  13552. *
  13553. * @private
  13554. * @param {Function} operator The function to perform the operation.
  13555. * @param {number} [defaultValue] The value used for `undefined` arguments.
  13556. * @returns {Function} Returns the new mathematical operation function.
  13557. */
  13558. function createMathOperation(operator, defaultValue) {
  13559. return function(value, other) {
  13560. var result;
  13561. if (value === undefined && other === undefined) {
  13562. return defaultValue;
  13563. }
  13564. if (value !== undefined) {
  13565. result = value;
  13566. }
  13567. if (other !== undefined) {
  13568. if (result === undefined) {
  13569. return other;
  13570. }
  13571. if (typeof value == 'string' || typeof other == 'string') {
  13572. value = baseToString(value);
  13573. other = baseToString(other);
  13574. } else {
  13575. value = baseToNumber(value);
  13576. other = baseToNumber(other);
  13577. }
  13578. result = operator(value, other);
  13579. }
  13580. return result;
  13581. };
  13582. }
  13583. /**
  13584. * Creates a function like `_.over`.
  13585. *
  13586. * @private
  13587. * @param {Function} arrayFunc The function to iterate over iteratees.
  13588. * @returns {Function} Returns the new over function.
  13589. */
  13590. function createOver(arrayFunc) {
  13591. return flatRest(function(iteratees) {
  13592. iteratees = arrayMap(iteratees, baseUnary(getIteratee()));
  13593. return baseRest(function(args) {
  13594. var thisArg = this;
  13595. return arrayFunc(iteratees, function(iteratee) {
  13596. return apply(iteratee, thisArg, args);
  13597. });
  13598. });
  13599. });
  13600. }
  13601. /**
  13602. * Creates the padding for `string` based on `length`. The `chars` string
  13603. * is truncated if the number of characters exceeds `length`.
  13604. *
  13605. * @private
  13606. * @param {number} length The padding length.
  13607. * @param {string} [chars=' '] The string used as padding.
  13608. * @returns {string} Returns the padding for `string`.
  13609. */
  13610. function createPadding(length, chars) {
  13611. chars = chars === undefined ? ' ' : baseToString(chars);
  13612. var charsLength = chars.length;
  13613. if (charsLength < 2) {
  13614. return charsLength ? baseRepeat(chars, length) : chars;
  13615. }
  13616. var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));
  13617. return hasUnicode(chars)
  13618. ? castSlice(stringToArray(result), 0, length).join('')
  13619. : result.slice(0, length);
  13620. }
  13621. /**
  13622. * Creates a function that wraps `func` to invoke it with the `this` binding
  13623. * of `thisArg` and `partials` prepended to the arguments it receives.
  13624. *
  13625. * @private
  13626. * @param {Function} func The function to wrap.
  13627. * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
  13628. * @param {*} thisArg The `this` binding of `func`.
  13629. * @param {Array} partials The arguments to prepend to those provided to
  13630. * the new function.
  13631. * @returns {Function} Returns the new wrapped function.
  13632. */
  13633. function createPartial(func, bitmask, thisArg, partials) {
  13634. var isBind = bitmask & WRAP_BIND_FLAG,
  13635. Ctor = createCtor(func);
  13636. function wrapper() {
  13637. var argsIndex = -1,
  13638. argsLength = arguments.length,
  13639. leftIndex = -1,
  13640. leftLength = partials.length,
  13641. args = Array(leftLength + argsLength),
  13642. fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
  13643. while (++leftIndex < leftLength) {
  13644. args[leftIndex] = partials[leftIndex];
  13645. }
  13646. while (argsLength--) {
  13647. args[leftIndex++] = arguments[++argsIndex];
  13648. }
  13649. return apply(fn, isBind ? thisArg : this, args);
  13650. }
  13651. return wrapper;
  13652. }
  13653. /**
  13654. * Creates a `_.range` or `_.rangeRight` function.
  13655. *
  13656. * @private
  13657. * @param {boolean} [fromRight] Specify iterating from right to left.
  13658. * @returns {Function} Returns the new range function.
  13659. */
  13660. function createRange(fromRight) {
  13661. return function(start, end, step) {
  13662. if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {
  13663. end = step = undefined;
  13664. }
  13665. // Ensure the sign of `-0` is preserved.
  13666. start = toFinite(start);
  13667. if (end === undefined) {
  13668. end = start;
  13669. start = 0;
  13670. } else {
  13671. end = toFinite(end);
  13672. }
  13673. step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);
  13674. return baseRange(start, end, step, fromRight);
  13675. };
  13676. }
  13677. /**
  13678. * Creates a function that performs a relational operation on two values.
  13679. *
  13680. * @private
  13681. * @param {Function} operator The function to perform the operation.
  13682. * @returns {Function} Returns the new relational operation function.
  13683. */
  13684. function createRelationalOperation(operator) {
  13685. return function(value, other) {
  13686. if (!(typeof value == 'string' && typeof other == 'string')) {
  13687. value = toNumber(value);
  13688. other = toNumber(other);
  13689. }
  13690. return operator(value, other);
  13691. };
  13692. }
  13693. /**
  13694. * Creates a function that wraps `func` to continue currying.
  13695. *
  13696. * @private
  13697. * @param {Function} func The function to wrap.
  13698. * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
  13699. * @param {Function} wrapFunc The function to create the `func` wrapper.
  13700. * @param {*} placeholder The placeholder value.
  13701. * @param {*} [thisArg] The `this` binding of `func`.
  13702. * @param {Array} [partials] The arguments to prepend to those provided to
  13703. * the new function.
  13704. * @param {Array} [holders] The `partials` placeholder indexes.
  13705. * @param {Array} [argPos] The argument positions of the new function.
  13706. * @param {number} [ary] The arity cap of `func`.
  13707. * @param {number} [arity] The arity of `func`.
  13708. * @returns {Function} Returns the new wrapped function.
  13709. */
  13710. function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {
  13711. var isCurry = bitmask & WRAP_CURRY_FLAG,
  13712. newHolders = isCurry ? holders : undefined,
  13713. newHoldersRight = isCurry ? undefined : holders,
  13714. newPartials = isCurry ? partials : undefined,
  13715. newPartialsRight = isCurry ? undefined : partials;
  13716. bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);
  13717. bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);
  13718. if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {
  13719. bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);
  13720. }
  13721. var newData = [
  13722. func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,
  13723. newHoldersRight, argPos, ary, arity
  13724. ];
  13725. var result = wrapFunc.apply(undefined, newData);
  13726. if (isLaziable(func)) {
  13727. setData(result, newData);
  13728. }
  13729. result.placeholder = placeholder;
  13730. return setWrapToString(result, func, bitmask);
  13731. }
  13732. /**
  13733. * Creates a function like `_.round`.
  13734. *
  13735. * @private
  13736. * @param {string} methodName The name of the `Math` method to use when rounding.
  13737. * @returns {Function} Returns the new round function.
  13738. */
  13739. function createRound(methodName) {
  13740. var func = Math[methodName];
  13741. return function(number, precision) {
  13742. number = toNumber(number);
  13743. precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);
  13744. if (precision) {
  13745. // Shift with exponential notation to avoid floating-point issues.
  13746. // See [MDN](https://mdn.io/round#Examples) for more details.
  13747. var pair = (toString(number) + 'e').split('e'),
  13748. value = func(pair[0] + 'e' + (+pair[1] + precision));
  13749. pair = (toString(value) + 'e').split('e');
  13750. return +(pair[0] + 'e' + (+pair[1] - precision));
  13751. }
  13752. return func(number);
  13753. };
  13754. }
  13755. /**
  13756. * Creates a set object of `values`.
  13757. *
  13758. * @private
  13759. * @param {Array} values The values to add to the set.
  13760. * @returns {Object} Returns the new set.
  13761. */
  13762. var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {
  13763. return new Set(values);
  13764. };
  13765. /**
  13766. * Creates a `_.toPairs` or `_.toPairsIn` function.
  13767. *
  13768. * @private
  13769. * @param {Function} keysFunc The function to get the keys of a given object.
  13770. * @returns {Function} Returns the new pairs function.
  13771. */
  13772. function createToPairs(keysFunc) {
  13773. return function(object) {
  13774. var tag = getTag(object);
  13775. if (tag == mapTag) {
  13776. return mapToArray(object);
  13777. }
  13778. if (tag == setTag) {
  13779. return setToPairs(object);
  13780. }
  13781. return baseToPairs(object, keysFunc(object));
  13782. };
  13783. }
  13784. /**
  13785. * Creates a function that either curries or invokes `func` with optional
  13786. * `this` binding and partially applied arguments.
  13787. *
  13788. * @private
  13789. * @param {Function|string} func The function or method name to wrap.
  13790. * @param {number} bitmask The bitmask flags.
  13791. * 1 - `_.bind`
  13792. * 2 - `_.bindKey`
  13793. * 4 - `_.curry` or `_.curryRight` of a bound function
  13794. * 8 - `_.curry`
  13795. * 16 - `_.curryRight`
  13796. * 32 - `_.partial`
  13797. * 64 - `_.partialRight`
  13798. * 128 - `_.rearg`
  13799. * 256 - `_.ary`
  13800. * 512 - `_.flip`
  13801. * @param {*} [thisArg] The `this` binding of `func`.
  13802. * @param {Array} [partials] The arguments to be partially applied.
  13803. * @param {Array} [holders] The `partials` placeholder indexes.
  13804. * @param {Array} [argPos] The argument positions of the new function.
  13805. * @param {number} [ary] The arity cap of `func`.
  13806. * @param {number} [arity] The arity of `func`.
  13807. * @returns {Function} Returns the new wrapped function.
  13808. */
  13809. function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {
  13810. var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;
  13811. if (!isBindKey && typeof func != 'function') {
  13812. throw new TypeError(FUNC_ERROR_TEXT);
  13813. }
  13814. var length = partials ? partials.length : 0;
  13815. if (!length) {
  13816. bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);
  13817. partials = holders = undefined;
  13818. }
  13819. ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);
  13820. arity = arity === undefined ? arity : toInteger(arity);
  13821. length -= holders ? holders.length : 0;
  13822. if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {
  13823. var partialsRight = partials,
  13824. holdersRight = holders;
  13825. partials = holders = undefined;
  13826. }
  13827. var data = isBindKey ? undefined : getData(func);
  13828. var newData = [
  13829. func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,
  13830. argPos, ary, arity
  13831. ];
  13832. if (data) {
  13833. mergeData(newData, data);
  13834. }
  13835. func = newData[0];
  13836. bitmask = newData[1];
  13837. thisArg = newData[2];
  13838. partials = newData[3];
  13839. holders = newData[4];
  13840. arity = newData[9] = newData[9] === undefined
  13841. ? (isBindKey ? 0 : func.length)
  13842. : nativeMax(newData[9] - length, 0);
  13843. if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {
  13844. bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);
  13845. }
  13846. if (!bitmask || bitmask == WRAP_BIND_FLAG) {
  13847. var result = createBind(func, bitmask, thisArg);
  13848. } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {
  13849. result = createCurry(func, bitmask, arity);
  13850. } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {
  13851. result = createPartial(func, bitmask, thisArg, partials);
  13852. } else {
  13853. result = createHybrid.apply(undefined, newData);
  13854. }
  13855. var setter = data ? baseSetData : setData;
  13856. return setWrapToString(setter(result, newData), func, bitmask);
  13857. }
  13858. /**
  13859. * Used by `_.defaults` to customize its `_.assignIn` use to assign properties
  13860. * of source objects to the destination object for all destination properties
  13861. * that resolve to `undefined`.
  13862. *
  13863. * @private
  13864. * @param {*} objValue The destination value.
  13865. * @param {*} srcValue The source value.
  13866. * @param {string} key The key of the property to assign.
  13867. * @param {Object} object The parent object of `objValue`.
  13868. * @returns {*} Returns the value to assign.
  13869. */
  13870. function customDefaultsAssignIn(objValue, srcValue, key, object) {
  13871. if (objValue === undefined ||
  13872. (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {
  13873. return srcValue;
  13874. }
  13875. return objValue;
  13876. }
  13877. /**
  13878. * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source
  13879. * objects into destination objects that are passed thru.
  13880. *
  13881. * @private
  13882. * @param {*} objValue The destination value.
  13883. * @param {*} srcValue The source value.
  13884. * @param {string} key The key of the property to merge.
  13885. * @param {Object} object The parent object of `objValue`.
  13886. * @param {Object} source The parent object of `srcValue`.
  13887. * @param {Object} [stack] Tracks traversed source values and their merged
  13888. * counterparts.
  13889. * @returns {*} Returns the value to assign.
  13890. */
  13891. function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {
  13892. if (isObject(objValue) && isObject(srcValue)) {
  13893. // Recursively merge objects and arrays (susceptible to call stack limits).
  13894. stack.set(srcValue, objValue);
  13895. baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);
  13896. stack['delete'](srcValue);
  13897. }
  13898. return objValue;
  13899. }
  13900. /**
  13901. * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain
  13902. * objects.
  13903. *
  13904. * @private
  13905. * @param {*} value The value to inspect.
  13906. * @param {string} key The key of the property to inspect.
  13907. * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.
  13908. */
  13909. function customOmitClone(value) {
  13910. return isPlainObject(value) ? undefined : value;
  13911. }
  13912. /**
  13913. * A specialized version of `baseIsEqualDeep` for arrays with support for
  13914. * partial deep comparisons.
  13915. *
  13916. * @private
  13917. * @param {Array} array The array to compare.
  13918. * @param {Array} other The other array to compare.
  13919. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
  13920. * @param {Function} customizer The function to customize comparisons.
  13921. * @param {Function} equalFunc The function to determine equivalents of values.
  13922. * @param {Object} stack Tracks traversed `array` and `other` objects.
  13923. * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
  13924. */
  13925. function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
  13926. var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
  13927. arrLength = array.length,
  13928. othLength = other.length;
  13929. if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
  13930. return false;
  13931. }
  13932. // Assume cyclic values are equal.
  13933. var stacked = stack.get(array);
  13934. if (stacked && stack.get(other)) {
  13935. return stacked == other;
  13936. }
  13937. var index = -1,
  13938. result = true,
  13939. seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;
  13940. stack.set(array, other);
  13941. stack.set(other, array);
  13942. // Ignore non-index properties.
  13943. while (++index < arrLength) {
  13944. var arrValue = array[index],
  13945. othValue = other[index];
  13946. if (customizer) {
  13947. var compared = isPartial
  13948. ? customizer(othValue, arrValue, index, other, array, stack)
  13949. : customizer(arrValue, othValue, index, array, other, stack);
  13950. }
  13951. if (compared !== undefined) {
  13952. if (compared) {
  13953. continue;
  13954. }
  13955. result = false;
  13956. break;
  13957. }
  13958. // Recursively compare arrays (susceptible to call stack limits).
  13959. if (seen) {
  13960. if (!arraySome(other, function(othValue, othIndex) {
  13961. if (!cacheHas(seen, othIndex) &&
  13962. (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
  13963. return seen.push(othIndex);
  13964. }
  13965. })) {
  13966. result = false;
  13967. break;
  13968. }
  13969. } else if (!(
  13970. arrValue === othValue ||
  13971. equalFunc(arrValue, othValue, bitmask, customizer, stack)
  13972. )) {
  13973. result = false;
  13974. break;
  13975. }
  13976. }
  13977. stack['delete'](array);
  13978. stack['delete'](other);
  13979. return result;
  13980. }
  13981. /**
  13982. * A specialized version of `baseIsEqualDeep` for comparing objects of
  13983. * the same `toStringTag`.
  13984. *
  13985. * **Note:** This function only supports comparing values with tags of
  13986. * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
  13987. *
  13988. * @private
  13989. * @param {Object} object The object to compare.
  13990. * @param {Object} other The other object to compare.
  13991. * @param {string} tag The `toStringTag` of the objects to compare.
  13992. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
  13993. * @param {Function} customizer The function to customize comparisons.
  13994. * @param {Function} equalFunc The function to determine equivalents of values.
  13995. * @param {Object} stack Tracks traversed `object` and `other` objects.
  13996. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
  13997. */
  13998. function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
  13999. switch (tag) {
  14000. case dataViewTag:
  14001. if ((object.byteLength != other.byteLength) ||
  14002. (object.byteOffset != other.byteOffset)) {
  14003. return false;
  14004. }
  14005. object = object.buffer;
  14006. other = other.buffer;
  14007. case arrayBufferTag:
  14008. if ((object.byteLength != other.byteLength) ||
  14009. !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
  14010. return false;
  14011. }
  14012. return true;
  14013. case boolTag:
  14014. case dateTag:
  14015. case numberTag:
  14016. // Coerce booleans to `1` or `0` and dates to milliseconds.
  14017. // Invalid dates are coerced to `NaN`.
  14018. return eq(+object, +other);
  14019. case errorTag:
  14020. return object.name == other.name && object.message == other.message;
  14021. case regexpTag:
  14022. case stringTag:
  14023. // Coerce regexes to strings and treat strings, primitives and objects,
  14024. // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
  14025. // for more details.
  14026. return object == (other + '');
  14027. case mapTag:
  14028. var convert = mapToArray;
  14029. case setTag:
  14030. var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
  14031. convert || (convert = setToArray);
  14032. if (object.size != other.size && !isPartial) {
  14033. return false;
  14034. }
  14035. // Assume cyclic values are equal.
  14036. var stacked = stack.get(object);
  14037. if (stacked) {
  14038. return stacked == other;
  14039. }
  14040. bitmask |= COMPARE_UNORDERED_FLAG;
  14041. // Recursively compare objects (susceptible to call stack limits).
  14042. stack.set(object, other);
  14043. var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
  14044. stack['delete'](object);
  14045. return result;
  14046. case symbolTag:
  14047. if (symbolValueOf) {
  14048. return symbolValueOf.call(object) == symbolValueOf.call(other);
  14049. }
  14050. }
  14051. return false;
  14052. }
  14053. /**
  14054. * A specialized version of `baseIsEqualDeep` for objects with support for
  14055. * partial deep comparisons.
  14056. *
  14057. * @private
  14058. * @param {Object} object The object to compare.
  14059. * @param {Object} other The other object to compare.
  14060. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
  14061. * @param {Function} customizer The function to customize comparisons.
  14062. * @param {Function} equalFunc The function to determine equivalents of values.
  14063. * @param {Object} stack Tracks traversed `object` and `other` objects.
  14064. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
  14065. */
  14066. function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
  14067. var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
  14068. objProps = getAllKeys(object),
  14069. objLength = objProps.length,
  14070. othProps = getAllKeys(other),
  14071. othLength = othProps.length;
  14072. if (objLength != othLength && !isPartial) {
  14073. return false;
  14074. }
  14075. var index = objLength;
  14076. while (index--) {
  14077. var key = objProps[index];
  14078. if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
  14079. return false;
  14080. }
  14081. }
  14082. // Assume cyclic values are equal.
  14083. var stacked = stack.get(object);
  14084. if (stacked && stack.get(other)) {
  14085. return stacked == other;
  14086. }
  14087. var result = true;
  14088. stack.set(object, other);
  14089. stack.set(other, object);
  14090. var skipCtor = isPartial;
  14091. while (++index < objLength) {
  14092. key = objProps[index];
  14093. var objValue = object[key],
  14094. othValue = other[key];
  14095. if (customizer) {
  14096. var compared = isPartial
  14097. ? customizer(othValue, objValue, key, other, object, stack)
  14098. : customizer(objValue, othValue, key, object, other, stack);
  14099. }
  14100. // Recursively compare objects (susceptible to call stack limits).
  14101. if (!(compared === undefined
  14102. ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
  14103. : compared
  14104. )) {
  14105. result = false;
  14106. break;
  14107. }
  14108. skipCtor || (skipCtor = key == 'constructor');
  14109. }
  14110. if (result && !skipCtor) {
  14111. var objCtor = object.constructor,
  14112. othCtor = other.constructor;
  14113. // Non `Object` object instances with different constructors are not equal.
  14114. if (objCtor != othCtor &&
  14115. ('constructor' in object && 'constructor' in other) &&
  14116. !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
  14117. typeof othCtor == 'function' && othCtor instanceof othCtor)) {
  14118. result = false;
  14119. }
  14120. }
  14121. stack['delete'](object);
  14122. stack['delete'](other);
  14123. return result;
  14124. }
  14125. /**
  14126. * A specialized version of `baseRest` which flattens the rest array.
  14127. *
  14128. * @private
  14129. * @param {Function} func The function to apply a rest parameter to.
  14130. * @returns {Function} Returns the new function.
  14131. */
  14132. function flatRest(func) {
  14133. return setToString(overRest(func, undefined, flatten), func + '');
  14134. }
  14135. /**
  14136. * Creates an array of own enumerable property names and symbols of `object`.
  14137. *
  14138. * @private
  14139. * @param {Object} object The object to query.
  14140. * @returns {Array} Returns the array of property names and symbols.
  14141. */
  14142. function getAllKeys(object) {
  14143. return baseGetAllKeys(object, keys, getSymbols);
  14144. }
  14145. /**
  14146. * Creates an array of own and inherited enumerable property names and
  14147. * symbols of `object`.
  14148. *
  14149. * @private
  14150. * @param {Object} object The object to query.
  14151. * @returns {Array} Returns the array of property names and symbols.
  14152. */
  14153. function getAllKeysIn(object) {
  14154. return baseGetAllKeys(object, keysIn, getSymbolsIn);
  14155. }
  14156. /**
  14157. * Gets metadata for `func`.
  14158. *
  14159. * @private
  14160. * @param {Function} func The function to query.
  14161. * @returns {*} Returns the metadata for `func`.
  14162. */
  14163. var getData = !metaMap ? noop : function(func) {
  14164. return metaMap.get(func);
  14165. };
  14166. /**
  14167. * Gets the name of `func`.
  14168. *
  14169. * @private
  14170. * @param {Function} func The function to query.
  14171. * @returns {string} Returns the function name.
  14172. */
  14173. function getFuncName(func) {
  14174. var result = (func.name + ''),
  14175. array = realNames[result],
  14176. length = hasOwnProperty.call(realNames, result) ? array.length : 0;
  14177. while (length--) {
  14178. var data = array[length],
  14179. otherFunc = data.func;
  14180. if (otherFunc == null || otherFunc == func) {
  14181. return data.name;
  14182. }
  14183. }
  14184. return result;
  14185. }
  14186. /**
  14187. * Gets the argument placeholder value for `func`.
  14188. *
  14189. * @private
  14190. * @param {Function} func The function to inspect.
  14191. * @returns {*} Returns the placeholder value.
  14192. */
  14193. function getHolder(func) {
  14194. var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;
  14195. return object.placeholder;
  14196. }
  14197. /**
  14198. * Gets the appropriate "iteratee" function. If `_.iteratee` is customized,
  14199. * this function returns the custom method, otherwise it returns `baseIteratee`.
  14200. * If arguments are provided, the chosen function is invoked with them and
  14201. * its result is returned.
  14202. *
  14203. * @private
  14204. * @param {*} [value] The value to convert to an iteratee.
  14205. * @param {number} [arity] The arity of the created iteratee.
  14206. * @returns {Function} Returns the chosen function or its result.
  14207. */
  14208. function getIteratee() {
  14209. var result = lodash.iteratee || iteratee;
  14210. result = result === iteratee ? baseIteratee : result;
  14211. return arguments.length ? result(arguments[0], arguments[1]) : result;
  14212. }
  14213. /**
  14214. * Gets the data for `map`.
  14215. *
  14216. * @private
  14217. * @param {Object} map The map to query.
  14218. * @param {string} key The reference key.
  14219. * @returns {*} Returns the map data.
  14220. */
  14221. function getMapData(map, key) {
  14222. var data = map.__data__;
  14223. return isKeyable(key)
  14224. ? data[typeof key == 'string' ? 'string' : 'hash']
  14225. : data.map;
  14226. }
  14227. /**
  14228. * Gets the property names, values, and compare flags of `object`.
  14229. *
  14230. * @private
  14231. * @param {Object} object The object to query.
  14232. * @returns {Array} Returns the match data of `object`.
  14233. */
  14234. function getMatchData(object) {
  14235. var result = keys(object),
  14236. length = result.length;
  14237. while (length--) {
  14238. var key = result[length],
  14239. value = object[key];
  14240. result[length] = [key, value, isStrictComparable(value)];
  14241. }
  14242. return result;
  14243. }
  14244. /**
  14245. * Gets the native function at `key` of `object`.
  14246. *
  14247. * @private
  14248. * @param {Object} object The object to query.
  14249. * @param {string} key The key of the method to get.
  14250. * @returns {*} Returns the function if it's native, else `undefined`.
  14251. */
  14252. function getNative(object, key) {
  14253. var value = getValue(object, key);
  14254. return baseIsNative(value) ? value : undefined;
  14255. }
  14256. /**
  14257. * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
  14258. *
  14259. * @private
  14260. * @param {*} value The value to query.
  14261. * @returns {string} Returns the raw `toStringTag`.
  14262. */
  14263. function getRawTag(value) {
  14264. var isOwn = hasOwnProperty.call(value, symToStringTag),
  14265. tag = value[symToStringTag];
  14266. try {
  14267. value[symToStringTag] = undefined;
  14268. var unmasked = true;
  14269. } catch (e) {}
  14270. var result = nativeObjectToString.call(value);
  14271. if (unmasked) {
  14272. if (isOwn) {
  14273. value[symToStringTag] = tag;
  14274. } else {
  14275. delete value[symToStringTag];
  14276. }
  14277. }
  14278. return result;
  14279. }
  14280. /**
  14281. * Creates an array of the own enumerable symbols of `object`.
  14282. *
  14283. * @private
  14284. * @param {Object} object The object to query.
  14285. * @returns {Array} Returns the array of symbols.
  14286. */
  14287. var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
  14288. if (object == null) {
  14289. return [];
  14290. }
  14291. object = Object(object);
  14292. return arrayFilter(nativeGetSymbols(object), function(symbol) {
  14293. return propertyIsEnumerable.call(object, symbol);
  14294. });
  14295. };
  14296. /**
  14297. * Creates an array of the own and inherited enumerable symbols of `object`.
  14298. *
  14299. * @private
  14300. * @param {Object} object The object to query.
  14301. * @returns {Array} Returns the array of symbols.
  14302. */
  14303. var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {
  14304. var result = [];
  14305. while (object) {
  14306. arrayPush(result, getSymbols(object));
  14307. object = getPrototype(object);
  14308. }
  14309. return result;
  14310. };
  14311. /**
  14312. * Gets the `toStringTag` of `value`.
  14313. *
  14314. * @private
  14315. * @param {*} value The value to query.
  14316. * @returns {string} Returns the `toStringTag`.
  14317. */
  14318. var getTag = baseGetTag;
  14319. // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
  14320. if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
  14321. (Map && getTag(new Map) != mapTag) ||
  14322. (Promise && getTag(Promise.resolve()) != promiseTag) ||
  14323. (Set && getTag(new Set) != setTag) ||
  14324. (WeakMap && getTag(new WeakMap) != weakMapTag)) {
  14325. getTag = function(value) {
  14326. var result = baseGetTag(value),
  14327. Ctor = result == objectTag ? value.constructor : undefined,
  14328. ctorString = Ctor ? toSource(Ctor) : '';
  14329. if (ctorString) {
  14330. switch (ctorString) {
  14331. case dataViewCtorString: return dataViewTag;
  14332. case mapCtorString: return mapTag;
  14333. case promiseCtorString: return promiseTag;
  14334. case setCtorString: return setTag;
  14335. case weakMapCtorString: return weakMapTag;
  14336. }
  14337. }
  14338. return result;
  14339. };
  14340. }
  14341. /**
  14342. * Gets the view, applying any `transforms` to the `start` and `end` positions.
  14343. *
  14344. * @private
  14345. * @param {number} start The start of the view.
  14346. * @param {number} end The end of the view.
  14347. * @param {Array} transforms The transformations to apply to the view.
  14348. * @returns {Object} Returns an object containing the `start` and `end`
  14349. * positions of the view.
  14350. */
  14351. function getView(start, end, transforms) {
  14352. var index = -1,
  14353. length = transforms.length;
  14354. while (++index < length) {
  14355. var data = transforms[index],
  14356. size = data.size;
  14357. switch (data.type) {
  14358. case 'drop': start += size; break;
  14359. case 'dropRight': end -= size; break;
  14360. case 'take': end = nativeMin(end, start + size); break;
  14361. case 'takeRight': start = nativeMax(start, end - size); break;
  14362. }
  14363. }
  14364. return { 'start': start, 'end': end };
  14365. }
  14366. /**
  14367. * Extracts wrapper details from the `source` body comment.
  14368. *
  14369. * @private
  14370. * @param {string} source The source to inspect.
  14371. * @returns {Array} Returns the wrapper details.
  14372. */
  14373. function getWrapDetails(source) {
  14374. var match = source.match(reWrapDetails);
  14375. return match ? match[1].split(reSplitDetails) : [];
  14376. }
  14377. /**
  14378. * Checks if `path` exists on `object`.
  14379. *
  14380. * @private
  14381. * @param {Object} object The object to query.
  14382. * @param {Array|string} path The path to check.
  14383. * @param {Function} hasFunc The function to check properties.
  14384. * @returns {boolean} Returns `true` if `path` exists, else `false`.
  14385. */
  14386. function hasPath(object, path, hasFunc) {
  14387. path = castPath(path, object);
  14388. var index = -1,
  14389. length = path.length,
  14390. result = false;
  14391. while (++index < length) {
  14392. var key = toKey(path[index]);
  14393. if (!(result = object != null && hasFunc(object, key))) {
  14394. break;
  14395. }
  14396. object = object[key];
  14397. }
  14398. if (result || ++index != length) {
  14399. return result;
  14400. }
  14401. length = object == null ? 0 : object.length;
  14402. return !!length && isLength(length) && isIndex(key, length) &&
  14403. (isArray(object) || isArguments(object));
  14404. }
  14405. /**
  14406. * Initializes an array clone.
  14407. *
  14408. * @private
  14409. * @param {Array} array The array to clone.
  14410. * @returns {Array} Returns the initialized clone.
  14411. */
  14412. function initCloneArray(array) {
  14413. var length = array.length,
  14414. result = new array.constructor(length);
  14415. // Add properties assigned by `RegExp#exec`.
  14416. if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
  14417. result.index = array.index;
  14418. result.input = array.input;
  14419. }
  14420. return result;
  14421. }
  14422. /**
  14423. * Initializes an object clone.
  14424. *
  14425. * @private
  14426. * @param {Object} object The object to clone.
  14427. * @returns {Object} Returns the initialized clone.
  14428. */
  14429. function initCloneObject(object) {
  14430. return (typeof object.constructor == 'function' && !isPrototype(object))
  14431. ? baseCreate(getPrototype(object))
  14432. : {};
  14433. }
  14434. /**
  14435. * Initializes an object clone based on its `toStringTag`.
  14436. *
  14437. * **Note:** This function only supports cloning values with tags of
  14438. * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.
  14439. *
  14440. * @private
  14441. * @param {Object} object The object to clone.
  14442. * @param {string} tag The `toStringTag` of the object to clone.
  14443. * @param {boolean} [isDeep] Specify a deep clone.
  14444. * @returns {Object} Returns the initialized clone.
  14445. */
  14446. function initCloneByTag(object, tag, isDeep) {
  14447. var Ctor = object.constructor;
  14448. switch (tag) {
  14449. case arrayBufferTag:
  14450. return cloneArrayBuffer(object);
  14451. case boolTag:
  14452. case dateTag:
  14453. return new Ctor(+object);
  14454. case dataViewTag:
  14455. return cloneDataView(object, isDeep);
  14456. case float32Tag: case float64Tag:
  14457. case int8Tag: case int16Tag: case int32Tag:
  14458. case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
  14459. return cloneTypedArray(object, isDeep);
  14460. case mapTag:
  14461. return new Ctor;
  14462. case numberTag:
  14463. case stringTag:
  14464. return new Ctor(object);
  14465. case regexpTag:
  14466. return cloneRegExp(object);
  14467. case setTag:
  14468. return new Ctor;
  14469. case symbolTag:
  14470. return cloneSymbol(object);
  14471. }
  14472. }
  14473. /**
  14474. * Inserts wrapper `details` in a comment at the top of the `source` body.
  14475. *
  14476. * @private
  14477. * @param {string} source The source to modify.
  14478. * @returns {Array} details The details to insert.
  14479. * @returns {string} Returns the modified source.
  14480. */
  14481. function insertWrapDetails(source, details) {
  14482. var length = details.length;
  14483. if (!length) {
  14484. return source;
  14485. }
  14486. var lastIndex = length - 1;
  14487. details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];
  14488. details = details.join(length > 2 ? ', ' : ' ');
  14489. return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n');
  14490. }
  14491. /**
  14492. * Checks if `value` is a flattenable `arguments` object or array.
  14493. *
  14494. * @private
  14495. * @param {*} value The value to check.
  14496. * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.
  14497. */
  14498. function isFlattenable(value) {
  14499. return isArray(value) || isArguments(value) ||
  14500. !!(spreadableSymbol && value && value[spreadableSymbol]);
  14501. }
  14502. /**
  14503. * Checks if `value` is a valid array-like index.
  14504. *
  14505. * @private
  14506. * @param {*} value The value to check.
  14507. * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
  14508. * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
  14509. */
  14510. function isIndex(value, length) {
  14511. var type = typeof value;
  14512. length = length == null ? MAX_SAFE_INTEGER : length;
  14513. return !!length &&
  14514. (type == 'number' ||
  14515. (type != 'symbol' && reIsUint.test(value))) &&
  14516. (value > -1 && value % 1 == 0 && value < length);
  14517. }
  14518. /**
  14519. * Checks if the given arguments are from an iteratee call.
  14520. *
  14521. * @private
  14522. * @param {*} value The potential iteratee value argument.
  14523. * @param {*} index The potential iteratee index or key argument.
  14524. * @param {*} object The potential iteratee object argument.
  14525. * @returns {boolean} Returns `true` if the arguments are from an iteratee call,
  14526. * else `false`.
  14527. */
  14528. function isIterateeCall(value, index, object) {
  14529. if (!isObject(object)) {
  14530. return false;
  14531. }
  14532. var type = typeof index;
  14533. if (type == 'number'
  14534. ? (isArrayLike(object) && isIndex(index, object.length))
  14535. : (type == 'string' && index in object)
  14536. ) {
  14537. return eq(object[index], value);
  14538. }
  14539. return false;
  14540. }
  14541. /**
  14542. * Checks if `value` is a property name and not a property path.
  14543. *
  14544. * @private
  14545. * @param {*} value The value to check.
  14546. * @param {Object} [object] The object to query keys on.
  14547. * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
  14548. */
  14549. function isKey(value, object) {
  14550. if (isArray(value)) {
  14551. return false;
  14552. }
  14553. var type = typeof value;
  14554. if (type == 'number' || type == 'symbol' || type == 'boolean' ||
  14555. value == null || isSymbol(value)) {
  14556. return true;
  14557. }
  14558. return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
  14559. (object != null && value in Object(object));
  14560. }
  14561. /**
  14562. * Checks if `value` is suitable for use as unique object key.
  14563. *
  14564. * @private
  14565. * @param {*} value The value to check.
  14566. * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
  14567. */
  14568. function isKeyable(value) {
  14569. var type = typeof value;
  14570. return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
  14571. ? (value !== '__proto__')
  14572. : (value === null);
  14573. }
  14574. /**
  14575. * Checks if `func` has a lazy counterpart.
  14576. *
  14577. * @private
  14578. * @param {Function} func The function to check.
  14579. * @returns {boolean} Returns `true` if `func` has a lazy counterpart,
  14580. * else `false`.
  14581. */
  14582. function isLaziable(func) {
  14583. var funcName = getFuncName(func),
  14584. other = lodash[funcName];
  14585. if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {
  14586. return false;
  14587. }
  14588. if (func === other) {
  14589. return true;
  14590. }
  14591. var data = getData(other);
  14592. return !!data && func === data[0];
  14593. }
  14594. /**
  14595. * Checks if `func` has its source masked.
  14596. *
  14597. * @private
  14598. * @param {Function} func The function to check.
  14599. * @returns {boolean} Returns `true` if `func` is masked, else `false`.
  14600. */
  14601. function isMasked(func) {
  14602. return !!maskSrcKey && (maskSrcKey in func);
  14603. }
  14604. /**
  14605. * Checks if `func` is capable of being masked.
  14606. *
  14607. * @private
  14608. * @param {*} value The value to check.
  14609. * @returns {boolean} Returns `true` if `func` is maskable, else `false`.
  14610. */
  14611. var isMaskable = coreJsData ? isFunction : stubFalse;
  14612. /**
  14613. * Checks if `value` is likely a prototype object.
  14614. *
  14615. * @private
  14616. * @param {*} value The value to check.
  14617. * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
  14618. */
  14619. function isPrototype(value) {
  14620. var Ctor = value && value.constructor,
  14621. proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
  14622. return value === proto;
  14623. }
  14624. /**
  14625. * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
  14626. *
  14627. * @private
  14628. * @param {*} value The value to check.
  14629. * @returns {boolean} Returns `true` if `value` if suitable for strict
  14630. * equality comparisons, else `false`.
  14631. */
  14632. function isStrictComparable(value) {
  14633. return value === value && !isObject(value);
  14634. }
  14635. /**
  14636. * A specialized version of `matchesProperty` for source values suitable
  14637. * for strict equality comparisons, i.e. `===`.
  14638. *
  14639. * @private
  14640. * @param {string} key The key of the property to get.
  14641. * @param {*} srcValue The value to match.
  14642. * @returns {Function} Returns the new spec function.
  14643. */
  14644. function matchesStrictComparable(key, srcValue) {
  14645. return function(object) {
  14646. if (object == null) {
  14647. return false;
  14648. }
  14649. return object[key] === srcValue &&
  14650. (srcValue !== undefined || (key in Object(object)));
  14651. };
  14652. }
  14653. /**
  14654. * A specialized version of `_.memoize` which clears the memoized function's
  14655. * cache when it exceeds `MAX_MEMOIZE_SIZE`.
  14656. *
  14657. * @private
  14658. * @param {Function} func The function to have its output memoized.
  14659. * @returns {Function} Returns the new memoized function.
  14660. */
  14661. function memoizeCapped(func) {
  14662. var result = memoize(func, function(key) {
  14663. if (cache.size === MAX_MEMOIZE_SIZE) {
  14664. cache.clear();
  14665. }
  14666. return key;
  14667. });
  14668. var cache = result.cache;
  14669. return result;
  14670. }
  14671. /**
  14672. * Merges the function metadata of `source` into `data`.
  14673. *
  14674. * Merging metadata reduces the number of wrappers used to invoke a function.
  14675. * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`
  14676. * may be applied regardless of execution order. Methods like `_.ary` and
  14677. * `_.rearg` modify function arguments, making the order in which they are
  14678. * executed important, preventing the merging of metadata. However, we make
  14679. * an exception for a safe combined case where curried functions have `_.ary`
  14680. * and or `_.rearg` applied.
  14681. *
  14682. * @private
  14683. * @param {Array} data The destination metadata.
  14684. * @param {Array} source The source metadata.
  14685. * @returns {Array} Returns `data`.
  14686. */
  14687. function mergeData(data, source) {
  14688. var bitmask = data[1],
  14689. srcBitmask = source[1],
  14690. newBitmask = bitmask | srcBitmask,
  14691. isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);
  14692. var isCombo =
  14693. ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||
  14694. ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||
  14695. ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));
  14696. // Exit early if metadata can't be merged.
  14697. if (!(isCommon || isCombo)) {
  14698. return data;
  14699. }
  14700. // Use source `thisArg` if available.
  14701. if (srcBitmask & WRAP_BIND_FLAG) {
  14702. data[2] = source[2];
  14703. // Set when currying a bound function.
  14704. newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;
  14705. }
  14706. // Compose partial arguments.
  14707. var value = source[3];
  14708. if (value) {
  14709. var partials = data[3];
  14710. data[3] = partials ? composeArgs(partials, value, source[4]) : value;
  14711. data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];
  14712. }
  14713. // Compose partial right arguments.
  14714. value = source[5];
  14715. if (value) {
  14716. partials = data[5];
  14717. data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;
  14718. data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];
  14719. }
  14720. // Use source `argPos` if available.
  14721. value = source[7];
  14722. if (value) {
  14723. data[7] = value;
  14724. }
  14725. // Use source `ary` if it's smaller.
  14726. if (srcBitmask & WRAP_ARY_FLAG) {
  14727. data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);
  14728. }
  14729. // Use source `arity` if one is not provided.
  14730. if (data[9] == null) {
  14731. data[9] = source[9];
  14732. }
  14733. // Use source `func` and merge bitmasks.
  14734. data[0] = source[0];
  14735. data[1] = newBitmask;
  14736. return data;
  14737. }
  14738. /**
  14739. * This function is like
  14740. * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
  14741. * except that it includes inherited enumerable properties.
  14742. *
  14743. * @private
  14744. * @param {Object} object The object to query.
  14745. * @returns {Array} Returns the array of property names.
  14746. */
  14747. function nativeKeysIn(object) {
  14748. var result = [];
  14749. if (object != null) {
  14750. for (var key in Object(object)) {
  14751. result.push(key);
  14752. }
  14753. }
  14754. return result;
  14755. }
  14756. /**
  14757. * Converts `value` to a string using `Object.prototype.toString`.
  14758. *
  14759. * @private
  14760. * @param {*} value The value to convert.
  14761. * @returns {string} Returns the converted string.
  14762. */
  14763. function objectToString(value) {
  14764. return nativeObjectToString.call(value);
  14765. }
  14766. /**
  14767. * A specialized version of `baseRest` which transforms the rest array.
  14768. *
  14769. * @private
  14770. * @param {Function} func The function to apply a rest parameter to.
  14771. * @param {number} [start=func.length-1] The start position of the rest parameter.
  14772. * @param {Function} transform The rest array transform.
  14773. * @returns {Function} Returns the new function.
  14774. */
  14775. function overRest(func, start, transform) {
  14776. start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
  14777. return function() {
  14778. var args = arguments,
  14779. index = -1,
  14780. length = nativeMax(args.length - start, 0),
  14781. array = Array(length);
  14782. while (++index < length) {
  14783. array[index] = args[start + index];
  14784. }
  14785. index = -1;
  14786. var otherArgs = Array(start + 1);
  14787. while (++index < start) {
  14788. otherArgs[index] = args[index];
  14789. }
  14790. otherArgs[start] = transform(array);
  14791. return apply(func, this, otherArgs);
  14792. };
  14793. }
  14794. /**
  14795. * Gets the parent value at `path` of `object`.
  14796. *
  14797. * @private
  14798. * @param {Object} object The object to query.
  14799. * @param {Array} path The path to get the parent value of.
  14800. * @returns {*} Returns the parent value.
  14801. */
  14802. function parent(object, path) {
  14803. return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));
  14804. }
  14805. /**
  14806. * Reorder `array` according to the specified indexes where the element at
  14807. * the first index is assigned as the first element, the element at
  14808. * the second index is assigned as the second element, and so on.
  14809. *
  14810. * @private
  14811. * @param {Array} array The array to reorder.
  14812. * @param {Array} indexes The arranged array indexes.
  14813. * @returns {Array} Returns `array`.
  14814. */
  14815. function reorder(array, indexes) {
  14816. var arrLength = array.length,
  14817. length = nativeMin(indexes.length, arrLength),
  14818. oldArray = copyArray(array);
  14819. while (length--) {
  14820. var index = indexes[length];
  14821. array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;
  14822. }
  14823. return array;
  14824. }
  14825. /**
  14826. * Gets the value at `key`, unless `key` is "__proto__".
  14827. *
  14828. * @private
  14829. * @param {Object} object The object to query.
  14830. * @param {string} key The key of the property to get.
  14831. * @returns {*} Returns the property value.
  14832. */
  14833. function safeGet(object, key) {
  14834. if (key == '__proto__') {
  14835. return;
  14836. }
  14837. return object[key];
  14838. }
  14839. /**
  14840. * Sets metadata for `func`.
  14841. *
  14842. * **Note:** If this function becomes hot, i.e. is invoked a lot in a short
  14843. * period of time, it will trip its breaker and transition to an identity
  14844. * function to avoid garbage collection pauses in V8. See
  14845. * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)
  14846. * for more details.
  14847. *
  14848. * @private
  14849. * @param {Function} func The function to associate metadata with.
  14850. * @param {*} data The metadata.
  14851. * @returns {Function} Returns `func`.
  14852. */
  14853. var setData = shortOut(baseSetData);
  14854. /**
  14855. * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).
  14856. *
  14857. * @private
  14858. * @param {Function} func The function to delay.
  14859. * @param {number} wait The number of milliseconds to delay invocation.
  14860. * @returns {number|Object} Returns the timer id or timeout object.
  14861. */
  14862. var setTimeout = ctxSetTimeout || function(func, wait) {
  14863. return root.setTimeout(func, wait);
  14864. };
  14865. /**
  14866. * Sets the `toString` method of `func` to return `string`.
  14867. *
  14868. * @private
  14869. * @param {Function} func The function to modify.
  14870. * @param {Function} string The `toString` result.
  14871. * @returns {Function} Returns `func`.
  14872. */
  14873. var setToString = shortOut(baseSetToString);
  14874. /**
  14875. * Sets the `toString` method of `wrapper` to mimic the source of `reference`
  14876. * with wrapper details in a comment at the top of the source body.
  14877. *
  14878. * @private
  14879. * @param {Function} wrapper The function to modify.
  14880. * @param {Function} reference The reference function.
  14881. * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
  14882. * @returns {Function} Returns `wrapper`.
  14883. */
  14884. function setWrapToString(wrapper, reference, bitmask) {
  14885. var source = (reference + '');
  14886. return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));
  14887. }
  14888. /**
  14889. * Creates a function that'll short out and invoke `identity` instead
  14890. * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`
  14891. * milliseconds.
  14892. *
  14893. * @private
  14894. * @param {Function} func The function to restrict.
  14895. * @returns {Function} Returns the new shortable function.
  14896. */
  14897. function shortOut(func) {
  14898. var count = 0,
  14899. lastCalled = 0;
  14900. return function() {
  14901. var stamp = nativeNow(),
  14902. remaining = HOT_SPAN - (stamp - lastCalled);
  14903. lastCalled = stamp;
  14904. if (remaining > 0) {
  14905. if (++count >= HOT_COUNT) {
  14906. return arguments[0];
  14907. }
  14908. } else {
  14909. count = 0;
  14910. }
  14911. return func.apply(undefined, arguments);
  14912. };
  14913. }
  14914. /**
  14915. * A specialized version of `_.shuffle` which mutates and sets the size of `array`.
  14916. *
  14917. * @private
  14918. * @param {Array} array The array to shuffle.
  14919. * @param {number} [size=array.length] The size of `array`.
  14920. * @returns {Array} Returns `array`.
  14921. */
  14922. function shuffleSelf(array, size) {
  14923. var index = -1,
  14924. length = array.length,
  14925. lastIndex = length - 1;
  14926. size = size === undefined ? length : size;
  14927. while (++index < size) {
  14928. var rand = baseRandom(index, lastIndex),
  14929. value = array[rand];
  14930. array[rand] = array[index];
  14931. array[index] = value;
  14932. }
  14933. array.length = size;
  14934. return array;
  14935. }
  14936. /**
  14937. * Converts `string` to a property path array.
  14938. *
  14939. * @private
  14940. * @param {string} string The string to convert.
  14941. * @returns {Array} Returns the property path array.
  14942. */
  14943. var stringToPath = memoizeCapped(function(string) {
  14944. var result = [];
  14945. if (string.charCodeAt(0) === 46 /* . */) {
  14946. result.push('');
  14947. }
  14948. string.replace(rePropName, function(match, number, quote, subString) {
  14949. result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));
  14950. });
  14951. return result;
  14952. });
  14953. /**
  14954. * Converts `value` to a string key if it's not a string or symbol.
  14955. *
  14956. * @private
  14957. * @param {*} value The value to inspect.
  14958. * @returns {string|symbol} Returns the key.
  14959. */
  14960. function toKey(value) {
  14961. if (typeof value == 'string' || isSymbol(value)) {
  14962. return value;
  14963. }
  14964. var result = (value + '');
  14965. return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
  14966. }
  14967. /**
  14968. * Converts `func` to its source code.
  14969. *
  14970. * @private
  14971. * @param {Function} func The function to convert.
  14972. * @returns {string} Returns the source code.
  14973. */
  14974. function toSource(func) {
  14975. if (func != null) {
  14976. try {
  14977. return funcToString.call(func);
  14978. } catch (e) {}
  14979. try {
  14980. return (func + '');
  14981. } catch (e) {}
  14982. }
  14983. return '';
  14984. }
  14985. /**
  14986. * Updates wrapper `details` based on `bitmask` flags.
  14987. *
  14988. * @private
  14989. * @returns {Array} details The details to modify.
  14990. * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
  14991. * @returns {Array} Returns `details`.
  14992. */
  14993. function updateWrapDetails(details, bitmask) {
  14994. arrayEach(wrapFlags, function(pair) {
  14995. var value = '_.' + pair[0];
  14996. if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {
  14997. details.push(value);
  14998. }
  14999. });
  15000. return details.sort();
  15001. }
  15002. /**
  15003. * Creates a clone of `wrapper`.
  15004. *
  15005. * @private
  15006. * @param {Object} wrapper The wrapper to clone.
  15007. * @returns {Object} Returns the cloned wrapper.
  15008. */
  15009. function wrapperClone(wrapper) {
  15010. if (wrapper instanceof LazyWrapper) {
  15011. return wrapper.clone();
  15012. }
  15013. var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);
  15014. result.__actions__ = copyArray(wrapper.__actions__);
  15015. result.__index__ = wrapper.__index__;
  15016. result.__values__ = wrapper.__values__;
  15017. return result;
  15018. }
  15019. /*------------------------------------------------------------------------*/
  15020. /**
  15021. * Creates an array of elements split into groups the length of `size`.
  15022. * If `array` can't be split evenly, the final chunk will be the remaining
  15023. * elements.
  15024. *
  15025. * @static
  15026. * @memberOf _
  15027. * @since 3.0.0
  15028. * @category Array
  15029. * @param {Array} array The array to process.
  15030. * @param {number} [size=1] The length of each chunk
  15031. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  15032. * @returns {Array} Returns the new array of chunks.
  15033. * @example
  15034. *
  15035. * _.chunk(['a', 'b', 'c', 'd'], 2);
  15036. * // => [['a', 'b'], ['c', 'd']]
  15037. *
  15038. * _.chunk(['a', 'b', 'c', 'd'], 3);
  15039. * // => [['a', 'b', 'c'], ['d']]
  15040. */
  15041. function chunk(array, size, guard) {
  15042. if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {
  15043. size = 1;
  15044. } else {
  15045. size = nativeMax(toInteger(size), 0);
  15046. }
  15047. var length = array == null ? 0 : array.length;
  15048. if (!length || size < 1) {
  15049. return [];
  15050. }
  15051. var index = 0,
  15052. resIndex = 0,
  15053. result = Array(nativeCeil(length / size));
  15054. while (index < length) {
  15055. result[resIndex++] = baseSlice(array, index, (index += size));
  15056. }
  15057. return result;
  15058. }
  15059. /**
  15060. * Creates an array with all falsey values removed. The values `false`, `null`,
  15061. * `0`, `""`, `undefined`, and `NaN` are falsey.
  15062. *
  15063. * @static
  15064. * @memberOf _
  15065. * @since 0.1.0
  15066. * @category Array
  15067. * @param {Array} array The array to compact.
  15068. * @returns {Array} Returns the new array of filtered values.
  15069. * @example
  15070. *
  15071. * _.compact([0, 1, false, 2, '', 3]);
  15072. * // => [1, 2, 3]
  15073. */
  15074. function compact(array) {
  15075. var index = -1,
  15076. length = array == null ? 0 : array.length,
  15077. resIndex = 0,
  15078. result = [];
  15079. while (++index < length) {
  15080. var value = array[index];
  15081. if (value) {
  15082. result[resIndex++] = value;
  15083. }
  15084. }
  15085. return result;
  15086. }
  15087. /**
  15088. * Creates a new array concatenating `array` with any additional arrays
  15089. * and/or values.
  15090. *
  15091. * @static
  15092. * @memberOf _
  15093. * @since 4.0.0
  15094. * @category Array
  15095. * @param {Array} array The array to concatenate.
  15096. * @param {...*} [values] The values to concatenate.
  15097. * @returns {Array} Returns the new concatenated array.
  15098. * @example
  15099. *
  15100. * var array = [1];
  15101. * var other = _.concat(array, 2, [3], [[4]]);
  15102. *
  15103. * console.log(other);
  15104. * // => [1, 2, 3, [4]]
  15105. *
  15106. * console.log(array);
  15107. * // => [1]
  15108. */
  15109. function concat() {
  15110. var length = arguments.length;
  15111. if (!length) {
  15112. return [];
  15113. }
  15114. var args = Array(length - 1),
  15115. array = arguments[0],
  15116. index = length;
  15117. while (index--) {
  15118. args[index - 1] = arguments[index];
  15119. }
  15120. return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));
  15121. }
  15122. /**
  15123. * Creates an array of `array` values not included in the other given arrays
  15124. * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
  15125. * for equality comparisons. The order and references of result values are
  15126. * determined by the first array.
  15127. *
  15128. * **Note:** Unlike `_.pullAll`, this method returns a new array.
  15129. *
  15130. * @static
  15131. * @memberOf _
  15132. * @since 0.1.0
  15133. * @category Array
  15134. * @param {Array} array The array to inspect.
  15135. * @param {...Array} [values] The values to exclude.
  15136. * @returns {Array} Returns the new array of filtered values.
  15137. * @see _.without, _.xor
  15138. * @example
  15139. *
  15140. * _.difference([2, 1], [2, 3]);
  15141. * // => [1]
  15142. */
  15143. var difference = baseRest(function(array, values) {
  15144. return isArrayLikeObject(array)
  15145. ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))
  15146. : [];
  15147. });
  15148. /**
  15149. * This method is like `_.difference` except that it accepts `iteratee` which
  15150. * is invoked for each element of `array` and `values` to generate the criterion
  15151. * by which they're compared. The order and references of result values are
  15152. * determined by the first array. The iteratee is invoked with one argument:
  15153. * (value).
  15154. *
  15155. * **Note:** Unlike `_.pullAllBy`, this method returns a new array.
  15156. *
  15157. * @static
  15158. * @memberOf _
  15159. * @since 4.0.0
  15160. * @category Array
  15161. * @param {Array} array The array to inspect.
  15162. * @param {...Array} [values] The values to exclude.
  15163. * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
  15164. * @returns {Array} Returns the new array of filtered values.
  15165. * @example
  15166. *
  15167. * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);
  15168. * // => [1.2]
  15169. *
  15170. * // The `_.property` iteratee shorthand.
  15171. * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');
  15172. * // => [{ 'x': 2 }]
  15173. */
  15174. var differenceBy = baseRest(function(array, values) {
  15175. var iteratee = last(values);
  15176. if (isArrayLikeObject(iteratee)) {
  15177. iteratee = undefined;
  15178. }
  15179. return isArrayLikeObject(array)
  15180. ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))
  15181. : [];
  15182. });
  15183. /**
  15184. * This method is like `_.difference` except that it accepts `comparator`
  15185. * which is invoked to compare elements of `array` to `values`. The order and
  15186. * references of result values are determined by the first array. The comparator
  15187. * is invoked with two arguments: (arrVal, othVal).
  15188. *
  15189. * **Note:** Unlike `_.pullAllWith`, this method returns a new array.
  15190. *
  15191. * @static
  15192. * @memberOf _
  15193. * @since 4.0.0
  15194. * @category Array
  15195. * @param {Array} array The array to inspect.
  15196. * @param {...Array} [values] The values to exclude.
  15197. * @param {Function} [comparator] The comparator invoked per element.
  15198. * @returns {Array} Returns the new array of filtered values.
  15199. * @example
  15200. *
  15201. * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
  15202. *
  15203. * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);
  15204. * // => [{ 'x': 2, 'y': 1 }]
  15205. */
  15206. var differenceWith = baseRest(function(array, values) {
  15207. var comparator = last(values);
  15208. if (isArrayLikeObject(comparator)) {
  15209. comparator = undefined;
  15210. }
  15211. return isArrayLikeObject(array)
  15212. ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)
  15213. : [];
  15214. });
  15215. /**
  15216. * Creates a slice of `array` with `n` elements dropped from the beginning.
  15217. *
  15218. * @static
  15219. * @memberOf _
  15220. * @since 0.5.0
  15221. * @category Array
  15222. * @param {Array} array The array to query.
  15223. * @param {number} [n=1] The number of elements to drop.
  15224. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  15225. * @returns {Array} Returns the slice of `array`.
  15226. * @example
  15227. *
  15228. * _.drop([1, 2, 3]);
  15229. * // => [2, 3]
  15230. *
  15231. * _.drop([1, 2, 3], 2);
  15232. * // => [3]
  15233. *
  15234. * _.drop([1, 2, 3], 5);
  15235. * // => []
  15236. *
  15237. * _.drop([1, 2, 3], 0);
  15238. * // => [1, 2, 3]
  15239. */
  15240. function drop(array, n, guard) {
  15241. var length = array == null ? 0 : array.length;
  15242. if (!length) {
  15243. return [];
  15244. }
  15245. n = (guard || n === undefined) ? 1 : toInteger(n);
  15246. return baseSlice(array, n < 0 ? 0 : n, length);
  15247. }
  15248. /**
  15249. * Creates a slice of `array` with `n` elements dropped from the end.
  15250. *
  15251. * @static
  15252. * @memberOf _
  15253. * @since 3.0.0
  15254. * @category Array
  15255. * @param {Array} array The array to query.
  15256. * @param {number} [n=1] The number of elements to drop.
  15257. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  15258. * @returns {Array} Returns the slice of `array`.
  15259. * @example
  15260. *
  15261. * _.dropRight([1, 2, 3]);
  15262. * // => [1, 2]
  15263. *
  15264. * _.dropRight([1, 2, 3], 2);
  15265. * // => [1]
  15266. *
  15267. * _.dropRight([1, 2, 3], 5);
  15268. * // => []
  15269. *
  15270. * _.dropRight([1, 2, 3], 0);
  15271. * // => [1, 2, 3]
  15272. */
  15273. function dropRight(array, n, guard) {
  15274. var length = array == null ? 0 : array.length;
  15275. if (!length) {
  15276. return [];
  15277. }
  15278. n = (guard || n === undefined) ? 1 : toInteger(n);
  15279. n = length - n;
  15280. return baseSlice(array, 0, n < 0 ? 0 : n);
  15281. }
  15282. /**
  15283. * Creates a slice of `array` excluding elements dropped from the end.
  15284. * Elements are dropped until `predicate` returns falsey. The predicate is
  15285. * invoked with three arguments: (value, index, array).
  15286. *
  15287. * @static
  15288. * @memberOf _
  15289. * @since 3.0.0
  15290. * @category Array
  15291. * @param {Array} array The array to query.
  15292. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  15293. * @returns {Array} Returns the slice of `array`.
  15294. * @example
  15295. *
  15296. * var users = [
  15297. * { 'user': 'barney', 'active': true },
  15298. * { 'user': 'fred', 'active': false },
  15299. * { 'user': 'pebbles', 'active': false }
  15300. * ];
  15301. *
  15302. * _.dropRightWhile(users, function(o) { return !o.active; });
  15303. * // => objects for ['barney']
  15304. *
  15305. * // The `_.matches` iteratee shorthand.
  15306. * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });
  15307. * // => objects for ['barney', 'fred']
  15308. *
  15309. * // The `_.matchesProperty` iteratee shorthand.
  15310. * _.dropRightWhile(users, ['active', false]);
  15311. * // => objects for ['barney']
  15312. *
  15313. * // The `_.property` iteratee shorthand.
  15314. * _.dropRightWhile(users, 'active');
  15315. * // => objects for ['barney', 'fred', 'pebbles']
  15316. */
  15317. function dropRightWhile(array, predicate) {
  15318. return (array && array.length)
  15319. ? baseWhile(array, getIteratee(predicate, 3), true, true)
  15320. : [];
  15321. }
  15322. /**
  15323. * Creates a slice of `array` excluding elements dropped from the beginning.
  15324. * Elements are dropped until `predicate` returns falsey. The predicate is
  15325. * invoked with three arguments: (value, index, array).
  15326. *
  15327. * @static
  15328. * @memberOf _
  15329. * @since 3.0.0
  15330. * @category Array
  15331. * @param {Array} array The array to query.
  15332. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  15333. * @returns {Array} Returns the slice of `array`.
  15334. * @example
  15335. *
  15336. * var users = [
  15337. * { 'user': 'barney', 'active': false },
  15338. * { 'user': 'fred', 'active': false },
  15339. * { 'user': 'pebbles', 'active': true }
  15340. * ];
  15341. *
  15342. * _.dropWhile(users, function(o) { return !o.active; });
  15343. * // => objects for ['pebbles']
  15344. *
  15345. * // The `_.matches` iteratee shorthand.
  15346. * _.dropWhile(users, { 'user': 'barney', 'active': false });
  15347. * // => objects for ['fred', 'pebbles']
  15348. *
  15349. * // The `_.matchesProperty` iteratee shorthand.
  15350. * _.dropWhile(users, ['active', false]);
  15351. * // => objects for ['pebbles']
  15352. *
  15353. * // The `_.property` iteratee shorthand.
  15354. * _.dropWhile(users, 'active');
  15355. * // => objects for ['barney', 'fred', 'pebbles']
  15356. */
  15357. function dropWhile(array, predicate) {
  15358. return (array && array.length)
  15359. ? baseWhile(array, getIteratee(predicate, 3), true)
  15360. : [];
  15361. }
  15362. /**
  15363. * Fills elements of `array` with `value` from `start` up to, but not
  15364. * including, `end`.
  15365. *
  15366. * **Note:** This method mutates `array`.
  15367. *
  15368. * @static
  15369. * @memberOf _
  15370. * @since 3.2.0
  15371. * @category Array
  15372. * @param {Array} array The array to fill.
  15373. * @param {*} value The value to fill `array` with.
  15374. * @param {number} [start=0] The start position.
  15375. * @param {number} [end=array.length] The end position.
  15376. * @returns {Array} Returns `array`.
  15377. * @example
  15378. *
  15379. * var array = [1, 2, 3];
  15380. *
  15381. * _.fill(array, 'a');
  15382. * console.log(array);
  15383. * // => ['a', 'a', 'a']
  15384. *
  15385. * _.fill(Array(3), 2);
  15386. * // => [2, 2, 2]
  15387. *
  15388. * _.fill([4, 6, 8, 10], '*', 1, 3);
  15389. * // => [4, '*', '*', 10]
  15390. */
  15391. function fill(array, value, start, end) {
  15392. var length = array == null ? 0 : array.length;
  15393. if (!length) {
  15394. return [];
  15395. }
  15396. if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {
  15397. start = 0;
  15398. end = length;
  15399. }
  15400. return baseFill(array, value, start, end);
  15401. }
  15402. /**
  15403. * This method is like `_.find` except that it returns the index of the first
  15404. * element `predicate` returns truthy for instead of the element itself.
  15405. *
  15406. * @static
  15407. * @memberOf _
  15408. * @since 1.1.0
  15409. * @category Array
  15410. * @param {Array} array The array to inspect.
  15411. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  15412. * @param {number} [fromIndex=0] The index to search from.
  15413. * @returns {number} Returns the index of the found element, else `-1`.
  15414. * @example
  15415. *
  15416. * var users = [
  15417. * { 'user': 'barney', 'active': false },
  15418. * { 'user': 'fred', 'active': false },
  15419. * { 'user': 'pebbles', 'active': true }
  15420. * ];
  15421. *
  15422. * _.findIndex(users, function(o) { return o.user == 'barney'; });
  15423. * // => 0
  15424. *
  15425. * // The `_.matches` iteratee shorthand.
  15426. * _.findIndex(users, { 'user': 'fred', 'active': false });
  15427. * // => 1
  15428. *
  15429. * // The `_.matchesProperty` iteratee shorthand.
  15430. * _.findIndex(users, ['active', false]);
  15431. * // => 0
  15432. *
  15433. * // The `_.property` iteratee shorthand.
  15434. * _.findIndex(users, 'active');
  15435. * // => 2
  15436. */
  15437. function findIndex(array, predicate, fromIndex) {
  15438. var length = array == null ? 0 : array.length;
  15439. if (!length) {
  15440. return -1;
  15441. }
  15442. var index = fromIndex == null ? 0 : toInteger(fromIndex);
  15443. if (index < 0) {
  15444. index = nativeMax(length + index, 0);
  15445. }
  15446. return baseFindIndex(array, getIteratee(predicate, 3), index);
  15447. }
  15448. /**
  15449. * This method is like `_.findIndex` except that it iterates over elements
  15450. * of `collection` from right to left.
  15451. *
  15452. * @static
  15453. * @memberOf _
  15454. * @since 2.0.0
  15455. * @category Array
  15456. * @param {Array} array The array to inspect.
  15457. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  15458. * @param {number} [fromIndex=array.length-1] The index to search from.
  15459. * @returns {number} Returns the index of the found element, else `-1`.
  15460. * @example
  15461. *
  15462. * var users = [
  15463. * { 'user': 'barney', 'active': true },
  15464. * { 'user': 'fred', 'active': false },
  15465. * { 'user': 'pebbles', 'active': false }
  15466. * ];
  15467. *
  15468. * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });
  15469. * // => 2
  15470. *
  15471. * // The `_.matches` iteratee shorthand.
  15472. * _.findLastIndex(users, { 'user': 'barney', 'active': true });
  15473. * // => 0
  15474. *
  15475. * // The `_.matchesProperty` iteratee shorthand.
  15476. * _.findLastIndex(users, ['active', false]);
  15477. * // => 2
  15478. *
  15479. * // The `_.property` iteratee shorthand.
  15480. * _.findLastIndex(users, 'active');
  15481. * // => 0
  15482. */
  15483. function findLastIndex(array, predicate, fromIndex) {
  15484. var length = array == null ? 0 : array.length;
  15485. if (!length) {
  15486. return -1;
  15487. }
  15488. var index = length - 1;
  15489. if (fromIndex !== undefined) {
  15490. index = toInteger(fromIndex);
  15491. index = fromIndex < 0
  15492. ? nativeMax(length + index, 0)
  15493. : nativeMin(index, length - 1);
  15494. }
  15495. return baseFindIndex(array, getIteratee(predicate, 3), index, true);
  15496. }
  15497. /**
  15498. * Flattens `array` a single level deep.
  15499. *
  15500. * @static
  15501. * @memberOf _
  15502. * @since 0.1.0
  15503. * @category Array
  15504. * @param {Array} array The array to flatten.
  15505. * @returns {Array} Returns the new flattened array.
  15506. * @example
  15507. *
  15508. * _.flatten([1, [2, [3, [4]], 5]]);
  15509. * // => [1, 2, [3, [4]], 5]
  15510. */
  15511. function flatten(array) {
  15512. var length = array == null ? 0 : array.length;
  15513. return length ? baseFlatten(array, 1) : [];
  15514. }
  15515. /**
  15516. * Recursively flattens `array`.
  15517. *
  15518. * @static
  15519. * @memberOf _
  15520. * @since 3.0.0
  15521. * @category Array
  15522. * @param {Array} array The array to flatten.
  15523. * @returns {Array} Returns the new flattened array.
  15524. * @example
  15525. *
  15526. * _.flattenDeep([1, [2, [3, [4]], 5]]);
  15527. * // => [1, 2, 3, 4, 5]
  15528. */
  15529. function flattenDeep(array) {
  15530. var length = array == null ? 0 : array.length;
  15531. return length ? baseFlatten(array, INFINITY) : [];
  15532. }
  15533. /**
  15534. * Recursively flatten `array` up to `depth` times.
  15535. *
  15536. * @static
  15537. * @memberOf _
  15538. * @since 4.4.0
  15539. * @category Array
  15540. * @param {Array} array The array to flatten.
  15541. * @param {number} [depth=1] The maximum recursion depth.
  15542. * @returns {Array} Returns the new flattened array.
  15543. * @example
  15544. *
  15545. * var array = [1, [2, [3, [4]], 5]];
  15546. *
  15547. * _.flattenDepth(array, 1);
  15548. * // => [1, 2, [3, [4]], 5]
  15549. *
  15550. * _.flattenDepth(array, 2);
  15551. * // => [1, 2, 3, [4], 5]
  15552. */
  15553. function flattenDepth(array, depth) {
  15554. var length = array == null ? 0 : array.length;
  15555. if (!length) {
  15556. return [];
  15557. }
  15558. depth = depth === undefined ? 1 : toInteger(depth);
  15559. return baseFlatten(array, depth);
  15560. }
  15561. /**
  15562. * The inverse of `_.toPairs`; this method returns an object composed
  15563. * from key-value `pairs`.
  15564. *
  15565. * @static
  15566. * @memberOf _
  15567. * @since 4.0.0
  15568. * @category Array
  15569. * @param {Array} pairs The key-value pairs.
  15570. * @returns {Object} Returns the new object.
  15571. * @example
  15572. *
  15573. * _.fromPairs([['a', 1], ['b', 2]]);
  15574. * // => { 'a': 1, 'b': 2 }
  15575. */
  15576. function fromPairs(pairs) {
  15577. var index = -1,
  15578. length = pairs == null ? 0 : pairs.length,
  15579. result = {};
  15580. while (++index < length) {
  15581. var pair = pairs[index];
  15582. result[pair[0]] = pair[1];
  15583. }
  15584. return result;
  15585. }
  15586. /**
  15587. * Gets the first element of `array`.
  15588. *
  15589. * @static
  15590. * @memberOf _
  15591. * @since 0.1.0
  15592. * @alias first
  15593. * @category Array
  15594. * @param {Array} array The array to query.
  15595. * @returns {*} Returns the first element of `array`.
  15596. * @example
  15597. *
  15598. * _.head([1, 2, 3]);
  15599. * // => 1
  15600. *
  15601. * _.head([]);
  15602. * // => undefined
  15603. */
  15604. function head(array) {
  15605. return (array && array.length) ? array[0] : undefined;
  15606. }
  15607. /**
  15608. * Gets the index at which the first occurrence of `value` is found in `array`
  15609. * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
  15610. * for equality comparisons. If `fromIndex` is negative, it's used as the
  15611. * offset from the end of `array`.
  15612. *
  15613. * @static
  15614. * @memberOf _
  15615. * @since 0.1.0
  15616. * @category Array
  15617. * @param {Array} array The array to inspect.
  15618. * @param {*} value The value to search for.
  15619. * @param {number} [fromIndex=0] The index to search from.
  15620. * @returns {number} Returns the index of the matched value, else `-1`.
  15621. * @example
  15622. *
  15623. * _.indexOf([1, 2, 1, 2], 2);
  15624. * // => 1
  15625. *
  15626. * // Search from the `fromIndex`.
  15627. * _.indexOf([1, 2, 1, 2], 2, 2);
  15628. * // => 3
  15629. */
  15630. function indexOf(array, value, fromIndex) {
  15631. var length = array == null ? 0 : array.length;
  15632. if (!length) {
  15633. return -1;
  15634. }
  15635. var index = fromIndex == null ? 0 : toInteger(fromIndex);
  15636. if (index < 0) {
  15637. index = nativeMax(length + index, 0);
  15638. }
  15639. return baseIndexOf(array, value, index);
  15640. }
  15641. /**
  15642. * Gets all but the last element of `array`.
  15643. *
  15644. * @static
  15645. * @memberOf _
  15646. * @since 0.1.0
  15647. * @category Array
  15648. * @param {Array} array The array to query.
  15649. * @returns {Array} Returns the slice of `array`.
  15650. * @example
  15651. *
  15652. * _.initial([1, 2, 3]);
  15653. * // => [1, 2]
  15654. */
  15655. function initial(array) {
  15656. var length = array == null ? 0 : array.length;
  15657. return length ? baseSlice(array, 0, -1) : [];
  15658. }
  15659. /**
  15660. * Creates an array of unique values that are included in all given arrays
  15661. * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
  15662. * for equality comparisons. The order and references of result values are
  15663. * determined by the first array.
  15664. *
  15665. * @static
  15666. * @memberOf _
  15667. * @since 0.1.0
  15668. * @category Array
  15669. * @param {...Array} [arrays] The arrays to inspect.
  15670. * @returns {Array} Returns the new array of intersecting values.
  15671. * @example
  15672. *
  15673. * _.intersection([2, 1], [2, 3]);
  15674. * // => [2]
  15675. */
  15676. var intersection = baseRest(function(arrays) {
  15677. var mapped = arrayMap(arrays, castArrayLikeObject);
  15678. return (mapped.length && mapped[0] === arrays[0])
  15679. ? baseIntersection(mapped)
  15680. : [];
  15681. });
  15682. /**
  15683. * This method is like `_.intersection` except that it accepts `iteratee`
  15684. * which is invoked for each element of each `arrays` to generate the criterion
  15685. * by which they're compared. The order and references of result values are
  15686. * determined by the first array. The iteratee is invoked with one argument:
  15687. * (value).
  15688. *
  15689. * @static
  15690. * @memberOf _
  15691. * @since 4.0.0
  15692. * @category Array
  15693. * @param {...Array} [arrays] The arrays to inspect.
  15694. * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
  15695. * @returns {Array} Returns the new array of intersecting values.
  15696. * @example
  15697. *
  15698. * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);
  15699. * // => [2.1]
  15700. *
  15701. * // The `_.property` iteratee shorthand.
  15702. * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
  15703. * // => [{ 'x': 1 }]
  15704. */
  15705. var intersectionBy = baseRest(function(arrays) {
  15706. var iteratee = last(arrays),
  15707. mapped = arrayMap(arrays, castArrayLikeObject);
  15708. if (iteratee === last(mapped)) {
  15709. iteratee = undefined;
  15710. } else {
  15711. mapped.pop();
  15712. }
  15713. return (mapped.length && mapped[0] === arrays[0])
  15714. ? baseIntersection(mapped, getIteratee(iteratee, 2))
  15715. : [];
  15716. });
  15717. /**
  15718. * This method is like `_.intersection` except that it accepts `comparator`
  15719. * which is invoked to compare elements of `arrays`. The order and references
  15720. * of result values are determined by the first array. The comparator is
  15721. * invoked with two arguments: (arrVal, othVal).
  15722. *
  15723. * @static
  15724. * @memberOf _
  15725. * @since 4.0.0
  15726. * @category Array
  15727. * @param {...Array} [arrays] The arrays to inspect.
  15728. * @param {Function} [comparator] The comparator invoked per element.
  15729. * @returns {Array} Returns the new array of intersecting values.
  15730. * @example
  15731. *
  15732. * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
  15733. * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
  15734. *
  15735. * _.intersectionWith(objects, others, _.isEqual);
  15736. * // => [{ 'x': 1, 'y': 2 }]
  15737. */
  15738. var intersectionWith = baseRest(function(arrays) {
  15739. var comparator = last(arrays),
  15740. mapped = arrayMap(arrays, castArrayLikeObject);
  15741. comparator = typeof comparator == 'function' ? comparator : undefined;
  15742. if (comparator) {
  15743. mapped.pop();
  15744. }
  15745. return (mapped.length && mapped[0] === arrays[0])
  15746. ? baseIntersection(mapped, undefined, comparator)
  15747. : [];
  15748. });
  15749. /**
  15750. * Converts all elements in `array` into a string separated by `separator`.
  15751. *
  15752. * @static
  15753. * @memberOf _
  15754. * @since 4.0.0
  15755. * @category Array
  15756. * @param {Array} array The array to convert.
  15757. * @param {string} [separator=','] The element separator.
  15758. * @returns {string} Returns the joined string.
  15759. * @example
  15760. *
  15761. * _.join(['a', 'b', 'c'], '~');
  15762. * // => 'a~b~c'
  15763. */
  15764. function join(array, separator) {
  15765. return array == null ? '' : nativeJoin.call(array, separator);
  15766. }
  15767. /**
  15768. * Gets the last element of `array`.
  15769. *
  15770. * @static
  15771. * @memberOf _
  15772. * @since 0.1.0
  15773. * @category Array
  15774. * @param {Array} array The array to query.
  15775. * @returns {*} Returns the last element of `array`.
  15776. * @example
  15777. *
  15778. * _.last([1, 2, 3]);
  15779. * // => 3
  15780. */
  15781. function last(array) {
  15782. var length = array == null ? 0 : array.length;
  15783. return length ? array[length - 1] : undefined;
  15784. }
  15785. /**
  15786. * This method is like `_.indexOf` except that it iterates over elements of
  15787. * `array` from right to left.
  15788. *
  15789. * @static
  15790. * @memberOf _
  15791. * @since 0.1.0
  15792. * @category Array
  15793. * @param {Array} array The array to inspect.
  15794. * @param {*} value The value to search for.
  15795. * @param {number} [fromIndex=array.length-1] The index to search from.
  15796. * @returns {number} Returns the index of the matched value, else `-1`.
  15797. * @example
  15798. *
  15799. * _.lastIndexOf([1, 2, 1, 2], 2);
  15800. * // => 3
  15801. *
  15802. * // Search from the `fromIndex`.
  15803. * _.lastIndexOf([1, 2, 1, 2], 2, 2);
  15804. * // => 1
  15805. */
  15806. function lastIndexOf(array, value, fromIndex) {
  15807. var length = array == null ? 0 : array.length;
  15808. if (!length) {
  15809. return -1;
  15810. }
  15811. var index = length;
  15812. if (fromIndex !== undefined) {
  15813. index = toInteger(fromIndex);
  15814. index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);
  15815. }
  15816. return value === value
  15817. ? strictLastIndexOf(array, value, index)
  15818. : baseFindIndex(array, baseIsNaN, index, true);
  15819. }
  15820. /**
  15821. * Gets the element at index `n` of `array`. If `n` is negative, the nth
  15822. * element from the end is returned.
  15823. *
  15824. * @static
  15825. * @memberOf _
  15826. * @since 4.11.0
  15827. * @category Array
  15828. * @param {Array} array The array to query.
  15829. * @param {number} [n=0] The index of the element to return.
  15830. * @returns {*} Returns the nth element of `array`.
  15831. * @example
  15832. *
  15833. * var array = ['a', 'b', 'c', 'd'];
  15834. *
  15835. * _.nth(array, 1);
  15836. * // => 'b'
  15837. *
  15838. * _.nth(array, -2);
  15839. * // => 'c';
  15840. */
  15841. function nth(array, n) {
  15842. return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;
  15843. }
  15844. /**
  15845. * Removes all given values from `array` using
  15846. * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
  15847. * for equality comparisons.
  15848. *
  15849. * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`
  15850. * to remove elements from an array by predicate.
  15851. *
  15852. * @static
  15853. * @memberOf _
  15854. * @since 2.0.0
  15855. * @category Array
  15856. * @param {Array} array The array to modify.
  15857. * @param {...*} [values] The values to remove.
  15858. * @returns {Array} Returns `array`.
  15859. * @example
  15860. *
  15861. * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
  15862. *
  15863. * _.pull(array, 'a', 'c');
  15864. * console.log(array);
  15865. * // => ['b', 'b']
  15866. */
  15867. var pull = baseRest(pullAll);
  15868. /**
  15869. * This method is like `_.pull` except that it accepts an array of values to remove.
  15870. *
  15871. * **Note:** Unlike `_.difference`, this method mutates `array`.
  15872. *
  15873. * @static
  15874. * @memberOf _
  15875. * @since 4.0.0
  15876. * @category Array
  15877. * @param {Array} array The array to modify.
  15878. * @param {Array} values The values to remove.
  15879. * @returns {Array} Returns `array`.
  15880. * @example
  15881. *
  15882. * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
  15883. *
  15884. * _.pullAll(array, ['a', 'c']);
  15885. * console.log(array);
  15886. * // => ['b', 'b']
  15887. */
  15888. function pullAll(array, values) {
  15889. return (array && array.length && values && values.length)
  15890. ? basePullAll(array, values)
  15891. : array;
  15892. }
  15893. /**
  15894. * This method is like `_.pullAll` except that it accepts `iteratee` which is
  15895. * invoked for each element of `array` and `values` to generate the criterion
  15896. * by which they're compared. The iteratee is invoked with one argument: (value).
  15897. *
  15898. * **Note:** Unlike `_.differenceBy`, this method mutates `array`.
  15899. *
  15900. * @static
  15901. * @memberOf _
  15902. * @since 4.0.0
  15903. * @category Array
  15904. * @param {Array} array The array to modify.
  15905. * @param {Array} values The values to remove.
  15906. * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
  15907. * @returns {Array} Returns `array`.
  15908. * @example
  15909. *
  15910. * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];
  15911. *
  15912. * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');
  15913. * console.log(array);
  15914. * // => [{ 'x': 2 }]
  15915. */
  15916. function pullAllBy(array, values, iteratee) {
  15917. return (array && array.length && values && values.length)
  15918. ? basePullAll(array, values, getIteratee(iteratee, 2))
  15919. : array;
  15920. }
  15921. /**
  15922. * This method is like `_.pullAll` except that it accepts `comparator` which
  15923. * is invoked to compare elements of `array` to `values`. The comparator is
  15924. * invoked with two arguments: (arrVal, othVal).
  15925. *
  15926. * **Note:** Unlike `_.differenceWith`, this method mutates `array`.
  15927. *
  15928. * @static
  15929. * @memberOf _
  15930. * @since 4.6.0
  15931. * @category Array
  15932. * @param {Array} array The array to modify.
  15933. * @param {Array} values The values to remove.
  15934. * @param {Function} [comparator] The comparator invoked per element.
  15935. * @returns {Array} Returns `array`.
  15936. * @example
  15937. *
  15938. * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];
  15939. *
  15940. * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);
  15941. * console.log(array);
  15942. * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]
  15943. */
  15944. function pullAllWith(array, values, comparator) {
  15945. return (array && array.length && values && values.length)
  15946. ? basePullAll(array, values, undefined, comparator)
  15947. : array;
  15948. }
  15949. /**
  15950. * Removes elements from `array` corresponding to `indexes` and returns an
  15951. * array of removed elements.
  15952. *
  15953. * **Note:** Unlike `_.at`, this method mutates `array`.
  15954. *
  15955. * @static
  15956. * @memberOf _
  15957. * @since 3.0.0
  15958. * @category Array
  15959. * @param {Array} array The array to modify.
  15960. * @param {...(number|number[])} [indexes] The indexes of elements to remove.
  15961. * @returns {Array} Returns the new array of removed elements.
  15962. * @example
  15963. *
  15964. * var array = ['a', 'b', 'c', 'd'];
  15965. * var pulled = _.pullAt(array, [1, 3]);
  15966. *
  15967. * console.log(array);
  15968. * // => ['a', 'c']
  15969. *
  15970. * console.log(pulled);
  15971. * // => ['b', 'd']
  15972. */
  15973. var pullAt = flatRest(function(array, indexes) {
  15974. var length = array == null ? 0 : array.length,
  15975. result = baseAt(array, indexes);
  15976. basePullAt(array, arrayMap(indexes, function(index) {
  15977. return isIndex(index, length) ? +index : index;
  15978. }).sort(compareAscending));
  15979. return result;
  15980. });
  15981. /**
  15982. * Removes all elements from `array` that `predicate` returns truthy for
  15983. * and returns an array of the removed elements. The predicate is invoked
  15984. * with three arguments: (value, index, array).
  15985. *
  15986. * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`
  15987. * to pull elements from an array by value.
  15988. *
  15989. * @static
  15990. * @memberOf _
  15991. * @since 2.0.0
  15992. * @category Array
  15993. * @param {Array} array The array to modify.
  15994. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  15995. * @returns {Array} Returns the new array of removed elements.
  15996. * @example
  15997. *
  15998. * var array = [1, 2, 3, 4];
  15999. * var evens = _.remove(array, function(n) {
  16000. * return n % 2 == 0;
  16001. * });
  16002. *
  16003. * console.log(array);
  16004. * // => [1, 3]
  16005. *
  16006. * console.log(evens);
  16007. * // => [2, 4]
  16008. */
  16009. function remove(array, predicate) {
  16010. var result = [];
  16011. if (!(array && array.length)) {
  16012. return result;
  16013. }
  16014. var index = -1,
  16015. indexes = [],
  16016. length = array.length;
  16017. predicate = getIteratee(predicate, 3);
  16018. while (++index < length) {
  16019. var value = array[index];
  16020. if (predicate(value, index, array)) {
  16021. result.push(value);
  16022. indexes.push(index);
  16023. }
  16024. }
  16025. basePullAt(array, indexes);
  16026. return result;
  16027. }
  16028. /**
  16029. * Reverses `array` so that the first element becomes the last, the second
  16030. * element becomes the second to last, and so on.
  16031. *
  16032. * **Note:** This method mutates `array` and is based on
  16033. * [`Array#reverse`](https://mdn.io/Array/reverse).
  16034. *
  16035. * @static
  16036. * @memberOf _
  16037. * @since 4.0.0
  16038. * @category Array
  16039. * @param {Array} array The array to modify.
  16040. * @returns {Array} Returns `array`.
  16041. * @example
  16042. *
  16043. * var array = [1, 2, 3];
  16044. *
  16045. * _.reverse(array);
  16046. * // => [3, 2, 1]
  16047. *
  16048. * console.log(array);
  16049. * // => [3, 2, 1]
  16050. */
  16051. function reverse(array) {
  16052. return array == null ? array : nativeReverse.call(array);
  16053. }
  16054. /**
  16055. * Creates a slice of `array` from `start` up to, but not including, `end`.
  16056. *
  16057. * **Note:** This method is used instead of
  16058. * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are
  16059. * returned.
  16060. *
  16061. * @static
  16062. * @memberOf _
  16063. * @since 3.0.0
  16064. * @category Array
  16065. * @param {Array} array The array to slice.
  16066. * @param {number} [start=0] The start position.
  16067. * @param {number} [end=array.length] The end position.
  16068. * @returns {Array} Returns the slice of `array`.
  16069. */
  16070. function slice(array, start, end) {
  16071. var length = array == null ? 0 : array.length;
  16072. if (!length) {
  16073. return [];
  16074. }
  16075. if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {
  16076. start = 0;
  16077. end = length;
  16078. }
  16079. else {
  16080. start = start == null ? 0 : toInteger(start);
  16081. end = end === undefined ? length : toInteger(end);
  16082. }
  16083. return baseSlice(array, start, end);
  16084. }
  16085. /**
  16086. * Uses a binary search to determine the lowest index at which `value`
  16087. * should be inserted into `array` in order to maintain its sort order.
  16088. *
  16089. * @static
  16090. * @memberOf _
  16091. * @since 0.1.0
  16092. * @category Array
  16093. * @param {Array} array The sorted array to inspect.
  16094. * @param {*} value The value to evaluate.
  16095. * @returns {number} Returns the index at which `value` should be inserted
  16096. * into `array`.
  16097. * @example
  16098. *
  16099. * _.sortedIndex([30, 50], 40);
  16100. * // => 1
  16101. */
  16102. function sortedIndex(array, value) {
  16103. return baseSortedIndex(array, value);
  16104. }
  16105. /**
  16106. * This method is like `_.sortedIndex` except that it accepts `iteratee`
  16107. * which is invoked for `value` and each element of `array` to compute their
  16108. * sort ranking. The iteratee is invoked with one argument: (value).
  16109. *
  16110. * @static
  16111. * @memberOf _
  16112. * @since 4.0.0
  16113. * @category Array
  16114. * @param {Array} array The sorted array to inspect.
  16115. * @param {*} value The value to evaluate.
  16116. * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
  16117. * @returns {number} Returns the index at which `value` should be inserted
  16118. * into `array`.
  16119. * @example
  16120. *
  16121. * var objects = [{ 'x': 4 }, { 'x': 5 }];
  16122. *
  16123. * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
  16124. * // => 0
  16125. *
  16126. * // The `_.property` iteratee shorthand.
  16127. * _.sortedIndexBy(objects, { 'x': 4 }, 'x');
  16128. * // => 0
  16129. */
  16130. function sortedIndexBy(array, value, iteratee) {
  16131. return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));
  16132. }
  16133. /**
  16134. * This method is like `_.indexOf` except that it performs a binary
  16135. * search on a sorted `array`.
  16136. *
  16137. * @static
  16138. * @memberOf _
  16139. * @since 4.0.0
  16140. * @category Array
  16141. * @param {Array} array The array to inspect.
  16142. * @param {*} value The value to search for.
  16143. * @returns {number} Returns the index of the matched value, else `-1`.
  16144. * @example
  16145. *
  16146. * _.sortedIndexOf([4, 5, 5, 5, 6], 5);
  16147. * // => 1
  16148. */
  16149. function sortedIndexOf(array, value) {
  16150. var length = array == null ? 0 : array.length;
  16151. if (length) {
  16152. var index = baseSortedIndex(array, value);
  16153. if (index < length && eq(array[index], value)) {
  16154. return index;
  16155. }
  16156. }
  16157. return -1;
  16158. }
  16159. /**
  16160. * This method is like `_.sortedIndex` except that it returns the highest
  16161. * index at which `value` should be inserted into `array` in order to
  16162. * maintain its sort order.
  16163. *
  16164. * @static
  16165. * @memberOf _
  16166. * @since 3.0.0
  16167. * @category Array
  16168. * @param {Array} array The sorted array to inspect.
  16169. * @param {*} value The value to evaluate.
  16170. * @returns {number} Returns the index at which `value` should be inserted
  16171. * into `array`.
  16172. * @example
  16173. *
  16174. * _.sortedLastIndex([4, 5, 5, 5, 6], 5);
  16175. * // => 4
  16176. */
  16177. function sortedLastIndex(array, value) {
  16178. return baseSortedIndex(array, value, true);
  16179. }
  16180. /**
  16181. * This method is like `_.sortedLastIndex` except that it accepts `iteratee`
  16182. * which is invoked for `value` and each element of `array` to compute their
  16183. * sort ranking. The iteratee is invoked with one argument: (value).
  16184. *
  16185. * @static
  16186. * @memberOf _
  16187. * @since 4.0.0
  16188. * @category Array
  16189. * @param {Array} array The sorted array to inspect.
  16190. * @param {*} value The value to evaluate.
  16191. * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
  16192. * @returns {number} Returns the index at which `value` should be inserted
  16193. * into `array`.
  16194. * @example
  16195. *
  16196. * var objects = [{ 'x': 4 }, { 'x': 5 }];
  16197. *
  16198. * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
  16199. * // => 1
  16200. *
  16201. * // The `_.property` iteratee shorthand.
  16202. * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');
  16203. * // => 1
  16204. */
  16205. function sortedLastIndexBy(array, value, iteratee) {
  16206. return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);
  16207. }
  16208. /**
  16209. * This method is like `_.lastIndexOf` except that it performs a binary
  16210. * search on a sorted `array`.
  16211. *
  16212. * @static
  16213. * @memberOf _
  16214. * @since 4.0.0
  16215. * @category Array
  16216. * @param {Array} array The array to inspect.
  16217. * @param {*} value The value to search for.
  16218. * @returns {number} Returns the index of the matched value, else `-1`.
  16219. * @example
  16220. *
  16221. * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);
  16222. * // => 3
  16223. */
  16224. function sortedLastIndexOf(array, value) {
  16225. var length = array == null ? 0 : array.length;
  16226. if (length) {
  16227. var index = baseSortedIndex(array, value, true) - 1;
  16228. if (eq(array[index], value)) {
  16229. return index;
  16230. }
  16231. }
  16232. return -1;
  16233. }
  16234. /**
  16235. * This method is like `_.uniq` except that it's designed and optimized
  16236. * for sorted arrays.
  16237. *
  16238. * @static
  16239. * @memberOf _
  16240. * @since 4.0.0
  16241. * @category Array
  16242. * @param {Array} array The array to inspect.
  16243. * @returns {Array} Returns the new duplicate free array.
  16244. * @example
  16245. *
  16246. * _.sortedUniq([1, 1, 2]);
  16247. * // => [1, 2]
  16248. */
  16249. function sortedUniq(array) {
  16250. return (array && array.length)
  16251. ? baseSortedUniq(array)
  16252. : [];
  16253. }
  16254. /**
  16255. * This method is like `_.uniqBy` except that it's designed and optimized
  16256. * for sorted arrays.
  16257. *
  16258. * @static
  16259. * @memberOf _
  16260. * @since 4.0.0
  16261. * @category Array
  16262. * @param {Array} array The array to inspect.
  16263. * @param {Function} [iteratee] The iteratee invoked per element.
  16264. * @returns {Array} Returns the new duplicate free array.
  16265. * @example
  16266. *
  16267. * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);
  16268. * // => [1.1, 2.3]
  16269. */
  16270. function sortedUniqBy(array, iteratee) {
  16271. return (array && array.length)
  16272. ? baseSortedUniq(array, getIteratee(iteratee, 2))
  16273. : [];
  16274. }
  16275. /**
  16276. * Gets all but the first element of `array`.
  16277. *
  16278. * @static
  16279. * @memberOf _
  16280. * @since 4.0.0
  16281. * @category Array
  16282. * @param {Array} array The array to query.
  16283. * @returns {Array} Returns the slice of `array`.
  16284. * @example
  16285. *
  16286. * _.tail([1, 2, 3]);
  16287. * // => [2, 3]
  16288. */
  16289. function tail(array) {
  16290. var length = array == null ? 0 : array.length;
  16291. return length ? baseSlice(array, 1, length) : [];
  16292. }
  16293. /**
  16294. * Creates a slice of `array` with `n` elements taken from the beginning.
  16295. *
  16296. * @static
  16297. * @memberOf _
  16298. * @since 0.1.0
  16299. * @category Array
  16300. * @param {Array} array The array to query.
  16301. * @param {number} [n=1] The number of elements to take.
  16302. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  16303. * @returns {Array} Returns the slice of `array`.
  16304. * @example
  16305. *
  16306. * _.take([1, 2, 3]);
  16307. * // => [1]
  16308. *
  16309. * _.take([1, 2, 3], 2);
  16310. * // => [1, 2]
  16311. *
  16312. * _.take([1, 2, 3], 5);
  16313. * // => [1, 2, 3]
  16314. *
  16315. * _.take([1, 2, 3], 0);
  16316. * // => []
  16317. */
  16318. function take(array, n, guard) {
  16319. if (!(array && array.length)) {
  16320. return [];
  16321. }
  16322. n = (guard || n === undefined) ? 1 : toInteger(n);
  16323. return baseSlice(array, 0, n < 0 ? 0 : n);
  16324. }
  16325. /**
  16326. * Creates a slice of `array` with `n` elements taken from the end.
  16327. *
  16328. * @static
  16329. * @memberOf _
  16330. * @since 3.0.0
  16331. * @category Array
  16332. * @param {Array} array The array to query.
  16333. * @param {number} [n=1] The number of elements to take.
  16334. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  16335. * @returns {Array} Returns the slice of `array`.
  16336. * @example
  16337. *
  16338. * _.takeRight([1, 2, 3]);
  16339. * // => [3]
  16340. *
  16341. * _.takeRight([1, 2, 3], 2);
  16342. * // => [2, 3]
  16343. *
  16344. * _.takeRight([1, 2, 3], 5);
  16345. * // => [1, 2, 3]
  16346. *
  16347. * _.takeRight([1, 2, 3], 0);
  16348. * // => []
  16349. */
  16350. function takeRight(array, n, guard) {
  16351. var length = array == null ? 0 : array.length;
  16352. if (!length) {
  16353. return [];
  16354. }
  16355. n = (guard || n === undefined) ? 1 : toInteger(n);
  16356. n = length - n;
  16357. return baseSlice(array, n < 0 ? 0 : n, length);
  16358. }
  16359. /**
  16360. * Creates a slice of `array` with elements taken from the end. Elements are
  16361. * taken until `predicate` returns falsey. The predicate is invoked with
  16362. * three arguments: (value, index, array).
  16363. *
  16364. * @static
  16365. * @memberOf _
  16366. * @since 3.0.0
  16367. * @category Array
  16368. * @param {Array} array The array to query.
  16369. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  16370. * @returns {Array} Returns the slice of `array`.
  16371. * @example
  16372. *
  16373. * var users = [
  16374. * { 'user': 'barney', 'active': true },
  16375. * { 'user': 'fred', 'active': false },
  16376. * { 'user': 'pebbles', 'active': false }
  16377. * ];
  16378. *
  16379. * _.takeRightWhile(users, function(o) { return !o.active; });
  16380. * // => objects for ['fred', 'pebbles']
  16381. *
  16382. * // The `_.matches` iteratee shorthand.
  16383. * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });
  16384. * // => objects for ['pebbles']
  16385. *
  16386. * // The `_.matchesProperty` iteratee shorthand.
  16387. * _.takeRightWhile(users, ['active', false]);
  16388. * // => objects for ['fred', 'pebbles']
  16389. *
  16390. * // The `_.property` iteratee shorthand.
  16391. * _.takeRightWhile(users, 'active');
  16392. * // => []
  16393. */
  16394. function takeRightWhile(array, predicate) {
  16395. return (array && array.length)
  16396. ? baseWhile(array, getIteratee(predicate, 3), false, true)
  16397. : [];
  16398. }
  16399. /**
  16400. * Creates a slice of `array` with elements taken from the beginning. Elements
  16401. * are taken until `predicate` returns falsey. The predicate is invoked with
  16402. * three arguments: (value, index, array).
  16403. *
  16404. * @static
  16405. * @memberOf _
  16406. * @since 3.0.0
  16407. * @category Array
  16408. * @param {Array} array The array to query.
  16409. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  16410. * @returns {Array} Returns the slice of `array`.
  16411. * @example
  16412. *
  16413. * var users = [
  16414. * { 'user': 'barney', 'active': false },
  16415. * { 'user': 'fred', 'active': false },
  16416. * { 'user': 'pebbles', 'active': true }
  16417. * ];
  16418. *
  16419. * _.takeWhile(users, function(o) { return !o.active; });
  16420. * // => objects for ['barney', 'fred']
  16421. *
  16422. * // The `_.matches` iteratee shorthand.
  16423. * _.takeWhile(users, { 'user': 'barney', 'active': false });
  16424. * // => objects for ['barney']
  16425. *
  16426. * // The `_.matchesProperty` iteratee shorthand.
  16427. * _.takeWhile(users, ['active', false]);
  16428. * // => objects for ['barney', 'fred']
  16429. *
  16430. * // The `_.property` iteratee shorthand.
  16431. * _.takeWhile(users, 'active');
  16432. * // => []
  16433. */
  16434. function takeWhile(array, predicate) {
  16435. return (array && array.length)
  16436. ? baseWhile(array, getIteratee(predicate, 3))
  16437. : [];
  16438. }
  16439. /**
  16440. * Creates an array of unique values, in order, from all given arrays using
  16441. * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
  16442. * for equality comparisons.
  16443. *
  16444. * @static
  16445. * @memberOf _
  16446. * @since 0.1.0
  16447. * @category Array
  16448. * @param {...Array} [arrays] The arrays to inspect.
  16449. * @returns {Array} Returns the new array of combined values.
  16450. * @example
  16451. *
  16452. * _.union([2], [1, 2]);
  16453. * // => [2, 1]
  16454. */
  16455. var union = baseRest(function(arrays) {
  16456. return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));
  16457. });
  16458. /**
  16459. * This method is like `_.union` except that it accepts `iteratee` which is
  16460. * invoked for each element of each `arrays` to generate the criterion by
  16461. * which uniqueness is computed. Result values are chosen from the first
  16462. * array in which the value occurs. The iteratee is invoked with one argument:
  16463. * (value).
  16464. *
  16465. * @static
  16466. * @memberOf _
  16467. * @since 4.0.0
  16468. * @category Array
  16469. * @param {...Array} [arrays] The arrays to inspect.
  16470. * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
  16471. * @returns {Array} Returns the new array of combined values.
  16472. * @example
  16473. *
  16474. * _.unionBy([2.1], [1.2, 2.3], Math.floor);
  16475. * // => [2.1, 1.2]
  16476. *
  16477. * // The `_.property` iteratee shorthand.
  16478. * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
  16479. * // => [{ 'x': 1 }, { 'x': 2 }]
  16480. */
  16481. var unionBy = baseRest(function(arrays) {
  16482. var iteratee = last(arrays);
  16483. if (isArrayLikeObject(iteratee)) {
  16484. iteratee = undefined;
  16485. }
  16486. return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));
  16487. });
  16488. /**
  16489. * This method is like `_.union` except that it accepts `comparator` which
  16490. * is invoked to compare elements of `arrays`. Result values are chosen from
  16491. * the first array in which the value occurs. The comparator is invoked
  16492. * with two arguments: (arrVal, othVal).
  16493. *
  16494. * @static
  16495. * @memberOf _
  16496. * @since 4.0.0
  16497. * @category Array
  16498. * @param {...Array} [arrays] The arrays to inspect.
  16499. * @param {Function} [comparator] The comparator invoked per element.
  16500. * @returns {Array} Returns the new array of combined values.
  16501. * @example
  16502. *
  16503. * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
  16504. * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
  16505. *
  16506. * _.unionWith(objects, others, _.isEqual);
  16507. * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
  16508. */
  16509. var unionWith = baseRest(function(arrays) {
  16510. var comparator = last(arrays);
  16511. comparator = typeof comparator == 'function' ? comparator : undefined;
  16512. return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);
  16513. });
  16514. /**
  16515. * Creates a duplicate-free version of an array, using
  16516. * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
  16517. * for equality comparisons, in which only the first occurrence of each element
  16518. * is kept. The order of result values is determined by the order they occur
  16519. * in the array.
  16520. *
  16521. * @static
  16522. * @memberOf _
  16523. * @since 0.1.0
  16524. * @category Array
  16525. * @param {Array} array The array to inspect.
  16526. * @returns {Array} Returns the new duplicate free array.
  16527. * @example
  16528. *
  16529. * _.uniq([2, 1, 2]);
  16530. * // => [2, 1]
  16531. */
  16532. function uniq(array) {
  16533. return (array && array.length) ? baseUniq(array) : [];
  16534. }
  16535. /**
  16536. * This method is like `_.uniq` except that it accepts `iteratee` which is
  16537. * invoked for each element in `array` to generate the criterion by which
  16538. * uniqueness is computed. The order of result values is determined by the
  16539. * order they occur in the array. The iteratee is invoked with one argument:
  16540. * (value).
  16541. *
  16542. * @static
  16543. * @memberOf _
  16544. * @since 4.0.0
  16545. * @category Array
  16546. * @param {Array} array The array to inspect.
  16547. * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
  16548. * @returns {Array} Returns the new duplicate free array.
  16549. * @example
  16550. *
  16551. * _.uniqBy([2.1, 1.2, 2.3], Math.floor);
  16552. * // => [2.1, 1.2]
  16553. *
  16554. * // The `_.property` iteratee shorthand.
  16555. * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
  16556. * // => [{ 'x': 1 }, { 'x': 2 }]
  16557. */
  16558. function uniqBy(array, iteratee) {
  16559. return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];
  16560. }
  16561. /**
  16562. * This method is like `_.uniq` except that it accepts `comparator` which
  16563. * is invoked to compare elements of `array`. The order of result values is
  16564. * determined by the order they occur in the array.The comparator is invoked
  16565. * with two arguments: (arrVal, othVal).
  16566. *
  16567. * @static
  16568. * @memberOf _
  16569. * @since 4.0.0
  16570. * @category Array
  16571. * @param {Array} array The array to inspect.
  16572. * @param {Function} [comparator] The comparator invoked per element.
  16573. * @returns {Array} Returns the new duplicate free array.
  16574. * @example
  16575. *
  16576. * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];
  16577. *
  16578. * _.uniqWith(objects, _.isEqual);
  16579. * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]
  16580. */
  16581. function uniqWith(array, comparator) {
  16582. comparator = typeof comparator == 'function' ? comparator : undefined;
  16583. return (array && array.length) ? baseUniq(array, undefined, comparator) : [];
  16584. }
  16585. /**
  16586. * This method is like `_.zip` except that it accepts an array of grouped
  16587. * elements and creates an array regrouping the elements to their pre-zip
  16588. * configuration.
  16589. *
  16590. * @static
  16591. * @memberOf _
  16592. * @since 1.2.0
  16593. * @category Array
  16594. * @param {Array} array The array of grouped elements to process.
  16595. * @returns {Array} Returns the new array of regrouped elements.
  16596. * @example
  16597. *
  16598. * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);
  16599. * // => [['a', 1, true], ['b', 2, false]]
  16600. *
  16601. * _.unzip(zipped);
  16602. * // => [['a', 'b'], [1, 2], [true, false]]
  16603. */
  16604. function unzip(array) {
  16605. if (!(array && array.length)) {
  16606. return [];
  16607. }
  16608. var length = 0;
  16609. array = arrayFilter(array, function(group) {
  16610. if (isArrayLikeObject(group)) {
  16611. length = nativeMax(group.length, length);
  16612. return true;
  16613. }
  16614. });
  16615. return baseTimes(length, function(index) {
  16616. return arrayMap(array, baseProperty(index));
  16617. });
  16618. }
  16619. /**
  16620. * This method is like `_.unzip` except that it accepts `iteratee` to specify
  16621. * how regrouped values should be combined. The iteratee is invoked with the
  16622. * elements of each group: (...group).
  16623. *
  16624. * @static
  16625. * @memberOf _
  16626. * @since 3.8.0
  16627. * @category Array
  16628. * @param {Array} array The array of grouped elements to process.
  16629. * @param {Function} [iteratee=_.identity] The function to combine
  16630. * regrouped values.
  16631. * @returns {Array} Returns the new array of regrouped elements.
  16632. * @example
  16633. *
  16634. * var zipped = _.zip([1, 2], [10, 20], [100, 200]);
  16635. * // => [[1, 10, 100], [2, 20, 200]]
  16636. *
  16637. * _.unzipWith(zipped, _.add);
  16638. * // => [3, 30, 300]
  16639. */
  16640. function unzipWith(array, iteratee) {
  16641. if (!(array && array.length)) {
  16642. return [];
  16643. }
  16644. var result = unzip(array);
  16645. if (iteratee == null) {
  16646. return result;
  16647. }
  16648. return arrayMap(result, function(group) {
  16649. return apply(iteratee, undefined, group);
  16650. });
  16651. }
  16652. /**
  16653. * Creates an array excluding all given values using
  16654. * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
  16655. * for equality comparisons.
  16656. *
  16657. * **Note:** Unlike `_.pull`, this method returns a new array.
  16658. *
  16659. * @static
  16660. * @memberOf _
  16661. * @since 0.1.0
  16662. * @category Array
  16663. * @param {Array} array The array to inspect.
  16664. * @param {...*} [values] The values to exclude.
  16665. * @returns {Array} Returns the new array of filtered values.
  16666. * @see _.difference, _.xor
  16667. * @example
  16668. *
  16669. * _.without([2, 1, 2, 3], 1, 2);
  16670. * // => [3]
  16671. */
  16672. var without = baseRest(function(array, values) {
  16673. return isArrayLikeObject(array)
  16674. ? baseDifference(array, values)
  16675. : [];
  16676. });
  16677. /**
  16678. * Creates an array of unique values that is the
  16679. * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)
  16680. * of the given arrays. The order of result values is determined by the order
  16681. * they occur in the arrays.
  16682. *
  16683. * @static
  16684. * @memberOf _
  16685. * @since 2.4.0
  16686. * @category Array
  16687. * @param {...Array} [arrays] The arrays to inspect.
  16688. * @returns {Array} Returns the new array of filtered values.
  16689. * @see _.difference, _.without
  16690. * @example
  16691. *
  16692. * _.xor([2, 1], [2, 3]);
  16693. * // => [1, 3]
  16694. */
  16695. var xor = baseRest(function(arrays) {
  16696. return baseXor(arrayFilter(arrays, isArrayLikeObject));
  16697. });
  16698. /**
  16699. * This method is like `_.xor` except that it accepts `iteratee` which is
  16700. * invoked for each element of each `arrays` to generate the criterion by
  16701. * which by which they're compared. The order of result values is determined
  16702. * by the order they occur in the arrays. The iteratee is invoked with one
  16703. * argument: (value).
  16704. *
  16705. * @static
  16706. * @memberOf _
  16707. * @since 4.0.0
  16708. * @category Array
  16709. * @param {...Array} [arrays] The arrays to inspect.
  16710. * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
  16711. * @returns {Array} Returns the new array of filtered values.
  16712. * @example
  16713. *
  16714. * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);
  16715. * // => [1.2, 3.4]
  16716. *
  16717. * // The `_.property` iteratee shorthand.
  16718. * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
  16719. * // => [{ 'x': 2 }]
  16720. */
  16721. var xorBy = baseRest(function(arrays) {
  16722. var iteratee = last(arrays);
  16723. if (isArrayLikeObject(iteratee)) {
  16724. iteratee = undefined;
  16725. }
  16726. return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));
  16727. });
  16728. /**
  16729. * This method is like `_.xor` except that it accepts `comparator` which is
  16730. * invoked to compare elements of `arrays`. The order of result values is
  16731. * determined by the order they occur in the arrays. The comparator is invoked
  16732. * with two arguments: (arrVal, othVal).
  16733. *
  16734. * @static
  16735. * @memberOf _
  16736. * @since 4.0.0
  16737. * @category Array
  16738. * @param {...Array} [arrays] The arrays to inspect.
  16739. * @param {Function} [comparator] The comparator invoked per element.
  16740. * @returns {Array} Returns the new array of filtered values.
  16741. * @example
  16742. *
  16743. * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
  16744. * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
  16745. *
  16746. * _.xorWith(objects, others, _.isEqual);
  16747. * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
  16748. */
  16749. var xorWith = baseRest(function(arrays) {
  16750. var comparator = last(arrays);
  16751. comparator = typeof comparator == 'function' ? comparator : undefined;
  16752. return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);
  16753. });
  16754. /**
  16755. * Creates an array of grouped elements, the first of which contains the
  16756. * first elements of the given arrays, the second of which contains the
  16757. * second elements of the given arrays, and so on.
  16758. *
  16759. * @static
  16760. * @memberOf _
  16761. * @since 0.1.0
  16762. * @category Array
  16763. * @param {...Array} [arrays] The arrays to process.
  16764. * @returns {Array} Returns the new array of grouped elements.
  16765. * @example
  16766. *
  16767. * _.zip(['a', 'b'], [1, 2], [true, false]);
  16768. * // => [['a', 1, true], ['b', 2, false]]
  16769. */
  16770. var zip = baseRest(unzip);
  16771. /**
  16772. * This method is like `_.fromPairs` except that it accepts two arrays,
  16773. * one of property identifiers and one of corresponding values.
  16774. *
  16775. * @static
  16776. * @memberOf _
  16777. * @since 0.4.0
  16778. * @category Array
  16779. * @param {Array} [props=[]] The property identifiers.
  16780. * @param {Array} [values=[]] The property values.
  16781. * @returns {Object} Returns the new object.
  16782. * @example
  16783. *
  16784. * _.zipObject(['a', 'b'], [1, 2]);
  16785. * // => { 'a': 1, 'b': 2 }
  16786. */
  16787. function zipObject(props, values) {
  16788. return baseZipObject(props || [], values || [], assignValue);
  16789. }
  16790. /**
  16791. * This method is like `_.zipObject` except that it supports property paths.
  16792. *
  16793. * @static
  16794. * @memberOf _
  16795. * @since 4.1.0
  16796. * @category Array
  16797. * @param {Array} [props=[]] The property identifiers.
  16798. * @param {Array} [values=[]] The property values.
  16799. * @returns {Object} Returns the new object.
  16800. * @example
  16801. *
  16802. * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);
  16803. * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }
  16804. */
  16805. function zipObjectDeep(props, values) {
  16806. return baseZipObject(props || [], values || [], baseSet);
  16807. }
  16808. /**
  16809. * This method is like `_.zip` except that it accepts `iteratee` to specify
  16810. * how grouped values should be combined. The iteratee is invoked with the
  16811. * elements of each group: (...group).
  16812. *
  16813. * @static
  16814. * @memberOf _
  16815. * @since 3.8.0
  16816. * @category Array
  16817. * @param {...Array} [arrays] The arrays to process.
  16818. * @param {Function} [iteratee=_.identity] The function to combine
  16819. * grouped values.
  16820. * @returns {Array} Returns the new array of grouped elements.
  16821. * @example
  16822. *
  16823. * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {
  16824. * return a + b + c;
  16825. * });
  16826. * // => [111, 222]
  16827. */
  16828. var zipWith = baseRest(function(arrays) {
  16829. var length = arrays.length,
  16830. iteratee = length > 1 ? arrays[length - 1] : undefined;
  16831. iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;
  16832. return unzipWith(arrays, iteratee);
  16833. });
  16834. /*------------------------------------------------------------------------*/
  16835. /**
  16836. * Creates a `lodash` wrapper instance that wraps `value` with explicit method
  16837. * chain sequences enabled. The result of such sequences must be unwrapped
  16838. * with `_#value`.
  16839. *
  16840. * @static
  16841. * @memberOf _
  16842. * @since 1.3.0
  16843. * @category Seq
  16844. * @param {*} value The value to wrap.
  16845. * @returns {Object} Returns the new `lodash` wrapper instance.
  16846. * @example
  16847. *
  16848. * var users = [
  16849. * { 'user': 'barney', 'age': 36 },
  16850. * { 'user': 'fred', 'age': 40 },
  16851. * { 'user': 'pebbles', 'age': 1 }
  16852. * ];
  16853. *
  16854. * var youngest = _
  16855. * .chain(users)
  16856. * .sortBy('age')
  16857. * .map(function(o) {
  16858. * return o.user + ' is ' + o.age;
  16859. * })
  16860. * .head()
  16861. * .value();
  16862. * // => 'pebbles is 1'
  16863. */
  16864. function chain(value) {
  16865. var result = lodash(value);
  16866. result.__chain__ = true;
  16867. return result;
  16868. }
  16869. /**
  16870. * This method invokes `interceptor` and returns `value`. The interceptor
  16871. * is invoked with one argument; (value). The purpose of this method is to
  16872. * "tap into" a method chain sequence in order to modify intermediate results.
  16873. *
  16874. * @static
  16875. * @memberOf _
  16876. * @since 0.1.0
  16877. * @category Seq
  16878. * @param {*} value The value to provide to `interceptor`.
  16879. * @param {Function} interceptor The function to invoke.
  16880. * @returns {*} Returns `value`.
  16881. * @example
  16882. *
  16883. * _([1, 2, 3])
  16884. * .tap(function(array) {
  16885. * // Mutate input array.
  16886. * array.pop();
  16887. * })
  16888. * .reverse()
  16889. * .value();
  16890. * // => [2, 1]
  16891. */
  16892. function tap(value, interceptor) {
  16893. interceptor(value);
  16894. return value;
  16895. }
  16896. /**
  16897. * This method is like `_.tap` except that it returns the result of `interceptor`.
  16898. * The purpose of this method is to "pass thru" values replacing intermediate
  16899. * results in a method chain sequence.
  16900. *
  16901. * @static
  16902. * @memberOf _
  16903. * @since 3.0.0
  16904. * @category Seq
  16905. * @param {*} value The value to provide to `interceptor`.
  16906. * @param {Function} interceptor The function to invoke.
  16907. * @returns {*} Returns the result of `interceptor`.
  16908. * @example
  16909. *
  16910. * _(' abc ')
  16911. * .chain()
  16912. * .trim()
  16913. * .thru(function(value) {
  16914. * return [value];
  16915. * })
  16916. * .value();
  16917. * // => ['abc']
  16918. */
  16919. function thru(value, interceptor) {
  16920. return interceptor(value);
  16921. }
  16922. /**
  16923. * This method is the wrapper version of `_.at`.
  16924. *
  16925. * @name at
  16926. * @memberOf _
  16927. * @since 1.0.0
  16928. * @category Seq
  16929. * @param {...(string|string[])} [paths] The property paths to pick.
  16930. * @returns {Object} Returns the new `lodash` wrapper instance.
  16931. * @example
  16932. *
  16933. * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
  16934. *
  16935. * _(object).at(['a[0].b.c', 'a[1]']).value();
  16936. * // => [3, 4]
  16937. */
  16938. var wrapperAt = flatRest(function(paths) {
  16939. var length = paths.length,
  16940. start = length ? paths[0] : 0,
  16941. value = this.__wrapped__,
  16942. interceptor = function(object) { return baseAt(object, paths); };
  16943. if (length > 1 || this.__actions__.length ||
  16944. !(value instanceof LazyWrapper) || !isIndex(start)) {
  16945. return this.thru(interceptor);
  16946. }
  16947. value = value.slice(start, +start + (length ? 1 : 0));
  16948. value.__actions__.push({
  16949. 'func': thru,
  16950. 'args': [interceptor],
  16951. 'thisArg': undefined
  16952. });
  16953. return new LodashWrapper(value, this.__chain__).thru(function(array) {
  16954. if (length && !array.length) {
  16955. array.push(undefined);
  16956. }
  16957. return array;
  16958. });
  16959. });
  16960. /**
  16961. * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.
  16962. *
  16963. * @name chain
  16964. * @memberOf _
  16965. * @since 0.1.0
  16966. * @category Seq
  16967. * @returns {Object} Returns the new `lodash` wrapper instance.
  16968. * @example
  16969. *
  16970. * var users = [
  16971. * { 'user': 'barney', 'age': 36 },
  16972. * { 'user': 'fred', 'age': 40 }
  16973. * ];
  16974. *
  16975. * // A sequence without explicit chaining.
  16976. * _(users).head();
  16977. * // => { 'user': 'barney', 'age': 36 }
  16978. *
  16979. * // A sequence with explicit chaining.
  16980. * _(users)
  16981. * .chain()
  16982. * .head()
  16983. * .pick('user')
  16984. * .value();
  16985. * // => { 'user': 'barney' }
  16986. */
  16987. function wrapperChain() {
  16988. return chain(this);
  16989. }
  16990. /**
  16991. * Executes the chain sequence and returns the wrapped result.
  16992. *
  16993. * @name commit
  16994. * @memberOf _
  16995. * @since 3.2.0
  16996. * @category Seq
  16997. * @returns {Object} Returns the new `lodash` wrapper instance.
  16998. * @example
  16999. *
  17000. * var array = [1, 2];
  17001. * var wrapped = _(array).push(3);
  17002. *
  17003. * console.log(array);
  17004. * // => [1, 2]
  17005. *
  17006. * wrapped = wrapped.commit();
  17007. * console.log(array);
  17008. * // => [1, 2, 3]
  17009. *
  17010. * wrapped.last();
  17011. * // => 3
  17012. *
  17013. * console.log(array);
  17014. * // => [1, 2, 3]
  17015. */
  17016. function wrapperCommit() {
  17017. return new LodashWrapper(this.value(), this.__chain__);
  17018. }
  17019. /**
  17020. * Gets the next value on a wrapped object following the
  17021. * [iterator protocol](https://mdn.io/iteration_protocols#iterator).
  17022. *
  17023. * @name next
  17024. * @memberOf _
  17025. * @since 4.0.0
  17026. * @category Seq
  17027. * @returns {Object} Returns the next iterator value.
  17028. * @example
  17029. *
  17030. * var wrapped = _([1, 2]);
  17031. *
  17032. * wrapped.next();
  17033. * // => { 'done': false, 'value': 1 }
  17034. *
  17035. * wrapped.next();
  17036. * // => { 'done': false, 'value': 2 }
  17037. *
  17038. * wrapped.next();
  17039. * // => { 'done': true, 'value': undefined }
  17040. */
  17041. function wrapperNext() {
  17042. if (this.__values__ === undefined) {
  17043. this.__values__ = toArray(this.value());
  17044. }
  17045. var done = this.__index__ >= this.__values__.length,
  17046. value = done ? undefined : this.__values__[this.__index__++];
  17047. return { 'done': done, 'value': value };
  17048. }
  17049. /**
  17050. * Enables the wrapper to be iterable.
  17051. *
  17052. * @name Symbol.iterator
  17053. * @memberOf _
  17054. * @since 4.0.0
  17055. * @category Seq
  17056. * @returns {Object} Returns the wrapper object.
  17057. * @example
  17058. *
  17059. * var wrapped = _([1, 2]);
  17060. *
  17061. * wrapped[Symbol.iterator]() === wrapped;
  17062. * // => true
  17063. *
  17064. * Array.from(wrapped);
  17065. * // => [1, 2]
  17066. */
  17067. function wrapperToIterator() {
  17068. return this;
  17069. }
  17070. /**
  17071. * Creates a clone of the chain sequence planting `value` as the wrapped value.
  17072. *
  17073. * @name plant
  17074. * @memberOf _
  17075. * @since 3.2.0
  17076. * @category Seq
  17077. * @param {*} value The value to plant.
  17078. * @returns {Object} Returns the new `lodash` wrapper instance.
  17079. * @example
  17080. *
  17081. * function square(n) {
  17082. * return n * n;
  17083. * }
  17084. *
  17085. * var wrapped = _([1, 2]).map(square);
  17086. * var other = wrapped.plant([3, 4]);
  17087. *
  17088. * other.value();
  17089. * // => [9, 16]
  17090. *
  17091. * wrapped.value();
  17092. * // => [1, 4]
  17093. */
  17094. function wrapperPlant(value) {
  17095. var result,
  17096. parent = this;
  17097. while (parent instanceof baseLodash) {
  17098. var clone = wrapperClone(parent);
  17099. clone.__index__ = 0;
  17100. clone.__values__ = undefined;
  17101. if (result) {
  17102. previous.__wrapped__ = clone;
  17103. } else {
  17104. result = clone;
  17105. }
  17106. var previous = clone;
  17107. parent = parent.__wrapped__;
  17108. }
  17109. previous.__wrapped__ = value;
  17110. return result;
  17111. }
  17112. /**
  17113. * This method is the wrapper version of `_.reverse`.
  17114. *
  17115. * **Note:** This method mutates the wrapped array.
  17116. *
  17117. * @name reverse
  17118. * @memberOf _
  17119. * @since 0.1.0
  17120. * @category Seq
  17121. * @returns {Object} Returns the new `lodash` wrapper instance.
  17122. * @example
  17123. *
  17124. * var array = [1, 2, 3];
  17125. *
  17126. * _(array).reverse().value()
  17127. * // => [3, 2, 1]
  17128. *
  17129. * console.log(array);
  17130. * // => [3, 2, 1]
  17131. */
  17132. function wrapperReverse() {
  17133. var value = this.__wrapped__;
  17134. if (value instanceof LazyWrapper) {
  17135. var wrapped = value;
  17136. if (this.__actions__.length) {
  17137. wrapped = new LazyWrapper(this);
  17138. }
  17139. wrapped = wrapped.reverse();
  17140. wrapped.__actions__.push({
  17141. 'func': thru,
  17142. 'args': [reverse],
  17143. 'thisArg': undefined
  17144. });
  17145. return new LodashWrapper(wrapped, this.__chain__);
  17146. }
  17147. return this.thru(reverse);
  17148. }
  17149. /**
  17150. * Executes the chain sequence to resolve the unwrapped value.
  17151. *
  17152. * @name value
  17153. * @memberOf _
  17154. * @since 0.1.0
  17155. * @alias toJSON, valueOf
  17156. * @category Seq
  17157. * @returns {*} Returns the resolved unwrapped value.
  17158. * @example
  17159. *
  17160. * _([1, 2, 3]).value();
  17161. * // => [1, 2, 3]
  17162. */
  17163. function wrapperValue() {
  17164. return baseWrapperValue(this.__wrapped__, this.__actions__);
  17165. }
  17166. /*------------------------------------------------------------------------*/
  17167. /**
  17168. * Creates an object composed of keys generated from the results of running
  17169. * each element of `collection` thru `iteratee`. The corresponding value of
  17170. * each key is the number of times the key was returned by `iteratee`. The
  17171. * iteratee is invoked with one argument: (value).
  17172. *
  17173. * @static
  17174. * @memberOf _
  17175. * @since 0.5.0
  17176. * @category Collection
  17177. * @param {Array|Object} collection The collection to iterate over.
  17178. * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
  17179. * @returns {Object} Returns the composed aggregate object.
  17180. * @example
  17181. *
  17182. * _.countBy([6.1, 4.2, 6.3], Math.floor);
  17183. * // => { '4': 1, '6': 2 }
  17184. *
  17185. * // The `_.property` iteratee shorthand.
  17186. * _.countBy(['one', 'two', 'three'], 'length');
  17187. * // => { '3': 2, '5': 1 }
  17188. */
  17189. var countBy = createAggregator(function(result, value, key) {
  17190. if (hasOwnProperty.call(result, key)) {
  17191. ++result[key];
  17192. } else {
  17193. baseAssignValue(result, key, 1);
  17194. }
  17195. });
  17196. /**
  17197. * Checks if `predicate` returns truthy for **all** elements of `collection`.
  17198. * Iteration is stopped once `predicate` returns falsey. The predicate is
  17199. * invoked with three arguments: (value, index|key, collection).
  17200. *
  17201. * **Note:** This method returns `true` for
  17202. * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because
  17203. * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of
  17204. * elements of empty collections.
  17205. *
  17206. * @static
  17207. * @memberOf _
  17208. * @since 0.1.0
  17209. * @category Collection
  17210. * @param {Array|Object} collection The collection to iterate over.
  17211. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  17212. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  17213. * @returns {boolean} Returns `true` if all elements pass the predicate check,
  17214. * else `false`.
  17215. * @example
  17216. *
  17217. * _.every([true, 1, null, 'yes'], Boolean);
  17218. * // => false
  17219. *
  17220. * var users = [
  17221. * { 'user': 'barney', 'age': 36, 'active': false },
  17222. * { 'user': 'fred', 'age': 40, 'active': false }
  17223. * ];
  17224. *
  17225. * // The `_.matches` iteratee shorthand.
  17226. * _.every(users, { 'user': 'barney', 'active': false });
  17227. * // => false
  17228. *
  17229. * // The `_.matchesProperty` iteratee shorthand.
  17230. * _.every(users, ['active', false]);
  17231. * // => true
  17232. *
  17233. * // The `_.property` iteratee shorthand.
  17234. * _.every(users, 'active');
  17235. * // => false
  17236. */
  17237. function every(collection, predicate, guard) {
  17238. var func = isArray(collection) ? arrayEvery : baseEvery;
  17239. if (guard && isIterateeCall(collection, predicate, guard)) {
  17240. predicate = undefined;
  17241. }
  17242. return func(collection, getIteratee(predicate, 3));
  17243. }
  17244. /**
  17245. * Iterates over elements of `collection`, returning an array of all elements
  17246. * `predicate` returns truthy for. The predicate is invoked with three
  17247. * arguments: (value, index|key, collection).
  17248. *
  17249. * **Note:** Unlike `_.remove`, this method returns a new array.
  17250. *
  17251. * @static
  17252. * @memberOf _
  17253. * @since 0.1.0
  17254. * @category Collection
  17255. * @param {Array|Object} collection The collection to iterate over.
  17256. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  17257. * @returns {Array} Returns the new filtered array.
  17258. * @see _.reject
  17259. * @example
  17260. *
  17261. * var users = [
  17262. * { 'user': 'barney', 'age': 36, 'active': true },
  17263. * { 'user': 'fred', 'age': 40, 'active': false }
  17264. * ];
  17265. *
  17266. * _.filter(users, function(o) { return !o.active; });
  17267. * // => objects for ['fred']
  17268. *
  17269. * // The `_.matches` iteratee shorthand.
  17270. * _.filter(users, { 'age': 36, 'active': true });
  17271. * // => objects for ['barney']
  17272. *
  17273. * // The `_.matchesProperty` iteratee shorthand.
  17274. * _.filter(users, ['active', false]);
  17275. * // => objects for ['fred']
  17276. *
  17277. * // The `_.property` iteratee shorthand.
  17278. * _.filter(users, 'active');
  17279. * // => objects for ['barney']
  17280. */
  17281. function filter(collection, predicate) {
  17282. var func = isArray(collection) ? arrayFilter : baseFilter;
  17283. return func(collection, getIteratee(predicate, 3));
  17284. }
  17285. /**
  17286. * Iterates over elements of `collection`, returning the first element
  17287. * `predicate` returns truthy for. The predicate is invoked with three
  17288. * arguments: (value, index|key, collection).
  17289. *
  17290. * @static
  17291. * @memberOf _
  17292. * @since 0.1.0
  17293. * @category Collection
  17294. * @param {Array|Object} collection The collection to inspect.
  17295. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  17296. * @param {number} [fromIndex=0] The index to search from.
  17297. * @returns {*} Returns the matched element, else `undefined`.
  17298. * @example
  17299. *
  17300. * var users = [
  17301. * { 'user': 'barney', 'age': 36, 'active': true },
  17302. * { 'user': 'fred', 'age': 40, 'active': false },
  17303. * { 'user': 'pebbles', 'age': 1, 'active': true }
  17304. * ];
  17305. *
  17306. * _.find(users, function(o) { return o.age < 40; });
  17307. * // => object for 'barney'
  17308. *
  17309. * // The `_.matches` iteratee shorthand.
  17310. * _.find(users, { 'age': 1, 'active': true });
  17311. * // => object for 'pebbles'
  17312. *
  17313. * // The `_.matchesProperty` iteratee shorthand.
  17314. * _.find(users, ['active', false]);
  17315. * // => object for 'fred'
  17316. *
  17317. * // The `_.property` iteratee shorthand.
  17318. * _.find(users, 'active');
  17319. * // => object for 'barney'
  17320. */
  17321. var find = createFind(findIndex);
  17322. /**
  17323. * This method is like `_.find` except that it iterates over elements of
  17324. * `collection` from right to left.
  17325. *
  17326. * @static
  17327. * @memberOf _
  17328. * @since 2.0.0
  17329. * @category Collection
  17330. * @param {Array|Object} collection The collection to inspect.
  17331. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  17332. * @param {number} [fromIndex=collection.length-1] The index to search from.
  17333. * @returns {*} Returns the matched element, else `undefined`.
  17334. * @example
  17335. *
  17336. * _.findLast([1, 2, 3, 4], function(n) {
  17337. * return n % 2 == 1;
  17338. * });
  17339. * // => 3
  17340. */
  17341. var findLast = createFind(findLastIndex);
  17342. /**
  17343. * Creates a flattened array of values by running each element in `collection`
  17344. * thru `iteratee` and flattening the mapped results. The iteratee is invoked
  17345. * with three arguments: (value, index|key, collection).
  17346. *
  17347. * @static
  17348. * @memberOf _
  17349. * @since 4.0.0
  17350. * @category Collection
  17351. * @param {Array|Object} collection The collection to iterate over.
  17352. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  17353. * @returns {Array} Returns the new flattened array.
  17354. * @example
  17355. *
  17356. * function duplicate(n) {
  17357. * return [n, n];
  17358. * }
  17359. *
  17360. * _.flatMap([1, 2], duplicate);
  17361. * // => [1, 1, 2, 2]
  17362. */
  17363. function flatMap(collection, iteratee) {
  17364. return baseFlatten(map(collection, iteratee), 1);
  17365. }
  17366. /**
  17367. * This method is like `_.flatMap` except that it recursively flattens the
  17368. * mapped results.
  17369. *
  17370. * @static
  17371. * @memberOf _
  17372. * @since 4.7.0
  17373. * @category Collection
  17374. * @param {Array|Object} collection The collection to iterate over.
  17375. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  17376. * @returns {Array} Returns the new flattened array.
  17377. * @example
  17378. *
  17379. * function duplicate(n) {
  17380. * return [[[n, n]]];
  17381. * }
  17382. *
  17383. * _.flatMapDeep([1, 2], duplicate);
  17384. * // => [1, 1, 2, 2]
  17385. */
  17386. function flatMapDeep(collection, iteratee) {
  17387. return baseFlatten(map(collection, iteratee), INFINITY);
  17388. }
  17389. /**
  17390. * This method is like `_.flatMap` except that it recursively flattens the
  17391. * mapped results up to `depth` times.
  17392. *
  17393. * @static
  17394. * @memberOf _
  17395. * @since 4.7.0
  17396. * @category Collection
  17397. * @param {Array|Object} collection The collection to iterate over.
  17398. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  17399. * @param {number} [depth=1] The maximum recursion depth.
  17400. * @returns {Array} Returns the new flattened array.
  17401. * @example
  17402. *
  17403. * function duplicate(n) {
  17404. * return [[[n, n]]];
  17405. * }
  17406. *
  17407. * _.flatMapDepth([1, 2], duplicate, 2);
  17408. * // => [[1, 1], [2, 2]]
  17409. */
  17410. function flatMapDepth(collection, iteratee, depth) {
  17411. depth = depth === undefined ? 1 : toInteger(depth);
  17412. return baseFlatten(map(collection, iteratee), depth);
  17413. }
  17414. /**
  17415. * Iterates over elements of `collection` and invokes `iteratee` for each element.
  17416. * The iteratee is invoked with three arguments: (value, index|key, collection).
  17417. * Iteratee functions may exit iteration early by explicitly returning `false`.
  17418. *
  17419. * **Note:** As with other "Collections" methods, objects with a "length"
  17420. * property are iterated like arrays. To avoid this behavior use `_.forIn`
  17421. * or `_.forOwn` for object iteration.
  17422. *
  17423. * @static
  17424. * @memberOf _
  17425. * @since 0.1.0
  17426. * @alias each
  17427. * @category Collection
  17428. * @param {Array|Object} collection The collection to iterate over.
  17429. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  17430. * @returns {Array|Object} Returns `collection`.
  17431. * @see _.forEachRight
  17432. * @example
  17433. *
  17434. * _.forEach([1, 2], function(value) {
  17435. * console.log(value);
  17436. * });
  17437. * // => Logs `1` then `2`.
  17438. *
  17439. * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
  17440. * console.log(key);
  17441. * });
  17442. * // => Logs 'a' then 'b' (iteration order is not guaranteed).
  17443. */
  17444. function forEach(collection, iteratee) {
  17445. var func = isArray(collection) ? arrayEach : baseEach;
  17446. return func(collection, getIteratee(iteratee, 3));
  17447. }
  17448. /**
  17449. * This method is like `_.forEach` except that it iterates over elements of
  17450. * `collection` from right to left.
  17451. *
  17452. * @static
  17453. * @memberOf _
  17454. * @since 2.0.0
  17455. * @alias eachRight
  17456. * @category Collection
  17457. * @param {Array|Object} collection The collection to iterate over.
  17458. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  17459. * @returns {Array|Object} Returns `collection`.
  17460. * @see _.forEach
  17461. * @example
  17462. *
  17463. * _.forEachRight([1, 2], function(value) {
  17464. * console.log(value);
  17465. * });
  17466. * // => Logs `2` then `1`.
  17467. */
  17468. function forEachRight(collection, iteratee) {
  17469. var func = isArray(collection) ? arrayEachRight : baseEachRight;
  17470. return func(collection, getIteratee(iteratee, 3));
  17471. }
  17472. /**
  17473. * Creates an object composed of keys generated from the results of running
  17474. * each element of `collection` thru `iteratee`. The order of grouped values
  17475. * is determined by the order they occur in `collection`. The corresponding
  17476. * value of each key is an array of elements responsible for generating the
  17477. * key. The iteratee is invoked with one argument: (value).
  17478. *
  17479. * @static
  17480. * @memberOf _
  17481. * @since 0.1.0
  17482. * @category Collection
  17483. * @param {Array|Object} collection The collection to iterate over.
  17484. * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
  17485. * @returns {Object} Returns the composed aggregate object.
  17486. * @example
  17487. *
  17488. * _.groupBy([6.1, 4.2, 6.3], Math.floor);
  17489. * // => { '4': [4.2], '6': [6.1, 6.3] }
  17490. *
  17491. * // The `_.property` iteratee shorthand.
  17492. * _.groupBy(['one', 'two', 'three'], 'length');
  17493. * // => { '3': ['one', 'two'], '5': ['three'] }
  17494. */
  17495. var groupBy = createAggregator(function(result, value, key) {
  17496. if (hasOwnProperty.call(result, key)) {
  17497. result[key].push(value);
  17498. } else {
  17499. baseAssignValue(result, key, [value]);
  17500. }
  17501. });
  17502. /**
  17503. * Checks if `value` is in `collection`. If `collection` is a string, it's
  17504. * checked for a substring of `value`, otherwise
  17505. * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
  17506. * is used for equality comparisons. If `fromIndex` is negative, it's used as
  17507. * the offset from the end of `collection`.
  17508. *
  17509. * @static
  17510. * @memberOf _
  17511. * @since 0.1.0
  17512. * @category Collection
  17513. * @param {Array|Object|string} collection The collection to inspect.
  17514. * @param {*} value The value to search for.
  17515. * @param {number} [fromIndex=0] The index to search from.
  17516. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
  17517. * @returns {boolean} Returns `true` if `value` is found, else `false`.
  17518. * @example
  17519. *
  17520. * _.includes([1, 2, 3], 1);
  17521. * // => true
  17522. *
  17523. * _.includes([1, 2, 3], 1, 2);
  17524. * // => false
  17525. *
  17526. * _.includes({ 'a': 1, 'b': 2 }, 1);
  17527. * // => true
  17528. *
  17529. * _.includes('abcd', 'bc');
  17530. * // => true
  17531. */
  17532. function includes(collection, value, fromIndex, guard) {
  17533. collection = isArrayLike(collection) ? collection : values(collection);
  17534. fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;
  17535. var length = collection.length;
  17536. if (fromIndex < 0) {
  17537. fromIndex = nativeMax(length + fromIndex, 0);
  17538. }
  17539. return isString(collection)
  17540. ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)
  17541. : (!!length && baseIndexOf(collection, value, fromIndex) > -1);
  17542. }
  17543. /**
  17544. * Invokes the method at `path` of each element in `collection`, returning
  17545. * an array of the results of each invoked method. Any additional arguments
  17546. * are provided to each invoked method. If `path` is a function, it's invoked
  17547. * for, and `this` bound to, each element in `collection`.
  17548. *
  17549. * @static
  17550. * @memberOf _
  17551. * @since 4.0.0
  17552. * @category Collection
  17553. * @param {Array|Object} collection The collection to iterate over.
  17554. * @param {Array|Function|string} path The path of the method to invoke or
  17555. * the function invoked per iteration.
  17556. * @param {...*} [args] The arguments to invoke each method with.
  17557. * @returns {Array} Returns the array of results.
  17558. * @example
  17559. *
  17560. * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');
  17561. * // => [[1, 5, 7], [1, 2, 3]]
  17562. *
  17563. * _.invokeMap([123, 456], String.prototype.split, '');
  17564. * // => [['1', '2', '3'], ['4', '5', '6']]
  17565. */
  17566. var invokeMap = baseRest(function(collection, path, args) {
  17567. var index = -1,
  17568. isFunc = typeof path == 'function',
  17569. result = isArrayLike(collection) ? Array(collection.length) : [];
  17570. baseEach(collection, function(value) {
  17571. result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);
  17572. });
  17573. return result;
  17574. });
  17575. /**
  17576. * Creates an object composed of keys generated from the results of running
  17577. * each element of `collection` thru `iteratee`. The corresponding value of
  17578. * each key is the last element responsible for generating the key. The
  17579. * iteratee is invoked with one argument: (value).
  17580. *
  17581. * @static
  17582. * @memberOf _
  17583. * @since 4.0.0
  17584. * @category Collection
  17585. * @param {Array|Object} collection The collection to iterate over.
  17586. * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
  17587. * @returns {Object} Returns the composed aggregate object.
  17588. * @example
  17589. *
  17590. * var array = [
  17591. * { 'dir': 'left', 'code': 97 },
  17592. * { 'dir': 'right', 'code': 100 }
  17593. * ];
  17594. *
  17595. * _.keyBy(array, function(o) {
  17596. * return String.fromCharCode(o.code);
  17597. * });
  17598. * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
  17599. *
  17600. * _.keyBy(array, 'dir');
  17601. * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
  17602. */
  17603. var keyBy = createAggregator(function(result, value, key) {
  17604. baseAssignValue(result, key, value);
  17605. });
  17606. /**
  17607. * Creates an array of values by running each element in `collection` thru
  17608. * `iteratee`. The iteratee is invoked with three arguments:
  17609. * (value, index|key, collection).
  17610. *
  17611. * Many lodash methods are guarded to work as iteratees for methods like
  17612. * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
  17613. *
  17614. * The guarded methods are:
  17615. * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,
  17616. * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,
  17617. * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,
  17618. * `template`, `trim`, `trimEnd`, `trimStart`, and `words`
  17619. *
  17620. * @static
  17621. * @memberOf _
  17622. * @since 0.1.0
  17623. * @category Collection
  17624. * @param {Array|Object} collection The collection to iterate over.
  17625. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  17626. * @returns {Array} Returns the new mapped array.
  17627. * @example
  17628. *
  17629. * function square(n) {
  17630. * return n * n;
  17631. * }
  17632. *
  17633. * _.map([4, 8], square);
  17634. * // => [16, 64]
  17635. *
  17636. * _.map({ 'a': 4, 'b': 8 }, square);
  17637. * // => [16, 64] (iteration order is not guaranteed)
  17638. *
  17639. * var users = [
  17640. * { 'user': 'barney' },
  17641. * { 'user': 'fred' }
  17642. * ];
  17643. *
  17644. * // The `_.property` iteratee shorthand.
  17645. * _.map(users, 'user');
  17646. * // => ['barney', 'fred']
  17647. */
  17648. function map(collection, iteratee) {
  17649. var func = isArray(collection) ? arrayMap : baseMap;
  17650. return func(collection, getIteratee(iteratee, 3));
  17651. }
  17652. /**
  17653. * This method is like `_.sortBy` except that it allows specifying the sort
  17654. * orders of the iteratees to sort by. If `orders` is unspecified, all values
  17655. * are sorted in ascending order. Otherwise, specify an order of "desc" for
  17656. * descending or "asc" for ascending sort order of corresponding values.
  17657. *
  17658. * @static
  17659. * @memberOf _
  17660. * @since 4.0.0
  17661. * @category Collection
  17662. * @param {Array|Object} collection The collection to iterate over.
  17663. * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]
  17664. * The iteratees to sort by.
  17665. * @param {string[]} [orders] The sort orders of `iteratees`.
  17666. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
  17667. * @returns {Array} Returns the new sorted array.
  17668. * @example
  17669. *
  17670. * var users = [
  17671. * { 'user': 'fred', 'age': 48 },
  17672. * { 'user': 'barney', 'age': 34 },
  17673. * { 'user': 'fred', 'age': 40 },
  17674. * { 'user': 'barney', 'age': 36 }
  17675. * ];
  17676. *
  17677. * // Sort by `user` in ascending order and by `age` in descending order.
  17678. * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);
  17679. * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
  17680. */
  17681. function orderBy(collection, iteratees, orders, guard) {
  17682. if (collection == null) {
  17683. return [];
  17684. }
  17685. if (!isArray(iteratees)) {
  17686. iteratees = iteratees == null ? [] : [iteratees];
  17687. }
  17688. orders = guard ? undefined : orders;
  17689. if (!isArray(orders)) {
  17690. orders = orders == null ? [] : [orders];
  17691. }
  17692. return baseOrderBy(collection, iteratees, orders);
  17693. }
  17694. /**
  17695. * Creates an array of elements split into two groups, the first of which
  17696. * contains elements `predicate` returns truthy for, the second of which
  17697. * contains elements `predicate` returns falsey for. The predicate is
  17698. * invoked with one argument: (value).
  17699. *
  17700. * @static
  17701. * @memberOf _
  17702. * @since 3.0.0
  17703. * @category Collection
  17704. * @param {Array|Object} collection The collection to iterate over.
  17705. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  17706. * @returns {Array} Returns the array of grouped elements.
  17707. * @example
  17708. *
  17709. * var users = [
  17710. * { 'user': 'barney', 'age': 36, 'active': false },
  17711. * { 'user': 'fred', 'age': 40, 'active': true },
  17712. * { 'user': 'pebbles', 'age': 1, 'active': false }
  17713. * ];
  17714. *
  17715. * _.partition(users, function(o) { return o.active; });
  17716. * // => objects for [['fred'], ['barney', 'pebbles']]
  17717. *
  17718. * // The `_.matches` iteratee shorthand.
  17719. * _.partition(users, { 'age': 1, 'active': false });
  17720. * // => objects for [['pebbles'], ['barney', 'fred']]
  17721. *
  17722. * // The `_.matchesProperty` iteratee shorthand.
  17723. * _.partition(users, ['active', false]);
  17724. * // => objects for [['barney', 'pebbles'], ['fred']]
  17725. *
  17726. * // The `_.property` iteratee shorthand.
  17727. * _.partition(users, 'active');
  17728. * // => objects for [['fred'], ['barney', 'pebbles']]
  17729. */
  17730. var partition = createAggregator(function(result, value, key) {
  17731. result[key ? 0 : 1].push(value);
  17732. }, function() { return [[], []]; });
  17733. /**
  17734. * Reduces `collection` to a value which is the accumulated result of running
  17735. * each element in `collection` thru `iteratee`, where each successive
  17736. * invocation is supplied the return value of the previous. If `accumulator`
  17737. * is not given, the first element of `collection` is used as the initial
  17738. * value. The iteratee is invoked with four arguments:
  17739. * (accumulator, value, index|key, collection).
  17740. *
  17741. * Many lodash methods are guarded to work as iteratees for methods like
  17742. * `_.reduce`, `_.reduceRight`, and `_.transform`.
  17743. *
  17744. * The guarded methods are:
  17745. * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,
  17746. * and `sortBy`
  17747. *
  17748. * @static
  17749. * @memberOf _
  17750. * @since 0.1.0
  17751. * @category Collection
  17752. * @param {Array|Object} collection The collection to iterate over.
  17753. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  17754. * @param {*} [accumulator] The initial value.
  17755. * @returns {*} Returns the accumulated value.
  17756. * @see _.reduceRight
  17757. * @example
  17758. *
  17759. * _.reduce([1, 2], function(sum, n) {
  17760. * return sum + n;
  17761. * }, 0);
  17762. * // => 3
  17763. *
  17764. * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
  17765. * (result[value] || (result[value] = [])).push(key);
  17766. * return result;
  17767. * }, {});
  17768. * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)
  17769. */
  17770. function reduce(collection, iteratee, accumulator) {
  17771. var func = isArray(collection) ? arrayReduce : baseReduce,
  17772. initAccum = arguments.length < 3;
  17773. return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);
  17774. }
  17775. /**
  17776. * This method is like `_.reduce` except that it iterates over elements of
  17777. * `collection` from right to left.
  17778. *
  17779. * @static
  17780. * @memberOf _
  17781. * @since 0.1.0
  17782. * @category Collection
  17783. * @param {Array|Object} collection The collection to iterate over.
  17784. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  17785. * @param {*} [accumulator] The initial value.
  17786. * @returns {*} Returns the accumulated value.
  17787. * @see _.reduce
  17788. * @example
  17789. *
  17790. * var array = [[0, 1], [2, 3], [4, 5]];
  17791. *
  17792. * _.reduceRight(array, function(flattened, other) {
  17793. * return flattened.concat(other);
  17794. * }, []);
  17795. * // => [4, 5, 2, 3, 0, 1]
  17796. */
  17797. function reduceRight(collection, iteratee, accumulator) {
  17798. var func = isArray(collection) ? arrayReduceRight : baseReduce,
  17799. initAccum = arguments.length < 3;
  17800. return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);
  17801. }
  17802. /**
  17803. * The opposite of `_.filter`; this method returns the elements of `collection`
  17804. * that `predicate` does **not** return truthy for.
  17805. *
  17806. * @static
  17807. * @memberOf _
  17808. * @since 0.1.0
  17809. * @category Collection
  17810. * @param {Array|Object} collection The collection to iterate over.
  17811. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  17812. * @returns {Array} Returns the new filtered array.
  17813. * @see _.filter
  17814. * @example
  17815. *
  17816. * var users = [
  17817. * { 'user': 'barney', 'age': 36, 'active': false },
  17818. * { 'user': 'fred', 'age': 40, 'active': true }
  17819. * ];
  17820. *
  17821. * _.reject(users, function(o) { return !o.active; });
  17822. * // => objects for ['fred']
  17823. *
  17824. * // The `_.matches` iteratee shorthand.
  17825. * _.reject(users, { 'age': 40, 'active': true });
  17826. * // => objects for ['barney']
  17827. *
  17828. * // The `_.matchesProperty` iteratee shorthand.
  17829. * _.reject(users, ['active', false]);
  17830. * // => objects for ['fred']
  17831. *
  17832. * // The `_.property` iteratee shorthand.
  17833. * _.reject(users, 'active');
  17834. * // => objects for ['barney']
  17835. */
  17836. function reject(collection, predicate) {
  17837. var func = isArray(collection) ? arrayFilter : baseFilter;
  17838. return func(collection, negate(getIteratee(predicate, 3)));
  17839. }
  17840. /**
  17841. * Gets a random element from `collection`.
  17842. *
  17843. * @static
  17844. * @memberOf _
  17845. * @since 2.0.0
  17846. * @category Collection
  17847. * @param {Array|Object} collection The collection to sample.
  17848. * @returns {*} Returns the random element.
  17849. * @example
  17850. *
  17851. * _.sample([1, 2, 3, 4]);
  17852. * // => 2
  17853. */
  17854. function sample(collection) {
  17855. var func = isArray(collection) ? arraySample : baseSample;
  17856. return func(collection);
  17857. }
  17858. /**
  17859. * Gets `n` random elements at unique keys from `collection` up to the
  17860. * size of `collection`.
  17861. *
  17862. * @static
  17863. * @memberOf _
  17864. * @since 4.0.0
  17865. * @category Collection
  17866. * @param {Array|Object} collection The collection to sample.
  17867. * @param {number} [n=1] The number of elements to sample.
  17868. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  17869. * @returns {Array} Returns the random elements.
  17870. * @example
  17871. *
  17872. * _.sampleSize([1, 2, 3], 2);
  17873. * // => [3, 1]
  17874. *
  17875. * _.sampleSize([1, 2, 3], 4);
  17876. * // => [2, 3, 1]
  17877. */
  17878. function sampleSize(collection, n, guard) {
  17879. if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {
  17880. n = 1;
  17881. } else {
  17882. n = toInteger(n);
  17883. }
  17884. var func = isArray(collection) ? arraySampleSize : baseSampleSize;
  17885. return func(collection, n);
  17886. }
  17887. /**
  17888. * Creates an array of shuffled values, using a version of the
  17889. * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).
  17890. *
  17891. * @static
  17892. * @memberOf _
  17893. * @since 0.1.0
  17894. * @category Collection
  17895. * @param {Array|Object} collection The collection to shuffle.
  17896. * @returns {Array} Returns the new shuffled array.
  17897. * @example
  17898. *
  17899. * _.shuffle([1, 2, 3, 4]);
  17900. * // => [4, 1, 3, 2]
  17901. */
  17902. function shuffle(collection) {
  17903. var func = isArray(collection) ? arrayShuffle : baseShuffle;
  17904. return func(collection);
  17905. }
  17906. /**
  17907. * Gets the size of `collection` by returning its length for array-like
  17908. * values or the number of own enumerable string keyed properties for objects.
  17909. *
  17910. * @static
  17911. * @memberOf _
  17912. * @since 0.1.0
  17913. * @category Collection
  17914. * @param {Array|Object|string} collection The collection to inspect.
  17915. * @returns {number} Returns the collection size.
  17916. * @example
  17917. *
  17918. * _.size([1, 2, 3]);
  17919. * // => 3
  17920. *
  17921. * _.size({ 'a': 1, 'b': 2 });
  17922. * // => 2
  17923. *
  17924. * _.size('pebbles');
  17925. * // => 7
  17926. */
  17927. function size(collection) {
  17928. if (collection == null) {
  17929. return 0;
  17930. }
  17931. if (isArrayLike(collection)) {
  17932. return isString(collection) ? stringSize(collection) : collection.length;
  17933. }
  17934. var tag = getTag(collection);
  17935. if (tag == mapTag || tag == setTag) {
  17936. return collection.size;
  17937. }
  17938. return baseKeys(collection).length;
  17939. }
  17940. /**
  17941. * Checks if `predicate` returns truthy for **any** element of `collection`.
  17942. * Iteration is stopped once `predicate` returns truthy. The predicate is
  17943. * invoked with three arguments: (value, index|key, collection).
  17944. *
  17945. * @static
  17946. * @memberOf _
  17947. * @since 0.1.0
  17948. * @category Collection
  17949. * @param {Array|Object} collection The collection to iterate over.
  17950. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  17951. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  17952. * @returns {boolean} Returns `true` if any element passes the predicate check,
  17953. * else `false`.
  17954. * @example
  17955. *
  17956. * _.some([null, 0, 'yes', false], Boolean);
  17957. * // => true
  17958. *
  17959. * var users = [
  17960. * { 'user': 'barney', 'active': true },
  17961. * { 'user': 'fred', 'active': false }
  17962. * ];
  17963. *
  17964. * // The `_.matches` iteratee shorthand.
  17965. * _.some(users, { 'user': 'barney', 'active': false });
  17966. * // => false
  17967. *
  17968. * // The `_.matchesProperty` iteratee shorthand.
  17969. * _.some(users, ['active', false]);
  17970. * // => true
  17971. *
  17972. * // The `_.property` iteratee shorthand.
  17973. * _.some(users, 'active');
  17974. * // => true
  17975. */
  17976. function some(collection, predicate, guard) {
  17977. var func = isArray(collection) ? arraySome : baseSome;
  17978. if (guard && isIterateeCall(collection, predicate, guard)) {
  17979. predicate = undefined;
  17980. }
  17981. return func(collection, getIteratee(predicate, 3));
  17982. }
  17983. /**
  17984. * Creates an array of elements, sorted in ascending order by the results of
  17985. * running each element in a collection thru each iteratee. This method
  17986. * performs a stable sort, that is, it preserves the original sort order of
  17987. * equal elements. The iteratees are invoked with one argument: (value).
  17988. *
  17989. * @static
  17990. * @memberOf _
  17991. * @since 0.1.0
  17992. * @category Collection
  17993. * @param {Array|Object} collection The collection to iterate over.
  17994. * @param {...(Function|Function[])} [iteratees=[_.identity]]
  17995. * The iteratees to sort by.
  17996. * @returns {Array} Returns the new sorted array.
  17997. * @example
  17998. *
  17999. * var users = [
  18000. * { 'user': 'fred', 'age': 48 },
  18001. * { 'user': 'barney', 'age': 36 },
  18002. * { 'user': 'fred', 'age': 40 },
  18003. * { 'user': 'barney', 'age': 34 }
  18004. * ];
  18005. *
  18006. * _.sortBy(users, [function(o) { return o.user; }]);
  18007. * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
  18008. *
  18009. * _.sortBy(users, ['user', 'age']);
  18010. * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]
  18011. */
  18012. var sortBy = baseRest(function(collection, iteratees) {
  18013. if (collection == null) {
  18014. return [];
  18015. }
  18016. var length = iteratees.length;
  18017. if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {
  18018. iteratees = [];
  18019. } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {
  18020. iteratees = [iteratees[0]];
  18021. }
  18022. return baseOrderBy(collection, baseFlatten(iteratees, 1), []);
  18023. });
  18024. /*------------------------------------------------------------------------*/
  18025. /**
  18026. * Gets the timestamp of the number of milliseconds that have elapsed since
  18027. * the Unix epoch (1 January 1970 00:00:00 UTC).
  18028. *
  18029. * @static
  18030. * @memberOf _
  18031. * @since 2.4.0
  18032. * @category Date
  18033. * @returns {number} Returns the timestamp.
  18034. * @example
  18035. *
  18036. * _.defer(function(stamp) {
  18037. * console.log(_.now() - stamp);
  18038. * }, _.now());
  18039. * // => Logs the number of milliseconds it took for the deferred invocation.
  18040. */
  18041. var now = ctxNow || function() {
  18042. return root.Date.now();
  18043. };
  18044. /*------------------------------------------------------------------------*/
  18045. /**
  18046. * The opposite of `_.before`; this method creates a function that invokes
  18047. * `func` once it's called `n` or more times.
  18048. *
  18049. * @static
  18050. * @memberOf _
  18051. * @since 0.1.0
  18052. * @category Function
  18053. * @param {number} n The number of calls before `func` is invoked.
  18054. * @param {Function} func The function to restrict.
  18055. * @returns {Function} Returns the new restricted function.
  18056. * @example
  18057. *
  18058. * var saves = ['profile', 'settings'];
  18059. *
  18060. * var done = _.after(saves.length, function() {
  18061. * console.log('done saving!');
  18062. * });
  18063. *
  18064. * _.forEach(saves, function(type) {
  18065. * asyncSave({ 'type': type, 'complete': done });
  18066. * });
  18067. * // => Logs 'done saving!' after the two async saves have completed.
  18068. */
  18069. function after(n, func) {
  18070. if (typeof func != 'function') {
  18071. throw new TypeError(FUNC_ERROR_TEXT);
  18072. }
  18073. n = toInteger(n);
  18074. return function() {
  18075. if (--n < 1) {
  18076. return func.apply(this, arguments);
  18077. }
  18078. };
  18079. }
  18080. /**
  18081. * Creates a function that invokes `func`, with up to `n` arguments,
  18082. * ignoring any additional arguments.
  18083. *
  18084. * @static
  18085. * @memberOf _
  18086. * @since 3.0.0
  18087. * @category Function
  18088. * @param {Function} func The function to cap arguments for.
  18089. * @param {number} [n=func.length] The arity cap.
  18090. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  18091. * @returns {Function} Returns the new capped function.
  18092. * @example
  18093. *
  18094. * _.map(['6', '8', '10'], _.ary(parseInt, 1));
  18095. * // => [6, 8, 10]
  18096. */
  18097. function ary(func, n, guard) {
  18098. n = guard ? undefined : n;
  18099. n = (func && n == null) ? func.length : n;
  18100. return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);
  18101. }
  18102. /**
  18103. * Creates a function that invokes `func`, with the `this` binding and arguments
  18104. * of the created function, while it's called less than `n` times. Subsequent
  18105. * calls to the created function return the result of the last `func` invocation.
  18106. *
  18107. * @static
  18108. * @memberOf _
  18109. * @since 3.0.0
  18110. * @category Function
  18111. * @param {number} n The number of calls at which `func` is no longer invoked.
  18112. * @param {Function} func The function to restrict.
  18113. * @returns {Function} Returns the new restricted function.
  18114. * @example
  18115. *
  18116. * jQuery(element).on('click', _.before(5, addContactToList));
  18117. * // => Allows adding up to 4 contacts to the list.
  18118. */
  18119. function before(n, func) {
  18120. var result;
  18121. if (typeof func != 'function') {
  18122. throw new TypeError(FUNC_ERROR_TEXT);
  18123. }
  18124. n = toInteger(n);
  18125. return function() {
  18126. if (--n > 0) {
  18127. result = func.apply(this, arguments);
  18128. }
  18129. if (n <= 1) {
  18130. func = undefined;
  18131. }
  18132. return result;
  18133. };
  18134. }
  18135. /**
  18136. * Creates a function that invokes `func` with the `this` binding of `thisArg`
  18137. * and `partials` prepended to the arguments it receives.
  18138. *
  18139. * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,
  18140. * may be used as a placeholder for partially applied arguments.
  18141. *
  18142. * **Note:** Unlike native `Function#bind`, this method doesn't set the "length"
  18143. * property of bound functions.
  18144. *
  18145. * @static
  18146. * @memberOf _
  18147. * @since 0.1.0
  18148. * @category Function
  18149. * @param {Function} func The function to bind.
  18150. * @param {*} thisArg The `this` binding of `func`.
  18151. * @param {...*} [partials] The arguments to be partially applied.
  18152. * @returns {Function} Returns the new bound function.
  18153. * @example
  18154. *
  18155. * function greet(greeting, punctuation) {
  18156. * return greeting + ' ' + this.user + punctuation;
  18157. * }
  18158. *
  18159. * var object = { 'user': 'fred' };
  18160. *
  18161. * var bound = _.bind(greet, object, 'hi');
  18162. * bound('!');
  18163. * // => 'hi fred!'
  18164. *
  18165. * // Bound with placeholders.
  18166. * var bound = _.bind(greet, object, _, '!');
  18167. * bound('hi');
  18168. * // => 'hi fred!'
  18169. */
  18170. var bind = baseRest(function(func, thisArg, partials) {
  18171. var bitmask = WRAP_BIND_FLAG;
  18172. if (partials.length) {
  18173. var holders = replaceHolders(partials, getHolder(bind));
  18174. bitmask |= WRAP_PARTIAL_FLAG;
  18175. }
  18176. return createWrap(func, bitmask, thisArg, partials, holders);
  18177. });
  18178. /**
  18179. * Creates a function that invokes the method at `object[key]` with `partials`
  18180. * prepended to the arguments it receives.
  18181. *
  18182. * This method differs from `_.bind` by allowing bound functions to reference
  18183. * methods that may be redefined or don't yet exist. See
  18184. * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)
  18185. * for more details.
  18186. *
  18187. * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic
  18188. * builds, may be used as a placeholder for partially applied arguments.
  18189. *
  18190. * @static
  18191. * @memberOf _
  18192. * @since 0.10.0
  18193. * @category Function
  18194. * @param {Object} object The object to invoke the method on.
  18195. * @param {string} key The key of the method.
  18196. * @param {...*} [partials] The arguments to be partially applied.
  18197. * @returns {Function} Returns the new bound function.
  18198. * @example
  18199. *
  18200. * var object = {
  18201. * 'user': 'fred',
  18202. * 'greet': function(greeting, punctuation) {
  18203. * return greeting + ' ' + this.user + punctuation;
  18204. * }
  18205. * };
  18206. *
  18207. * var bound = _.bindKey(object, 'greet', 'hi');
  18208. * bound('!');
  18209. * // => 'hi fred!'
  18210. *
  18211. * object.greet = function(greeting, punctuation) {
  18212. * return greeting + 'ya ' + this.user + punctuation;
  18213. * };
  18214. *
  18215. * bound('!');
  18216. * // => 'hiya fred!'
  18217. *
  18218. * // Bound with placeholders.
  18219. * var bound = _.bindKey(object, 'greet', _, '!');
  18220. * bound('hi');
  18221. * // => 'hiya fred!'
  18222. */
  18223. var bindKey = baseRest(function(object, key, partials) {
  18224. var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;
  18225. if (partials.length) {
  18226. var holders = replaceHolders(partials, getHolder(bindKey));
  18227. bitmask |= WRAP_PARTIAL_FLAG;
  18228. }
  18229. return createWrap(key, bitmask, object, partials, holders);
  18230. });
  18231. /**
  18232. * Creates a function that accepts arguments of `func` and either invokes
  18233. * `func` returning its result, if at least `arity` number of arguments have
  18234. * been provided, or returns a function that accepts the remaining `func`
  18235. * arguments, and so on. The arity of `func` may be specified if `func.length`
  18236. * is not sufficient.
  18237. *
  18238. * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,
  18239. * may be used as a placeholder for provided arguments.
  18240. *
  18241. * **Note:** This method doesn't set the "length" property of curried functions.
  18242. *
  18243. * @static
  18244. * @memberOf _
  18245. * @since 2.0.0
  18246. * @category Function
  18247. * @param {Function} func The function to curry.
  18248. * @param {number} [arity=func.length] The arity of `func`.
  18249. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  18250. * @returns {Function} Returns the new curried function.
  18251. * @example
  18252. *
  18253. * var abc = function(a, b, c) {
  18254. * return [a, b, c];
  18255. * };
  18256. *
  18257. * var curried = _.curry(abc);
  18258. *
  18259. * curried(1)(2)(3);
  18260. * // => [1, 2, 3]
  18261. *
  18262. * curried(1, 2)(3);
  18263. * // => [1, 2, 3]
  18264. *
  18265. * curried(1, 2, 3);
  18266. * // => [1, 2, 3]
  18267. *
  18268. * // Curried with placeholders.
  18269. * curried(1)(_, 3)(2);
  18270. * // => [1, 2, 3]
  18271. */
  18272. function curry(func, arity, guard) {
  18273. arity = guard ? undefined : arity;
  18274. var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
  18275. result.placeholder = curry.placeholder;
  18276. return result;
  18277. }
  18278. /**
  18279. * This method is like `_.curry` except that arguments are applied to `func`
  18280. * in the manner of `_.partialRight` instead of `_.partial`.
  18281. *
  18282. * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic
  18283. * builds, may be used as a placeholder for provided arguments.
  18284. *
  18285. * **Note:** This method doesn't set the "length" property of curried functions.
  18286. *
  18287. * @static
  18288. * @memberOf _
  18289. * @since 3.0.0
  18290. * @category Function
  18291. * @param {Function} func The function to curry.
  18292. * @param {number} [arity=func.length] The arity of `func`.
  18293. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  18294. * @returns {Function} Returns the new curried function.
  18295. * @example
  18296. *
  18297. * var abc = function(a, b, c) {
  18298. * return [a, b, c];
  18299. * };
  18300. *
  18301. * var curried = _.curryRight(abc);
  18302. *
  18303. * curried(3)(2)(1);
  18304. * // => [1, 2, 3]
  18305. *
  18306. * curried(2, 3)(1);
  18307. * // => [1, 2, 3]
  18308. *
  18309. * curried(1, 2, 3);
  18310. * // => [1, 2, 3]
  18311. *
  18312. * // Curried with placeholders.
  18313. * curried(3)(1, _)(2);
  18314. * // => [1, 2, 3]
  18315. */
  18316. function curryRight(func, arity, guard) {
  18317. arity = guard ? undefined : arity;
  18318. var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
  18319. result.placeholder = curryRight.placeholder;
  18320. return result;
  18321. }
  18322. /**
  18323. * Creates a debounced function that delays invoking `func` until after `wait`
  18324. * milliseconds have elapsed since the last time the debounced function was
  18325. * invoked. The debounced function comes with a `cancel` method to cancel
  18326. * delayed `func` invocations and a `flush` method to immediately invoke them.
  18327. * Provide `options` to indicate whether `func` should be invoked on the
  18328. * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
  18329. * with the last arguments provided to the debounced function. Subsequent
  18330. * calls to the debounced function return the result of the last `func`
  18331. * invocation.
  18332. *
  18333. * **Note:** If `leading` and `trailing` options are `true`, `func` is
  18334. * invoked on the trailing edge of the timeout only if the debounced function
  18335. * is invoked more than once during the `wait` timeout.
  18336. *
  18337. * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
  18338. * until to the next tick, similar to `setTimeout` with a timeout of `0`.
  18339. *
  18340. * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
  18341. * for details over the differences between `_.debounce` and `_.throttle`.
  18342. *
  18343. * @static
  18344. * @memberOf _
  18345. * @since 0.1.0
  18346. * @category Function
  18347. * @param {Function} func The function to debounce.
  18348. * @param {number} [wait=0] The number of milliseconds to delay.
  18349. * @param {Object} [options={}] The options object.
  18350. * @param {boolean} [options.leading=false]
  18351. * Specify invoking on the leading edge of the timeout.
  18352. * @param {number} [options.maxWait]
  18353. * The maximum time `func` is allowed to be delayed before it's invoked.
  18354. * @param {boolean} [options.trailing=true]
  18355. * Specify invoking on the trailing edge of the timeout.
  18356. * @returns {Function} Returns the new debounced function.
  18357. * @example
  18358. *
  18359. * // Avoid costly calculations while the window size is in flux.
  18360. * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
  18361. *
  18362. * // Invoke `sendMail` when clicked, debouncing subsequent calls.
  18363. * jQuery(element).on('click', _.debounce(sendMail, 300, {
  18364. * 'leading': true,
  18365. * 'trailing': false
  18366. * }));
  18367. *
  18368. * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
  18369. * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
  18370. * var source = new EventSource('/stream');
  18371. * jQuery(source).on('message', debounced);
  18372. *
  18373. * // Cancel the trailing debounced invocation.
  18374. * jQuery(window).on('popstate', debounced.cancel);
  18375. */
  18376. function debounce(func, wait, options) {
  18377. var lastArgs,
  18378. lastThis,
  18379. maxWait,
  18380. result,
  18381. timerId,
  18382. lastCallTime,
  18383. lastInvokeTime = 0,
  18384. leading = false,
  18385. maxing = false,
  18386. trailing = true;
  18387. if (typeof func != 'function') {
  18388. throw new TypeError(FUNC_ERROR_TEXT);
  18389. }
  18390. wait = toNumber(wait) || 0;
  18391. if (isObject(options)) {
  18392. leading = !!options.leading;
  18393. maxing = 'maxWait' in options;
  18394. maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
  18395. trailing = 'trailing' in options ? !!options.trailing : trailing;
  18396. }
  18397. function invokeFunc(time) {
  18398. var args = lastArgs,
  18399. thisArg = lastThis;
  18400. lastArgs = lastThis = undefined;
  18401. lastInvokeTime = time;
  18402. result = func.apply(thisArg, args);
  18403. return result;
  18404. }
  18405. function leadingEdge(time) {
  18406. // Reset any `maxWait` timer.
  18407. lastInvokeTime = time;
  18408. // Start the timer for the trailing edge.
  18409. timerId = setTimeout(timerExpired, wait);
  18410. // Invoke the leading edge.
  18411. return leading ? invokeFunc(time) : result;
  18412. }
  18413. function remainingWait(time) {
  18414. var timeSinceLastCall = time - lastCallTime,
  18415. timeSinceLastInvoke = time - lastInvokeTime,
  18416. timeWaiting = wait - timeSinceLastCall;
  18417. return maxing
  18418. ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)
  18419. : timeWaiting;
  18420. }
  18421. function shouldInvoke(time) {
  18422. var timeSinceLastCall = time - lastCallTime,
  18423. timeSinceLastInvoke = time - lastInvokeTime;
  18424. // Either this is the first call, activity has stopped and we're at the
  18425. // trailing edge, the system time has gone backwards and we're treating
  18426. // it as the trailing edge, or we've hit the `maxWait` limit.
  18427. return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
  18428. (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
  18429. }
  18430. function timerExpired() {
  18431. var time = now();
  18432. if (shouldInvoke(time)) {
  18433. return trailingEdge(time);
  18434. }
  18435. // Restart the timer.
  18436. timerId = setTimeout(timerExpired, remainingWait(time));
  18437. }
  18438. function trailingEdge(time) {
  18439. timerId = undefined;
  18440. // Only invoke if we have `lastArgs` which means `func` has been
  18441. // debounced at least once.
  18442. if (trailing && lastArgs) {
  18443. return invokeFunc(time);
  18444. }
  18445. lastArgs = lastThis = undefined;
  18446. return result;
  18447. }
  18448. function cancel() {
  18449. if (timerId !== undefined) {
  18450. clearTimeout(timerId);
  18451. }
  18452. lastInvokeTime = 0;
  18453. lastArgs = lastCallTime = lastThis = timerId = undefined;
  18454. }
  18455. function flush() {
  18456. return timerId === undefined ? result : trailingEdge(now());
  18457. }
  18458. function debounced() {
  18459. var time = now(),
  18460. isInvoking = shouldInvoke(time);
  18461. lastArgs = arguments;
  18462. lastThis = this;
  18463. lastCallTime = time;
  18464. if (isInvoking) {
  18465. if (timerId === undefined) {
  18466. return leadingEdge(lastCallTime);
  18467. }
  18468. if (maxing) {
  18469. // Handle invocations in a tight loop.
  18470. timerId = setTimeout(timerExpired, wait);
  18471. return invokeFunc(lastCallTime);
  18472. }
  18473. }
  18474. if (timerId === undefined) {
  18475. timerId = setTimeout(timerExpired, wait);
  18476. }
  18477. return result;
  18478. }
  18479. debounced.cancel = cancel;
  18480. debounced.flush = flush;
  18481. return debounced;
  18482. }
  18483. /**
  18484. * Defers invoking the `func` until the current call stack has cleared. Any
  18485. * additional arguments are provided to `func` when it's invoked.
  18486. *
  18487. * @static
  18488. * @memberOf _
  18489. * @since 0.1.0
  18490. * @category Function
  18491. * @param {Function} func The function to defer.
  18492. * @param {...*} [args] The arguments to invoke `func` with.
  18493. * @returns {number} Returns the timer id.
  18494. * @example
  18495. *
  18496. * _.defer(function(text) {
  18497. * console.log(text);
  18498. * }, 'deferred');
  18499. * // => Logs 'deferred' after one millisecond.
  18500. */
  18501. var defer = baseRest(function(func, args) {
  18502. return baseDelay(func, 1, args);
  18503. });
  18504. /**
  18505. * Invokes `func` after `wait` milliseconds. Any additional arguments are
  18506. * provided to `func` when it's invoked.
  18507. *
  18508. * @static
  18509. * @memberOf _
  18510. * @since 0.1.0
  18511. * @category Function
  18512. * @param {Function} func The function to delay.
  18513. * @param {number} wait The number of milliseconds to delay invocation.
  18514. * @param {...*} [args] The arguments to invoke `func` with.
  18515. * @returns {number} Returns the timer id.
  18516. * @example
  18517. *
  18518. * _.delay(function(text) {
  18519. * console.log(text);
  18520. * }, 1000, 'later');
  18521. * // => Logs 'later' after one second.
  18522. */
  18523. var delay = baseRest(function(func, wait, args) {
  18524. return baseDelay(func, toNumber(wait) || 0, args);
  18525. });
  18526. /**
  18527. * Creates a function that invokes `func` with arguments reversed.
  18528. *
  18529. * @static
  18530. * @memberOf _
  18531. * @since 4.0.0
  18532. * @category Function
  18533. * @param {Function} func The function to flip arguments for.
  18534. * @returns {Function} Returns the new flipped function.
  18535. * @example
  18536. *
  18537. * var flipped = _.flip(function() {
  18538. * return _.toArray(arguments);
  18539. * });
  18540. *
  18541. * flipped('a', 'b', 'c', 'd');
  18542. * // => ['d', 'c', 'b', 'a']
  18543. */
  18544. function flip(func) {
  18545. return createWrap(func, WRAP_FLIP_FLAG);
  18546. }
  18547. /**
  18548. * Creates a function that memoizes the result of `func`. If `resolver` is
  18549. * provided, it determines the cache key for storing the result based on the
  18550. * arguments provided to the memoized function. By default, the first argument
  18551. * provided to the memoized function is used as the map cache key. The `func`
  18552. * is invoked with the `this` binding of the memoized function.
  18553. *
  18554. * **Note:** The cache is exposed as the `cache` property on the memoized
  18555. * function. Its creation may be customized by replacing the `_.memoize.Cache`
  18556. * constructor with one whose instances implement the
  18557. * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
  18558. * method interface of `clear`, `delete`, `get`, `has`, and `set`.
  18559. *
  18560. * @static
  18561. * @memberOf _
  18562. * @since 0.1.0
  18563. * @category Function
  18564. * @param {Function} func The function to have its output memoized.
  18565. * @param {Function} [resolver] The function to resolve the cache key.
  18566. * @returns {Function} Returns the new memoized function.
  18567. * @example
  18568. *
  18569. * var object = { 'a': 1, 'b': 2 };
  18570. * var other = { 'c': 3, 'd': 4 };
  18571. *
  18572. * var values = _.memoize(_.values);
  18573. * values(object);
  18574. * // => [1, 2]
  18575. *
  18576. * values(other);
  18577. * // => [3, 4]
  18578. *
  18579. * object.a = 2;
  18580. * values(object);
  18581. * // => [1, 2]
  18582. *
  18583. * // Modify the result cache.
  18584. * values.cache.set(object, ['a', 'b']);
  18585. * values(object);
  18586. * // => ['a', 'b']
  18587. *
  18588. * // Replace `_.memoize.Cache`.
  18589. * _.memoize.Cache = WeakMap;
  18590. */
  18591. function memoize(func, resolver) {
  18592. if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {
  18593. throw new TypeError(FUNC_ERROR_TEXT);
  18594. }
  18595. var memoized = function() {
  18596. var args = arguments,
  18597. key = resolver ? resolver.apply(this, args) : args[0],
  18598. cache = memoized.cache;
  18599. if (cache.has(key)) {
  18600. return cache.get(key);
  18601. }
  18602. var result = func.apply(this, args);
  18603. memoized.cache = cache.set(key, result) || cache;
  18604. return result;
  18605. };
  18606. memoized.cache = new (memoize.Cache || MapCache);
  18607. return memoized;
  18608. }
  18609. // Expose `MapCache`.
  18610. memoize.Cache = MapCache;
  18611. /**
  18612. * Creates a function that negates the result of the predicate `func`. The
  18613. * `func` predicate is invoked with the `this` binding and arguments of the
  18614. * created function.
  18615. *
  18616. * @static
  18617. * @memberOf _
  18618. * @since 3.0.0
  18619. * @category Function
  18620. * @param {Function} predicate The predicate to negate.
  18621. * @returns {Function} Returns the new negated function.
  18622. * @example
  18623. *
  18624. * function isEven(n) {
  18625. * return n % 2 == 0;
  18626. * }
  18627. *
  18628. * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));
  18629. * // => [1, 3, 5]
  18630. */
  18631. function negate(predicate) {
  18632. if (typeof predicate != 'function') {
  18633. throw new TypeError(FUNC_ERROR_TEXT);
  18634. }
  18635. return function() {
  18636. var args = arguments;
  18637. switch (args.length) {
  18638. case 0: return !predicate.call(this);
  18639. case 1: return !predicate.call(this, args[0]);
  18640. case 2: return !predicate.call(this, args[0], args[1]);
  18641. case 3: return !predicate.call(this, args[0], args[1], args[2]);
  18642. }
  18643. return !predicate.apply(this, args);
  18644. };
  18645. }
  18646. /**
  18647. * Creates a function that is restricted to invoking `func` once. Repeat calls
  18648. * to the function return the value of the first invocation. The `func` is
  18649. * invoked with the `this` binding and arguments of the created function.
  18650. *
  18651. * @static
  18652. * @memberOf _
  18653. * @since 0.1.0
  18654. * @category Function
  18655. * @param {Function} func The function to restrict.
  18656. * @returns {Function} Returns the new restricted function.
  18657. * @example
  18658. *
  18659. * var initialize = _.once(createApplication);
  18660. * initialize();
  18661. * initialize();
  18662. * // => `createApplication` is invoked once
  18663. */
  18664. function once(func) {
  18665. return before(2, func);
  18666. }
  18667. /**
  18668. * Creates a function that invokes `func` with its arguments transformed.
  18669. *
  18670. * @static
  18671. * @since 4.0.0
  18672. * @memberOf _
  18673. * @category Function
  18674. * @param {Function} func The function to wrap.
  18675. * @param {...(Function|Function[])} [transforms=[_.identity]]
  18676. * The argument transforms.
  18677. * @returns {Function} Returns the new function.
  18678. * @example
  18679. *
  18680. * function doubled(n) {
  18681. * return n * 2;
  18682. * }
  18683. *
  18684. * function square(n) {
  18685. * return n * n;
  18686. * }
  18687. *
  18688. * var func = _.overArgs(function(x, y) {
  18689. * return [x, y];
  18690. * }, [square, doubled]);
  18691. *
  18692. * func(9, 3);
  18693. * // => [81, 6]
  18694. *
  18695. * func(10, 5);
  18696. * // => [100, 10]
  18697. */
  18698. var overArgs = castRest(function(func, transforms) {
  18699. transforms = (transforms.length == 1 && isArray(transforms[0]))
  18700. ? arrayMap(transforms[0], baseUnary(getIteratee()))
  18701. : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));
  18702. var funcsLength = transforms.length;
  18703. return baseRest(function(args) {
  18704. var index = -1,
  18705. length = nativeMin(args.length, funcsLength);
  18706. while (++index < length) {
  18707. args[index] = transforms[index].call(this, args[index]);
  18708. }
  18709. return apply(func, this, args);
  18710. });
  18711. });
  18712. /**
  18713. * Creates a function that invokes `func` with `partials` prepended to the
  18714. * arguments it receives. This method is like `_.bind` except it does **not**
  18715. * alter the `this` binding.
  18716. *
  18717. * The `_.partial.placeholder` value, which defaults to `_` in monolithic
  18718. * builds, may be used as a placeholder for partially applied arguments.
  18719. *
  18720. * **Note:** This method doesn't set the "length" property of partially
  18721. * applied functions.
  18722. *
  18723. * @static
  18724. * @memberOf _
  18725. * @since 0.2.0
  18726. * @category Function
  18727. * @param {Function} func The function to partially apply arguments to.
  18728. * @param {...*} [partials] The arguments to be partially applied.
  18729. * @returns {Function} Returns the new partially applied function.
  18730. * @example
  18731. *
  18732. * function greet(greeting, name) {
  18733. * return greeting + ' ' + name;
  18734. * }
  18735. *
  18736. * var sayHelloTo = _.partial(greet, 'hello');
  18737. * sayHelloTo('fred');
  18738. * // => 'hello fred'
  18739. *
  18740. * // Partially applied with placeholders.
  18741. * var greetFred = _.partial(greet, _, 'fred');
  18742. * greetFred('hi');
  18743. * // => 'hi fred'
  18744. */
  18745. var partial = baseRest(function(func, partials) {
  18746. var holders = replaceHolders(partials, getHolder(partial));
  18747. return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);
  18748. });
  18749. /**
  18750. * This method is like `_.partial` except that partially applied arguments
  18751. * are appended to the arguments it receives.
  18752. *
  18753. * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic
  18754. * builds, may be used as a placeholder for partially applied arguments.
  18755. *
  18756. * **Note:** This method doesn't set the "length" property of partially
  18757. * applied functions.
  18758. *
  18759. * @static
  18760. * @memberOf _
  18761. * @since 1.0.0
  18762. * @category Function
  18763. * @param {Function} func The function to partially apply arguments to.
  18764. * @param {...*} [partials] The arguments to be partially applied.
  18765. * @returns {Function} Returns the new partially applied function.
  18766. * @example
  18767. *
  18768. * function greet(greeting, name) {
  18769. * return greeting + ' ' + name;
  18770. * }
  18771. *
  18772. * var greetFred = _.partialRight(greet, 'fred');
  18773. * greetFred('hi');
  18774. * // => 'hi fred'
  18775. *
  18776. * // Partially applied with placeholders.
  18777. * var sayHelloTo = _.partialRight(greet, 'hello', _);
  18778. * sayHelloTo('fred');
  18779. * // => 'hello fred'
  18780. */
  18781. var partialRight = baseRest(function(func, partials) {
  18782. var holders = replaceHolders(partials, getHolder(partialRight));
  18783. return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);
  18784. });
  18785. /**
  18786. * Creates a function that invokes `func` with arguments arranged according
  18787. * to the specified `indexes` where the argument value at the first index is
  18788. * provided as the first argument, the argument value at the second index is
  18789. * provided as the second argument, and so on.
  18790. *
  18791. * @static
  18792. * @memberOf _
  18793. * @since 3.0.0
  18794. * @category Function
  18795. * @param {Function} func The function to rearrange arguments for.
  18796. * @param {...(number|number[])} indexes The arranged argument indexes.
  18797. * @returns {Function} Returns the new function.
  18798. * @example
  18799. *
  18800. * var rearged = _.rearg(function(a, b, c) {
  18801. * return [a, b, c];
  18802. * }, [2, 0, 1]);
  18803. *
  18804. * rearged('b', 'c', 'a')
  18805. * // => ['a', 'b', 'c']
  18806. */
  18807. var rearg = flatRest(function(func, indexes) {
  18808. return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);
  18809. });
  18810. /**
  18811. * Creates a function that invokes `func` with the `this` binding of the
  18812. * created function and arguments from `start` and beyond provided as
  18813. * an array.
  18814. *
  18815. * **Note:** This method is based on the
  18816. * [rest parameter](https://mdn.io/rest_parameters).
  18817. *
  18818. * @static
  18819. * @memberOf _
  18820. * @since 4.0.0
  18821. * @category Function
  18822. * @param {Function} func The function to apply a rest parameter to.
  18823. * @param {number} [start=func.length-1] The start position of the rest parameter.
  18824. * @returns {Function} Returns the new function.
  18825. * @example
  18826. *
  18827. * var say = _.rest(function(what, names) {
  18828. * return what + ' ' + _.initial(names).join(', ') +
  18829. * (_.size(names) > 1 ? ', & ' : '') + _.last(names);
  18830. * });
  18831. *
  18832. * say('hello', 'fred', 'barney', 'pebbles');
  18833. * // => 'hello fred, barney, & pebbles'
  18834. */
  18835. function rest(func, start) {
  18836. if (typeof func != 'function') {
  18837. throw new TypeError(FUNC_ERROR_TEXT);
  18838. }
  18839. start = start === undefined ? start : toInteger(start);
  18840. return baseRest(func, start);
  18841. }
  18842. /**
  18843. * Creates a function that invokes `func` with the `this` binding of the
  18844. * create function and an array of arguments much like
  18845. * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).
  18846. *
  18847. * **Note:** This method is based on the
  18848. * [spread operator](https://mdn.io/spread_operator).
  18849. *
  18850. * @static
  18851. * @memberOf _
  18852. * @since 3.2.0
  18853. * @category Function
  18854. * @param {Function} func The function to spread arguments over.
  18855. * @param {number} [start=0] The start position of the spread.
  18856. * @returns {Function} Returns the new function.
  18857. * @example
  18858. *
  18859. * var say = _.spread(function(who, what) {
  18860. * return who + ' says ' + what;
  18861. * });
  18862. *
  18863. * say(['fred', 'hello']);
  18864. * // => 'fred says hello'
  18865. *
  18866. * var numbers = Promise.all([
  18867. * Promise.resolve(40),
  18868. * Promise.resolve(36)
  18869. * ]);
  18870. *
  18871. * numbers.then(_.spread(function(x, y) {
  18872. * return x + y;
  18873. * }));
  18874. * // => a Promise of 76
  18875. */
  18876. function spread(func, start) {
  18877. if (typeof func != 'function') {
  18878. throw new TypeError(FUNC_ERROR_TEXT);
  18879. }
  18880. start = start == null ? 0 : nativeMax(toInteger(start), 0);
  18881. return baseRest(function(args) {
  18882. var array = args[start],
  18883. otherArgs = castSlice(args, 0, start);
  18884. if (array) {
  18885. arrayPush(otherArgs, array);
  18886. }
  18887. return apply(func, this, otherArgs);
  18888. });
  18889. }
  18890. /**
  18891. * Creates a throttled function that only invokes `func` at most once per
  18892. * every `wait` milliseconds. The throttled function comes with a `cancel`
  18893. * method to cancel delayed `func` invocations and a `flush` method to
  18894. * immediately invoke them. Provide `options` to indicate whether `func`
  18895. * should be invoked on the leading and/or trailing edge of the `wait`
  18896. * timeout. The `func` is invoked with the last arguments provided to the
  18897. * throttled function. Subsequent calls to the throttled function return the
  18898. * result of the last `func` invocation.
  18899. *
  18900. * **Note:** If `leading` and `trailing` options are `true`, `func` is
  18901. * invoked on the trailing edge of the timeout only if the throttled function
  18902. * is invoked more than once during the `wait` timeout.
  18903. *
  18904. * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
  18905. * until to the next tick, similar to `setTimeout` with a timeout of `0`.
  18906. *
  18907. * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
  18908. * for details over the differences between `_.throttle` and `_.debounce`.
  18909. *
  18910. * @static
  18911. * @memberOf _
  18912. * @since 0.1.0
  18913. * @category Function
  18914. * @param {Function} func The function to throttle.
  18915. * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
  18916. * @param {Object} [options={}] The options object.
  18917. * @param {boolean} [options.leading=true]
  18918. * Specify invoking on the leading edge of the timeout.
  18919. * @param {boolean} [options.trailing=true]
  18920. * Specify invoking on the trailing edge of the timeout.
  18921. * @returns {Function} Returns the new throttled function.
  18922. * @example
  18923. *
  18924. * // Avoid excessively updating the position while scrolling.
  18925. * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
  18926. *
  18927. * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
  18928. * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
  18929. * jQuery(element).on('click', throttled);
  18930. *
  18931. * // Cancel the trailing throttled invocation.
  18932. * jQuery(window).on('popstate', throttled.cancel);
  18933. */
  18934. function throttle(func, wait, options) {
  18935. var leading = true,
  18936. trailing = true;
  18937. if (typeof func != 'function') {
  18938. throw new TypeError(FUNC_ERROR_TEXT);
  18939. }
  18940. if (isObject(options)) {
  18941. leading = 'leading' in options ? !!options.leading : leading;
  18942. trailing = 'trailing' in options ? !!options.trailing : trailing;
  18943. }
  18944. return debounce(func, wait, {
  18945. 'leading': leading,
  18946. 'maxWait': wait,
  18947. 'trailing': trailing
  18948. });
  18949. }
  18950. /**
  18951. * Creates a function that accepts up to one argument, ignoring any
  18952. * additional arguments.
  18953. *
  18954. * @static
  18955. * @memberOf _
  18956. * @since 4.0.0
  18957. * @category Function
  18958. * @param {Function} func The function to cap arguments for.
  18959. * @returns {Function} Returns the new capped function.
  18960. * @example
  18961. *
  18962. * _.map(['6', '8', '10'], _.unary(parseInt));
  18963. * // => [6, 8, 10]
  18964. */
  18965. function unary(func) {
  18966. return ary(func, 1);
  18967. }
  18968. /**
  18969. * Creates a function that provides `value` to `wrapper` as its first
  18970. * argument. Any additional arguments provided to the function are appended
  18971. * to those provided to the `wrapper`. The wrapper is invoked with the `this`
  18972. * binding of the created function.
  18973. *
  18974. * @static
  18975. * @memberOf _
  18976. * @since 0.1.0
  18977. * @category Function
  18978. * @param {*} value The value to wrap.
  18979. * @param {Function} [wrapper=identity] The wrapper function.
  18980. * @returns {Function} Returns the new function.
  18981. * @example
  18982. *
  18983. * var p = _.wrap(_.escape, function(func, text) {
  18984. * return '<p>' + func(text) + '</p>';
  18985. * });
  18986. *
  18987. * p('fred, barney, & pebbles');
  18988. * // => '<p>fred, barney, &amp; pebbles</p>'
  18989. */
  18990. function wrap(value, wrapper) {
  18991. return partial(castFunction(wrapper), value);
  18992. }
  18993. /*------------------------------------------------------------------------*/
  18994. /**
  18995. * Casts `value` as an array if it's not one.
  18996. *
  18997. * @static
  18998. * @memberOf _
  18999. * @since 4.4.0
  19000. * @category Lang
  19001. * @param {*} value The value to inspect.
  19002. * @returns {Array} Returns the cast array.
  19003. * @example
  19004. *
  19005. * _.castArray(1);
  19006. * // => [1]
  19007. *
  19008. * _.castArray({ 'a': 1 });
  19009. * // => [{ 'a': 1 }]
  19010. *
  19011. * _.castArray('abc');
  19012. * // => ['abc']
  19013. *
  19014. * _.castArray(null);
  19015. * // => [null]
  19016. *
  19017. * _.castArray(undefined);
  19018. * // => [undefined]
  19019. *
  19020. * _.castArray();
  19021. * // => []
  19022. *
  19023. * var array = [1, 2, 3];
  19024. * console.log(_.castArray(array) === array);
  19025. * // => true
  19026. */
  19027. function castArray() {
  19028. if (!arguments.length) {
  19029. return [];
  19030. }
  19031. var value = arguments[0];
  19032. return isArray(value) ? value : [value];
  19033. }
  19034. /**
  19035. * Creates a shallow clone of `value`.
  19036. *
  19037. * **Note:** This method is loosely based on the
  19038. * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)
  19039. * and supports cloning arrays, array buffers, booleans, date objects, maps,
  19040. * numbers, `Object` objects, regexes, sets, strings, symbols, and typed
  19041. * arrays. The own enumerable properties of `arguments` objects are cloned
  19042. * as plain objects. An empty object is returned for uncloneable values such
  19043. * as error objects, functions, DOM nodes, and WeakMaps.
  19044. *
  19045. * @static
  19046. * @memberOf _
  19047. * @since 0.1.0
  19048. * @category Lang
  19049. * @param {*} value The value to clone.
  19050. * @returns {*} Returns the cloned value.
  19051. * @see _.cloneDeep
  19052. * @example
  19053. *
  19054. * var objects = [{ 'a': 1 }, { 'b': 2 }];
  19055. *
  19056. * var shallow = _.clone(objects);
  19057. * console.log(shallow[0] === objects[0]);
  19058. * // => true
  19059. */
  19060. function clone(value) {
  19061. return baseClone(value, CLONE_SYMBOLS_FLAG);
  19062. }
  19063. /**
  19064. * This method is like `_.clone` except that it accepts `customizer` which
  19065. * is invoked to produce the cloned value. If `customizer` returns `undefined`,
  19066. * cloning is handled by the method instead. The `customizer` is invoked with
  19067. * up to four arguments; (value [, index|key, object, stack]).
  19068. *
  19069. * @static
  19070. * @memberOf _
  19071. * @since 4.0.0
  19072. * @category Lang
  19073. * @param {*} value The value to clone.
  19074. * @param {Function} [customizer] The function to customize cloning.
  19075. * @returns {*} Returns the cloned value.
  19076. * @see _.cloneDeepWith
  19077. * @example
  19078. *
  19079. * function customizer(value) {
  19080. * if (_.isElement(value)) {
  19081. * return value.cloneNode(false);
  19082. * }
  19083. * }
  19084. *
  19085. * var el = _.cloneWith(document.body, customizer);
  19086. *
  19087. * console.log(el === document.body);
  19088. * // => false
  19089. * console.log(el.nodeName);
  19090. * // => 'BODY'
  19091. * console.log(el.childNodes.length);
  19092. * // => 0
  19093. */
  19094. function cloneWith(value, customizer) {
  19095. customizer = typeof customizer == 'function' ? customizer : undefined;
  19096. return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);
  19097. }
  19098. /**
  19099. * This method is like `_.clone` except that it recursively clones `value`.
  19100. *
  19101. * @static
  19102. * @memberOf _
  19103. * @since 1.0.0
  19104. * @category Lang
  19105. * @param {*} value The value to recursively clone.
  19106. * @returns {*} Returns the deep cloned value.
  19107. * @see _.clone
  19108. * @example
  19109. *
  19110. * var objects = [{ 'a': 1 }, { 'b': 2 }];
  19111. *
  19112. * var deep = _.cloneDeep(objects);
  19113. * console.log(deep[0] === objects[0]);
  19114. * // => false
  19115. */
  19116. function cloneDeep(value) {
  19117. return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);
  19118. }
  19119. /**
  19120. * This method is like `_.cloneWith` except that it recursively clones `value`.
  19121. *
  19122. * @static
  19123. * @memberOf _
  19124. * @since 4.0.0
  19125. * @category Lang
  19126. * @param {*} value The value to recursively clone.
  19127. * @param {Function} [customizer] The function to customize cloning.
  19128. * @returns {*} Returns the deep cloned value.
  19129. * @see _.cloneWith
  19130. * @example
  19131. *
  19132. * function customizer(value) {
  19133. * if (_.isElement(value)) {
  19134. * return value.cloneNode(true);
  19135. * }
  19136. * }
  19137. *
  19138. * var el = _.cloneDeepWith(document.body, customizer);
  19139. *
  19140. * console.log(el === document.body);
  19141. * // => false
  19142. * console.log(el.nodeName);
  19143. * // => 'BODY'
  19144. * console.log(el.childNodes.length);
  19145. * // => 20
  19146. */
  19147. function cloneDeepWith(value, customizer) {
  19148. customizer = typeof customizer == 'function' ? customizer : undefined;
  19149. return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);
  19150. }
  19151. /**
  19152. * Checks if `object` conforms to `source` by invoking the predicate
  19153. * properties of `source` with the corresponding property values of `object`.
  19154. *
  19155. * **Note:** This method is equivalent to `_.conforms` when `source` is
  19156. * partially applied.
  19157. *
  19158. * @static
  19159. * @memberOf _
  19160. * @since 4.14.0
  19161. * @category Lang
  19162. * @param {Object} object The object to inspect.
  19163. * @param {Object} source The object of property predicates to conform to.
  19164. * @returns {boolean} Returns `true` if `object` conforms, else `false`.
  19165. * @example
  19166. *
  19167. * var object = { 'a': 1, 'b': 2 };
  19168. *
  19169. * _.conformsTo(object, { 'b': function(n) { return n > 1; } });
  19170. * // => true
  19171. *
  19172. * _.conformsTo(object, { 'b': function(n) { return n > 2; } });
  19173. * // => false
  19174. */
  19175. function conformsTo(object, source) {
  19176. return source == null || baseConformsTo(object, source, keys(source));
  19177. }
  19178. /**
  19179. * Performs a
  19180. * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
  19181. * comparison between two values to determine if they are equivalent.
  19182. *
  19183. * @static
  19184. * @memberOf _
  19185. * @since 4.0.0
  19186. * @category Lang
  19187. * @param {*} value The value to compare.
  19188. * @param {*} other The other value to compare.
  19189. * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
  19190. * @example
  19191. *
  19192. * var object = { 'a': 1 };
  19193. * var other = { 'a': 1 };
  19194. *
  19195. * _.eq(object, object);
  19196. * // => true
  19197. *
  19198. * _.eq(object, other);
  19199. * // => false
  19200. *
  19201. * _.eq('a', 'a');
  19202. * // => true
  19203. *
  19204. * _.eq('a', Object('a'));
  19205. * // => false
  19206. *
  19207. * _.eq(NaN, NaN);
  19208. * // => true
  19209. */
  19210. function eq(value, other) {
  19211. return value === other || (value !== value && other !== other);
  19212. }
  19213. /**
  19214. * Checks if `value` is greater than `other`.
  19215. *
  19216. * @static
  19217. * @memberOf _
  19218. * @since 3.9.0
  19219. * @category Lang
  19220. * @param {*} value The value to compare.
  19221. * @param {*} other The other value to compare.
  19222. * @returns {boolean} Returns `true` if `value` is greater than `other`,
  19223. * else `false`.
  19224. * @see _.lt
  19225. * @example
  19226. *
  19227. * _.gt(3, 1);
  19228. * // => true
  19229. *
  19230. * _.gt(3, 3);
  19231. * // => false
  19232. *
  19233. * _.gt(1, 3);
  19234. * // => false
  19235. */
  19236. var gt = createRelationalOperation(baseGt);
  19237. /**
  19238. * Checks if `value` is greater than or equal to `other`.
  19239. *
  19240. * @static
  19241. * @memberOf _
  19242. * @since 3.9.0
  19243. * @category Lang
  19244. * @param {*} value The value to compare.
  19245. * @param {*} other The other value to compare.
  19246. * @returns {boolean} Returns `true` if `value` is greater than or equal to
  19247. * `other`, else `false`.
  19248. * @see _.lte
  19249. * @example
  19250. *
  19251. * _.gte(3, 1);
  19252. * // => true
  19253. *
  19254. * _.gte(3, 3);
  19255. * // => true
  19256. *
  19257. * _.gte(1, 3);
  19258. * // => false
  19259. */
  19260. var gte = createRelationalOperation(function(value, other) {
  19261. return value >= other;
  19262. });
  19263. /**
  19264. * Checks if `value` is likely an `arguments` object.
  19265. *
  19266. * @static
  19267. * @memberOf _
  19268. * @since 0.1.0
  19269. * @category Lang
  19270. * @param {*} value The value to check.
  19271. * @returns {boolean} Returns `true` if `value` is an `arguments` object,
  19272. * else `false`.
  19273. * @example
  19274. *
  19275. * _.isArguments(function() { return arguments; }());
  19276. * // => true
  19277. *
  19278. * _.isArguments([1, 2, 3]);
  19279. * // => false
  19280. */
  19281. var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {
  19282. return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&
  19283. !propertyIsEnumerable.call(value, 'callee');
  19284. };
  19285. /**
  19286. * Checks if `value` is classified as an `Array` object.
  19287. *
  19288. * @static
  19289. * @memberOf _
  19290. * @since 0.1.0
  19291. * @category Lang
  19292. * @param {*} value The value to check.
  19293. * @returns {boolean} Returns `true` if `value` is an array, else `false`.
  19294. * @example
  19295. *
  19296. * _.isArray([1, 2, 3]);
  19297. * // => true
  19298. *
  19299. * _.isArray(document.body.children);
  19300. * // => false
  19301. *
  19302. * _.isArray('abc');
  19303. * // => false
  19304. *
  19305. * _.isArray(_.noop);
  19306. * // => false
  19307. */
  19308. var isArray = Array.isArray;
  19309. /**
  19310. * Checks if `value` is classified as an `ArrayBuffer` object.
  19311. *
  19312. * @static
  19313. * @memberOf _
  19314. * @since 4.3.0
  19315. * @category Lang
  19316. * @param {*} value The value to check.
  19317. * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
  19318. * @example
  19319. *
  19320. * _.isArrayBuffer(new ArrayBuffer(2));
  19321. * // => true
  19322. *
  19323. * _.isArrayBuffer(new Array(2));
  19324. * // => false
  19325. */
  19326. var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;
  19327. /**
  19328. * Checks if `value` is array-like. A value is considered array-like if it's
  19329. * not a function and has a `value.length` that's an integer greater than or
  19330. * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
  19331. *
  19332. * @static
  19333. * @memberOf _
  19334. * @since 4.0.0
  19335. * @category Lang
  19336. * @param {*} value The value to check.
  19337. * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
  19338. * @example
  19339. *
  19340. * _.isArrayLike([1, 2, 3]);
  19341. * // => true
  19342. *
  19343. * _.isArrayLike(document.body.children);
  19344. * // => true
  19345. *
  19346. * _.isArrayLike('abc');
  19347. * // => true
  19348. *
  19349. * _.isArrayLike(_.noop);
  19350. * // => false
  19351. */
  19352. function isArrayLike(value) {
  19353. return value != null && isLength(value.length) && !isFunction(value);
  19354. }
  19355. /**
  19356. * This method is like `_.isArrayLike` except that it also checks if `value`
  19357. * is an object.
  19358. *
  19359. * @static
  19360. * @memberOf _
  19361. * @since 4.0.0
  19362. * @category Lang
  19363. * @param {*} value The value to check.
  19364. * @returns {boolean} Returns `true` if `value` is an array-like object,
  19365. * else `false`.
  19366. * @example
  19367. *
  19368. * _.isArrayLikeObject([1, 2, 3]);
  19369. * // => true
  19370. *
  19371. * _.isArrayLikeObject(document.body.children);
  19372. * // => true
  19373. *
  19374. * _.isArrayLikeObject('abc');
  19375. * // => false
  19376. *
  19377. * _.isArrayLikeObject(_.noop);
  19378. * // => false
  19379. */
  19380. function isArrayLikeObject(value) {
  19381. return isObjectLike(value) && isArrayLike(value);
  19382. }
  19383. /**
  19384. * Checks if `value` is classified as a boolean primitive or object.
  19385. *
  19386. * @static
  19387. * @memberOf _
  19388. * @since 0.1.0
  19389. * @category Lang
  19390. * @param {*} value The value to check.
  19391. * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.
  19392. * @example
  19393. *
  19394. * _.isBoolean(false);
  19395. * // => true
  19396. *
  19397. * _.isBoolean(null);
  19398. * // => false
  19399. */
  19400. function isBoolean(value) {
  19401. return value === true || value === false ||
  19402. (isObjectLike(value) && baseGetTag(value) == boolTag);
  19403. }
  19404. /**
  19405. * Checks if `value` is a buffer.
  19406. *
  19407. * @static
  19408. * @memberOf _
  19409. * @since 4.3.0
  19410. * @category Lang
  19411. * @param {*} value The value to check.
  19412. * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
  19413. * @example
  19414. *
  19415. * _.isBuffer(new Buffer(2));
  19416. * // => true
  19417. *
  19418. * _.isBuffer(new Uint8Array(2));
  19419. * // => false
  19420. */
  19421. var isBuffer = nativeIsBuffer || stubFalse;
  19422. /**
  19423. * Checks if `value` is classified as a `Date` object.
  19424. *
  19425. * @static
  19426. * @memberOf _
  19427. * @since 0.1.0
  19428. * @category Lang
  19429. * @param {*} value The value to check.
  19430. * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
  19431. * @example
  19432. *
  19433. * _.isDate(new Date);
  19434. * // => true
  19435. *
  19436. * _.isDate('Mon April 23 2012');
  19437. * // => false
  19438. */
  19439. var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;
  19440. /**
  19441. * Checks if `value` is likely a DOM element.
  19442. *
  19443. * @static
  19444. * @memberOf _
  19445. * @since 0.1.0
  19446. * @category Lang
  19447. * @param {*} value The value to check.
  19448. * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.
  19449. * @example
  19450. *
  19451. * _.isElement(document.body);
  19452. * // => true
  19453. *
  19454. * _.isElement('<body>');
  19455. * // => false
  19456. */
  19457. function isElement(value) {
  19458. return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);
  19459. }
  19460. /**
  19461. * Checks if `value` is an empty object, collection, map, or set.
  19462. *
  19463. * Objects are considered empty if they have no own enumerable string keyed
  19464. * properties.
  19465. *
  19466. * Array-like values such as `arguments` objects, arrays, buffers, strings, or
  19467. * jQuery-like collections are considered empty if they have a `length` of `0`.
  19468. * Similarly, maps and sets are considered empty if they have a `size` of `0`.
  19469. *
  19470. * @static
  19471. * @memberOf _
  19472. * @since 0.1.0
  19473. * @category Lang
  19474. * @param {*} value The value to check.
  19475. * @returns {boolean} Returns `true` if `value` is empty, else `false`.
  19476. * @example
  19477. *
  19478. * _.isEmpty(null);
  19479. * // => true
  19480. *
  19481. * _.isEmpty(true);
  19482. * // => true
  19483. *
  19484. * _.isEmpty(1);
  19485. * // => true
  19486. *
  19487. * _.isEmpty([1, 2, 3]);
  19488. * // => false
  19489. *
  19490. * _.isEmpty({ 'a': 1 });
  19491. * // => false
  19492. */
  19493. function isEmpty(value) {
  19494. if (value == null) {
  19495. return true;
  19496. }
  19497. if (isArrayLike(value) &&
  19498. (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||
  19499. isBuffer(value) || isTypedArray(value) || isArguments(value))) {
  19500. return !value.length;
  19501. }
  19502. var tag = getTag(value);
  19503. if (tag == mapTag || tag == setTag) {
  19504. return !value.size;
  19505. }
  19506. if (isPrototype(value)) {
  19507. return !baseKeys(value).length;
  19508. }
  19509. for (var key in value) {
  19510. if (hasOwnProperty.call(value, key)) {
  19511. return false;
  19512. }
  19513. }
  19514. return true;
  19515. }
  19516. /**
  19517. * Performs a deep comparison between two values to determine if they are
  19518. * equivalent.
  19519. *
  19520. * **Note:** This method supports comparing arrays, array buffers, booleans,
  19521. * date objects, error objects, maps, numbers, `Object` objects, regexes,
  19522. * sets, strings, symbols, and typed arrays. `Object` objects are compared
  19523. * by their own, not inherited, enumerable properties. Functions and DOM
  19524. * nodes are compared by strict equality, i.e. `===`.
  19525. *
  19526. * @static
  19527. * @memberOf _
  19528. * @since 0.1.0
  19529. * @category Lang
  19530. * @param {*} value The value to compare.
  19531. * @param {*} other The other value to compare.
  19532. * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
  19533. * @example
  19534. *
  19535. * var object = { 'a': 1 };
  19536. * var other = { 'a': 1 };
  19537. *
  19538. * _.isEqual(object, other);
  19539. * // => true
  19540. *
  19541. * object === other;
  19542. * // => false
  19543. */
  19544. function isEqual(value, other) {
  19545. return baseIsEqual(value, other);
  19546. }
  19547. /**
  19548. * This method is like `_.isEqual` except that it accepts `customizer` which
  19549. * is invoked to compare values. If `customizer` returns `undefined`, comparisons
  19550. * are handled by the method instead. The `customizer` is invoked with up to
  19551. * six arguments: (objValue, othValue [, index|key, object, other, stack]).
  19552. *
  19553. * @static
  19554. * @memberOf _
  19555. * @since 4.0.0
  19556. * @category Lang
  19557. * @param {*} value The value to compare.
  19558. * @param {*} other The other value to compare.
  19559. * @param {Function} [customizer] The function to customize comparisons.
  19560. * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
  19561. * @example
  19562. *
  19563. * function isGreeting(value) {
  19564. * return /^h(?:i|ello)$/.test(value);
  19565. * }
  19566. *
  19567. * function customizer(objValue, othValue) {
  19568. * if (isGreeting(objValue) && isGreeting(othValue)) {
  19569. * return true;
  19570. * }
  19571. * }
  19572. *
  19573. * var array = ['hello', 'goodbye'];
  19574. * var other = ['hi', 'goodbye'];
  19575. *
  19576. * _.isEqualWith(array, other, customizer);
  19577. * // => true
  19578. */
  19579. function isEqualWith(value, other, customizer) {
  19580. customizer = typeof customizer == 'function' ? customizer : undefined;
  19581. var result = customizer ? customizer(value, other) : undefined;
  19582. return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;
  19583. }
  19584. /**
  19585. * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,
  19586. * `SyntaxError`, `TypeError`, or `URIError` object.
  19587. *
  19588. * @static
  19589. * @memberOf _
  19590. * @since 3.0.0
  19591. * @category Lang
  19592. * @param {*} value The value to check.
  19593. * @returns {boolean} Returns `true` if `value` is an error object, else `false`.
  19594. * @example
  19595. *
  19596. * _.isError(new Error);
  19597. * // => true
  19598. *
  19599. * _.isError(Error);
  19600. * // => false
  19601. */
  19602. function isError(value) {
  19603. if (!isObjectLike(value)) {
  19604. return false;
  19605. }
  19606. var tag = baseGetTag(value);
  19607. return tag == errorTag || tag == domExcTag ||
  19608. (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));
  19609. }
  19610. /**
  19611. * Checks if `value` is a finite primitive number.
  19612. *
  19613. * **Note:** This method is based on
  19614. * [`Number.isFinite`](https://mdn.io/Number/isFinite).
  19615. *
  19616. * @static
  19617. * @memberOf _
  19618. * @since 0.1.0
  19619. * @category Lang
  19620. * @param {*} value The value to check.
  19621. * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.
  19622. * @example
  19623. *
  19624. * _.isFinite(3);
  19625. * // => true
  19626. *
  19627. * _.isFinite(Number.MIN_VALUE);
  19628. * // => true
  19629. *
  19630. * _.isFinite(Infinity);
  19631. * // => false
  19632. *
  19633. * _.isFinite('3');
  19634. * // => false
  19635. */
  19636. function isFinite(value) {
  19637. return typeof value == 'number' && nativeIsFinite(value);
  19638. }
  19639. /**
  19640. * Checks if `value` is classified as a `Function` object.
  19641. *
  19642. * @static
  19643. * @memberOf _
  19644. * @since 0.1.0
  19645. * @category Lang
  19646. * @param {*} value The value to check.
  19647. * @returns {boolean} Returns `true` if `value` is a function, else `false`.
  19648. * @example
  19649. *
  19650. * _.isFunction(_);
  19651. * // => true
  19652. *
  19653. * _.isFunction(/abc/);
  19654. * // => false
  19655. */
  19656. function isFunction(value) {
  19657. if (!isObject(value)) {
  19658. return false;
  19659. }
  19660. // The use of `Object#toString` avoids issues with the `typeof` operator
  19661. // in Safari 9 which returns 'object' for typed arrays and other constructors.
  19662. var tag = baseGetTag(value);
  19663. return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
  19664. }
  19665. /**
  19666. * Checks if `value` is an integer.
  19667. *
  19668. * **Note:** This method is based on
  19669. * [`Number.isInteger`](https://mdn.io/Number/isInteger).
  19670. *
  19671. * @static
  19672. * @memberOf _
  19673. * @since 4.0.0
  19674. * @category Lang
  19675. * @param {*} value The value to check.
  19676. * @returns {boolean} Returns `true` if `value` is an integer, else `false`.
  19677. * @example
  19678. *
  19679. * _.isInteger(3);
  19680. * // => true
  19681. *
  19682. * _.isInteger(Number.MIN_VALUE);
  19683. * // => false
  19684. *
  19685. * _.isInteger(Infinity);
  19686. * // => false
  19687. *
  19688. * _.isInteger('3');
  19689. * // => false
  19690. */
  19691. function isInteger(value) {
  19692. return typeof value == 'number' && value == toInteger(value);
  19693. }
  19694. /**
  19695. * Checks if `value` is a valid array-like length.
  19696. *
  19697. * **Note:** This method is loosely based on
  19698. * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
  19699. *
  19700. * @static
  19701. * @memberOf _
  19702. * @since 4.0.0
  19703. * @category Lang
  19704. * @param {*} value The value to check.
  19705. * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
  19706. * @example
  19707. *
  19708. * _.isLength(3);
  19709. * // => true
  19710. *
  19711. * _.isLength(Number.MIN_VALUE);
  19712. * // => false
  19713. *
  19714. * _.isLength(Infinity);
  19715. * // => false
  19716. *
  19717. * _.isLength('3');
  19718. * // => false
  19719. */
  19720. function isLength(value) {
  19721. return typeof value == 'number' &&
  19722. value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
  19723. }
  19724. /**
  19725. * Checks if `value` is the
  19726. * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
  19727. * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
  19728. *
  19729. * @static
  19730. * @memberOf _
  19731. * @since 0.1.0
  19732. * @category Lang
  19733. * @param {*} value The value to check.
  19734. * @returns {boolean} Returns `true` if `value` is an object, else `false`.
  19735. * @example
  19736. *
  19737. * _.isObject({});
  19738. * // => true
  19739. *
  19740. * _.isObject([1, 2, 3]);
  19741. * // => true
  19742. *
  19743. * _.isObject(_.noop);
  19744. * // => true
  19745. *
  19746. * _.isObject(null);
  19747. * // => false
  19748. */
  19749. function isObject(value) {
  19750. var type = typeof value;
  19751. return value != null && (type == 'object' || type == 'function');
  19752. }
  19753. /**
  19754. * Checks if `value` is object-like. A value is object-like if it's not `null`
  19755. * and has a `typeof` result of "object".
  19756. *
  19757. * @static
  19758. * @memberOf _
  19759. * @since 4.0.0
  19760. * @category Lang
  19761. * @param {*} value The value to check.
  19762. * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
  19763. * @example
  19764. *
  19765. * _.isObjectLike({});
  19766. * // => true
  19767. *
  19768. * _.isObjectLike([1, 2, 3]);
  19769. * // => true
  19770. *
  19771. * _.isObjectLike(_.noop);
  19772. * // => false
  19773. *
  19774. * _.isObjectLike(null);
  19775. * // => false
  19776. */
  19777. function isObjectLike(value) {
  19778. return value != null && typeof value == 'object';
  19779. }
  19780. /**
  19781. * Checks if `value` is classified as a `Map` object.
  19782. *
  19783. * @static
  19784. * @memberOf _
  19785. * @since 4.3.0
  19786. * @category Lang
  19787. * @param {*} value The value to check.
  19788. * @returns {boolean} Returns `true` if `value` is a map, else `false`.
  19789. * @example
  19790. *
  19791. * _.isMap(new Map);
  19792. * // => true
  19793. *
  19794. * _.isMap(new WeakMap);
  19795. * // => false
  19796. */
  19797. var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;
  19798. /**
  19799. * Performs a partial deep comparison between `object` and `source` to
  19800. * determine if `object` contains equivalent property values.
  19801. *
  19802. * **Note:** This method is equivalent to `_.matches` when `source` is
  19803. * partially applied.
  19804. *
  19805. * Partial comparisons will match empty array and empty object `source`
  19806. * values against any array or object value, respectively. See `_.isEqual`
  19807. * for a list of supported value comparisons.
  19808. *
  19809. * @static
  19810. * @memberOf _
  19811. * @since 3.0.0
  19812. * @category Lang
  19813. * @param {Object} object The object to inspect.
  19814. * @param {Object} source The object of property values to match.
  19815. * @returns {boolean} Returns `true` if `object` is a match, else `false`.
  19816. * @example
  19817. *
  19818. * var object = { 'a': 1, 'b': 2 };
  19819. *
  19820. * _.isMatch(object, { 'b': 2 });
  19821. * // => true
  19822. *
  19823. * _.isMatch(object, { 'b': 1 });
  19824. * // => false
  19825. */
  19826. function isMatch(object, source) {
  19827. return object === source || baseIsMatch(object, source, getMatchData(source));
  19828. }
  19829. /**
  19830. * This method is like `_.isMatch` except that it accepts `customizer` which
  19831. * is invoked to compare values. If `customizer` returns `undefined`, comparisons
  19832. * are handled by the method instead. The `customizer` is invoked with five
  19833. * arguments: (objValue, srcValue, index|key, object, source).
  19834. *
  19835. * @static
  19836. * @memberOf _
  19837. * @since 4.0.0
  19838. * @category Lang
  19839. * @param {Object} object The object to inspect.
  19840. * @param {Object} source The object of property values to match.
  19841. * @param {Function} [customizer] The function to customize comparisons.
  19842. * @returns {boolean} Returns `true` if `object` is a match, else `false`.
  19843. * @example
  19844. *
  19845. * function isGreeting(value) {
  19846. * return /^h(?:i|ello)$/.test(value);
  19847. * }
  19848. *
  19849. * function customizer(objValue, srcValue) {
  19850. * if (isGreeting(objValue) && isGreeting(srcValue)) {
  19851. * return true;
  19852. * }
  19853. * }
  19854. *
  19855. * var object = { 'greeting': 'hello' };
  19856. * var source = { 'greeting': 'hi' };
  19857. *
  19858. * _.isMatchWith(object, source, customizer);
  19859. * // => true
  19860. */
  19861. function isMatchWith(object, source, customizer) {
  19862. customizer = typeof customizer == 'function' ? customizer : undefined;
  19863. return baseIsMatch(object, source, getMatchData(source), customizer);
  19864. }
  19865. /**
  19866. * Checks if `value` is `NaN`.
  19867. *
  19868. * **Note:** This method is based on
  19869. * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as
  19870. * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for
  19871. * `undefined` and other non-number values.
  19872. *
  19873. * @static
  19874. * @memberOf _
  19875. * @since 0.1.0
  19876. * @category Lang
  19877. * @param {*} value The value to check.
  19878. * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
  19879. * @example
  19880. *
  19881. * _.isNaN(NaN);
  19882. * // => true
  19883. *
  19884. * _.isNaN(new Number(NaN));
  19885. * // => true
  19886. *
  19887. * isNaN(undefined);
  19888. * // => true
  19889. *
  19890. * _.isNaN(undefined);
  19891. * // => false
  19892. */
  19893. function isNaN(value) {
  19894. // An `NaN` primitive is the only value that is not equal to itself.
  19895. // Perform the `toStringTag` check first to avoid errors with some
  19896. // ActiveX objects in IE.
  19897. return isNumber(value) && value != +value;
  19898. }
  19899. /**
  19900. * Checks if `value` is a pristine native function.
  19901. *
  19902. * **Note:** This method can't reliably detect native functions in the presence
  19903. * of the core-js package because core-js circumvents this kind of detection.
  19904. * Despite multiple requests, the core-js maintainer has made it clear: any
  19905. * attempt to fix the detection will be obstructed. As a result, we're left
  19906. * with little choice but to throw an error. Unfortunately, this also affects
  19907. * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),
  19908. * which rely on core-js.
  19909. *
  19910. * @static
  19911. * @memberOf _
  19912. * @since 3.0.0
  19913. * @category Lang
  19914. * @param {*} value The value to check.
  19915. * @returns {boolean} Returns `true` if `value` is a native function,
  19916. * else `false`.
  19917. * @example
  19918. *
  19919. * _.isNative(Array.prototype.push);
  19920. * // => true
  19921. *
  19922. * _.isNative(_);
  19923. * // => false
  19924. */
  19925. function isNative(value) {
  19926. if (isMaskable(value)) {
  19927. throw new Error(CORE_ERROR_TEXT);
  19928. }
  19929. return baseIsNative(value);
  19930. }
  19931. /**
  19932. * Checks if `value` is `null`.
  19933. *
  19934. * @static
  19935. * @memberOf _
  19936. * @since 0.1.0
  19937. * @category Lang
  19938. * @param {*} value The value to check.
  19939. * @returns {boolean} Returns `true` if `value` is `null`, else `false`.
  19940. * @example
  19941. *
  19942. * _.isNull(null);
  19943. * // => true
  19944. *
  19945. * _.isNull(void 0);
  19946. * // => false
  19947. */
  19948. function isNull(value) {
  19949. return value === null;
  19950. }
  19951. /**
  19952. * Checks if `value` is `null` or `undefined`.
  19953. *
  19954. * @static
  19955. * @memberOf _
  19956. * @since 4.0.0
  19957. * @category Lang
  19958. * @param {*} value The value to check.
  19959. * @returns {boolean} Returns `true` if `value` is nullish, else `false`.
  19960. * @example
  19961. *
  19962. * _.isNil(null);
  19963. * // => true
  19964. *
  19965. * _.isNil(void 0);
  19966. * // => true
  19967. *
  19968. * _.isNil(NaN);
  19969. * // => false
  19970. */
  19971. function isNil(value) {
  19972. return value == null;
  19973. }
  19974. /**
  19975. * Checks if `value` is classified as a `Number` primitive or object.
  19976. *
  19977. * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are
  19978. * classified as numbers, use the `_.isFinite` method.
  19979. *
  19980. * @static
  19981. * @memberOf _
  19982. * @since 0.1.0
  19983. * @category Lang
  19984. * @param {*} value The value to check.
  19985. * @returns {boolean} Returns `true` if `value` is a number, else `false`.
  19986. * @example
  19987. *
  19988. * _.isNumber(3);
  19989. * // => true
  19990. *
  19991. * _.isNumber(Number.MIN_VALUE);
  19992. * // => true
  19993. *
  19994. * _.isNumber(Infinity);
  19995. * // => true
  19996. *
  19997. * _.isNumber('3');
  19998. * // => false
  19999. */
  20000. function isNumber(value) {
  20001. return typeof value == 'number' ||
  20002. (isObjectLike(value) && baseGetTag(value) == numberTag);
  20003. }
  20004. /**
  20005. * Checks if `value` is a plain object, that is, an object created by the
  20006. * `Object` constructor or one with a `[[Prototype]]` of `null`.
  20007. *
  20008. * @static
  20009. * @memberOf _
  20010. * @since 0.8.0
  20011. * @category Lang
  20012. * @param {*} value The value to check.
  20013. * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
  20014. * @example
  20015. *
  20016. * function Foo() {
  20017. * this.a = 1;
  20018. * }
  20019. *
  20020. * _.isPlainObject(new Foo);
  20021. * // => false
  20022. *
  20023. * _.isPlainObject([1, 2, 3]);
  20024. * // => false
  20025. *
  20026. * _.isPlainObject({ 'x': 0, 'y': 0 });
  20027. * // => true
  20028. *
  20029. * _.isPlainObject(Object.create(null));
  20030. * // => true
  20031. */
  20032. function isPlainObject(value) {
  20033. if (!isObjectLike(value) || baseGetTag(value) != objectTag) {
  20034. return false;
  20035. }
  20036. var proto = getPrototype(value);
  20037. if (proto === null) {
  20038. return true;
  20039. }
  20040. var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;
  20041. return typeof Ctor == 'function' && Ctor instanceof Ctor &&
  20042. funcToString.call(Ctor) == objectCtorString;
  20043. }
  20044. /**
  20045. * Checks if `value` is classified as a `RegExp` object.
  20046. *
  20047. * @static
  20048. * @memberOf _
  20049. * @since 0.1.0
  20050. * @category Lang
  20051. * @param {*} value The value to check.
  20052. * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
  20053. * @example
  20054. *
  20055. * _.isRegExp(/abc/);
  20056. * // => true
  20057. *
  20058. * _.isRegExp('/abc/');
  20059. * // => false
  20060. */
  20061. var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;
  20062. /**
  20063. * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754
  20064. * double precision number which isn't the result of a rounded unsafe integer.
  20065. *
  20066. * **Note:** This method is based on
  20067. * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).
  20068. *
  20069. * @static
  20070. * @memberOf _
  20071. * @since 4.0.0
  20072. * @category Lang
  20073. * @param {*} value The value to check.
  20074. * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.
  20075. * @example
  20076. *
  20077. * _.isSafeInteger(3);
  20078. * // => true
  20079. *
  20080. * _.isSafeInteger(Number.MIN_VALUE);
  20081. * // => false
  20082. *
  20083. * _.isSafeInteger(Infinity);
  20084. * // => false
  20085. *
  20086. * _.isSafeInteger('3');
  20087. * // => false
  20088. */
  20089. function isSafeInteger(value) {
  20090. return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;
  20091. }
  20092. /**
  20093. * Checks if `value` is classified as a `Set` object.
  20094. *
  20095. * @static
  20096. * @memberOf _
  20097. * @since 4.3.0
  20098. * @category Lang
  20099. * @param {*} value The value to check.
  20100. * @returns {boolean} Returns `true` if `value` is a set, else `false`.
  20101. * @example
  20102. *
  20103. * _.isSet(new Set);
  20104. * // => true
  20105. *
  20106. * _.isSet(new WeakSet);
  20107. * // => false
  20108. */
  20109. var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;
  20110. /**
  20111. * Checks if `value` is classified as a `String` primitive or object.
  20112. *
  20113. * @static
  20114. * @since 0.1.0
  20115. * @memberOf _
  20116. * @category Lang
  20117. * @param {*} value The value to check.
  20118. * @returns {boolean} Returns `true` if `value` is a string, else `false`.
  20119. * @example
  20120. *
  20121. * _.isString('abc');
  20122. * // => true
  20123. *
  20124. * _.isString(1);
  20125. * // => false
  20126. */
  20127. function isString(value) {
  20128. return typeof value == 'string' ||
  20129. (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);
  20130. }
  20131. /**
  20132. * Checks if `value` is classified as a `Symbol` primitive or object.
  20133. *
  20134. * @static
  20135. * @memberOf _
  20136. * @since 4.0.0
  20137. * @category Lang
  20138. * @param {*} value The value to check.
  20139. * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
  20140. * @example
  20141. *
  20142. * _.isSymbol(Symbol.iterator);
  20143. * // => true
  20144. *
  20145. * _.isSymbol('abc');
  20146. * // => false
  20147. */
  20148. function isSymbol(value) {
  20149. return typeof value == 'symbol' ||
  20150. (isObjectLike(value) && baseGetTag(value) == symbolTag);
  20151. }
  20152. /**
  20153. * Checks if `value` is classified as a typed array.
  20154. *
  20155. * @static
  20156. * @memberOf _
  20157. * @since 3.0.0
  20158. * @category Lang
  20159. * @param {*} value The value to check.
  20160. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
  20161. * @example
  20162. *
  20163. * _.isTypedArray(new Uint8Array);
  20164. * // => true
  20165. *
  20166. * _.isTypedArray([]);
  20167. * // => false
  20168. */
  20169. var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
  20170. /**
  20171. * Checks if `value` is `undefined`.
  20172. *
  20173. * @static
  20174. * @since 0.1.0
  20175. * @memberOf _
  20176. * @category Lang
  20177. * @param {*} value The value to check.
  20178. * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.
  20179. * @example
  20180. *
  20181. * _.isUndefined(void 0);
  20182. * // => true
  20183. *
  20184. * _.isUndefined(null);
  20185. * // => false
  20186. */
  20187. function isUndefined(value) {
  20188. return value === undefined;
  20189. }
  20190. /**
  20191. * Checks if `value` is classified as a `WeakMap` object.
  20192. *
  20193. * @static
  20194. * @memberOf _
  20195. * @since 4.3.0
  20196. * @category Lang
  20197. * @param {*} value The value to check.
  20198. * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.
  20199. * @example
  20200. *
  20201. * _.isWeakMap(new WeakMap);
  20202. * // => true
  20203. *
  20204. * _.isWeakMap(new Map);
  20205. * // => false
  20206. */
  20207. function isWeakMap(value) {
  20208. return isObjectLike(value) && getTag(value) == weakMapTag;
  20209. }
  20210. /**
  20211. * Checks if `value` is classified as a `WeakSet` object.
  20212. *
  20213. * @static
  20214. * @memberOf _
  20215. * @since 4.3.0
  20216. * @category Lang
  20217. * @param {*} value The value to check.
  20218. * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.
  20219. * @example
  20220. *
  20221. * _.isWeakSet(new WeakSet);
  20222. * // => true
  20223. *
  20224. * _.isWeakSet(new Set);
  20225. * // => false
  20226. */
  20227. function isWeakSet(value) {
  20228. return isObjectLike(value) && baseGetTag(value) == weakSetTag;
  20229. }
  20230. /**
  20231. * Checks if `value` is less than `other`.
  20232. *
  20233. * @static
  20234. * @memberOf _
  20235. * @since 3.9.0
  20236. * @category Lang
  20237. * @param {*} value The value to compare.
  20238. * @param {*} other The other value to compare.
  20239. * @returns {boolean} Returns `true` if `value` is less than `other`,
  20240. * else `false`.
  20241. * @see _.gt
  20242. * @example
  20243. *
  20244. * _.lt(1, 3);
  20245. * // => true
  20246. *
  20247. * _.lt(3, 3);
  20248. * // => false
  20249. *
  20250. * _.lt(3, 1);
  20251. * // => false
  20252. */
  20253. var lt = createRelationalOperation(baseLt);
  20254. /**
  20255. * Checks if `value` is less than or equal to `other`.
  20256. *
  20257. * @static
  20258. * @memberOf _
  20259. * @since 3.9.0
  20260. * @category Lang
  20261. * @param {*} value The value to compare.
  20262. * @param {*} other The other value to compare.
  20263. * @returns {boolean} Returns `true` if `value` is less than or equal to
  20264. * `other`, else `false`.
  20265. * @see _.gte
  20266. * @example
  20267. *
  20268. * _.lte(1, 3);
  20269. * // => true
  20270. *
  20271. * _.lte(3, 3);
  20272. * // => true
  20273. *
  20274. * _.lte(3, 1);
  20275. * // => false
  20276. */
  20277. var lte = createRelationalOperation(function(value, other) {
  20278. return value <= other;
  20279. });
  20280. /**
  20281. * Converts `value` to an array.
  20282. *
  20283. * @static
  20284. * @since 0.1.0
  20285. * @memberOf _
  20286. * @category Lang
  20287. * @param {*} value The value to convert.
  20288. * @returns {Array} Returns the converted array.
  20289. * @example
  20290. *
  20291. * _.toArray({ 'a': 1, 'b': 2 });
  20292. * // => [1, 2]
  20293. *
  20294. * _.toArray('abc');
  20295. * // => ['a', 'b', 'c']
  20296. *
  20297. * _.toArray(1);
  20298. * // => []
  20299. *
  20300. * _.toArray(null);
  20301. * // => []
  20302. */
  20303. function toArray(value) {
  20304. if (!value) {
  20305. return [];
  20306. }
  20307. if (isArrayLike(value)) {
  20308. return isString(value) ? stringToArray(value) : copyArray(value);
  20309. }
  20310. if (symIterator && value[symIterator]) {
  20311. return iteratorToArray(value[symIterator]());
  20312. }
  20313. var tag = getTag(value),
  20314. func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);
  20315. return func(value);
  20316. }
  20317. /**
  20318. * Converts `value` to a finite number.
  20319. *
  20320. * @static
  20321. * @memberOf _
  20322. * @since 4.12.0
  20323. * @category Lang
  20324. * @param {*} value The value to convert.
  20325. * @returns {number} Returns the converted number.
  20326. * @example
  20327. *
  20328. * _.toFinite(3.2);
  20329. * // => 3.2
  20330. *
  20331. * _.toFinite(Number.MIN_VALUE);
  20332. * // => 5e-324
  20333. *
  20334. * _.toFinite(Infinity);
  20335. * // => 1.7976931348623157e+308
  20336. *
  20337. * _.toFinite('3.2');
  20338. * // => 3.2
  20339. */
  20340. function toFinite(value) {
  20341. if (!value) {
  20342. return value === 0 ? value : 0;
  20343. }
  20344. value = toNumber(value);
  20345. if (value === INFINITY || value === -INFINITY) {
  20346. var sign = (value < 0 ? -1 : 1);
  20347. return sign * MAX_INTEGER;
  20348. }
  20349. return value === value ? value : 0;
  20350. }
  20351. /**
  20352. * Converts `value` to an integer.
  20353. *
  20354. * **Note:** This method is loosely based on
  20355. * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).
  20356. *
  20357. * @static
  20358. * @memberOf _
  20359. * @since 4.0.0
  20360. * @category Lang
  20361. * @param {*} value The value to convert.
  20362. * @returns {number} Returns the converted integer.
  20363. * @example
  20364. *
  20365. * _.toInteger(3.2);
  20366. * // => 3
  20367. *
  20368. * _.toInteger(Number.MIN_VALUE);
  20369. * // => 0
  20370. *
  20371. * _.toInteger(Infinity);
  20372. * // => 1.7976931348623157e+308
  20373. *
  20374. * _.toInteger('3.2');
  20375. * // => 3
  20376. */
  20377. function toInteger(value) {
  20378. var result = toFinite(value),
  20379. remainder = result % 1;
  20380. return result === result ? (remainder ? result - remainder : result) : 0;
  20381. }
  20382. /**
  20383. * Converts `value` to an integer suitable for use as the length of an
  20384. * array-like object.
  20385. *
  20386. * **Note:** This method is based on
  20387. * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
  20388. *
  20389. * @static
  20390. * @memberOf _
  20391. * @since 4.0.0
  20392. * @category Lang
  20393. * @param {*} value The value to convert.
  20394. * @returns {number} Returns the converted integer.
  20395. * @example
  20396. *
  20397. * _.toLength(3.2);
  20398. * // => 3
  20399. *
  20400. * _.toLength(Number.MIN_VALUE);
  20401. * // => 0
  20402. *
  20403. * _.toLength(Infinity);
  20404. * // => 4294967295
  20405. *
  20406. * _.toLength('3.2');
  20407. * // => 3
  20408. */
  20409. function toLength(value) {
  20410. return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;
  20411. }
  20412. /**
  20413. * Converts `value` to a number.
  20414. *
  20415. * @static
  20416. * @memberOf _
  20417. * @since 4.0.0
  20418. * @category Lang
  20419. * @param {*} value The value to process.
  20420. * @returns {number} Returns the number.
  20421. * @example
  20422. *
  20423. * _.toNumber(3.2);
  20424. * // => 3.2
  20425. *
  20426. * _.toNumber(Number.MIN_VALUE);
  20427. * // => 5e-324
  20428. *
  20429. * _.toNumber(Infinity);
  20430. * // => Infinity
  20431. *
  20432. * _.toNumber('3.2');
  20433. * // => 3.2
  20434. */
  20435. function toNumber(value) {
  20436. if (typeof value == 'number') {
  20437. return value;
  20438. }
  20439. if (isSymbol(value)) {
  20440. return NAN;
  20441. }
  20442. if (isObject(value)) {
  20443. var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
  20444. value = isObject(other) ? (other + '') : other;
  20445. }
  20446. if (typeof value != 'string') {
  20447. return value === 0 ? value : +value;
  20448. }
  20449. value = value.replace(reTrim, '');
  20450. var isBinary = reIsBinary.test(value);
  20451. return (isBinary || reIsOctal.test(value))
  20452. ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
  20453. : (reIsBadHex.test(value) ? NAN : +value);
  20454. }
  20455. /**
  20456. * Converts `value` to a plain object flattening inherited enumerable string
  20457. * keyed properties of `value` to own properties of the plain object.
  20458. *
  20459. * @static
  20460. * @memberOf _
  20461. * @since 3.0.0
  20462. * @category Lang
  20463. * @param {*} value The value to convert.
  20464. * @returns {Object} Returns the converted plain object.
  20465. * @example
  20466. *
  20467. * function Foo() {
  20468. * this.b = 2;
  20469. * }
  20470. *
  20471. * Foo.prototype.c = 3;
  20472. *
  20473. * _.assign({ 'a': 1 }, new Foo);
  20474. * // => { 'a': 1, 'b': 2 }
  20475. *
  20476. * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));
  20477. * // => { 'a': 1, 'b': 2, 'c': 3 }
  20478. */
  20479. function toPlainObject(value) {
  20480. return copyObject(value, keysIn(value));
  20481. }
  20482. /**
  20483. * Converts `value` to a safe integer. A safe integer can be compared and
  20484. * represented correctly.
  20485. *
  20486. * @static
  20487. * @memberOf _
  20488. * @since 4.0.0
  20489. * @category Lang
  20490. * @param {*} value The value to convert.
  20491. * @returns {number} Returns the converted integer.
  20492. * @example
  20493. *
  20494. * _.toSafeInteger(3.2);
  20495. * // => 3
  20496. *
  20497. * _.toSafeInteger(Number.MIN_VALUE);
  20498. * // => 0
  20499. *
  20500. * _.toSafeInteger(Infinity);
  20501. * // => 9007199254740991
  20502. *
  20503. * _.toSafeInteger('3.2');
  20504. * // => 3
  20505. */
  20506. function toSafeInteger(value) {
  20507. return value
  20508. ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)
  20509. : (value === 0 ? value : 0);
  20510. }
  20511. /**
  20512. * Converts `value` to a string. An empty string is returned for `null`
  20513. * and `undefined` values. The sign of `-0` is preserved.
  20514. *
  20515. * @static
  20516. * @memberOf _
  20517. * @since 4.0.0
  20518. * @category Lang
  20519. * @param {*} value The value to convert.
  20520. * @returns {string} Returns the converted string.
  20521. * @example
  20522. *
  20523. * _.toString(null);
  20524. * // => ''
  20525. *
  20526. * _.toString(-0);
  20527. * // => '-0'
  20528. *
  20529. * _.toString([1, 2, 3]);
  20530. * // => '1,2,3'
  20531. */
  20532. function toString(value) {
  20533. return value == null ? '' : baseToString(value);
  20534. }
  20535. /*------------------------------------------------------------------------*/
  20536. /**
  20537. * Assigns own enumerable string keyed properties of source objects to the
  20538. * destination object. Source objects are applied from left to right.
  20539. * Subsequent sources overwrite property assignments of previous sources.
  20540. *
  20541. * **Note:** This method mutates `object` and is loosely based on
  20542. * [`Object.assign`](https://mdn.io/Object/assign).
  20543. *
  20544. * @static
  20545. * @memberOf _
  20546. * @since 0.10.0
  20547. * @category Object
  20548. * @param {Object} object The destination object.
  20549. * @param {...Object} [sources] The source objects.
  20550. * @returns {Object} Returns `object`.
  20551. * @see _.assignIn
  20552. * @example
  20553. *
  20554. * function Foo() {
  20555. * this.a = 1;
  20556. * }
  20557. *
  20558. * function Bar() {
  20559. * this.c = 3;
  20560. * }
  20561. *
  20562. * Foo.prototype.b = 2;
  20563. * Bar.prototype.d = 4;
  20564. *
  20565. * _.assign({ 'a': 0 }, new Foo, new Bar);
  20566. * // => { 'a': 1, 'c': 3 }
  20567. */
  20568. var assign = createAssigner(function(object, source) {
  20569. if (isPrototype(source) || isArrayLike(source)) {
  20570. copyObject(source, keys(source), object);
  20571. return;
  20572. }
  20573. for (var key in source) {
  20574. if (hasOwnProperty.call(source, key)) {
  20575. assignValue(object, key, source[key]);
  20576. }
  20577. }
  20578. });
  20579. /**
  20580. * This method is like `_.assign` except that it iterates over own and
  20581. * inherited source properties.
  20582. *
  20583. * **Note:** This method mutates `object`.
  20584. *
  20585. * @static
  20586. * @memberOf _
  20587. * @since 4.0.0
  20588. * @alias extend
  20589. * @category Object
  20590. * @param {Object} object The destination object.
  20591. * @param {...Object} [sources] The source objects.
  20592. * @returns {Object} Returns `object`.
  20593. * @see _.assign
  20594. * @example
  20595. *
  20596. * function Foo() {
  20597. * this.a = 1;
  20598. * }
  20599. *
  20600. * function Bar() {
  20601. * this.c = 3;
  20602. * }
  20603. *
  20604. * Foo.prototype.b = 2;
  20605. * Bar.prototype.d = 4;
  20606. *
  20607. * _.assignIn({ 'a': 0 }, new Foo, new Bar);
  20608. * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }
  20609. */
  20610. var assignIn = createAssigner(function(object, source) {
  20611. copyObject(source, keysIn(source), object);
  20612. });
  20613. /**
  20614. * This method is like `_.assignIn` except that it accepts `customizer`
  20615. * which is invoked to produce the assigned values. If `customizer` returns
  20616. * `undefined`, assignment is handled by the method instead. The `customizer`
  20617. * is invoked with five arguments: (objValue, srcValue, key, object, source).
  20618. *
  20619. * **Note:** This method mutates `object`.
  20620. *
  20621. * @static
  20622. * @memberOf _
  20623. * @since 4.0.0
  20624. * @alias extendWith
  20625. * @category Object
  20626. * @param {Object} object The destination object.
  20627. * @param {...Object} sources The source objects.
  20628. * @param {Function} [customizer] The function to customize assigned values.
  20629. * @returns {Object} Returns `object`.
  20630. * @see _.assignWith
  20631. * @example
  20632. *
  20633. * function customizer(objValue, srcValue) {
  20634. * return _.isUndefined(objValue) ? srcValue : objValue;
  20635. * }
  20636. *
  20637. * var defaults = _.partialRight(_.assignInWith, customizer);
  20638. *
  20639. * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
  20640. * // => { 'a': 1, 'b': 2 }
  20641. */
  20642. var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {
  20643. copyObject(source, keysIn(source), object, customizer);
  20644. });
  20645. /**
  20646. * This method is like `_.assign` except that it accepts `customizer`
  20647. * which is invoked to produce the assigned values. If `customizer` returns
  20648. * `undefined`, assignment is handled by the method instead. The `customizer`
  20649. * is invoked with five arguments: (objValue, srcValue, key, object, source).
  20650. *
  20651. * **Note:** This method mutates `object`.
  20652. *
  20653. * @static
  20654. * @memberOf _
  20655. * @since 4.0.0
  20656. * @category Object
  20657. * @param {Object} object The destination object.
  20658. * @param {...Object} sources The source objects.
  20659. * @param {Function} [customizer] The function to customize assigned values.
  20660. * @returns {Object} Returns `object`.
  20661. * @see _.assignInWith
  20662. * @example
  20663. *
  20664. * function customizer(objValue, srcValue) {
  20665. * return _.isUndefined(objValue) ? srcValue : objValue;
  20666. * }
  20667. *
  20668. * var defaults = _.partialRight(_.assignWith, customizer);
  20669. *
  20670. * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
  20671. * // => { 'a': 1, 'b': 2 }
  20672. */
  20673. var assignWith = createAssigner(function(object, source, srcIndex, customizer) {
  20674. copyObject(source, keys(source), object, customizer);
  20675. });
  20676. /**
  20677. * Creates an array of values corresponding to `paths` of `object`.
  20678. *
  20679. * @static
  20680. * @memberOf _
  20681. * @since 1.0.0
  20682. * @category Object
  20683. * @param {Object} object The object to iterate over.
  20684. * @param {...(string|string[])} [paths] The property paths to pick.
  20685. * @returns {Array} Returns the picked values.
  20686. * @example
  20687. *
  20688. * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
  20689. *
  20690. * _.at(object, ['a[0].b.c', 'a[1]']);
  20691. * // => [3, 4]
  20692. */
  20693. var at = flatRest(baseAt);
  20694. /**
  20695. * Creates an object that inherits from the `prototype` object. If a
  20696. * `properties` object is given, its own enumerable string keyed properties
  20697. * are assigned to the created object.
  20698. *
  20699. * @static
  20700. * @memberOf _
  20701. * @since 2.3.0
  20702. * @category Object
  20703. * @param {Object} prototype The object to inherit from.
  20704. * @param {Object} [properties] The properties to assign to the object.
  20705. * @returns {Object} Returns the new object.
  20706. * @example
  20707. *
  20708. * function Shape() {
  20709. * this.x = 0;
  20710. * this.y = 0;
  20711. * }
  20712. *
  20713. * function Circle() {
  20714. * Shape.call(this);
  20715. * }
  20716. *
  20717. * Circle.prototype = _.create(Shape.prototype, {
  20718. * 'constructor': Circle
  20719. * });
  20720. *
  20721. * var circle = new Circle;
  20722. * circle instanceof Circle;
  20723. * // => true
  20724. *
  20725. * circle instanceof Shape;
  20726. * // => true
  20727. */
  20728. function create(prototype, properties) {
  20729. var result = baseCreate(prototype);
  20730. return properties == null ? result : baseAssign(result, properties);
  20731. }
  20732. /**
  20733. * Assigns own and inherited enumerable string keyed properties of source
  20734. * objects to the destination object for all destination properties that
  20735. * resolve to `undefined`. Source objects are applied from left to right.
  20736. * Once a property is set, additional values of the same property are ignored.
  20737. *
  20738. * **Note:** This method mutates `object`.
  20739. *
  20740. * @static
  20741. * @since 0.1.0
  20742. * @memberOf _
  20743. * @category Object
  20744. * @param {Object} object The destination object.
  20745. * @param {...Object} [sources] The source objects.
  20746. * @returns {Object} Returns `object`.
  20747. * @see _.defaultsDeep
  20748. * @example
  20749. *
  20750. * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
  20751. * // => { 'a': 1, 'b': 2 }
  20752. */
  20753. var defaults = baseRest(function(object, sources) {
  20754. object = Object(object);
  20755. var index = -1;
  20756. var length = sources.length;
  20757. var guard = length > 2 ? sources[2] : undefined;
  20758. if (guard && isIterateeCall(sources[0], sources[1], guard)) {
  20759. length = 1;
  20760. }
  20761. while (++index < length) {
  20762. var source = sources[index];
  20763. var props = keysIn(source);
  20764. var propsIndex = -1;
  20765. var propsLength = props.length;
  20766. while (++propsIndex < propsLength) {
  20767. var key = props[propsIndex];
  20768. var value = object[key];
  20769. if (value === undefined ||
  20770. (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {
  20771. object[key] = source[key];
  20772. }
  20773. }
  20774. }
  20775. return object;
  20776. });
  20777. /**
  20778. * This method is like `_.defaults` except that it recursively assigns
  20779. * default properties.
  20780. *
  20781. * **Note:** This method mutates `object`.
  20782. *
  20783. * @static
  20784. * @memberOf _
  20785. * @since 3.10.0
  20786. * @category Object
  20787. * @param {Object} object The destination object.
  20788. * @param {...Object} [sources] The source objects.
  20789. * @returns {Object} Returns `object`.
  20790. * @see _.defaults
  20791. * @example
  20792. *
  20793. * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });
  20794. * // => { 'a': { 'b': 2, 'c': 3 } }
  20795. */
  20796. var defaultsDeep = baseRest(function(args) {
  20797. args.push(undefined, customDefaultsMerge);
  20798. return apply(mergeWith, undefined, args);
  20799. });
  20800. /**
  20801. * This method is like `_.find` except that it returns the key of the first
  20802. * element `predicate` returns truthy for instead of the element itself.
  20803. *
  20804. * @static
  20805. * @memberOf _
  20806. * @since 1.1.0
  20807. * @category Object
  20808. * @param {Object} object The object to inspect.
  20809. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  20810. * @returns {string|undefined} Returns the key of the matched element,
  20811. * else `undefined`.
  20812. * @example
  20813. *
  20814. * var users = {
  20815. * 'barney': { 'age': 36, 'active': true },
  20816. * 'fred': { 'age': 40, 'active': false },
  20817. * 'pebbles': { 'age': 1, 'active': true }
  20818. * };
  20819. *
  20820. * _.findKey(users, function(o) { return o.age < 40; });
  20821. * // => 'barney' (iteration order is not guaranteed)
  20822. *
  20823. * // The `_.matches` iteratee shorthand.
  20824. * _.findKey(users, { 'age': 1, 'active': true });
  20825. * // => 'pebbles'
  20826. *
  20827. * // The `_.matchesProperty` iteratee shorthand.
  20828. * _.findKey(users, ['active', false]);
  20829. * // => 'fred'
  20830. *
  20831. * // The `_.property` iteratee shorthand.
  20832. * _.findKey(users, 'active');
  20833. * // => 'barney'
  20834. */
  20835. function findKey(object, predicate) {
  20836. return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);
  20837. }
  20838. /**
  20839. * This method is like `_.findKey` except that it iterates over elements of
  20840. * a collection in the opposite order.
  20841. *
  20842. * @static
  20843. * @memberOf _
  20844. * @since 2.0.0
  20845. * @category Object
  20846. * @param {Object} object The object to inspect.
  20847. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  20848. * @returns {string|undefined} Returns the key of the matched element,
  20849. * else `undefined`.
  20850. * @example
  20851. *
  20852. * var users = {
  20853. * 'barney': { 'age': 36, 'active': true },
  20854. * 'fred': { 'age': 40, 'active': false },
  20855. * 'pebbles': { 'age': 1, 'active': true }
  20856. * };
  20857. *
  20858. * _.findLastKey(users, function(o) { return o.age < 40; });
  20859. * // => returns 'pebbles' assuming `_.findKey` returns 'barney'
  20860. *
  20861. * // The `_.matches` iteratee shorthand.
  20862. * _.findLastKey(users, { 'age': 36, 'active': true });
  20863. * // => 'barney'
  20864. *
  20865. * // The `_.matchesProperty` iteratee shorthand.
  20866. * _.findLastKey(users, ['active', false]);
  20867. * // => 'fred'
  20868. *
  20869. * // The `_.property` iteratee shorthand.
  20870. * _.findLastKey(users, 'active');
  20871. * // => 'pebbles'
  20872. */
  20873. function findLastKey(object, predicate) {
  20874. return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);
  20875. }
  20876. /**
  20877. * Iterates over own and inherited enumerable string keyed properties of an
  20878. * object and invokes `iteratee` for each property. The iteratee is invoked
  20879. * with three arguments: (value, key, object). Iteratee functions may exit
  20880. * iteration early by explicitly returning `false`.
  20881. *
  20882. * @static
  20883. * @memberOf _
  20884. * @since 0.3.0
  20885. * @category Object
  20886. * @param {Object} object The object to iterate over.
  20887. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  20888. * @returns {Object} Returns `object`.
  20889. * @see _.forInRight
  20890. * @example
  20891. *
  20892. * function Foo() {
  20893. * this.a = 1;
  20894. * this.b = 2;
  20895. * }
  20896. *
  20897. * Foo.prototype.c = 3;
  20898. *
  20899. * _.forIn(new Foo, function(value, key) {
  20900. * console.log(key);
  20901. * });
  20902. * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).
  20903. */
  20904. function forIn(object, iteratee) {
  20905. return object == null
  20906. ? object
  20907. : baseFor(object, getIteratee(iteratee, 3), keysIn);
  20908. }
  20909. /**
  20910. * This method is like `_.forIn` except that it iterates over properties of
  20911. * `object` in the opposite order.
  20912. *
  20913. * @static
  20914. * @memberOf _
  20915. * @since 2.0.0
  20916. * @category Object
  20917. * @param {Object} object The object to iterate over.
  20918. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  20919. * @returns {Object} Returns `object`.
  20920. * @see _.forIn
  20921. * @example
  20922. *
  20923. * function Foo() {
  20924. * this.a = 1;
  20925. * this.b = 2;
  20926. * }
  20927. *
  20928. * Foo.prototype.c = 3;
  20929. *
  20930. * _.forInRight(new Foo, function(value, key) {
  20931. * console.log(key);
  20932. * });
  20933. * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.
  20934. */
  20935. function forInRight(object, iteratee) {
  20936. return object == null
  20937. ? object
  20938. : baseForRight(object, getIteratee(iteratee, 3), keysIn);
  20939. }
  20940. /**
  20941. * Iterates over own enumerable string keyed properties of an object and
  20942. * invokes `iteratee` for each property. The iteratee is invoked with three
  20943. * arguments: (value, key, object). Iteratee functions may exit iteration
  20944. * early by explicitly returning `false`.
  20945. *
  20946. * @static
  20947. * @memberOf _
  20948. * @since 0.3.0
  20949. * @category Object
  20950. * @param {Object} object The object to iterate over.
  20951. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  20952. * @returns {Object} Returns `object`.
  20953. * @see _.forOwnRight
  20954. * @example
  20955. *
  20956. * function Foo() {
  20957. * this.a = 1;
  20958. * this.b = 2;
  20959. * }
  20960. *
  20961. * Foo.prototype.c = 3;
  20962. *
  20963. * _.forOwn(new Foo, function(value, key) {
  20964. * console.log(key);
  20965. * });
  20966. * // => Logs 'a' then 'b' (iteration order is not guaranteed).
  20967. */
  20968. function forOwn(object, iteratee) {
  20969. return object && baseForOwn(object, getIteratee(iteratee, 3));
  20970. }
  20971. /**
  20972. * This method is like `_.forOwn` except that it iterates over properties of
  20973. * `object` in the opposite order.
  20974. *
  20975. * @static
  20976. * @memberOf _
  20977. * @since 2.0.0
  20978. * @category Object
  20979. * @param {Object} object The object to iterate over.
  20980. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  20981. * @returns {Object} Returns `object`.
  20982. * @see _.forOwn
  20983. * @example
  20984. *
  20985. * function Foo() {
  20986. * this.a = 1;
  20987. * this.b = 2;
  20988. * }
  20989. *
  20990. * Foo.prototype.c = 3;
  20991. *
  20992. * _.forOwnRight(new Foo, function(value, key) {
  20993. * console.log(key);
  20994. * });
  20995. * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.
  20996. */
  20997. function forOwnRight(object, iteratee) {
  20998. return object && baseForOwnRight(object, getIteratee(iteratee, 3));
  20999. }
  21000. /**
  21001. * Creates an array of function property names from own enumerable properties
  21002. * of `object`.
  21003. *
  21004. * @static
  21005. * @since 0.1.0
  21006. * @memberOf _
  21007. * @category Object
  21008. * @param {Object} object The object to inspect.
  21009. * @returns {Array} Returns the function names.
  21010. * @see _.functionsIn
  21011. * @example
  21012. *
  21013. * function Foo() {
  21014. * this.a = _.constant('a');
  21015. * this.b = _.constant('b');
  21016. * }
  21017. *
  21018. * Foo.prototype.c = _.constant('c');
  21019. *
  21020. * _.functions(new Foo);
  21021. * // => ['a', 'b']
  21022. */
  21023. function functions(object) {
  21024. return object == null ? [] : baseFunctions(object, keys(object));
  21025. }
  21026. /**
  21027. * Creates an array of function property names from own and inherited
  21028. * enumerable properties of `object`.
  21029. *
  21030. * @static
  21031. * @memberOf _
  21032. * @since 4.0.0
  21033. * @category Object
  21034. * @param {Object} object The object to inspect.
  21035. * @returns {Array} Returns the function names.
  21036. * @see _.functions
  21037. * @example
  21038. *
  21039. * function Foo() {
  21040. * this.a = _.constant('a');
  21041. * this.b = _.constant('b');
  21042. * }
  21043. *
  21044. * Foo.prototype.c = _.constant('c');
  21045. *
  21046. * _.functionsIn(new Foo);
  21047. * // => ['a', 'b', 'c']
  21048. */
  21049. function functionsIn(object) {
  21050. return object == null ? [] : baseFunctions(object, keysIn(object));
  21051. }
  21052. /**
  21053. * Gets the value at `path` of `object`. If the resolved value is
  21054. * `undefined`, the `defaultValue` is returned in its place.
  21055. *
  21056. * @static
  21057. * @memberOf _
  21058. * @since 3.7.0
  21059. * @category Object
  21060. * @param {Object} object The object to query.
  21061. * @param {Array|string} path The path of the property to get.
  21062. * @param {*} [defaultValue] The value returned for `undefined` resolved values.
  21063. * @returns {*} Returns the resolved value.
  21064. * @example
  21065. *
  21066. * var object = { 'a': [{ 'b': { 'c': 3 } }] };
  21067. *
  21068. * _.get(object, 'a[0].b.c');
  21069. * // => 3
  21070. *
  21071. * _.get(object, ['a', '0', 'b', 'c']);
  21072. * // => 3
  21073. *
  21074. * _.get(object, 'a.b.c', 'default');
  21075. * // => 'default'
  21076. */
  21077. function get(object, path, defaultValue) {
  21078. var result = object == null ? undefined : baseGet(object, path);
  21079. return result === undefined ? defaultValue : result;
  21080. }
  21081. /**
  21082. * Checks if `path` is a direct property of `object`.
  21083. *
  21084. * @static
  21085. * @since 0.1.0
  21086. * @memberOf _
  21087. * @category Object
  21088. * @param {Object} object The object to query.
  21089. * @param {Array|string} path The path to check.
  21090. * @returns {boolean} Returns `true` if `path` exists, else `false`.
  21091. * @example
  21092. *
  21093. * var object = { 'a': { 'b': 2 } };
  21094. * var other = _.create({ 'a': _.create({ 'b': 2 }) });
  21095. *
  21096. * _.has(object, 'a');
  21097. * // => true
  21098. *
  21099. * _.has(object, 'a.b');
  21100. * // => true
  21101. *
  21102. * _.has(object, ['a', 'b']);
  21103. * // => true
  21104. *
  21105. * _.has(other, 'a');
  21106. * // => false
  21107. */
  21108. function has(object, path) {
  21109. return object != null && hasPath(object, path, baseHas);
  21110. }
  21111. /**
  21112. * Checks if `path` is a direct or inherited property of `object`.
  21113. *
  21114. * @static
  21115. * @memberOf _
  21116. * @since 4.0.0
  21117. * @category Object
  21118. * @param {Object} object The object to query.
  21119. * @param {Array|string} path The path to check.
  21120. * @returns {boolean} Returns `true` if `path` exists, else `false`.
  21121. * @example
  21122. *
  21123. * var object = _.create({ 'a': _.create({ 'b': 2 }) });
  21124. *
  21125. * _.hasIn(object, 'a');
  21126. * // => true
  21127. *
  21128. * _.hasIn(object, 'a.b');
  21129. * // => true
  21130. *
  21131. * _.hasIn(object, ['a', 'b']);
  21132. * // => true
  21133. *
  21134. * _.hasIn(object, 'b');
  21135. * // => false
  21136. */
  21137. function hasIn(object, path) {
  21138. return object != null && hasPath(object, path, baseHasIn);
  21139. }
  21140. /**
  21141. * Creates an object composed of the inverted keys and values of `object`.
  21142. * If `object` contains duplicate values, subsequent values overwrite
  21143. * property assignments of previous values.
  21144. *
  21145. * @static
  21146. * @memberOf _
  21147. * @since 0.7.0
  21148. * @category Object
  21149. * @param {Object} object The object to invert.
  21150. * @returns {Object} Returns the new inverted object.
  21151. * @example
  21152. *
  21153. * var object = { 'a': 1, 'b': 2, 'c': 1 };
  21154. *
  21155. * _.invert(object);
  21156. * // => { '1': 'c', '2': 'b' }
  21157. */
  21158. var invert = createInverter(function(result, value, key) {
  21159. if (value != null &&
  21160. typeof value.toString != 'function') {
  21161. value = nativeObjectToString.call(value);
  21162. }
  21163. result[value] = key;
  21164. }, constant(identity));
  21165. /**
  21166. * This method is like `_.invert` except that the inverted object is generated
  21167. * from the results of running each element of `object` thru `iteratee`. The
  21168. * corresponding inverted value of each inverted key is an array of keys
  21169. * responsible for generating the inverted value. The iteratee is invoked
  21170. * with one argument: (value).
  21171. *
  21172. * @static
  21173. * @memberOf _
  21174. * @since 4.1.0
  21175. * @category Object
  21176. * @param {Object} object The object to invert.
  21177. * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
  21178. * @returns {Object} Returns the new inverted object.
  21179. * @example
  21180. *
  21181. * var object = { 'a': 1, 'b': 2, 'c': 1 };
  21182. *
  21183. * _.invertBy(object);
  21184. * // => { '1': ['a', 'c'], '2': ['b'] }
  21185. *
  21186. * _.invertBy(object, function(value) {
  21187. * return 'group' + value;
  21188. * });
  21189. * // => { 'group1': ['a', 'c'], 'group2': ['b'] }
  21190. */
  21191. var invertBy = createInverter(function(result, value, key) {
  21192. if (value != null &&
  21193. typeof value.toString != 'function') {
  21194. value = nativeObjectToString.call(value);
  21195. }
  21196. if (hasOwnProperty.call(result, value)) {
  21197. result[value].push(key);
  21198. } else {
  21199. result[value] = [key];
  21200. }
  21201. }, getIteratee);
  21202. /**
  21203. * Invokes the method at `path` of `object`.
  21204. *
  21205. * @static
  21206. * @memberOf _
  21207. * @since 4.0.0
  21208. * @category Object
  21209. * @param {Object} object The object to query.
  21210. * @param {Array|string} path The path of the method to invoke.
  21211. * @param {...*} [args] The arguments to invoke the method with.
  21212. * @returns {*} Returns the result of the invoked method.
  21213. * @example
  21214. *
  21215. * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };
  21216. *
  21217. * _.invoke(object, 'a[0].b.c.slice', 1, 3);
  21218. * // => [2, 3]
  21219. */
  21220. var invoke = baseRest(baseInvoke);
  21221. /**
  21222. * Creates an array of the own enumerable property names of `object`.
  21223. *
  21224. * **Note:** Non-object values are coerced to objects. See the
  21225. * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
  21226. * for more details.
  21227. *
  21228. * @static
  21229. * @since 0.1.0
  21230. * @memberOf _
  21231. * @category Object
  21232. * @param {Object} object The object to query.
  21233. * @returns {Array} Returns the array of property names.
  21234. * @example
  21235. *
  21236. * function Foo() {
  21237. * this.a = 1;
  21238. * this.b = 2;
  21239. * }
  21240. *
  21241. * Foo.prototype.c = 3;
  21242. *
  21243. * _.keys(new Foo);
  21244. * // => ['a', 'b'] (iteration order is not guaranteed)
  21245. *
  21246. * _.keys('hi');
  21247. * // => ['0', '1']
  21248. */
  21249. function keys(object) {
  21250. return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
  21251. }
  21252. /**
  21253. * Creates an array of the own and inherited enumerable property names of `object`.
  21254. *
  21255. * **Note:** Non-object values are coerced to objects.
  21256. *
  21257. * @static
  21258. * @memberOf _
  21259. * @since 3.0.0
  21260. * @category Object
  21261. * @param {Object} object The object to query.
  21262. * @returns {Array} Returns the array of property names.
  21263. * @example
  21264. *
  21265. * function Foo() {
  21266. * this.a = 1;
  21267. * this.b = 2;
  21268. * }
  21269. *
  21270. * Foo.prototype.c = 3;
  21271. *
  21272. * _.keysIn(new Foo);
  21273. * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
  21274. */
  21275. function keysIn(object) {
  21276. return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
  21277. }
  21278. /**
  21279. * The opposite of `_.mapValues`; this method creates an object with the
  21280. * same values as `object` and keys generated by running each own enumerable
  21281. * string keyed property of `object` thru `iteratee`. The iteratee is invoked
  21282. * with three arguments: (value, key, object).
  21283. *
  21284. * @static
  21285. * @memberOf _
  21286. * @since 3.8.0
  21287. * @category Object
  21288. * @param {Object} object The object to iterate over.
  21289. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  21290. * @returns {Object} Returns the new mapped object.
  21291. * @see _.mapValues
  21292. * @example
  21293. *
  21294. * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {
  21295. * return key + value;
  21296. * });
  21297. * // => { 'a1': 1, 'b2': 2 }
  21298. */
  21299. function mapKeys(object, iteratee) {
  21300. var result = {};
  21301. iteratee = getIteratee(iteratee, 3);
  21302. baseForOwn(object, function(value, key, object) {
  21303. baseAssignValue(result, iteratee(value, key, object), value);
  21304. });
  21305. return result;
  21306. }
  21307. /**
  21308. * Creates an object with the same keys as `object` and values generated
  21309. * by running each own enumerable string keyed property of `object` thru
  21310. * `iteratee`. The iteratee is invoked with three arguments:
  21311. * (value, key, object).
  21312. *
  21313. * @static
  21314. * @memberOf _
  21315. * @since 2.4.0
  21316. * @category Object
  21317. * @param {Object} object The object to iterate over.
  21318. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  21319. * @returns {Object} Returns the new mapped object.
  21320. * @see _.mapKeys
  21321. * @example
  21322. *
  21323. * var users = {
  21324. * 'fred': { 'user': 'fred', 'age': 40 },
  21325. * 'pebbles': { 'user': 'pebbles', 'age': 1 }
  21326. * };
  21327. *
  21328. * _.mapValues(users, function(o) { return o.age; });
  21329. * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
  21330. *
  21331. * // The `_.property` iteratee shorthand.
  21332. * _.mapValues(users, 'age');
  21333. * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
  21334. */
  21335. function mapValues(object, iteratee) {
  21336. var result = {};
  21337. iteratee = getIteratee(iteratee, 3);
  21338. baseForOwn(object, function(value, key, object) {
  21339. baseAssignValue(result, key, iteratee(value, key, object));
  21340. });
  21341. return result;
  21342. }
  21343. /**
  21344. * This method is like `_.assign` except that it recursively merges own and
  21345. * inherited enumerable string keyed properties of source objects into the
  21346. * destination object. Source properties that resolve to `undefined` are
  21347. * skipped if a destination value exists. Array and plain object properties
  21348. * are merged recursively. Other objects and value types are overridden by
  21349. * assignment. Source objects are applied from left to right. Subsequent
  21350. * sources overwrite property assignments of previous sources.
  21351. *
  21352. * **Note:** This method mutates `object`.
  21353. *
  21354. * @static
  21355. * @memberOf _
  21356. * @since 0.5.0
  21357. * @category Object
  21358. * @param {Object} object The destination object.
  21359. * @param {...Object} [sources] The source objects.
  21360. * @returns {Object} Returns `object`.
  21361. * @example
  21362. *
  21363. * var object = {
  21364. * 'a': [{ 'b': 2 }, { 'd': 4 }]
  21365. * };
  21366. *
  21367. * var other = {
  21368. * 'a': [{ 'c': 3 }, { 'e': 5 }]
  21369. * };
  21370. *
  21371. * _.merge(object, other);
  21372. * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }
  21373. */
  21374. var merge = createAssigner(function(object, source, srcIndex) {
  21375. baseMerge(object, source, srcIndex);
  21376. });
  21377. /**
  21378. * This method is like `_.merge` except that it accepts `customizer` which
  21379. * is invoked to produce the merged values of the destination and source
  21380. * properties. If `customizer` returns `undefined`, merging is handled by the
  21381. * method instead. The `customizer` is invoked with six arguments:
  21382. * (objValue, srcValue, key, object, source, stack).
  21383. *
  21384. * **Note:** This method mutates `object`.
  21385. *
  21386. * @static
  21387. * @memberOf _
  21388. * @since 4.0.0
  21389. * @category Object
  21390. * @param {Object} object The destination object.
  21391. * @param {...Object} sources The source objects.
  21392. * @param {Function} customizer The function to customize assigned values.
  21393. * @returns {Object} Returns `object`.
  21394. * @example
  21395. *
  21396. * function customizer(objValue, srcValue) {
  21397. * if (_.isArray(objValue)) {
  21398. * return objValue.concat(srcValue);
  21399. * }
  21400. * }
  21401. *
  21402. * var object = { 'a': [1], 'b': [2] };
  21403. * var other = { 'a': [3], 'b': [4] };
  21404. *
  21405. * _.mergeWith(object, other, customizer);
  21406. * // => { 'a': [1, 3], 'b': [2, 4] }
  21407. */
  21408. var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {
  21409. baseMerge(object, source, srcIndex, customizer);
  21410. });
  21411. /**
  21412. * The opposite of `_.pick`; this method creates an object composed of the
  21413. * own and inherited enumerable property paths of `object` that are not omitted.
  21414. *
  21415. * **Note:** This method is considerably slower than `_.pick`.
  21416. *
  21417. * @static
  21418. * @since 0.1.0
  21419. * @memberOf _
  21420. * @category Object
  21421. * @param {Object} object The source object.
  21422. * @param {...(string|string[])} [paths] The property paths to omit.
  21423. * @returns {Object} Returns the new object.
  21424. * @example
  21425. *
  21426. * var object = { 'a': 1, 'b': '2', 'c': 3 };
  21427. *
  21428. * _.omit(object, ['a', 'c']);
  21429. * // => { 'b': '2' }
  21430. */
  21431. var omit = flatRest(function(object, paths) {
  21432. var result = {};
  21433. if (object == null) {
  21434. return result;
  21435. }
  21436. var isDeep = false;
  21437. paths = arrayMap(paths, function(path) {
  21438. path = castPath(path, object);
  21439. isDeep || (isDeep = path.length > 1);
  21440. return path;
  21441. });
  21442. copyObject(object, getAllKeysIn(object), result);
  21443. if (isDeep) {
  21444. result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);
  21445. }
  21446. var length = paths.length;
  21447. while (length--) {
  21448. baseUnset(result, paths[length]);
  21449. }
  21450. return result;
  21451. });
  21452. /**
  21453. * The opposite of `_.pickBy`; this method creates an object composed of
  21454. * the own and inherited enumerable string keyed properties of `object` that
  21455. * `predicate` doesn't return truthy for. The predicate is invoked with two
  21456. * arguments: (value, key).
  21457. *
  21458. * @static
  21459. * @memberOf _
  21460. * @since 4.0.0
  21461. * @category Object
  21462. * @param {Object} object The source object.
  21463. * @param {Function} [predicate=_.identity] The function invoked per property.
  21464. * @returns {Object} Returns the new object.
  21465. * @example
  21466. *
  21467. * var object = { 'a': 1, 'b': '2', 'c': 3 };
  21468. *
  21469. * _.omitBy(object, _.isNumber);
  21470. * // => { 'b': '2' }
  21471. */
  21472. function omitBy(object, predicate) {
  21473. return pickBy(object, negate(getIteratee(predicate)));
  21474. }
  21475. /**
  21476. * Creates an object composed of the picked `object` properties.
  21477. *
  21478. * @static
  21479. * @since 0.1.0
  21480. * @memberOf _
  21481. * @category Object
  21482. * @param {Object} object The source object.
  21483. * @param {...(string|string[])} [paths] The property paths to pick.
  21484. * @returns {Object} Returns the new object.
  21485. * @example
  21486. *
  21487. * var object = { 'a': 1, 'b': '2', 'c': 3 };
  21488. *
  21489. * _.pick(object, ['a', 'c']);
  21490. * // => { 'a': 1, 'c': 3 }
  21491. */
  21492. var pick = flatRest(function(object, paths) {
  21493. return object == null ? {} : basePick(object, paths);
  21494. });
  21495. /**
  21496. * Creates an object composed of the `object` properties `predicate` returns
  21497. * truthy for. The predicate is invoked with two arguments: (value, key).
  21498. *
  21499. * @static
  21500. * @memberOf _
  21501. * @since 4.0.0
  21502. * @category Object
  21503. * @param {Object} object The source object.
  21504. * @param {Function} [predicate=_.identity] The function invoked per property.
  21505. * @returns {Object} Returns the new object.
  21506. * @example
  21507. *
  21508. * var object = { 'a': 1, 'b': '2', 'c': 3 };
  21509. *
  21510. * _.pickBy(object, _.isNumber);
  21511. * // => { 'a': 1, 'c': 3 }
  21512. */
  21513. function pickBy(object, predicate) {
  21514. if (object == null) {
  21515. return {};
  21516. }
  21517. var props = arrayMap(getAllKeysIn(object), function(prop) {
  21518. return [prop];
  21519. });
  21520. predicate = getIteratee(predicate);
  21521. return basePickBy(object, props, function(value, path) {
  21522. return predicate(value, path[0]);
  21523. });
  21524. }
  21525. /**
  21526. * This method is like `_.get` except that if the resolved value is a
  21527. * function it's invoked with the `this` binding of its parent object and
  21528. * its result is returned.
  21529. *
  21530. * @static
  21531. * @since 0.1.0
  21532. * @memberOf _
  21533. * @category Object
  21534. * @param {Object} object The object to query.
  21535. * @param {Array|string} path The path of the property to resolve.
  21536. * @param {*} [defaultValue] The value returned for `undefined` resolved values.
  21537. * @returns {*} Returns the resolved value.
  21538. * @example
  21539. *
  21540. * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };
  21541. *
  21542. * _.result(object, 'a[0].b.c1');
  21543. * // => 3
  21544. *
  21545. * _.result(object, 'a[0].b.c2');
  21546. * // => 4
  21547. *
  21548. * _.result(object, 'a[0].b.c3', 'default');
  21549. * // => 'default'
  21550. *
  21551. * _.result(object, 'a[0].b.c3', _.constant('default'));
  21552. * // => 'default'
  21553. */
  21554. function result(object, path, defaultValue) {
  21555. path = castPath(path, object);
  21556. var index = -1,
  21557. length = path.length;
  21558. // Ensure the loop is entered when path is empty.
  21559. if (!length) {
  21560. length = 1;
  21561. object = undefined;
  21562. }
  21563. while (++index < length) {
  21564. var value = object == null ? undefined : object[toKey(path[index])];
  21565. if (value === undefined) {
  21566. index = length;
  21567. value = defaultValue;
  21568. }
  21569. object = isFunction(value) ? value.call(object) : value;
  21570. }
  21571. return object;
  21572. }
  21573. /**
  21574. * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,
  21575. * it's created. Arrays are created for missing index properties while objects
  21576. * are created for all other missing properties. Use `_.setWith` to customize
  21577. * `path` creation.
  21578. *
  21579. * **Note:** This method mutates `object`.
  21580. *
  21581. * @static
  21582. * @memberOf _
  21583. * @since 3.7.0
  21584. * @category Object
  21585. * @param {Object} object The object to modify.
  21586. * @param {Array|string} path The path of the property to set.
  21587. * @param {*} value The value to set.
  21588. * @returns {Object} Returns `object`.
  21589. * @example
  21590. *
  21591. * var object = { 'a': [{ 'b': { 'c': 3 } }] };
  21592. *
  21593. * _.set(object, 'a[0].b.c', 4);
  21594. * console.log(object.a[0].b.c);
  21595. * // => 4
  21596. *
  21597. * _.set(object, ['x', '0', 'y', 'z'], 5);
  21598. * console.log(object.x[0].y.z);
  21599. * // => 5
  21600. */
  21601. function set(object, path, value) {
  21602. return object == null ? object : baseSet(object, path, value);
  21603. }
  21604. /**
  21605. * This method is like `_.set` except that it accepts `customizer` which is
  21606. * invoked to produce the objects of `path`. If `customizer` returns `undefined`
  21607. * path creation is handled by the method instead. The `customizer` is invoked
  21608. * with three arguments: (nsValue, key, nsObject).
  21609. *
  21610. * **Note:** This method mutates `object`.
  21611. *
  21612. * @static
  21613. * @memberOf _
  21614. * @since 4.0.0
  21615. * @category Object
  21616. * @param {Object} object The object to modify.
  21617. * @param {Array|string} path The path of the property to set.
  21618. * @param {*} value The value to set.
  21619. * @param {Function} [customizer] The function to customize assigned values.
  21620. * @returns {Object} Returns `object`.
  21621. * @example
  21622. *
  21623. * var object = {};
  21624. *
  21625. * _.setWith(object, '[0][1]', 'a', Object);
  21626. * // => { '0': { '1': 'a' } }
  21627. */
  21628. function setWith(object, path, value, customizer) {
  21629. customizer = typeof customizer == 'function' ? customizer : undefined;
  21630. return object == null ? object : baseSet(object, path, value, customizer);
  21631. }
  21632. /**
  21633. * Creates an array of own enumerable string keyed-value pairs for `object`
  21634. * which can be consumed by `_.fromPairs`. If `object` is a map or set, its
  21635. * entries are returned.
  21636. *
  21637. * @static
  21638. * @memberOf _
  21639. * @since 4.0.0
  21640. * @alias entries
  21641. * @category Object
  21642. * @param {Object} object The object to query.
  21643. * @returns {Array} Returns the key-value pairs.
  21644. * @example
  21645. *
  21646. * function Foo() {
  21647. * this.a = 1;
  21648. * this.b = 2;
  21649. * }
  21650. *
  21651. * Foo.prototype.c = 3;
  21652. *
  21653. * _.toPairs(new Foo);
  21654. * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)
  21655. */
  21656. var toPairs = createToPairs(keys);
  21657. /**
  21658. * Creates an array of own and inherited enumerable string keyed-value pairs
  21659. * for `object` which can be consumed by `_.fromPairs`. If `object` is a map
  21660. * or set, its entries are returned.
  21661. *
  21662. * @static
  21663. * @memberOf _
  21664. * @since 4.0.0
  21665. * @alias entriesIn
  21666. * @category Object
  21667. * @param {Object} object The object to query.
  21668. * @returns {Array} Returns the key-value pairs.
  21669. * @example
  21670. *
  21671. * function Foo() {
  21672. * this.a = 1;
  21673. * this.b = 2;
  21674. * }
  21675. *
  21676. * Foo.prototype.c = 3;
  21677. *
  21678. * _.toPairsIn(new Foo);
  21679. * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)
  21680. */
  21681. var toPairsIn = createToPairs(keysIn);
  21682. /**
  21683. * An alternative to `_.reduce`; this method transforms `object` to a new
  21684. * `accumulator` object which is the result of running each of its own
  21685. * enumerable string keyed properties thru `iteratee`, with each invocation
  21686. * potentially mutating the `accumulator` object. If `accumulator` is not
  21687. * provided, a new object with the same `[[Prototype]]` will be used. The
  21688. * iteratee is invoked with four arguments: (accumulator, value, key, object).
  21689. * Iteratee functions may exit iteration early by explicitly returning `false`.
  21690. *
  21691. * @static
  21692. * @memberOf _
  21693. * @since 1.3.0
  21694. * @category Object
  21695. * @param {Object} object The object to iterate over.
  21696. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  21697. * @param {*} [accumulator] The custom accumulator value.
  21698. * @returns {*} Returns the accumulated value.
  21699. * @example
  21700. *
  21701. * _.transform([2, 3, 4], function(result, n) {
  21702. * result.push(n *= n);
  21703. * return n % 2 == 0;
  21704. * }, []);
  21705. * // => [4, 9]
  21706. *
  21707. * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
  21708. * (result[value] || (result[value] = [])).push(key);
  21709. * }, {});
  21710. * // => { '1': ['a', 'c'], '2': ['b'] }
  21711. */
  21712. function transform(object, iteratee, accumulator) {
  21713. var isArr = isArray(object),
  21714. isArrLike = isArr || isBuffer(object) || isTypedArray(object);
  21715. iteratee = getIteratee(iteratee, 4);
  21716. if (accumulator == null) {
  21717. var Ctor = object && object.constructor;
  21718. if (isArrLike) {
  21719. accumulator = isArr ? new Ctor : [];
  21720. }
  21721. else if (isObject(object)) {
  21722. accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};
  21723. }
  21724. else {
  21725. accumulator = {};
  21726. }
  21727. }
  21728. (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {
  21729. return iteratee(accumulator, value, index, object);
  21730. });
  21731. return accumulator;
  21732. }
  21733. /**
  21734. * Removes the property at `path` of `object`.
  21735. *
  21736. * **Note:** This method mutates `object`.
  21737. *
  21738. * @static
  21739. * @memberOf _
  21740. * @since 4.0.0
  21741. * @category Object
  21742. * @param {Object} object The object to modify.
  21743. * @param {Array|string} path The path of the property to unset.
  21744. * @returns {boolean} Returns `true` if the property is deleted, else `false`.
  21745. * @example
  21746. *
  21747. * var object = { 'a': [{ 'b': { 'c': 7 } }] };
  21748. * _.unset(object, 'a[0].b.c');
  21749. * // => true
  21750. *
  21751. * console.log(object);
  21752. * // => { 'a': [{ 'b': {} }] };
  21753. *
  21754. * _.unset(object, ['a', '0', 'b', 'c']);
  21755. * // => true
  21756. *
  21757. * console.log(object);
  21758. * // => { 'a': [{ 'b': {} }] };
  21759. */
  21760. function unset(object, path) {
  21761. return object == null ? true : baseUnset(object, path);
  21762. }
  21763. /**
  21764. * This method is like `_.set` except that accepts `updater` to produce the
  21765. * value to set. Use `_.updateWith` to customize `path` creation. The `updater`
  21766. * is invoked with one argument: (value).
  21767. *
  21768. * **Note:** This method mutates `object`.
  21769. *
  21770. * @static
  21771. * @memberOf _
  21772. * @since 4.6.0
  21773. * @category Object
  21774. * @param {Object} object The object to modify.
  21775. * @param {Array|string} path The path of the property to set.
  21776. * @param {Function} updater The function to produce the updated value.
  21777. * @returns {Object} Returns `object`.
  21778. * @example
  21779. *
  21780. * var object = { 'a': [{ 'b': { 'c': 3 } }] };
  21781. *
  21782. * _.update(object, 'a[0].b.c', function(n) { return n * n; });
  21783. * console.log(object.a[0].b.c);
  21784. * // => 9
  21785. *
  21786. * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });
  21787. * console.log(object.x[0].y.z);
  21788. * // => 0
  21789. */
  21790. function update(object, path, updater) {
  21791. return object == null ? object : baseUpdate(object, path, castFunction(updater));
  21792. }
  21793. /**
  21794. * This method is like `_.update` except that it accepts `customizer` which is
  21795. * invoked to produce the objects of `path`. If `customizer` returns `undefined`
  21796. * path creation is handled by the method instead. The `customizer` is invoked
  21797. * with three arguments: (nsValue, key, nsObject).
  21798. *
  21799. * **Note:** This method mutates `object`.
  21800. *
  21801. * @static
  21802. * @memberOf _
  21803. * @since 4.6.0
  21804. * @category Object
  21805. * @param {Object} object The object to modify.
  21806. * @param {Array|string} path The path of the property to set.
  21807. * @param {Function} updater The function to produce the updated value.
  21808. * @param {Function} [customizer] The function to customize assigned values.
  21809. * @returns {Object} Returns `object`.
  21810. * @example
  21811. *
  21812. * var object = {};
  21813. *
  21814. * _.updateWith(object, '[0][1]', _.constant('a'), Object);
  21815. * // => { '0': { '1': 'a' } }
  21816. */
  21817. function updateWith(object, path, updater, customizer) {
  21818. customizer = typeof customizer == 'function' ? customizer : undefined;
  21819. return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);
  21820. }
  21821. /**
  21822. * Creates an array of the own enumerable string keyed property values of `object`.
  21823. *
  21824. * **Note:** Non-object values are coerced to objects.
  21825. *
  21826. * @static
  21827. * @since 0.1.0
  21828. * @memberOf _
  21829. * @category Object
  21830. * @param {Object} object The object to query.
  21831. * @returns {Array} Returns the array of property values.
  21832. * @example
  21833. *
  21834. * function Foo() {
  21835. * this.a = 1;
  21836. * this.b = 2;
  21837. * }
  21838. *
  21839. * Foo.prototype.c = 3;
  21840. *
  21841. * _.values(new Foo);
  21842. * // => [1, 2] (iteration order is not guaranteed)
  21843. *
  21844. * _.values('hi');
  21845. * // => ['h', 'i']
  21846. */
  21847. function values(object) {
  21848. return object == null ? [] : baseValues(object, keys(object));
  21849. }
  21850. /**
  21851. * Creates an array of the own and inherited enumerable string keyed property
  21852. * values of `object`.
  21853. *
  21854. * **Note:** Non-object values are coerced to objects.
  21855. *
  21856. * @static
  21857. * @memberOf _
  21858. * @since 3.0.0
  21859. * @category Object
  21860. * @param {Object} object The object to query.
  21861. * @returns {Array} Returns the array of property values.
  21862. * @example
  21863. *
  21864. * function Foo() {
  21865. * this.a = 1;
  21866. * this.b = 2;
  21867. * }
  21868. *
  21869. * Foo.prototype.c = 3;
  21870. *
  21871. * _.valuesIn(new Foo);
  21872. * // => [1, 2, 3] (iteration order is not guaranteed)
  21873. */
  21874. function valuesIn(object) {
  21875. return object == null ? [] : baseValues(object, keysIn(object));
  21876. }
  21877. /*------------------------------------------------------------------------*/
  21878. /**
  21879. * Clamps `number` within the inclusive `lower` and `upper` bounds.
  21880. *
  21881. * @static
  21882. * @memberOf _
  21883. * @since 4.0.0
  21884. * @category Number
  21885. * @param {number} number The number to clamp.
  21886. * @param {number} [lower] The lower bound.
  21887. * @param {number} upper The upper bound.
  21888. * @returns {number} Returns the clamped number.
  21889. * @example
  21890. *
  21891. * _.clamp(-10, -5, 5);
  21892. * // => -5
  21893. *
  21894. * _.clamp(10, -5, 5);
  21895. * // => 5
  21896. */
  21897. function clamp(number, lower, upper) {
  21898. if (upper === undefined) {
  21899. upper = lower;
  21900. lower = undefined;
  21901. }
  21902. if (upper !== undefined) {
  21903. upper = toNumber(upper);
  21904. upper = upper === upper ? upper : 0;
  21905. }
  21906. if (lower !== undefined) {
  21907. lower = toNumber(lower);
  21908. lower = lower === lower ? lower : 0;
  21909. }
  21910. return baseClamp(toNumber(number), lower, upper);
  21911. }
  21912. /**
  21913. * Checks if `n` is between `start` and up to, but not including, `end`. If
  21914. * `end` is not specified, it's set to `start` with `start` then set to `0`.
  21915. * If `start` is greater than `end` the params are swapped to support
  21916. * negative ranges.
  21917. *
  21918. * @static
  21919. * @memberOf _
  21920. * @since 3.3.0
  21921. * @category Number
  21922. * @param {number} number The number to check.
  21923. * @param {number} [start=0] The start of the range.
  21924. * @param {number} end The end of the range.
  21925. * @returns {boolean} Returns `true` if `number` is in the range, else `false`.
  21926. * @see _.range, _.rangeRight
  21927. * @example
  21928. *
  21929. * _.inRange(3, 2, 4);
  21930. * // => true
  21931. *
  21932. * _.inRange(4, 8);
  21933. * // => true
  21934. *
  21935. * _.inRange(4, 2);
  21936. * // => false
  21937. *
  21938. * _.inRange(2, 2);
  21939. * // => false
  21940. *
  21941. * _.inRange(1.2, 2);
  21942. * // => true
  21943. *
  21944. * _.inRange(5.2, 4);
  21945. * // => false
  21946. *
  21947. * _.inRange(-3, -2, -6);
  21948. * // => true
  21949. */
  21950. function inRange(number, start, end) {
  21951. start = toFinite(start);
  21952. if (end === undefined) {
  21953. end = start;
  21954. start = 0;
  21955. } else {
  21956. end = toFinite(end);
  21957. }
  21958. number = toNumber(number);
  21959. return baseInRange(number, start, end);
  21960. }
  21961. /**
  21962. * Produces a random number between the inclusive `lower` and `upper` bounds.
  21963. * If only one argument is provided a number between `0` and the given number
  21964. * is returned. If `floating` is `true`, or either `lower` or `upper` are
  21965. * floats, a floating-point number is returned instead of an integer.
  21966. *
  21967. * **Note:** JavaScript follows the IEEE-754 standard for resolving
  21968. * floating-point values which can produce unexpected results.
  21969. *
  21970. * @static
  21971. * @memberOf _
  21972. * @since 0.7.0
  21973. * @category Number
  21974. * @param {number} [lower=0] The lower bound.
  21975. * @param {number} [upper=1] The upper bound.
  21976. * @param {boolean} [floating] Specify returning a floating-point number.
  21977. * @returns {number} Returns the random number.
  21978. * @example
  21979. *
  21980. * _.random(0, 5);
  21981. * // => an integer between 0 and 5
  21982. *
  21983. * _.random(5);
  21984. * // => also an integer between 0 and 5
  21985. *
  21986. * _.random(5, true);
  21987. * // => a floating-point number between 0 and 5
  21988. *
  21989. * _.random(1.2, 5.2);
  21990. * // => a floating-point number between 1.2 and 5.2
  21991. */
  21992. function random(lower, upper, floating) {
  21993. if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {
  21994. upper = floating = undefined;
  21995. }
  21996. if (floating === undefined) {
  21997. if (typeof upper == 'boolean') {
  21998. floating = upper;
  21999. upper = undefined;
  22000. }
  22001. else if (typeof lower == 'boolean') {
  22002. floating = lower;
  22003. lower = undefined;
  22004. }
  22005. }
  22006. if (lower === undefined && upper === undefined) {
  22007. lower = 0;
  22008. upper = 1;
  22009. }
  22010. else {
  22011. lower = toFinite(lower);
  22012. if (upper === undefined) {
  22013. upper = lower;
  22014. lower = 0;
  22015. } else {
  22016. upper = toFinite(upper);
  22017. }
  22018. }
  22019. if (lower > upper) {
  22020. var temp = lower;
  22021. lower = upper;
  22022. upper = temp;
  22023. }
  22024. if (floating || lower % 1 || upper % 1) {
  22025. var rand = nativeRandom();
  22026. return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);
  22027. }
  22028. return baseRandom(lower, upper);
  22029. }
  22030. /*------------------------------------------------------------------------*/
  22031. /**
  22032. * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).
  22033. *
  22034. * @static
  22035. * @memberOf _
  22036. * @since 3.0.0
  22037. * @category String
  22038. * @param {string} [string=''] The string to convert.
  22039. * @returns {string} Returns the camel cased string.
  22040. * @example
  22041. *
  22042. * _.camelCase('Foo Bar');
  22043. * // => 'fooBar'
  22044. *
  22045. * _.camelCase('--foo-bar--');
  22046. * // => 'fooBar'
  22047. *
  22048. * _.camelCase('__FOO_BAR__');
  22049. * // => 'fooBar'
  22050. */
  22051. var camelCase = createCompounder(function(result, word, index) {
  22052. word = word.toLowerCase();
  22053. return result + (index ? capitalize(word) : word);
  22054. });
  22055. /**
  22056. * Converts the first character of `string` to upper case and the remaining
  22057. * to lower case.
  22058. *
  22059. * @static
  22060. * @memberOf _
  22061. * @since 3.0.0
  22062. * @category String
  22063. * @param {string} [string=''] The string to capitalize.
  22064. * @returns {string} Returns the capitalized string.
  22065. * @example
  22066. *
  22067. * _.capitalize('FRED');
  22068. * // => 'Fred'
  22069. */
  22070. function capitalize(string) {
  22071. return upperFirst(toString(string).toLowerCase());
  22072. }
  22073. /**
  22074. * Deburrs `string` by converting
  22075. * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)
  22076. * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)
  22077. * letters to basic Latin letters and removing
  22078. * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).
  22079. *
  22080. * @static
  22081. * @memberOf _
  22082. * @since 3.0.0
  22083. * @category String
  22084. * @param {string} [string=''] The string to deburr.
  22085. * @returns {string} Returns the deburred string.
  22086. * @example
  22087. *
  22088. * _.deburr('déjà vu');
  22089. * // => 'deja vu'
  22090. */
  22091. function deburr(string) {
  22092. string = toString(string);
  22093. return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');
  22094. }
  22095. /**
  22096. * Checks if `string` ends with the given target string.
  22097. *
  22098. * @static
  22099. * @memberOf _
  22100. * @since 3.0.0
  22101. * @category String
  22102. * @param {string} [string=''] The string to inspect.
  22103. * @param {string} [target] The string to search for.
  22104. * @param {number} [position=string.length] The position to search up to.
  22105. * @returns {boolean} Returns `true` if `string` ends with `target`,
  22106. * else `false`.
  22107. * @example
  22108. *
  22109. * _.endsWith('abc', 'c');
  22110. * // => true
  22111. *
  22112. * _.endsWith('abc', 'b');
  22113. * // => false
  22114. *
  22115. * _.endsWith('abc', 'b', 2);
  22116. * // => true
  22117. */
  22118. function endsWith(string, target, position) {
  22119. string = toString(string);
  22120. target = baseToString(target);
  22121. var length = string.length;
  22122. position = position === undefined
  22123. ? length
  22124. : baseClamp(toInteger(position), 0, length);
  22125. var end = position;
  22126. position -= target.length;
  22127. return position >= 0 && string.slice(position, end) == target;
  22128. }
  22129. /**
  22130. * Converts the characters "&", "<", ">", '"', and "'" in `string` to their
  22131. * corresponding HTML entities.
  22132. *
  22133. * **Note:** No other characters are escaped. To escape additional
  22134. * characters use a third-party library like [_he_](https://mths.be/he).
  22135. *
  22136. * Though the ">" character is escaped for symmetry, characters like
  22137. * ">" and "/" don't need escaping in HTML and have no special meaning
  22138. * unless they're part of a tag or unquoted attribute value. See
  22139. * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)
  22140. * (under "semi-related fun fact") for more details.
  22141. *
  22142. * When working with HTML you should always
  22143. * [quote attribute values](http://wonko.com/post/html-escaping) to reduce
  22144. * XSS vectors.
  22145. *
  22146. * @static
  22147. * @since 0.1.0
  22148. * @memberOf _
  22149. * @category String
  22150. * @param {string} [string=''] The string to escape.
  22151. * @returns {string} Returns the escaped string.
  22152. * @example
  22153. *
  22154. * _.escape('fred, barney, & pebbles');
  22155. * // => 'fred, barney, &amp; pebbles'
  22156. */
  22157. function escape(string) {
  22158. string = toString(string);
  22159. return (string && reHasUnescapedHtml.test(string))
  22160. ? string.replace(reUnescapedHtml, escapeHtmlChar)
  22161. : string;
  22162. }
  22163. /**
  22164. * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+",
  22165. * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`.
  22166. *
  22167. * @static
  22168. * @memberOf _
  22169. * @since 3.0.0
  22170. * @category String
  22171. * @param {string} [string=''] The string to escape.
  22172. * @returns {string} Returns the escaped string.
  22173. * @example
  22174. *
  22175. * _.escapeRegExp('[lodash](https://lodash.com/)');
  22176. * // => '\[lodash\]\(https://lodash\.com/\)'
  22177. */
  22178. function escapeRegExp(string) {
  22179. string = toString(string);
  22180. return (string && reHasRegExpChar.test(string))
  22181. ? string.replace(reRegExpChar, '\\$&')
  22182. : string;
  22183. }
  22184. /**
  22185. * Converts `string` to
  22186. * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).
  22187. *
  22188. * @static
  22189. * @memberOf _
  22190. * @since 3.0.0
  22191. * @category String
  22192. * @param {string} [string=''] The string to convert.
  22193. * @returns {string} Returns the kebab cased string.
  22194. * @example
  22195. *
  22196. * _.kebabCase('Foo Bar');
  22197. * // => 'foo-bar'
  22198. *
  22199. * _.kebabCase('fooBar');
  22200. * // => 'foo-bar'
  22201. *
  22202. * _.kebabCase('__FOO_BAR__');
  22203. * // => 'foo-bar'
  22204. */
  22205. var kebabCase = createCompounder(function(result, word, index) {
  22206. return result + (index ? '-' : '') + word.toLowerCase();
  22207. });
  22208. /**
  22209. * Converts `string`, as space separated words, to lower case.
  22210. *
  22211. * @static
  22212. * @memberOf _
  22213. * @since 4.0.0
  22214. * @category String
  22215. * @param {string} [string=''] The string to convert.
  22216. * @returns {string} Returns the lower cased string.
  22217. * @example
  22218. *
  22219. * _.lowerCase('--Foo-Bar--');
  22220. * // => 'foo bar'
  22221. *
  22222. * _.lowerCase('fooBar');
  22223. * // => 'foo bar'
  22224. *
  22225. * _.lowerCase('__FOO_BAR__');
  22226. * // => 'foo bar'
  22227. */
  22228. var lowerCase = createCompounder(function(result, word, index) {
  22229. return result + (index ? ' ' : '') + word.toLowerCase();
  22230. });
  22231. /**
  22232. * Converts the first character of `string` to lower case.
  22233. *
  22234. * @static
  22235. * @memberOf _
  22236. * @since 4.0.0
  22237. * @category String
  22238. * @param {string} [string=''] The string to convert.
  22239. * @returns {string} Returns the converted string.
  22240. * @example
  22241. *
  22242. * _.lowerFirst('Fred');
  22243. * // => 'fred'
  22244. *
  22245. * _.lowerFirst('FRED');
  22246. * // => 'fRED'
  22247. */
  22248. var lowerFirst = createCaseFirst('toLowerCase');
  22249. /**
  22250. * Pads `string` on the left and right sides if it's shorter than `length`.
  22251. * Padding characters are truncated if they can't be evenly divided by `length`.
  22252. *
  22253. * @static
  22254. * @memberOf _
  22255. * @since 3.0.0
  22256. * @category String
  22257. * @param {string} [string=''] The string to pad.
  22258. * @param {number} [length=0] The padding length.
  22259. * @param {string} [chars=' '] The string used as padding.
  22260. * @returns {string} Returns the padded string.
  22261. * @example
  22262. *
  22263. * _.pad('abc', 8);
  22264. * // => ' abc '
  22265. *
  22266. * _.pad('abc', 8, '_-');
  22267. * // => '_-abc_-_'
  22268. *
  22269. * _.pad('abc', 3);
  22270. * // => 'abc'
  22271. */
  22272. function pad(string, length, chars) {
  22273. string = toString(string);
  22274. length = toInteger(length);
  22275. var strLength = length ? stringSize(string) : 0;
  22276. if (!length || strLength >= length) {
  22277. return string;
  22278. }
  22279. var mid = (length - strLength) / 2;
  22280. return (
  22281. createPadding(nativeFloor(mid), chars) +
  22282. string +
  22283. createPadding(nativeCeil(mid), chars)
  22284. );
  22285. }
  22286. /**
  22287. * Pads `string` on the right side if it's shorter than `length`. Padding
  22288. * characters are truncated if they exceed `length`.
  22289. *
  22290. * @static
  22291. * @memberOf _
  22292. * @since 4.0.0
  22293. * @category String
  22294. * @param {string} [string=''] The string to pad.
  22295. * @param {number} [length=0] The padding length.
  22296. * @param {string} [chars=' '] The string used as padding.
  22297. * @returns {string} Returns the padded string.
  22298. * @example
  22299. *
  22300. * _.padEnd('abc', 6);
  22301. * // => 'abc '
  22302. *
  22303. * _.padEnd('abc', 6, '_-');
  22304. * // => 'abc_-_'
  22305. *
  22306. * _.padEnd('abc', 3);
  22307. * // => 'abc'
  22308. */
  22309. function padEnd(string, length, chars) {
  22310. string = toString(string);
  22311. length = toInteger(length);
  22312. var strLength = length ? stringSize(string) : 0;
  22313. return (length && strLength < length)
  22314. ? (string + createPadding(length - strLength, chars))
  22315. : string;
  22316. }
  22317. /**
  22318. * Pads `string` on the left side if it's shorter than `length`. Padding
  22319. * characters are truncated if they exceed `length`.
  22320. *
  22321. * @static
  22322. * @memberOf _
  22323. * @since 4.0.0
  22324. * @category String
  22325. * @param {string} [string=''] The string to pad.
  22326. * @param {number} [length=0] The padding length.
  22327. * @param {string} [chars=' '] The string used as padding.
  22328. * @returns {string} Returns the padded string.
  22329. * @example
  22330. *
  22331. * _.padStart('abc', 6);
  22332. * // => ' abc'
  22333. *
  22334. * _.padStart('abc', 6, '_-');
  22335. * // => '_-_abc'
  22336. *
  22337. * _.padStart('abc', 3);
  22338. * // => 'abc'
  22339. */
  22340. function padStart(string, length, chars) {
  22341. string = toString(string);
  22342. length = toInteger(length);
  22343. var strLength = length ? stringSize(string) : 0;
  22344. return (length && strLength < length)
  22345. ? (createPadding(length - strLength, chars) + string)
  22346. : string;
  22347. }
  22348. /**
  22349. * Converts `string` to an integer of the specified radix. If `radix` is
  22350. * `undefined` or `0`, a `radix` of `10` is used unless `value` is a
  22351. * hexadecimal, in which case a `radix` of `16` is used.
  22352. *
  22353. * **Note:** This method aligns with the
  22354. * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.
  22355. *
  22356. * @static
  22357. * @memberOf _
  22358. * @since 1.1.0
  22359. * @category String
  22360. * @param {string} string The string to convert.
  22361. * @param {number} [radix=10] The radix to interpret `value` by.
  22362. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  22363. * @returns {number} Returns the converted integer.
  22364. * @example
  22365. *
  22366. * _.parseInt('08');
  22367. * // => 8
  22368. *
  22369. * _.map(['6', '08', '10'], _.parseInt);
  22370. * // => [6, 8, 10]
  22371. */
  22372. function parseInt(string, radix, guard) {
  22373. if (guard || radix == null) {
  22374. radix = 0;
  22375. } else if (radix) {
  22376. radix = +radix;
  22377. }
  22378. return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);
  22379. }
  22380. /**
  22381. * Repeats the given string `n` times.
  22382. *
  22383. * @static
  22384. * @memberOf _
  22385. * @since 3.0.0
  22386. * @category String
  22387. * @param {string} [string=''] The string to repeat.
  22388. * @param {number} [n=1] The number of times to repeat the string.
  22389. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  22390. * @returns {string} Returns the repeated string.
  22391. * @example
  22392. *
  22393. * _.repeat('*', 3);
  22394. * // => '***'
  22395. *
  22396. * _.repeat('abc', 2);
  22397. * // => 'abcabc'
  22398. *
  22399. * _.repeat('abc', 0);
  22400. * // => ''
  22401. */
  22402. function repeat(string, n, guard) {
  22403. if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {
  22404. n = 1;
  22405. } else {
  22406. n = toInteger(n);
  22407. }
  22408. return baseRepeat(toString(string), n);
  22409. }
  22410. /**
  22411. * Replaces matches for `pattern` in `string` with `replacement`.
  22412. *
  22413. * **Note:** This method is based on
  22414. * [`String#replace`](https://mdn.io/String/replace).
  22415. *
  22416. * @static
  22417. * @memberOf _
  22418. * @since 4.0.0
  22419. * @category String
  22420. * @param {string} [string=''] The string to modify.
  22421. * @param {RegExp|string} pattern The pattern to replace.
  22422. * @param {Function|string} replacement The match replacement.
  22423. * @returns {string} Returns the modified string.
  22424. * @example
  22425. *
  22426. * _.replace('Hi Fred', 'Fred', 'Barney');
  22427. * // => 'Hi Barney'
  22428. */
  22429. function replace() {
  22430. var args = arguments,
  22431. string = toString(args[0]);
  22432. return args.length < 3 ? string : string.replace(args[1], args[2]);
  22433. }
  22434. /**
  22435. * Converts `string` to
  22436. * [snake case](https://en.wikipedia.org/wiki/Snake_case).
  22437. *
  22438. * @static
  22439. * @memberOf _
  22440. * @since 3.0.0
  22441. * @category String
  22442. * @param {string} [string=''] The string to convert.
  22443. * @returns {string} Returns the snake cased string.
  22444. * @example
  22445. *
  22446. * _.snakeCase('Foo Bar');
  22447. * // => 'foo_bar'
  22448. *
  22449. * _.snakeCase('fooBar');
  22450. * // => 'foo_bar'
  22451. *
  22452. * _.snakeCase('--FOO-BAR--');
  22453. * // => 'foo_bar'
  22454. */
  22455. var snakeCase = createCompounder(function(result, word, index) {
  22456. return result + (index ? '_' : '') + word.toLowerCase();
  22457. });
  22458. /**
  22459. * Splits `string` by `separator`.
  22460. *
  22461. * **Note:** This method is based on
  22462. * [`String#split`](https://mdn.io/String/split).
  22463. *
  22464. * @static
  22465. * @memberOf _
  22466. * @since 4.0.0
  22467. * @category String
  22468. * @param {string} [string=''] The string to split.
  22469. * @param {RegExp|string} separator The separator pattern to split by.
  22470. * @param {number} [limit] The length to truncate results to.
  22471. * @returns {Array} Returns the string segments.
  22472. * @example
  22473. *
  22474. * _.split('a-b-c', '-', 2);
  22475. * // => ['a', 'b']
  22476. */
  22477. function split(string, separator, limit) {
  22478. if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {
  22479. separator = limit = undefined;
  22480. }
  22481. limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;
  22482. if (!limit) {
  22483. return [];
  22484. }
  22485. string = toString(string);
  22486. if (string && (
  22487. typeof separator == 'string' ||
  22488. (separator != null && !isRegExp(separator))
  22489. )) {
  22490. separator = baseToString(separator);
  22491. if (!separator && hasUnicode(string)) {
  22492. return castSlice(stringToArray(string), 0, limit);
  22493. }
  22494. }
  22495. return string.split(separator, limit);
  22496. }
  22497. /**
  22498. * Converts `string` to
  22499. * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).
  22500. *
  22501. * @static
  22502. * @memberOf _
  22503. * @since 3.1.0
  22504. * @category String
  22505. * @param {string} [string=''] The string to convert.
  22506. * @returns {string} Returns the start cased string.
  22507. * @example
  22508. *
  22509. * _.startCase('--foo-bar--');
  22510. * // => 'Foo Bar'
  22511. *
  22512. * _.startCase('fooBar');
  22513. * // => 'Foo Bar'
  22514. *
  22515. * _.startCase('__FOO_BAR__');
  22516. * // => 'FOO BAR'
  22517. */
  22518. var startCase = createCompounder(function(result, word, index) {
  22519. return result + (index ? ' ' : '') + upperFirst(word);
  22520. });
  22521. /**
  22522. * Checks if `string` starts with the given target string.
  22523. *
  22524. * @static
  22525. * @memberOf _
  22526. * @since 3.0.0
  22527. * @category String
  22528. * @param {string} [string=''] The string to inspect.
  22529. * @param {string} [target] The string to search for.
  22530. * @param {number} [position=0] The position to search from.
  22531. * @returns {boolean} Returns `true` if `string` starts with `target`,
  22532. * else `false`.
  22533. * @example
  22534. *
  22535. * _.startsWith('abc', 'a');
  22536. * // => true
  22537. *
  22538. * _.startsWith('abc', 'b');
  22539. * // => false
  22540. *
  22541. * _.startsWith('abc', 'b', 1);
  22542. * // => true
  22543. */
  22544. function startsWith(string, target, position) {
  22545. string = toString(string);
  22546. position = position == null
  22547. ? 0
  22548. : baseClamp(toInteger(position), 0, string.length);
  22549. target = baseToString(target);
  22550. return string.slice(position, position + target.length) == target;
  22551. }
  22552. /**
  22553. * Creates a compiled template function that can interpolate data properties
  22554. * in "interpolate" delimiters, HTML-escape interpolated data properties in
  22555. * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data
  22556. * properties may be accessed as free variables in the template. If a setting
  22557. * object is given, it takes precedence over `_.templateSettings` values.
  22558. *
  22559. * **Note:** In the development build `_.template` utilizes
  22560. * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)
  22561. * for easier debugging.
  22562. *
  22563. * For more information on precompiling templates see
  22564. * [lodash's custom builds documentation](https://lodash.com/custom-builds).
  22565. *
  22566. * For more information on Chrome extension sandboxes see
  22567. * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).
  22568. *
  22569. * @static
  22570. * @since 0.1.0
  22571. * @memberOf _
  22572. * @category String
  22573. * @param {string} [string=''] The template string.
  22574. * @param {Object} [options={}] The options object.
  22575. * @param {RegExp} [options.escape=_.templateSettings.escape]
  22576. * The HTML "escape" delimiter.
  22577. * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]
  22578. * The "evaluate" delimiter.
  22579. * @param {Object} [options.imports=_.templateSettings.imports]
  22580. * An object to import into the template as free variables.
  22581. * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]
  22582. * The "interpolate" delimiter.
  22583. * @param {string} [options.sourceURL='lodash.templateSources[n]']
  22584. * The sourceURL of the compiled template.
  22585. * @param {string} [options.variable='obj']
  22586. * The data object variable name.
  22587. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  22588. * @returns {Function} Returns the compiled template function.
  22589. * @example
  22590. *
  22591. * // Use the "interpolate" delimiter to create a compiled template.
  22592. * var compiled = _.template('hello <%= user %>!');
  22593. * compiled({ 'user': 'fred' });
  22594. * // => 'hello fred!'
  22595. *
  22596. * // Use the HTML "escape" delimiter to escape data property values.
  22597. * var compiled = _.template('<b><%- value %></b>');
  22598. * compiled({ 'value': '<script>' });
  22599. * // => '<b>&lt;script&gt;</b>'
  22600. *
  22601. * // Use the "evaluate" delimiter to execute JavaScript and generate HTML.
  22602. * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');
  22603. * compiled({ 'users': ['fred', 'barney'] });
  22604. * // => '<li>fred</li><li>barney</li>'
  22605. *
  22606. * // Use the internal `print` function in "evaluate" delimiters.
  22607. * var compiled = _.template('<% print("hello " + user); %>!');
  22608. * compiled({ 'user': 'barney' });
  22609. * // => 'hello barney!'
  22610. *
  22611. * // Use the ES template literal delimiter as an "interpolate" delimiter.
  22612. * // Disable support by replacing the "interpolate" delimiter.
  22613. * var compiled = _.template('hello ${ user }!');
  22614. * compiled({ 'user': 'pebbles' });
  22615. * // => 'hello pebbles!'
  22616. *
  22617. * // Use backslashes to treat delimiters as plain text.
  22618. * var compiled = _.template('<%= "\\<%- value %\\>" %>');
  22619. * compiled({ 'value': 'ignored' });
  22620. * // => '<%- value %>'
  22621. *
  22622. * // Use the `imports` option to import `jQuery` as `jq`.
  22623. * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';
  22624. * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });
  22625. * compiled({ 'users': ['fred', 'barney'] });
  22626. * // => '<li>fred</li><li>barney</li>'
  22627. *
  22628. * // Use the `sourceURL` option to specify a custom sourceURL for the template.
  22629. * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });
  22630. * compiled(data);
  22631. * // => Find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector.
  22632. *
  22633. * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.
  22634. * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });
  22635. * compiled.source;
  22636. * // => function(data) {
  22637. * // var __t, __p = '';
  22638. * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';
  22639. * // return __p;
  22640. * // }
  22641. *
  22642. * // Use custom template delimiters.
  22643. * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g;
  22644. * var compiled = _.template('hello {{ user }}!');
  22645. * compiled({ 'user': 'mustache' });
  22646. * // => 'hello mustache!'
  22647. *
  22648. * // Use the `source` property to inline compiled templates for meaningful
  22649. * // line numbers in error messages and stack traces.
  22650. * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\
  22651. * var JST = {\
  22652. * "main": ' + _.template(mainText).source + '\
  22653. * };\
  22654. * ');
  22655. */
  22656. function template(string, options, guard) {
  22657. // Based on John Resig's `tmpl` implementation
  22658. // (http://ejohn.org/blog/javascript-micro-templating/)
  22659. // and Laura Doktorova's doT.js (https://github.com/olado/doT).
  22660. var settings = lodash.templateSettings;
  22661. if (guard && isIterateeCall(string, options, guard)) {
  22662. options = undefined;
  22663. }
  22664. string = toString(string);
  22665. options = assignInWith({}, options, settings, customDefaultsAssignIn);
  22666. var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),
  22667. importsKeys = keys(imports),
  22668. importsValues = baseValues(imports, importsKeys);
  22669. var isEscaping,
  22670. isEvaluating,
  22671. index = 0,
  22672. interpolate = options.interpolate || reNoMatch,
  22673. source = "__p += '";
  22674. // Compile the regexp to match each delimiter.
  22675. var reDelimiters = RegExp(
  22676. (options.escape || reNoMatch).source + '|' +
  22677. interpolate.source + '|' +
  22678. (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +
  22679. (options.evaluate || reNoMatch).source + '|$'
  22680. , 'g');
  22681. // Use a sourceURL for easier debugging.
  22682. var sourceURL = '//# sourceURL=' +
  22683. ('sourceURL' in options
  22684. ? options.sourceURL
  22685. : ('lodash.templateSources[' + (++templateCounter) + ']')
  22686. ) + '\n';
  22687. string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
  22688. interpolateValue || (interpolateValue = esTemplateValue);
  22689. // Escape characters that can't be included in string literals.
  22690. source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);
  22691. // Replace delimiters with snippets.
  22692. if (escapeValue) {
  22693. isEscaping = true;
  22694. source += "' +\n__e(" + escapeValue + ") +\n'";
  22695. }
  22696. if (evaluateValue) {
  22697. isEvaluating = true;
  22698. source += "';\n" + evaluateValue + ";\n__p += '";
  22699. }
  22700. if (interpolateValue) {
  22701. source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
  22702. }
  22703. index = offset + match.length;
  22704. // The JS engine embedded in Adobe products needs `match` returned in
  22705. // order to produce the correct `offset` value.
  22706. return match;
  22707. });
  22708. source += "';\n";
  22709. // If `variable` is not specified wrap a with-statement around the generated
  22710. // code to add the data object to the top of the scope chain.
  22711. var variable = options.variable;
  22712. if (!variable) {
  22713. source = 'with (obj) {\n' + source + '\n}\n';
  22714. }
  22715. // Cleanup code by stripping empty strings.
  22716. source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)
  22717. .replace(reEmptyStringMiddle, '$1')
  22718. .replace(reEmptyStringTrailing, '$1;');
  22719. // Frame code as the function body.
  22720. source = 'function(' + (variable || 'obj') + ') {\n' +
  22721. (variable
  22722. ? ''
  22723. : 'obj || (obj = {});\n'
  22724. ) +
  22725. "var __t, __p = ''" +
  22726. (isEscaping
  22727. ? ', __e = _.escape'
  22728. : ''
  22729. ) +
  22730. (isEvaluating
  22731. ? ', __j = Array.prototype.join;\n' +
  22732. "function print() { __p += __j.call(arguments, '') }\n"
  22733. : ';\n'
  22734. ) +
  22735. source +
  22736. 'return __p\n}';
  22737. var result = attempt(function() {
  22738. return Function(importsKeys, sourceURL + 'return ' + source)
  22739. .apply(undefined, importsValues);
  22740. });
  22741. // Provide the compiled function's source by its `toString` method or
  22742. // the `source` property as a convenience for inlining compiled templates.
  22743. result.source = source;
  22744. if (isError(result)) {
  22745. throw result;
  22746. }
  22747. return result;
  22748. }
  22749. /**
  22750. * Converts `string`, as a whole, to lower case just like
  22751. * [String#toLowerCase](https://mdn.io/toLowerCase).
  22752. *
  22753. * @static
  22754. * @memberOf _
  22755. * @since 4.0.0
  22756. * @category String
  22757. * @param {string} [string=''] The string to convert.
  22758. * @returns {string} Returns the lower cased string.
  22759. * @example
  22760. *
  22761. * _.toLower('--Foo-Bar--');
  22762. * // => '--foo-bar--'
  22763. *
  22764. * _.toLower('fooBar');
  22765. * // => 'foobar'
  22766. *
  22767. * _.toLower('__FOO_BAR__');
  22768. * // => '__foo_bar__'
  22769. */
  22770. function toLower(value) {
  22771. return toString(value).toLowerCase();
  22772. }
  22773. /**
  22774. * Converts `string`, as a whole, to upper case just like
  22775. * [String#toUpperCase](https://mdn.io/toUpperCase).
  22776. *
  22777. * @static
  22778. * @memberOf _
  22779. * @since 4.0.0
  22780. * @category String
  22781. * @param {string} [string=''] The string to convert.
  22782. * @returns {string} Returns the upper cased string.
  22783. * @example
  22784. *
  22785. * _.toUpper('--foo-bar--');
  22786. * // => '--FOO-BAR--'
  22787. *
  22788. * _.toUpper('fooBar');
  22789. * // => 'FOOBAR'
  22790. *
  22791. * _.toUpper('__foo_bar__');
  22792. * // => '__FOO_BAR__'
  22793. */
  22794. function toUpper(value) {
  22795. return toString(value).toUpperCase();
  22796. }
  22797. /**
  22798. * Removes leading and trailing whitespace or specified characters from `string`.
  22799. *
  22800. * @static
  22801. * @memberOf _
  22802. * @since 3.0.0
  22803. * @category String
  22804. * @param {string} [string=''] The string to trim.
  22805. * @param {string} [chars=whitespace] The characters to trim.
  22806. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  22807. * @returns {string} Returns the trimmed string.
  22808. * @example
  22809. *
  22810. * _.trim(' abc ');
  22811. * // => 'abc'
  22812. *
  22813. * _.trim('-_-abc-_-', '_-');
  22814. * // => 'abc'
  22815. *
  22816. * _.map([' foo ', ' bar '], _.trim);
  22817. * // => ['foo', 'bar']
  22818. */
  22819. function trim(string, chars, guard) {
  22820. string = toString(string);
  22821. if (string && (guard || chars === undefined)) {
  22822. return string.replace(reTrim, '');
  22823. }
  22824. if (!string || !(chars = baseToString(chars))) {
  22825. return string;
  22826. }
  22827. var strSymbols = stringToArray(string),
  22828. chrSymbols = stringToArray(chars),
  22829. start = charsStartIndex(strSymbols, chrSymbols),
  22830. end = charsEndIndex(strSymbols, chrSymbols) + 1;
  22831. return castSlice(strSymbols, start, end).join('');
  22832. }
  22833. /**
  22834. * Removes trailing whitespace or specified characters from `string`.
  22835. *
  22836. * @static
  22837. * @memberOf _
  22838. * @since 4.0.0
  22839. * @category String
  22840. * @param {string} [string=''] The string to trim.
  22841. * @param {string} [chars=whitespace] The characters to trim.
  22842. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  22843. * @returns {string} Returns the trimmed string.
  22844. * @example
  22845. *
  22846. * _.trimEnd(' abc ');
  22847. * // => ' abc'
  22848. *
  22849. * _.trimEnd('-_-abc-_-', '_-');
  22850. * // => '-_-abc'
  22851. */
  22852. function trimEnd(string, chars, guard) {
  22853. string = toString(string);
  22854. if (string && (guard || chars === undefined)) {
  22855. return string.replace(reTrimEnd, '');
  22856. }
  22857. if (!string || !(chars = baseToString(chars))) {
  22858. return string;
  22859. }
  22860. var strSymbols = stringToArray(string),
  22861. end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;
  22862. return castSlice(strSymbols, 0, end).join('');
  22863. }
  22864. /**
  22865. * Removes leading whitespace or specified characters from `string`.
  22866. *
  22867. * @static
  22868. * @memberOf _
  22869. * @since 4.0.0
  22870. * @category String
  22871. * @param {string} [string=''] The string to trim.
  22872. * @param {string} [chars=whitespace] The characters to trim.
  22873. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  22874. * @returns {string} Returns the trimmed string.
  22875. * @example
  22876. *
  22877. * _.trimStart(' abc ');
  22878. * // => 'abc '
  22879. *
  22880. * _.trimStart('-_-abc-_-', '_-');
  22881. * // => 'abc-_-'
  22882. */
  22883. function trimStart(string, chars, guard) {
  22884. string = toString(string);
  22885. if (string && (guard || chars === undefined)) {
  22886. return string.replace(reTrimStart, '');
  22887. }
  22888. if (!string || !(chars = baseToString(chars))) {
  22889. return string;
  22890. }
  22891. var strSymbols = stringToArray(string),
  22892. start = charsStartIndex(strSymbols, stringToArray(chars));
  22893. return castSlice(strSymbols, start).join('');
  22894. }
  22895. /**
  22896. * Truncates `string` if it's longer than the given maximum string length.
  22897. * The last characters of the truncated string are replaced with the omission
  22898. * string which defaults to "...".
  22899. *
  22900. * @static
  22901. * @memberOf _
  22902. * @since 4.0.0
  22903. * @category String
  22904. * @param {string} [string=''] The string to truncate.
  22905. * @param {Object} [options={}] The options object.
  22906. * @param {number} [options.length=30] The maximum string length.
  22907. * @param {string} [options.omission='...'] The string to indicate text is omitted.
  22908. * @param {RegExp|string} [options.separator] The separator pattern to truncate to.
  22909. * @returns {string} Returns the truncated string.
  22910. * @example
  22911. *
  22912. * _.truncate('hi-diddly-ho there, neighborino');
  22913. * // => 'hi-diddly-ho there, neighbo...'
  22914. *
  22915. * _.truncate('hi-diddly-ho there, neighborino', {
  22916. * 'length': 24,
  22917. * 'separator': ' '
  22918. * });
  22919. * // => 'hi-diddly-ho there,...'
  22920. *
  22921. * _.truncate('hi-diddly-ho there, neighborino', {
  22922. * 'length': 24,
  22923. * 'separator': /,? +/
  22924. * });
  22925. * // => 'hi-diddly-ho there...'
  22926. *
  22927. * _.truncate('hi-diddly-ho there, neighborino', {
  22928. * 'omission': ' [...]'
  22929. * });
  22930. * // => 'hi-diddly-ho there, neig [...]'
  22931. */
  22932. function truncate(string, options) {
  22933. var length = DEFAULT_TRUNC_LENGTH,
  22934. omission = DEFAULT_TRUNC_OMISSION;
  22935. if (isObject(options)) {
  22936. var separator = 'separator' in options ? options.separator : separator;
  22937. length = 'length' in options ? toInteger(options.length) : length;
  22938. omission = 'omission' in options ? baseToString(options.omission) : omission;
  22939. }
  22940. string = toString(string);
  22941. var strLength = string.length;
  22942. if (hasUnicode(string)) {
  22943. var strSymbols = stringToArray(string);
  22944. strLength = strSymbols.length;
  22945. }
  22946. if (length >= strLength) {
  22947. return string;
  22948. }
  22949. var end = length - stringSize(omission);
  22950. if (end < 1) {
  22951. return omission;
  22952. }
  22953. var result = strSymbols
  22954. ? castSlice(strSymbols, 0, end).join('')
  22955. : string.slice(0, end);
  22956. if (separator === undefined) {
  22957. return result + omission;
  22958. }
  22959. if (strSymbols) {
  22960. end += (result.length - end);
  22961. }
  22962. if (isRegExp(separator)) {
  22963. if (string.slice(end).search(separator)) {
  22964. var match,
  22965. substring = result;
  22966. if (!separator.global) {
  22967. separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');
  22968. }
  22969. separator.lastIndex = 0;
  22970. while ((match = separator.exec(substring))) {
  22971. var newEnd = match.index;
  22972. }
  22973. result = result.slice(0, newEnd === undefined ? end : newEnd);
  22974. }
  22975. } else if (string.indexOf(baseToString(separator), end) != end) {
  22976. var index = result.lastIndexOf(separator);
  22977. if (index > -1) {
  22978. result = result.slice(0, index);
  22979. }
  22980. }
  22981. return result + omission;
  22982. }
  22983. /**
  22984. * The inverse of `_.escape`; this method converts the HTML entities
  22985. * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to
  22986. * their corresponding characters.
  22987. *
  22988. * **Note:** No other HTML entities are unescaped. To unescape additional
  22989. * HTML entities use a third-party library like [_he_](https://mths.be/he).
  22990. *
  22991. * @static
  22992. * @memberOf _
  22993. * @since 0.6.0
  22994. * @category String
  22995. * @param {string} [string=''] The string to unescape.
  22996. * @returns {string} Returns the unescaped string.
  22997. * @example
  22998. *
  22999. * _.unescape('fred, barney, &amp; pebbles');
  23000. * // => 'fred, barney, & pebbles'
  23001. */
  23002. function unescape(string) {
  23003. string = toString(string);
  23004. return (string && reHasEscapedHtml.test(string))
  23005. ? string.replace(reEscapedHtml, unescapeHtmlChar)
  23006. : string;
  23007. }
  23008. /**
  23009. * Converts `string`, as space separated words, to upper case.
  23010. *
  23011. * @static
  23012. * @memberOf _
  23013. * @since 4.0.0
  23014. * @category String
  23015. * @param {string} [string=''] The string to convert.
  23016. * @returns {string} Returns the upper cased string.
  23017. * @example
  23018. *
  23019. * _.upperCase('--foo-bar');
  23020. * // => 'FOO BAR'
  23021. *
  23022. * _.upperCase('fooBar');
  23023. * // => 'FOO BAR'
  23024. *
  23025. * _.upperCase('__foo_bar__');
  23026. * // => 'FOO BAR'
  23027. */
  23028. var upperCase = createCompounder(function(result, word, index) {
  23029. return result + (index ? ' ' : '') + word.toUpperCase();
  23030. });
  23031. /**
  23032. * Converts the first character of `string` to upper case.
  23033. *
  23034. * @static
  23035. * @memberOf _
  23036. * @since 4.0.0
  23037. * @category String
  23038. * @param {string} [string=''] The string to convert.
  23039. * @returns {string} Returns the converted string.
  23040. * @example
  23041. *
  23042. * _.upperFirst('fred');
  23043. * // => 'Fred'
  23044. *
  23045. * _.upperFirst('FRED');
  23046. * // => 'FRED'
  23047. */
  23048. var upperFirst = createCaseFirst('toUpperCase');
  23049. /**
  23050. * Splits `string` into an array of its words.
  23051. *
  23052. * @static
  23053. * @memberOf _
  23054. * @since 3.0.0
  23055. * @category String
  23056. * @param {string} [string=''] The string to inspect.
  23057. * @param {RegExp|string} [pattern] The pattern to match words.
  23058. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  23059. * @returns {Array} Returns the words of `string`.
  23060. * @example
  23061. *
  23062. * _.words('fred, barney, & pebbles');
  23063. * // => ['fred', 'barney', 'pebbles']
  23064. *
  23065. * _.words('fred, barney, & pebbles', /[^, ]+/g);
  23066. * // => ['fred', 'barney', '&', 'pebbles']
  23067. */
  23068. function words(string, pattern, guard) {
  23069. string = toString(string);
  23070. pattern = guard ? undefined : pattern;
  23071. if (pattern === undefined) {
  23072. return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);
  23073. }
  23074. return string.match(pattern) || [];
  23075. }
  23076. /*------------------------------------------------------------------------*/
  23077. /**
  23078. * Attempts to invoke `func`, returning either the result or the caught error
  23079. * object. Any additional arguments are provided to `func` when it's invoked.
  23080. *
  23081. * @static
  23082. * @memberOf _
  23083. * @since 3.0.0
  23084. * @category Util
  23085. * @param {Function} func The function to attempt.
  23086. * @param {...*} [args] The arguments to invoke `func` with.
  23087. * @returns {*} Returns the `func` result or error object.
  23088. * @example
  23089. *
  23090. * // Avoid throwing errors for invalid selectors.
  23091. * var elements = _.attempt(function(selector) {
  23092. * return document.querySelectorAll(selector);
  23093. * }, '>_>');
  23094. *
  23095. * if (_.isError(elements)) {
  23096. * elements = [];
  23097. * }
  23098. */
  23099. var attempt = baseRest(function(func, args) {
  23100. try {
  23101. return apply(func, undefined, args);
  23102. } catch (e) {
  23103. return isError(e) ? e : new Error(e);
  23104. }
  23105. });
  23106. /**
  23107. * Binds methods of an object to the object itself, overwriting the existing
  23108. * method.
  23109. *
  23110. * **Note:** This method doesn't set the "length" property of bound functions.
  23111. *
  23112. * @static
  23113. * @since 0.1.0
  23114. * @memberOf _
  23115. * @category Util
  23116. * @param {Object} object The object to bind and assign the bound methods to.
  23117. * @param {...(string|string[])} methodNames The object method names to bind.
  23118. * @returns {Object} Returns `object`.
  23119. * @example
  23120. *
  23121. * var view = {
  23122. * 'label': 'docs',
  23123. * 'click': function() {
  23124. * console.log('clicked ' + this.label);
  23125. * }
  23126. * };
  23127. *
  23128. * _.bindAll(view, ['click']);
  23129. * jQuery(element).on('click', view.click);
  23130. * // => Logs 'clicked docs' when clicked.
  23131. */
  23132. var bindAll = flatRest(function(object, methodNames) {
  23133. arrayEach(methodNames, function(key) {
  23134. key = toKey(key);
  23135. baseAssignValue(object, key, bind(object[key], object));
  23136. });
  23137. return object;
  23138. });
  23139. /**
  23140. * Creates a function that iterates over `pairs` and invokes the corresponding
  23141. * function of the first predicate to return truthy. The predicate-function
  23142. * pairs are invoked with the `this` binding and arguments of the created
  23143. * function.
  23144. *
  23145. * @static
  23146. * @memberOf _
  23147. * @since 4.0.0
  23148. * @category Util
  23149. * @param {Array} pairs The predicate-function pairs.
  23150. * @returns {Function} Returns the new composite function.
  23151. * @example
  23152. *
  23153. * var func = _.cond([
  23154. * [_.matches({ 'a': 1 }), _.constant('matches A')],
  23155. * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],
  23156. * [_.stubTrue, _.constant('no match')]
  23157. * ]);
  23158. *
  23159. * func({ 'a': 1, 'b': 2 });
  23160. * // => 'matches A'
  23161. *
  23162. * func({ 'a': 0, 'b': 1 });
  23163. * // => 'matches B'
  23164. *
  23165. * func({ 'a': '1', 'b': '2' });
  23166. * // => 'no match'
  23167. */
  23168. function cond(pairs) {
  23169. var length = pairs == null ? 0 : pairs.length,
  23170. toIteratee = getIteratee();
  23171. pairs = !length ? [] : arrayMap(pairs, function(pair) {
  23172. if (typeof pair[1] != 'function') {
  23173. throw new TypeError(FUNC_ERROR_TEXT);
  23174. }
  23175. return [toIteratee(pair[0]), pair[1]];
  23176. });
  23177. return baseRest(function(args) {
  23178. var index = -1;
  23179. while (++index < length) {
  23180. var pair = pairs[index];
  23181. if (apply(pair[0], this, args)) {
  23182. return apply(pair[1], this, args);
  23183. }
  23184. }
  23185. });
  23186. }
  23187. /**
  23188. * Creates a function that invokes the predicate properties of `source` with
  23189. * the corresponding property values of a given object, returning `true` if
  23190. * all predicates return truthy, else `false`.
  23191. *
  23192. * **Note:** The created function is equivalent to `_.conformsTo` with
  23193. * `source` partially applied.
  23194. *
  23195. * @static
  23196. * @memberOf _
  23197. * @since 4.0.0
  23198. * @category Util
  23199. * @param {Object} source The object of property predicates to conform to.
  23200. * @returns {Function} Returns the new spec function.
  23201. * @example
  23202. *
  23203. * var objects = [
  23204. * { 'a': 2, 'b': 1 },
  23205. * { 'a': 1, 'b': 2 }
  23206. * ];
  23207. *
  23208. * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));
  23209. * // => [{ 'a': 1, 'b': 2 }]
  23210. */
  23211. function conforms(source) {
  23212. return baseConforms(baseClone(source, CLONE_DEEP_FLAG));
  23213. }
  23214. /**
  23215. * Creates a function that returns `value`.
  23216. *
  23217. * @static
  23218. * @memberOf _
  23219. * @since 2.4.0
  23220. * @category Util
  23221. * @param {*} value The value to return from the new function.
  23222. * @returns {Function} Returns the new constant function.
  23223. * @example
  23224. *
  23225. * var objects = _.times(2, _.constant({ 'a': 1 }));
  23226. *
  23227. * console.log(objects);
  23228. * // => [{ 'a': 1 }, { 'a': 1 }]
  23229. *
  23230. * console.log(objects[0] === objects[1]);
  23231. * // => true
  23232. */
  23233. function constant(value) {
  23234. return function() {
  23235. return value;
  23236. };
  23237. }
  23238. /**
  23239. * Checks `value` to determine whether a default value should be returned in
  23240. * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,
  23241. * or `undefined`.
  23242. *
  23243. * @static
  23244. * @memberOf _
  23245. * @since 4.14.0
  23246. * @category Util
  23247. * @param {*} value The value to check.
  23248. * @param {*} defaultValue The default value.
  23249. * @returns {*} Returns the resolved value.
  23250. * @example
  23251. *
  23252. * _.defaultTo(1, 10);
  23253. * // => 1
  23254. *
  23255. * _.defaultTo(undefined, 10);
  23256. * // => 10
  23257. */
  23258. function defaultTo(value, defaultValue) {
  23259. return (value == null || value !== value) ? defaultValue : value;
  23260. }
  23261. /**
  23262. * Creates a function that returns the result of invoking the given functions
  23263. * with the `this` binding of the created function, where each successive
  23264. * invocation is supplied the return value of the previous.
  23265. *
  23266. * @static
  23267. * @memberOf _
  23268. * @since 3.0.0
  23269. * @category Util
  23270. * @param {...(Function|Function[])} [funcs] The functions to invoke.
  23271. * @returns {Function} Returns the new composite function.
  23272. * @see _.flowRight
  23273. * @example
  23274. *
  23275. * function square(n) {
  23276. * return n * n;
  23277. * }
  23278. *
  23279. * var addSquare = _.flow([_.add, square]);
  23280. * addSquare(1, 2);
  23281. * // => 9
  23282. */
  23283. var flow = createFlow();
  23284. /**
  23285. * This method is like `_.flow` except that it creates a function that
  23286. * invokes the given functions from right to left.
  23287. *
  23288. * @static
  23289. * @since 3.0.0
  23290. * @memberOf _
  23291. * @category Util
  23292. * @param {...(Function|Function[])} [funcs] The functions to invoke.
  23293. * @returns {Function} Returns the new composite function.
  23294. * @see _.flow
  23295. * @example
  23296. *
  23297. * function square(n) {
  23298. * return n * n;
  23299. * }
  23300. *
  23301. * var addSquare = _.flowRight([square, _.add]);
  23302. * addSquare(1, 2);
  23303. * // => 9
  23304. */
  23305. var flowRight = createFlow(true);
  23306. /**
  23307. * This method returns the first argument it receives.
  23308. *
  23309. * @static
  23310. * @since 0.1.0
  23311. * @memberOf _
  23312. * @category Util
  23313. * @param {*} value Any value.
  23314. * @returns {*} Returns `value`.
  23315. * @example
  23316. *
  23317. * var object = { 'a': 1 };
  23318. *
  23319. * console.log(_.identity(object) === object);
  23320. * // => true
  23321. */
  23322. function identity(value) {
  23323. return value;
  23324. }
  23325. /**
  23326. * Creates a function that invokes `func` with the arguments of the created
  23327. * function. If `func` is a property name, the created function returns the
  23328. * property value for a given element. If `func` is an array or object, the
  23329. * created function returns `true` for elements that contain the equivalent
  23330. * source properties, otherwise it returns `false`.
  23331. *
  23332. * @static
  23333. * @since 4.0.0
  23334. * @memberOf _
  23335. * @category Util
  23336. * @param {*} [func=_.identity] The value to convert to a callback.
  23337. * @returns {Function} Returns the callback.
  23338. * @example
  23339. *
  23340. * var users = [
  23341. * { 'user': 'barney', 'age': 36, 'active': true },
  23342. * { 'user': 'fred', 'age': 40, 'active': false }
  23343. * ];
  23344. *
  23345. * // The `_.matches` iteratee shorthand.
  23346. * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));
  23347. * // => [{ 'user': 'barney', 'age': 36, 'active': true }]
  23348. *
  23349. * // The `_.matchesProperty` iteratee shorthand.
  23350. * _.filter(users, _.iteratee(['user', 'fred']));
  23351. * // => [{ 'user': 'fred', 'age': 40 }]
  23352. *
  23353. * // The `_.property` iteratee shorthand.
  23354. * _.map(users, _.iteratee('user'));
  23355. * // => ['barney', 'fred']
  23356. *
  23357. * // Create custom iteratee shorthands.
  23358. * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {
  23359. * return !_.isRegExp(func) ? iteratee(func) : function(string) {
  23360. * return func.test(string);
  23361. * };
  23362. * });
  23363. *
  23364. * _.filter(['abc', 'def'], /ef/);
  23365. * // => ['def']
  23366. */
  23367. function iteratee(func) {
  23368. return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));
  23369. }
  23370. /**
  23371. * Creates a function that performs a partial deep comparison between a given
  23372. * object and `source`, returning `true` if the given object has equivalent
  23373. * property values, else `false`.
  23374. *
  23375. * **Note:** The created function is equivalent to `_.isMatch` with `source`
  23376. * partially applied.
  23377. *
  23378. * Partial comparisons will match empty array and empty object `source`
  23379. * values against any array or object value, respectively. See `_.isEqual`
  23380. * for a list of supported value comparisons.
  23381. *
  23382. * @static
  23383. * @memberOf _
  23384. * @since 3.0.0
  23385. * @category Util
  23386. * @param {Object} source The object of property values to match.
  23387. * @returns {Function} Returns the new spec function.
  23388. * @example
  23389. *
  23390. * var objects = [
  23391. * { 'a': 1, 'b': 2, 'c': 3 },
  23392. * { 'a': 4, 'b': 5, 'c': 6 }
  23393. * ];
  23394. *
  23395. * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));
  23396. * // => [{ 'a': 4, 'b': 5, 'c': 6 }]
  23397. */
  23398. function matches(source) {
  23399. return baseMatches(baseClone(source, CLONE_DEEP_FLAG));
  23400. }
  23401. /**
  23402. * Creates a function that performs a partial deep comparison between the
  23403. * value at `path` of a given object to `srcValue`, returning `true` if the
  23404. * object value is equivalent, else `false`.
  23405. *
  23406. * **Note:** Partial comparisons will match empty array and empty object
  23407. * `srcValue` values against any array or object value, respectively. See
  23408. * `_.isEqual` for a list of supported value comparisons.
  23409. *
  23410. * @static
  23411. * @memberOf _
  23412. * @since 3.2.0
  23413. * @category Util
  23414. * @param {Array|string} path The path of the property to get.
  23415. * @param {*} srcValue The value to match.
  23416. * @returns {Function} Returns the new spec function.
  23417. * @example
  23418. *
  23419. * var objects = [
  23420. * { 'a': 1, 'b': 2, 'c': 3 },
  23421. * { 'a': 4, 'b': 5, 'c': 6 }
  23422. * ];
  23423. *
  23424. * _.find(objects, _.matchesProperty('a', 4));
  23425. * // => { 'a': 4, 'b': 5, 'c': 6 }
  23426. */
  23427. function matchesProperty(path, srcValue) {
  23428. return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));
  23429. }
  23430. /**
  23431. * Creates a function that invokes the method at `path` of a given object.
  23432. * Any additional arguments are provided to the invoked method.
  23433. *
  23434. * @static
  23435. * @memberOf _
  23436. * @since 3.7.0
  23437. * @category Util
  23438. * @param {Array|string} path The path of the method to invoke.
  23439. * @param {...*} [args] The arguments to invoke the method with.
  23440. * @returns {Function} Returns the new invoker function.
  23441. * @example
  23442. *
  23443. * var objects = [
  23444. * { 'a': { 'b': _.constant(2) } },
  23445. * { 'a': { 'b': _.constant(1) } }
  23446. * ];
  23447. *
  23448. * _.map(objects, _.method('a.b'));
  23449. * // => [2, 1]
  23450. *
  23451. * _.map(objects, _.method(['a', 'b']));
  23452. * // => [2, 1]
  23453. */
  23454. var method = baseRest(function(path, args) {
  23455. return function(object) {
  23456. return baseInvoke(object, path, args);
  23457. };
  23458. });
  23459. /**
  23460. * The opposite of `_.method`; this method creates a function that invokes
  23461. * the method at a given path of `object`. Any additional arguments are
  23462. * provided to the invoked method.
  23463. *
  23464. * @static
  23465. * @memberOf _
  23466. * @since 3.7.0
  23467. * @category Util
  23468. * @param {Object} object The object to query.
  23469. * @param {...*} [args] The arguments to invoke the method with.
  23470. * @returns {Function} Returns the new invoker function.
  23471. * @example
  23472. *
  23473. * var array = _.times(3, _.constant),
  23474. * object = { 'a': array, 'b': array, 'c': array };
  23475. *
  23476. * _.map(['a[2]', 'c[0]'], _.methodOf(object));
  23477. * // => [2, 0]
  23478. *
  23479. * _.map([['a', '2'], ['c', '0']], _.methodOf(object));
  23480. * // => [2, 0]
  23481. */
  23482. var methodOf = baseRest(function(object, args) {
  23483. return function(path) {
  23484. return baseInvoke(object, path, args);
  23485. };
  23486. });
  23487. /**
  23488. * Adds all own enumerable string keyed function properties of a source
  23489. * object to the destination object. If `object` is a function, then methods
  23490. * are added to its prototype as well.
  23491. *
  23492. * **Note:** Use `_.runInContext` to create a pristine `lodash` function to
  23493. * avoid conflicts caused by modifying the original.
  23494. *
  23495. * @static
  23496. * @since 0.1.0
  23497. * @memberOf _
  23498. * @category Util
  23499. * @param {Function|Object} [object=lodash] The destination object.
  23500. * @param {Object} source The object of functions to add.
  23501. * @param {Object} [options={}] The options object.
  23502. * @param {boolean} [options.chain=true] Specify whether mixins are chainable.
  23503. * @returns {Function|Object} Returns `object`.
  23504. * @example
  23505. *
  23506. * function vowels(string) {
  23507. * return _.filter(string, function(v) {
  23508. * return /[aeiou]/i.test(v);
  23509. * });
  23510. * }
  23511. *
  23512. * _.mixin({ 'vowels': vowels });
  23513. * _.vowels('fred');
  23514. * // => ['e']
  23515. *
  23516. * _('fred').vowels().value();
  23517. * // => ['e']
  23518. *
  23519. * _.mixin({ 'vowels': vowels }, { 'chain': false });
  23520. * _('fred').vowels();
  23521. * // => ['e']
  23522. */
  23523. function mixin(object, source, options) {
  23524. var props = keys(source),
  23525. methodNames = baseFunctions(source, props);
  23526. if (options == null &&
  23527. !(isObject(source) && (methodNames.length || !props.length))) {
  23528. options = source;
  23529. source = object;
  23530. object = this;
  23531. methodNames = baseFunctions(source, keys(source));
  23532. }
  23533. var chain = !(isObject(options) && 'chain' in options) || !!options.chain,
  23534. isFunc = isFunction(object);
  23535. arrayEach(methodNames, function(methodName) {
  23536. var func = source[methodName];
  23537. object[methodName] = func;
  23538. if (isFunc) {
  23539. object.prototype[methodName] = function() {
  23540. var chainAll = this.__chain__;
  23541. if (chain || chainAll) {
  23542. var result = object(this.__wrapped__),
  23543. actions = result.__actions__ = copyArray(this.__actions__);
  23544. actions.push({ 'func': func, 'args': arguments, 'thisArg': object });
  23545. result.__chain__ = chainAll;
  23546. return result;
  23547. }
  23548. return func.apply(object, arrayPush([this.value()], arguments));
  23549. };
  23550. }
  23551. });
  23552. return object;
  23553. }
  23554. /**
  23555. * Reverts the `_` variable to its previous value and returns a reference to
  23556. * the `lodash` function.
  23557. *
  23558. * @static
  23559. * @since 0.1.0
  23560. * @memberOf _
  23561. * @category Util
  23562. * @returns {Function} Returns the `lodash` function.
  23563. * @example
  23564. *
  23565. * var lodash = _.noConflict();
  23566. */
  23567. function noConflict() {
  23568. if (root._ === this) {
  23569. root._ = oldDash;
  23570. }
  23571. return this;
  23572. }
  23573. /**
  23574. * This method returns `undefined`.
  23575. *
  23576. * @static
  23577. * @memberOf _
  23578. * @since 2.3.0
  23579. * @category Util
  23580. * @example
  23581. *
  23582. * _.times(2, _.noop);
  23583. * // => [undefined, undefined]
  23584. */
  23585. function noop() {
  23586. // No operation performed.
  23587. }
  23588. /**
  23589. * Creates a function that gets the argument at index `n`. If `n` is negative,
  23590. * the nth argument from the end is returned.
  23591. *
  23592. * @static
  23593. * @memberOf _
  23594. * @since 4.0.0
  23595. * @category Util
  23596. * @param {number} [n=0] The index of the argument to return.
  23597. * @returns {Function} Returns the new pass-thru function.
  23598. * @example
  23599. *
  23600. * var func = _.nthArg(1);
  23601. * func('a', 'b', 'c', 'd');
  23602. * // => 'b'
  23603. *
  23604. * var func = _.nthArg(-2);
  23605. * func('a', 'b', 'c', 'd');
  23606. * // => 'c'
  23607. */
  23608. function nthArg(n) {
  23609. n = toInteger(n);
  23610. return baseRest(function(args) {
  23611. return baseNth(args, n);
  23612. });
  23613. }
  23614. /**
  23615. * Creates a function that invokes `iteratees` with the arguments it receives
  23616. * and returns their results.
  23617. *
  23618. * @static
  23619. * @memberOf _
  23620. * @since 4.0.0
  23621. * @category Util
  23622. * @param {...(Function|Function[])} [iteratees=[_.identity]]
  23623. * The iteratees to invoke.
  23624. * @returns {Function} Returns the new function.
  23625. * @example
  23626. *
  23627. * var func = _.over([Math.max, Math.min]);
  23628. *
  23629. * func(1, 2, 3, 4);
  23630. * // => [4, 1]
  23631. */
  23632. var over = createOver(arrayMap);
  23633. /**
  23634. * Creates a function that checks if **all** of the `predicates` return
  23635. * truthy when invoked with the arguments it receives.
  23636. *
  23637. * @static
  23638. * @memberOf _
  23639. * @since 4.0.0
  23640. * @category Util
  23641. * @param {...(Function|Function[])} [predicates=[_.identity]]
  23642. * The predicates to check.
  23643. * @returns {Function} Returns the new function.
  23644. * @example
  23645. *
  23646. * var func = _.overEvery([Boolean, isFinite]);
  23647. *
  23648. * func('1');
  23649. * // => true
  23650. *
  23651. * func(null);
  23652. * // => false
  23653. *
  23654. * func(NaN);
  23655. * // => false
  23656. */
  23657. var overEvery = createOver(arrayEvery);
  23658. /**
  23659. * Creates a function that checks if **any** of the `predicates` return
  23660. * truthy when invoked with the arguments it receives.
  23661. *
  23662. * @static
  23663. * @memberOf _
  23664. * @since 4.0.0
  23665. * @category Util
  23666. * @param {...(Function|Function[])} [predicates=[_.identity]]
  23667. * The predicates to check.
  23668. * @returns {Function} Returns the new function.
  23669. * @example
  23670. *
  23671. * var func = _.overSome([Boolean, isFinite]);
  23672. *
  23673. * func('1');
  23674. * // => true
  23675. *
  23676. * func(null);
  23677. * // => true
  23678. *
  23679. * func(NaN);
  23680. * // => false
  23681. */
  23682. var overSome = createOver(arraySome);
  23683. /**
  23684. * Creates a function that returns the value at `path` of a given object.
  23685. *
  23686. * @static
  23687. * @memberOf _
  23688. * @since 2.4.0
  23689. * @category Util
  23690. * @param {Array|string} path The path of the property to get.
  23691. * @returns {Function} Returns the new accessor function.
  23692. * @example
  23693. *
  23694. * var objects = [
  23695. * { 'a': { 'b': 2 } },
  23696. * { 'a': { 'b': 1 } }
  23697. * ];
  23698. *
  23699. * _.map(objects, _.property('a.b'));
  23700. * // => [2, 1]
  23701. *
  23702. * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');
  23703. * // => [1, 2]
  23704. */
  23705. function property(path) {
  23706. return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
  23707. }
  23708. /**
  23709. * The opposite of `_.property`; this method creates a function that returns
  23710. * the value at a given path of `object`.
  23711. *
  23712. * @static
  23713. * @memberOf _
  23714. * @since 3.0.0
  23715. * @category Util
  23716. * @param {Object} object The object to query.
  23717. * @returns {Function} Returns the new accessor function.
  23718. * @example
  23719. *
  23720. * var array = [0, 1, 2],
  23721. * object = { 'a': array, 'b': array, 'c': array };
  23722. *
  23723. * _.map(['a[2]', 'c[0]'], _.propertyOf(object));
  23724. * // => [2, 0]
  23725. *
  23726. * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));
  23727. * // => [2, 0]
  23728. */
  23729. function propertyOf(object) {
  23730. return function(path) {
  23731. return object == null ? undefined : baseGet(object, path);
  23732. };
  23733. }
  23734. /**
  23735. * Creates an array of numbers (positive and/or negative) progressing from
  23736. * `start` up to, but not including, `end`. A step of `-1` is used if a negative
  23737. * `start` is specified without an `end` or `step`. If `end` is not specified,
  23738. * it's set to `start` with `start` then set to `0`.
  23739. *
  23740. * **Note:** JavaScript follows the IEEE-754 standard for resolving
  23741. * floating-point values which can produce unexpected results.
  23742. *
  23743. * @static
  23744. * @since 0.1.0
  23745. * @memberOf _
  23746. * @category Util
  23747. * @param {number} [start=0] The start of the range.
  23748. * @param {number} end The end of the range.
  23749. * @param {number} [step=1] The value to increment or decrement by.
  23750. * @returns {Array} Returns the range of numbers.
  23751. * @see _.inRange, _.rangeRight
  23752. * @example
  23753. *
  23754. * _.range(4);
  23755. * // => [0, 1, 2, 3]
  23756. *
  23757. * _.range(-4);
  23758. * // => [0, -1, -2, -3]
  23759. *
  23760. * _.range(1, 5);
  23761. * // => [1, 2, 3, 4]
  23762. *
  23763. * _.range(0, 20, 5);
  23764. * // => [0, 5, 10, 15]
  23765. *
  23766. * _.range(0, -4, -1);
  23767. * // => [0, -1, -2, -3]
  23768. *
  23769. * _.range(1, 4, 0);
  23770. * // => [1, 1, 1]
  23771. *
  23772. * _.range(0);
  23773. * // => []
  23774. */
  23775. var range = createRange();
  23776. /**
  23777. * This method is like `_.range` except that it populates values in
  23778. * descending order.
  23779. *
  23780. * @static
  23781. * @memberOf _
  23782. * @since 4.0.0
  23783. * @category Util
  23784. * @param {number} [start=0] The start of the range.
  23785. * @param {number} end The end of the range.
  23786. * @param {number} [step=1] The value to increment or decrement by.
  23787. * @returns {Array} Returns the range of numbers.
  23788. * @see _.inRange, _.range
  23789. * @example
  23790. *
  23791. * _.rangeRight(4);
  23792. * // => [3, 2, 1, 0]
  23793. *
  23794. * _.rangeRight(-4);
  23795. * // => [-3, -2, -1, 0]
  23796. *
  23797. * _.rangeRight(1, 5);
  23798. * // => [4, 3, 2, 1]
  23799. *
  23800. * _.rangeRight(0, 20, 5);
  23801. * // => [15, 10, 5, 0]
  23802. *
  23803. * _.rangeRight(0, -4, -1);
  23804. * // => [-3, -2, -1, 0]
  23805. *
  23806. * _.rangeRight(1, 4, 0);
  23807. * // => [1, 1, 1]
  23808. *
  23809. * _.rangeRight(0);
  23810. * // => []
  23811. */
  23812. var rangeRight = createRange(true);
  23813. /**
  23814. * This method returns a new empty array.
  23815. *
  23816. * @static
  23817. * @memberOf _
  23818. * @since 4.13.0
  23819. * @category Util
  23820. * @returns {Array} Returns the new empty array.
  23821. * @example
  23822. *
  23823. * var arrays = _.times(2, _.stubArray);
  23824. *
  23825. * console.log(arrays);
  23826. * // => [[], []]
  23827. *
  23828. * console.log(arrays[0] === arrays[1]);
  23829. * // => false
  23830. */
  23831. function stubArray() {
  23832. return [];
  23833. }
  23834. /**
  23835. * This method returns `false`.
  23836. *
  23837. * @static
  23838. * @memberOf _
  23839. * @since 4.13.0
  23840. * @category Util
  23841. * @returns {boolean} Returns `false`.
  23842. * @example
  23843. *
  23844. * _.times(2, _.stubFalse);
  23845. * // => [false, false]
  23846. */
  23847. function stubFalse() {
  23848. return false;
  23849. }
  23850. /**
  23851. * This method returns a new empty object.
  23852. *
  23853. * @static
  23854. * @memberOf _
  23855. * @since 4.13.0
  23856. * @category Util
  23857. * @returns {Object} Returns the new empty object.
  23858. * @example
  23859. *
  23860. * var objects = _.times(2, _.stubObject);
  23861. *
  23862. * console.log(objects);
  23863. * // => [{}, {}]
  23864. *
  23865. * console.log(objects[0] === objects[1]);
  23866. * // => false
  23867. */
  23868. function stubObject() {
  23869. return {};
  23870. }
  23871. /**
  23872. * This method returns an empty string.
  23873. *
  23874. * @static
  23875. * @memberOf _
  23876. * @since 4.13.0
  23877. * @category Util
  23878. * @returns {string} Returns the empty string.
  23879. * @example
  23880. *
  23881. * _.times(2, _.stubString);
  23882. * // => ['', '']
  23883. */
  23884. function stubString() {
  23885. return '';
  23886. }
  23887. /**
  23888. * This method returns `true`.
  23889. *
  23890. * @static
  23891. * @memberOf _
  23892. * @since 4.13.0
  23893. * @category Util
  23894. * @returns {boolean} Returns `true`.
  23895. * @example
  23896. *
  23897. * _.times(2, _.stubTrue);
  23898. * // => [true, true]
  23899. */
  23900. function stubTrue() {
  23901. return true;
  23902. }
  23903. /**
  23904. * Invokes the iteratee `n` times, returning an array of the results of
  23905. * each invocation. The iteratee is invoked with one argument; (index).
  23906. *
  23907. * @static
  23908. * @since 0.1.0
  23909. * @memberOf _
  23910. * @category Util
  23911. * @param {number} n The number of times to invoke `iteratee`.
  23912. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  23913. * @returns {Array} Returns the array of results.
  23914. * @example
  23915. *
  23916. * _.times(3, String);
  23917. * // => ['0', '1', '2']
  23918. *
  23919. * _.times(4, _.constant(0));
  23920. * // => [0, 0, 0, 0]
  23921. */
  23922. function times(n, iteratee) {
  23923. n = toInteger(n);
  23924. if (n < 1 || n > MAX_SAFE_INTEGER) {
  23925. return [];
  23926. }
  23927. var index = MAX_ARRAY_LENGTH,
  23928. length = nativeMin(n, MAX_ARRAY_LENGTH);
  23929. iteratee = getIteratee(iteratee);
  23930. n -= MAX_ARRAY_LENGTH;
  23931. var result = baseTimes(length, iteratee);
  23932. while (++index < n) {
  23933. iteratee(index);
  23934. }
  23935. return result;
  23936. }
  23937. /**
  23938. * Converts `value` to a property path array.
  23939. *
  23940. * @static
  23941. * @memberOf _
  23942. * @since 4.0.0
  23943. * @category Util
  23944. * @param {*} value The value to convert.
  23945. * @returns {Array} Returns the new property path array.
  23946. * @example
  23947. *
  23948. * _.toPath('a.b.c');
  23949. * // => ['a', 'b', 'c']
  23950. *
  23951. * _.toPath('a[0].b.c');
  23952. * // => ['a', '0', 'b', 'c']
  23953. */
  23954. function toPath(value) {
  23955. if (isArray(value)) {
  23956. return arrayMap(value, toKey);
  23957. }
  23958. return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));
  23959. }
  23960. /**
  23961. * Generates a unique ID. If `prefix` is given, the ID is appended to it.
  23962. *
  23963. * @static
  23964. * @since 0.1.0
  23965. * @memberOf _
  23966. * @category Util
  23967. * @param {string} [prefix=''] The value to prefix the ID with.
  23968. * @returns {string} Returns the unique ID.
  23969. * @example
  23970. *
  23971. * _.uniqueId('contact_');
  23972. * // => 'contact_104'
  23973. *
  23974. * _.uniqueId();
  23975. * // => '105'
  23976. */
  23977. function uniqueId(prefix) {
  23978. var id = ++idCounter;
  23979. return toString(prefix) + id;
  23980. }
  23981. /*------------------------------------------------------------------------*/
  23982. /**
  23983. * Adds two numbers.
  23984. *
  23985. * @static
  23986. * @memberOf _
  23987. * @since 3.4.0
  23988. * @category Math
  23989. * @param {number} augend The first number in an addition.
  23990. * @param {number} addend The second number in an addition.
  23991. * @returns {number} Returns the total.
  23992. * @example
  23993. *
  23994. * _.add(6, 4);
  23995. * // => 10
  23996. */
  23997. var add = createMathOperation(function(augend, addend) {
  23998. return augend + addend;
  23999. }, 0);
  24000. /**
  24001. * Computes `number` rounded up to `precision`.
  24002. *
  24003. * @static
  24004. * @memberOf _
  24005. * @since 3.10.0
  24006. * @category Math
  24007. * @param {number} number The number to round up.
  24008. * @param {number} [precision=0] The precision to round up to.
  24009. * @returns {number} Returns the rounded up number.
  24010. * @example
  24011. *
  24012. * _.ceil(4.006);
  24013. * // => 5
  24014. *
  24015. * _.ceil(6.004, 2);
  24016. * // => 6.01
  24017. *
  24018. * _.ceil(6040, -2);
  24019. * // => 6100
  24020. */
  24021. var ceil = createRound('ceil');
  24022. /**
  24023. * Divide two numbers.
  24024. *
  24025. * @static
  24026. * @memberOf _
  24027. * @since 4.7.0
  24028. * @category Math
  24029. * @param {number} dividend The first number in a division.
  24030. * @param {number} divisor The second number in a division.
  24031. * @returns {number} Returns the quotient.
  24032. * @example
  24033. *
  24034. * _.divide(6, 4);
  24035. * // => 1.5
  24036. */
  24037. var divide = createMathOperation(function(dividend, divisor) {
  24038. return dividend / divisor;
  24039. }, 1);
  24040. /**
  24041. * Computes `number` rounded down to `precision`.
  24042. *
  24043. * @static
  24044. * @memberOf _
  24045. * @since 3.10.0
  24046. * @category Math
  24047. * @param {number} number The number to round down.
  24048. * @param {number} [precision=0] The precision to round down to.
  24049. * @returns {number} Returns the rounded down number.
  24050. * @example
  24051. *
  24052. * _.floor(4.006);
  24053. * // => 4
  24054. *
  24055. * _.floor(0.046, 2);
  24056. * // => 0.04
  24057. *
  24058. * _.floor(4060, -2);
  24059. * // => 4000
  24060. */
  24061. var floor = createRound('floor');
  24062. /**
  24063. * Computes the maximum value of `array`. If `array` is empty or falsey,
  24064. * `undefined` is returned.
  24065. *
  24066. * @static
  24067. * @since 0.1.0
  24068. * @memberOf _
  24069. * @category Math
  24070. * @param {Array} array The array to iterate over.
  24071. * @returns {*} Returns the maximum value.
  24072. * @example
  24073. *
  24074. * _.max([4, 2, 8, 6]);
  24075. * // => 8
  24076. *
  24077. * _.max([]);
  24078. * // => undefined
  24079. */
  24080. function max(array) {
  24081. return (array && array.length)
  24082. ? baseExtremum(array, identity, baseGt)
  24083. : undefined;
  24084. }
  24085. /**
  24086. * This method is like `_.max` except that it accepts `iteratee` which is
  24087. * invoked for each element in `array` to generate the criterion by which
  24088. * the value is ranked. The iteratee is invoked with one argument: (value).
  24089. *
  24090. * @static
  24091. * @memberOf _
  24092. * @since 4.0.0
  24093. * @category Math
  24094. * @param {Array} array The array to iterate over.
  24095. * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
  24096. * @returns {*} Returns the maximum value.
  24097. * @example
  24098. *
  24099. * var objects = [{ 'n': 1 }, { 'n': 2 }];
  24100. *
  24101. * _.maxBy(objects, function(o) { return o.n; });
  24102. * // => { 'n': 2 }
  24103. *
  24104. * // The `_.property` iteratee shorthand.
  24105. * _.maxBy(objects, 'n');
  24106. * // => { 'n': 2 }
  24107. */
  24108. function maxBy(array, iteratee) {
  24109. return (array && array.length)
  24110. ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)
  24111. : undefined;
  24112. }
  24113. /**
  24114. * Computes the mean of the values in `array`.
  24115. *
  24116. * @static
  24117. * @memberOf _
  24118. * @since 4.0.0
  24119. * @category Math
  24120. * @param {Array} array The array to iterate over.
  24121. * @returns {number} Returns the mean.
  24122. * @example
  24123. *
  24124. * _.mean([4, 2, 8, 6]);
  24125. * // => 5
  24126. */
  24127. function mean(array) {
  24128. return baseMean(array, identity);
  24129. }
  24130. /**
  24131. * This method is like `_.mean` except that it accepts `iteratee` which is
  24132. * invoked for each element in `array` to generate the value to be averaged.
  24133. * The iteratee is invoked with one argument: (value).
  24134. *
  24135. * @static
  24136. * @memberOf _
  24137. * @since 4.7.0
  24138. * @category Math
  24139. * @param {Array} array The array to iterate over.
  24140. * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
  24141. * @returns {number} Returns the mean.
  24142. * @example
  24143. *
  24144. * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
  24145. *
  24146. * _.meanBy(objects, function(o) { return o.n; });
  24147. * // => 5
  24148. *
  24149. * // The `_.property` iteratee shorthand.
  24150. * _.meanBy(objects, 'n');
  24151. * // => 5
  24152. */
  24153. function meanBy(array, iteratee) {
  24154. return baseMean(array, getIteratee(iteratee, 2));
  24155. }
  24156. /**
  24157. * Computes the minimum value of `array`. If `array` is empty or falsey,
  24158. * `undefined` is returned.
  24159. *
  24160. * @static
  24161. * @since 0.1.0
  24162. * @memberOf _
  24163. * @category Math
  24164. * @param {Array} array The array to iterate over.
  24165. * @returns {*} Returns the minimum value.
  24166. * @example
  24167. *
  24168. * _.min([4, 2, 8, 6]);
  24169. * // => 2
  24170. *
  24171. * _.min([]);
  24172. * // => undefined
  24173. */
  24174. function min(array) {
  24175. return (array && array.length)
  24176. ? baseExtremum(array, identity, baseLt)
  24177. : undefined;
  24178. }
  24179. /**
  24180. * This method is like `_.min` except that it accepts `iteratee` which is
  24181. * invoked for each element in `array` to generate the criterion by which
  24182. * the value is ranked. The iteratee is invoked with one argument: (value).
  24183. *
  24184. * @static
  24185. * @memberOf _
  24186. * @since 4.0.0
  24187. * @category Math
  24188. * @param {Array} array The array to iterate over.
  24189. * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
  24190. * @returns {*} Returns the minimum value.
  24191. * @example
  24192. *
  24193. * var objects = [{ 'n': 1 }, { 'n': 2 }];
  24194. *
  24195. * _.minBy(objects, function(o) { return o.n; });
  24196. * // => { 'n': 1 }
  24197. *
  24198. * // The `_.property` iteratee shorthand.
  24199. * _.minBy(objects, 'n');
  24200. * // => { 'n': 1 }
  24201. */
  24202. function minBy(array, iteratee) {
  24203. return (array && array.length)
  24204. ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)
  24205. : undefined;
  24206. }
  24207. /**
  24208. * Multiply two numbers.
  24209. *
  24210. * @static
  24211. * @memberOf _
  24212. * @since 4.7.0
  24213. * @category Math
  24214. * @param {number} multiplier The first number in a multiplication.
  24215. * @param {number} multiplicand The second number in a multiplication.
  24216. * @returns {number} Returns the product.
  24217. * @example
  24218. *
  24219. * _.multiply(6, 4);
  24220. * // => 24
  24221. */
  24222. var multiply = createMathOperation(function(multiplier, multiplicand) {
  24223. return multiplier * multiplicand;
  24224. }, 1);
  24225. /**
  24226. * Computes `number` rounded to `precision`.
  24227. *
  24228. * @static
  24229. * @memberOf _
  24230. * @since 3.10.0
  24231. * @category Math
  24232. * @param {number} number The number to round.
  24233. * @param {number} [precision=0] The precision to round to.
  24234. * @returns {number} Returns the rounded number.
  24235. * @example
  24236. *
  24237. * _.round(4.006);
  24238. * // => 4
  24239. *
  24240. * _.round(4.006, 2);
  24241. * // => 4.01
  24242. *
  24243. * _.round(4060, -2);
  24244. * // => 4100
  24245. */
  24246. var round = createRound('round');
  24247. /**
  24248. * Subtract two numbers.
  24249. *
  24250. * @static
  24251. * @memberOf _
  24252. * @since 4.0.0
  24253. * @category Math
  24254. * @param {number} minuend The first number in a subtraction.
  24255. * @param {number} subtrahend The second number in a subtraction.
  24256. * @returns {number} Returns the difference.
  24257. * @example
  24258. *
  24259. * _.subtract(6, 4);
  24260. * // => 2
  24261. */
  24262. var subtract = createMathOperation(function(minuend, subtrahend) {
  24263. return minuend - subtrahend;
  24264. }, 0);
  24265. /**
  24266. * Computes the sum of the values in `array`.
  24267. *
  24268. * @static
  24269. * @memberOf _
  24270. * @since 3.4.0
  24271. * @category Math
  24272. * @param {Array} array The array to iterate over.
  24273. * @returns {number} Returns the sum.
  24274. * @example
  24275. *
  24276. * _.sum([4, 2, 8, 6]);
  24277. * // => 20
  24278. */
  24279. function sum(array) {
  24280. return (array && array.length)
  24281. ? baseSum(array, identity)
  24282. : 0;
  24283. }
  24284. /**
  24285. * This method is like `_.sum` except that it accepts `iteratee` which is
  24286. * invoked for each element in `array` to generate the value to be summed.
  24287. * The iteratee is invoked with one argument: (value).
  24288. *
  24289. * @static
  24290. * @memberOf _
  24291. * @since 4.0.0
  24292. * @category Math
  24293. * @param {Array} array The array to iterate over.
  24294. * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
  24295. * @returns {number} Returns the sum.
  24296. * @example
  24297. *
  24298. * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
  24299. *
  24300. * _.sumBy(objects, function(o) { return o.n; });
  24301. * // => 20
  24302. *
  24303. * // The `_.property` iteratee shorthand.
  24304. * _.sumBy(objects, 'n');
  24305. * // => 20
  24306. */
  24307. function sumBy(array, iteratee) {
  24308. return (array && array.length)
  24309. ? baseSum(array, getIteratee(iteratee, 2))
  24310. : 0;
  24311. }
  24312. /*------------------------------------------------------------------------*/
  24313. // Add methods that return wrapped values in chain sequences.
  24314. lodash.after = after;
  24315. lodash.ary = ary;
  24316. lodash.assign = assign;
  24317. lodash.assignIn = assignIn;
  24318. lodash.assignInWith = assignInWith;
  24319. lodash.assignWith = assignWith;
  24320. lodash.at = at;
  24321. lodash.before = before;
  24322. lodash.bind = bind;
  24323. lodash.bindAll = bindAll;
  24324. lodash.bindKey = bindKey;
  24325. lodash.castArray = castArray;
  24326. lodash.chain = chain;
  24327. lodash.chunk = chunk;
  24328. lodash.compact = compact;
  24329. lodash.concat = concat;
  24330. lodash.cond = cond;
  24331. lodash.conforms = conforms;
  24332. lodash.constant = constant;
  24333. lodash.countBy = countBy;
  24334. lodash.create = create;
  24335. lodash.curry = curry;
  24336. lodash.curryRight = curryRight;
  24337. lodash.debounce = debounce;
  24338. lodash.defaults = defaults;
  24339. lodash.defaultsDeep = defaultsDeep;
  24340. lodash.defer = defer;
  24341. lodash.delay = delay;
  24342. lodash.difference = difference;
  24343. lodash.differenceBy = differenceBy;
  24344. lodash.differenceWith = differenceWith;
  24345. lodash.drop = drop;
  24346. lodash.dropRight = dropRight;
  24347. lodash.dropRightWhile = dropRightWhile;
  24348. lodash.dropWhile = dropWhile;
  24349. lodash.fill = fill;
  24350. lodash.filter = filter;
  24351. lodash.flatMap = flatMap;
  24352. lodash.flatMapDeep = flatMapDeep;
  24353. lodash.flatMapDepth = flatMapDepth;
  24354. lodash.flatten = flatten;
  24355. lodash.flattenDeep = flattenDeep;
  24356. lodash.flattenDepth = flattenDepth;
  24357. lodash.flip = flip;
  24358. lodash.flow = flow;
  24359. lodash.flowRight = flowRight;
  24360. lodash.fromPairs = fromPairs;
  24361. lodash.functions = functions;
  24362. lodash.functionsIn = functionsIn;
  24363. lodash.groupBy = groupBy;
  24364. lodash.initial = initial;
  24365. lodash.intersection = intersection;
  24366. lodash.intersectionBy = intersectionBy;
  24367. lodash.intersectionWith = intersectionWith;
  24368. lodash.invert = invert;
  24369. lodash.invertBy = invertBy;
  24370. lodash.invokeMap = invokeMap;
  24371. lodash.iteratee = iteratee;
  24372. lodash.keyBy = keyBy;
  24373. lodash.keys = keys;
  24374. lodash.keysIn = keysIn;
  24375. lodash.map = map;
  24376. lodash.mapKeys = mapKeys;
  24377. lodash.mapValues = mapValues;
  24378. lodash.matches = matches;
  24379. lodash.matchesProperty = matchesProperty;
  24380. lodash.memoize = memoize;
  24381. lodash.merge = merge;
  24382. lodash.mergeWith = mergeWith;
  24383. lodash.method = method;
  24384. lodash.methodOf = methodOf;
  24385. lodash.mixin = mixin;
  24386. lodash.negate = negate;
  24387. lodash.nthArg = nthArg;
  24388. lodash.omit = omit;
  24389. lodash.omitBy = omitBy;
  24390. lodash.once = once;
  24391. lodash.orderBy = orderBy;
  24392. lodash.over = over;
  24393. lodash.overArgs = overArgs;
  24394. lodash.overEvery = overEvery;
  24395. lodash.overSome = overSome;
  24396. lodash.partial = partial;
  24397. lodash.partialRight = partialRight;
  24398. lodash.partition = partition;
  24399. lodash.pick = pick;
  24400. lodash.pickBy = pickBy;
  24401. lodash.property = property;
  24402. lodash.propertyOf = propertyOf;
  24403. lodash.pull = pull;
  24404. lodash.pullAll = pullAll;
  24405. lodash.pullAllBy = pullAllBy;
  24406. lodash.pullAllWith = pullAllWith;
  24407. lodash.pullAt = pullAt;
  24408. lodash.range = range;
  24409. lodash.rangeRight = rangeRight;
  24410. lodash.rearg = rearg;
  24411. lodash.reject = reject;
  24412. lodash.remove = remove;
  24413. lodash.rest = rest;
  24414. lodash.reverse = reverse;
  24415. lodash.sampleSize = sampleSize;
  24416. lodash.set = set;
  24417. lodash.setWith = setWith;
  24418. lodash.shuffle = shuffle;
  24419. lodash.slice = slice;
  24420. lodash.sortBy = sortBy;
  24421. lodash.sortedUniq = sortedUniq;
  24422. lodash.sortedUniqBy = sortedUniqBy;
  24423. lodash.split = split;
  24424. lodash.spread = spread;
  24425. lodash.tail = tail;
  24426. lodash.take = take;
  24427. lodash.takeRight = takeRight;
  24428. lodash.takeRightWhile = takeRightWhile;
  24429. lodash.takeWhile = takeWhile;
  24430. lodash.tap = tap;
  24431. lodash.throttle = throttle;
  24432. lodash.thru = thru;
  24433. lodash.toArray = toArray;
  24434. lodash.toPairs = toPairs;
  24435. lodash.toPairsIn = toPairsIn;
  24436. lodash.toPath = toPath;
  24437. lodash.toPlainObject = toPlainObject;
  24438. lodash.transform = transform;
  24439. lodash.unary = unary;
  24440. lodash.union = union;
  24441. lodash.unionBy = unionBy;
  24442. lodash.unionWith = unionWith;
  24443. lodash.uniq = uniq;
  24444. lodash.uniqBy = uniqBy;
  24445. lodash.uniqWith = uniqWith;
  24446. lodash.unset = unset;
  24447. lodash.unzip = unzip;
  24448. lodash.unzipWith = unzipWith;
  24449. lodash.update = update;
  24450. lodash.updateWith = updateWith;
  24451. lodash.values = values;
  24452. lodash.valuesIn = valuesIn;
  24453. lodash.without = without;
  24454. lodash.words = words;
  24455. lodash.wrap = wrap;
  24456. lodash.xor = xor;
  24457. lodash.xorBy = xorBy;
  24458. lodash.xorWith = xorWith;
  24459. lodash.zip = zip;
  24460. lodash.zipObject = zipObject;
  24461. lodash.zipObjectDeep = zipObjectDeep;
  24462. lodash.zipWith = zipWith;
  24463. // Add aliases.
  24464. lodash.entries = toPairs;
  24465. lodash.entriesIn = toPairsIn;
  24466. lodash.extend = assignIn;
  24467. lodash.extendWith = assignInWith;
  24468. // Add methods to `lodash.prototype`.
  24469. mixin(lodash, lodash);
  24470. /*------------------------------------------------------------------------*/
  24471. // Add methods that return unwrapped values in chain sequences.
  24472. lodash.add = add;
  24473. lodash.attempt = attempt;
  24474. lodash.camelCase = camelCase;
  24475. lodash.capitalize = capitalize;
  24476. lodash.ceil = ceil;
  24477. lodash.clamp = clamp;
  24478. lodash.clone = clone;
  24479. lodash.cloneDeep = cloneDeep;
  24480. lodash.cloneDeepWith = cloneDeepWith;
  24481. lodash.cloneWith = cloneWith;
  24482. lodash.conformsTo = conformsTo;
  24483. lodash.deburr = deburr;
  24484. lodash.defaultTo = defaultTo;
  24485. lodash.divide = divide;
  24486. lodash.endsWith = endsWith;
  24487. lodash.eq = eq;
  24488. lodash.escape = escape;
  24489. lodash.escapeRegExp = escapeRegExp;
  24490. lodash.every = every;
  24491. lodash.find = find;
  24492. lodash.findIndex = findIndex;
  24493. lodash.findKey = findKey;
  24494. lodash.findLast = findLast;
  24495. lodash.findLastIndex = findLastIndex;
  24496. lodash.findLastKey = findLastKey;
  24497. lodash.floor = floor;
  24498. lodash.forEach = forEach;
  24499. lodash.forEachRight = forEachRight;
  24500. lodash.forIn = forIn;
  24501. lodash.forInRight = forInRight;
  24502. lodash.forOwn = forOwn;
  24503. lodash.forOwnRight = forOwnRight;
  24504. lodash.get = get;
  24505. lodash.gt = gt;
  24506. lodash.gte = gte;
  24507. lodash.has = has;
  24508. lodash.hasIn = hasIn;
  24509. lodash.head = head;
  24510. lodash.identity = identity;
  24511. lodash.includes = includes;
  24512. lodash.indexOf = indexOf;
  24513. lodash.inRange = inRange;
  24514. lodash.invoke = invoke;
  24515. lodash.isArguments = isArguments;
  24516. lodash.isArray = isArray;
  24517. lodash.isArrayBuffer = isArrayBuffer;
  24518. lodash.isArrayLike = isArrayLike;
  24519. lodash.isArrayLikeObject = isArrayLikeObject;
  24520. lodash.isBoolean = isBoolean;
  24521. lodash.isBuffer = isBuffer;
  24522. lodash.isDate = isDate;
  24523. lodash.isElement = isElement;
  24524. lodash.isEmpty = isEmpty;
  24525. lodash.isEqual = isEqual;
  24526. lodash.isEqualWith = isEqualWith;
  24527. lodash.isError = isError;
  24528. lodash.isFinite = isFinite;
  24529. lodash.isFunction = isFunction;
  24530. lodash.isInteger = isInteger;
  24531. lodash.isLength = isLength;
  24532. lodash.isMap = isMap;
  24533. lodash.isMatch = isMatch;
  24534. lodash.isMatchWith = isMatchWith;
  24535. lodash.isNaN = isNaN;
  24536. lodash.isNative = isNative;
  24537. lodash.isNil = isNil;
  24538. lodash.isNull = isNull;
  24539. lodash.isNumber = isNumber;
  24540. lodash.isObject = isObject;
  24541. lodash.isObjectLike = isObjectLike;
  24542. lodash.isPlainObject = isPlainObject;
  24543. lodash.isRegExp = isRegExp;
  24544. lodash.isSafeInteger = isSafeInteger;
  24545. lodash.isSet = isSet;
  24546. lodash.isString = isString;
  24547. lodash.isSymbol = isSymbol;
  24548. lodash.isTypedArray = isTypedArray;
  24549. lodash.isUndefined = isUndefined;
  24550. lodash.isWeakMap = isWeakMap;
  24551. lodash.isWeakSet = isWeakSet;
  24552. lodash.join = join;
  24553. lodash.kebabCase = kebabCase;
  24554. lodash.last = last;
  24555. lodash.lastIndexOf = lastIndexOf;
  24556. lodash.lowerCase = lowerCase;
  24557. lodash.lowerFirst = lowerFirst;
  24558. lodash.lt = lt;
  24559. lodash.lte = lte;
  24560. lodash.max = max;
  24561. lodash.maxBy = maxBy;
  24562. lodash.mean = mean;
  24563. lodash.meanBy = meanBy;
  24564. lodash.min = min;
  24565. lodash.minBy = minBy;
  24566. lodash.stubArray = stubArray;
  24567. lodash.stubFalse = stubFalse;
  24568. lodash.stubObject = stubObject;
  24569. lodash.stubString = stubString;
  24570. lodash.stubTrue = stubTrue;
  24571. lodash.multiply = multiply;
  24572. lodash.nth = nth;
  24573. lodash.noConflict = noConflict;
  24574. lodash.noop = noop;
  24575. lodash.now = now;
  24576. lodash.pad = pad;
  24577. lodash.padEnd = padEnd;
  24578. lodash.padStart = padStart;
  24579. lodash.parseInt = parseInt;
  24580. lodash.random = random;
  24581. lodash.reduce = reduce;
  24582. lodash.reduceRight = reduceRight;
  24583. lodash.repeat = repeat;
  24584. lodash.replace = replace;
  24585. lodash.result = result;
  24586. lodash.round = round;
  24587. lodash.runInContext = runInContext;
  24588. lodash.sample = sample;
  24589. lodash.size = size;
  24590. lodash.snakeCase = snakeCase;
  24591. lodash.some = some;
  24592. lodash.sortedIndex = sortedIndex;
  24593. lodash.sortedIndexBy = sortedIndexBy;
  24594. lodash.sortedIndexOf = sortedIndexOf;
  24595. lodash.sortedLastIndex = sortedLastIndex;
  24596. lodash.sortedLastIndexBy = sortedLastIndexBy;
  24597. lodash.sortedLastIndexOf = sortedLastIndexOf;
  24598. lodash.startCase = startCase;
  24599. lodash.startsWith = startsWith;
  24600. lodash.subtract = subtract;
  24601. lodash.sum = sum;
  24602. lodash.sumBy = sumBy;
  24603. lodash.template = template;
  24604. lodash.times = times;
  24605. lodash.toFinite = toFinite;
  24606. lodash.toInteger = toInteger;
  24607. lodash.toLength = toLength;
  24608. lodash.toLower = toLower;
  24609. lodash.toNumber = toNumber;
  24610. lodash.toSafeInteger = toSafeInteger;
  24611. lodash.toString = toString;
  24612. lodash.toUpper = toUpper;
  24613. lodash.trim = trim;
  24614. lodash.trimEnd = trimEnd;
  24615. lodash.trimStart = trimStart;
  24616. lodash.truncate = truncate;
  24617. lodash.unescape = unescape;
  24618. lodash.uniqueId = uniqueId;
  24619. lodash.upperCase = upperCase;
  24620. lodash.upperFirst = upperFirst;
  24621. // Add aliases.
  24622. lodash.each = forEach;
  24623. lodash.eachRight = forEachRight;
  24624. lodash.first = head;
  24625. mixin(lodash, (function() {
  24626. var source = {};
  24627. baseForOwn(lodash, function(func, methodName) {
  24628. if (!hasOwnProperty.call(lodash.prototype, methodName)) {
  24629. source[methodName] = func;
  24630. }
  24631. });
  24632. return source;
  24633. }()), { 'chain': false });
  24634. /*------------------------------------------------------------------------*/
  24635. /**
  24636. * The semantic version number.
  24637. *
  24638. * @static
  24639. * @memberOf _
  24640. * @type {string}
  24641. */
  24642. lodash.VERSION = VERSION;
  24643. // Assign default placeholders.
  24644. arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {
  24645. lodash[methodName].placeholder = lodash;
  24646. });
  24647. // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.
  24648. arrayEach(['drop', 'take'], function(methodName, index) {
  24649. LazyWrapper.prototype[methodName] = function(n) {
  24650. n = n === undefined ? 1 : nativeMax(toInteger(n), 0);
  24651. var result = (this.__filtered__ && !index)
  24652. ? new LazyWrapper(this)
  24653. : this.clone();
  24654. if (result.__filtered__) {
  24655. result.__takeCount__ = nativeMin(n, result.__takeCount__);
  24656. } else {
  24657. result.__views__.push({
  24658. 'size': nativeMin(n, MAX_ARRAY_LENGTH),
  24659. 'type': methodName + (result.__dir__ < 0 ? 'Right' : '')
  24660. });
  24661. }
  24662. return result;
  24663. };
  24664. LazyWrapper.prototype[methodName + 'Right'] = function(n) {
  24665. return this.reverse()[methodName](n).reverse();
  24666. };
  24667. });
  24668. // Add `LazyWrapper` methods that accept an `iteratee` value.
  24669. arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {
  24670. var type = index + 1,
  24671. isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;
  24672. LazyWrapper.prototype[methodName] = function(iteratee) {
  24673. var result = this.clone();
  24674. result.__iteratees__.push({
  24675. 'iteratee': getIteratee(iteratee, 3),
  24676. 'type': type
  24677. });
  24678. result.__filtered__ = result.__filtered__ || isFilter;
  24679. return result;
  24680. };
  24681. });
  24682. // Add `LazyWrapper` methods for `_.head` and `_.last`.
  24683. arrayEach(['head', 'last'], function(methodName, index) {
  24684. var takeName = 'take' + (index ? 'Right' : '');
  24685. LazyWrapper.prototype[methodName] = function() {
  24686. return this[takeName](1).value()[0];
  24687. };
  24688. });
  24689. // Add `LazyWrapper` methods for `_.initial` and `_.tail`.
  24690. arrayEach(['initial', 'tail'], function(methodName, index) {
  24691. var dropName = 'drop' + (index ? '' : 'Right');
  24692. LazyWrapper.prototype[methodName] = function() {
  24693. return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);
  24694. };
  24695. });
  24696. LazyWrapper.prototype.compact = function() {
  24697. return this.filter(identity);
  24698. };
  24699. LazyWrapper.prototype.find = function(predicate) {
  24700. return this.filter(predicate).head();
  24701. };
  24702. LazyWrapper.prototype.findLast = function(predicate) {
  24703. return this.reverse().find(predicate);
  24704. };
  24705. LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {
  24706. if (typeof path == 'function') {
  24707. return new LazyWrapper(this);
  24708. }
  24709. return this.map(function(value) {
  24710. return baseInvoke(value, path, args);
  24711. });
  24712. });
  24713. LazyWrapper.prototype.reject = function(predicate) {
  24714. return this.filter(negate(getIteratee(predicate)));
  24715. };
  24716. LazyWrapper.prototype.slice = function(start, end) {
  24717. start = toInteger(start);
  24718. var result = this;
  24719. if (result.__filtered__ && (start > 0 || end < 0)) {
  24720. return new LazyWrapper(result);
  24721. }
  24722. if (start < 0) {
  24723. result = result.takeRight(-start);
  24724. } else if (start) {
  24725. result = result.drop(start);
  24726. }
  24727. if (end !== undefined) {
  24728. end = toInteger(end);
  24729. result = end < 0 ? result.dropRight(-end) : result.take(end - start);
  24730. }
  24731. return result;
  24732. };
  24733. LazyWrapper.prototype.takeRightWhile = function(predicate) {
  24734. return this.reverse().takeWhile(predicate).reverse();
  24735. };
  24736. LazyWrapper.prototype.toArray = function() {
  24737. return this.take(MAX_ARRAY_LENGTH);
  24738. };
  24739. // Add `LazyWrapper` methods to `lodash.prototype`.
  24740. baseForOwn(LazyWrapper.prototype, function(func, methodName) {
  24741. var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),
  24742. isTaker = /^(?:head|last)$/.test(methodName),
  24743. lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],
  24744. retUnwrapped = isTaker || /^find/.test(methodName);
  24745. if (!lodashFunc) {
  24746. return;
  24747. }
  24748. lodash.prototype[methodName] = function() {
  24749. var value = this.__wrapped__,
  24750. args = isTaker ? [1] : arguments,
  24751. isLazy = value instanceof LazyWrapper,
  24752. iteratee = args[0],
  24753. useLazy = isLazy || isArray(value);
  24754. var interceptor = function(value) {
  24755. var result = lodashFunc.apply(lodash, arrayPush([value], args));
  24756. return (isTaker && chainAll) ? result[0] : result;
  24757. };
  24758. if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {
  24759. // Avoid lazy use if the iteratee has a "length" value other than `1`.
  24760. isLazy = useLazy = false;
  24761. }
  24762. var chainAll = this.__chain__,
  24763. isHybrid = !!this.__actions__.length,
  24764. isUnwrapped = retUnwrapped && !chainAll,
  24765. onlyLazy = isLazy && !isHybrid;
  24766. if (!retUnwrapped && useLazy) {
  24767. value = onlyLazy ? value : new LazyWrapper(this);
  24768. var result = func.apply(value, args);
  24769. result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });
  24770. return new LodashWrapper(result, chainAll);
  24771. }
  24772. if (isUnwrapped && onlyLazy) {
  24773. return func.apply(this, args);
  24774. }
  24775. result = this.thru(interceptor);
  24776. return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;
  24777. };
  24778. });
  24779. // Add `Array` methods to `lodash.prototype`.
  24780. arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {
  24781. var func = arrayProto[methodName],
  24782. chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',
  24783. retUnwrapped = /^(?:pop|shift)$/.test(methodName);
  24784. lodash.prototype[methodName] = function() {
  24785. var args = arguments;
  24786. if (retUnwrapped && !this.__chain__) {
  24787. var value = this.value();
  24788. return func.apply(isArray(value) ? value : [], args);
  24789. }
  24790. return this[chainName](function(value) {
  24791. return func.apply(isArray(value) ? value : [], args);
  24792. });
  24793. };
  24794. });
  24795. // Map minified method names to their real names.
  24796. baseForOwn(LazyWrapper.prototype, function(func, methodName) {
  24797. var lodashFunc = lodash[methodName];
  24798. if (lodashFunc) {
  24799. var key = (lodashFunc.name + ''),
  24800. names = realNames[key] || (realNames[key] = []);
  24801. names.push({ 'name': methodName, 'func': lodashFunc });
  24802. }
  24803. });
  24804. realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{
  24805. 'name': 'wrapper',
  24806. 'func': undefined
  24807. }];
  24808. // Add methods to `LazyWrapper`.
  24809. LazyWrapper.prototype.clone = lazyClone;
  24810. LazyWrapper.prototype.reverse = lazyReverse;
  24811. LazyWrapper.prototype.value = lazyValue;
  24812. // Add chain sequence methods to the `lodash` wrapper.
  24813. lodash.prototype.at = wrapperAt;
  24814. lodash.prototype.chain = wrapperChain;
  24815. lodash.prototype.commit = wrapperCommit;
  24816. lodash.prototype.next = wrapperNext;
  24817. lodash.prototype.plant = wrapperPlant;
  24818. lodash.prototype.reverse = wrapperReverse;
  24819. lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;
  24820. // Add lazy aliases.
  24821. lodash.prototype.first = lodash.prototype.head;
  24822. if (symIterator) {
  24823. lodash.prototype[symIterator] = wrapperToIterator;
  24824. }
  24825. return lodash;
  24826. });
  24827. /*--------------------------------------------------------------------------*/
  24828. // Export lodash.
  24829. var _ = runInContext();
  24830. // Some AMD build optimizers, like r.js, check for condition patterns like:
  24831. if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {
  24832. // Expose Lodash on the global object to prevent errors when Lodash is
  24833. // loaded by a script tag in the presence of an AMD loader.
  24834. // See http://requirejs.org/docs/errors.html#mismatch for more details.
  24835. // Use `_.noConflict` to remove Lodash from the global object.
  24836. root._ = _;
  24837. // Define as an anonymous module so, through path mapping, it can be
  24838. // referenced as the "underscore" module.
  24839. define(function() {
  24840. return _;
  24841. });
  24842. }
  24843. // Check for `exports` after `define` in case a build optimizer adds it.
  24844. else if (freeModule) {
  24845. // Export for Node.js.
  24846. (freeModule.exports = _)._ = _;
  24847. // Export for CommonJS support.
  24848. freeExports._ = _;
  24849. }
  24850. else {
  24851. // Export to the global object.
  24852. root._ = _;
  24853. }
  24854. }.call(this));
  24855. }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
  24856. },{}],73:[function(require,module,exports){
  24857. (function (global){
  24858. "use strict";
  24859. function withGlobal(_global) {
  24860. var userAgent = _global.navigator && _global.navigator.userAgent;
  24861. var isRunningInIE = userAgent && userAgent.indexOf("MSIE ") > -1;
  24862. var maxTimeout = Math.pow(2, 31) - 1; //see https://heycam.github.io/webidl/#abstract-opdef-converttoint
  24863. // Make properties writable in IE, as per
  24864. // http://www.adequatelygood.com/Replacing-setTimeout-Globally.html
  24865. if (isRunningInIE) {
  24866. _global.setTimeout = _global.setTimeout;
  24867. _global.clearTimeout = _global.clearTimeout;
  24868. _global.setInterval = _global.setInterval;
  24869. _global.clearInterval = _global.clearInterval;
  24870. _global.Date = _global.Date;
  24871. }
  24872. // setImmediate is not a standard function
  24873. // avoid adding the prop to the window object if not present
  24874. if (_global.setImmediate !== undefined) {
  24875. _global.setImmediate = _global.setImmediate;
  24876. _global.clearImmediate = _global.clearImmediate;
  24877. }
  24878. // node expects setTimeout/setInterval to return a fn object w/ .ref()/.unref()
  24879. // browsers, a number.
  24880. // see https://github.com/cjohansen/Sinon.JS/pull/436
  24881. var NOOP = function () { return undefined; };
  24882. var timeoutResult = _global.setTimeout(NOOP, 0);
  24883. var addTimerReturnsObject = typeof timeoutResult === "object";
  24884. var hrtimePresent = (_global.process && typeof _global.process.hrtime === "function");
  24885. var nextTickPresent = (_global.process && typeof _global.process.nextTick === "function");
  24886. var performancePresent = (_global.performance && typeof _global.performance.now === "function");
  24887. var hasPerformancePrototype = (_global.Performance && (typeof _global.Performance).match(/^(function|object)$/));
  24888. var queueMicrotaskPresent = (typeof _global.queueMicrotask === "function");
  24889. var requestAnimationFramePresent = (
  24890. _global.requestAnimationFrame && typeof _global.requestAnimationFrame === "function"
  24891. );
  24892. var cancelAnimationFramePresent = (
  24893. _global.cancelAnimationFrame && typeof _global.cancelAnimationFrame === "function"
  24894. );
  24895. var requestIdleCallbackPresent = (
  24896. _global.requestIdleCallback && typeof _global.requestIdleCallback === "function"
  24897. );
  24898. var cancelIdleCallbackPresent = (
  24899. _global.cancelIdleCallback && typeof _global.cancelIdleCallback === "function"
  24900. );
  24901. _global.clearTimeout(timeoutResult);
  24902. var NativeDate = _global.Date;
  24903. var uniqueTimerId = 1;
  24904. function isNumberFinite(num) {
  24905. if (Number.isFinite) {
  24906. return Number.isFinite(num);
  24907. }
  24908. if (typeof num !== "number") {
  24909. return false;
  24910. }
  24911. return isFinite(num);
  24912. }
  24913. /**
  24914. * Parse strings like "01:10:00" (meaning 1 hour, 10 minutes, 0 seconds) into
  24915. * number of milliseconds. This is used to support human-readable strings passed
  24916. * to clock.tick()
  24917. */
  24918. function parseTime(str) {
  24919. if (!str) {
  24920. return 0;
  24921. }
  24922. var strings = str.split(":");
  24923. var l = strings.length;
  24924. var i = l;
  24925. var ms = 0;
  24926. var parsed;
  24927. if (l > 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) {
  24928. throw new Error("tick only understands numbers, 'm:s' and 'h:m:s'. Each part must be two digits");
  24929. }
  24930. while (i--) {
  24931. parsed = parseInt(strings[i], 10);
  24932. if (parsed >= 60) {
  24933. throw new Error("Invalid time " + str);
  24934. }
  24935. ms += parsed * Math.pow(60, (l - i - 1));
  24936. }
  24937. return ms * 1000;
  24938. }
  24939. /**
  24940. * Get the decimal part of the millisecond value as nanoseconds
  24941. *
  24942. * @param {Number} msFloat the number of milliseconds
  24943. * @returns {Number} an integer number of nanoseconds in the range [0,1e6)
  24944. *
  24945. * Example: nanoRemainer(123.456789) -> 456789
  24946. */
  24947. function nanoRemainder(msFloat) {
  24948. var modulo = 1e6;
  24949. var remainder = (msFloat * 1e6) % modulo;
  24950. var positiveRemainder = remainder < 0 ? remainder + modulo : remainder;
  24951. return Math.floor(positiveRemainder);
  24952. }
  24953. /**
  24954. * Used to grok the `now` parameter to createClock.
  24955. * @param epoch {Date|number} the system time
  24956. */
  24957. function getEpoch(epoch) {
  24958. if (!epoch) { return 0; }
  24959. if (typeof epoch.getTime === "function") { return epoch.getTime(); }
  24960. if (typeof epoch === "number") { return epoch; }
  24961. throw new TypeError("now should be milliseconds since UNIX epoch");
  24962. }
  24963. function inRange(from, to, timer) {
  24964. return timer && timer.callAt >= from && timer.callAt <= to;
  24965. }
  24966. function mirrorDateProperties(target, source) {
  24967. var prop;
  24968. for (prop in source) {
  24969. if (source.hasOwnProperty(prop)) {
  24970. target[prop] = source[prop];
  24971. }
  24972. }
  24973. // set special now implementation
  24974. if (source.now) {
  24975. target.now = function now() {
  24976. return target.clock.now;
  24977. };
  24978. } else {
  24979. delete target.now;
  24980. }
  24981. // set special toSource implementation
  24982. if (source.toSource) {
  24983. target.toSource = function toSource() {
  24984. return source.toSource();
  24985. };
  24986. } else {
  24987. delete target.toSource;
  24988. }
  24989. // set special toString implementation
  24990. target.toString = function toString() {
  24991. return source.toString();
  24992. };
  24993. target.prototype = source.prototype;
  24994. target.parse = source.parse;
  24995. target.UTC = source.UTC;
  24996. target.prototype.toUTCString = source.prototype.toUTCString;
  24997. return target;
  24998. }
  24999. function createDate() {
  25000. function ClockDate(year, month, date, hour, minute, second, ms) {
  25001. // Defensive and verbose to avoid potential harm in passing
  25002. // explicit undefined when user does not pass argument
  25003. switch (arguments.length) {
  25004. case 0:
  25005. return new NativeDate(ClockDate.clock.now);
  25006. case 1:
  25007. return new NativeDate(year);
  25008. case 2:
  25009. return new NativeDate(year, month);
  25010. case 3:
  25011. return new NativeDate(year, month, date);
  25012. case 4:
  25013. return new NativeDate(year, month, date, hour);
  25014. case 5:
  25015. return new NativeDate(year, month, date, hour, minute);
  25016. case 6:
  25017. return new NativeDate(year, month, date, hour, minute, second);
  25018. default:
  25019. return new NativeDate(year, month, date, hour, minute, second, ms);
  25020. }
  25021. }
  25022. return mirrorDateProperties(ClockDate, NativeDate);
  25023. }
  25024. function enqueueJob(clock, job) {
  25025. // enqueues a microtick-deferred task - ecma262/#sec-enqueuejob
  25026. if (!clock.jobs) {
  25027. clock.jobs = [];
  25028. }
  25029. clock.jobs.push(job);
  25030. }
  25031. function runJobs(clock) {
  25032. // runs all microtick-deferred tasks - ecma262/#sec-runjobs
  25033. if (!clock.jobs) {
  25034. return;
  25035. }
  25036. for (var i = 0; i < clock.jobs.length; i++) {
  25037. var job = clock.jobs[i];
  25038. job.func.apply(null, job.args);
  25039. if (clock.loopLimit && i > clock.loopLimit) {
  25040. throw new Error("Aborting after running " + clock.loopLimit + " timers, assuming an infinite loop!");
  25041. }
  25042. }
  25043. clock.jobs = [];
  25044. }
  25045. function addTimer(clock, timer) {
  25046. if (timer.func === undefined) {
  25047. throw new Error("Callback must be provided to timer calls");
  25048. }
  25049. timer.type = timer.immediate ? "Immediate" : "Timeout";
  25050. if (timer.hasOwnProperty("delay")) {
  25051. if (!isNumberFinite(timer.delay)) {
  25052. timer.delay = 0;
  25053. }
  25054. timer.delay = timer.delay > maxTimeout ? 1 : timer.delay;
  25055. timer.delay = Math.max(0, timer.delay);
  25056. }
  25057. if (timer.hasOwnProperty("interval")) {
  25058. timer.type = "Interval";
  25059. timer.interval = timer.interval > maxTimeout ? 1 : timer.interval;
  25060. }
  25061. if (timer.hasOwnProperty("animation")) {
  25062. timer.type = "AnimationFrame";
  25063. timer.animation = true;
  25064. }
  25065. if (!clock.timers) {
  25066. clock.timers = {};
  25067. }
  25068. timer.id = uniqueTimerId++;
  25069. timer.createdAt = clock.now;
  25070. timer.callAt = clock.now + (parseInt(timer.delay) || (clock.duringTick ? 1 : 0));
  25071. clock.timers[timer.id] = timer;
  25072. if (addTimerReturnsObject) {
  25073. var res = {
  25074. id: timer.id,
  25075. ref: function () { return res; },
  25076. unref: function () { return res; },
  25077. refresh: function () { return res; }
  25078. };
  25079. return res;
  25080. }
  25081. return timer.id;
  25082. }
  25083. /* eslint consistent-return: "off" */
  25084. function compareTimers(a, b) {
  25085. // Sort first by absolute timing
  25086. if (a.callAt < b.callAt) {
  25087. return -1;
  25088. }
  25089. if (a.callAt > b.callAt) {
  25090. return 1;
  25091. }
  25092. // Sort next by immediate, immediate timers take precedence
  25093. if (a.immediate && !b.immediate) {
  25094. return -1;
  25095. }
  25096. if (!a.immediate && b.immediate) {
  25097. return 1;
  25098. }
  25099. // Sort next by creation time, earlier-created timers take precedence
  25100. if (a.createdAt < b.createdAt) {
  25101. return -1;
  25102. }
  25103. if (a.createdAt > b.createdAt) {
  25104. return 1;
  25105. }
  25106. // Sort next by id, lower-id timers take precedence
  25107. if (a.id < b.id) {
  25108. return -1;
  25109. }
  25110. if (a.id > b.id) {
  25111. return 1;
  25112. }
  25113. // As timer ids are unique, no fallback `0` is necessary
  25114. }
  25115. function firstTimerInRange(clock, from, to) {
  25116. var timers = clock.timers;
  25117. var timer = null;
  25118. var id, isInRange;
  25119. for (id in timers) {
  25120. if (timers.hasOwnProperty(id)) {
  25121. isInRange = inRange(from, to, timers[id]);
  25122. if (isInRange && (!timer || compareTimers(timer, timers[id]) === 1)) {
  25123. timer = timers[id];
  25124. }
  25125. }
  25126. }
  25127. return timer;
  25128. }
  25129. function firstTimer(clock) {
  25130. var timers = clock.timers;
  25131. var timer = null;
  25132. var id;
  25133. for (id in timers) {
  25134. if (timers.hasOwnProperty(id)) {
  25135. if (!timer || compareTimers(timer, timers[id]) === 1) {
  25136. timer = timers[id];
  25137. }
  25138. }
  25139. }
  25140. return timer;
  25141. }
  25142. function lastTimer(clock) {
  25143. var timers = clock.timers;
  25144. var timer = null;
  25145. var id;
  25146. for (id in timers) {
  25147. if (timers.hasOwnProperty(id)) {
  25148. if (!timer || compareTimers(timer, timers[id]) === -1) {
  25149. timer = timers[id];
  25150. }
  25151. }
  25152. }
  25153. return timer;
  25154. }
  25155. function callTimer(clock, timer) {
  25156. if (typeof timer.interval === "number") {
  25157. clock.timers[timer.id].callAt += timer.interval;
  25158. } else {
  25159. delete clock.timers[timer.id];
  25160. }
  25161. if (typeof timer.func === "function") {
  25162. timer.func.apply(null, timer.args);
  25163. } else {
  25164. /* eslint no-eval: "off" */
  25165. eval(timer.func);
  25166. }
  25167. }
  25168. function clearTimer(clock, timerId, ttype) {
  25169. if (!timerId) {
  25170. // null appears to be allowed in most browsers, and appears to be
  25171. // relied upon by some libraries, like Bootstrap carousel
  25172. return;
  25173. }
  25174. if (!clock.timers) {
  25175. clock.timers = {};
  25176. }
  25177. // in Node, timerId is an object with .ref()/.unref(), and
  25178. // its .id field is the actual timer id.
  25179. if (typeof timerId === "object") {
  25180. timerId = timerId.id;
  25181. }
  25182. if (clock.timers.hasOwnProperty(timerId)) {
  25183. // check that the ID matches a timer of the correct type
  25184. var timer = clock.timers[timerId];
  25185. if (timer.type === ttype) {
  25186. delete clock.timers[timerId];
  25187. } else {
  25188. var clear = ttype === "AnimationFrame" ? "cancelAnimationFrame" : "clear" + ttype;
  25189. var schedule = timer.type === "AnimationFrame" ? "requestAnimationFrame" : "set" + timer.type;
  25190. throw new Error("Cannot clear timer: timer created with " + schedule
  25191. + "() but cleared with " + clear + "()");
  25192. }
  25193. }
  25194. }
  25195. function uninstall(clock, target, config) {
  25196. var method,
  25197. i,
  25198. l;
  25199. var installedHrTime = "_hrtime";
  25200. var installedNextTick = "_nextTick";
  25201. for (i = 0, l = clock.methods.length; i < l; i++) {
  25202. method = clock.methods[i];
  25203. if (method === "hrtime" && target.process) {
  25204. target.process.hrtime = clock[installedHrTime];
  25205. } else if (method === "nextTick" && target.process) {
  25206. target.process.nextTick = clock[installedNextTick];
  25207. } else if (method === "performance") {
  25208. target[method] = clock["_" + method];
  25209. } else {
  25210. if (target[method] && target[method].hadOwnProperty) {
  25211. target[method] = clock["_" + method];
  25212. if (method === "clearInterval" && config.shouldAdvanceTime === true) {
  25213. target[method](clock.attachedInterval);
  25214. }
  25215. } else {
  25216. try {
  25217. delete target[method];
  25218. } catch (ignore) { /* eslint empty-block: "off" */ }
  25219. }
  25220. }
  25221. }
  25222. // Prevent multiple executions which will completely remove these props
  25223. clock.methods = [];
  25224. // return pending timers, to enable checking what timers remained on uninstall
  25225. if (!clock.timers) {
  25226. return [];
  25227. }
  25228. return Object.keys(clock.timers).map(function mapper(key) {
  25229. return clock.timers[key];
  25230. });
  25231. }
  25232. function hijackMethod(target, method, clock) {
  25233. var prop;
  25234. clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(target, method);
  25235. clock["_" + method] = target[method];
  25236. if (method === "Date") {
  25237. var date = mirrorDateProperties(clock[method], target[method]);
  25238. target[method] = date;
  25239. } else if (method === "performance") {
  25240. target[method] = clock[method];
  25241. } else {
  25242. target[method] = function () {
  25243. return clock[method].apply(clock, arguments);
  25244. };
  25245. for (prop in clock[method]) {
  25246. if (clock[method].hasOwnProperty(prop)) {
  25247. target[method][prop] = clock[method][prop];
  25248. }
  25249. }
  25250. }
  25251. target[method].clock = clock;
  25252. }
  25253. function doIntervalTick(clock, advanceTimeDelta) {
  25254. clock.tick(advanceTimeDelta);
  25255. }
  25256. var timers = {
  25257. setTimeout: _global.setTimeout,
  25258. clearTimeout: _global.clearTimeout,
  25259. setImmediate: _global.setImmediate,
  25260. clearImmediate: _global.clearImmediate,
  25261. setInterval: _global.setInterval,
  25262. clearInterval: _global.clearInterval,
  25263. Date: _global.Date
  25264. };
  25265. if (hrtimePresent) {
  25266. timers.hrtime = _global.process.hrtime;
  25267. }
  25268. if (nextTickPresent) {
  25269. timers.nextTick = _global.process.nextTick;
  25270. }
  25271. if (performancePresent) {
  25272. timers.performance = _global.performance;
  25273. }
  25274. if (requestAnimationFramePresent) {
  25275. timers.requestAnimationFrame = _global.requestAnimationFrame;
  25276. }
  25277. if (queueMicrotaskPresent) {
  25278. timers.queueMicrotask = _global.queueMicrotask;
  25279. }
  25280. if (cancelAnimationFramePresent) {
  25281. timers.cancelAnimationFrame = _global.cancelAnimationFrame;
  25282. }
  25283. if (requestIdleCallbackPresent) {
  25284. timers.requestIdleCallback = _global.requestIdleCallback;
  25285. }
  25286. if (cancelIdleCallbackPresent) {
  25287. timers.cancelIdleCallback = _global.cancelIdleCallback;
  25288. }
  25289. var keys = Object.keys || function (obj) {
  25290. var ks = [];
  25291. var key;
  25292. for (key in obj) {
  25293. if (obj.hasOwnProperty(key)) {
  25294. ks.push(key);
  25295. }
  25296. }
  25297. return ks;
  25298. };
  25299. /**
  25300. * @param start {Date|number} the system time - non-integer values are floored
  25301. * @param loopLimit {number} maximum number of timers that will be run when calling runAll()
  25302. */
  25303. function createClock(start, loopLimit) {
  25304. start = Math.floor(getEpoch(start));
  25305. loopLimit = loopLimit || 1000;
  25306. var nanos = 0;
  25307. var adjustedSystemTime = [0, 0]; // [millis, nanoremainder]
  25308. if (NativeDate === undefined) {
  25309. throw new Error("The global scope doesn't have a `Date` object"
  25310. + " (see https://github.com/sinonjs/sinon/issues/1852#issuecomment-419622780)");
  25311. }
  25312. var clock = {
  25313. now: start,
  25314. timeouts: {},
  25315. Date: createDate(),
  25316. loopLimit: loopLimit
  25317. };
  25318. clock.Date.clock = clock;
  25319. function getTimeToNextFrame() {
  25320. return 16 - ((clock.now - start) % 16);
  25321. }
  25322. function hrtime(prev) {
  25323. var millisSinceStart = clock.now - adjustedSystemTime[0] - start;
  25324. var secsSinceStart = Math.floor( millisSinceStart / 1000);
  25325. var remainderInNanos = (millisSinceStart - secsSinceStart * 1e3 ) * 1e6 + nanos - adjustedSystemTime[1];
  25326. if (Array.isArray(prev)) {
  25327. if ( prev[1] > 1e9 ) {
  25328. throw new TypeError("Number of nanoseconds can't exceed a billion");
  25329. }
  25330. var oldSecs = prev[0];
  25331. var nanoDiff = remainderInNanos - prev[1];
  25332. var secDiff = secsSinceStart - oldSecs;
  25333. if (nanoDiff < 0) {
  25334. nanoDiff += 1e9;
  25335. secDiff -= 1;
  25336. }
  25337. return [secDiff, nanoDiff];
  25338. }
  25339. return [secsSinceStart, remainderInNanos];
  25340. }
  25341. clock.requestIdleCallback = function requestIdleCallback(func, timeout) {
  25342. var timeToNextIdlePeriod = 0;
  25343. if (clock.countTimers() > 0) {
  25344. timeToNextIdlePeriod = 50; // const for now
  25345. }
  25346. var result = addTimer(clock, {
  25347. func: func,
  25348. args: Array.prototype.slice.call(arguments, 2),
  25349. delay: typeof timeout === "undefined" ? timeToNextIdlePeriod : Math.min(timeout, timeToNextIdlePeriod)
  25350. });
  25351. return result.id || result;
  25352. };
  25353. clock.cancelIdleCallback = function cancelIdleCallback(timerId) {
  25354. return clearTimer(clock, timerId, "Timeout");
  25355. };
  25356. clock.setTimeout = function setTimeout(func, timeout) {
  25357. return addTimer(clock, {
  25358. func: func,
  25359. args: Array.prototype.slice.call(arguments, 2),
  25360. delay: timeout
  25361. });
  25362. };
  25363. clock.clearTimeout = function clearTimeout(timerId) {
  25364. return clearTimer(clock, timerId, "Timeout");
  25365. };
  25366. clock.nextTick = function nextTick(func) {
  25367. return enqueueJob(clock, {
  25368. func: func,
  25369. args: Array.prototype.slice.call(arguments, 1)
  25370. });
  25371. };
  25372. clock.queueMicrotask = function queueMicrotask(func) {
  25373. return clock.nextTick(func); // explicitly drop additional arguments
  25374. };
  25375. clock.setInterval = function setInterval(func, timeout) {
  25376. timeout = parseInt(timeout, 10);
  25377. return addTimer(clock, {
  25378. func: func,
  25379. args: Array.prototype.slice.call(arguments, 2),
  25380. delay: timeout,
  25381. interval: timeout
  25382. });
  25383. };
  25384. clock.clearInterval = function clearInterval(timerId) {
  25385. return clearTimer(clock, timerId, "Interval");
  25386. };
  25387. clock.setImmediate = function setImmediate(func) {
  25388. return addTimer(clock, {
  25389. func: func,
  25390. args: Array.prototype.slice.call(arguments, 1),
  25391. immediate: true
  25392. });
  25393. };
  25394. clock.clearImmediate = function clearImmediate(timerId) {
  25395. return clearTimer(clock, timerId, "Immediate");
  25396. };
  25397. clock.countTimers = function countTimers() {
  25398. return Object.keys(clock.timers || {}).length;
  25399. };
  25400. clock.requestAnimationFrame = function requestAnimationFrame(func) {
  25401. var result = addTimer(clock, {
  25402. func: func,
  25403. delay: getTimeToNextFrame(),
  25404. args: [clock.now + getTimeToNextFrame()],
  25405. animation: true
  25406. });
  25407. return result.id || result;
  25408. };
  25409. clock.cancelAnimationFrame = function cancelAnimationFrame(timerId) {
  25410. return clearTimer(clock, timerId, "AnimationFrame");
  25411. };
  25412. clock.runMicrotasks = function runMicrotasks() {
  25413. runJobs(clock);
  25414. };
  25415. /**
  25416. * @param {tickValue} {String|Number} number of milliseconds or a human-readable value like "01:11:15"
  25417. */
  25418. clock.tick = function tick(tickValue) {
  25419. var msFloat = typeof tickValue === "number" ? tickValue : parseTime(tickValue);
  25420. var ms = Math.floor(msFloat);
  25421. var remainder = nanoRemainder(msFloat);
  25422. var nanosTotal = nanos + remainder;
  25423. var tickTo = clock.now + ms;
  25424. if (msFloat < 0) {
  25425. throw new TypeError("Negative ticks are not supported");
  25426. }
  25427. // adjust for positive overflow
  25428. if (nanosTotal >= 1e6) {
  25429. tickTo += 1;
  25430. nanosTotal -= 1e6;
  25431. }
  25432. nanos = nanosTotal;
  25433. var tickFrom = clock.now;
  25434. var previous = clock.now;
  25435. var timer, firstException, oldNow;
  25436. clock.duringTick = true;
  25437. // perform microtasks
  25438. oldNow = clock.now;
  25439. runJobs(clock);
  25440. if (oldNow !== clock.now) {
  25441. // compensate for any setSystemTime() call during microtask callback
  25442. tickFrom += clock.now - oldNow;
  25443. tickTo += clock.now - oldNow;
  25444. }
  25445. // perform each timer in the requested range
  25446. timer = firstTimerInRange(clock, tickFrom, tickTo);
  25447. while (timer && tickFrom <= tickTo) {
  25448. if (clock.timers[timer.id]) {
  25449. tickFrom = timer.callAt;
  25450. clock.now = timer.callAt;
  25451. oldNow = clock.now;
  25452. try {
  25453. runJobs(clock);
  25454. callTimer(clock, timer);
  25455. } catch (e) {
  25456. firstException = firstException || e;
  25457. }
  25458. // compensate for any setSystemTime() call during timer callback
  25459. if (oldNow !== clock.now) {
  25460. tickFrom += clock.now - oldNow;
  25461. tickTo += clock.now - oldNow;
  25462. previous += clock.now - oldNow;
  25463. }
  25464. }
  25465. timer = firstTimerInRange(clock, previous, tickTo);
  25466. previous = tickFrom;
  25467. }
  25468. // perform process.nextTick()s again
  25469. oldNow = clock.now;
  25470. runJobs(clock);
  25471. if (oldNow !== clock.now) {
  25472. // compensate for any setSystemTime() call during process.nextTick() callback
  25473. tickFrom += clock.now - oldNow;
  25474. tickTo += clock.now - oldNow;
  25475. }
  25476. clock.duringTick = false;
  25477. // corner case: during runJobs, new timers were scheduled which could be in the range [clock.now, tickTo]
  25478. timer = firstTimerInRange(clock, tickFrom, tickTo);
  25479. if (timer) {
  25480. try {
  25481. clock.tick(tickTo - clock.now); // do it all again - for the remainder of the requested range
  25482. } catch (e) {
  25483. firstException = firstException || e;
  25484. }
  25485. } else {
  25486. // no timers remaining in the requested range: move the clock all the way to the end
  25487. clock.now = tickTo;
  25488. // update nanos
  25489. nanos = nanosTotal;
  25490. }
  25491. if (firstException) {
  25492. throw firstException;
  25493. }
  25494. return clock.now;
  25495. };
  25496. clock.next = function next() {
  25497. runJobs(clock);
  25498. var timer = firstTimer(clock);
  25499. if (!timer) {
  25500. return clock.now;
  25501. }
  25502. clock.duringTick = true;
  25503. try {
  25504. clock.now = timer.callAt;
  25505. callTimer(clock, timer);
  25506. runJobs(clock);
  25507. return clock.now;
  25508. } finally {
  25509. clock.duringTick = false;
  25510. }
  25511. };
  25512. clock.runAll = function runAll() {
  25513. var numTimers, i;
  25514. runJobs(clock);
  25515. for (i = 0; i < clock.loopLimit; i++) {
  25516. if (!clock.timers) {
  25517. return clock.now;
  25518. }
  25519. numTimers = keys(clock.timers).length;
  25520. if (numTimers === 0) {
  25521. return clock.now;
  25522. }
  25523. clock.next();
  25524. }
  25525. throw new Error("Aborting after running " + clock.loopLimit + " timers, assuming an infinite loop!");
  25526. };
  25527. clock.runToFrame = function runToFrame() {
  25528. return clock.tick(getTimeToNextFrame());
  25529. };
  25530. clock.runToLast = function runToLast() {
  25531. var timer = lastTimer(clock);
  25532. if (!timer) {
  25533. runJobs(clock);
  25534. return clock.now;
  25535. }
  25536. return clock.tick(timer.callAt - clock.now);
  25537. };
  25538. clock.reset = function reset() {
  25539. nanos = 0;
  25540. clock.timers = {};
  25541. clock.jobs = [];
  25542. clock.now = start;
  25543. };
  25544. clock.setSystemTime = function setSystemTime(systemTime) {
  25545. // determine time difference
  25546. var newNow = getEpoch(systemTime);
  25547. var difference = newNow - clock.now;
  25548. var id, timer;
  25549. adjustedSystemTime[0] = difference;
  25550. adjustedSystemTime[1] = nanos;
  25551. // update 'system clock'
  25552. clock.now = newNow;
  25553. nanos = 0;
  25554. // update timers and intervals to keep them stable
  25555. for (id in clock.timers) {
  25556. if (clock.timers.hasOwnProperty(id)) {
  25557. timer = clock.timers[id];
  25558. timer.createdAt += difference;
  25559. timer.callAt += difference;
  25560. }
  25561. }
  25562. };
  25563. if (performancePresent) {
  25564. clock.performance = Object.create(null);
  25565. if (hasPerformancePrototype) {
  25566. var proto = _global.Performance.prototype;
  25567. Object
  25568. .getOwnPropertyNames(proto)
  25569. .forEach(function (name) {
  25570. clock.performance[name] = NOOP;
  25571. });
  25572. }
  25573. clock.performance.now = function lolexNow() {
  25574. var hrt = hrtime();
  25575. var millis = (hrt[0] * 1000 + hrt[1] / 1e6);
  25576. return millis;
  25577. };
  25578. }
  25579. if (hrtimePresent) {
  25580. clock.hrtime = hrtime;
  25581. }
  25582. return clock;
  25583. }
  25584. /**
  25585. * @param config {Object} optional config
  25586. * @param config.target {Object} the target to install timers in (default `window`)
  25587. * @param config.now {number|Date} a number (in milliseconds) or a Date object (default epoch)
  25588. * @param config.toFake {string[]} names of the methods that should be faked.
  25589. * @param config.loopLimit {number} the maximum number of timers that will be run when calling runAll()
  25590. * @param config.shouldAdvanceTime {Boolean} tells lolex to increment mocked time automatically (default false)
  25591. * @param config.advanceTimeDelta {Number} increment mocked time every <<advanceTimeDelta>> ms (default: 20ms)
  25592. */
  25593. function install(config) {
  25594. if ( arguments.length > 1 || config instanceof Date || Array.isArray(config) || typeof config === "number") {
  25595. throw new TypeError("lolex.install called with " + String(config) +
  25596. " lolex 2.0+ requires an object parameter - see https://github.com/sinonjs/lolex");
  25597. }
  25598. config = typeof config !== "undefined" ? config : {};
  25599. config.shouldAdvanceTime = config.shouldAdvanceTime || false;
  25600. config.advanceTimeDelta = config.advanceTimeDelta || 20;
  25601. var i, l;
  25602. var target = config.target || _global;
  25603. var clock = createClock(config.now, config.loopLimit);
  25604. clock.uninstall = function () {
  25605. return uninstall(clock, target, config);
  25606. };
  25607. clock.methods = config.toFake || [];
  25608. if (clock.methods.length === 0) {
  25609. // do not fake nextTick by default - GitHub#126
  25610. clock.methods = keys(timers).filter(function (key) {return key !== "nextTick";});
  25611. }
  25612. for (i = 0, l = clock.methods.length; i < l; i++) {
  25613. if (clock.methods[i] === "hrtime") {
  25614. if (target.process && typeof target.process.hrtime === "function") {
  25615. hijackMethod(target.process, clock.methods[i], clock);
  25616. }
  25617. } else if (clock.methods[i] === "nextTick") {
  25618. if (target.process && typeof target.process.nextTick === "function") {
  25619. hijackMethod(target.process, clock.methods[i], clock);
  25620. }
  25621. } else {
  25622. if (clock.methods[i] === "setInterval" && config.shouldAdvanceTime === true) {
  25623. var intervalTick = doIntervalTick.bind(null, clock, config.advanceTimeDelta);
  25624. var intervalId = target[clock.methods[i]](
  25625. intervalTick,
  25626. config.advanceTimeDelta);
  25627. clock.attachedInterval = intervalId;
  25628. }
  25629. hijackMethod(target, clock.methods[i], clock);
  25630. }
  25631. }
  25632. return clock;
  25633. }
  25634. return {
  25635. timers: timers,
  25636. createClock: createClock,
  25637. install: install,
  25638. withGlobal: withGlobal
  25639. };
  25640. }
  25641. var defaultImplementation = withGlobal(global || window);
  25642. exports.timers = defaultImplementation.timers;
  25643. exports.createClock = defaultImplementation.createClock;
  25644. exports.install = defaultImplementation.install;
  25645. exports.withGlobal = withGlobal;
  25646. }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
  25647. },{}],74:[function(require,module,exports){
  25648. "use strict";
  25649. // cache a reference to setTimeout, so that our reference won't be stubbed out
  25650. // when using fake timers and errors will still get logged
  25651. // https://github.com/cjohansen/Sinon.JS/issues/381
  25652. var realSetTimeout = setTimeout;
  25653. function configureLogger(config) {
  25654. config = config || {};
  25655. // Function which prints errors.
  25656. if (!config.hasOwnProperty("logger")) {
  25657. config.logger = function () { };
  25658. }
  25659. // When set to true, any errors logged will be thrown immediately;
  25660. // If set to false, the errors will be thrown in separate execution frame.
  25661. if (!config.hasOwnProperty("useImmediateExceptions")) {
  25662. config.useImmediateExceptions = true;
  25663. }
  25664. // wrap realSetTimeout with something we can stub in tests
  25665. if (!config.hasOwnProperty("setTimeout")) {
  25666. config.setTimeout = realSetTimeout;
  25667. }
  25668. return function logError(label, e) {
  25669. var msg = label + " threw exception: ";
  25670. var err = { name: e.name || label, message: e.message || e.toString(), stack: e.stack };
  25671. function throwLoggedError() {
  25672. err.message = msg + err.message;
  25673. throw err;
  25674. }
  25675. config.logger(msg + "[" + err.name + "] " + err.message);
  25676. if (err.stack) {
  25677. config.logger(err.stack);
  25678. }
  25679. if (config.useImmediateExceptions) {
  25680. throwLoggedError();
  25681. } else {
  25682. config.setTimeout(throwLoggedError, 0);
  25683. }
  25684. };
  25685. }
  25686. module.exports = configureLogger;
  25687. },{}],75:[function(require,module,exports){
  25688. "use strict";
  25689. var Event = require("./event");
  25690. function CustomEvent(type, customData, target) {
  25691. this.initEvent(type, false, false, target);
  25692. this.detail = customData.detail || null;
  25693. }
  25694. CustomEvent.prototype = new Event();
  25695. CustomEvent.prototype.constructor = CustomEvent;
  25696. module.exports = CustomEvent;
  25697. },{"./event":77}],76:[function(require,module,exports){
  25698. "use strict";
  25699. function flattenOptions(options) {
  25700. if (options !== Object(options)) {
  25701. return {
  25702. capture: Boolean(options),
  25703. once: false,
  25704. passive: false
  25705. };
  25706. }
  25707. return {
  25708. capture: Boolean(options.capture),
  25709. once: Boolean(options.once),
  25710. passive: Boolean(options.passive)
  25711. };
  25712. }
  25713. function not(fn) {
  25714. return function () {
  25715. return !fn.apply(this, arguments);
  25716. };
  25717. }
  25718. function hasListenerFilter(listener, capture) {
  25719. return function (listenerSpec) {
  25720. return listenerSpec.capture === capture
  25721. && listenerSpec.listener === listener;
  25722. };
  25723. }
  25724. var EventTarget = {
  25725. // https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener
  25726. addEventListener: function addEventListener(event, listener, providedOptions) {
  25727. // 3. Let capture, passive, and once be the result of flattening more options.
  25728. // Flatten property before executing step 2,
  25729. // feture detection is usually based on registering handler with options object,
  25730. // that has getter defined
  25731. // addEventListener("load", () => {}, {
  25732. // get once() { supportsOnce = true; }
  25733. // });
  25734. var options = flattenOptions(providedOptions);
  25735. // 2. If callback is null, then return.
  25736. if (listener == null) {
  25737. return;
  25738. }
  25739. this.eventListeners = this.eventListeners || {};
  25740. this.eventListeners[event] = this.eventListeners[event] || [];
  25741. // 4. If context object’s associated list of event listener
  25742. // does not contain an event listener whose type is type,
  25743. // callback is callback, and capture is capture, then append
  25744. // a new event listener to it, whose type is type, callback is
  25745. // callback, capture is capture, passive is passive, and once is once.
  25746. if (!this.eventListeners[event].some(hasListenerFilter(listener, options.capture))) {
  25747. this.eventListeners[event].push({
  25748. listener: listener,
  25749. capture: options.capture,
  25750. once: options.once
  25751. });
  25752. }
  25753. },
  25754. // https://dom.spec.whatwg.org/#dom-eventtarget-removeeventlistener
  25755. removeEventListener: function removeEventListener(event, listener, providedOptions) {
  25756. if (!this.eventListeners || !this.eventListeners[event]) {
  25757. return;
  25758. }
  25759. // 2. Let capture be the result of flattening options.
  25760. var options = flattenOptions(providedOptions);
  25761. // 3. If there is an event listener in the associated list of
  25762. // event listeners whose type is type, callback is callback,
  25763. // and capture is capture, then set that event listener’s
  25764. // removed to true and remove it from the associated list of event listeners.
  25765. this.eventListeners[event] = this.eventListeners[event]
  25766. .filter(not(hasListenerFilter(listener, options.capture)));
  25767. },
  25768. dispatchEvent: function dispatchEvent(event) {
  25769. if (!this.eventListeners || !this.eventListeners[event.type]) {
  25770. return Boolean(event.defaultPrevented);
  25771. }
  25772. var self = this;
  25773. var type = event.type;
  25774. var listeners = self.eventListeners[type];
  25775. // Remove listeners, that should be dispatched once
  25776. // before running dispatch loop to avoid nested dispatch issues
  25777. self.eventListeners[type] = listeners.filter(function (listenerSpec) {
  25778. return !listenerSpec.once;
  25779. });
  25780. listeners.forEach(function (listenerSpec) {
  25781. var listener = listenerSpec.listener;
  25782. if (typeof listener === "function") {
  25783. listener.call(self, event);
  25784. } else {
  25785. listener.handleEvent(event);
  25786. }
  25787. });
  25788. return Boolean(event.defaultPrevented);
  25789. }
  25790. };
  25791. module.exports = EventTarget;
  25792. },{}],77:[function(require,module,exports){
  25793. "use strict";
  25794. function Event(type, bubbles, cancelable, target) {
  25795. this.initEvent(type, bubbles, cancelable, target);
  25796. }
  25797. Event.prototype = {
  25798. initEvent: function (type, bubbles, cancelable, target) {
  25799. this.type = type;
  25800. this.bubbles = bubbles;
  25801. this.cancelable = cancelable;
  25802. this.target = target;
  25803. this.currentTarget = target;
  25804. },
  25805. stopPropagation: function () {},
  25806. preventDefault: function () {
  25807. this.defaultPrevented = true;
  25808. }
  25809. };
  25810. module.exports = Event;
  25811. },{}],78:[function(require,module,exports){
  25812. "use strict";
  25813. module.exports = {
  25814. Event: require("./event"),
  25815. ProgressEvent: require("./progress-event"),
  25816. CustomEvent: require("./custom-event"),
  25817. EventTarget: require("./event-target")
  25818. };
  25819. },{"./custom-event":75,"./event":77,"./event-target":76,"./progress-event":79}],79:[function(require,module,exports){
  25820. "use strict";
  25821. var Event = require("./event");
  25822. function ProgressEvent(type, progressEventRaw, target) {
  25823. this.initEvent(type, false, false, target);
  25824. this.loaded = typeof progressEventRaw.loaded === "number" ? progressEventRaw.loaded : null;
  25825. this.total = typeof progressEventRaw.total === "number" ? progressEventRaw.total : null;
  25826. this.lengthComputable = !!progressEventRaw.total;
  25827. }
  25828. ProgressEvent.prototype = new Event();
  25829. ProgressEvent.prototype.constructor = ProgressEvent;
  25830. module.exports = ProgressEvent;
  25831. },{"./event":77}],80:[function(require,module,exports){
  25832. "use strict";
  25833. var lolex = require("lolex");
  25834. var fakeServer = require("./index");
  25835. function Server() {}
  25836. Server.prototype = fakeServer;
  25837. var fakeServerWithClock = new Server();
  25838. fakeServerWithClock.addRequest = function addRequest(xhr) {
  25839. if (xhr.async) {
  25840. if (typeof setTimeout.clock === "object") {
  25841. this.clock = setTimeout.clock;
  25842. } else {
  25843. this.clock = lolex.install();
  25844. this.resetClock = true;
  25845. }
  25846. if (!this.longestTimeout) {
  25847. var clockSetTimeout = this.clock.setTimeout;
  25848. var clockSetInterval = this.clock.setInterval;
  25849. var server = this;
  25850. this.clock.setTimeout = function (fn, timeout) {
  25851. server.longestTimeout = Math.max(timeout, server.longestTimeout || 0);
  25852. return clockSetTimeout.apply(this, arguments);
  25853. };
  25854. this.clock.setInterval = function (fn, timeout) {
  25855. server.longestTimeout = Math.max(timeout, server.longestTimeout || 0);
  25856. return clockSetInterval.apply(this, arguments);
  25857. };
  25858. }
  25859. }
  25860. return fakeServer.addRequest.call(this, xhr);
  25861. };
  25862. fakeServerWithClock.respond = function respond() {
  25863. var returnVal = fakeServer.respond.apply(this, arguments);
  25864. if (this.clock) {
  25865. this.clock.tick(this.longestTimeout || 0);
  25866. this.longestTimeout = 0;
  25867. if (this.resetClock) {
  25868. this.clock.uninstall();
  25869. this.resetClock = false;
  25870. }
  25871. }
  25872. return returnVal;
  25873. };
  25874. fakeServerWithClock.restore = function restore() {
  25875. if (this.clock) {
  25876. this.clock.uninstall();
  25877. }
  25878. return fakeServer.restore.apply(this, arguments);
  25879. };
  25880. module.exports = fakeServerWithClock;
  25881. },{"./index":82,"lolex":86}],81:[function(require,module,exports){
  25882. "use strict";
  25883. var formatio = require("@sinonjs/formatio");
  25884. var formatter = formatio.configure({
  25885. quoteStrings: false,
  25886. limitChildrenCount: 250
  25887. });
  25888. module.exports = function format() {
  25889. return formatter.ascii.apply(formatter, arguments);
  25890. };
  25891. },{"@sinonjs/formatio":49}],82:[function(require,module,exports){
  25892. "use strict";
  25893. var fakeXhr = require("../fake-xhr");
  25894. var push = [].push;
  25895. var format = require("./format");
  25896. var configureLogError = require("../configure-logger");
  25897. var pathToRegexp = require("path-to-regexp");
  25898. var supportsArrayBuffer = typeof ArrayBuffer !== "undefined";
  25899. function responseArray(handler) {
  25900. var response = handler;
  25901. if (Object.prototype.toString.call(handler) !== "[object Array]") {
  25902. response = [200, {}, handler];
  25903. }
  25904. if (typeof response[2] !== "string") {
  25905. if (!supportsArrayBuffer) {
  25906. throw new TypeError("Fake server response body should be a string, but was " +
  25907. typeof response[2]);
  25908. }
  25909. else if (!(response[2] instanceof ArrayBuffer)) {
  25910. throw new TypeError("Fake server response body should be a string or ArrayBuffer, but was " +
  25911. typeof response[2]);
  25912. }
  25913. }
  25914. return response;
  25915. }
  25916. function getDefaultWindowLocation() {
  25917. return { "host": "localhost", "protocol": "http" };
  25918. }
  25919. function getWindowLocation() {
  25920. if (typeof window === "undefined") {
  25921. // Fallback
  25922. return getDefaultWindowLocation();
  25923. }
  25924. if (typeof window.location !== "undefined") {
  25925. // Browsers place location on window
  25926. return window.location;
  25927. }
  25928. if ((typeof window.window !== "undefined") && (typeof window.window.location !== "undefined")) {
  25929. // React Native on Android places location on window.window
  25930. return window.window.location;
  25931. }
  25932. return getDefaultWindowLocation();
  25933. }
  25934. function matchOne(response, reqMethod, reqUrl) {
  25935. var rmeth = response.method;
  25936. var matchMethod = !rmeth || rmeth.toLowerCase() === reqMethod.toLowerCase();
  25937. var url = response.url;
  25938. var matchUrl = !url || url === reqUrl || (typeof url.test === "function" && url.test(reqUrl));
  25939. return matchMethod && matchUrl;
  25940. }
  25941. function match(response, request) {
  25942. var wloc = getWindowLocation();
  25943. var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host);
  25944. var requestUrl = request.url;
  25945. if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) {
  25946. requestUrl = requestUrl.replace(rCurrLoc, "");
  25947. }
  25948. if (matchOne(response, this.getHTTPMethod(request), requestUrl)) {
  25949. if (typeof response.response === "function") {
  25950. var ru = response.url;
  25951. var args = [request].concat(ru && typeof ru.exec === "function" ? ru.exec(requestUrl).slice(1) : []);
  25952. return response.response.apply(response, args);
  25953. }
  25954. return true;
  25955. }
  25956. return false;
  25957. }
  25958. function incrementRequestCount() {
  25959. var count = ++this.requestCount;
  25960. this.requested = true;
  25961. this.requestedOnce = count === 1;
  25962. this.requestedTwice = count === 2;
  25963. this.requestedThrice = count === 3;
  25964. this.firstRequest = this.getRequest(0);
  25965. this.secondRequest = this.getRequest(1);
  25966. this.thirdRequest = this.getRequest(2);
  25967. this.lastRequest = this.getRequest(count - 1);
  25968. }
  25969. var fakeServer = {
  25970. create: function (config) {
  25971. var server = Object.create(this);
  25972. server.configure(config);
  25973. this.xhr = fakeXhr.useFakeXMLHttpRequest();
  25974. server.requests = [];
  25975. server.requestCount = 0;
  25976. server.queue = [];
  25977. server.responses = [];
  25978. this.xhr.onCreate = function (xhrObj) {
  25979. xhrObj.unsafeHeadersEnabled = function () {
  25980. return !(server.unsafeHeadersEnabled === false);
  25981. };
  25982. server.addRequest(xhrObj);
  25983. };
  25984. return server;
  25985. },
  25986. configure: function (config) {
  25987. var self = this;
  25988. var whitelist = {
  25989. "autoRespond": true,
  25990. "autoRespondAfter": true,
  25991. "respondImmediately": true,
  25992. "fakeHTTPMethods": true,
  25993. "logger": true,
  25994. "unsafeHeadersEnabled": true
  25995. };
  25996. config = config || {};
  25997. Object.keys(config).forEach(function (setting) {
  25998. if (setting in whitelist) {
  25999. self[setting] = config[setting];
  26000. }
  26001. });
  26002. self.logError = configureLogError(config);
  26003. },
  26004. addRequest: function addRequest(xhrObj) {
  26005. var server = this;
  26006. push.call(this.requests, xhrObj);
  26007. incrementRequestCount.call(this);
  26008. xhrObj.onSend = function () {
  26009. server.handleRequest(this);
  26010. if (server.respondImmediately) {
  26011. server.respond();
  26012. } else if (server.autoRespond && !server.responding) {
  26013. setTimeout(function () {
  26014. server.responding = false;
  26015. server.respond();
  26016. }, server.autoRespondAfter || 10);
  26017. server.responding = true;
  26018. }
  26019. };
  26020. },
  26021. getHTTPMethod: function getHTTPMethod(request) {
  26022. if (this.fakeHTTPMethods && /post/i.test(request.method)) {
  26023. var matches = (request.requestBody || "").match(/_method=([^\b;]+)/);
  26024. return matches ? matches[1] : request.method;
  26025. }
  26026. return request.method;
  26027. },
  26028. handleRequest: function handleRequest(xhr) {
  26029. if (xhr.async) {
  26030. push.call(this.queue, xhr);
  26031. } else {
  26032. this.processRequest(xhr);
  26033. }
  26034. },
  26035. logger: function () {
  26036. // no-op; override via configure()
  26037. },
  26038. logError: configureLogError({}),
  26039. log: function log(response, request) {
  26040. var str;
  26041. str = "Request:\n" + format(request) + "\n\n";
  26042. str += "Response:\n" + format(response) + "\n\n";
  26043. if (typeof this.logger === "function") {
  26044. this.logger(str);
  26045. }
  26046. },
  26047. respondWith: function respondWith(method, url, body) {
  26048. if (arguments.length === 1 && typeof method !== "function") {
  26049. this.response = responseArray(method);
  26050. return;
  26051. }
  26052. if (arguments.length === 1) {
  26053. body = method;
  26054. url = method = null;
  26055. }
  26056. if (arguments.length === 2) {
  26057. body = url;
  26058. url = method;
  26059. method = null;
  26060. }
  26061. push.call(this.responses, {
  26062. method: method,
  26063. url: typeof url === "string" && url !== "" ? pathToRegexp(url) : url,
  26064. response: typeof body === "function" ? body : responseArray(body)
  26065. });
  26066. },
  26067. respond: function respond() {
  26068. if (arguments.length > 0) {
  26069. this.respondWith.apply(this, arguments);
  26070. }
  26071. var queue = this.queue || [];
  26072. var requests = queue.splice(0, queue.length);
  26073. var self = this;
  26074. requests.forEach(function (request) {
  26075. self.processRequest(request);
  26076. });
  26077. },
  26078. processRequest: function processRequest(request) {
  26079. try {
  26080. if (request.aborted) {
  26081. return;
  26082. }
  26083. var response = this.response || [404, {}, ""];
  26084. if (this.responses) {
  26085. for (var l = this.responses.length, i = l - 1; i >= 0; i--) {
  26086. if (match.call(this, this.responses[i], request)) {
  26087. response = this.responses[i].response;
  26088. break;
  26089. }
  26090. }
  26091. }
  26092. if (request.readyState !== 4) {
  26093. this.log(response, request);
  26094. request.respond(response[0], response[1], response[2]);
  26095. }
  26096. } catch (e) {
  26097. this.logError("Fake server request processing", e);
  26098. }
  26099. },
  26100. restore: function restore() {
  26101. return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments);
  26102. },
  26103. getRequest: function getRequest(index) {
  26104. return this.requests[index] || null;
  26105. },
  26106. reset: function reset() {
  26107. this.resetBehavior();
  26108. this.resetHistory();
  26109. },
  26110. resetBehavior: function resetBehavior() {
  26111. this.responses.length = this.queue.length = 0;
  26112. },
  26113. resetHistory: function resetHistory() {
  26114. this.requests.length = this.requestCount = 0;
  26115. this.requestedOnce = this.requestedTwice = this.requestedThrice = this.requested = false;
  26116. this.firstRequest = this.secondRequest = this.thirdRequest = this.lastRequest = null;
  26117. }
  26118. };
  26119. module.exports = fakeServer;
  26120. },{"../configure-logger":74,"../fake-xhr":84,"./format":81,"path-to-regexp":87}],83:[function(require,module,exports){
  26121. /*global Blob */
  26122. "use strict";
  26123. exports.isSupported = (function () {
  26124. try {
  26125. return !!new Blob();
  26126. } catch (e) {
  26127. return false;
  26128. }
  26129. }());
  26130. },{}],84:[function(require,module,exports){
  26131. (function (global){
  26132. "use strict";
  26133. var TextEncoder = require("@sinonjs/text-encoding").TextEncoder;
  26134. var configureLogError = require("../configure-logger");
  26135. var sinonEvent = require("../event");
  26136. var extend = require("just-extend");
  26137. function getWorkingXHR(globalScope) {
  26138. var supportsXHR = typeof globalScope.XMLHttpRequest !== "undefined";
  26139. if (supportsXHR) {
  26140. return globalScope.XMLHttpRequest;
  26141. }
  26142. var supportsActiveX = typeof globalScope.ActiveXObject !== "undefined";
  26143. if (supportsActiveX) {
  26144. return function () {
  26145. return new globalScope.ActiveXObject("MSXML2.XMLHTTP.3.0");
  26146. };
  26147. }
  26148. return false;
  26149. }
  26150. var supportsProgress = typeof ProgressEvent !== "undefined";
  26151. var supportsCustomEvent = typeof CustomEvent !== "undefined";
  26152. var supportsFormData = typeof FormData !== "undefined";
  26153. var supportsArrayBuffer = typeof ArrayBuffer !== "undefined";
  26154. var supportsBlob = require("./blob").isSupported;
  26155. var isReactNative = global.navigator && global.navigator.product === "ReactNative";
  26156. var sinonXhr = { XMLHttpRequest: global.XMLHttpRequest };
  26157. sinonXhr.GlobalXMLHttpRequest = global.XMLHttpRequest;
  26158. sinonXhr.GlobalActiveXObject = global.ActiveXObject;
  26159. sinonXhr.supportsActiveX = typeof sinonXhr.GlobalActiveXObject !== "undefined";
  26160. sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest !== "undefined";
  26161. sinonXhr.workingXHR = getWorkingXHR(global);
  26162. sinonXhr.supportsTimeout =
  26163. (sinonXhr.supportsXHR && "timeout" in (new sinonXhr.GlobalXMLHttpRequest()));
  26164. sinonXhr.supportsCORS = isReactNative ||
  26165. (sinonXhr.supportsXHR && "withCredentials" in (new sinonXhr.GlobalXMLHttpRequest()));
  26166. // Ref: https://fetch.spec.whatwg.org/#forbidden-header-name
  26167. var unsafeHeaders = {
  26168. "Accept-Charset": true,
  26169. "Access-Control-Request-Headers": true,
  26170. "Access-Control-Request-Method": true,
  26171. "Accept-Encoding": true,
  26172. "Connection": true,
  26173. "Content-Length": true,
  26174. "Cookie": true,
  26175. "Cookie2": true,
  26176. "Content-Transfer-Encoding": true,
  26177. "Date": true,
  26178. "DNT": true,
  26179. "Expect": true,
  26180. "Host": true,
  26181. "Keep-Alive": true,
  26182. "Origin": true,
  26183. "Referer": true,
  26184. "TE": true,
  26185. "Trailer": true,
  26186. "Transfer-Encoding": true,
  26187. "Upgrade": true,
  26188. "User-Agent": true,
  26189. "Via": true
  26190. };
  26191. function EventTargetHandler() {
  26192. var self = this;
  26193. var events = ["loadstart", "progress", "abort", "error", "load", "timeout", "loadend"];
  26194. function addEventListener(eventName) {
  26195. self.addEventListener(eventName, function (event) {
  26196. var listener = self["on" + eventName];
  26197. if (listener && typeof listener === "function") {
  26198. listener.call(this, event);
  26199. }
  26200. });
  26201. }
  26202. events.forEach(addEventListener);
  26203. }
  26204. EventTargetHandler.prototype = sinonEvent.EventTarget;
  26205. // Note that for FakeXMLHttpRequest to work pre ES5
  26206. // we lose some of the alignment with the spec.
  26207. // To ensure as close a match as possible,
  26208. // set responseType before calling open, send or respond;
  26209. function FakeXMLHttpRequest(config) {
  26210. EventTargetHandler.call(this);
  26211. this.readyState = FakeXMLHttpRequest.UNSENT;
  26212. this.requestHeaders = {};
  26213. this.requestBody = null;
  26214. this.status = 0;
  26215. this.statusText = "";
  26216. this.upload = new EventTargetHandler();
  26217. this.responseType = "";
  26218. this.response = "";
  26219. this.logError = configureLogError(config);
  26220. if (sinonXhr.supportsTimeout) {
  26221. this.timeout = 0;
  26222. }
  26223. if (sinonXhr.supportsCORS) {
  26224. this.withCredentials = false;
  26225. }
  26226. if (typeof FakeXMLHttpRequest.onCreate === "function") {
  26227. FakeXMLHttpRequest.onCreate(this);
  26228. }
  26229. }
  26230. function verifyState(xhr) {
  26231. if (xhr.readyState !== FakeXMLHttpRequest.OPENED) {
  26232. throw new Error("INVALID_STATE_ERR");
  26233. }
  26234. if (xhr.sendFlag) {
  26235. throw new Error("INVALID_STATE_ERR");
  26236. }
  26237. }
  26238. function normalizeHeaderValue(value) {
  26239. // Ref: https://fetch.spec.whatwg.org/#http-whitespace-bytes
  26240. /*eslint no-control-regex: "off"*/
  26241. return value.replace(/^[\x09\x0A\x0D\x20]+|[\x09\x0A\x0D\x20]+$/g, "");
  26242. }
  26243. function getHeader(headers, header) {
  26244. var foundHeader = Object.keys(headers).filter(function (h) {
  26245. return h.toLowerCase() === header.toLowerCase();
  26246. });
  26247. return foundHeader[0] || null;
  26248. }
  26249. function excludeSetCookie2Header(header) {
  26250. return !/^Set-Cookie2?$/i.test(header);
  26251. }
  26252. // largest arity in XHR is 5 - XHR#open
  26253. var apply = function (obj, method, args) {
  26254. switch (args.length) {
  26255. case 0: return obj[method]();
  26256. case 1: return obj[method](args[0]);
  26257. case 2: return obj[method](args[0], args[1]);
  26258. case 3: return obj[method](args[0], args[1], args[2]);
  26259. case 4: return obj[method](args[0], args[1], args[2], args[3]);
  26260. case 5: return obj[method](args[0], args[1], args[2], args[3], args[4]);
  26261. default: throw new Error("Unhandled case");
  26262. }
  26263. };
  26264. FakeXMLHttpRequest.filters = [];
  26265. FakeXMLHttpRequest.addFilter = function addFilter(fn) {
  26266. this.filters.push(fn);
  26267. };
  26268. FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) {
  26269. var xhr = new sinonXhr.workingXHR(); // eslint-disable-line new-cap
  26270. [
  26271. "open",
  26272. "setRequestHeader",
  26273. "abort",
  26274. "getResponseHeader",
  26275. "getAllResponseHeaders",
  26276. "addEventListener",
  26277. "overrideMimeType",
  26278. "removeEventListener"
  26279. ].forEach(function (method) {
  26280. fakeXhr[method] = function () {
  26281. return apply(xhr, method, arguments);
  26282. };
  26283. });
  26284. fakeXhr.send = function () {
  26285. // Ref: https://xhr.spec.whatwg.org/#the-responsetype-attribute
  26286. if (xhr.responseType !== fakeXhr.responseType) {
  26287. xhr.responseType = fakeXhr.responseType;
  26288. }
  26289. return apply(xhr, "send", arguments);
  26290. };
  26291. var copyAttrs = function (args) {
  26292. args.forEach(function (attr) {
  26293. fakeXhr[attr] = xhr[attr];
  26294. });
  26295. };
  26296. var stateChangeStart = function () {
  26297. fakeXhr.readyState = xhr.readyState;
  26298. if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) {
  26299. copyAttrs(["status", "statusText"]);
  26300. }
  26301. if (xhr.readyState >= FakeXMLHttpRequest.LOADING) {
  26302. copyAttrs(["response"]);
  26303. if (xhr.responseType === "" || xhr.responseType === "text") {
  26304. copyAttrs(["responseText"]);
  26305. }
  26306. }
  26307. if (
  26308. xhr.readyState === FakeXMLHttpRequest.DONE &&
  26309. (xhr.responseType === "" || xhr.responseType === "document")
  26310. ) {
  26311. copyAttrs(["responseXML"]);
  26312. }
  26313. };
  26314. var stateChangeEnd = function () {
  26315. if (fakeXhr.onreadystatechange) {
  26316. fakeXhr.onreadystatechange.call(fakeXhr, { target: fakeXhr, currentTarget: fakeXhr });
  26317. }
  26318. };
  26319. var stateChange = function stateChange() {
  26320. stateChangeStart();
  26321. stateChangeEnd();
  26322. };
  26323. if (xhr.addEventListener) {
  26324. xhr.addEventListener("readystatechange", stateChangeStart);
  26325. Object.keys(fakeXhr.eventListeners).forEach(function (event) {
  26326. /*eslint-disable no-loop-func*/
  26327. fakeXhr.eventListeners[event].forEach(function (handler) {
  26328. xhr.addEventListener(event, handler.listener, {
  26329. capture: handler.capture,
  26330. once: handler.once
  26331. });
  26332. });
  26333. /*eslint-enable no-loop-func*/
  26334. });
  26335. xhr.addEventListener("readystatechange", stateChangeEnd);
  26336. } else {
  26337. xhr.onreadystatechange = stateChange;
  26338. }
  26339. apply(xhr, "open", xhrArgs);
  26340. };
  26341. FakeXMLHttpRequest.useFilters = false;
  26342. function verifyRequestOpened(xhr) {
  26343. if (xhr.readyState !== FakeXMLHttpRequest.OPENED) {
  26344. throw new Error("INVALID_STATE_ERR - " + xhr.readyState);
  26345. }
  26346. }
  26347. function verifyRequestSent(xhr) {
  26348. if (xhr.readyState === FakeXMLHttpRequest.DONE) {
  26349. throw new Error("Request done");
  26350. }
  26351. }
  26352. function verifyHeadersReceived(xhr) {
  26353. if (xhr.async && xhr.readyState !== FakeXMLHttpRequest.HEADERS_RECEIVED) {
  26354. throw new Error("No headers received");
  26355. }
  26356. }
  26357. function verifyResponseBodyType(body, responseType) {
  26358. var error = null;
  26359. var isString = typeof body === "string";
  26360. if (responseType === "arraybuffer") {
  26361. if (!isString && !(body instanceof ArrayBuffer)) {
  26362. error = new Error("Attempted to respond to fake XMLHttpRequest with " +
  26363. body + ", which is not a string or ArrayBuffer.");
  26364. error.name = "InvalidBodyException";
  26365. }
  26366. }
  26367. else if (!isString) {
  26368. error = new Error("Attempted to respond to fake XMLHttpRequest with " +
  26369. body + ", which is not a string.");
  26370. error.name = "InvalidBodyException";
  26371. }
  26372. if (error) {
  26373. throw error;
  26374. }
  26375. }
  26376. function convertToArrayBuffer(body, encoding) {
  26377. if (body instanceof ArrayBuffer) {
  26378. return body;
  26379. }
  26380. return new TextEncoder(encoding || "utf-8").encode(body).buffer;
  26381. }
  26382. function isXmlContentType(contentType) {
  26383. return !contentType || /(text\/xml)|(application\/xml)|(\+xml)/.test(contentType);
  26384. }
  26385. function convertResponseBody(responseType, contentType, body) {
  26386. if (responseType === "" || responseType === "text") {
  26387. return body;
  26388. } else if (supportsArrayBuffer && responseType === "arraybuffer") {
  26389. return convertToArrayBuffer(body);
  26390. } else if (responseType === "json") {
  26391. try {
  26392. return JSON.parse(body);
  26393. } catch (e) {
  26394. // Return parsing failure as null
  26395. return null;
  26396. }
  26397. } else if (supportsBlob && responseType === "blob") {
  26398. var blobOptions = {};
  26399. if (contentType) {
  26400. blobOptions.type = contentType;
  26401. }
  26402. return new Blob([convertToArrayBuffer(body)], blobOptions);
  26403. } else if (responseType === "document") {
  26404. if (isXmlContentType(contentType)) {
  26405. return FakeXMLHttpRequest.parseXML(body);
  26406. }
  26407. return null;
  26408. }
  26409. throw new Error("Invalid responseType " + responseType);
  26410. }
  26411. function clearResponse(xhr) {
  26412. if (xhr.responseType === "" || xhr.responseType === "text") {
  26413. xhr.response = xhr.responseText = "";
  26414. } else {
  26415. xhr.response = xhr.responseText = null;
  26416. }
  26417. xhr.responseXML = null;
  26418. }
  26419. /**
  26420. * Steps to follow when there is an error, according to:
  26421. * https://xhr.spec.whatwg.org/#request-error-steps
  26422. */
  26423. function requestErrorSteps(xhr) {
  26424. clearResponse(xhr);
  26425. xhr.errorFlag = true;
  26426. xhr.requestHeaders = {};
  26427. xhr.responseHeaders = {};
  26428. if (xhr.readyState !== FakeXMLHttpRequest.UNSENT && xhr.sendFlag
  26429. && xhr.readyState !== FakeXMLHttpRequest.DONE) {
  26430. xhr.readyStateChange(FakeXMLHttpRequest.DONE);
  26431. xhr.sendFlag = false;
  26432. }
  26433. }
  26434. FakeXMLHttpRequest.parseXML = function parseXML(text) {
  26435. // Treat empty string as parsing failure
  26436. if (text !== "") {
  26437. try {
  26438. if (typeof DOMParser !== "undefined") {
  26439. var parser = new DOMParser();
  26440. var parsererrorNS = "";
  26441. try {
  26442. var parsererrors = parser
  26443. .parseFromString("INVALID", "text/xml")
  26444. .getElementsByTagName("parsererror");
  26445. if (parsererrors.length) {
  26446. parsererrorNS = parsererrors[0].namespaceURI;
  26447. }
  26448. } catch (e) {
  26449. // passing invalid XML makes IE11 throw
  26450. // so no namespace needs to be determined
  26451. }
  26452. var result;
  26453. try {
  26454. result = parser.parseFromString(text, "text/xml");
  26455. } catch (err) {
  26456. return null;
  26457. }
  26458. return result.getElementsByTagNameNS(parsererrorNS, "parsererror").length
  26459. ? null : result;
  26460. }
  26461. var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM");
  26462. xmlDoc.async = "false";
  26463. xmlDoc.loadXML(text);
  26464. return xmlDoc.parseError.errorCode !== 0
  26465. ? null : xmlDoc;
  26466. } catch (e) {
  26467. // Unable to parse XML - no biggie
  26468. }
  26469. }
  26470. return null;
  26471. };
  26472. FakeXMLHttpRequest.statusCodes = {
  26473. 100: "Continue",
  26474. 101: "Switching Protocols",
  26475. 200: "OK",
  26476. 201: "Created",
  26477. 202: "Accepted",
  26478. 203: "Non-Authoritative Information",
  26479. 204: "No Content",
  26480. 205: "Reset Content",
  26481. 206: "Partial Content",
  26482. 207: "Multi-Status",
  26483. 300: "Multiple Choice",
  26484. 301: "Moved Permanently",
  26485. 302: "Found",
  26486. 303: "See Other",
  26487. 304: "Not Modified",
  26488. 305: "Use Proxy",
  26489. 307: "Temporary Redirect",
  26490. 400: "Bad Request",
  26491. 401: "Unauthorized",
  26492. 402: "Payment Required",
  26493. 403: "Forbidden",
  26494. 404: "Not Found",
  26495. 405: "Method Not Allowed",
  26496. 406: "Not Acceptable",
  26497. 407: "Proxy Authentication Required",
  26498. 408: "Request Timeout",
  26499. 409: "Conflict",
  26500. 410: "Gone",
  26501. 411: "Length Required",
  26502. 412: "Precondition Failed",
  26503. 413: "Request Entity Too Large",
  26504. 414: "Request-URI Too Long",
  26505. 415: "Unsupported Media Type",
  26506. 416: "Requested Range Not Satisfiable",
  26507. 417: "Expectation Failed",
  26508. 422: "Unprocessable Entity",
  26509. 500: "Internal Server Error",
  26510. 501: "Not Implemented",
  26511. 502: "Bad Gateway",
  26512. 503: "Service Unavailable",
  26513. 504: "Gateway Timeout",
  26514. 505: "HTTP Version Not Supported"
  26515. };
  26516. extend(FakeXMLHttpRequest.prototype, sinonEvent.EventTarget, {
  26517. async: true,
  26518. open: function open(method, url, async, username, password) {
  26519. this.method = method;
  26520. this.url = url;
  26521. this.async = typeof async === "boolean" ? async : true;
  26522. this.username = username;
  26523. this.password = password;
  26524. clearResponse(this);
  26525. this.requestHeaders = {};
  26526. this.sendFlag = false;
  26527. if (FakeXMLHttpRequest.useFilters === true) {
  26528. var xhrArgs = arguments;
  26529. var defake = FakeXMLHttpRequest.filters.some(function (filter) {
  26530. return filter.apply(this, xhrArgs);
  26531. });
  26532. if (defake) {
  26533. FakeXMLHttpRequest.defake(this, arguments);
  26534. return;
  26535. }
  26536. }
  26537. this.readyStateChange(FakeXMLHttpRequest.OPENED);
  26538. },
  26539. readyStateChange: function readyStateChange(state) {
  26540. this.readyState = state;
  26541. var readyStateChangeEvent = new sinonEvent.Event("readystatechange", false, false, this);
  26542. var event, progress;
  26543. if (typeof this.onreadystatechange === "function") {
  26544. try {
  26545. this.onreadystatechange(readyStateChangeEvent);
  26546. } catch (e) {
  26547. this.logError("Fake XHR onreadystatechange handler", e);
  26548. }
  26549. }
  26550. if (this.readyState === FakeXMLHttpRequest.DONE) {
  26551. if (this.timedOut || this.aborted || this.status === 0) {
  26552. progress = {loaded: 0, total: 0};
  26553. event = (this.timedOut && "timeout") || (this.aborted && "abort") || "error";
  26554. } else {
  26555. progress = {loaded: 100, total: 100};
  26556. event = "load";
  26557. }
  26558. if (supportsProgress) {
  26559. this.upload.dispatchEvent(new sinonEvent.ProgressEvent("progress", progress, this));
  26560. this.upload.dispatchEvent(new sinonEvent.ProgressEvent(event, progress, this));
  26561. this.upload.dispatchEvent(new sinonEvent.ProgressEvent("loadend", progress, this));
  26562. }
  26563. this.dispatchEvent(new sinonEvent.ProgressEvent("progress", progress, this));
  26564. this.dispatchEvent(new sinonEvent.ProgressEvent(event, progress, this));
  26565. this.dispatchEvent(new sinonEvent.ProgressEvent("loadend", progress, this));
  26566. }
  26567. this.dispatchEvent(readyStateChangeEvent);
  26568. },
  26569. // Ref https://xhr.spec.whatwg.org/#the-setrequestheader()-method
  26570. setRequestHeader: function setRequestHeader(header, value) {
  26571. if (typeof value !== "string") {
  26572. throw new TypeError("By RFC7230, section 3.2.4, header values should be strings. Got " + typeof value);
  26573. }
  26574. verifyState(this);
  26575. var checkUnsafeHeaders = true;
  26576. if (typeof this.unsafeHeadersEnabled === "function") {
  26577. checkUnsafeHeaders = this.unsafeHeadersEnabled();
  26578. }
  26579. if (checkUnsafeHeaders && (getHeader(unsafeHeaders, header) !== null || /^(Sec-|Proxy-)/i.test(header))) {
  26580. throw new Error("Refused to set unsafe header \"" + header + "\"");
  26581. }
  26582. value = normalizeHeaderValue(value);
  26583. var existingHeader = getHeader(this.requestHeaders, header);
  26584. if (existingHeader) {
  26585. this.requestHeaders[existingHeader] += ", " + value;
  26586. } else {
  26587. this.requestHeaders[header] = value;
  26588. }
  26589. },
  26590. setStatus: function setStatus(status) {
  26591. var sanitizedStatus = typeof status === "number" ? status : 200;
  26592. verifyRequestOpened(this);
  26593. this.status = sanitizedStatus;
  26594. this.statusText = FakeXMLHttpRequest.statusCodes[sanitizedStatus];
  26595. },
  26596. // Helps testing
  26597. setResponseHeaders: function setResponseHeaders(headers) {
  26598. verifyRequestOpened(this);
  26599. var responseHeaders = this.responseHeaders = {};
  26600. Object.keys(headers).forEach(function (header) {
  26601. responseHeaders[header] = headers[header];
  26602. });
  26603. if (this.async) {
  26604. this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED);
  26605. } else {
  26606. this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED;
  26607. }
  26608. },
  26609. // Currently treats ALL data as a DOMString (i.e. no Document)
  26610. send: function send(data) {
  26611. verifyState(this);
  26612. if (!/^(head)$/i.test(this.method)) {
  26613. var contentType = getHeader(this.requestHeaders, "Content-Type");
  26614. if (this.requestHeaders[contentType]) {
  26615. var value = this.requestHeaders[contentType].split(";");
  26616. this.requestHeaders[contentType] = value[0] + ";charset=utf-8";
  26617. } else if (supportsFormData && !(data instanceof FormData)) {
  26618. this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8";
  26619. }
  26620. this.requestBody = data;
  26621. }
  26622. this.errorFlag = false;
  26623. this.sendFlag = this.async;
  26624. clearResponse(this);
  26625. this.readyStateChange(FakeXMLHttpRequest.OPENED);
  26626. if (typeof this.onSend === "function") {
  26627. this.onSend(this);
  26628. }
  26629. // Only listen if setInterval and Date are a stubbed.
  26630. if (sinonXhr.supportsTimeout && typeof setInterval.clock === "object" && typeof Date.clock === "object") {
  26631. var initiatedTime = Date.now();
  26632. var self = this;
  26633. // Listen to any possible tick by fake timers and check to see if timeout has
  26634. // been exceeded. It's important to note that timeout can be changed while a request
  26635. // is in flight, so we must check anytime the end user forces a clock tick to make
  26636. // sure timeout hasn't changed.
  26637. // https://xhr.spec.whatwg.org/#dfnReturnLink-2
  26638. var clearIntervalId = setInterval(function () {
  26639. // Check if the readyState has been reset or is done. If this is the case, there
  26640. // should be no timeout. This will also prevent aborted requests and
  26641. // fakeServerWithClock from triggering unnecessary responses.
  26642. if (self.readyState === FakeXMLHttpRequest.UNSENT
  26643. || self.readyState === FakeXMLHttpRequest.DONE) {
  26644. clearInterval(clearIntervalId);
  26645. } else if (typeof self.timeout === "number" && self.timeout > 0) {
  26646. if (Date.now() >= (initiatedTime + self.timeout)) {
  26647. self.triggerTimeout();
  26648. clearInterval(clearIntervalId);
  26649. }
  26650. }
  26651. }, 1);
  26652. }
  26653. this.dispatchEvent(new sinonEvent.Event("loadstart", false, false, this));
  26654. },
  26655. abort: function abort() {
  26656. this.aborted = true;
  26657. requestErrorSteps(this);
  26658. this.readyState = FakeXMLHttpRequest.UNSENT;
  26659. },
  26660. error: function () {
  26661. clearResponse(this);
  26662. this.errorFlag = true;
  26663. this.requestHeaders = {};
  26664. this.responseHeaders = {};
  26665. this.readyStateChange(FakeXMLHttpRequest.DONE);
  26666. },
  26667. triggerTimeout: function triggerTimeout() {
  26668. if (sinonXhr.supportsTimeout) {
  26669. this.timedOut = true;
  26670. requestErrorSteps(this);
  26671. }
  26672. },
  26673. getResponseHeader: function getResponseHeader(header) {
  26674. if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) {
  26675. return null;
  26676. }
  26677. if (/^Set-Cookie2?$/i.test(header)) {
  26678. return null;
  26679. }
  26680. header = getHeader(this.responseHeaders, header);
  26681. return this.responseHeaders[header] || null;
  26682. },
  26683. getAllResponseHeaders: function getAllResponseHeaders() {
  26684. if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) {
  26685. return "";
  26686. }
  26687. var responseHeaders = this.responseHeaders;
  26688. var headers = Object.keys(responseHeaders)
  26689. .filter(excludeSetCookie2Header)
  26690. .reduce(function (prev, header) {
  26691. var value = responseHeaders[header];
  26692. return prev + (header + ": " + value + "\r\n");
  26693. }, "");
  26694. return headers;
  26695. },
  26696. setResponseBody: function setResponseBody(body) {
  26697. verifyRequestSent(this);
  26698. verifyHeadersReceived(this);
  26699. verifyResponseBodyType(body, this.responseType);
  26700. var contentType = this.overriddenMimeType || this.getResponseHeader("Content-Type");
  26701. var isTextResponse = this.responseType === "" || this.responseType === "text";
  26702. clearResponse(this);
  26703. if (this.async) {
  26704. var chunkSize = this.chunkSize || 10;
  26705. var index = 0;
  26706. do {
  26707. this.readyStateChange(FakeXMLHttpRequest.LOADING);
  26708. if (isTextResponse) {
  26709. this.responseText = this.response += body.substring(index, index + chunkSize);
  26710. }
  26711. index += chunkSize;
  26712. } while (index < body.length);
  26713. }
  26714. this.response = convertResponseBody(this.responseType, contentType, body);
  26715. if (isTextResponse) {
  26716. this.responseText = this.response;
  26717. }
  26718. if (this.responseType === "document") {
  26719. this.responseXML = this.response;
  26720. } else if (this.responseType === "" && isXmlContentType(contentType)) {
  26721. this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText);
  26722. }
  26723. this.readyStateChange(FakeXMLHttpRequest.DONE);
  26724. },
  26725. respond: function respond(status, headers, body) {
  26726. this.setStatus(status);
  26727. this.setResponseHeaders(headers || {});
  26728. this.setResponseBody(body || "");
  26729. },
  26730. uploadProgress: function uploadProgress(progressEventRaw) {
  26731. if (supportsProgress) {
  26732. this.upload.dispatchEvent(new sinonEvent.ProgressEvent("progress", progressEventRaw, this.upload));
  26733. }
  26734. },
  26735. downloadProgress: function downloadProgress(progressEventRaw) {
  26736. if (supportsProgress) {
  26737. this.dispatchEvent(new sinonEvent.ProgressEvent("progress", progressEventRaw, this));
  26738. }
  26739. },
  26740. uploadError: function uploadError(error) {
  26741. if (supportsCustomEvent) {
  26742. this.upload.dispatchEvent(new sinonEvent.CustomEvent("error", {detail: error}));
  26743. }
  26744. },
  26745. overrideMimeType: function overrideMimeType(type) {
  26746. if (this.readyState >= FakeXMLHttpRequest.LOADING) {
  26747. throw new Error("INVALID_STATE_ERR");
  26748. }
  26749. this.overriddenMimeType = type;
  26750. }
  26751. });
  26752. var states = {
  26753. UNSENT: 0,
  26754. OPENED: 1,
  26755. HEADERS_RECEIVED: 2,
  26756. LOADING: 3,
  26757. DONE: 4
  26758. };
  26759. extend(FakeXMLHttpRequest, states);
  26760. extend(FakeXMLHttpRequest.prototype, states);
  26761. function useFakeXMLHttpRequest() {
  26762. FakeXMLHttpRequest.restore = function restore(keepOnCreate) {
  26763. if (sinonXhr.supportsXHR) {
  26764. global.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest;
  26765. }
  26766. if (sinonXhr.supportsActiveX) {
  26767. global.ActiveXObject = sinonXhr.GlobalActiveXObject;
  26768. }
  26769. delete FakeXMLHttpRequest.restore;
  26770. if (keepOnCreate !== true) {
  26771. delete FakeXMLHttpRequest.onCreate;
  26772. }
  26773. };
  26774. if (sinonXhr.supportsXHR) {
  26775. global.XMLHttpRequest = FakeXMLHttpRequest;
  26776. }
  26777. if (sinonXhr.supportsActiveX) {
  26778. global.ActiveXObject = function ActiveXObject(objId) {
  26779. if (objId === "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) {
  26780. return new FakeXMLHttpRequest();
  26781. }
  26782. return new sinonXhr.GlobalActiveXObject(objId);
  26783. };
  26784. }
  26785. return FakeXMLHttpRequest;
  26786. }
  26787. module.exports = {
  26788. xhr: sinonXhr,
  26789. FakeXMLHttpRequest: FakeXMLHttpRequest,
  26790. useFakeXMLHttpRequest: useFakeXMLHttpRequest
  26791. };
  26792. }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
  26793. },{"../configure-logger":74,"../event":78,"./blob":83,"@sinonjs/text-encoding":66,"just-extend":71}],85:[function(require,module,exports){
  26794. "use strict";
  26795. module.exports = {
  26796. fakeServer: require("./fake-server"),
  26797. fakeServerWithClock: require("./fake-server/fake-server-with-clock"),
  26798. fakeXhr: require("./fake-xhr")
  26799. };
  26800. },{"./fake-server":82,"./fake-server/fake-server-with-clock":80,"./fake-xhr":84}],86:[function(require,module,exports){
  26801. (function (global){
  26802. "use strict";
  26803. function withGlobal(_global) {
  26804. var userAgent = _global.navigator && _global.navigator.userAgent;
  26805. var isRunningInIE = userAgent && userAgent.indexOf("MSIE ") > -1;
  26806. var maxTimeout = Math.pow(2, 31) - 1; //see https://heycam.github.io/webidl/#abstract-opdef-converttoint
  26807. // Make properties writable in IE, as per
  26808. // http://www.adequatelygood.com/Replacing-setTimeout-Globally.html
  26809. if (isRunningInIE) {
  26810. _global.setTimeout = _global.setTimeout;
  26811. _global.clearTimeout = _global.clearTimeout;
  26812. _global.setInterval = _global.setInterval;
  26813. _global.clearInterval = _global.clearInterval;
  26814. _global.Date = _global.Date;
  26815. }
  26816. // setImmediate is not a standard function
  26817. // avoid adding the prop to the window object if not present
  26818. if (_global.setImmediate !== undefined) {
  26819. _global.setImmediate = _global.setImmediate;
  26820. _global.clearImmediate = _global.clearImmediate;
  26821. }
  26822. // node expects setTimeout/setInterval to return a fn object w/ .ref()/.unref()
  26823. // browsers, a number.
  26824. // see https://github.com/cjohansen/Sinon.JS/pull/436
  26825. var NOOP = function () { return undefined; };
  26826. var timeoutResult = _global.setTimeout(NOOP, 0);
  26827. var addTimerReturnsObject = typeof timeoutResult === "object";
  26828. var hrtimePresent = (_global.process && typeof _global.process.hrtime === "function");
  26829. var nextTickPresent = (_global.process && typeof _global.process.nextTick === "function");
  26830. var performancePresent = (_global.performance && typeof _global.performance.now === "function");
  26831. var hasPerformancePrototype = (_global.Performance && (typeof _global.Performance).match(/^(function|object)$/));
  26832. var requestAnimationFramePresent = (
  26833. _global.requestAnimationFrame && typeof _global.requestAnimationFrame === "function"
  26834. );
  26835. var cancelAnimationFramePresent = (
  26836. _global.cancelAnimationFrame && typeof _global.cancelAnimationFrame === "function"
  26837. );
  26838. _global.clearTimeout(timeoutResult);
  26839. var NativeDate = _global.Date;
  26840. var uniqueTimerId = 1;
  26841. function isNumberFinite(num) {
  26842. if (Number.isFinite) {
  26843. return Number.isFinite(num);
  26844. }
  26845. if (typeof num !== "number") {
  26846. return false;
  26847. }
  26848. return isFinite(num);
  26849. }
  26850. /**
  26851. * Parse strings like "01:10:00" (meaning 1 hour, 10 minutes, 0 seconds) into
  26852. * number of milliseconds. This is used to support human-readable strings passed
  26853. * to clock.tick()
  26854. */
  26855. function parseTime(str) {
  26856. if (!str) {
  26857. return 0;
  26858. }
  26859. var strings = str.split(":");
  26860. var l = strings.length;
  26861. var i = l;
  26862. var ms = 0;
  26863. var parsed;
  26864. if (l > 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) {
  26865. throw new Error("tick only understands numbers, 'm:s' and 'h:m:s'. Each part must be two digits");
  26866. }
  26867. while (i--) {
  26868. parsed = parseInt(strings[i], 10);
  26869. if (parsed >= 60) {
  26870. throw new Error("Invalid time " + str);
  26871. }
  26872. ms += parsed * Math.pow(60, (l - i - 1));
  26873. }
  26874. return ms * 1000;
  26875. }
  26876. /**
  26877. * Floor function that also works for negative numbers
  26878. */
  26879. function fixedFloor(n) {
  26880. return (n >= 0 ? Math.floor(n) : Math.ceil(n));
  26881. }
  26882. /**
  26883. * % operator that also works for negative numbers
  26884. */
  26885. function fixedModulo(n, m) {
  26886. return Math.round(((n % m) + m) % m);
  26887. }
  26888. /**
  26889. * Used to grok the `now` parameter to createClock.
  26890. * @param epoch {Date|number} the system time
  26891. */
  26892. function getEpoch(epoch) {
  26893. if (!epoch) { return 0; }
  26894. if (typeof epoch.getTime === "function") { return epoch.getTime(); }
  26895. if (typeof epoch === "number") { return epoch; }
  26896. throw new TypeError("now should be milliseconds since UNIX epoch");
  26897. }
  26898. function inRange(from, to, timer) {
  26899. return timer && timer.callAt >= from && timer.callAt <= to;
  26900. }
  26901. function mirrorDateProperties(target, source) {
  26902. var prop;
  26903. for (prop in source) {
  26904. if (source.hasOwnProperty(prop)) {
  26905. target[prop] = source[prop];
  26906. }
  26907. }
  26908. // set special now implementation
  26909. if (source.now) {
  26910. target.now = function now() {
  26911. return target.clock.now;
  26912. };
  26913. } else {
  26914. delete target.now;
  26915. }
  26916. // set special toSource implementation
  26917. if (source.toSource) {
  26918. target.toSource = function toSource() {
  26919. return source.toSource();
  26920. };
  26921. } else {
  26922. delete target.toSource;
  26923. }
  26924. // set special toString implementation
  26925. target.toString = function toString() {
  26926. return source.toString();
  26927. };
  26928. target.prototype = source.prototype;
  26929. target.parse = source.parse;
  26930. target.UTC = source.UTC;
  26931. target.prototype.toUTCString = source.prototype.toUTCString;
  26932. return target;
  26933. }
  26934. function createDate() {
  26935. function ClockDate(year, month, date, hour, minute, second, ms) {
  26936. // Defensive and verbose to avoid potential harm in passing
  26937. // explicit undefined when user does not pass argument
  26938. switch (arguments.length) {
  26939. case 0:
  26940. return new NativeDate(ClockDate.clock.now);
  26941. case 1:
  26942. return new NativeDate(year);
  26943. case 2:
  26944. return new NativeDate(year, month);
  26945. case 3:
  26946. return new NativeDate(year, month, date);
  26947. case 4:
  26948. return new NativeDate(year, month, date, hour);
  26949. case 5:
  26950. return new NativeDate(year, month, date, hour, minute);
  26951. case 6:
  26952. return new NativeDate(year, month, date, hour, minute, second);
  26953. default:
  26954. return new NativeDate(year, month, date, hour, minute, second, ms);
  26955. }
  26956. }
  26957. return mirrorDateProperties(ClockDate, NativeDate);
  26958. }
  26959. function enqueueJob(clock, job) {
  26960. // enqueues a microtick-deferred task - ecma262/#sec-enqueuejob
  26961. if (!clock.jobs) {
  26962. clock.jobs = [];
  26963. }
  26964. clock.jobs.push(job);
  26965. }
  26966. function runJobs(clock) {
  26967. // runs all microtick-deferred tasks - ecma262/#sec-runjobs
  26968. if (!clock.jobs) {
  26969. return;
  26970. }
  26971. for (var i = 0; i < clock.jobs.length; i++) {
  26972. var job = clock.jobs[i];
  26973. job.func.apply(null, job.args);
  26974. if (clock.loopLimit && i > clock.loopLimit) {
  26975. throw new Error("Aborting after running " + clock.loopLimit + " timers, assuming an infinite loop!");
  26976. }
  26977. }
  26978. clock.jobs = [];
  26979. }
  26980. function addTimer(clock, timer) {
  26981. if (timer.func === undefined) {
  26982. throw new Error("Callback must be provided to timer calls");
  26983. }
  26984. timer.type = timer.immediate ? "Immediate" : "Timeout";
  26985. if (timer.hasOwnProperty("delay")) {
  26986. if (!isNumberFinite(timer.delay)) {
  26987. timer.delay = 0;
  26988. }
  26989. timer.delay = timer.delay > maxTimeout ? 1 : timer.delay;
  26990. timer.delay = Math.max(0, timer.delay);
  26991. }
  26992. if (timer.hasOwnProperty("interval")) {
  26993. timer.type = "Interval";
  26994. timer.interval = timer.interval > maxTimeout ? 1 : timer.interval;
  26995. }
  26996. if (timer.hasOwnProperty("animation")) {
  26997. timer.type = "AnimationFrame";
  26998. timer.animation = true;
  26999. }
  27000. if (!clock.timers) {
  27001. clock.timers = {};
  27002. }
  27003. timer.id = uniqueTimerId++;
  27004. timer.createdAt = clock.now;
  27005. timer.callAt = clock.now + (parseInt(timer.delay) || (clock.duringTick ? 1 : 0));
  27006. clock.timers[timer.id] = timer;
  27007. if (addTimerReturnsObject) {
  27008. var res = {
  27009. id: timer.id,
  27010. ref: function () { return res; },
  27011. unref: function () { return res; },
  27012. refresh: function () { return res; }
  27013. };
  27014. return res;
  27015. }
  27016. return timer.id;
  27017. }
  27018. /* eslint consistent-return: "off" */
  27019. function compareTimers(a, b) {
  27020. // Sort first by absolute timing
  27021. if (a.callAt < b.callAt) {
  27022. return -1;
  27023. }
  27024. if (a.callAt > b.callAt) {
  27025. return 1;
  27026. }
  27027. // Sort next by immediate, immediate timers take precedence
  27028. if (a.immediate && !b.immediate) {
  27029. return -1;
  27030. }
  27031. if (!a.immediate && b.immediate) {
  27032. return 1;
  27033. }
  27034. // Sort next by creation time, earlier-created timers take precedence
  27035. if (a.createdAt < b.createdAt) {
  27036. return -1;
  27037. }
  27038. if (a.createdAt > b.createdAt) {
  27039. return 1;
  27040. }
  27041. // Sort next by id, lower-id timers take precedence
  27042. if (a.id < b.id) {
  27043. return -1;
  27044. }
  27045. if (a.id > b.id) {
  27046. return 1;
  27047. }
  27048. // As timer ids are unique, no fallback `0` is necessary
  27049. }
  27050. function firstTimerInRange(clock, from, to) {
  27051. var timers = clock.timers;
  27052. var timer = null;
  27053. var id, isInRange;
  27054. for (id in timers) {
  27055. if (timers.hasOwnProperty(id)) {
  27056. isInRange = inRange(from, to, timers[id]);
  27057. if (isInRange && (!timer || compareTimers(timer, timers[id]) === 1)) {
  27058. timer = timers[id];
  27059. }
  27060. }
  27061. }
  27062. return timer;
  27063. }
  27064. function firstTimer(clock) {
  27065. var timers = clock.timers;
  27066. var timer = null;
  27067. var id;
  27068. for (id in timers) {
  27069. if (timers.hasOwnProperty(id)) {
  27070. if (!timer || compareTimers(timer, timers[id]) === 1) {
  27071. timer = timers[id];
  27072. }
  27073. }
  27074. }
  27075. return timer;
  27076. }
  27077. function lastTimer(clock) {
  27078. var timers = clock.timers;
  27079. var timer = null;
  27080. var id;
  27081. for (id in timers) {
  27082. if (timers.hasOwnProperty(id)) {
  27083. if (!timer || compareTimers(timer, timers[id]) === -1) {
  27084. timer = timers[id];
  27085. }
  27086. }
  27087. }
  27088. return timer;
  27089. }
  27090. function callTimer(clock, timer) {
  27091. if (typeof timer.interval === "number") {
  27092. clock.timers[timer.id].callAt += timer.interval;
  27093. } else {
  27094. delete clock.timers[timer.id];
  27095. }
  27096. if (typeof timer.func === "function") {
  27097. timer.func.apply(null, timer.args);
  27098. } else {
  27099. /* eslint no-eval: "off" */
  27100. eval(timer.func);
  27101. }
  27102. }
  27103. function clearTimer(clock, timerId, ttype) {
  27104. if (!timerId) {
  27105. // null appears to be allowed in most browsers, and appears to be
  27106. // relied upon by some libraries, like Bootstrap carousel
  27107. return;
  27108. }
  27109. if (!clock.timers) {
  27110. clock.timers = {};
  27111. }
  27112. // in Node, timerId is an object with .ref()/.unref(), and
  27113. // its .id field is the actual timer id.
  27114. if (typeof timerId === "object") {
  27115. timerId = timerId.id;
  27116. }
  27117. if (clock.timers.hasOwnProperty(timerId)) {
  27118. // check that the ID matches a timer of the correct type
  27119. var timer = clock.timers[timerId];
  27120. if (timer.type === ttype) {
  27121. delete clock.timers[timerId];
  27122. } else {
  27123. var clear = ttype === "AnimationFrame" ? "cancelAnimationFrame" : "clear" + ttype;
  27124. var schedule = timer.type === "AnimationFrame" ? "requestAnimationFrame" : "set" + timer.type;
  27125. throw new Error("Cannot clear timer: timer created with " + schedule
  27126. + "() but cleared with " + clear + "()");
  27127. }
  27128. }
  27129. }
  27130. function uninstall(clock, target, config) {
  27131. var method,
  27132. i,
  27133. l;
  27134. var installedHrTime = "_hrtime";
  27135. var installedNextTick = "_nextTick";
  27136. for (i = 0, l = clock.methods.length; i < l; i++) {
  27137. method = clock.methods[i];
  27138. if (method === "hrtime" && target.process) {
  27139. target.process.hrtime = clock[installedHrTime];
  27140. } else if (method === "nextTick" && target.process) {
  27141. target.process.nextTick = clock[installedNextTick];
  27142. } else if (method === "performance") {
  27143. target[method] = clock["_" + method];
  27144. } else {
  27145. if (target[method] && target[method].hadOwnProperty) {
  27146. target[method] = clock["_" + method];
  27147. if (method === "clearInterval" && config.shouldAdvanceTime === true) {
  27148. target[method](clock.attachedInterval);
  27149. }
  27150. } else {
  27151. try {
  27152. delete target[method];
  27153. } catch (ignore) { /* eslint empty-block: "off" */ }
  27154. }
  27155. }
  27156. }
  27157. // Prevent multiple executions which will completely remove these props
  27158. clock.methods = [];
  27159. // return pending timers, to enable checking what timers remained on uninstall
  27160. if (!clock.timers) {
  27161. return [];
  27162. }
  27163. return Object.keys(clock.timers).map(function mapper(key) {
  27164. return clock.timers[key];
  27165. });
  27166. }
  27167. function hijackMethod(target, method, clock) {
  27168. var prop;
  27169. clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(target, method);
  27170. clock["_" + method] = target[method];
  27171. if (method === "Date") {
  27172. var date = mirrorDateProperties(clock[method], target[method]);
  27173. target[method] = date;
  27174. } else if (method === "performance") {
  27175. target[method] = clock[method];
  27176. } else {
  27177. target[method] = function () {
  27178. return clock[method].apply(clock, arguments);
  27179. };
  27180. for (prop in clock[method]) {
  27181. if (clock[method].hasOwnProperty(prop)) {
  27182. target[method][prop] = clock[method][prop];
  27183. }
  27184. }
  27185. }
  27186. target[method].clock = clock;
  27187. }
  27188. function doIntervalTick(clock, advanceTimeDelta) {
  27189. clock.tick(advanceTimeDelta);
  27190. }
  27191. var timers = {
  27192. setTimeout: _global.setTimeout,
  27193. clearTimeout: _global.clearTimeout,
  27194. setImmediate: _global.setImmediate,
  27195. clearImmediate: _global.clearImmediate,
  27196. setInterval: _global.setInterval,
  27197. clearInterval: _global.clearInterval,
  27198. Date: _global.Date
  27199. };
  27200. if (hrtimePresent) {
  27201. timers.hrtime = _global.process.hrtime;
  27202. }
  27203. if (nextTickPresent) {
  27204. timers.nextTick = _global.process.nextTick;
  27205. }
  27206. if (performancePresent) {
  27207. timers.performance = _global.performance;
  27208. }
  27209. if (requestAnimationFramePresent) {
  27210. timers.requestAnimationFrame = _global.requestAnimationFrame;
  27211. }
  27212. if (cancelAnimationFramePresent) {
  27213. timers.cancelAnimationFrame = _global.cancelAnimationFrame;
  27214. }
  27215. var keys = Object.keys || function (obj) {
  27216. var ks = [];
  27217. var key;
  27218. for (key in obj) {
  27219. if (obj.hasOwnProperty(key)) {
  27220. ks.push(key);
  27221. }
  27222. }
  27223. return ks;
  27224. };
  27225. /**
  27226. * @param start {Date|number} the system time
  27227. * @param loopLimit {number} maximum number of timers that will be run when calling runAll()
  27228. */
  27229. function createClock(start, loopLimit) {
  27230. start = start || 0;
  27231. loopLimit = loopLimit || 1000;
  27232. if (NativeDate === undefined) {
  27233. throw new Error("The global scope doesn't have a `Date` object"
  27234. + " (see https://github.com/sinonjs/sinon/issues/1852#issuecomment-419622780)");
  27235. }
  27236. var clock = {
  27237. now: getEpoch(start),
  27238. hrNow: 0,
  27239. timeouts: {},
  27240. Date: createDate(),
  27241. loopLimit: loopLimit
  27242. };
  27243. clock.Date.clock = clock;
  27244. function getTimeToNextFrame() {
  27245. return 16 - ((clock.now - start) % 16);
  27246. }
  27247. clock.setTimeout = function setTimeout(func, timeout) {
  27248. return addTimer(clock, {
  27249. func: func,
  27250. args: Array.prototype.slice.call(arguments, 2),
  27251. delay: timeout
  27252. });
  27253. };
  27254. clock.clearTimeout = function clearTimeout(timerId) {
  27255. return clearTimer(clock, timerId, "Timeout");
  27256. };
  27257. clock.nextTick = function nextTick(func) {
  27258. return enqueueJob(clock, {
  27259. func: func,
  27260. args: Array.prototype.slice.call(arguments, 1)
  27261. });
  27262. };
  27263. clock.setInterval = function setInterval(func, timeout) {
  27264. timeout = parseInt(timeout, 10);
  27265. return addTimer(clock, {
  27266. func: func,
  27267. args: Array.prototype.slice.call(arguments, 2),
  27268. delay: timeout,
  27269. interval: timeout
  27270. });
  27271. };
  27272. clock.clearInterval = function clearInterval(timerId) {
  27273. return clearTimer(clock, timerId, "Interval");
  27274. };
  27275. clock.setImmediate = function setImmediate(func) {
  27276. return addTimer(clock, {
  27277. func: func,
  27278. args: Array.prototype.slice.call(arguments, 1),
  27279. immediate: true
  27280. });
  27281. };
  27282. clock.clearImmediate = function clearImmediate(timerId) {
  27283. return clearTimer(clock, timerId, "Immediate");
  27284. };
  27285. clock.requestAnimationFrame = function requestAnimationFrame(func) {
  27286. var result = addTimer(clock, {
  27287. func: func,
  27288. delay: getTimeToNextFrame(),
  27289. args: [clock.now + getTimeToNextFrame()],
  27290. animation: true
  27291. });
  27292. return result.id || result;
  27293. };
  27294. clock.cancelAnimationFrame = function cancelAnimationFrame(timerId) {
  27295. return clearTimer(clock, timerId, "AnimationFrame");
  27296. };
  27297. function updateHrTime(newNow) {
  27298. clock.hrNow += (newNow - clock.now);
  27299. }
  27300. clock.runMicrotasks = function runMicrotasks() {
  27301. runJobs(clock);
  27302. };
  27303. clock.tick = function tick(ms) {
  27304. ms = typeof ms === "number" ? ms : parseTime(ms);
  27305. var tickFrom = clock.now;
  27306. var tickTo = clock.now + ms;
  27307. var previous = clock.now;
  27308. var timer, firstException, oldNow;
  27309. clock.duringTick = true;
  27310. // perform process.nextTick()s
  27311. oldNow = clock.now;
  27312. runJobs(clock);
  27313. if (oldNow !== clock.now) {
  27314. // compensate for any setSystemTime() call during process.nextTick() callback
  27315. tickFrom += clock.now - oldNow;
  27316. tickTo += clock.now - oldNow;
  27317. }
  27318. // perform each timer in the requested range
  27319. timer = firstTimerInRange(clock, tickFrom, tickTo);
  27320. while (timer && tickFrom <= tickTo) {
  27321. if (clock.timers[timer.id]) {
  27322. updateHrTime(timer.callAt);
  27323. tickFrom = timer.callAt;
  27324. clock.now = timer.callAt;
  27325. oldNow = clock.now;
  27326. try {
  27327. runJobs(clock);
  27328. callTimer(clock, timer);
  27329. } catch (e) {
  27330. firstException = firstException || e;
  27331. }
  27332. // compensate for any setSystemTime() call during timer callback
  27333. if (oldNow !== clock.now) {
  27334. tickFrom += clock.now - oldNow;
  27335. tickTo += clock.now - oldNow;
  27336. previous += clock.now - oldNow;
  27337. }
  27338. }
  27339. timer = firstTimerInRange(clock, previous, tickTo);
  27340. previous = tickFrom;
  27341. }
  27342. // perform process.nextTick()s again
  27343. oldNow = clock.now;
  27344. runJobs(clock);
  27345. if (oldNow !== clock.now) {
  27346. // compensate for any setSystemTime() call during process.nextTick() callback
  27347. tickFrom += clock.now - oldNow;
  27348. tickTo += clock.now - oldNow;
  27349. }
  27350. clock.duringTick = false;
  27351. // corner case: during runJobs, new timers were scheduled which could be in the range [clock.now, tickTo]
  27352. timer = firstTimerInRange(clock, tickFrom, tickTo);
  27353. if (timer) {
  27354. try {
  27355. clock.tick(tickTo - clock.now); // do it all again - for the remainder of the requested range
  27356. } catch (e) {
  27357. firstException = firstException || e;
  27358. }
  27359. } else {
  27360. // no timers remaining in the requested range: move the clock all the way to the end
  27361. updateHrTime(tickTo);
  27362. clock.now = tickTo;
  27363. }
  27364. if (firstException) {
  27365. throw firstException;
  27366. }
  27367. return clock.now;
  27368. };
  27369. clock.next = function next() {
  27370. runJobs(clock);
  27371. var timer = firstTimer(clock);
  27372. if (!timer) {
  27373. return clock.now;
  27374. }
  27375. clock.duringTick = true;
  27376. try {
  27377. updateHrTime(timer.callAt);
  27378. clock.now = timer.callAt;
  27379. callTimer(clock, timer);
  27380. runJobs(clock);
  27381. return clock.now;
  27382. } finally {
  27383. clock.duringTick = false;
  27384. }
  27385. };
  27386. clock.runAll = function runAll() {
  27387. var numTimers, i;
  27388. runJobs(clock);
  27389. for (i = 0; i < clock.loopLimit; i++) {
  27390. if (!clock.timers) {
  27391. return clock.now;
  27392. }
  27393. numTimers = keys(clock.timers).length;
  27394. if (numTimers === 0) {
  27395. return clock.now;
  27396. }
  27397. clock.next();
  27398. }
  27399. throw new Error("Aborting after running " + clock.loopLimit + " timers, assuming an infinite loop!");
  27400. };
  27401. clock.runToFrame = function runToFrame() {
  27402. return clock.tick(getTimeToNextFrame());
  27403. };
  27404. clock.runToLast = function runToLast() {
  27405. var timer = lastTimer(clock);
  27406. if (!timer) {
  27407. runJobs(clock);
  27408. return clock.now;
  27409. }
  27410. return clock.tick(timer.callAt - clock.now);
  27411. };
  27412. clock.reset = function reset() {
  27413. clock.timers = {};
  27414. clock.jobs = [];
  27415. clock.now = getEpoch(start);
  27416. clock.hrNow = 0;
  27417. };
  27418. clock.setSystemTime = function setSystemTime(systemTime) {
  27419. // determine time difference
  27420. var newNow = getEpoch(systemTime);
  27421. var difference = newNow - clock.now;
  27422. var id, timer;
  27423. // update 'system clock'
  27424. clock.now = newNow;
  27425. // update timers and intervals to keep them stable
  27426. for (id in clock.timers) {
  27427. if (clock.timers.hasOwnProperty(id)) {
  27428. timer = clock.timers[id];
  27429. timer.createdAt += difference;
  27430. timer.callAt += difference;
  27431. }
  27432. }
  27433. };
  27434. if (performancePresent) {
  27435. clock.performance = Object.create(null);
  27436. if (hasPerformancePrototype) {
  27437. var proto = _global.Performance.prototype;
  27438. Object
  27439. .getOwnPropertyNames(proto)
  27440. .forEach(function (name) {
  27441. clock.performance[name] = NOOP;
  27442. });
  27443. }
  27444. clock.performance.now = function lolexNow() {
  27445. return clock.hrNow;
  27446. };
  27447. }
  27448. if (hrtimePresent) {
  27449. clock.hrtime = function (prev) {
  27450. if (Array.isArray(prev)) {
  27451. var oldSecs = (prev[0] + prev[1] / 1e9);
  27452. var newSecs = (clock.hrNow / 1000);
  27453. var difference = (newSecs - oldSecs);
  27454. var secs = fixedFloor(difference);
  27455. var nanosecs = fixedModulo(difference * 1e9, 1e9);
  27456. return [
  27457. secs,
  27458. nanosecs
  27459. ];
  27460. }
  27461. return [
  27462. fixedFloor(clock.hrNow / 1000),
  27463. fixedModulo(clock.hrNow * 1e6, 1e9)
  27464. ];
  27465. };
  27466. }
  27467. return clock;
  27468. }
  27469. /**
  27470. * @param config {Object} optional config
  27471. * @param config.target {Object} the target to install timers in (default `window`)
  27472. * @param config.now {number|Date} a number (in milliseconds) or a Date object (default epoch)
  27473. * @param config.toFake {string[]} names of the methods that should be faked.
  27474. * @param config.loopLimit {number} the maximum number of timers that will be run when calling runAll()
  27475. * @param config.shouldAdvanceTime {Boolean} tells lolex to increment mocked time automatically (default false)
  27476. * @param config.advanceTimeDelta {Number} increment mocked time every <<advanceTimeDelta>> ms (default: 20ms)
  27477. */
  27478. function install(config) {
  27479. if ( arguments.length > 1 || config instanceof Date || Array.isArray(config) || typeof config === "number") {
  27480. throw new TypeError("lolex.install called with " + String(config) +
  27481. " lolex 2.0+ requires an object parameter - see https://github.com/sinonjs/lolex");
  27482. }
  27483. config = typeof config !== "undefined" ? config : {};
  27484. config.shouldAdvanceTime = config.shouldAdvanceTime || false;
  27485. config.advanceTimeDelta = config.advanceTimeDelta || 20;
  27486. var i, l;
  27487. var target = config.target || _global;
  27488. var clock = createClock(config.now, config.loopLimit);
  27489. clock.uninstall = function () {
  27490. return uninstall(clock, target, config);
  27491. };
  27492. clock.methods = config.toFake || [];
  27493. if (clock.methods.length === 0) {
  27494. // do not fake nextTick by default - GitHub#126
  27495. clock.methods = keys(timers).filter(function (key) {return key !== "nextTick";});
  27496. }
  27497. for (i = 0, l = clock.methods.length; i < l; i++) {
  27498. if (clock.methods[i] === "hrtime") {
  27499. if (target.process && typeof target.process.hrtime === "function") {
  27500. hijackMethod(target.process, clock.methods[i], clock);
  27501. }
  27502. } else if (clock.methods[i] === "nextTick") {
  27503. if (target.process && typeof target.process.nextTick === "function") {
  27504. hijackMethod(target.process, clock.methods[i], clock);
  27505. }
  27506. } else {
  27507. if (clock.methods[i] === "setInterval" && config.shouldAdvanceTime === true) {
  27508. var intervalTick = doIntervalTick.bind(null, clock, config.advanceTimeDelta);
  27509. var intervalId = target[clock.methods[i]](
  27510. intervalTick,
  27511. config.advanceTimeDelta);
  27512. clock.attachedInterval = intervalId;
  27513. }
  27514. hijackMethod(target, clock.methods[i], clock);
  27515. }
  27516. }
  27517. return clock;
  27518. }
  27519. return {
  27520. timers: timers,
  27521. createClock: createClock,
  27522. install: install,
  27523. withGlobal: withGlobal
  27524. };
  27525. }
  27526. var defaultImplementation = withGlobal(global || window);
  27527. exports.timers = defaultImplementation.timers;
  27528. exports.createClock = defaultImplementation.createClock;
  27529. exports.install = defaultImplementation.install;
  27530. exports.withGlobal = withGlobal;
  27531. }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
  27532. },{}],87:[function(require,module,exports){
  27533. var isarray = require('isarray')
  27534. /**
  27535. * Expose `pathToRegexp`.
  27536. */
  27537. module.exports = pathToRegexp
  27538. module.exports.parse = parse
  27539. module.exports.compile = compile
  27540. module.exports.tokensToFunction = tokensToFunction
  27541. module.exports.tokensToRegExp = tokensToRegExp
  27542. /**
  27543. * The main path matching regexp utility.
  27544. *
  27545. * @type {RegExp}
  27546. */
  27547. var PATH_REGEXP = new RegExp([
  27548. // Match escaped characters that would otherwise appear in future matches.
  27549. // This allows the user to escape special characters that won't transform.
  27550. '(\\\\.)',
  27551. // Match Express-style parameters and un-named parameters with a prefix
  27552. // and optional suffixes. Matches appear as:
  27553. //
  27554. // "/:test(\\d+)?" => ["/", "test", "\d+", undefined, "?", undefined]
  27555. // "/route(\\d+)" => [undefined, undefined, undefined, "\d+", undefined, undefined]
  27556. // "/*" => ["/", undefined, undefined, undefined, undefined, "*"]
  27557. '([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))'
  27558. ].join('|'), 'g')
  27559. /**
  27560. * Parse a string for the raw tokens.
  27561. *
  27562. * @param {string} str
  27563. * @param {Object=} options
  27564. * @return {!Array}
  27565. */
  27566. function parse (str, options) {
  27567. var tokens = []
  27568. var key = 0
  27569. var index = 0
  27570. var path = ''
  27571. var defaultDelimiter = options && options.delimiter || '/'
  27572. var res
  27573. while ((res = PATH_REGEXP.exec(str)) != null) {
  27574. var m = res[0]
  27575. var escaped = res[1]
  27576. var offset = res.index
  27577. path += str.slice(index, offset)
  27578. index = offset + m.length
  27579. // Ignore already escaped sequences.
  27580. if (escaped) {
  27581. path += escaped[1]
  27582. continue
  27583. }
  27584. var next = str[index]
  27585. var prefix = res[2]
  27586. var name = res[3]
  27587. var capture = res[4]
  27588. var group = res[5]
  27589. var modifier = res[6]
  27590. var asterisk = res[7]
  27591. // Push the current path onto the tokens.
  27592. if (path) {
  27593. tokens.push(path)
  27594. path = ''
  27595. }
  27596. var partial = prefix != null && next != null && next !== prefix
  27597. var repeat = modifier === '+' || modifier === '*'
  27598. var optional = modifier === '?' || modifier === '*'
  27599. var delimiter = res[2] || defaultDelimiter
  27600. var pattern = capture || group
  27601. tokens.push({
  27602. name: name || key++,
  27603. prefix: prefix || '',
  27604. delimiter: delimiter,
  27605. optional: optional,
  27606. repeat: repeat,
  27607. partial: partial,
  27608. asterisk: !!asterisk,
  27609. pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')
  27610. })
  27611. }
  27612. // Match any characters still remaining.
  27613. if (index < str.length) {
  27614. path += str.substr(index)
  27615. }
  27616. // If the path exists, push it onto the end.
  27617. if (path) {
  27618. tokens.push(path)
  27619. }
  27620. return tokens
  27621. }
  27622. /**
  27623. * Compile a string to a template function for the path.
  27624. *
  27625. * @param {string} str
  27626. * @param {Object=} options
  27627. * @return {!function(Object=, Object=)}
  27628. */
  27629. function compile (str, options) {
  27630. return tokensToFunction(parse(str, options))
  27631. }
  27632. /**
  27633. * Prettier encoding of URI path segments.
  27634. *
  27635. * @param {string}
  27636. * @return {string}
  27637. */
  27638. function encodeURIComponentPretty (str) {
  27639. return encodeURI(str).replace(/[\/?#]/g, function (c) {
  27640. return '%' + c.charCodeAt(0).toString(16).toUpperCase()
  27641. })
  27642. }
  27643. /**
  27644. * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.
  27645. *
  27646. * @param {string}
  27647. * @return {string}
  27648. */
  27649. function encodeAsterisk (str) {
  27650. return encodeURI(str).replace(/[?#]/g, function (c) {
  27651. return '%' + c.charCodeAt(0).toString(16).toUpperCase()
  27652. })
  27653. }
  27654. /**
  27655. * Expose a method for transforming tokens into the path function.
  27656. */
  27657. function tokensToFunction (tokens) {
  27658. // Compile all the tokens into regexps.
  27659. var matches = new Array(tokens.length)
  27660. // Compile all the patterns before compilation.
  27661. for (var i = 0; i < tokens.length; i++) {
  27662. if (typeof tokens[i] === 'object') {
  27663. matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$')
  27664. }
  27665. }
  27666. return function (obj, opts) {
  27667. var path = ''
  27668. var data = obj || {}
  27669. var options = opts || {}
  27670. var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent
  27671. for (var i = 0; i < tokens.length; i++) {
  27672. var token = tokens[i]
  27673. if (typeof token === 'string') {
  27674. path += token
  27675. continue
  27676. }
  27677. var value = data[token.name]
  27678. var segment
  27679. if (value == null) {
  27680. if (token.optional) {
  27681. // Prepend partial segment prefixes.
  27682. if (token.partial) {
  27683. path += token.prefix
  27684. }
  27685. continue
  27686. } else {
  27687. throw new TypeError('Expected "' + token.name + '" to be defined')
  27688. }
  27689. }
  27690. if (isarray(value)) {
  27691. if (!token.repeat) {
  27692. throw new TypeError('Expected "' + token.name + '" to not repeat, but received `' + JSON.stringify(value) + '`')
  27693. }
  27694. if (value.length === 0) {
  27695. if (token.optional) {
  27696. continue
  27697. } else {
  27698. throw new TypeError('Expected "' + token.name + '" to not be empty')
  27699. }
  27700. }
  27701. for (var j = 0; j < value.length; j++) {
  27702. segment = encode(value[j])
  27703. if (!matches[i].test(segment)) {
  27704. throw new TypeError('Expected all "' + token.name + '" to match "' + token.pattern + '", but received `' + JSON.stringify(segment) + '`')
  27705. }
  27706. path += (j === 0 ? token.prefix : token.delimiter) + segment
  27707. }
  27708. continue
  27709. }
  27710. segment = token.asterisk ? encodeAsterisk(value) : encode(value)
  27711. if (!matches[i].test(segment)) {
  27712. throw new TypeError('Expected "' + token.name + '" to match "' + token.pattern + '", but received "' + segment + '"')
  27713. }
  27714. path += token.prefix + segment
  27715. }
  27716. return path
  27717. }
  27718. }
  27719. /**
  27720. * Escape a regular expression string.
  27721. *
  27722. * @param {string} str
  27723. * @return {string}
  27724. */
  27725. function escapeString (str) {
  27726. return str.replace(/([.+*?=^!:${}()[\]|\/\\])/g, '\\$1')
  27727. }
  27728. /**
  27729. * Escape the capturing group by escaping special characters and meaning.
  27730. *
  27731. * @param {string} group
  27732. * @return {string}
  27733. */
  27734. function escapeGroup (group) {
  27735. return group.replace(/([=!:$\/()])/g, '\\$1')
  27736. }
  27737. /**
  27738. * Attach the keys as a property of the regexp.
  27739. *
  27740. * @param {!RegExp} re
  27741. * @param {Array} keys
  27742. * @return {!RegExp}
  27743. */
  27744. function attachKeys (re, keys) {
  27745. re.keys = keys
  27746. return re
  27747. }
  27748. /**
  27749. * Get the flags for a regexp from the options.
  27750. *
  27751. * @param {Object} options
  27752. * @return {string}
  27753. */
  27754. function flags (options) {
  27755. return options.sensitive ? '' : 'i'
  27756. }
  27757. /**
  27758. * Pull out keys from a regexp.
  27759. *
  27760. * @param {!RegExp} path
  27761. * @param {!Array} keys
  27762. * @return {!RegExp}
  27763. */
  27764. function regexpToRegexp (path, keys) {
  27765. // Use a negative lookahead to match only capturing groups.
  27766. var groups = path.source.match(/\((?!\?)/g)
  27767. if (groups) {
  27768. for (var i = 0; i < groups.length; i++) {
  27769. keys.push({
  27770. name: i,
  27771. prefix: null,
  27772. delimiter: null,
  27773. optional: false,
  27774. repeat: false,
  27775. partial: false,
  27776. asterisk: false,
  27777. pattern: null
  27778. })
  27779. }
  27780. }
  27781. return attachKeys(path, keys)
  27782. }
  27783. /**
  27784. * Transform an array into a regexp.
  27785. *
  27786. * @param {!Array} path
  27787. * @param {Array} keys
  27788. * @param {!Object} options
  27789. * @return {!RegExp}
  27790. */
  27791. function arrayToRegexp (path, keys, options) {
  27792. var parts = []
  27793. for (var i = 0; i < path.length; i++) {
  27794. parts.push(pathToRegexp(path[i], keys, options).source)
  27795. }
  27796. var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options))
  27797. return attachKeys(regexp, keys)
  27798. }
  27799. /**
  27800. * Create a path regexp from string input.
  27801. *
  27802. * @param {string} path
  27803. * @param {!Array} keys
  27804. * @param {!Object} options
  27805. * @return {!RegExp}
  27806. */
  27807. function stringToRegexp (path, keys, options) {
  27808. return tokensToRegExp(parse(path, options), keys, options)
  27809. }
  27810. /**
  27811. * Expose a function for taking tokens and returning a RegExp.
  27812. *
  27813. * @param {!Array} tokens
  27814. * @param {(Array|Object)=} keys
  27815. * @param {Object=} options
  27816. * @return {!RegExp}
  27817. */
  27818. function tokensToRegExp (tokens, keys, options) {
  27819. if (!isarray(keys)) {
  27820. options = /** @type {!Object} */ (keys || options)
  27821. keys = []
  27822. }
  27823. options = options || {}
  27824. var strict = options.strict
  27825. var end = options.end !== false
  27826. var route = ''
  27827. // Iterate over the tokens and create our regexp string.
  27828. for (var i = 0; i < tokens.length; i++) {
  27829. var token = tokens[i]
  27830. if (typeof token === 'string') {
  27831. route += escapeString(token)
  27832. } else {
  27833. var prefix = escapeString(token.prefix)
  27834. var capture = '(?:' + token.pattern + ')'
  27835. keys.push(token)
  27836. if (token.repeat) {
  27837. capture += '(?:' + prefix + capture + ')*'
  27838. }
  27839. if (token.optional) {
  27840. if (!token.partial) {
  27841. capture = '(?:' + prefix + '(' + capture + '))?'
  27842. } else {
  27843. capture = prefix + '(' + capture + ')?'
  27844. }
  27845. } else {
  27846. capture = prefix + '(' + capture + ')'
  27847. }
  27848. route += capture
  27849. }
  27850. }
  27851. var delimiter = escapeString(options.delimiter || '/')
  27852. var endsWithDelimiter = route.slice(-delimiter.length) === delimiter
  27853. // In non-strict mode we allow a slash at the end of match. If the path to
  27854. // match already ends with a slash, we remove it for consistency. The slash
  27855. // is valid at the end of a path match, not in the middle. This is important
  27856. // in non-ending mode, where "/test/" shouldn't match "/test//route".
  27857. if (!strict) {
  27858. route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?'
  27859. }
  27860. if (end) {
  27861. route += '$'
  27862. } else {
  27863. // In non-ending mode, we need the capturing groups to match as much as
  27864. // possible by using a positive lookahead to the end or next path segment.
  27865. route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)'
  27866. }
  27867. return attachKeys(new RegExp('^' + route, flags(options)), keys)
  27868. }
  27869. /**
  27870. * Normalize the given path string, returning a regular expression.
  27871. *
  27872. * An empty array can be passed in for the keys, which will hold the
  27873. * placeholder key descriptions. For example, using `/user/:id`, `keys` will
  27874. * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.
  27875. *
  27876. * @param {(string|RegExp|Array)} path
  27877. * @param {(Array|Object)=} keys
  27878. * @param {Object=} options
  27879. * @return {!RegExp}
  27880. */
  27881. function pathToRegexp (path, keys, options) {
  27882. if (!isarray(keys)) {
  27883. options = /** @type {!Object} */ (keys || options)
  27884. keys = []
  27885. }
  27886. options = options || {}
  27887. if (path instanceof RegExp) {
  27888. return regexpToRegexp(path, /** @type {!Array} */ (keys))
  27889. }
  27890. if (isarray(path)) {
  27891. return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)
  27892. }
  27893. return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)
  27894. }
  27895. },{"isarray":70}],88:[function(require,module,exports){
  27896. 'use strict';
  27897. module.exports = {
  27898. stdout: false,
  27899. stderr: false
  27900. };
  27901. },{}],89:[function(require,module,exports){
  27902. (function (global){
  27903. (function (global, factory) {
  27904. typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
  27905. typeof define === 'function' && define.amd ? define(factory) :
  27906. (global.typeDetect = factory());
  27907. }(this, (function () { 'use strict';
  27908. /* !
  27909. * type-detect
  27910. * Copyright(c) 2013 jake luer <jake@alogicalparadox.com>
  27911. * MIT Licensed
  27912. */
  27913. var promiseExists = typeof Promise === 'function';
  27914. /* eslint-disable no-undef */
  27915. var globalObject = typeof self === 'object' ? self : global; // eslint-disable-line id-blacklist
  27916. var symbolExists = typeof Symbol !== 'undefined';
  27917. var mapExists = typeof Map !== 'undefined';
  27918. var setExists = typeof Set !== 'undefined';
  27919. var weakMapExists = typeof WeakMap !== 'undefined';
  27920. var weakSetExists = typeof WeakSet !== 'undefined';
  27921. var dataViewExists = typeof DataView !== 'undefined';
  27922. var symbolIteratorExists = symbolExists && typeof Symbol.iterator !== 'undefined';
  27923. var symbolToStringTagExists = symbolExists && typeof Symbol.toStringTag !== 'undefined';
  27924. var setEntriesExists = setExists && typeof Set.prototype.entries === 'function';
  27925. var mapEntriesExists = mapExists && typeof Map.prototype.entries === 'function';
  27926. var setIteratorPrototype = setEntriesExists && Object.getPrototypeOf(new Set().entries());
  27927. var mapIteratorPrototype = mapEntriesExists && Object.getPrototypeOf(new Map().entries());
  27928. var arrayIteratorExists = symbolIteratorExists && typeof Array.prototype[Symbol.iterator] === 'function';
  27929. var arrayIteratorPrototype = arrayIteratorExists && Object.getPrototypeOf([][Symbol.iterator]());
  27930. var stringIteratorExists = symbolIteratorExists && typeof String.prototype[Symbol.iterator] === 'function';
  27931. var stringIteratorPrototype = stringIteratorExists && Object.getPrototypeOf(''[Symbol.iterator]());
  27932. var toStringLeftSliceLength = 8;
  27933. var toStringRightSliceLength = -1;
  27934. /**
  27935. * ### typeOf (obj)
  27936. *
  27937. * Uses `Object.prototype.toString` to determine the type of an object,
  27938. * normalising behaviour across engine versions & well optimised.
  27939. *
  27940. * @param {Mixed} object
  27941. * @return {String} object type
  27942. * @api public
  27943. */
  27944. function typeDetect(obj) {
  27945. /* ! Speed optimisation
  27946. * Pre:
  27947. * string literal x 3,039,035 ops/sec ±1.62% (78 runs sampled)
  27948. * boolean literal x 1,424,138 ops/sec ±4.54% (75 runs sampled)
  27949. * number literal x 1,653,153 ops/sec ±1.91% (82 runs sampled)
  27950. * undefined x 9,978,660 ops/sec ±1.92% (75 runs sampled)
  27951. * function x 2,556,769 ops/sec ±1.73% (77 runs sampled)
  27952. * Post:
  27953. * string literal x 38,564,796 ops/sec ±1.15% (79 runs sampled)
  27954. * boolean literal x 31,148,940 ops/sec ±1.10% (79 runs sampled)
  27955. * number literal x 32,679,330 ops/sec ±1.90% (78 runs sampled)
  27956. * undefined x 32,363,368 ops/sec ±1.07% (82 runs sampled)
  27957. * function x 31,296,870 ops/sec ±0.96% (83 runs sampled)
  27958. */
  27959. var typeofObj = typeof obj;
  27960. if (typeofObj !== 'object') {
  27961. return typeofObj;
  27962. }
  27963. /* ! Speed optimisation
  27964. * Pre:
  27965. * null x 28,645,765 ops/sec ±1.17% (82 runs sampled)
  27966. * Post:
  27967. * null x 36,428,962 ops/sec ±1.37% (84 runs sampled)
  27968. */
  27969. if (obj === null) {
  27970. return 'null';
  27971. }
  27972. /* ! Spec Conformance
  27973. * Test: `Object.prototype.toString.call(window)``
  27974. * - Node === "[object global]"
  27975. * - Chrome === "[object global]"
  27976. * - Firefox === "[object Window]"
  27977. * - PhantomJS === "[object Window]"
  27978. * - Safari === "[object Window]"
  27979. * - IE 11 === "[object Window]"
  27980. * - IE Edge === "[object Window]"
  27981. * Test: `Object.prototype.toString.call(this)``
  27982. * - Chrome Worker === "[object global]"
  27983. * - Firefox Worker === "[object DedicatedWorkerGlobalScope]"
  27984. * - Safari Worker === "[object DedicatedWorkerGlobalScope]"
  27985. * - IE 11 Worker === "[object WorkerGlobalScope]"
  27986. * - IE Edge Worker === "[object WorkerGlobalScope]"
  27987. */
  27988. if (obj === globalObject) {
  27989. return 'global';
  27990. }
  27991. /* ! Speed optimisation
  27992. * Pre:
  27993. * array literal x 2,888,352 ops/sec ±0.67% (82 runs sampled)
  27994. * Post:
  27995. * array literal x 22,479,650 ops/sec ±0.96% (81 runs sampled)
  27996. */
  27997. if (
  27998. Array.isArray(obj) &&
  27999. (symbolToStringTagExists === false || !(Symbol.toStringTag in obj))
  28000. ) {
  28001. return 'Array';
  28002. }
  28003. // Not caching existence of `window` and related properties due to potential
  28004. // for `window` to be unset before tests in quasi-browser environments.
  28005. if (typeof window === 'object' && window !== null) {
  28006. /* ! Spec Conformance
  28007. * (https://html.spec.whatwg.org/multipage/browsers.html#location)
  28008. * WhatWG HTML$7.7.3 - The `Location` interface
  28009. * Test: `Object.prototype.toString.call(window.location)``
  28010. * - IE <=11 === "[object Object]"
  28011. * - IE Edge <=13 === "[object Object]"
  28012. */
  28013. if (typeof window.location === 'object' && obj === window.location) {
  28014. return 'Location';
  28015. }
  28016. /* ! Spec Conformance
  28017. * (https://html.spec.whatwg.org/#document)
  28018. * WhatWG HTML$3.1.1 - The `Document` object
  28019. * Note: Most browsers currently adher to the W3C DOM Level 2 spec
  28020. * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-26809268)
  28021. * which suggests that browsers should use HTMLTableCellElement for
  28022. * both TD and TH elements. WhatWG separates these.
  28023. * WhatWG HTML states:
  28024. * > For historical reasons, Window objects must also have a
  28025. * > writable, configurable, non-enumerable property named
  28026. * > HTMLDocument whose value is the Document interface object.
  28027. * Test: `Object.prototype.toString.call(document)``
  28028. * - Chrome === "[object HTMLDocument]"
  28029. * - Firefox === "[object HTMLDocument]"
  28030. * - Safari === "[object HTMLDocument]"
  28031. * - IE <=10 === "[object Document]"
  28032. * - IE 11 === "[object HTMLDocument]"
  28033. * - IE Edge <=13 === "[object HTMLDocument]"
  28034. */
  28035. if (typeof window.document === 'object' && obj === window.document) {
  28036. return 'Document';
  28037. }
  28038. if (typeof window.navigator === 'object') {
  28039. /* ! Spec Conformance
  28040. * (https://html.spec.whatwg.org/multipage/webappapis.html#mimetypearray)
  28041. * WhatWG HTML$8.6.1.5 - Plugins - Interface MimeTypeArray
  28042. * Test: `Object.prototype.toString.call(navigator.mimeTypes)``
  28043. * - IE <=10 === "[object MSMimeTypesCollection]"
  28044. */
  28045. if (typeof window.navigator.mimeTypes === 'object' &&
  28046. obj === window.navigator.mimeTypes) {
  28047. return 'MimeTypeArray';
  28048. }
  28049. /* ! Spec Conformance
  28050. * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray)
  28051. * WhatWG HTML$8.6.1.5 - Plugins - Interface PluginArray
  28052. * Test: `Object.prototype.toString.call(navigator.plugins)``
  28053. * - IE <=10 === "[object MSPluginsCollection]"
  28054. */
  28055. if (typeof window.navigator.plugins === 'object' &&
  28056. obj === window.navigator.plugins) {
  28057. return 'PluginArray';
  28058. }
  28059. }
  28060. if ((typeof window.HTMLElement === 'function' ||
  28061. typeof window.HTMLElement === 'object') &&
  28062. obj instanceof window.HTMLElement) {
  28063. /* ! Spec Conformance
  28064. * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray)
  28065. * WhatWG HTML$4.4.4 - The `blockquote` element - Interface `HTMLQuoteElement`
  28066. * Test: `Object.prototype.toString.call(document.createElement('blockquote'))``
  28067. * - IE <=10 === "[object HTMLBlockElement]"
  28068. */
  28069. if (obj.tagName === 'BLOCKQUOTE') {
  28070. return 'HTMLQuoteElement';
  28071. }
  28072. /* ! Spec Conformance
  28073. * (https://html.spec.whatwg.org/#htmltabledatacellelement)
  28074. * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableDataCellElement`
  28075. * Note: Most browsers currently adher to the W3C DOM Level 2 spec
  28076. * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075)
  28077. * which suggests that browsers should use HTMLTableCellElement for
  28078. * both TD and TH elements. WhatWG separates these.
  28079. * Test: Object.prototype.toString.call(document.createElement('td'))
  28080. * - Chrome === "[object HTMLTableCellElement]"
  28081. * - Firefox === "[object HTMLTableCellElement]"
  28082. * - Safari === "[object HTMLTableCellElement]"
  28083. */
  28084. if (obj.tagName === 'TD') {
  28085. return 'HTMLTableDataCellElement';
  28086. }
  28087. /* ! Spec Conformance
  28088. * (https://html.spec.whatwg.org/#htmltableheadercellelement)
  28089. * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableHeaderCellElement`
  28090. * Note: Most browsers currently adher to the W3C DOM Level 2 spec
  28091. * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075)
  28092. * which suggests that browsers should use HTMLTableCellElement for
  28093. * both TD and TH elements. WhatWG separates these.
  28094. * Test: Object.prototype.toString.call(document.createElement('th'))
  28095. * - Chrome === "[object HTMLTableCellElement]"
  28096. * - Firefox === "[object HTMLTableCellElement]"
  28097. * - Safari === "[object HTMLTableCellElement]"
  28098. */
  28099. if (obj.tagName === 'TH') {
  28100. return 'HTMLTableHeaderCellElement';
  28101. }
  28102. }
  28103. }
  28104. /* ! Speed optimisation
  28105. * Pre:
  28106. * Float64Array x 625,644 ops/sec ±1.58% (80 runs sampled)
  28107. * Float32Array x 1,279,852 ops/sec ±2.91% (77 runs sampled)
  28108. * Uint32Array x 1,178,185 ops/sec ±1.95% (83 runs sampled)
  28109. * Uint16Array x 1,008,380 ops/sec ±2.25% (80 runs sampled)
  28110. * Uint8Array x 1,128,040 ops/sec ±2.11% (81 runs sampled)
  28111. * Int32Array x 1,170,119 ops/sec ±2.88% (80 runs sampled)
  28112. * Int16Array x 1,176,348 ops/sec ±5.79% (86 runs sampled)
  28113. * Int8Array x 1,058,707 ops/sec ±4.94% (77 runs sampled)
  28114. * Uint8ClampedArray x 1,110,633 ops/sec ±4.20% (80 runs sampled)
  28115. * Post:
  28116. * Float64Array x 7,105,671 ops/sec ±13.47% (64 runs sampled)
  28117. * Float32Array x 5,887,912 ops/sec ±1.46% (82 runs sampled)
  28118. * Uint32Array x 6,491,661 ops/sec ±1.76% (79 runs sampled)
  28119. * Uint16Array x 6,559,795 ops/sec ±1.67% (82 runs sampled)
  28120. * Uint8Array x 6,463,966 ops/sec ±1.43% (85 runs sampled)
  28121. * Int32Array x 5,641,841 ops/sec ±3.49% (81 runs sampled)
  28122. * Int16Array x 6,583,511 ops/sec ±1.98% (80 runs sampled)
  28123. * Int8Array x 6,606,078 ops/sec ±1.74% (81 runs sampled)
  28124. * Uint8ClampedArray x 6,602,224 ops/sec ±1.77% (83 runs sampled)
  28125. */
  28126. var stringTag = (symbolToStringTagExists && obj[Symbol.toStringTag]);
  28127. if (typeof stringTag === 'string') {
  28128. return stringTag;
  28129. }
  28130. var objPrototype = Object.getPrototypeOf(obj);
  28131. /* ! Speed optimisation
  28132. * Pre:
  28133. * regex literal x 1,772,385 ops/sec ±1.85% (77 runs sampled)
  28134. * regex constructor x 2,143,634 ops/sec ±2.46% (78 runs sampled)
  28135. * Post:
  28136. * regex literal x 3,928,009 ops/sec ±0.65% (78 runs sampled)
  28137. * regex constructor x 3,931,108 ops/sec ±0.58% (84 runs sampled)
  28138. */
  28139. if (objPrototype === RegExp.prototype) {
  28140. return 'RegExp';
  28141. }
  28142. /* ! Speed optimisation
  28143. * Pre:
  28144. * date x 2,130,074 ops/sec ±4.42% (68 runs sampled)
  28145. * Post:
  28146. * date x 3,953,779 ops/sec ±1.35% (77 runs sampled)
  28147. */
  28148. if (objPrototype === Date.prototype) {
  28149. return 'Date';
  28150. }
  28151. /* ! Spec Conformance
  28152. * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-promise.prototype-@@tostringtag)
  28153. * ES6$25.4.5.4 - Promise.prototype[@@toStringTag] should be "Promise":
  28154. * Test: `Object.prototype.toString.call(Promise.resolve())``
  28155. * - Chrome <=47 === "[object Object]"
  28156. * - Edge <=20 === "[object Object]"
  28157. * - Firefox 29-Latest === "[object Promise]"
  28158. * - Safari 7.1-Latest === "[object Promise]"
  28159. */
  28160. if (promiseExists && objPrototype === Promise.prototype) {
  28161. return 'Promise';
  28162. }
  28163. /* ! Speed optimisation
  28164. * Pre:
  28165. * set x 2,222,186 ops/sec ±1.31% (82 runs sampled)
  28166. * Post:
  28167. * set x 4,545,879 ops/sec ±1.13% (83 runs sampled)
  28168. */
  28169. if (setExists && objPrototype === Set.prototype) {
  28170. return 'Set';
  28171. }
  28172. /* ! Speed optimisation
  28173. * Pre:
  28174. * map x 2,396,842 ops/sec ±1.59% (81 runs sampled)
  28175. * Post:
  28176. * map x 4,183,945 ops/sec ±6.59% (82 runs sampled)
  28177. */
  28178. if (mapExists && objPrototype === Map.prototype) {
  28179. return 'Map';
  28180. }
  28181. /* ! Speed optimisation
  28182. * Pre:
  28183. * weakset x 1,323,220 ops/sec ±2.17% (76 runs sampled)
  28184. * Post:
  28185. * weakset x 4,237,510 ops/sec ±2.01% (77 runs sampled)
  28186. */
  28187. if (weakSetExists && objPrototype === WeakSet.prototype) {
  28188. return 'WeakSet';
  28189. }
  28190. /* ! Speed optimisation
  28191. * Pre:
  28192. * weakmap x 1,500,260 ops/sec ±2.02% (78 runs sampled)
  28193. * Post:
  28194. * weakmap x 3,881,384 ops/sec ±1.45% (82 runs sampled)
  28195. */
  28196. if (weakMapExists && objPrototype === WeakMap.prototype) {
  28197. return 'WeakMap';
  28198. }
  28199. /* ! Spec Conformance
  28200. * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-dataview.prototype-@@tostringtag)
  28201. * ES6$24.2.4.21 - DataView.prototype[@@toStringTag] should be "DataView":
  28202. * Test: `Object.prototype.toString.call(new DataView(new ArrayBuffer(1)))``
  28203. * - Edge <=13 === "[object Object]"
  28204. */
  28205. if (dataViewExists && objPrototype === DataView.prototype) {
  28206. return 'DataView';
  28207. }
  28208. /* ! Spec Conformance
  28209. * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%mapiteratorprototype%-@@tostringtag)
  28210. * ES6$23.1.5.2.2 - %MapIteratorPrototype%[@@toStringTag] should be "Map Iterator":
  28211. * Test: `Object.prototype.toString.call(new Map().entries())``
  28212. * - Edge <=13 === "[object Object]"
  28213. */
  28214. if (mapExists && objPrototype === mapIteratorPrototype) {
  28215. return 'Map Iterator';
  28216. }
  28217. /* ! Spec Conformance
  28218. * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%setiteratorprototype%-@@tostringtag)
  28219. * ES6$23.2.5.2.2 - %SetIteratorPrototype%[@@toStringTag] should be "Set Iterator":
  28220. * Test: `Object.prototype.toString.call(new Set().entries())``
  28221. * - Edge <=13 === "[object Object]"
  28222. */
  28223. if (setExists && objPrototype === setIteratorPrototype) {
  28224. return 'Set Iterator';
  28225. }
  28226. /* ! Spec Conformance
  28227. * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%arrayiteratorprototype%-@@tostringtag)
  28228. * ES6$22.1.5.2.2 - %ArrayIteratorPrototype%[@@toStringTag] should be "Array Iterator":
  28229. * Test: `Object.prototype.toString.call([][Symbol.iterator]())``
  28230. * - Edge <=13 === "[object Object]"
  28231. */
  28232. if (arrayIteratorExists && objPrototype === arrayIteratorPrototype) {
  28233. return 'Array Iterator';
  28234. }
  28235. /* ! Spec Conformance
  28236. * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%stringiteratorprototype%-@@tostringtag)
  28237. * ES6$21.1.5.2.2 - %StringIteratorPrototype%[@@toStringTag] should be "String Iterator":
  28238. * Test: `Object.prototype.toString.call(''[Symbol.iterator]())``
  28239. * - Edge <=13 === "[object Object]"
  28240. */
  28241. if (stringIteratorExists && objPrototype === stringIteratorPrototype) {
  28242. return 'String Iterator';
  28243. }
  28244. /* ! Speed optimisation
  28245. * Pre:
  28246. * object from null x 2,424,320 ops/sec ±1.67% (76 runs sampled)
  28247. * Post:
  28248. * object from null x 5,838,000 ops/sec ±0.99% (84 runs sampled)
  28249. */
  28250. if (objPrototype === null) {
  28251. return 'Object';
  28252. }
  28253. return Object
  28254. .prototype
  28255. .toString
  28256. .call(obj)
  28257. .slice(toStringLeftSliceLength, toStringRightSliceLength);
  28258. }
  28259. return typeDetect;
  28260. })));
  28261. }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
  28262. },{}]},{},[1])(1)
  28263. });