pdfmake.js 1.3 MB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545954695479548954995509551955295539554955595569557955895599560956195629563956495659566956795689569957095719572957395749575957695779578957995809581958295839584958595869587958895899590959195929593959495959596959795989599960096019602960396049605960696079608960996109611961296139614961596169617961896199620962196229623962496259626962796289629963096319632963396349635963696379638963996409641964296439644964596469647964896499650965196529653965496559656965796589659966096619662966396649665966696679668966996709671967296739674967596769677967896799680968196829683968496859686968796889689969096919692969396949695969696979698969997009701970297039704970597069707970897099710971197129713971497159716971797189719972097219722972397249725972697279728972997309731973297339734973597369737973897399740974197429743974497459746974797489749975097519752975397549755975697579758975997609761976297639764976597669767976897699770977197729773977497759776977797789779978097819782978397849785978697879788978997909791979297939794979597969797979897999800980198029803980498059806980798089809981098119812981398149815981698179818981998209821982298239824982598269827982898299830983198329833983498359836983798389839984098419842984398449845984698479848984998509851985298539854985598569857985898599860986198629863986498659866986798689869987098719872987398749875987698779878987998809881988298839884988598869887988898899890989198929893989498959896989798989899990099019902990399049905990699079908990999109911991299139914991599169917991899199920992199229923992499259926992799289929993099319932993399349935993699379938993999409941994299439944994599469947994899499950995199529953995499559956995799589959996099619962996399649965996699679968996999709971997299739974997599769977997899799980998199829983998499859986998799889989999099919992999399949995999699979998999910000100011000210003100041000510006100071000810009100101001110012100131001410015100161001710018100191002010021100221002310024100251002610027100281002910030100311003210033100341003510036100371003810039100401004110042100431004410045100461004710048100491005010051100521005310054100551005610057100581005910060100611006210063100641006510066100671006810069100701007110072100731007410075100761007710078100791008010081100821008310084100851008610087100881008910090100911009210093100941009510096100971009810099101001010110102101031010410105101061010710108101091011010111101121011310114101151011610117101181011910120101211012210123101241012510126101271012810129101301013110132101331013410135101361013710138101391014010141101421014310144101451014610147101481014910150101511015210153101541015510156101571015810159101601016110162101631016410165101661016710168101691017010171101721017310174101751017610177101781017910180101811018210183101841018510186101871018810189101901019110192101931019410195101961019710198101991020010201102021020310204102051020610207102081020910210102111021210213102141021510216102171021810219102201022110222102231022410225102261022710228102291023010231102321023310234102351023610237102381023910240102411024210243102441024510246102471024810249102501025110252102531025410255102561025710258102591026010261102621026310264102651026610267102681026910270102711027210273102741027510276102771027810279102801028110282102831028410285102861028710288102891029010291102921029310294102951029610297102981029910300103011030210303103041030510306103071030810309103101031110312103131031410315103161031710318103191032010321103221032310324103251032610327103281032910330103311033210333103341033510336103371033810339103401034110342103431034410345103461034710348103491035010351103521035310354103551035610357103581035910360103611036210363103641036510366103671036810369103701037110372103731037410375103761037710378103791038010381103821038310384103851038610387103881038910390103911039210393103941039510396103971039810399104001040110402104031040410405104061040710408104091041010411104121041310414104151041610417104181041910420104211042210423104241042510426104271042810429104301043110432104331043410435104361043710438104391044010441104421044310444104451044610447104481044910450104511045210453104541045510456104571045810459104601046110462104631046410465104661046710468104691047010471104721047310474104751047610477104781047910480104811048210483104841048510486104871048810489104901049110492104931049410495104961049710498104991050010501105021050310504105051050610507105081050910510105111051210513105141051510516105171051810519105201052110522105231052410525105261052710528105291053010531105321053310534105351053610537105381053910540105411054210543105441054510546105471054810549105501055110552105531055410555105561055710558105591056010561105621056310564105651056610567105681056910570105711057210573105741057510576105771057810579105801058110582105831058410585105861058710588105891059010591105921059310594105951059610597105981059910600106011060210603106041060510606106071060810609106101061110612106131061410615106161061710618106191062010621106221062310624106251062610627106281062910630106311063210633106341063510636106371063810639106401064110642106431064410645106461064710648106491065010651106521065310654106551065610657106581065910660106611066210663106641066510666106671066810669106701067110672106731067410675106761067710678106791068010681106821068310684106851068610687106881068910690106911069210693106941069510696106971069810699107001070110702107031070410705107061070710708107091071010711107121071310714107151071610717107181071910720107211072210723107241072510726107271072810729107301073110732107331073410735107361073710738107391074010741107421074310744107451074610747107481074910750107511075210753107541075510756107571075810759107601076110762107631076410765107661076710768107691077010771107721077310774107751077610777107781077910780107811078210783107841078510786107871078810789107901079110792107931079410795107961079710798107991080010801108021080310804108051080610807108081080910810108111081210813108141081510816108171081810819108201082110822108231082410825108261082710828108291083010831108321083310834108351083610837108381083910840108411084210843108441084510846108471084810849108501085110852108531085410855108561085710858108591086010861108621086310864108651086610867108681086910870108711087210873108741087510876108771087810879108801088110882108831088410885108861088710888108891089010891108921089310894108951089610897108981089910900109011090210903109041090510906109071090810909109101091110912109131091410915109161091710918109191092010921109221092310924109251092610927109281092910930109311093210933109341093510936109371093810939109401094110942109431094410945109461094710948109491095010951109521095310954109551095610957109581095910960109611096210963109641096510966109671096810969109701097110972109731097410975109761097710978109791098010981109821098310984109851098610987109881098910990109911099210993109941099510996109971099810999110001100111002110031100411005110061100711008110091101011011110121101311014110151101611017110181101911020110211102211023110241102511026110271102811029110301103111032110331103411035110361103711038110391104011041110421104311044110451104611047110481104911050110511105211053110541105511056110571105811059110601106111062110631106411065110661106711068110691107011071110721107311074110751107611077110781107911080110811108211083110841108511086110871108811089110901109111092110931109411095110961109711098110991110011101111021110311104111051110611107111081110911110111111111211113111141111511116111171111811119111201112111122111231112411125111261112711128111291113011131111321113311134111351113611137111381113911140111411114211143111441114511146111471114811149111501115111152111531115411155111561115711158111591116011161111621116311164111651116611167111681116911170111711117211173111741117511176111771117811179111801118111182111831118411185111861118711188111891119011191111921119311194111951119611197111981119911200112011120211203112041120511206112071120811209112101121111212112131121411215112161121711218112191122011221112221122311224112251122611227112281122911230112311123211233112341123511236112371123811239112401124111242112431124411245112461124711248112491125011251112521125311254112551125611257112581125911260112611126211263112641126511266112671126811269112701127111272112731127411275112761127711278112791128011281112821128311284112851128611287112881128911290112911129211293112941129511296112971129811299113001130111302113031130411305113061130711308113091131011311113121131311314113151131611317113181131911320113211132211323113241132511326113271132811329113301133111332113331133411335113361133711338113391134011341113421134311344113451134611347113481134911350113511135211353113541135511356113571135811359113601136111362113631136411365113661136711368113691137011371113721137311374113751137611377113781137911380113811138211383113841138511386113871138811389113901139111392113931139411395113961139711398113991140011401114021140311404114051140611407114081140911410114111141211413114141141511416114171141811419114201142111422114231142411425114261142711428114291143011431114321143311434114351143611437114381143911440114411144211443114441144511446114471144811449114501145111452114531145411455114561145711458114591146011461114621146311464114651146611467114681146911470114711147211473114741147511476114771147811479114801148111482114831148411485114861148711488114891149011491114921149311494114951149611497114981149911500115011150211503115041150511506115071150811509115101151111512115131151411515115161151711518115191152011521115221152311524115251152611527115281152911530115311153211533115341153511536115371153811539115401154111542115431154411545115461154711548115491155011551115521155311554115551155611557115581155911560115611156211563115641156511566115671156811569115701157111572115731157411575115761157711578115791158011581115821158311584115851158611587115881158911590115911159211593115941159511596115971159811599116001160111602116031160411605116061160711608116091161011611116121161311614116151161611617116181161911620116211162211623116241162511626116271162811629116301163111632116331163411635116361163711638116391164011641116421164311644116451164611647116481164911650116511165211653116541165511656116571165811659116601166111662116631166411665116661166711668116691167011671116721167311674116751167611677116781167911680116811168211683116841168511686116871168811689116901169111692116931169411695116961169711698116991170011701117021170311704117051170611707117081170911710117111171211713117141171511716117171171811719117201172111722117231172411725117261172711728117291173011731117321173311734117351173611737117381173911740117411174211743117441174511746117471174811749117501175111752117531175411755117561175711758117591176011761117621176311764117651176611767117681176911770117711177211773117741177511776117771177811779117801178111782117831178411785117861178711788117891179011791117921179311794117951179611797117981179911800118011180211803118041180511806118071180811809118101181111812118131181411815118161181711818118191182011821118221182311824118251182611827118281182911830118311183211833118341183511836118371183811839118401184111842118431184411845118461184711848118491185011851118521185311854118551185611857118581185911860118611186211863118641186511866118671186811869118701187111872118731187411875118761187711878118791188011881118821188311884118851188611887118881188911890118911189211893118941189511896118971189811899119001190111902119031190411905119061190711908119091191011911119121191311914119151191611917119181191911920119211192211923119241192511926119271192811929119301193111932119331193411935119361193711938119391194011941119421194311944119451194611947119481194911950119511195211953119541195511956119571195811959119601196111962119631196411965119661196711968119691197011971119721197311974119751197611977119781197911980119811198211983119841198511986119871198811989119901199111992119931199411995119961199711998119991200012001120021200312004120051200612007120081200912010120111201212013120141201512016120171201812019120201202112022120231202412025120261202712028120291203012031120321203312034120351203612037120381203912040120411204212043120441204512046120471204812049120501205112052120531205412055120561205712058120591206012061120621206312064120651206612067120681206912070120711207212073120741207512076120771207812079120801208112082120831208412085120861208712088120891209012091120921209312094120951209612097120981209912100121011210212103121041210512106121071210812109121101211112112121131211412115121161211712118121191212012121121221212312124121251212612127121281212912130121311213212133121341213512136121371213812139121401214112142121431214412145121461214712148121491215012151121521215312154121551215612157121581215912160121611216212163121641216512166121671216812169121701217112172121731217412175121761217712178121791218012181121821218312184121851218612187121881218912190121911219212193121941219512196121971219812199122001220112202122031220412205122061220712208122091221012211122121221312214122151221612217122181221912220122211222212223122241222512226122271222812229122301223112232122331223412235122361223712238122391224012241122421224312244122451224612247122481224912250122511225212253122541225512256122571225812259122601226112262122631226412265122661226712268122691227012271122721227312274122751227612277122781227912280122811228212283122841228512286122871228812289122901229112292122931229412295122961229712298122991230012301123021230312304123051230612307123081230912310123111231212313123141231512316123171231812319123201232112322123231232412325123261232712328123291233012331123321233312334123351233612337123381233912340123411234212343123441234512346123471234812349123501235112352123531235412355123561235712358123591236012361123621236312364123651236612367123681236912370123711237212373123741237512376123771237812379123801238112382123831238412385123861238712388123891239012391123921239312394123951239612397123981239912400124011240212403124041240512406124071240812409124101241112412124131241412415124161241712418124191242012421124221242312424124251242612427124281242912430124311243212433124341243512436124371243812439124401244112442124431244412445124461244712448124491245012451124521245312454124551245612457124581245912460124611246212463124641246512466124671246812469124701247112472124731247412475124761247712478124791248012481124821248312484124851248612487124881248912490124911249212493124941249512496124971249812499125001250112502125031250412505125061250712508125091251012511125121251312514125151251612517125181251912520125211252212523125241252512526125271252812529125301253112532125331253412535125361253712538125391254012541125421254312544125451254612547125481254912550125511255212553125541255512556125571255812559125601256112562125631256412565125661256712568125691257012571125721257312574125751257612577125781257912580125811258212583125841258512586125871258812589125901259112592125931259412595125961259712598125991260012601126021260312604126051260612607126081260912610126111261212613126141261512616126171261812619126201262112622126231262412625126261262712628126291263012631126321263312634126351263612637126381263912640126411264212643126441264512646126471264812649126501265112652126531265412655126561265712658126591266012661126621266312664126651266612667126681266912670126711267212673126741267512676126771267812679126801268112682126831268412685126861268712688126891269012691126921269312694126951269612697126981269912700127011270212703127041270512706127071270812709127101271112712127131271412715127161271712718127191272012721127221272312724127251272612727127281272912730127311273212733127341273512736127371273812739127401274112742127431274412745127461274712748127491275012751127521275312754127551275612757127581275912760127611276212763127641276512766127671276812769127701277112772127731277412775127761277712778127791278012781127821278312784127851278612787127881278912790127911279212793127941279512796127971279812799128001280112802128031280412805128061280712808128091281012811128121281312814128151281612817128181281912820128211282212823128241282512826128271282812829128301283112832128331283412835128361283712838128391284012841128421284312844128451284612847128481284912850128511285212853128541285512856128571285812859128601286112862128631286412865128661286712868128691287012871128721287312874128751287612877128781287912880128811288212883128841288512886128871288812889128901289112892128931289412895128961289712898128991290012901129021290312904129051290612907129081290912910129111291212913129141291512916129171291812919129201292112922129231292412925129261292712928129291293012931129321293312934129351293612937129381293912940129411294212943129441294512946129471294812949129501295112952129531295412955129561295712958129591296012961129621296312964129651296612967129681296912970129711297212973129741297512976129771297812979129801298112982129831298412985129861298712988129891299012991129921299312994129951299612997129981299913000130011300213003130041300513006130071300813009130101301113012130131301413015130161301713018130191302013021130221302313024130251302613027130281302913030130311303213033130341303513036130371303813039130401304113042130431304413045130461304713048130491305013051130521305313054130551305613057130581305913060130611306213063130641306513066130671306813069130701307113072130731307413075130761307713078130791308013081130821308313084130851308613087130881308913090130911309213093130941309513096130971309813099131001310113102131031310413105131061310713108131091311013111131121311313114131151311613117131181311913120131211312213123131241312513126131271312813129131301313113132131331313413135131361313713138131391314013141131421314313144131451314613147131481314913150131511315213153131541315513156131571315813159131601316113162131631316413165131661316713168131691317013171131721317313174131751317613177131781317913180131811318213183131841318513186131871318813189131901319113192131931319413195131961319713198131991320013201132021320313204132051320613207132081320913210132111321213213132141321513216132171321813219132201322113222132231322413225132261322713228132291323013231132321323313234132351323613237132381323913240132411324213243132441324513246132471324813249132501325113252132531325413255132561325713258132591326013261132621326313264132651326613267132681326913270132711327213273132741327513276132771327813279132801328113282132831328413285132861328713288132891329013291132921329313294132951329613297132981329913300133011330213303133041330513306133071330813309133101331113312133131331413315133161331713318133191332013321133221332313324133251332613327133281332913330133311333213333133341333513336133371333813339133401334113342133431334413345133461334713348133491335013351133521335313354133551335613357133581335913360133611336213363133641336513366133671336813369133701337113372133731337413375133761337713378133791338013381133821338313384133851338613387133881338913390133911339213393133941339513396133971339813399134001340113402134031340413405134061340713408134091341013411134121341313414134151341613417134181341913420134211342213423134241342513426134271342813429134301343113432134331343413435134361343713438134391344013441134421344313444134451344613447134481344913450134511345213453134541345513456134571345813459134601346113462134631346413465134661346713468134691347013471134721347313474134751347613477134781347913480134811348213483134841348513486134871348813489134901349113492134931349413495134961349713498134991350013501135021350313504135051350613507135081350913510135111351213513135141351513516135171351813519135201352113522135231352413525135261352713528135291353013531135321353313534135351353613537135381353913540135411354213543135441354513546135471354813549135501355113552135531355413555135561355713558135591356013561135621356313564135651356613567135681356913570135711357213573135741357513576135771357813579135801358113582135831358413585135861358713588135891359013591135921359313594135951359613597135981359913600136011360213603136041360513606136071360813609136101361113612136131361413615136161361713618136191362013621136221362313624136251362613627136281362913630136311363213633136341363513636136371363813639136401364113642136431364413645136461364713648136491365013651136521365313654136551365613657136581365913660136611366213663136641366513666136671366813669136701367113672136731367413675136761367713678136791368013681136821368313684136851368613687136881368913690136911369213693136941369513696136971369813699137001370113702137031370413705137061370713708137091371013711137121371313714137151371613717137181371913720137211372213723137241372513726137271372813729137301373113732137331373413735137361373713738137391374013741137421374313744137451374613747137481374913750137511375213753137541375513756137571375813759137601376113762137631376413765137661376713768137691377013771137721377313774137751377613777137781377913780137811378213783137841378513786137871378813789137901379113792137931379413795137961379713798137991380013801138021380313804138051380613807138081380913810138111381213813138141381513816138171381813819138201382113822138231382413825138261382713828138291383013831138321383313834138351383613837138381383913840138411384213843138441384513846138471384813849138501385113852138531385413855138561385713858138591386013861138621386313864138651386613867138681386913870138711387213873138741387513876138771387813879138801388113882138831388413885138861388713888138891389013891138921389313894138951389613897138981389913900139011390213903139041390513906139071390813909139101391113912139131391413915139161391713918139191392013921139221392313924139251392613927139281392913930139311393213933139341393513936139371393813939139401394113942139431394413945139461394713948139491395013951139521395313954139551395613957139581395913960139611396213963139641396513966139671396813969139701397113972139731397413975139761397713978139791398013981139821398313984139851398613987139881398913990139911399213993139941399513996139971399813999140001400114002140031400414005140061400714008140091401014011140121401314014140151401614017140181401914020140211402214023140241402514026140271402814029140301403114032140331403414035140361403714038140391404014041140421404314044140451404614047140481404914050140511405214053140541405514056140571405814059140601406114062140631406414065140661406714068140691407014071140721407314074140751407614077140781407914080140811408214083140841408514086140871408814089140901409114092140931409414095140961409714098140991410014101141021410314104141051410614107141081410914110141111411214113141141411514116141171411814119141201412114122141231412414125141261412714128141291413014131141321413314134141351413614137141381413914140141411414214143141441414514146141471414814149141501415114152141531415414155141561415714158141591416014161141621416314164141651416614167141681416914170141711417214173141741417514176141771417814179141801418114182141831418414185141861418714188141891419014191141921419314194141951419614197141981419914200142011420214203142041420514206142071420814209142101421114212142131421414215142161421714218142191422014221142221422314224142251422614227142281422914230142311423214233142341423514236142371423814239142401424114242142431424414245142461424714248142491425014251142521425314254142551425614257142581425914260142611426214263142641426514266142671426814269142701427114272142731427414275142761427714278142791428014281142821428314284142851428614287142881428914290142911429214293142941429514296142971429814299143001430114302143031430414305143061430714308143091431014311143121431314314143151431614317143181431914320143211432214323143241432514326143271432814329143301433114332143331433414335143361433714338143391434014341143421434314344143451434614347143481434914350143511435214353143541435514356143571435814359143601436114362143631436414365143661436714368143691437014371143721437314374143751437614377143781437914380143811438214383143841438514386143871438814389143901439114392143931439414395143961439714398143991440014401144021440314404144051440614407144081440914410144111441214413144141441514416144171441814419144201442114422144231442414425144261442714428144291443014431144321443314434144351443614437144381443914440144411444214443144441444514446144471444814449144501445114452144531445414455144561445714458144591446014461144621446314464144651446614467144681446914470144711447214473144741447514476144771447814479144801448114482144831448414485144861448714488144891449014491144921449314494144951449614497144981449914500145011450214503145041450514506145071450814509145101451114512145131451414515145161451714518145191452014521145221452314524145251452614527145281452914530145311453214533145341453514536145371453814539145401454114542145431454414545145461454714548145491455014551145521455314554145551455614557145581455914560145611456214563145641456514566145671456814569145701457114572145731457414575145761457714578145791458014581145821458314584145851458614587145881458914590145911459214593145941459514596145971459814599146001460114602146031460414605146061460714608146091461014611146121461314614146151461614617146181461914620146211462214623146241462514626146271462814629146301463114632146331463414635146361463714638146391464014641146421464314644146451464614647146481464914650146511465214653146541465514656146571465814659146601466114662146631466414665146661466714668146691467014671146721467314674146751467614677146781467914680146811468214683146841468514686146871468814689146901469114692146931469414695146961469714698146991470014701147021470314704147051470614707147081470914710147111471214713147141471514716147171471814719147201472114722147231472414725147261472714728147291473014731147321473314734147351473614737147381473914740147411474214743147441474514746147471474814749147501475114752147531475414755147561475714758147591476014761147621476314764147651476614767147681476914770147711477214773147741477514776147771477814779147801478114782147831478414785147861478714788147891479014791147921479314794147951479614797147981479914800148011480214803148041480514806148071480814809148101481114812148131481414815148161481714818148191482014821148221482314824148251482614827148281482914830148311483214833148341483514836148371483814839148401484114842148431484414845148461484714848148491485014851148521485314854148551485614857148581485914860148611486214863148641486514866148671486814869148701487114872148731487414875148761487714878148791488014881148821488314884148851488614887148881488914890148911489214893148941489514896148971489814899149001490114902149031490414905149061490714908149091491014911149121491314914149151491614917149181491914920149211492214923149241492514926149271492814929149301493114932149331493414935149361493714938149391494014941149421494314944149451494614947149481494914950149511495214953149541495514956149571495814959149601496114962149631496414965149661496714968149691497014971149721497314974149751497614977149781497914980149811498214983149841498514986149871498814989149901499114992149931499414995149961499714998149991500015001150021500315004150051500615007150081500915010150111501215013150141501515016150171501815019150201502115022150231502415025150261502715028150291503015031150321503315034150351503615037150381503915040150411504215043150441504515046150471504815049150501505115052150531505415055150561505715058150591506015061150621506315064150651506615067150681506915070150711507215073150741507515076150771507815079150801508115082150831508415085150861508715088150891509015091150921509315094150951509615097150981509915100151011510215103151041510515106151071510815109151101511115112151131511415115151161511715118151191512015121151221512315124151251512615127151281512915130151311513215133151341513515136151371513815139151401514115142151431514415145151461514715148151491515015151151521515315154151551515615157151581515915160151611516215163151641516515166151671516815169151701517115172151731517415175151761517715178151791518015181151821518315184151851518615187151881518915190151911519215193151941519515196151971519815199152001520115202152031520415205152061520715208152091521015211152121521315214152151521615217152181521915220152211522215223152241522515226152271522815229152301523115232152331523415235152361523715238152391524015241152421524315244152451524615247152481524915250152511525215253152541525515256152571525815259152601526115262152631526415265152661526715268152691527015271152721527315274152751527615277152781527915280152811528215283152841528515286152871528815289152901529115292152931529415295152961529715298152991530015301153021530315304153051530615307153081530915310153111531215313153141531515316153171531815319153201532115322153231532415325153261532715328153291533015331153321533315334153351533615337153381533915340153411534215343153441534515346153471534815349153501535115352153531535415355153561535715358153591536015361153621536315364153651536615367153681536915370153711537215373153741537515376153771537815379153801538115382153831538415385153861538715388153891539015391153921539315394153951539615397153981539915400154011540215403154041540515406154071540815409154101541115412154131541415415154161541715418154191542015421154221542315424154251542615427154281542915430154311543215433154341543515436154371543815439154401544115442154431544415445154461544715448154491545015451154521545315454154551545615457154581545915460154611546215463154641546515466154671546815469154701547115472154731547415475154761547715478154791548015481154821548315484154851548615487154881548915490154911549215493154941549515496154971549815499155001550115502155031550415505155061550715508155091551015511155121551315514155151551615517155181551915520155211552215523155241552515526155271552815529155301553115532155331553415535155361553715538155391554015541155421554315544155451554615547155481554915550155511555215553155541555515556155571555815559155601556115562155631556415565155661556715568155691557015571155721557315574155751557615577155781557915580155811558215583155841558515586155871558815589155901559115592155931559415595155961559715598155991560015601156021560315604156051560615607156081560915610156111561215613156141561515616156171561815619156201562115622156231562415625156261562715628156291563015631156321563315634156351563615637156381563915640156411564215643156441564515646156471564815649156501565115652156531565415655156561565715658156591566015661156621566315664156651566615667156681566915670156711567215673156741567515676156771567815679156801568115682156831568415685156861568715688156891569015691156921569315694156951569615697156981569915700157011570215703157041570515706157071570815709157101571115712157131571415715157161571715718157191572015721157221572315724157251572615727157281572915730157311573215733157341573515736157371573815739157401574115742157431574415745157461574715748157491575015751157521575315754157551575615757157581575915760157611576215763157641576515766157671576815769157701577115772157731577415775157761577715778157791578015781157821578315784157851578615787157881578915790157911579215793157941579515796157971579815799158001580115802158031580415805158061580715808158091581015811158121581315814158151581615817158181581915820158211582215823158241582515826158271582815829158301583115832158331583415835158361583715838158391584015841158421584315844158451584615847158481584915850158511585215853158541585515856158571585815859158601586115862158631586415865158661586715868158691587015871158721587315874158751587615877158781587915880158811588215883158841588515886158871588815889158901589115892158931589415895158961589715898158991590015901159021590315904159051590615907159081590915910159111591215913159141591515916159171591815919159201592115922159231592415925159261592715928159291593015931159321593315934159351593615937159381593915940159411594215943159441594515946159471594815949159501595115952159531595415955159561595715958159591596015961159621596315964159651596615967159681596915970159711597215973159741597515976159771597815979159801598115982159831598415985159861598715988159891599015991159921599315994159951599615997159981599916000160011600216003160041600516006160071600816009160101601116012160131601416015160161601716018160191602016021160221602316024160251602616027160281602916030160311603216033160341603516036160371603816039160401604116042160431604416045160461604716048160491605016051160521605316054160551605616057160581605916060160611606216063160641606516066160671606816069160701607116072160731607416075160761607716078160791608016081160821608316084160851608616087160881608916090160911609216093160941609516096160971609816099161001610116102161031610416105161061610716108161091611016111161121611316114161151611616117161181611916120161211612216123161241612516126161271612816129161301613116132161331613416135161361613716138161391614016141161421614316144161451614616147161481614916150161511615216153161541615516156161571615816159161601616116162161631616416165161661616716168161691617016171161721617316174161751617616177161781617916180161811618216183161841618516186161871618816189161901619116192161931619416195161961619716198161991620016201162021620316204162051620616207162081620916210162111621216213162141621516216162171621816219162201622116222162231622416225162261622716228162291623016231162321623316234162351623616237162381623916240162411624216243162441624516246162471624816249162501625116252162531625416255162561625716258162591626016261162621626316264162651626616267162681626916270162711627216273162741627516276162771627816279162801628116282162831628416285162861628716288162891629016291162921629316294162951629616297162981629916300163011630216303163041630516306163071630816309163101631116312163131631416315163161631716318163191632016321163221632316324163251632616327163281632916330163311633216333163341633516336163371633816339163401634116342163431634416345163461634716348163491635016351163521635316354163551635616357163581635916360163611636216363163641636516366163671636816369163701637116372163731637416375163761637716378163791638016381163821638316384163851638616387163881638916390163911639216393163941639516396163971639816399164001640116402164031640416405164061640716408164091641016411164121641316414164151641616417164181641916420164211642216423164241642516426164271642816429164301643116432164331643416435164361643716438164391644016441164421644316444164451644616447164481644916450164511645216453164541645516456164571645816459164601646116462164631646416465164661646716468164691647016471164721647316474164751647616477164781647916480164811648216483164841648516486164871648816489164901649116492164931649416495164961649716498164991650016501165021650316504165051650616507165081650916510165111651216513165141651516516165171651816519165201652116522165231652416525165261652716528165291653016531165321653316534165351653616537165381653916540165411654216543165441654516546165471654816549165501655116552165531655416555165561655716558165591656016561165621656316564165651656616567165681656916570165711657216573165741657516576165771657816579165801658116582165831658416585165861658716588165891659016591165921659316594165951659616597165981659916600166011660216603166041660516606166071660816609166101661116612166131661416615166161661716618166191662016621166221662316624166251662616627166281662916630166311663216633166341663516636166371663816639166401664116642166431664416645166461664716648166491665016651166521665316654166551665616657166581665916660166611666216663166641666516666166671666816669166701667116672166731667416675166761667716678166791668016681166821668316684166851668616687166881668916690166911669216693166941669516696166971669816699167001670116702167031670416705167061670716708167091671016711167121671316714167151671616717167181671916720167211672216723167241672516726167271672816729167301673116732167331673416735167361673716738167391674016741167421674316744167451674616747167481674916750167511675216753167541675516756167571675816759167601676116762167631676416765167661676716768167691677016771167721677316774167751677616777167781677916780167811678216783167841678516786167871678816789167901679116792167931679416795167961679716798167991680016801168021680316804168051680616807168081680916810168111681216813168141681516816168171681816819168201682116822168231682416825168261682716828168291683016831168321683316834168351683616837168381683916840168411684216843168441684516846168471684816849168501685116852168531685416855168561685716858168591686016861168621686316864168651686616867168681686916870168711687216873168741687516876168771687816879168801688116882168831688416885168861688716888168891689016891168921689316894168951689616897168981689916900169011690216903169041690516906169071690816909169101691116912169131691416915169161691716918169191692016921169221692316924169251692616927169281692916930169311693216933169341693516936169371693816939169401694116942169431694416945169461694716948169491695016951169521695316954169551695616957169581695916960169611696216963169641696516966169671696816969169701697116972169731697416975169761697716978169791698016981169821698316984169851698616987169881698916990169911699216993169941699516996169971699816999170001700117002170031700417005170061700717008170091701017011170121701317014170151701617017170181701917020170211702217023170241702517026170271702817029170301703117032170331703417035170361703717038170391704017041170421704317044170451704617047170481704917050170511705217053170541705517056170571705817059170601706117062170631706417065170661706717068170691707017071170721707317074170751707617077170781707917080170811708217083170841708517086170871708817089170901709117092170931709417095170961709717098170991710017101171021710317104171051710617107171081710917110171111711217113171141711517116171171711817119171201712117122171231712417125171261712717128171291713017131171321713317134171351713617137171381713917140171411714217143171441714517146171471714817149171501715117152171531715417155171561715717158171591716017161171621716317164171651716617167171681716917170171711717217173171741717517176171771717817179171801718117182171831718417185171861718717188171891719017191171921719317194171951719617197171981719917200172011720217203172041720517206172071720817209172101721117212172131721417215172161721717218172191722017221172221722317224172251722617227172281722917230172311723217233172341723517236172371723817239172401724117242172431724417245172461724717248172491725017251172521725317254172551725617257172581725917260172611726217263172641726517266172671726817269172701727117272172731727417275172761727717278172791728017281172821728317284172851728617287172881728917290172911729217293172941729517296172971729817299173001730117302173031730417305173061730717308173091731017311173121731317314173151731617317173181731917320173211732217323173241732517326173271732817329173301733117332173331733417335173361733717338173391734017341173421734317344173451734617347173481734917350173511735217353173541735517356173571735817359173601736117362173631736417365173661736717368173691737017371173721737317374173751737617377173781737917380173811738217383173841738517386173871738817389173901739117392173931739417395173961739717398173991740017401174021740317404174051740617407174081740917410174111741217413174141741517416174171741817419174201742117422174231742417425174261742717428174291743017431174321743317434174351743617437174381743917440174411744217443174441744517446174471744817449174501745117452174531745417455174561745717458174591746017461174621746317464174651746617467174681746917470174711747217473174741747517476174771747817479174801748117482174831748417485174861748717488174891749017491174921749317494174951749617497174981749917500175011750217503175041750517506175071750817509175101751117512175131751417515175161751717518175191752017521175221752317524175251752617527175281752917530175311753217533175341753517536175371753817539175401754117542175431754417545175461754717548175491755017551175521755317554175551755617557175581755917560175611756217563175641756517566175671756817569175701757117572175731757417575175761757717578175791758017581175821758317584175851758617587175881758917590175911759217593175941759517596175971759817599176001760117602176031760417605176061760717608176091761017611176121761317614176151761617617176181761917620176211762217623176241762517626176271762817629176301763117632176331763417635176361763717638176391764017641176421764317644176451764617647176481764917650176511765217653176541765517656176571765817659176601766117662176631766417665176661766717668176691767017671176721767317674176751767617677176781767917680176811768217683176841768517686176871768817689176901769117692176931769417695176961769717698176991770017701177021770317704177051770617707177081770917710177111771217713177141771517716177171771817719177201772117722177231772417725177261772717728177291773017731177321773317734177351773617737177381773917740177411774217743177441774517746177471774817749177501775117752177531775417755177561775717758177591776017761177621776317764177651776617767177681776917770177711777217773177741777517776177771777817779177801778117782177831778417785177861778717788177891779017791177921779317794177951779617797177981779917800178011780217803178041780517806178071780817809178101781117812178131781417815178161781717818178191782017821178221782317824178251782617827178281782917830178311783217833178341783517836178371783817839178401784117842178431784417845178461784717848178491785017851178521785317854178551785617857178581785917860178611786217863178641786517866178671786817869178701787117872178731787417875178761787717878178791788017881178821788317884178851788617887178881788917890178911789217893178941789517896178971789817899179001790117902179031790417905179061790717908179091791017911179121791317914179151791617917179181791917920179211792217923179241792517926179271792817929179301793117932179331793417935179361793717938179391794017941179421794317944179451794617947179481794917950179511795217953179541795517956179571795817959179601796117962179631796417965179661796717968179691797017971179721797317974179751797617977179781797917980179811798217983179841798517986179871798817989179901799117992179931799417995179961799717998179991800018001180021800318004180051800618007180081800918010180111801218013180141801518016180171801818019180201802118022180231802418025180261802718028180291803018031180321803318034180351803618037180381803918040180411804218043180441804518046180471804818049180501805118052180531805418055180561805718058180591806018061180621806318064180651806618067180681806918070180711807218073180741807518076180771807818079180801808118082180831808418085180861808718088180891809018091180921809318094180951809618097180981809918100181011810218103181041810518106181071810818109181101811118112181131811418115181161811718118181191812018121181221812318124181251812618127181281812918130181311813218133181341813518136181371813818139181401814118142181431814418145181461814718148181491815018151181521815318154181551815618157181581815918160181611816218163181641816518166181671816818169181701817118172181731817418175181761817718178181791818018181181821818318184181851818618187181881818918190181911819218193181941819518196181971819818199182001820118202182031820418205182061820718208182091821018211182121821318214182151821618217182181821918220182211822218223182241822518226182271822818229182301823118232182331823418235182361823718238182391824018241182421824318244182451824618247182481824918250182511825218253182541825518256182571825818259182601826118262182631826418265182661826718268182691827018271182721827318274182751827618277182781827918280182811828218283182841828518286182871828818289182901829118292182931829418295182961829718298182991830018301183021830318304183051830618307183081830918310183111831218313183141831518316183171831818319183201832118322183231832418325183261832718328183291833018331183321833318334183351833618337183381833918340183411834218343183441834518346183471834818349183501835118352183531835418355183561835718358183591836018361183621836318364183651836618367183681836918370183711837218373183741837518376183771837818379183801838118382183831838418385183861838718388183891839018391183921839318394183951839618397183981839918400184011840218403184041840518406184071840818409184101841118412184131841418415184161841718418184191842018421184221842318424184251842618427184281842918430184311843218433184341843518436184371843818439184401844118442184431844418445184461844718448184491845018451184521845318454184551845618457184581845918460184611846218463184641846518466184671846818469184701847118472184731847418475184761847718478184791848018481184821848318484184851848618487184881848918490184911849218493184941849518496184971849818499185001850118502185031850418505185061850718508185091851018511185121851318514185151851618517185181851918520185211852218523185241852518526185271852818529185301853118532185331853418535185361853718538185391854018541185421854318544185451854618547185481854918550185511855218553185541855518556185571855818559185601856118562185631856418565185661856718568185691857018571185721857318574185751857618577185781857918580185811858218583185841858518586185871858818589185901859118592185931859418595185961859718598185991860018601186021860318604186051860618607186081860918610186111861218613186141861518616186171861818619186201862118622186231862418625186261862718628186291863018631186321863318634186351863618637186381863918640186411864218643186441864518646186471864818649186501865118652186531865418655186561865718658186591866018661186621866318664186651866618667186681866918670186711867218673186741867518676186771867818679186801868118682186831868418685186861868718688186891869018691186921869318694186951869618697186981869918700187011870218703187041870518706187071870818709187101871118712187131871418715187161871718718187191872018721187221872318724187251872618727187281872918730187311873218733187341873518736187371873818739187401874118742187431874418745187461874718748187491875018751187521875318754187551875618757187581875918760187611876218763187641876518766187671876818769187701877118772187731877418775187761877718778187791878018781187821878318784187851878618787187881878918790187911879218793187941879518796187971879818799188001880118802188031880418805188061880718808188091881018811188121881318814188151881618817188181881918820188211882218823188241882518826188271882818829188301883118832188331883418835188361883718838188391884018841188421884318844188451884618847188481884918850188511885218853188541885518856188571885818859188601886118862188631886418865188661886718868188691887018871188721887318874188751887618877188781887918880188811888218883188841888518886188871888818889188901889118892188931889418895188961889718898188991890018901189021890318904189051890618907189081890918910189111891218913189141891518916189171891818919189201892118922189231892418925189261892718928189291893018931189321893318934189351893618937189381893918940189411894218943189441894518946189471894818949189501895118952189531895418955189561895718958189591896018961189621896318964189651896618967189681896918970189711897218973189741897518976189771897818979189801898118982189831898418985189861898718988189891899018991189921899318994189951899618997189981899919000190011900219003190041900519006190071900819009190101901119012190131901419015190161901719018190191902019021190221902319024190251902619027190281902919030190311903219033190341903519036190371903819039190401904119042190431904419045190461904719048190491905019051190521905319054190551905619057190581905919060190611906219063190641906519066190671906819069190701907119072190731907419075190761907719078190791908019081190821908319084190851908619087190881908919090190911909219093190941909519096190971909819099191001910119102191031910419105191061910719108191091911019111191121911319114191151911619117191181911919120191211912219123191241912519126191271912819129191301913119132191331913419135191361913719138191391914019141191421914319144191451914619147191481914919150191511915219153191541915519156191571915819159191601916119162191631916419165191661916719168191691917019171191721917319174191751917619177191781917919180191811918219183191841918519186191871918819189191901919119192191931919419195191961919719198191991920019201192021920319204192051920619207192081920919210192111921219213192141921519216192171921819219192201922119222192231922419225192261922719228192291923019231192321923319234192351923619237192381923919240192411924219243192441924519246192471924819249192501925119252192531925419255192561925719258192591926019261192621926319264192651926619267192681926919270192711927219273192741927519276192771927819279192801928119282192831928419285192861928719288192891929019291192921929319294192951929619297192981929919300193011930219303193041930519306193071930819309193101931119312193131931419315193161931719318193191932019321193221932319324193251932619327193281932919330193311933219333193341933519336193371933819339193401934119342193431934419345193461934719348193491935019351193521935319354193551935619357193581935919360193611936219363193641936519366193671936819369193701937119372193731937419375193761937719378193791938019381193821938319384193851938619387193881938919390193911939219393193941939519396193971939819399194001940119402194031940419405194061940719408194091941019411194121941319414194151941619417194181941919420194211942219423194241942519426194271942819429194301943119432194331943419435194361943719438194391944019441194421944319444194451944619447194481944919450194511945219453194541945519456194571945819459194601946119462194631946419465194661946719468194691947019471194721947319474194751947619477194781947919480194811948219483194841948519486194871948819489194901949119492194931949419495194961949719498194991950019501195021950319504195051950619507195081950919510195111951219513195141951519516195171951819519195201952119522195231952419525195261952719528195291953019531195321953319534195351953619537195381953919540195411954219543195441954519546195471954819549195501955119552195531955419555195561955719558195591956019561195621956319564195651956619567195681956919570195711957219573195741957519576195771957819579195801958119582195831958419585195861958719588195891959019591195921959319594195951959619597195981959919600196011960219603196041960519606196071960819609196101961119612196131961419615196161961719618196191962019621196221962319624196251962619627196281962919630196311963219633196341963519636196371963819639196401964119642196431964419645196461964719648196491965019651196521965319654196551965619657196581965919660196611966219663196641966519666196671966819669196701967119672196731967419675196761967719678196791968019681196821968319684196851968619687196881968919690196911969219693196941969519696196971969819699197001970119702197031970419705197061970719708197091971019711197121971319714197151971619717197181971919720197211972219723197241972519726197271972819729197301973119732197331973419735197361973719738197391974019741197421974319744197451974619747197481974919750197511975219753197541975519756197571975819759197601976119762197631976419765197661976719768197691977019771197721977319774197751977619777197781977919780197811978219783197841978519786197871978819789197901979119792197931979419795197961979719798197991980019801198021980319804198051980619807198081980919810198111981219813198141981519816198171981819819198201982119822198231982419825198261982719828198291983019831198321983319834198351983619837198381983919840198411984219843198441984519846198471984819849198501985119852198531985419855198561985719858198591986019861198621986319864198651986619867198681986919870198711987219873198741987519876198771987819879198801988119882198831988419885198861988719888198891989019891198921989319894198951989619897198981989919900199011990219903199041990519906199071990819909199101991119912199131991419915199161991719918199191992019921199221992319924199251992619927199281992919930199311993219933199341993519936199371993819939199401994119942199431994419945199461994719948199491995019951199521995319954199551995619957199581995919960199611996219963199641996519966199671996819969199701997119972199731997419975199761997719978199791998019981199821998319984199851998619987199881998919990199911999219993199941999519996199971999819999200002000120002200032000420005200062000720008200092001020011200122001320014200152001620017200182001920020200212002220023200242002520026200272002820029200302003120032200332003420035200362003720038200392004020041200422004320044200452004620047200482004920050200512005220053200542005520056200572005820059200602006120062200632006420065200662006720068200692007020071200722007320074200752007620077200782007920080200812008220083200842008520086200872008820089200902009120092200932009420095200962009720098200992010020101201022010320104201052010620107201082010920110201112011220113201142011520116201172011820119201202012120122201232012420125201262012720128201292013020131201322013320134201352013620137201382013920140201412014220143201442014520146201472014820149201502015120152201532015420155201562015720158201592016020161201622016320164201652016620167201682016920170201712017220173201742017520176201772017820179201802018120182201832018420185201862018720188201892019020191201922019320194201952019620197201982019920200202012020220203202042020520206202072020820209202102021120212202132021420215202162021720218202192022020221202222022320224202252022620227202282022920230202312023220233202342023520236202372023820239202402024120242202432024420245202462024720248202492025020251202522025320254202552025620257202582025920260202612026220263202642026520266202672026820269202702027120272202732027420275202762027720278202792028020281202822028320284202852028620287202882028920290202912029220293202942029520296202972029820299203002030120302203032030420305203062030720308203092031020311203122031320314203152031620317203182031920320203212032220323203242032520326203272032820329203302033120332203332033420335203362033720338203392034020341203422034320344203452034620347203482034920350203512035220353203542035520356203572035820359203602036120362203632036420365203662036720368203692037020371203722037320374203752037620377203782037920380203812038220383203842038520386203872038820389203902039120392203932039420395203962039720398203992040020401204022040320404204052040620407204082040920410204112041220413204142041520416204172041820419204202042120422204232042420425204262042720428204292043020431204322043320434204352043620437204382043920440204412044220443204442044520446204472044820449204502045120452204532045420455204562045720458204592046020461204622046320464204652046620467204682046920470204712047220473204742047520476204772047820479204802048120482204832048420485204862048720488204892049020491204922049320494204952049620497204982049920500205012050220503205042050520506205072050820509205102051120512205132051420515205162051720518205192052020521205222052320524205252052620527205282052920530205312053220533205342053520536205372053820539205402054120542205432054420545205462054720548205492055020551205522055320554205552055620557205582055920560205612056220563205642056520566205672056820569205702057120572205732057420575205762057720578205792058020581205822058320584205852058620587205882058920590205912059220593205942059520596205972059820599206002060120602206032060420605206062060720608206092061020611206122061320614206152061620617206182061920620206212062220623206242062520626206272062820629206302063120632206332063420635206362063720638206392064020641206422064320644206452064620647206482064920650206512065220653206542065520656206572065820659206602066120662206632066420665206662066720668206692067020671206722067320674206752067620677206782067920680206812068220683206842068520686206872068820689206902069120692206932069420695206962069720698206992070020701207022070320704207052070620707207082070920710207112071220713207142071520716207172071820719207202072120722207232072420725207262072720728207292073020731207322073320734207352073620737207382073920740207412074220743207442074520746207472074820749207502075120752207532075420755207562075720758207592076020761207622076320764207652076620767207682076920770207712077220773207742077520776207772077820779207802078120782207832078420785207862078720788207892079020791207922079320794207952079620797207982079920800208012080220803208042080520806208072080820809208102081120812208132081420815208162081720818208192082020821208222082320824208252082620827208282082920830208312083220833208342083520836208372083820839208402084120842208432084420845208462084720848208492085020851208522085320854208552085620857208582085920860208612086220863208642086520866208672086820869208702087120872208732087420875208762087720878208792088020881208822088320884208852088620887208882088920890208912089220893208942089520896208972089820899209002090120902209032090420905209062090720908209092091020911209122091320914209152091620917209182091920920209212092220923209242092520926209272092820929209302093120932209332093420935209362093720938209392094020941209422094320944209452094620947209482094920950209512095220953209542095520956209572095820959209602096120962209632096420965209662096720968209692097020971209722097320974209752097620977209782097920980209812098220983209842098520986209872098820989209902099120992209932099420995209962099720998209992100021001210022100321004210052100621007210082100921010210112101221013210142101521016210172101821019210202102121022210232102421025210262102721028210292103021031210322103321034210352103621037210382103921040210412104221043210442104521046210472104821049210502105121052210532105421055210562105721058210592106021061210622106321064210652106621067210682106921070210712107221073210742107521076210772107821079210802108121082210832108421085210862108721088210892109021091210922109321094210952109621097210982109921100211012110221103211042110521106211072110821109211102111121112211132111421115211162111721118211192112021121211222112321124211252112621127211282112921130211312113221133211342113521136211372113821139211402114121142211432114421145211462114721148211492115021151211522115321154211552115621157211582115921160211612116221163211642116521166211672116821169211702117121172211732117421175211762117721178211792118021181211822118321184211852118621187211882118921190211912119221193211942119521196211972119821199212002120121202212032120421205212062120721208212092121021211212122121321214212152121621217212182121921220212212122221223212242122521226212272122821229212302123121232212332123421235212362123721238212392124021241212422124321244212452124621247212482124921250212512125221253212542125521256212572125821259212602126121262212632126421265212662126721268212692127021271212722127321274212752127621277212782127921280212812128221283212842128521286212872128821289212902129121292212932129421295212962129721298212992130021301213022130321304213052130621307213082130921310213112131221313213142131521316213172131821319213202132121322213232132421325213262132721328213292133021331213322133321334213352133621337213382133921340213412134221343213442134521346213472134821349213502135121352213532135421355213562135721358213592136021361213622136321364213652136621367213682136921370213712137221373213742137521376213772137821379213802138121382213832138421385213862138721388213892139021391213922139321394213952139621397213982139921400214012140221403214042140521406214072140821409214102141121412214132141421415214162141721418214192142021421214222142321424214252142621427214282142921430214312143221433214342143521436214372143821439214402144121442214432144421445214462144721448214492145021451214522145321454214552145621457214582145921460214612146221463214642146521466214672146821469214702147121472214732147421475214762147721478214792148021481214822148321484214852148621487214882148921490214912149221493214942149521496214972149821499215002150121502215032150421505215062150721508215092151021511215122151321514215152151621517215182151921520215212152221523215242152521526215272152821529215302153121532215332153421535215362153721538215392154021541215422154321544215452154621547215482154921550215512155221553215542155521556215572155821559215602156121562215632156421565215662156721568215692157021571215722157321574215752157621577215782157921580215812158221583215842158521586215872158821589215902159121592215932159421595215962159721598215992160021601216022160321604216052160621607216082160921610216112161221613216142161521616216172161821619216202162121622216232162421625216262162721628216292163021631216322163321634216352163621637216382163921640216412164221643216442164521646216472164821649216502165121652216532165421655216562165721658216592166021661216622166321664216652166621667216682166921670216712167221673216742167521676216772167821679216802168121682216832168421685216862168721688216892169021691216922169321694216952169621697216982169921700217012170221703217042170521706217072170821709217102171121712217132171421715217162171721718217192172021721217222172321724217252172621727217282172921730217312173221733217342173521736217372173821739217402174121742217432174421745217462174721748217492175021751217522175321754217552175621757217582175921760217612176221763217642176521766217672176821769217702177121772217732177421775217762177721778217792178021781217822178321784217852178621787217882178921790217912179221793217942179521796217972179821799218002180121802218032180421805218062180721808218092181021811218122181321814218152181621817218182181921820218212182221823218242182521826218272182821829218302183121832218332183421835218362183721838218392184021841218422184321844218452184621847218482184921850218512185221853218542185521856218572185821859218602186121862218632186421865218662186721868218692187021871218722187321874218752187621877218782187921880218812188221883218842188521886218872188821889218902189121892218932189421895218962189721898218992190021901219022190321904219052190621907219082190921910219112191221913219142191521916219172191821919219202192121922219232192421925219262192721928219292193021931219322193321934219352193621937219382193921940219412194221943219442194521946219472194821949219502195121952219532195421955219562195721958219592196021961219622196321964219652196621967219682196921970219712197221973219742197521976219772197821979219802198121982219832198421985219862198721988219892199021991219922199321994219952199621997219982199922000220012200222003220042200522006220072200822009220102201122012220132201422015220162201722018220192202022021220222202322024220252202622027220282202922030220312203222033220342203522036220372203822039220402204122042220432204422045220462204722048220492205022051220522205322054220552205622057220582205922060220612206222063220642206522066220672206822069220702207122072220732207422075220762207722078220792208022081220822208322084220852208622087220882208922090220912209222093220942209522096220972209822099221002210122102221032210422105221062210722108221092211022111221122211322114221152211622117221182211922120221212212222123221242212522126221272212822129221302213122132221332213422135221362213722138221392214022141221422214322144221452214622147221482214922150221512215222153221542215522156221572215822159221602216122162221632216422165221662216722168221692217022171221722217322174221752217622177221782217922180221812218222183221842218522186221872218822189221902219122192221932219422195221962219722198221992220022201222022220322204222052220622207222082220922210222112221222213222142221522216222172221822219222202222122222222232222422225222262222722228222292223022231222322223322234222352223622237222382223922240222412224222243222442224522246222472224822249222502225122252222532225422255222562225722258222592226022261222622226322264222652226622267222682226922270222712227222273222742227522276222772227822279222802228122282222832228422285222862228722288222892229022291222922229322294222952229622297222982229922300223012230222303223042230522306223072230822309223102231122312223132231422315223162231722318223192232022321223222232322324223252232622327223282232922330223312233222333223342233522336223372233822339223402234122342223432234422345223462234722348223492235022351223522235322354223552235622357223582235922360223612236222363223642236522366223672236822369223702237122372223732237422375223762237722378223792238022381223822238322384223852238622387223882238922390223912239222393223942239522396223972239822399224002240122402224032240422405224062240722408224092241022411224122241322414224152241622417224182241922420224212242222423224242242522426224272242822429224302243122432224332243422435224362243722438224392244022441224422244322444224452244622447224482244922450224512245222453224542245522456224572245822459224602246122462224632246422465224662246722468224692247022471224722247322474224752247622477224782247922480224812248222483224842248522486224872248822489224902249122492224932249422495224962249722498224992250022501225022250322504225052250622507225082250922510225112251222513225142251522516225172251822519225202252122522225232252422525225262252722528225292253022531225322253322534225352253622537225382253922540225412254222543225442254522546225472254822549225502255122552225532255422555225562255722558225592256022561225622256322564225652256622567225682256922570225712257222573225742257522576225772257822579225802258122582225832258422585225862258722588225892259022591225922259322594225952259622597225982259922600226012260222603226042260522606226072260822609226102261122612226132261422615226162261722618226192262022621226222262322624226252262622627226282262922630226312263222633226342263522636226372263822639226402264122642226432264422645226462264722648226492265022651226522265322654226552265622657226582265922660226612266222663226642266522666226672266822669226702267122672226732267422675226762267722678226792268022681226822268322684226852268622687226882268922690226912269222693226942269522696226972269822699227002270122702227032270422705227062270722708227092271022711227122271322714227152271622717227182271922720227212272222723227242272522726227272272822729227302273122732227332273422735227362273722738227392274022741227422274322744227452274622747227482274922750227512275222753227542275522756227572275822759227602276122762227632276422765227662276722768227692277022771227722277322774227752277622777227782277922780227812278222783227842278522786227872278822789227902279122792227932279422795227962279722798227992280022801228022280322804228052280622807228082280922810228112281222813228142281522816228172281822819228202282122822228232282422825228262282722828228292283022831228322283322834228352283622837228382283922840228412284222843228442284522846228472284822849228502285122852228532285422855228562285722858228592286022861228622286322864228652286622867228682286922870228712287222873228742287522876228772287822879228802288122882228832288422885228862288722888228892289022891228922289322894228952289622897228982289922900229012290222903229042290522906229072290822909229102291122912229132291422915229162291722918229192292022921229222292322924229252292622927229282292922930229312293222933229342293522936229372293822939229402294122942229432294422945229462294722948229492295022951229522295322954229552295622957229582295922960229612296222963229642296522966229672296822969229702297122972229732297422975229762297722978229792298022981229822298322984229852298622987229882298922990229912299222993229942299522996229972299822999230002300123002230032300423005230062300723008230092301023011230122301323014230152301623017230182301923020230212302223023230242302523026230272302823029230302303123032230332303423035230362303723038230392304023041230422304323044230452304623047230482304923050230512305223053230542305523056230572305823059230602306123062230632306423065230662306723068230692307023071230722307323074230752307623077230782307923080230812308223083230842308523086230872308823089230902309123092230932309423095230962309723098230992310023101231022310323104231052310623107231082310923110231112311223113231142311523116231172311823119231202312123122231232312423125231262312723128231292313023131231322313323134231352313623137231382313923140231412314223143231442314523146231472314823149231502315123152231532315423155231562315723158231592316023161231622316323164231652316623167231682316923170231712317223173231742317523176231772317823179231802318123182231832318423185231862318723188231892319023191231922319323194231952319623197231982319923200232012320223203232042320523206232072320823209232102321123212232132321423215232162321723218232192322023221232222322323224232252322623227232282322923230232312323223233232342323523236232372323823239232402324123242232432324423245232462324723248232492325023251232522325323254232552325623257232582325923260232612326223263232642326523266232672326823269232702327123272232732327423275232762327723278232792328023281232822328323284232852328623287232882328923290232912329223293232942329523296232972329823299233002330123302233032330423305233062330723308233092331023311233122331323314233152331623317233182331923320233212332223323233242332523326233272332823329233302333123332233332333423335233362333723338233392334023341233422334323344233452334623347233482334923350233512335223353233542335523356233572335823359233602336123362233632336423365233662336723368233692337023371233722337323374233752337623377233782337923380233812338223383233842338523386233872338823389233902339123392233932339423395233962339723398233992340023401234022340323404234052340623407234082340923410234112341223413234142341523416234172341823419234202342123422234232342423425234262342723428234292343023431234322343323434234352343623437234382343923440234412344223443234442344523446234472344823449234502345123452234532345423455234562345723458234592346023461234622346323464234652346623467234682346923470234712347223473234742347523476234772347823479234802348123482234832348423485234862348723488234892349023491234922349323494234952349623497234982349923500235012350223503235042350523506235072350823509235102351123512235132351423515235162351723518235192352023521235222352323524235252352623527235282352923530235312353223533235342353523536235372353823539235402354123542235432354423545235462354723548235492355023551235522355323554235552355623557235582355923560235612356223563235642356523566235672356823569235702357123572235732357423575235762357723578235792358023581235822358323584235852358623587235882358923590235912359223593235942359523596235972359823599236002360123602236032360423605236062360723608236092361023611236122361323614236152361623617236182361923620236212362223623236242362523626236272362823629236302363123632236332363423635236362363723638236392364023641236422364323644236452364623647236482364923650236512365223653236542365523656236572365823659236602366123662236632366423665236662366723668236692367023671236722367323674236752367623677236782367923680236812368223683236842368523686236872368823689236902369123692236932369423695236962369723698236992370023701237022370323704237052370623707237082370923710237112371223713237142371523716237172371823719237202372123722237232372423725237262372723728237292373023731237322373323734237352373623737237382373923740237412374223743237442374523746237472374823749237502375123752237532375423755237562375723758237592376023761237622376323764237652376623767237682376923770237712377223773237742377523776237772377823779237802378123782237832378423785237862378723788237892379023791237922379323794237952379623797237982379923800238012380223803238042380523806238072380823809238102381123812238132381423815238162381723818238192382023821238222382323824238252382623827238282382923830238312383223833238342383523836238372383823839238402384123842238432384423845238462384723848238492385023851238522385323854238552385623857238582385923860238612386223863238642386523866238672386823869238702387123872238732387423875238762387723878238792388023881238822388323884238852388623887238882388923890238912389223893238942389523896238972389823899239002390123902239032390423905239062390723908239092391023911239122391323914239152391623917239182391923920239212392223923239242392523926239272392823929239302393123932239332393423935239362393723938239392394023941239422394323944239452394623947239482394923950239512395223953239542395523956239572395823959239602396123962239632396423965239662396723968239692397023971239722397323974239752397623977239782397923980239812398223983239842398523986239872398823989239902399123992239932399423995239962399723998239992400024001240022400324004240052400624007240082400924010240112401224013240142401524016240172401824019240202402124022240232402424025240262402724028240292403024031240322403324034240352403624037240382403924040240412404224043240442404524046240472404824049240502405124052240532405424055240562405724058240592406024061240622406324064240652406624067240682406924070240712407224073240742407524076240772407824079240802408124082240832408424085240862408724088240892409024091240922409324094240952409624097240982409924100241012410224103241042410524106241072410824109241102411124112241132411424115241162411724118241192412024121241222412324124241252412624127241282412924130241312413224133241342413524136241372413824139241402414124142241432414424145241462414724148241492415024151241522415324154241552415624157241582415924160241612416224163241642416524166241672416824169241702417124172241732417424175241762417724178241792418024181241822418324184241852418624187241882418924190241912419224193241942419524196241972419824199242002420124202242032420424205242062420724208242092421024211242122421324214242152421624217242182421924220242212422224223242242422524226242272422824229242302423124232242332423424235242362423724238242392424024241242422424324244242452424624247242482424924250242512425224253242542425524256242572425824259242602426124262242632426424265242662426724268242692427024271242722427324274242752427624277242782427924280242812428224283242842428524286242872428824289242902429124292242932429424295242962429724298242992430024301243022430324304243052430624307243082430924310243112431224313243142431524316243172431824319243202432124322243232432424325243262432724328243292433024331243322433324334243352433624337243382433924340243412434224343243442434524346243472434824349243502435124352243532435424355243562435724358243592436024361243622436324364243652436624367243682436924370243712437224373243742437524376243772437824379243802438124382243832438424385243862438724388243892439024391243922439324394243952439624397243982439924400244012440224403244042440524406244072440824409244102441124412244132441424415244162441724418244192442024421244222442324424244252442624427244282442924430244312443224433244342443524436244372443824439244402444124442244432444424445244462444724448244492445024451244522445324454244552445624457244582445924460244612446224463244642446524466244672446824469244702447124472244732447424475244762447724478244792448024481244822448324484244852448624487244882448924490244912449224493244942449524496244972449824499245002450124502245032450424505245062450724508245092451024511245122451324514245152451624517245182451924520245212452224523245242452524526245272452824529245302453124532245332453424535245362453724538245392454024541245422454324544245452454624547245482454924550245512455224553245542455524556245572455824559245602456124562245632456424565245662456724568245692457024571245722457324574245752457624577245782457924580245812458224583245842458524586245872458824589245902459124592245932459424595245962459724598245992460024601246022460324604246052460624607246082460924610246112461224613246142461524616246172461824619246202462124622246232462424625246262462724628246292463024631246322463324634246352463624637246382463924640246412464224643246442464524646246472464824649246502465124652246532465424655246562465724658246592466024661246622466324664246652466624667246682466924670246712467224673246742467524676246772467824679246802468124682246832468424685246862468724688246892469024691246922469324694246952469624697246982469924700247012470224703247042470524706247072470824709247102471124712247132471424715247162471724718247192472024721247222472324724247252472624727247282472924730247312473224733247342473524736247372473824739247402474124742247432474424745247462474724748247492475024751247522475324754247552475624757247582475924760247612476224763247642476524766247672476824769247702477124772247732477424775247762477724778247792478024781247822478324784247852478624787247882478924790247912479224793247942479524796247972479824799248002480124802248032480424805248062480724808248092481024811248122481324814248152481624817248182481924820248212482224823248242482524826248272482824829248302483124832248332483424835248362483724838248392484024841248422484324844248452484624847248482484924850248512485224853248542485524856248572485824859248602486124862248632486424865248662486724868248692487024871248722487324874248752487624877248782487924880248812488224883248842488524886248872488824889248902489124892248932489424895248962489724898248992490024901249022490324904249052490624907249082490924910249112491224913249142491524916249172491824919249202492124922249232492424925249262492724928249292493024931249322493324934249352493624937249382493924940249412494224943249442494524946249472494824949249502495124952249532495424955249562495724958249592496024961249622496324964249652496624967249682496924970249712497224973249742497524976249772497824979249802498124982249832498424985249862498724988249892499024991249922499324994249952499624997249982499925000250012500225003250042500525006250072500825009250102501125012250132501425015250162501725018250192502025021250222502325024250252502625027250282502925030250312503225033250342503525036250372503825039250402504125042250432504425045250462504725048250492505025051250522505325054250552505625057250582505925060250612506225063250642506525066250672506825069250702507125072250732507425075250762507725078250792508025081250822508325084250852508625087250882508925090250912509225093250942509525096250972509825099251002510125102251032510425105251062510725108251092511025111251122511325114251152511625117251182511925120251212512225123251242512525126251272512825129251302513125132251332513425135251362513725138251392514025141251422514325144251452514625147251482514925150251512515225153251542515525156251572515825159251602516125162251632516425165251662516725168251692517025171251722517325174251752517625177251782517925180251812518225183251842518525186251872518825189251902519125192251932519425195251962519725198251992520025201252022520325204252052520625207252082520925210252112521225213252142521525216252172521825219252202522125222252232522425225252262522725228252292523025231252322523325234252352523625237252382523925240252412524225243252442524525246252472524825249252502525125252252532525425255252562525725258252592526025261252622526325264252652526625267252682526925270252712527225273252742527525276252772527825279252802528125282252832528425285252862528725288252892529025291252922529325294252952529625297252982529925300253012530225303253042530525306253072530825309253102531125312253132531425315253162531725318253192532025321253222532325324253252532625327253282532925330253312533225333253342533525336253372533825339253402534125342253432534425345253462534725348253492535025351253522535325354253552535625357253582535925360253612536225363253642536525366253672536825369253702537125372253732537425375253762537725378253792538025381253822538325384253852538625387253882538925390253912539225393253942539525396253972539825399254002540125402254032540425405254062540725408254092541025411254122541325414254152541625417254182541925420254212542225423254242542525426254272542825429254302543125432254332543425435254362543725438254392544025441254422544325444254452544625447254482544925450254512545225453254542545525456254572545825459254602546125462254632546425465254662546725468254692547025471254722547325474254752547625477254782547925480254812548225483254842548525486254872548825489254902549125492254932549425495254962549725498254992550025501255022550325504255052550625507255082550925510255112551225513255142551525516255172551825519255202552125522255232552425525255262552725528255292553025531255322553325534255352553625537255382553925540255412554225543255442554525546255472554825549255502555125552255532555425555255562555725558255592556025561255622556325564255652556625567255682556925570255712557225573255742557525576255772557825579255802558125582255832558425585255862558725588255892559025591255922559325594255952559625597255982559925600256012560225603256042560525606256072560825609256102561125612256132561425615256162561725618256192562025621256222562325624256252562625627256282562925630256312563225633256342563525636256372563825639256402564125642256432564425645256462564725648256492565025651256522565325654256552565625657256582565925660256612566225663256642566525666256672566825669256702567125672256732567425675256762567725678256792568025681256822568325684256852568625687256882568925690256912569225693256942569525696256972569825699257002570125702257032570425705257062570725708257092571025711257122571325714257152571625717257182571925720257212572225723257242572525726257272572825729257302573125732257332573425735257362573725738257392574025741257422574325744257452574625747257482574925750257512575225753257542575525756257572575825759257602576125762257632576425765257662576725768257692577025771257722577325774257752577625777257782577925780257812578225783257842578525786257872578825789257902579125792257932579425795257962579725798257992580025801258022580325804258052580625807258082580925810258112581225813258142581525816258172581825819258202582125822258232582425825258262582725828258292583025831258322583325834258352583625837258382583925840258412584225843258442584525846258472584825849258502585125852258532585425855258562585725858258592586025861258622586325864258652586625867258682586925870258712587225873258742587525876258772587825879258802588125882258832588425885258862588725888258892589025891258922589325894258952589625897258982589925900259012590225903259042590525906259072590825909259102591125912259132591425915259162591725918259192592025921259222592325924259252592625927259282592925930259312593225933259342593525936259372593825939259402594125942259432594425945259462594725948259492595025951259522595325954259552595625957259582595925960259612596225963259642596525966259672596825969259702597125972259732597425975259762597725978259792598025981259822598325984259852598625987259882598925990259912599225993259942599525996259972599825999260002600126002260032600426005260062600726008260092601026011260122601326014260152601626017260182601926020260212602226023260242602526026260272602826029260302603126032260332603426035260362603726038260392604026041260422604326044260452604626047260482604926050260512605226053260542605526056260572605826059260602606126062260632606426065260662606726068260692607026071260722607326074260752607626077260782607926080260812608226083260842608526086260872608826089260902609126092260932609426095260962609726098260992610026101261022610326104261052610626107261082610926110261112611226113261142611526116261172611826119261202612126122261232612426125261262612726128261292613026131261322613326134261352613626137261382613926140261412614226143261442614526146261472614826149261502615126152261532615426155261562615726158261592616026161261622616326164261652616626167261682616926170261712617226173261742617526176261772617826179261802618126182261832618426185261862618726188261892619026191261922619326194261952619626197261982619926200262012620226203262042620526206262072620826209262102621126212262132621426215262162621726218262192622026221262222622326224262252622626227262282622926230262312623226233262342623526236262372623826239262402624126242262432624426245262462624726248262492625026251262522625326254262552625626257262582625926260262612626226263262642626526266262672626826269262702627126272262732627426275262762627726278262792628026281262822628326284262852628626287262882628926290262912629226293262942629526296262972629826299263002630126302263032630426305263062630726308263092631026311263122631326314263152631626317263182631926320263212632226323263242632526326263272632826329263302633126332263332633426335263362633726338263392634026341263422634326344263452634626347263482634926350263512635226353263542635526356263572635826359263602636126362263632636426365263662636726368263692637026371263722637326374263752637626377263782637926380263812638226383263842638526386263872638826389263902639126392263932639426395263962639726398263992640026401264022640326404264052640626407264082640926410264112641226413264142641526416264172641826419264202642126422264232642426425264262642726428264292643026431264322643326434264352643626437264382643926440264412644226443264442644526446264472644826449264502645126452264532645426455264562645726458264592646026461264622646326464264652646626467264682646926470264712647226473264742647526476264772647826479264802648126482264832648426485264862648726488264892649026491264922649326494264952649626497264982649926500265012650226503265042650526506265072650826509265102651126512265132651426515265162651726518265192652026521265222652326524265252652626527265282652926530265312653226533265342653526536265372653826539265402654126542265432654426545265462654726548265492655026551265522655326554265552655626557265582655926560265612656226563265642656526566265672656826569265702657126572265732657426575265762657726578265792658026581265822658326584265852658626587265882658926590265912659226593265942659526596265972659826599266002660126602266032660426605266062660726608266092661026611266122661326614266152661626617266182661926620266212662226623266242662526626266272662826629266302663126632266332663426635266362663726638266392664026641266422664326644266452664626647266482664926650266512665226653266542665526656266572665826659266602666126662266632666426665266662666726668266692667026671266722667326674266752667626677266782667926680266812668226683266842668526686266872668826689266902669126692266932669426695266962669726698266992670026701267022670326704267052670626707267082670926710267112671226713267142671526716267172671826719267202672126722267232672426725267262672726728267292673026731267322673326734267352673626737267382673926740267412674226743267442674526746267472674826749267502675126752267532675426755267562675726758267592676026761267622676326764267652676626767267682676926770267712677226773267742677526776267772677826779267802678126782267832678426785267862678726788267892679026791267922679326794267952679626797267982679926800268012680226803268042680526806268072680826809268102681126812268132681426815268162681726818268192682026821268222682326824268252682626827268282682926830268312683226833268342683526836268372683826839268402684126842268432684426845268462684726848268492685026851268522685326854268552685626857268582685926860268612686226863268642686526866268672686826869268702687126872268732687426875268762687726878268792688026881268822688326884268852688626887268882688926890268912689226893268942689526896268972689826899269002690126902269032690426905269062690726908269092691026911269122691326914269152691626917269182691926920269212692226923269242692526926269272692826929269302693126932269332693426935269362693726938269392694026941269422694326944269452694626947269482694926950269512695226953269542695526956269572695826959269602696126962269632696426965269662696726968269692697026971269722697326974269752697626977269782697926980269812698226983269842698526986269872698826989269902699126992269932699426995269962699726998269992700027001270022700327004270052700627007270082700927010270112701227013270142701527016270172701827019270202702127022270232702427025270262702727028270292703027031270322703327034270352703627037270382703927040270412704227043270442704527046270472704827049270502705127052270532705427055270562705727058270592706027061270622706327064270652706627067270682706927070270712707227073270742707527076270772707827079270802708127082270832708427085270862708727088270892709027091270922709327094270952709627097270982709927100271012710227103271042710527106271072710827109271102711127112271132711427115271162711727118271192712027121271222712327124271252712627127271282712927130271312713227133271342713527136271372713827139271402714127142271432714427145271462714727148271492715027151271522715327154271552715627157271582715927160271612716227163271642716527166271672716827169271702717127172271732717427175271762717727178271792718027181271822718327184271852718627187271882718927190271912719227193271942719527196271972719827199272002720127202272032720427205272062720727208272092721027211272122721327214272152721627217272182721927220272212722227223272242722527226272272722827229272302723127232272332723427235272362723727238272392724027241272422724327244272452724627247272482724927250272512725227253272542725527256272572725827259272602726127262272632726427265272662726727268272692727027271272722727327274272752727627277272782727927280272812728227283272842728527286272872728827289272902729127292272932729427295272962729727298272992730027301273022730327304273052730627307273082730927310273112731227313273142731527316273172731827319273202732127322273232732427325273262732727328273292733027331273322733327334273352733627337273382733927340273412734227343273442734527346273472734827349273502735127352273532735427355273562735727358273592736027361273622736327364273652736627367273682736927370273712737227373273742737527376273772737827379273802738127382273832738427385273862738727388273892739027391273922739327394273952739627397273982739927400274012740227403274042740527406274072740827409274102741127412274132741427415274162741727418274192742027421274222742327424274252742627427274282742927430274312743227433274342743527436274372743827439274402744127442274432744427445274462744727448274492745027451274522745327454274552745627457274582745927460274612746227463274642746527466274672746827469274702747127472274732747427475274762747727478274792748027481274822748327484274852748627487274882748927490274912749227493274942749527496274972749827499275002750127502275032750427505275062750727508275092751027511275122751327514275152751627517275182751927520275212752227523275242752527526275272752827529275302753127532275332753427535275362753727538275392754027541275422754327544275452754627547275482754927550275512755227553275542755527556275572755827559275602756127562275632756427565275662756727568275692757027571275722757327574275752757627577275782757927580275812758227583275842758527586275872758827589275902759127592275932759427595275962759727598275992760027601276022760327604276052760627607276082760927610276112761227613276142761527616276172761827619276202762127622276232762427625276262762727628276292763027631276322763327634276352763627637276382763927640276412764227643276442764527646276472764827649276502765127652276532765427655276562765727658276592766027661276622766327664276652766627667276682766927670276712767227673276742767527676276772767827679276802768127682276832768427685276862768727688276892769027691276922769327694276952769627697276982769927700277012770227703277042770527706277072770827709277102771127712277132771427715277162771727718277192772027721277222772327724277252772627727277282772927730277312773227733277342773527736277372773827739277402774127742277432774427745277462774727748277492775027751277522775327754277552775627757277582775927760277612776227763277642776527766277672776827769277702777127772277732777427775277762777727778277792778027781277822778327784277852778627787277882778927790277912779227793277942779527796277972779827799278002780127802278032780427805278062780727808278092781027811278122781327814278152781627817278182781927820278212782227823278242782527826278272782827829278302783127832278332783427835278362783727838278392784027841278422784327844278452784627847278482784927850278512785227853278542785527856278572785827859278602786127862278632786427865278662786727868278692787027871278722787327874278752787627877278782787927880278812788227883278842788527886278872788827889278902789127892278932789427895278962789727898278992790027901279022790327904279052790627907279082790927910279112791227913279142791527916279172791827919279202792127922279232792427925279262792727928279292793027931279322793327934279352793627937279382793927940279412794227943279442794527946279472794827949279502795127952279532795427955279562795727958279592796027961279622796327964279652796627967279682796927970279712797227973279742797527976279772797827979279802798127982279832798427985279862798727988279892799027991279922799327994279952799627997279982799928000280012800228003280042800528006280072800828009280102801128012280132801428015280162801728018280192802028021280222802328024280252802628027280282802928030280312803228033280342803528036280372803828039280402804128042280432804428045280462804728048280492805028051280522805328054280552805628057280582805928060280612806228063280642806528066280672806828069280702807128072280732807428075280762807728078280792808028081280822808328084280852808628087280882808928090280912809228093280942809528096280972809828099281002810128102281032810428105281062810728108281092811028111281122811328114281152811628117281182811928120281212812228123281242812528126281272812828129281302813128132281332813428135281362813728138281392814028141281422814328144281452814628147281482814928150281512815228153281542815528156281572815828159281602816128162281632816428165281662816728168281692817028171281722817328174281752817628177281782817928180281812818228183281842818528186281872818828189281902819128192281932819428195281962819728198281992820028201282022820328204282052820628207282082820928210282112821228213282142821528216282172821828219282202822128222282232822428225282262822728228282292823028231282322823328234282352823628237282382823928240282412824228243282442824528246282472824828249282502825128252282532825428255282562825728258282592826028261282622826328264282652826628267282682826928270282712827228273282742827528276282772827828279282802828128282282832828428285282862828728288282892829028291282922829328294282952829628297282982829928300283012830228303283042830528306283072830828309283102831128312283132831428315283162831728318283192832028321283222832328324283252832628327283282832928330283312833228333283342833528336283372833828339283402834128342283432834428345283462834728348283492835028351283522835328354283552835628357283582835928360283612836228363283642836528366283672836828369283702837128372283732837428375283762837728378283792838028381283822838328384283852838628387283882838928390283912839228393283942839528396283972839828399284002840128402284032840428405284062840728408284092841028411284122841328414284152841628417284182841928420284212842228423284242842528426284272842828429284302843128432284332843428435284362843728438284392844028441284422844328444284452844628447284482844928450284512845228453284542845528456284572845828459284602846128462284632846428465284662846728468284692847028471284722847328474284752847628477284782847928480284812848228483284842848528486284872848828489284902849128492284932849428495284962849728498284992850028501285022850328504285052850628507285082850928510285112851228513285142851528516285172851828519285202852128522285232852428525285262852728528285292853028531285322853328534285352853628537285382853928540285412854228543285442854528546285472854828549285502855128552285532855428555285562855728558285592856028561285622856328564285652856628567285682856928570285712857228573285742857528576285772857828579285802858128582285832858428585285862858728588285892859028591285922859328594285952859628597285982859928600286012860228603286042860528606286072860828609286102861128612286132861428615286162861728618286192862028621286222862328624286252862628627286282862928630286312863228633286342863528636286372863828639286402864128642286432864428645286462864728648286492865028651286522865328654286552865628657286582865928660286612866228663286642866528666286672866828669286702867128672286732867428675286762867728678286792868028681286822868328684286852868628687286882868928690286912869228693286942869528696286972869828699287002870128702287032870428705287062870728708287092871028711287122871328714287152871628717287182871928720287212872228723287242872528726287272872828729287302873128732287332873428735287362873728738287392874028741287422874328744287452874628747287482874928750287512875228753287542875528756287572875828759287602876128762287632876428765287662876728768287692877028771287722877328774287752877628777287782877928780287812878228783287842878528786287872878828789287902879128792287932879428795287962879728798287992880028801288022880328804288052880628807288082880928810288112881228813288142881528816288172881828819288202882128822288232882428825288262882728828288292883028831288322883328834288352883628837288382883928840288412884228843288442884528846288472884828849288502885128852288532885428855288562885728858288592886028861288622886328864288652886628867288682886928870288712887228873288742887528876288772887828879288802888128882288832888428885288862888728888288892889028891288922889328894288952889628897288982889928900289012890228903289042890528906289072890828909289102891128912289132891428915289162891728918289192892028921289222892328924289252892628927289282892928930289312893228933289342893528936289372893828939289402894128942289432894428945289462894728948289492895028951289522895328954289552895628957289582895928960289612896228963289642896528966289672896828969289702897128972289732897428975289762897728978289792898028981289822898328984289852898628987289882898928990289912899228993289942899528996289972899828999290002900129002290032900429005290062900729008290092901029011290122901329014290152901629017290182901929020290212902229023290242902529026290272902829029290302903129032290332903429035290362903729038290392904029041290422904329044290452904629047290482904929050290512905229053290542905529056290572905829059290602906129062290632906429065290662906729068290692907029071290722907329074290752907629077290782907929080290812908229083290842908529086290872908829089290902909129092290932909429095290962909729098290992910029101291022910329104291052910629107291082910929110291112911229113291142911529116291172911829119291202912129122291232912429125291262912729128291292913029131291322913329134291352913629137291382913929140291412914229143291442914529146291472914829149291502915129152291532915429155291562915729158291592916029161291622916329164291652916629167291682916929170291712917229173291742917529176291772917829179291802918129182291832918429185291862918729188291892919029191291922919329194291952919629197291982919929200292012920229203292042920529206292072920829209292102921129212292132921429215292162921729218292192922029221292222922329224292252922629227292282922929230292312923229233292342923529236292372923829239292402924129242292432924429245292462924729248292492925029251292522925329254292552925629257292582925929260292612926229263292642926529266292672926829269292702927129272292732927429275292762927729278292792928029281292822928329284292852928629287292882928929290292912929229293292942929529296292972929829299293002930129302293032930429305293062930729308293092931029311293122931329314293152931629317293182931929320293212932229323293242932529326293272932829329293302933129332293332933429335293362933729338293392934029341293422934329344293452934629347293482934929350293512935229353293542935529356293572935829359293602936129362293632936429365293662936729368293692937029371293722937329374293752937629377293782937929380293812938229383293842938529386293872938829389293902939129392293932939429395293962939729398293992940029401294022940329404294052940629407294082940929410294112941229413294142941529416294172941829419294202942129422294232942429425294262942729428294292943029431294322943329434294352943629437294382943929440294412944229443294442944529446294472944829449294502945129452294532945429455294562945729458294592946029461294622946329464294652946629467294682946929470294712947229473294742947529476294772947829479294802948129482294832948429485294862948729488294892949029491294922949329494294952949629497294982949929500295012950229503295042950529506295072950829509295102951129512295132951429515295162951729518295192952029521295222952329524295252952629527295282952929530295312953229533295342953529536295372953829539295402954129542295432954429545295462954729548295492955029551295522955329554295552955629557295582955929560295612956229563295642956529566295672956829569295702957129572295732957429575295762957729578295792958029581295822958329584295852958629587295882958929590295912959229593295942959529596295972959829599296002960129602296032960429605296062960729608296092961029611296122961329614296152961629617296182961929620296212962229623296242962529626296272962829629296302963129632296332963429635296362963729638296392964029641296422964329644296452964629647296482964929650296512965229653296542965529656296572965829659296602966129662296632966429665296662966729668296692967029671296722967329674296752967629677296782967929680296812968229683296842968529686296872968829689296902969129692296932969429695296962969729698296992970029701297022970329704297052970629707297082970929710297112971229713297142971529716297172971829719297202972129722297232972429725297262972729728297292973029731297322973329734297352973629737297382973929740297412974229743297442974529746297472974829749297502975129752297532975429755297562975729758297592976029761297622976329764297652976629767297682976929770297712977229773297742977529776297772977829779297802978129782297832978429785297862978729788297892979029791297922979329794297952979629797297982979929800298012980229803298042980529806298072980829809298102981129812298132981429815298162981729818298192982029821298222982329824298252982629827298282982929830298312983229833298342983529836298372983829839298402984129842298432984429845298462984729848298492985029851298522985329854298552985629857298582985929860298612986229863298642986529866298672986829869298702987129872298732987429875298762987729878298792988029881298822988329884298852988629887298882988929890298912989229893298942989529896298972989829899299002990129902299032990429905299062990729908299092991029911299122991329914299152991629917299182991929920299212992229923299242992529926299272992829929299302993129932299332993429935299362993729938299392994029941299422994329944299452994629947299482994929950299512995229953299542995529956299572995829959299602996129962299632996429965299662996729968299692997029971299722997329974299752997629977299782997929980299812998229983299842998529986299872998829989299902999129992299932999429995299962999729998299993000030001300023000330004300053000630007300083000930010300113001230013300143001530016300173001830019300203002130022300233002430025300263002730028300293003030031300323003330034300353003630037300383003930040300413004230043300443004530046300473004830049300503005130052300533005430055300563005730058300593006030061300623006330064300653006630067300683006930070300713007230073300743007530076300773007830079300803008130082300833008430085300863008730088300893009030091300923009330094300953009630097300983009930100301013010230103301043010530106301073010830109301103011130112301133011430115301163011730118301193012030121301223012330124301253012630127301283012930130301313013230133301343013530136301373013830139301403014130142301433014430145301463014730148301493015030151301523015330154301553015630157301583015930160301613016230163301643016530166301673016830169301703017130172301733017430175301763017730178301793018030181301823018330184301853018630187301883018930190301913019230193301943019530196301973019830199302003020130202302033020430205302063020730208302093021030211302123021330214302153021630217302183021930220302213022230223302243022530226302273022830229302303023130232302333023430235302363023730238302393024030241302423024330244302453024630247302483024930250302513025230253302543025530256302573025830259302603026130262302633026430265302663026730268302693027030271302723027330274302753027630277302783027930280302813028230283302843028530286302873028830289302903029130292302933029430295302963029730298302993030030301303023030330304303053030630307303083030930310303113031230313303143031530316303173031830319303203032130322303233032430325303263032730328303293033030331303323033330334303353033630337303383033930340303413034230343303443034530346303473034830349303503035130352303533035430355303563035730358303593036030361303623036330364303653036630367303683036930370303713037230373303743037530376303773037830379303803038130382303833038430385303863038730388303893039030391303923039330394303953039630397303983039930400304013040230403304043040530406304073040830409304103041130412304133041430415304163041730418304193042030421304223042330424304253042630427304283042930430304313043230433304343043530436304373043830439304403044130442304433044430445304463044730448304493045030451304523045330454304553045630457304583045930460304613046230463304643046530466304673046830469304703047130472304733047430475304763047730478304793048030481304823048330484304853048630487304883048930490304913049230493304943049530496304973049830499305003050130502305033050430505305063050730508305093051030511305123051330514305153051630517305183051930520305213052230523305243052530526305273052830529305303053130532305333053430535305363053730538305393054030541305423054330544305453054630547305483054930550305513055230553305543055530556305573055830559305603056130562305633056430565305663056730568305693057030571305723057330574305753057630577305783057930580305813058230583305843058530586305873058830589305903059130592305933059430595305963059730598305993060030601306023060330604306053060630607306083060930610306113061230613306143061530616306173061830619306203062130622306233062430625306263062730628306293063030631306323063330634306353063630637306383063930640306413064230643306443064530646306473064830649306503065130652306533065430655306563065730658306593066030661306623066330664306653066630667306683066930670306713067230673306743067530676306773067830679306803068130682306833068430685306863068730688306893069030691306923069330694306953069630697306983069930700307013070230703307043070530706307073070830709307103071130712307133071430715307163071730718307193072030721307223072330724307253072630727307283072930730307313073230733307343073530736307373073830739307403074130742307433074430745307463074730748307493075030751307523075330754307553075630757307583075930760307613076230763307643076530766307673076830769307703077130772307733077430775307763077730778307793078030781307823078330784307853078630787307883078930790307913079230793307943079530796307973079830799308003080130802308033080430805308063080730808308093081030811308123081330814308153081630817308183081930820308213082230823308243082530826308273082830829308303083130832308333083430835308363083730838308393084030841308423084330844308453084630847308483084930850308513085230853308543085530856308573085830859308603086130862308633086430865308663086730868308693087030871308723087330874308753087630877308783087930880308813088230883308843088530886308873088830889308903089130892308933089430895308963089730898308993090030901309023090330904309053090630907309083090930910309113091230913309143091530916309173091830919309203092130922309233092430925309263092730928309293093030931309323093330934309353093630937309383093930940309413094230943309443094530946309473094830949309503095130952309533095430955309563095730958309593096030961309623096330964309653096630967309683096930970309713097230973309743097530976309773097830979309803098130982309833098430985309863098730988309893099030991309923099330994309953099630997309983099931000310013100231003310043100531006310073100831009310103101131012310133101431015310163101731018310193102031021310223102331024310253102631027310283102931030310313103231033310343103531036310373103831039310403104131042310433104431045310463104731048310493105031051310523105331054310553105631057310583105931060310613106231063310643106531066310673106831069310703107131072310733107431075310763107731078310793108031081310823108331084310853108631087310883108931090310913109231093310943109531096310973109831099311003110131102311033110431105311063110731108311093111031111311123111331114311153111631117311183111931120311213112231123311243112531126311273112831129311303113131132311333113431135311363113731138311393114031141311423114331144311453114631147311483114931150311513115231153311543115531156311573115831159311603116131162311633116431165311663116731168311693117031171311723117331174311753117631177311783117931180311813118231183311843118531186311873118831189311903119131192311933119431195311963119731198311993120031201312023120331204312053120631207312083120931210312113121231213312143121531216312173121831219312203122131222312233122431225312263122731228312293123031231312323123331234312353123631237312383123931240312413124231243312443124531246312473124831249312503125131252312533125431255312563125731258312593126031261312623126331264312653126631267312683126931270312713127231273312743127531276312773127831279312803128131282312833128431285312863128731288312893129031291312923129331294312953129631297312983129931300313013130231303313043130531306313073130831309313103131131312313133131431315313163131731318313193132031321313223132331324313253132631327313283132931330313313133231333313343133531336313373133831339313403134131342313433134431345313463134731348313493135031351313523135331354313553135631357313583135931360313613136231363313643136531366313673136831369313703137131372313733137431375313763137731378313793138031381313823138331384313853138631387313883138931390313913139231393313943139531396313973139831399314003140131402314033140431405314063140731408314093141031411314123141331414314153141631417314183141931420314213142231423314243142531426314273142831429314303143131432314333143431435314363143731438314393144031441314423144331444314453144631447314483144931450314513145231453314543145531456314573145831459314603146131462314633146431465314663146731468314693147031471314723147331474314753147631477314783147931480314813148231483314843148531486314873148831489314903149131492314933149431495314963149731498314993150031501315023150331504315053150631507315083150931510315113151231513315143151531516315173151831519315203152131522315233152431525315263152731528315293153031531315323153331534315353153631537315383153931540315413154231543315443154531546315473154831549315503155131552315533155431555315563155731558315593156031561315623156331564315653156631567315683156931570315713157231573315743157531576315773157831579315803158131582315833158431585315863158731588315893159031591315923159331594315953159631597315983159931600316013160231603316043160531606316073160831609316103161131612316133161431615316163161731618316193162031621316223162331624316253162631627316283162931630316313163231633316343163531636316373163831639316403164131642316433164431645316463164731648316493165031651316523165331654316553165631657316583165931660316613166231663316643166531666316673166831669316703167131672316733167431675316763167731678316793168031681316823168331684316853168631687316883168931690316913169231693316943169531696316973169831699317003170131702317033170431705317063170731708317093171031711317123171331714317153171631717317183171931720317213172231723317243172531726317273172831729317303173131732317333173431735317363173731738317393174031741317423174331744317453174631747317483174931750317513175231753317543175531756317573175831759317603176131762317633176431765317663176731768317693177031771317723177331774317753177631777317783177931780317813178231783317843178531786317873178831789317903179131792317933179431795317963179731798317993180031801318023180331804318053180631807318083180931810318113181231813318143181531816318173181831819318203182131822318233182431825318263182731828318293183031831318323183331834318353183631837318383183931840318413184231843318443184531846318473184831849318503185131852318533185431855318563185731858318593186031861318623186331864318653186631867318683186931870318713187231873318743187531876318773187831879318803188131882318833188431885318863188731888318893189031891318923189331894318953189631897318983189931900319013190231903319043190531906319073190831909319103191131912319133191431915319163191731918319193192031921319223192331924319253192631927319283192931930319313193231933319343193531936319373193831939319403194131942319433194431945319463194731948319493195031951319523195331954319553195631957319583195931960319613196231963319643196531966319673196831969319703197131972319733197431975319763197731978319793198031981319823198331984319853198631987319883198931990319913199231993319943199531996319973199831999320003200132002320033200432005320063200732008320093201032011320123201332014320153201632017320183201932020320213202232023320243202532026320273202832029320303203132032320333203432035320363203732038320393204032041320423204332044320453204632047320483204932050320513205232053320543205532056320573205832059320603206132062320633206432065320663206732068320693207032071320723207332074320753207632077320783207932080320813208232083320843208532086320873208832089320903209132092320933209432095320963209732098320993210032101321023210332104321053210632107321083210932110321113211232113321143211532116321173211832119321203212132122321233212432125321263212732128321293213032131321323213332134321353213632137321383213932140321413214232143321443214532146321473214832149321503215132152321533215432155321563215732158321593216032161321623216332164321653216632167321683216932170321713217232173321743217532176321773217832179321803218132182321833218432185321863218732188321893219032191321923219332194321953219632197321983219932200322013220232203322043220532206322073220832209322103221132212322133221432215322163221732218322193222032221322223222332224322253222632227322283222932230322313223232233322343223532236322373223832239322403224132242322433224432245322463224732248322493225032251322523225332254322553225632257322583225932260322613226232263322643226532266322673226832269322703227132272322733227432275322763227732278322793228032281322823228332284322853228632287322883228932290322913229232293322943229532296322973229832299323003230132302323033230432305323063230732308323093231032311323123231332314323153231632317323183231932320323213232232323323243232532326323273232832329323303233132332323333233432335323363233732338323393234032341323423234332344323453234632347323483234932350323513235232353323543235532356323573235832359323603236132362323633236432365323663236732368323693237032371323723237332374323753237632377323783237932380323813238232383323843238532386323873238832389323903239132392323933239432395323963239732398323993240032401324023240332404324053240632407324083240932410324113241232413324143241532416324173241832419324203242132422324233242432425324263242732428324293243032431324323243332434324353243632437324383243932440324413244232443324443244532446324473244832449324503245132452324533245432455324563245732458324593246032461324623246332464324653246632467324683246932470324713247232473324743247532476324773247832479324803248132482324833248432485324863248732488324893249032491324923249332494324953249632497324983249932500325013250232503325043250532506325073250832509325103251132512325133251432515325163251732518325193252032521325223252332524325253252632527325283252932530325313253232533325343253532536325373253832539325403254132542325433254432545325463254732548325493255032551325523255332554325553255632557325583255932560325613256232563325643256532566325673256832569325703257132572325733257432575325763257732578325793258032581325823258332584325853258632587325883258932590325913259232593325943259532596325973259832599326003260132602326033260432605326063260732608326093261032611326123261332614326153261632617326183261932620326213262232623326243262532626326273262832629326303263132632326333263432635326363263732638326393264032641326423264332644326453264632647326483264932650326513265232653326543265532656326573265832659326603266132662326633266432665326663266732668326693267032671326723267332674326753267632677326783267932680326813268232683326843268532686326873268832689326903269132692326933269432695326963269732698326993270032701327023270332704327053270632707327083270932710327113271232713327143271532716327173271832719327203272132722327233272432725327263272732728327293273032731327323273332734327353273632737327383273932740327413274232743327443274532746327473274832749327503275132752327533275432755327563275732758327593276032761327623276332764327653276632767327683276932770327713277232773327743277532776327773277832779327803278132782327833278432785327863278732788327893279032791327923279332794327953279632797327983279932800328013280232803328043280532806328073280832809328103281132812328133281432815328163281732818328193282032821328223282332824328253282632827328283282932830328313283232833328343283532836328373283832839328403284132842328433284432845328463284732848328493285032851328523285332854328553285632857328583285932860328613286232863328643286532866328673286832869328703287132872328733287432875328763287732878328793288032881328823288332884328853288632887328883288932890328913289232893328943289532896328973289832899329003290132902329033290432905329063290732908329093291032911329123291332914329153291632917329183291932920329213292232923329243292532926329273292832929329303293132932329333293432935329363293732938329393294032941329423294332944329453294632947329483294932950329513295232953329543295532956329573295832959329603296132962329633296432965329663296732968329693297032971329723297332974329753297632977329783297932980329813298232983329843298532986329873298832989329903299132992329933299432995329963299732998329993300033001330023300333004330053300633007330083300933010330113301233013330143301533016330173301833019330203302133022330233302433025330263302733028330293303033031330323303333034330353303633037330383303933040330413304233043330443304533046330473304833049330503305133052330533305433055330563305733058330593306033061330623306333064330653306633067330683306933070330713307233073330743307533076330773307833079330803308133082330833308433085330863308733088330893309033091330923309333094330953309633097330983309933100331013310233103331043310533106331073310833109331103311133112331133311433115331163311733118331193312033121331223312333124331253312633127331283312933130331313313233133331343313533136331373313833139331403314133142331433314433145331463314733148331493315033151331523315333154331553315633157331583315933160331613316233163331643316533166331673316833169331703317133172331733317433175331763317733178331793318033181331823318333184331853318633187331883318933190331913319233193331943319533196331973319833199332003320133202332033320433205332063320733208332093321033211332123321333214332153321633217332183321933220332213322233223332243322533226332273322833229332303323133232332333323433235332363323733238332393324033241332423324333244332453324633247332483324933250332513325233253332543325533256332573325833259332603326133262332633326433265332663326733268332693327033271332723327333274332753327633277332783327933280332813328233283332843328533286332873328833289332903329133292332933329433295332963329733298332993330033301333023330333304333053330633307333083330933310333113331233313333143331533316333173331833319333203332133322333233332433325333263332733328333293333033331333323333333334333353333633337333383333933340333413334233343333443334533346333473334833349333503335133352333533335433355333563335733358333593336033361333623336333364333653336633367333683336933370333713337233373333743337533376333773337833379333803338133382333833338433385333863338733388333893339033391333923339333394333953339633397333983339933400334013340233403334043340533406334073340833409334103341133412334133341433415334163341733418334193342033421334223342333424334253342633427334283342933430334313343233433334343343533436334373343833439334403344133442334433344433445334463344733448334493345033451334523345333454334553345633457334583345933460334613346233463334643346533466334673346833469334703347133472334733347433475334763347733478334793348033481334823348333484334853348633487334883348933490334913349233493334943349533496334973349833499335003350133502335033350433505335063350733508335093351033511335123351333514335153351633517335183351933520335213352233523335243352533526335273352833529335303353133532335333353433535335363353733538335393354033541335423354333544335453354633547335483354933550335513355233553335543355533556335573355833559335603356133562335633356433565335663356733568335693357033571335723357333574335753357633577335783357933580335813358233583335843358533586335873358833589335903359133592335933359433595335963359733598335993360033601336023360333604336053360633607336083360933610336113361233613336143361533616336173361833619336203362133622336233362433625336263362733628336293363033631336323363333634336353363633637336383363933640336413364233643336443364533646336473364833649336503365133652336533365433655336563365733658336593366033661336623366333664336653366633667336683366933670336713367233673336743367533676336773367833679336803368133682336833368433685336863368733688336893369033691336923369333694336953369633697336983369933700337013370233703337043370533706337073370833709337103371133712337133371433715337163371733718337193372033721337223372333724337253372633727337283372933730337313373233733337343373533736337373373833739337403374133742337433374433745337463374733748337493375033751337523375333754337553375633757337583375933760337613376233763337643376533766337673376833769337703377133772337733377433775337763377733778337793378033781337823378333784337853378633787337883378933790337913379233793337943379533796337973379833799338003380133802338033380433805338063380733808338093381033811338123381333814338153381633817338183381933820338213382233823338243382533826338273382833829338303383133832338333383433835338363383733838338393384033841338423384333844338453384633847338483384933850338513385233853338543385533856338573385833859338603386133862338633386433865338663386733868338693387033871338723387333874338753387633877338783387933880338813388233883338843388533886338873388833889338903389133892338933389433895338963389733898338993390033901339023390333904339053390633907339083390933910339113391233913339143391533916339173391833919339203392133922339233392433925339263392733928339293393033931339323393333934339353393633937339383393933940339413394233943339443394533946339473394833949339503395133952339533395433955339563395733958339593396033961339623396333964339653396633967339683396933970339713397233973339743397533976339773397833979339803398133982339833398433985339863398733988339893399033991339923399333994339953399633997339983399934000340013400234003340043400534006340073400834009340103401134012340133401434015340163401734018340193402034021340223402334024340253402634027340283402934030340313403234033340343403534036340373403834039340403404134042340433404434045340463404734048340493405034051340523405334054340553405634057340583405934060340613406234063340643406534066340673406834069340703407134072340733407434075340763407734078340793408034081340823408334084340853408634087340883408934090340913409234093340943409534096340973409834099341003410134102341033410434105341063410734108341093411034111341123411334114341153411634117341183411934120341213412234123341243412534126341273412834129341303413134132341333413434135341363413734138341393414034141341423414334144341453414634147341483414934150341513415234153341543415534156341573415834159341603416134162341633416434165341663416734168341693417034171341723417334174341753417634177341783417934180341813418234183341843418534186341873418834189341903419134192341933419434195341963419734198341993420034201342023420334204342053420634207342083420934210342113421234213342143421534216342173421834219342203422134222342233422434225342263422734228342293423034231342323423334234342353423634237342383423934240342413424234243342443424534246342473424834249342503425134252342533425434255342563425734258342593426034261342623426334264342653426634267342683426934270342713427234273342743427534276342773427834279342803428134282342833428434285342863428734288342893429034291342923429334294342953429634297342983429934300343013430234303343043430534306343073430834309343103431134312343133431434315343163431734318343193432034321343223432334324343253432634327343283432934330343313433234333343343433534336343373433834339343403434134342343433434434345343463434734348343493435034351343523435334354343553435634357343583435934360343613436234363343643436534366343673436834369343703437134372343733437434375343763437734378343793438034381343823438334384343853438634387343883438934390343913439234393343943439534396343973439834399344003440134402344033440434405344063440734408344093441034411344123441334414344153441634417344183441934420344213442234423344243442534426344273442834429344303443134432344333443434435344363443734438344393444034441344423444334444344453444634447344483444934450344513445234453344543445534456344573445834459344603446134462344633446434465344663446734468344693447034471344723447334474344753447634477344783447934480344813448234483344843448534486344873448834489344903449134492344933449434495344963449734498344993450034501345023450334504345053450634507345083450934510345113451234513345143451534516345173451834519345203452134522345233452434525345263452734528345293453034531345323453334534345353453634537345383453934540345413454234543345443454534546345473454834549345503455134552345533455434555345563455734558345593456034561345623456334564345653456634567345683456934570345713457234573345743457534576345773457834579345803458134582345833458434585345863458734588345893459034591345923459334594345953459634597345983459934600346013460234603346043460534606346073460834609346103461134612346133461434615346163461734618346193462034621346223462334624346253462634627346283462934630346313463234633346343463534636346373463834639346403464134642346433464434645346463464734648346493465034651346523465334654346553465634657346583465934660346613466234663346643466534666346673466834669346703467134672346733467434675346763467734678346793468034681346823468334684346853468634687346883468934690346913469234693346943469534696346973469834699347003470134702347033470434705347063470734708347093471034711347123471334714347153471634717347183471934720347213472234723347243472534726347273472834729347303473134732347333473434735347363473734738347393474034741347423474334744347453474634747347483474934750347513475234753347543475534756347573475834759347603476134762347633476434765347663476734768347693477034771347723477334774347753477634777347783477934780347813478234783347843478534786347873478834789347903479134792347933479434795347963479734798347993480034801348023480334804348053480634807348083480934810348113481234813348143481534816348173481834819348203482134822348233482434825348263482734828348293483034831348323483334834348353483634837348383483934840348413484234843348443484534846348473484834849348503485134852348533485434855348563485734858348593486034861348623486334864348653486634867348683486934870348713487234873348743487534876348773487834879348803488134882348833488434885348863488734888348893489034891348923489334894348953489634897348983489934900349013490234903349043490534906349073490834909349103491134912349133491434915349163491734918349193492034921349223492334924349253492634927349283492934930349313493234933349343493534936349373493834939349403494134942349433494434945349463494734948349493495034951349523495334954349553495634957349583495934960349613496234963349643496534966349673496834969349703497134972349733497434975349763497734978349793498034981349823498334984349853498634987349883498934990349913499234993349943499534996349973499834999350003500135002350033500435005350063500735008350093501035011350123501335014350153501635017350183501935020350213502235023350243502535026350273502835029350303503135032350333503435035350363503735038350393504035041350423504335044350453504635047350483504935050350513505235053350543505535056350573505835059350603506135062350633506435065350663506735068350693507035071350723507335074350753507635077350783507935080350813508235083350843508535086350873508835089350903509135092350933509435095350963509735098350993510035101351023510335104351053510635107351083510935110351113511235113351143511535116351173511835119351203512135122351233512435125351263512735128351293513035131351323513335134351353513635137351383513935140351413514235143351443514535146351473514835149351503515135152351533515435155351563515735158351593516035161351623516335164351653516635167351683516935170351713517235173351743517535176351773517835179351803518135182351833518435185351863518735188351893519035191351923519335194351953519635197351983519935200352013520235203352043520535206352073520835209352103521135212352133521435215352163521735218352193522035221352223522335224352253522635227352283522935230352313523235233352343523535236352373523835239352403524135242352433524435245352463524735248352493525035251352523525335254352553525635257352583525935260352613526235263352643526535266352673526835269352703527135272352733527435275352763527735278352793528035281352823528335284352853528635287352883528935290352913529235293352943529535296352973529835299353003530135302353033530435305353063530735308353093531035311353123531335314353153531635317353183531935320353213532235323353243532535326353273532835329353303533135332353333533435335353363533735338353393534035341353423534335344353453534635347353483534935350353513535235353353543535535356353573535835359353603536135362353633536435365353663536735368353693537035371353723537335374353753537635377353783537935380353813538235383353843538535386353873538835389353903539135392353933539435395353963539735398353993540035401354023540335404354053540635407354083540935410354113541235413354143541535416354173541835419354203542135422354233542435425354263542735428354293543035431354323543335434354353543635437354383543935440354413544235443354443544535446354473544835449354503545135452354533545435455354563545735458354593546035461354623546335464354653546635467354683546935470354713547235473354743547535476354773547835479354803548135482354833548435485354863548735488354893549035491354923549335494354953549635497354983549935500355013550235503355043550535506355073550835509355103551135512355133551435515355163551735518355193552035521355223552335524355253552635527355283552935530355313553235533355343553535536355373553835539355403554135542355433554435545355463554735548355493555035551355523555335554355553555635557355583555935560355613556235563355643556535566355673556835569355703557135572355733557435575355763557735578355793558035581355823558335584355853558635587355883558935590355913559235593355943559535596355973559835599356003560135602356033560435605356063560735608356093561035611356123561335614356153561635617356183561935620356213562235623356243562535626356273562835629356303563135632356333563435635356363563735638356393564035641356423564335644356453564635647356483564935650356513565235653356543565535656356573565835659356603566135662356633566435665356663566735668356693567035671356723567335674356753567635677356783567935680356813568235683356843568535686356873568835689356903569135692356933569435695356963569735698356993570035701357023570335704357053570635707357083570935710357113571235713357143571535716357173571835719357203572135722357233572435725357263572735728357293573035731357323573335734357353573635737357383573935740357413574235743357443574535746357473574835749357503575135752357533575435755357563575735758357593576035761357623576335764357653576635767357683576935770357713577235773357743577535776357773577835779357803578135782357833578435785357863578735788357893579035791357923579335794357953579635797357983579935800358013580235803358043580535806358073580835809358103581135812358133581435815358163581735818358193582035821358223582335824358253582635827358283582935830358313583235833358343583535836358373583835839358403584135842358433584435845358463584735848358493585035851358523585335854358553585635857358583585935860358613586235863358643586535866358673586835869358703587135872358733587435875358763587735878358793588035881358823588335884358853588635887358883588935890358913589235893358943589535896358973589835899359003590135902359033590435905359063590735908359093591035911359123591335914359153591635917359183591935920359213592235923359243592535926359273592835929359303593135932359333593435935359363593735938359393594035941359423594335944359453594635947359483594935950359513595235953359543595535956359573595835959359603596135962359633596435965359663596735968359693597035971359723597335974359753597635977359783597935980359813598235983359843598535986359873598835989359903599135992359933599435995359963599735998359993600036001360023600336004360053600636007360083600936010360113601236013360143601536016360173601836019360203602136022360233602436025360263602736028360293603036031360323603336034360353603636037360383603936040360413604236043360443604536046360473604836049360503605136052360533605436055360563605736058360593606036061360623606336064360653606636067360683606936070360713607236073360743607536076360773607836079360803608136082360833608436085360863608736088360893609036091360923609336094360953609636097360983609936100361013610236103361043610536106361073610836109361103611136112361133611436115361163611736118361193612036121361223612336124361253612636127361283612936130361313613236133361343613536136361373613836139361403614136142361433614436145361463614736148361493615036151361523615336154361553615636157361583615936160361613616236163361643616536166361673616836169361703617136172361733617436175361763617736178361793618036181361823618336184361853618636187361883618936190361913619236193361943619536196361973619836199362003620136202362033620436205362063620736208362093621036211362123621336214362153621636217362183621936220362213622236223362243622536226362273622836229362303623136232362333623436235362363623736238362393624036241362423624336244362453624636247362483624936250362513625236253362543625536256362573625836259362603626136262362633626436265362663626736268362693627036271362723627336274362753627636277362783627936280362813628236283362843628536286362873628836289362903629136292362933629436295362963629736298362993630036301363023630336304363053630636307363083630936310363113631236313363143631536316363173631836319363203632136322363233632436325363263632736328363293633036331363323633336334363353633636337363383633936340363413634236343363443634536346363473634836349363503635136352363533635436355363563635736358363593636036361363623636336364363653636636367363683636936370363713637236373363743637536376363773637836379363803638136382363833638436385363863638736388363893639036391363923639336394363953639636397363983639936400364013640236403364043640536406364073640836409364103641136412364133641436415364163641736418364193642036421364223642336424364253642636427364283642936430364313643236433364343643536436364373643836439364403644136442364433644436445364463644736448364493645036451364523645336454364553645636457364583645936460364613646236463364643646536466364673646836469364703647136472364733647436475364763647736478364793648036481364823648336484364853648636487364883648936490364913649236493364943649536496364973649836499365003650136502365033650436505365063650736508365093651036511365123651336514365153651636517365183651936520365213652236523365243652536526365273652836529365303653136532365333653436535365363653736538365393654036541365423654336544365453654636547365483654936550365513655236553365543655536556365573655836559365603656136562365633656436565365663656736568365693657036571365723657336574365753657636577365783657936580365813658236583365843658536586365873658836589365903659136592365933659436595365963659736598365993660036601366023660336604366053660636607366083660936610366113661236613366143661536616366173661836619366203662136622366233662436625366263662736628366293663036631366323663336634366353663636637366383663936640366413664236643366443664536646366473664836649366503665136652366533665436655366563665736658366593666036661366623666336664366653666636667366683666936670366713667236673366743667536676366773667836679366803668136682366833668436685366863668736688366893669036691366923669336694366953669636697366983669936700367013670236703367043670536706367073670836709367103671136712367133671436715367163671736718367193672036721367223672336724367253672636727367283672936730367313673236733367343673536736367373673836739367403674136742367433674436745367463674736748367493675036751367523675336754367553675636757367583675936760367613676236763367643676536766367673676836769367703677136772367733677436775367763677736778367793678036781367823678336784367853678636787367883678936790367913679236793367943679536796367973679836799368003680136802368033680436805368063680736808368093681036811368123681336814368153681636817368183681936820368213682236823368243682536826368273682836829368303683136832368333683436835368363683736838368393684036841368423684336844368453684636847368483684936850368513685236853368543685536856368573685836859368603686136862368633686436865368663686736868368693687036871368723687336874368753687636877368783687936880368813688236883368843688536886368873688836889368903689136892368933689436895368963689736898368993690036901369023690336904369053690636907369083690936910369113691236913369143691536916369173691836919369203692136922369233692436925369263692736928369293693036931369323693336934369353693636937369383693936940369413694236943369443694536946369473694836949369503695136952369533695436955369563695736958369593696036961369623696336964369653696636967369683696936970369713697236973369743697536976369773697836979369803698136982369833698436985369863698736988369893699036991369923699336994369953699636997369983699937000370013700237003370043700537006370073700837009370103701137012370133701437015370163701737018370193702037021370223702337024370253702637027370283702937030370313703237033370343703537036370373703837039370403704137042370433704437045370463704737048370493705037051370523705337054370553705637057370583705937060370613706237063370643706537066370673706837069370703707137072370733707437075370763707737078370793708037081370823708337084370853708637087370883708937090370913709237093370943709537096370973709837099371003710137102371033710437105371063710737108371093711037111371123711337114371153711637117371183711937120371213712237123371243712537126371273712837129371303713137132371333713437135371363713737138371393714037141371423714337144371453714637147371483714937150371513715237153371543715537156371573715837159371603716137162371633716437165371663716737168371693717037171371723717337174371753717637177371783717937180371813718237183371843718537186371873718837189371903719137192371933719437195371963719737198371993720037201372023720337204372053720637207372083720937210372113721237213372143721537216372173721837219372203722137222372233722437225372263722737228372293723037231372323723337234372353723637237372383723937240372413724237243372443724537246372473724837249372503725137252372533725437255372563725737258372593726037261372623726337264372653726637267372683726937270372713727237273372743727537276372773727837279372803728137282372833728437285372863728737288372893729037291372923729337294372953729637297372983729937300373013730237303373043730537306373073730837309373103731137312373133731437315373163731737318373193732037321373223732337324373253732637327373283732937330373313733237333373343733537336373373733837339373403734137342373433734437345373463734737348373493735037351373523735337354373553735637357373583735937360373613736237363373643736537366373673736837369373703737137372373733737437375373763737737378373793738037381373823738337384373853738637387373883738937390373913739237393373943739537396373973739837399374003740137402374033740437405374063740737408374093741037411374123741337414374153741637417374183741937420374213742237423374243742537426374273742837429374303743137432374333743437435374363743737438374393744037441374423744337444374453744637447374483744937450374513745237453374543745537456374573745837459374603746137462374633746437465374663746737468374693747037471374723747337474374753747637477374783747937480374813748237483374843748537486374873748837489374903749137492374933749437495374963749737498374993750037501375023750337504375053750637507375083750937510375113751237513375143751537516375173751837519375203752137522375233752437525375263752737528375293753037531375323753337534375353753637537375383753937540375413754237543375443754537546375473754837549375503755137552375533755437555375563755737558375593756037561375623756337564375653756637567375683756937570375713757237573375743757537576375773757837579375803758137582375833758437585375863758737588375893759037591375923759337594375953759637597375983759937600376013760237603376043760537606376073760837609376103761137612376133761437615376163761737618376193762037621376223762337624376253762637627376283762937630376313763237633376343763537636376373763837639376403764137642376433764437645376463764737648376493765037651376523765337654376553765637657376583765937660376613766237663376643766537666376673766837669376703767137672376733767437675376763767737678376793768037681376823768337684376853768637687376883768937690376913769237693376943769537696376973769837699377003770137702377033770437705377063770737708377093771037711377123771337714377153771637717377183771937720377213772237723377243772537726377273772837729377303773137732377333773437735377363773737738377393774037741377423774337744377453774637747377483774937750377513775237753377543775537756377573775837759377603776137762377633776437765377663776737768377693777037771377723777337774377753777637777377783777937780377813778237783377843778537786377873778837789377903779137792377933779437795377963779737798377993780037801378023780337804378053780637807378083780937810378113781237813378143781537816378173781837819378203782137822378233782437825378263782737828378293783037831378323783337834378353783637837378383783937840378413784237843378443784537846378473784837849378503785137852378533785437855378563785737858378593786037861378623786337864378653786637867378683786937870378713787237873378743787537876378773787837879378803788137882378833788437885378863788737888378893789037891378923789337894378953789637897378983789937900379013790237903379043790537906379073790837909379103791137912379133791437915379163791737918379193792037921379223792337924379253792637927379283792937930379313793237933379343793537936379373793837939379403794137942379433794437945379463794737948379493795037951379523795337954379553795637957379583795937960379613796237963379643796537966379673796837969379703797137972379733797437975379763797737978379793798037981379823798337984379853798637987379883798937990379913799237993379943799537996379973799837999380003800138002380033800438005380063800738008380093801038011380123801338014380153801638017380183801938020380213802238023380243802538026380273802838029380303803138032380333803438035380363803738038380393804038041380423804338044380453804638047380483804938050380513805238053380543805538056380573805838059380603806138062380633806438065380663806738068380693807038071380723807338074380753807638077380783807938080380813808238083380843808538086380873808838089380903809138092380933809438095380963809738098380993810038101381023810338104381053810638107381083810938110381113811238113381143811538116381173811838119381203812138122381233812438125381263812738128381293813038131381323813338134381353813638137381383813938140381413814238143381443814538146381473814838149381503815138152381533815438155381563815738158381593816038161381623816338164381653816638167381683816938170381713817238173381743817538176381773817838179381803818138182381833818438185381863818738188381893819038191381923819338194381953819638197381983819938200382013820238203382043820538206382073820838209382103821138212382133821438215382163821738218382193822038221382223822338224382253822638227382283822938230382313823238233382343823538236382373823838239382403824138242382433824438245382463824738248382493825038251382523825338254382553825638257382583825938260382613826238263382643826538266382673826838269382703827138272382733827438275382763827738278382793828038281382823828338284382853828638287382883828938290382913829238293382943829538296382973829838299383003830138302383033830438305383063830738308383093831038311383123831338314383153831638317383183831938320383213832238323383243832538326383273832838329383303833138332383333833438335383363833738338383393834038341383423834338344383453834638347383483834938350383513835238353383543835538356383573835838359383603836138362383633836438365383663836738368383693837038371383723837338374383753837638377383783837938380383813838238383383843838538386383873838838389383903839138392383933839438395383963839738398383993840038401384023840338404384053840638407384083840938410384113841238413384143841538416384173841838419384203842138422384233842438425384263842738428384293843038431384323843338434384353843638437384383843938440384413844238443384443844538446384473844838449384503845138452384533845438455384563845738458384593846038461384623846338464384653846638467384683846938470384713847238473384743847538476384773847838479384803848138482384833848438485384863848738488384893849038491384923849338494384953849638497384983849938500385013850238503385043850538506385073850838509385103851138512385133851438515385163851738518385193852038521385223852338524385253852638527385283852938530385313853238533385343853538536385373853838539385403854138542385433854438545385463854738548385493855038551385523855338554385553855638557385583855938560385613856238563385643856538566385673856838569385703857138572385733857438575385763857738578385793858038581385823858338584385853858638587385883858938590385913859238593385943859538596385973859838599386003860138602386033860438605386063860738608386093861038611386123861338614386153861638617386183861938620386213862238623386243862538626386273862838629386303863138632386333863438635386363863738638386393864038641386423864338644386453864638647386483864938650386513865238653386543865538656386573865838659386603866138662386633866438665386663866738668386693867038671386723867338674386753867638677386783867938680386813868238683386843868538686386873868838689386903869138692386933869438695386963869738698386993870038701387023870338704387053870638707387083870938710387113871238713387143871538716387173871838719387203872138722387233872438725387263872738728387293873038731387323873338734387353873638737387383873938740387413874238743387443874538746387473874838749387503875138752387533875438755387563875738758387593876038761387623876338764387653876638767387683876938770387713877238773387743877538776387773877838779387803878138782387833878438785387863878738788387893879038791387923879338794387953879638797387983879938800388013880238803388043880538806388073880838809388103881138812388133881438815388163881738818388193882038821388223882338824388253882638827388283882938830388313883238833388343883538836388373883838839388403884138842388433884438845388463884738848388493885038851388523885338854388553885638857388583885938860388613886238863388643886538866388673886838869388703887138872388733887438875388763887738878388793888038881388823888338884388853888638887388883888938890388913889238893388943889538896388973889838899389003890138902389033890438905389063890738908389093891038911389123891338914389153891638917389183891938920389213892238923389243892538926389273892838929389303893138932389333893438935389363893738938389393894038941389423894338944389453894638947389483894938950389513895238953389543895538956389573895838959389603896138962389633896438965389663896738968389693897038971389723897338974389753897638977389783897938980389813898238983389843898538986389873898838989389903899138992389933899438995389963899738998389993900039001390023900339004390053900639007390083900939010390113901239013390143901539016390173901839019390203902139022390233902439025390263902739028390293903039031390323903339034390353903639037390383903939040390413904239043390443904539046390473904839049390503905139052390533905439055390563905739058390593906039061390623906339064390653906639067390683906939070390713907239073390743907539076390773907839079390803908139082390833908439085390863908739088390893909039091390923909339094390953909639097390983909939100391013910239103391043910539106391073910839109391103911139112391133911439115391163911739118391193912039121391223912339124391253912639127391283912939130391313913239133391343913539136391373913839139391403914139142391433914439145391463914739148391493915039151391523915339154391553915639157391583915939160391613916239163391643916539166391673916839169391703917139172391733917439175391763917739178391793918039181391823918339184391853918639187391883918939190391913919239193391943919539196391973919839199392003920139202392033920439205392063920739208392093921039211392123921339214392153921639217392183921939220392213922239223392243922539226392273922839229392303923139232392333923439235392363923739238392393924039241392423924339244392453924639247392483924939250392513925239253392543925539256392573925839259392603926139262392633926439265392663926739268392693927039271392723927339274392753927639277392783927939280392813928239283392843928539286392873928839289392903929139292392933929439295392963929739298392993930039301393023930339304393053930639307393083930939310393113931239313393143931539316393173931839319393203932139322393233932439325393263932739328393293933039331393323933339334393353933639337393383933939340393413934239343393443934539346393473934839349393503935139352393533935439355393563935739358393593936039361393623936339364393653936639367393683936939370393713937239373393743937539376393773937839379393803938139382393833938439385393863938739388393893939039391393923939339394393953939639397393983939939400394013940239403394043940539406394073940839409394103941139412394133941439415394163941739418394193942039421394223942339424394253942639427394283942939430394313943239433394343943539436394373943839439394403944139442394433944439445394463944739448394493945039451394523945339454394553945639457394583945939460394613946239463394643946539466394673946839469394703947139472394733947439475394763947739478394793948039481394823948339484394853948639487394883948939490394913949239493394943949539496394973949839499395003950139502395033950439505395063950739508395093951039511395123951339514395153951639517395183951939520395213952239523395243952539526395273952839529395303953139532395333953439535395363953739538395393954039541395423954339544395453954639547395483954939550395513955239553395543955539556395573955839559395603956139562395633956439565395663956739568395693957039571395723957339574395753957639577395783957939580395813958239583395843958539586395873958839589395903959139592395933959439595395963959739598395993960039601396023960339604396053960639607396083960939610396113961239613396143961539616396173961839619396203962139622396233962439625396263962739628396293963039631396323963339634396353963639637396383963939640396413964239643396443964539646396473964839649396503965139652396533965439655396563965739658396593966039661396623966339664396653966639667396683966939670396713967239673396743967539676396773967839679396803968139682396833968439685396863968739688396893969039691396923969339694396953969639697396983969939700397013970239703397043970539706397073970839709397103971139712397133971439715397163971739718397193972039721397223972339724397253972639727397283972939730397313973239733397343973539736397373973839739397403974139742397433974439745397463974739748397493975039751397523975339754397553975639757397583975939760397613976239763397643976539766397673976839769397703977139772397733977439775397763977739778397793978039781397823978339784397853978639787397883978939790397913979239793397943979539796397973979839799398003980139802398033980439805398063980739808398093981039811398123981339814398153981639817398183981939820398213982239823398243982539826398273982839829398303983139832398333983439835398363983739838398393984039841398423984339844398453984639847398483984939850398513985239853398543985539856398573985839859398603986139862398633986439865398663986739868398693987039871398723987339874398753987639877398783987939880398813988239883398843988539886398873988839889398903989139892398933989439895398963989739898398993990039901399023990339904399053990639907399083990939910399113991239913399143991539916399173991839919399203992139922399233992439925399263992739928399293993039931399323993339934399353993639937399383993939940399413994239943399443994539946399473994839949399503995139952399533995439955399563995739958399593996039961399623996339964399653996639967399683996939970399713997239973399743997539976399773997839979399803998139982399833998439985399863998739988399893999039991399923999339994399953999639997399983999940000400014000240003400044000540006400074000840009400104001140012400134001440015400164001740018400194002040021400224002340024400254002640027400284002940030400314003240033400344003540036400374003840039400404004140042400434004440045400464004740048400494005040051400524005340054400554005640057400584005940060400614006240063400644006540066400674006840069400704007140072400734007440075400764007740078400794008040081400824008340084400854008640087400884008940090400914009240093400944009540096400974009840099401004010140102401034010440105401064010740108401094011040111401124011340114401154011640117401184011940120401214012240123401244012540126401274012840129401304013140132401334013440135401364013740138401394014040141401424014340144401454014640147401484014940150401514015240153401544015540156401574015840159401604016140162401634016440165401664016740168401694017040171401724017340174401754017640177401784017940180401814018240183401844018540186401874018840189401904019140192401934019440195401964019740198401994020040201402024020340204402054020640207402084020940210402114021240213402144021540216402174021840219402204022140222402234022440225402264022740228402294023040231402324023340234402354023640237402384023940240402414024240243402444024540246402474024840249402504025140252402534025440255402564025740258402594026040261402624026340264402654026640267402684026940270402714027240273402744027540276402774027840279402804028140282402834028440285402864028740288402894029040291402924029340294402954029640297402984029940300403014030240303403044030540306403074030840309403104031140312403134031440315403164031740318403194032040321403224032340324403254032640327403284032940330403314033240333403344033540336403374033840339403404034140342403434034440345403464034740348403494035040351403524035340354403554035640357403584035940360403614036240363403644036540366403674036840369403704037140372403734037440375403764037740378403794038040381403824038340384403854038640387403884038940390403914039240393403944039540396403974039840399404004040140402404034040440405404064040740408404094041040411404124041340414404154041640417404184041940420404214042240423404244042540426404274042840429404304043140432404334043440435404364043740438404394044040441404424044340444404454044640447404484044940450404514045240453404544045540456404574045840459404604046140462404634046440465404664046740468404694047040471404724047340474404754047640477404784047940480404814048240483404844048540486404874048840489404904049140492404934049440495404964049740498404994050040501405024050340504405054050640507405084050940510405114051240513405144051540516405174051840519405204052140522405234052440525405264052740528405294053040531405324053340534405354053640537405384053940540405414054240543405444054540546405474054840549405504055140552405534055440555405564055740558405594056040561405624056340564405654056640567405684056940570405714057240573405744057540576405774057840579405804058140582405834058440585405864058740588405894059040591405924059340594405954059640597405984059940600406014060240603406044060540606406074060840609406104061140612406134061440615406164061740618406194062040621406224062340624406254062640627406284062940630406314063240633406344063540636406374063840639406404064140642406434064440645406464064740648406494065040651406524065340654406554065640657406584065940660406614066240663406644066540666406674066840669406704067140672406734067440675406764067740678406794068040681406824068340684406854068640687406884068940690406914069240693406944069540696406974069840699407004070140702407034070440705407064070740708407094071040711407124071340714407154071640717407184071940720407214072240723407244072540726407274072840729407304073140732407334073440735407364073740738407394074040741407424074340744407454074640747407484074940750407514075240753407544075540756407574075840759407604076140762407634076440765407664076740768407694077040771407724077340774407754077640777407784077940780407814078240783407844078540786407874078840789407904079140792407934079440795407964079740798407994080040801408024080340804408054080640807408084080940810408114081240813408144081540816408174081840819408204082140822408234082440825408264082740828408294083040831408324083340834408354083640837408384083940840408414084240843408444084540846408474084840849408504085140852408534085440855408564085740858408594086040861408624086340864408654086640867408684086940870408714087240873408744087540876408774087840879408804088140882408834088440885408864088740888408894089040891408924089340894408954089640897408984089940900409014090240903409044090540906409074090840909409104091140912409134091440915409164091740918409194092040921409224092340924409254092640927409284092940930409314093240933409344093540936409374093840939409404094140942409434094440945409464094740948409494095040951409524095340954409554095640957409584095940960409614096240963409644096540966409674096840969409704097140972409734097440975409764097740978409794098040981409824098340984409854098640987409884098940990409914099240993409944099540996409974099840999410004100141002410034100441005410064100741008410094101041011410124101341014410154101641017410184101941020410214102241023410244102541026410274102841029410304103141032410334103441035410364103741038410394104041041410424104341044410454104641047410484104941050410514105241053410544105541056410574105841059410604106141062410634106441065410664106741068410694107041071410724107341074410754107641077410784107941080410814108241083410844108541086410874108841089410904109141092410934109441095410964109741098410994110041101411024110341104411054110641107411084110941110411114111241113411144111541116411174111841119411204112141122411234112441125411264112741128411294113041131411324113341134411354113641137411384113941140411414114241143411444114541146411474114841149411504115141152411534115441155411564115741158411594116041161411624116341164411654116641167411684116941170411714117241173411744117541176411774117841179411804118141182411834118441185411864118741188411894119041191411924119341194411954119641197411984119941200412014120241203412044120541206412074120841209412104121141212412134121441215412164121741218412194122041221412224122341224412254122641227412284122941230412314123241233412344123541236412374123841239412404124141242412434124441245412464124741248412494125041251412524125341254412554125641257412584125941260412614126241263412644126541266412674126841269412704127141272412734127441275412764127741278412794128041281412824128341284412854128641287412884128941290412914129241293412944129541296412974129841299413004130141302413034130441305413064130741308413094131041311413124131341314413154131641317413184131941320413214132241323413244132541326413274132841329413304133141332413334133441335413364133741338413394134041341413424134341344413454134641347413484134941350413514135241353413544135541356413574135841359413604136141362413634136441365413664136741368413694137041371413724137341374413754137641377413784137941380413814138241383413844138541386413874138841389413904139141392413934139441395413964139741398413994140041401414024140341404414054140641407414084140941410414114141241413414144141541416414174141841419414204142141422414234142441425414264142741428414294143041431414324143341434414354143641437414384143941440414414144241443414444144541446414474144841449414504145141452414534145441455414564145741458414594146041461414624146341464414654146641467414684146941470414714147241473414744147541476414774147841479414804148141482414834148441485414864148741488414894149041491414924149341494414954149641497414984149941500415014150241503415044150541506415074150841509415104151141512415134151441515415164151741518415194152041521415224152341524415254152641527415284152941530415314153241533415344153541536415374153841539415404154141542415434154441545415464154741548415494155041551415524155341554415554155641557415584155941560415614156241563415644156541566415674156841569415704157141572415734157441575415764157741578415794158041581415824158341584415854158641587415884158941590415914159241593415944159541596415974159841599416004160141602416034160441605416064160741608416094161041611416124161341614416154161641617416184161941620416214162241623416244162541626416274162841629416304163141632416334163441635416364163741638416394164041641416424164341644416454164641647416484164941650416514165241653416544165541656416574165841659416604166141662416634166441665416664166741668416694167041671416724167341674416754167641677416784167941680416814168241683416844168541686416874168841689416904169141692416934169441695416964169741698416994170041701417024170341704417054170641707417084170941710417114171241713417144171541716417174171841719417204172141722417234172441725417264172741728417294173041731417324173341734417354173641737417384173941740417414174241743417444174541746417474174841749417504175141752417534175441755417564175741758417594176041761417624176341764417654176641767417684176941770417714177241773417744177541776417774177841779417804178141782417834178441785417864178741788417894179041791417924179341794417954179641797417984179941800418014180241803418044180541806418074180841809418104181141812418134181441815418164181741818418194182041821418224182341824418254182641827418284182941830418314183241833418344183541836418374183841839418404184141842418434184441845418464184741848418494185041851418524185341854418554185641857418584185941860418614186241863418644186541866418674186841869418704187141872418734187441875418764187741878418794188041881418824188341884418854188641887418884188941890418914189241893418944189541896418974189841899419004190141902419034190441905419064190741908419094191041911419124191341914419154191641917419184191941920419214192241923419244192541926419274192841929419304193141932419334193441935419364193741938419394194041941419424194341944419454194641947419484194941950419514195241953419544195541956419574195841959419604196141962419634196441965419664196741968419694197041971419724197341974419754197641977419784197941980419814198241983419844198541986419874198841989419904199141992419934199441995419964199741998419994200042001420024200342004420054200642007420084200942010420114201242013420144201542016420174201842019420204202142022420234202442025420264202742028420294203042031420324203342034420354203642037420384203942040420414204242043420444204542046420474204842049420504205142052420534205442055420564205742058420594206042061420624206342064420654206642067420684206942070420714207242073420744207542076420774207842079420804208142082420834208442085420864208742088420894209042091420924209342094420954209642097420984209942100421014210242103421044210542106421074210842109421104211142112421134211442115421164211742118421194212042121421224212342124421254212642127421284212942130421314213242133421344213542136421374213842139421404214142142421434214442145421464214742148421494215042151421524215342154421554215642157421584215942160421614216242163421644216542166421674216842169421704217142172421734217442175421764217742178421794218042181421824218342184421854218642187421884218942190421914219242193421944219542196421974219842199422004220142202422034220442205422064220742208422094221042211422124221342214422154221642217422184221942220422214222242223422244222542226422274222842229422304223142232422334223442235422364223742238422394224042241422424224342244422454224642247422484224942250422514225242253422544225542256422574225842259422604226142262422634226442265422664226742268422694227042271422724227342274422754227642277422784227942280422814228242283422844228542286422874228842289422904229142292422934229442295422964229742298422994230042301423024230342304423054230642307423084230942310423114231242313423144231542316423174231842319423204232142322423234232442325423264232742328423294233042331423324233342334423354233642337423384233942340423414234242343423444234542346423474234842349423504235142352423534235442355423564235742358423594236042361423624236342364423654236642367423684236942370423714237242373423744237542376423774237842379423804238142382423834238442385423864238742388423894239042391423924239342394423954239642397423984239942400424014240242403424044240542406424074240842409424104241142412424134241442415424164241742418424194242042421424224242342424424254242642427424284242942430424314243242433424344243542436424374243842439424404244142442424434244442445424464244742448424494245042451424524245342454424554245642457424584245942460424614246242463424644246542466424674246842469424704247142472424734247442475424764247742478424794248042481424824248342484424854248642487424884248942490424914249242493424944249542496424974249842499425004250142502425034250442505425064250742508425094251042511425124251342514425154251642517425184251942520425214252242523425244252542526425274252842529425304253142532425334253442535425364253742538425394254042541425424254342544425454254642547425484254942550425514255242553425544255542556425574255842559425604256142562425634256442565425664256742568425694257042571425724257342574425754257642577425784257942580425814258242583425844258542586425874258842589425904259142592425934259442595425964259742598425994260042601426024260342604426054260642607426084260942610426114261242613426144261542616426174261842619426204262142622426234262442625426264262742628426294263042631426324263342634426354263642637426384263942640426414264242643426444264542646426474264842649426504265142652426534265442655426564265742658426594266042661426624266342664426654266642667426684266942670426714267242673426744267542676426774267842679426804268142682426834268442685426864268742688426894269042691426924269342694426954269642697426984269942700427014270242703427044270542706427074270842709427104271142712427134271442715427164271742718427194272042721427224272342724427254272642727427284272942730427314273242733427344273542736427374273842739427404274142742427434274442745427464274742748427494275042751427524275342754427554275642757427584275942760427614276242763427644276542766427674276842769427704277142772427734277442775427764277742778427794278042781427824278342784427854278642787427884278942790427914279242793427944279542796427974279842799428004280142802428034280442805428064280742808428094281042811428124281342814428154281642817428184281942820428214282242823428244282542826428274282842829428304283142832428334283442835428364283742838428394284042841428424284342844428454284642847428484284942850428514285242853428544285542856428574285842859428604286142862428634286442865428664286742868428694287042871428724287342874428754287642877428784287942880428814288242883428844288542886428874288842889428904289142892428934289442895428964289742898428994290042901429024290342904429054290642907429084290942910429114291242913429144291542916429174291842919429204292142922429234292442925429264292742928429294293042931429324293342934429354293642937429384293942940429414294242943429444294542946429474294842949429504295142952429534295442955429564295742958429594296042961429624296342964429654296642967429684296942970429714297242973429744297542976429774297842979429804298142982429834298442985429864298742988429894299042991429924299342994429954299642997429984299943000430014300243003430044300543006430074300843009430104301143012430134301443015430164301743018430194302043021430224302343024430254302643027430284302943030430314303243033430344303543036430374303843039430404304143042430434304443045430464304743048430494305043051430524305343054430554305643057430584305943060430614306243063430644306543066430674306843069430704307143072430734307443075430764307743078430794308043081430824308343084430854308643087430884308943090430914309243093430944309543096430974309843099431004310143102431034310443105431064310743108431094311043111431124311343114431154311643117431184311943120431214312243123431244312543126431274312843129431304313143132431334313443135431364313743138431394314043141431424314343144431454314643147431484314943150431514315243153431544315543156431574315843159431604316143162431634316443165431664316743168431694317043171431724317343174431754317643177431784317943180431814318243183431844318543186431874318843189431904319143192431934319443195431964319743198431994320043201432024320343204432054320643207432084320943210432114321243213432144321543216432174321843219432204322143222432234322443225432264322743228432294323043231432324323343234432354323643237432384323943240432414324243243432444324543246432474324843249432504325143252432534325443255432564325743258432594326043261432624326343264432654326643267432684326943270432714327243273432744327543276432774327843279432804328143282432834328443285432864328743288432894329043291432924329343294432954329643297432984329943300433014330243303433044330543306433074330843309433104331143312433134331443315433164331743318433194332043321433224332343324433254332643327433284332943330433314333243333433344333543336433374333843339433404334143342433434334443345433464334743348433494335043351433524335343354433554335643357433584335943360433614336243363433644336543366433674336843369433704337143372433734337443375433764337743378433794338043381433824338343384433854338643387433884338943390433914339243393433944339543396433974339843399434004340143402434034340443405434064340743408434094341043411434124341343414434154341643417434184341943420434214342243423434244342543426434274342843429434304343143432434334343443435434364343743438434394344043441434424344343444434454344643447434484344943450434514345243453434544345543456434574345843459434604346143462434634346443465434664346743468434694347043471434724347343474434754347643477434784347943480434814348243483434844348543486434874348843489434904349143492434934349443495434964349743498434994350043501435024350343504435054350643507435084350943510435114351243513435144351543516435174351843519435204352143522435234352443525435264352743528435294353043531435324353343534435354353643537435384353943540435414354243543435444354543546435474354843549435504355143552435534355443555435564355743558435594356043561435624356343564435654356643567435684356943570435714357243573435744357543576435774357843579435804358143582435834358443585435864358743588435894359043591435924359343594435954359643597435984359943600436014360243603436044360543606436074360843609436104361143612436134361443615436164361743618436194362043621436224362343624436254362643627436284362943630436314363243633436344363543636436374363843639436404364143642436434364443645436464364743648436494365043651436524365343654436554365643657436584365943660436614366243663436644366543666436674366843669436704367143672436734367443675436764367743678436794368043681436824368343684436854368643687436884368943690436914369243693436944369543696436974369843699437004370143702437034370443705437064370743708437094371043711437124371343714437154371643717437184371943720437214372243723437244372543726437274372843729437304373143732437334373443735437364373743738437394374043741437424374343744437454374643747437484374943750437514375243753437544375543756437574375843759437604376143762437634376443765437664376743768437694377043771437724377343774437754377643777437784377943780437814378243783437844378543786437874378843789437904379143792437934379443795437964379743798437994380043801438024380343804438054380643807438084380943810438114381243813438144381543816438174381843819438204382143822438234382443825438264382743828438294383043831438324383343834438354383643837438384383943840438414384243843438444384543846438474384843849438504385143852438534385443855438564385743858438594386043861438624386343864438654386643867438684386943870438714387243873438744387543876438774387843879438804388143882438834388443885438864388743888438894389043891438924389343894438954389643897438984389943900439014390243903439044390543906439074390843909439104391143912439134391443915439164391743918439194392043921439224392343924439254392643927439284392943930439314393243933439344393543936439374393843939439404394143942439434394443945439464394743948439494395043951439524395343954439554395643957439584395943960439614396243963439644396543966439674396843969439704397143972439734397443975439764397743978439794398043981439824398343984439854398643987439884398943990439914399243993439944399543996439974399843999440004400144002440034400444005440064400744008440094401044011440124401344014440154401644017440184401944020440214402244023440244402544026440274402844029440304403144032440334403444035440364403744038440394404044041440424404344044440454404644047440484404944050440514405244053440544405544056440574405844059440604406144062440634406444065440664406744068440694407044071440724407344074440754407644077440784407944080440814408244083440844408544086440874408844089440904409144092440934409444095440964409744098440994410044101441024410344104441054410644107441084410944110441114411244113441144411544116441174411844119441204412144122441234412444125441264412744128441294413044131441324413344134441354413644137441384413944140441414414244143441444414544146441474414844149441504415144152441534415444155441564415744158441594416044161441624416344164441654416644167441684416944170441714417244173441744417544176441774417844179441804418144182441834418444185441864418744188441894419044191441924419344194441954419644197441984419944200442014420244203442044420544206442074420844209442104421144212442134421444215442164421744218442194422044221442224422344224442254422644227442284422944230442314423244233442344423544236442374423844239442404424144242442434424444245442464424744248442494425044251442524425344254442554425644257442584425944260442614426244263442644426544266442674426844269442704427144272442734427444275442764427744278442794428044281442824428344284442854428644287442884428944290442914429244293442944429544296442974429844299443004430144302443034430444305443064430744308443094431044311443124431344314443154431644317443184431944320443214432244323443244432544326443274432844329443304433144332443334433444335443364433744338443394434044341443424434344344443454434644347443484434944350443514435244353443544435544356443574435844359443604436144362443634436444365443664436744368443694437044371443724437344374443754437644377443784437944380443814438244383443844438544386443874438844389443904439144392443934439444395443964439744398443994440044401444024440344404444054440644407444084440944410444114441244413444144441544416444174441844419444204442144422444234442444425444264442744428444294443044431444324443344434444354443644437444384443944440444414444244443444444444544446444474444844449444504445144452444534445444455444564445744458444594446044461444624446344464444654446644467444684446944470444714447244473444744447544476444774447844479444804448144482444834448444485444864448744488444894449044491444924449344494444954449644497444984449944500445014450244503445044450544506445074450844509445104451144512445134451444515445164451744518445194452044521445224452344524445254452644527445284452944530445314453244533445344453544536445374453844539445404454144542445434454444545445464454744548445494455044551445524455344554445554455644557445584455944560445614456244563445644456544566445674456844569445704457144572445734457444575445764457744578445794458044581445824458344584445854458644587445884458944590445914459244593445944459544596445974459844599446004460144602446034460444605446064460744608446094461044611446124461344614446154461644617446184461944620446214462244623446244462544626446274462844629446304463144632446334463444635446364463744638446394464044641446424464344644446454464644647446484464944650446514465244653446544465544656446574465844659446604466144662446634466444665446664466744668446694467044671446724467344674446754467644677446784467944680446814468244683446844468544686446874468844689446904469144692446934469444695446964469744698446994470044701447024470344704447054470644707447084470944710447114471244713447144471544716447174471844719447204472144722447234472444725447264472744728447294473044731447324473344734447354473644737447384473944740447414474244743447444474544746447474474844749447504475144752447534475444755447564475744758447594476044761447624476344764447654476644767447684476944770447714477244773447744477544776447774477844779447804478144782447834478444785447864478744788447894479044791447924479344794447954479644797447984479944800448014480244803448044480544806448074480844809448104481144812448134481444815448164481744818448194482044821448224482344824448254482644827448284482944830448314483244833448344483544836448374483844839448404484144842448434484444845448464484744848448494485044851448524485344854448554485644857448584485944860448614486244863448644486544866448674486844869448704487144872448734487444875448764487744878448794488044881448824488344884448854488644887448884488944890448914489244893448944489544896448974489844899449004490144902449034490444905449064490744908449094491044911449124491344914449154491644917449184491944920449214492244923449244492544926449274492844929449304493144932449334493444935449364493744938449394494044941449424494344944449454494644947449484494944950449514495244953449544495544956449574495844959449604496144962449634496444965449664496744968449694497044971449724497344974449754497644977449784497944980449814498244983449844498544986449874498844989449904499144992449934499444995449964499744998449994500045001450024500345004450054500645007450084500945010450114501245013450144501545016450174501845019450204502145022450234502445025450264502745028450294503045031450324503345034450354503645037450384503945040450414504245043450444504545046450474504845049450504505145052450534505445055450564505745058450594506045061450624506345064450654506645067450684506945070450714507245073450744507545076450774507845079450804508145082450834508445085450864508745088450894509045091450924509345094450954509645097450984509945100451014510245103451044510545106451074510845109451104511145112451134511445115451164511745118451194512045121451224512345124451254512645127451284512945130451314513245133451344513545136451374513845139451404514145142451434514445145451464514745148451494515045151451524515345154451554515645157451584515945160451614516245163451644516545166451674516845169451704517145172451734517445175451764517745178451794518045181451824518345184451854518645187451884518945190451914519245193451944519545196451974519845199452004520145202452034520445205452064520745208452094521045211452124521345214452154521645217452184521945220452214522245223452244522545226452274522845229452304523145232452334523445235452364523745238452394524045241452424524345244452454524645247452484524945250452514525245253452544525545256452574525845259452604526145262452634526445265452664526745268452694527045271452724527345274452754527645277452784527945280452814528245283452844528545286452874528845289452904529145292452934529445295452964529745298452994530045301453024530345304453054530645307453084530945310453114531245313453144531545316453174531845319453204532145322453234532445325453264532745328453294533045331453324533345334453354533645337453384533945340453414534245343453444534545346453474534845349453504535145352453534535445355453564535745358453594536045361453624536345364453654536645367453684536945370453714537245373453744537545376453774537845379453804538145382453834538445385453864538745388453894539045391453924539345394453954539645397453984539945400454014540245403454044540545406454074540845409454104541145412454134541445415454164541745418454194542045421454224542345424454254542645427454284542945430454314543245433454344543545436454374543845439454404544145442454434544445445454464544745448454494545045451454524545345454454554545645457454584545945460454614546245463454644546545466454674546845469454704547145472454734547445475454764547745478454794548045481454824548345484454854548645487454884548945490454914549245493454944549545496454974549845499455004550145502455034550445505455064550745508455094551045511455124551345514455154551645517455184551945520455214552245523455244552545526455274552845529455304553145532455334553445535455364553745538455394554045541455424554345544455454554645547455484554945550455514555245553455544555545556455574555845559455604556145562455634556445565455664556745568455694557045571455724557345574455754557645577455784557945580455814558245583455844558545586455874558845589455904559145592455934559445595455964559745598455994560045601456024560345604456054560645607456084560945610456114561245613456144561545616456174561845619456204562145622456234562445625456264562745628456294563045631456324563345634456354563645637456384563945640456414564245643456444564545646456474564845649456504565145652456534565445655456564565745658456594566045661456624566345664456654566645667456684566945670456714567245673456744567545676456774567845679456804568145682456834568445685456864568745688456894569045691456924569345694456954569645697456984569945700457014570245703457044570545706457074570845709457104571145712457134571445715457164571745718457194572045721457224572345724457254572645727457284572945730457314573245733457344573545736457374573845739457404574145742457434574445745457464574745748457494575045751457524575345754457554575645757457584575945760457614576245763457644576545766457674576845769457704577145772457734577445775457764577745778457794578045781457824578345784457854578645787457884578945790457914579245793457944579545796457974579845799458004580145802458034580445805458064580745808458094581045811458124581345814458154581645817458184581945820458214582245823458244582545826458274582845829458304583145832458334583445835458364583745838458394584045841458424584345844458454584645847458484584945850458514585245853458544585545856458574585845859458604586145862458634586445865458664586745868458694587045871458724587345874458754587645877458784587945880458814588245883458844588545886458874588845889458904589145892458934589445895458964589745898458994590045901459024590345904459054590645907459084590945910459114591245913459144591545916459174591845919459204592145922459234592445925459264592745928459294593045931459324593345934459354593645937459384593945940459414594245943459444594545946459474594845949459504595145952459534595445955459564595745958459594596045961459624596345964459654596645967459684596945970459714597245973459744597545976459774597845979459804598145982459834598445985459864598745988459894599045991459924599345994459954599645997459984599946000460014600246003460044600546006460074600846009460104601146012460134601446015460164601746018460194602046021460224602346024460254602646027460284602946030460314603246033460344603546036460374603846039460404604146042460434604446045460464604746048460494605046051460524605346054460554605646057460584605946060460614606246063460644606546066460674606846069460704607146072460734607446075460764607746078460794608046081460824608346084460854608646087460884608946090460914609246093460944609546096460974609846099461004610146102461034610446105461064610746108461094611046111461124611346114461154611646117461184611946120461214612246123461244612546126461274612846129461304613146132461334613446135461364613746138461394614046141461424614346144461454614646147461484614946150461514615246153461544615546156461574615846159461604616146162461634616446165461664616746168461694617046171461724617346174461754617646177461784617946180461814618246183461844618546186461874618846189461904619146192461934619446195461964619746198461994620046201462024620346204462054620646207462084620946210462114621246213462144621546216462174621846219462204622146222462234622446225462264622746228462294623046231462324623346234462354623646237462384623946240462414624246243462444624546246462474624846249462504625146252462534625446255462564625746258462594626046261462624626346264462654626646267462684626946270462714627246273462744627546276462774627846279462804628146282462834628446285462864628746288462894629046291462924629346294462954629646297462984629946300463014630246303463044630546306463074630846309463104631146312463134631446315463164631746318463194632046321463224632346324463254632646327463284632946330463314633246333463344633546336463374633846339463404634146342463434634446345463464634746348463494635046351463524635346354463554635646357463584635946360463614636246363463644636546366463674636846369463704637146372463734637446375463764637746378463794638046381463824638346384463854638646387463884638946390463914639246393463944639546396463974639846399464004640146402464034640446405464064640746408464094641046411464124641346414464154641646417464184641946420464214642246423464244642546426464274642846429464304643146432464334643446435464364643746438464394644046441464424644346444464454644646447464484644946450464514645246453464544645546456464574645846459464604646146462464634646446465464664646746468464694647046471464724647346474464754647646477464784647946480464814648246483464844648546486464874648846489464904649146492464934649446495464964649746498464994650046501465024650346504465054650646507465084650946510465114651246513465144651546516465174651846519465204652146522465234652446525465264652746528465294653046531465324653346534465354653646537465384653946540465414654246543465444654546546465474654846549465504655146552465534655446555465564655746558465594656046561465624656346564465654656646567465684656946570465714657246573465744657546576465774657846579465804658146582465834658446585465864658746588465894659046591465924659346594465954659646597465984659946600466014660246603466044660546606466074660846609466104661146612466134661446615466164661746618466194662046621466224662346624466254662646627466284662946630466314663246633466344663546636466374663846639466404664146642466434664446645466464664746648466494665046651466524665346654466554665646657466584665946660466614666246663466644666546666466674666846669466704667146672466734667446675466764667746678466794668046681466824668346684466854668646687466884668946690466914669246693466944669546696466974669846699467004670146702467034670446705467064670746708467094671046711467124671346714467154671646717467184671946720467214672246723467244672546726467274672846729467304673146732467334673446735467364673746738467394674046741467424674346744467454674646747467484674946750467514675246753467544675546756467574675846759467604676146762467634676446765467664676746768467694677046771467724677346774467754677646777467784677946780467814678246783467844678546786467874678846789467904679146792467934679446795467964679746798467994680046801468024680346804468054680646807468084680946810468114681246813468144681546816468174681846819468204682146822468234682446825468264682746828468294683046831468324683346834468354683646837468384683946840468414684246843468444684546846468474684846849468504685146852468534685446855468564685746858468594686046861468624686346864468654686646867468684686946870468714687246873468744687546876468774687846879468804688146882468834688446885468864688746888468894689046891468924689346894468954689646897468984689946900469014690246903469044690546906469074690846909469104691146912469134691446915469164691746918469194692046921469224692346924469254692646927469284692946930469314693246933469344693546936469374693846939469404694146942469434694446945469464694746948469494695046951469524695346954469554695646957469584695946960469614696246963469644696546966469674696846969469704697146972469734697446975469764697746978469794698046981469824698346984469854698646987469884698946990469914699246993469944699546996469974699846999470004700147002470034700447005470064700747008470094701047011470124701347014470154701647017470184701947020470214702247023470244702547026470274702847029470304703147032470334703447035470364703747038470394704047041470424704347044470454704647047470484704947050470514705247053470544705547056470574705847059470604706147062470634706447065470664706747068470694707047071470724707347074470754707647077470784707947080470814708247083470844708547086470874708847089470904709147092470934709447095470964709747098470994710047101471024710347104471054710647107471084710947110471114711247113471144711547116471174711847119471204712147122471234712447125471264712747128471294713047131471324713347134471354713647137471384713947140471414714247143471444714547146471474714847149471504715147152471534715447155471564715747158471594716047161471624716347164471654716647167471684716947170471714717247173471744717547176471774717847179471804718147182471834718447185471864718747188471894719047191471924719347194471954719647197471984719947200472014720247203472044720547206472074720847209472104721147212472134721447215472164721747218472194722047221472224722347224472254722647227472284722947230472314723247233472344723547236472374723847239472404724147242472434724447245472464724747248472494725047251472524725347254472554725647257472584725947260472614726247263472644726547266472674726847269472704727147272472734727447275472764727747278472794728047281472824728347284472854728647287472884728947290472914729247293472944729547296472974729847299473004730147302473034730447305473064730747308473094731047311473124731347314473154731647317473184731947320473214732247323473244732547326473274732847329473304733147332473334733447335473364733747338473394734047341473424734347344473454734647347473484734947350473514735247353473544735547356473574735847359473604736147362473634736447365473664736747368473694737047371473724737347374473754737647377473784737947380473814738247383473844738547386473874738847389473904739147392473934739447395473964739747398473994740047401474024740347404474054740647407474084740947410474114741247413474144741547416474174741847419474204742147422474234742447425474264742747428474294743047431474324743347434474354743647437474384743947440474414744247443474444744547446474474744847449474504745147452474534745447455474564745747458474594746047461474624746347464474654746647467474684746947470474714747247473474744747547476474774747847479474804748147482474834748447485474864748747488474894749047491474924749347494474954749647497474984749947500475014750247503475044750547506475074750847509475104751147512475134751447515475164751747518475194752047521475224752347524475254752647527475284752947530475314753247533475344753547536475374753847539475404754147542475434754447545475464754747548475494755047551475524755347554475554755647557475584755947560475614756247563475644756547566475674756847569475704757147572475734757447575475764757747578475794758047581475824758347584475854758647587475884758947590475914759247593475944759547596475974759847599476004760147602476034760447605476064760747608476094761047611476124761347614476154761647617476184761947620476214762247623476244762547626476274762847629476304763147632476334763447635476364763747638476394764047641476424764347644476454764647647476484764947650476514765247653476544765547656476574765847659476604766147662476634766447665476664766747668476694767047671476724767347674476754767647677476784767947680476814768247683476844768547686476874768847689476904769147692476934769447695476964769747698476994770047701477024770347704477054770647707477084770947710477114771247713477144771547716477174771847719477204772147722477234772447725477264772747728477294773047731477324773347734477354773647737477384773947740477414774247743477444774547746477474774847749477504775147752477534775447755477564775747758477594776047761477624776347764477654776647767477684776947770477714777247773477744777547776477774777847779477804778147782477834778447785477864778747788477894779047791477924779347794477954779647797477984779947800478014780247803478044780547806478074780847809478104781147812478134781447815478164781747818478194782047821478224782347824478254782647827478284782947830478314783247833478344783547836478374783847839478404784147842478434784447845478464784747848478494785047851478524785347854478554785647857478584785947860478614786247863478644786547866478674786847869478704787147872478734787447875478764787747878478794788047881478824788347884478854788647887478884788947890478914789247893478944789547896478974789847899479004790147902479034790447905479064790747908479094791047911479124791347914479154791647917479184791947920479214792247923479244792547926479274792847929479304793147932479334793447935479364793747938479394794047941479424794347944479454794647947479484794947950479514795247953479544795547956479574795847959479604796147962479634796447965479664796747968479694797047971479724797347974479754797647977479784797947980479814798247983479844798547986479874798847989479904799147992479934799447995479964799747998479994800048001480024800348004480054800648007480084800948010480114801248013480144801548016480174801848019480204802148022480234802448025480264802748028480294803048031480324803348034480354803648037480384803948040480414804248043480444804548046480474804848049480504805148052480534805448055480564805748058480594806048061480624806348064480654806648067480684806948070480714807248073480744807548076480774807848079480804808148082480834808448085480864808748088480894809048091480924809348094480954809648097480984809948100481014810248103481044810548106481074810848109481104811148112481134811448115481164811748118481194812048121481224812348124481254812648127481284812948130481314813248133481344813548136481374813848139481404814148142481434814448145481464814748148481494815048151481524815348154481554815648157481584815948160481614816248163481644816548166481674816848169481704817148172481734817448175481764817748178481794818048181481824818348184481854818648187481884818948190481914819248193481944819548196481974819848199482004820148202482034820448205482064820748208482094821048211482124821348214482154821648217482184821948220482214822248223482244822548226482274822848229482304823148232482334823448235482364823748238482394824048241482424824348244482454824648247482484824948250482514825248253482544825548256482574825848259482604826148262482634826448265482664826748268482694827048271482724827348274482754827648277482784827948280482814828248283482844828548286482874828848289482904829148292482934829448295482964829748298482994830048301483024830348304483054830648307483084830948310483114831248313483144831548316483174831848319483204832148322483234832448325483264832748328483294833048331483324833348334483354833648337483384833948340483414834248343483444834548346483474834848349483504835148352483534835448355483564835748358483594836048361483624836348364483654836648367483684836948370483714837248373483744837548376483774837848379483804838148382483834838448385483864838748388483894839048391483924839348394483954839648397483984839948400484014840248403484044840548406484074840848409484104841148412484134841448415484164841748418484194842048421484224842348424484254842648427484284842948430484314843248433484344843548436484374843848439484404844148442484434844448445484464844748448484494845048451484524845348454484554845648457484584845948460484614846248463484644846548466484674846848469484704847148472484734847448475484764847748478484794848048481484824848348484484854848648487484884848948490484914849248493484944849548496484974849848499485004850148502485034850448505485064850748508485094851048511485124851348514485154851648517485184851948520485214852248523485244852548526485274852848529485304853148532485334853448535485364853748538485394854048541485424854348544485454854648547485484854948550485514855248553485544855548556485574855848559485604856148562485634856448565485664856748568485694857048571485724857348574485754857648577485784857948580485814858248583485844858548586485874858848589485904859148592485934859448595485964859748598485994860048601486024860348604486054860648607486084860948610486114861248613486144861548616486174861848619486204862148622486234862448625486264862748628486294863048631486324863348634486354863648637486384863948640486414864248643486444864548646486474864848649486504865148652486534865448655486564865748658486594866048661486624866348664486654866648667486684866948670486714867248673486744867548676486774867848679486804868148682486834868448685486864868748688486894869048691486924869348694486954869648697486984869948700487014870248703487044870548706487074870848709487104871148712487134871448715487164871748718487194872048721487224872348724487254872648727487284872948730487314873248733487344873548736487374873848739487404874148742487434874448745487464874748748487494875048751487524875348754487554875648757487584875948760487614876248763487644876548766487674876848769487704877148772487734877448775487764877748778487794878048781487824878348784487854878648787487884878948790487914879248793487944879548796487974879848799488004880148802488034880448805488064880748808488094881048811488124881348814488154881648817488184881948820488214882248823488244882548826488274882848829488304883148832488334883448835488364883748838488394884048841488424884348844488454884648847488484884948850488514885248853488544885548856488574885848859488604886148862488634886448865488664886748868488694887048871488724887348874488754887648877488784887948880488814888248883488844888548886488874888848889488904889148892488934889448895488964889748898488994890048901489024890348904489054890648907489084890948910489114891248913489144891548916489174891848919489204892148922489234892448925489264892748928489294893048931489324893348934489354893648937489384893948940489414894248943489444894548946489474894848949489504895148952489534895448955489564895748958489594896048961489624896348964489654896648967489684896948970489714897248973489744897548976489774897848979489804898148982489834898448985489864898748988489894899048991489924899348994489954899648997489984899949000490014900249003490044900549006490074900849009490104901149012490134901449015490164901749018490194902049021490224902349024490254902649027490284902949030490314903249033490344903549036490374903849039490404904149042490434904449045490464904749048490494905049051490524905349054490554905649057490584905949060490614906249063490644906549066490674906849069490704907149072490734907449075490764907749078490794908049081490824908349084490854908649087490884908949090490914909249093490944909549096490974909849099491004910149102491034910449105491064910749108491094911049111491124911349114491154911649117491184911949120491214912249123491244912549126491274912849129491304913149132491334913449135491364913749138491394914049141491424914349144491454914649147491484914949150491514915249153491544915549156491574915849159491604916149162491634916449165491664916749168491694917049171491724917349174491754917649177491784917949180491814918249183491844918549186491874918849189491904919149192491934919449195491964919749198491994920049201492024920349204492054920649207492084920949210492114921249213492144921549216492174921849219492204922149222492234922449225492264922749228492294923049231492324923349234492354923649237492384923949240492414924249243492444924549246492474924849249492504925149252492534925449255492564925749258492594926049261492624926349264492654926649267492684926949270492714927249273492744927549276492774927849279492804928149282492834928449285492864928749288492894929049291492924929349294492954929649297492984929949300493014930249303493044930549306493074930849309493104931149312493134931449315493164931749318493194932049321493224932349324493254932649327493284932949330493314933249333493344933549336493374933849339493404934149342493434934449345493464934749348493494935049351493524935349354493554935649357493584935949360493614936249363493644936549366493674936849369493704937149372493734937449375493764937749378493794938049381493824938349384493854938649387493884938949390493914939249393493944939549396493974939849399494004940149402494034940449405494064940749408494094941049411494124941349414494154941649417494184941949420494214942249423494244942549426494274942849429494304943149432494334943449435494364943749438494394944049441494424944349444494454944649447494484944949450494514945249453494544945549456494574945849459494604946149462494634946449465494664946749468494694947049471494724947349474494754947649477494784947949480494814948249483494844948549486494874948849489494904949149492494934949449495494964949749498494994950049501495024950349504495054950649507495084950949510495114951249513495144951549516495174951849519495204952149522495234952449525495264952749528495294953049531495324953349534495354953649537495384953949540495414954249543495444954549546495474954849549495504955149552495534955449555495564955749558495594956049561495624956349564495654956649567495684956949570495714957249573495744957549576495774957849579495804958149582495834958449585495864958749588495894959049591495924959349594495954959649597495984959949600496014960249603496044960549606496074960849609496104961149612496134961449615496164961749618496194962049621496224962349624496254962649627496284962949630496314963249633496344963549636496374963849639496404964149642496434964449645496464964749648496494965049651496524965349654496554965649657496584965949660496614966249663496644966549666496674966849669496704967149672496734967449675496764967749678496794968049681496824968349684496854968649687496884968949690496914969249693496944969549696496974969849699497004970149702497034970449705497064970749708497094971049711497124971349714497154971649717497184971949720497214972249723497244972549726497274972849729497304973149732497334973449735497364973749738497394974049741497424974349744497454974649747497484974949750497514975249753497544975549756497574975849759497604976149762497634976449765497664976749768497694977049771497724977349774497754977649777497784977949780497814978249783497844978549786497874978849789497904979149792497934979449795497964979749798497994980049801498024980349804498054980649807498084980949810498114981249813498144981549816498174981849819498204982149822498234982449825498264982749828498294983049831498324983349834498354983649837498384983949840498414984249843498444984549846498474984849849498504985149852498534985449855498564985749858498594986049861498624986349864498654986649867498684986949870498714987249873498744987549876498774987849879498804988149882498834988449885498864988749888498894989049891498924989349894498954989649897498984989949900499014990249903499044990549906499074990849909499104991149912499134991449915499164991749918499194992049921499224992349924499254992649927499284992949930499314993249933499344993549936499374993849939499404994149942499434994449945499464994749948499494995049951499524995349954499554995649957499584995949960499614996249963499644996549966499674996849969499704997149972499734997449975499764997749978499794998049981499824998349984499854998649987499884998949990499914999249993499944999549996499974999849999500005000150002500035000450005500065000750008500095001050011500125001350014500155001650017500185001950020500215002250023500245002550026500275002850029500305003150032500335003450035500365003750038500395004050041500425004350044500455004650047500485004950050500515005250053500545005550056500575005850059500605006150062500635006450065500665006750068500695007050071500725007350074500755007650077500785007950080500815008250083500845008550086500875008850089500905009150092500935009450095500965009750098500995010050101501025010350104501055010650107501085010950110501115011250113501145011550116501175011850119501205012150122501235012450125501265012750128501295013050131501325013350134501355013650137501385013950140501415014250143501445014550146501475014850149501505015150152501535015450155501565015750158501595016050161501625016350164501655016650167501685016950170501715017250173501745017550176501775017850179501805018150182501835018450185501865018750188501895019050191501925019350194501955019650197501985019950200502015020250203502045020550206502075020850209502105021150212502135021450215502165021750218502195022050221502225022350224502255022650227502285022950230502315023250233502345023550236502375023850239502405024150242502435024450245502465024750248502495025050251502525025350254502555025650257502585025950260502615026250263502645026550266502675026850269502705027150272502735027450275502765027750278502795028050281502825028350284502855028650287502885028950290502915029250293502945029550296502975029850299503005030150302503035030450305503065030750308503095031050311503125031350314503155031650317503185031950320503215032250323503245032550326503275032850329503305033150332503335033450335503365033750338503395034050341503425034350344503455034650347503485034950350503515035250353503545035550356503575035850359503605036150362503635036450365503665036750368503695037050371503725037350374503755037650377503785037950380503815038250383503845038550386503875038850389503905039150392503935039450395503965039750398503995040050401504025040350404504055040650407504085040950410504115041250413504145041550416504175041850419504205042150422504235042450425504265042750428504295043050431504325043350434504355043650437504385043950440504415044250443504445044550446504475044850449504505045150452504535045450455504565045750458504595046050461504625046350464504655046650467504685046950470504715047250473504745047550476504775047850479504805048150482504835048450485504865048750488504895049050491504925049350494504955049650497504985049950500505015050250503505045050550506505075050850509505105051150512505135051450515505165051750518505195052050521505225052350524505255052650527505285052950530505315053250533505345053550536505375053850539505405054150542505435054450545505465054750548505495055050551505525055350554505555055650557505585055950560505615056250563505645056550566505675056850569505705057150572505735057450575505765057750578505795058050581505825058350584505855058650587505885058950590505915059250593505945059550596505975059850599506005060150602506035060450605506065060750608506095061050611506125061350614506155061650617506185061950620506215062250623506245062550626506275062850629506305063150632506335063450635506365063750638506395064050641506425064350644506455064650647506485064950650506515065250653506545065550656506575065850659506605066150662506635066450665506665066750668506695067050671506725067350674506755067650677506785067950680506815068250683506845068550686506875068850689506905069150692506935069450695506965069750698506995070050701507025070350704507055070650707507085070950710507115071250713507145071550716507175071850719507205072150722507235072450725507265072750728507295073050731507325073350734507355073650737507385073950740507415074250743507445074550746507475074850749507505075150752507535075450755507565075750758507595076050761507625076350764507655076650767507685076950770507715077250773507745077550776507775077850779507805078150782507835078450785507865078750788507895079050791507925079350794507955079650797507985079950800508015080250803508045080550806508075080850809508105081150812508135081450815508165081750818508195082050821508225082350824508255082650827508285082950830508315083250833508345083550836508375083850839508405084150842508435084450845508465084750848508495085050851508525085350854508555085650857508585085950860508615086250863508645086550866508675086850869508705087150872508735087450875508765087750878508795088050881508825088350884508855088650887508885088950890508915089250893508945089550896508975089850899509005090150902509035090450905509065090750908509095091050911509125091350914509155091650917509185091950920509215092250923509245092550926509275092850929509305093150932509335093450935509365093750938509395094050941509425094350944509455094650947509485094950950509515095250953509545095550956509575095850959509605096150962509635096450965509665096750968509695097050971509725097350974509755097650977509785097950980509815098250983509845098550986509875098850989509905099150992509935099450995509965099750998509995100051001510025100351004510055100651007510085100951010510115101251013510145101551016510175101851019510205102151022510235102451025510265102751028510295103051031510325103351034510355103651037510385103951040510415104251043510445104551046510475104851049510505105151052510535105451055510565105751058510595106051061510625106351064510655106651067510685106951070510715107251073510745107551076510775107851079510805108151082510835108451085510865108751088510895109051091510925109351094510955109651097510985109951100511015110251103511045110551106511075110851109511105111151112511135111451115511165111751118511195112051121511225112351124511255112651127511285112951130511315113251133511345113551136511375113851139511405114151142511435114451145511465114751148511495115051151511525115351154511555115651157511585115951160511615116251163511645116551166511675116851169511705117151172511735117451175511765117751178511795118051181511825118351184511855118651187511885118951190511915119251193511945119551196511975119851199512005120151202512035120451205512065120751208512095121051211512125121351214512155121651217512185121951220512215122251223512245122551226512275122851229512305123151232512335123451235512365123751238512395124051241512425124351244512455124651247512485124951250512515125251253512545125551256512575125851259512605126151262512635126451265512665126751268512695127051271512725127351274512755127651277512785127951280512815128251283512845128551286512875128851289512905129151292512935129451295512965129751298512995130051301513025130351304513055130651307513085130951310513115131251313513145131551316513175131851319513205132151322513235132451325513265132751328513295133051331513325133351334513355133651337513385133951340513415134251343513445134551346513475134851349513505135151352513535135451355513565135751358513595136051361513625136351364513655136651367513685136951370513715137251373513745137551376513775137851379513805138151382513835138451385513865138751388513895139051391513925139351394513955139651397513985139951400514015140251403514045140551406514075140851409514105141151412514135141451415514165141751418514195142051421514225142351424514255142651427514285142951430514315143251433514345143551436514375143851439514405144151442514435144451445514465144751448514495145051451514525145351454514555145651457514585145951460514615146251463514645146551466514675146851469514705147151472514735147451475514765147751478514795148051481514825148351484514855148651487514885148951490514915149251493514945149551496514975149851499515005150151502515035150451505515065150751508515095151051511515125151351514515155151651517515185151951520515215152251523515245152551526515275152851529515305153151532515335153451535515365153751538515395154051541515425154351544515455154651547515485154951550515515155251553515545155551556515575155851559515605156151562515635156451565515665156751568515695157051571515725157351574515755157651577515785157951580515815158251583515845158551586515875158851589515905159151592515935159451595515965159751598515995160051601516025160351604516055160651607516085160951610516115161251613516145161551616516175161851619516205162151622516235162451625516265162751628516295163051631516325163351634516355163651637516385163951640516415164251643516445164551646516475164851649516505165151652516535165451655516565165751658516595166051661516625166351664516655166651667516685166951670516715167251673516745167551676516775167851679516805168151682516835168451685516865168751688516895169051691516925169351694516955169651697516985169951700517015170251703517045170551706517075170851709517105171151712517135171451715517165171751718517195172051721517225172351724517255172651727517285172951730517315173251733517345173551736517375173851739517405174151742517435174451745517465174751748517495175051751517525175351754517555175651757517585175951760517615176251763517645176551766517675176851769517705177151772517735177451775517765177751778517795178051781517825178351784517855178651787517885178951790517915179251793517945179551796517975179851799518005180151802518035180451805518065180751808518095181051811518125181351814518155181651817518185181951820518215182251823518245182551826518275182851829518305183151832518335183451835518365183751838518395184051841518425184351844518455184651847518485184951850518515185251853518545185551856518575185851859518605186151862518635186451865518665186751868518695187051871518725187351874518755187651877518785187951880518815188251883518845188551886518875188851889518905189151892518935189451895518965189751898518995190051901519025190351904519055190651907519085190951910519115191251913519145191551916519175191851919519205192151922519235192451925519265192751928519295193051931519325193351934519355193651937519385193951940519415194251943519445194551946519475194851949519505195151952519535195451955519565195751958519595196051961519625196351964519655196651967519685196951970519715197251973519745197551976519775197851979519805198151982519835198451985519865198751988519895199051991519925199351994519955199651997519985199952000520015200252003520045200552006520075200852009520105201152012520135201452015520165201752018520195202052021520225202352024520255202652027520285202952030520315203252033520345203552036520375203852039520405204152042520435204452045520465204752048520495205052051520525205352054520555205652057520585205952060520615206252063520645206552066520675206852069520705207152072520735207452075520765207752078520795208052081520825208352084520855208652087520885208952090520915209252093520945209552096520975209852099521005210152102521035210452105521065210752108521095211052111521125211352114521155211652117521185211952120521215212252123521245212552126521275212852129521305213152132521335213452135521365213752138521395214052141521425214352144521455214652147521485214952150521515215252153521545215552156521575215852159521605216152162521635216452165521665216752168521695217052171521725217352174521755217652177521785217952180521815218252183521845218552186521875218852189521905219152192521935219452195521965219752198521995220052201522025220352204522055220652207522085220952210522115221252213522145221552216522175221852219522205222152222522235222452225522265222752228522295223052231522325223352234522355223652237522385223952240522415224252243522445224552246522475224852249522505225152252522535225452255522565225752258522595226052261522625226352264522655226652267522685226952270522715227252273522745227552276522775227852279522805228152282522835228452285522865228752288522895229052291522925229352294522955229652297522985229952300523015230252303523045230552306523075230852309523105231152312523135231452315523165231752318523195232052321523225232352324523255232652327523285232952330523315233252333523345233552336523375233852339523405234152342523435234452345523465234752348523495235052351523525235352354523555235652357523585235952360523615236252363523645236552366523675236852369523705237152372523735237452375523765237752378523795238052381523825238352384523855238652387523885238952390523915239252393523945239552396523975239852399524005240152402524035240452405524065240752408524095241052411524125241352414524155241652417524185241952420524215242252423524245242552426524275242852429524305243152432524335243452435524365243752438524395244052441524425244352444524455244652447524485244952450524515245252453524545245552456524575245852459524605246152462524635246452465524665246752468524695247052471524725247352474524755247652477524785247952480524815248252483524845248552486524875248852489524905249152492524935249452495524965249752498524995250052501525025250352504525055250652507525085250952510525115251252513525145251552516525175251852519525205252152522525235252452525525265252752528525295253052531525325253352534525355253652537525385253952540525415254252543525445254552546525475254852549525505255152552525535255452555525565255752558525595256052561525625256352564525655256652567525685256952570525715257252573525745257552576525775257852579525805258152582525835258452585525865258752588525895259052591525925259352594525955259652597525985259952600526015260252603526045260552606526075260852609526105261152612526135261452615526165261752618526195262052621526225262352624526255262652627526285262952630526315263252633526345263552636526375263852639526405264152642526435264452645526465264752648526495265052651526525265352654526555265652657526585265952660526615266252663526645266552666526675266852669526705267152672526735267452675526765267752678526795268052681526825268352684526855268652687526885268952690526915269252693526945269552696526975269852699527005270152702527035270452705527065270752708527095271052711527125271352714527155271652717527185271952720527215272252723527245272552726527275272852729527305273152732527335273452735527365273752738527395274052741527425274352744527455274652747527485274952750527515275252753527545275552756527575275852759527605276152762527635276452765527665276752768527695277052771527725277352774527755277652777527785277952780527815278252783527845278552786527875278852789527905279152792527935279452795527965279752798527995280052801528025280352804528055280652807528085280952810528115281252813528145281552816528175281852819528205282152822528235282452825528265282752828528295283052831528325283352834528355283652837528385283952840528415284252843528445284552846528475284852849528505285152852528535285452855528565285752858528595286052861528625286352864528655286652867528685286952870528715287252873528745287552876528775287852879528805288152882528835288452885528865288752888528895289052891528925289352894528955289652897528985289952900529015290252903529045290552906529075290852909529105291152912529135291452915529165291752918529195292052921529225292352924529255292652927529285292952930529315293252933529345293552936529375293852939529405294152942529435294452945529465294752948529495295052951529525295352954529555295652957529585295952960529615296252963529645296552966529675296852969529705297152972529735297452975529765297752978529795298052981529825298352984529855298652987529885298952990529915299252993529945299552996529975299852999530005300153002530035300453005530065300753008530095301053011530125301353014530155301653017530185301953020530215302253023530245302553026530275302853029530305303153032530335303453035530365303753038530395304053041530425304353044530455304653047530485304953050530515305253053530545305553056530575305853059530605306153062530635306453065530665306753068530695307053071530725307353074530755307653077530785307953080530815308253083530845308553086530875308853089530905309153092530935309453095530965309753098530995310053101531025310353104531055310653107531085310953110531115311253113531145311553116531175311853119531205312153122531235312453125531265312753128531295313053131531325313353134531355313653137531385313953140531415314253143531445314553146531475314853149531505315153152531535315453155531565315753158531595316053161531625316353164531655316653167531685316953170531715317253173531745317553176531775317853179531805318153182531835318453185531865318753188531895319053191531925319353194531955319653197531985319953200532015320253203532045320553206532075320853209532105321153212532135321453215532165321753218532195322053221532225322353224532255322653227532285322953230532315323253233532345323553236532375323853239532405324153242532435324453245532465324753248532495325053251532525325353254532555325653257532585325953260532615326253263532645326553266532675326853269532705327153272532735327453275532765327753278532795328053281532825328353284532855328653287532885328953290532915329253293532945329553296532975329853299533005330153302533035330453305533065330753308533095331053311533125331353314533155331653317533185331953320533215332253323533245332553326533275332853329533305333153332533335333453335533365333753338533395334053341533425334353344533455334653347533485334953350533515335253353533545335553356533575335853359533605336153362533635336453365533665336753368533695337053371533725337353374533755337653377533785337953380533815338253383533845338553386533875338853389533905339153392533935339453395533965339753398533995340053401534025340353404534055340653407534085340953410534115341253413534145341553416534175341853419534205342153422534235342453425534265342753428534295343053431534325343353434534355343653437534385343953440534415344253443534445344553446534475344853449534505345153452534535345453455534565345753458534595346053461534625346353464534655346653467534685346953470534715347253473534745347553476534775347853479534805348153482534835348453485534865348753488534895349053491534925349353494534955349653497534985349953500535015350253503535045350553506535075350853509535105351153512535135351453515535165351753518535195352053521535225352353524535255352653527535285352953530535315353253533535345353553536535375353853539535405354153542535435354453545535465354753548535495355053551535525355353554535555355653557535585355953560535615356253563535645356553566535675356853569535705357153572535735357453575535765357753578535795358053581535825358353584535855358653587535885358953590535915359253593535945359553596535975359853599536005360153602536035360453605536065360753608536095361053611536125361353614536155361653617536185361953620536215362253623536245362553626536275362853629536305363153632536335363453635536365363753638536395364053641536425364353644536455364653647536485364953650536515365253653536545365553656536575365853659536605366153662536635366453665536665366753668536695367053671536725367353674536755367653677536785367953680536815368253683536845368553686536875368853689536905369153692536935369453695536965369753698536995370053701537025370353704537055370653707537085370953710537115371253713537145371553716537175371853719537205372153722537235372453725537265372753728537295373053731537325373353734537355373653737537385373953740537415374253743537445374553746537475374853749537505375153752537535375453755537565375753758537595376053761537625376353764537655376653767537685376953770537715377253773537745377553776537775377853779537805378153782537835378453785537865378753788537895379053791537925379353794537955379653797537985379953800538015380253803538045380553806538075380853809538105381153812538135381453815538165381753818538195382053821538225382353824538255382653827538285382953830538315383253833538345383553836538375383853839538405384153842538435384453845538465384753848538495385053851538525385353854538555385653857538585385953860538615386253863538645386553866538675386853869538705387153872538735387453875538765387753878538795388053881538825388353884538855388653887538885388953890538915389253893538945389553896538975389853899539005390153902539035390453905539065390753908539095391053911539125391353914539155391653917539185391953920539215392253923539245392553926539275392853929539305393153932539335393453935539365393753938539395394053941539425394353944539455394653947539485394953950539515395253953539545395553956539575395853959539605396153962539635396453965539665396753968539695397053971539725397353974539755397653977539785397953980539815398253983539845398553986539875398853989539905399153992539935399453995539965399753998539995400054001540025400354004540055400654007540085400954010540115401254013540145401554016540175401854019540205402154022540235402454025540265402754028540295403054031540325403354034540355403654037540385403954040540415404254043540445404554046540475404854049540505405154052540535405454055540565405754058540595406054061540625406354064540655406654067540685406954070540715407254073540745407554076540775407854079540805408154082540835408454085540865408754088540895409054091540925409354094540955409654097540985409954100541015410254103541045410554106541075410854109541105411154112541135411454115541165411754118541195412054121541225412354124541255412654127541285412954130541315413254133541345413554136541375413854139541405414154142541435414454145541465414754148541495415054151541525415354154541555415654157541585415954160541615416254163541645416554166541675416854169541705417154172541735417454175541765417754178541795418054181541825418354184541855418654187541885418954190541915419254193541945419554196541975419854199542005420154202542035420454205542065420754208542095421054211542125421354214542155421654217542185421954220542215422254223542245422554226542275422854229542305423154232542335423454235542365423754238542395424054241542425424354244542455424654247542485424954250542515425254253542545425554256542575425854259542605426154262542635426454265542665426754268542695427054271542725427354274542755427654277542785427954280542815428254283542845428554286542875428854289542905429154292542935429454295542965429754298542995430054301543025430354304543055430654307543085430954310543115431254313543145431554316543175431854319543205432154322543235432454325543265432754328543295433054331543325433354334543355433654337543385433954340543415434254343543445434554346543475434854349543505435154352543535435454355543565435754358543595436054361543625436354364543655436654367543685436954370543715437254373543745437554376543775437854379543805438154382543835438454385543865438754388543895439054391543925439354394543955439654397543985439954400544015440254403544045440554406544075440854409544105441154412544135441454415544165441754418544195442054421544225442354424544255442654427544285442954430544315443254433544345443554436544375443854439544405444154442544435444454445544465444754448544495445054451544525445354454544555445654457544585445954460544615446254463544645446554466544675446854469544705447154472544735447454475544765447754478544795448054481544825448354484544855448654487544885448954490544915449254493544945449554496544975449854499545005450154502545035450454505545065450754508545095451054511545125451354514545155451654517545185451954520545215452254523545245452554526545275452854529545305453154532545335453454535545365453754538545395454054541545425454354544545455454654547545485454954550545515455254553545545455554556545575455854559545605456154562545635456454565545665456754568545695457054571545725457354574545755457654577545785457954580545815458254583545845458554586545875458854589545905459154592545935459454595545965459754598545995460054601546025460354604546055460654607546085460954610546115461254613546145461554616546175461854619546205462154622546235462454625546265462754628546295463054631546325463354634546355463654637546385463954640546415464254643546445464554646546475464854649546505465154652546535465454655546565465754658546595466054661546625466354664546655466654667546685466954670546715467254673546745467554676546775467854679546805468154682546835468454685546865468754688546895469054691546925469354694546955469654697546985469954700547015470254703547045470554706547075470854709547105471154712547135471454715547165471754718547195472054721547225472354724547255472654727547285472954730547315473254733547345473554736547375473854739547405474154742547435474454745547465474754748547495475054751547525475354754547555475654757547585475954760547615476254763547645476554766547675476854769547705477154772547735477454775547765477754778547795478054781547825478354784547855478654787547885478954790547915479254793547945479554796547975479854799548005480154802548035480454805548065480754808548095481054811548125481354814548155481654817548185481954820548215482254823548245482554826548275482854829548305483154832548335483454835548365483754838548395484054841548425484354844548455484654847548485484954850548515485254853548545485554856548575485854859548605486154862548635486454865548665486754868548695487054871548725487354874548755487654877548785487954880548815488254883548845488554886548875488854889548905489154892548935489454895548965489754898548995490054901549025490354904549055490654907549085490954910549115491254913549145491554916549175491854919549205492154922549235492454925549265492754928549295493054931549325493354934549355493654937549385493954940549415494254943549445494554946549475494854949549505495154952549535495454955549565495754958549595496054961549625496354964549655496654967549685496954970549715497254973549745497554976549775497854979549805498154982549835498454985549865498754988549895499054991549925499354994549955499654997549985499955000550015500255003550045500555006550075500855009550105501155012550135501455015550165501755018550195502055021550225502355024550255502655027550285502955030550315503255033550345503555036550375503855039550405504155042550435504455045550465504755048550495505055051550525505355054550555505655057550585505955060550615506255063550645506555066550675506855069550705507155072550735507455075550765507755078550795508055081550825508355084550855508655087550885508955090550915509255093550945509555096550975509855099551005510155102551035510455105551065510755108551095511055111551125511355114551155511655117551185511955120551215512255123551245512555126551275512855129551305513155132551335513455135551365513755138551395514055141551425514355144551455514655147551485514955150551515515255153551545515555156551575515855159551605516155162551635516455165551665516755168551695517055171551725517355174551755517655177551785517955180551815518255183551845518555186551875518855189551905519155192551935519455195551965519755198551995520055201552025520355204552055520655207552085520955210552115521255213552145521555216552175521855219552205522155222552235522455225552265522755228552295523055231552325523355234552355523655237552385523955240552415524255243552445524555246552475524855249552505525155252552535525455255552565525755258552595526055261552625526355264552655526655267552685526955270552715527255273552745527555276552775527855279552805528155282552835528455285552865528755288552895529055291552925529355294552955529655297552985529955300553015530255303553045530555306553075530855309553105531155312553135531455315553165531755318553195532055321553225532355324553255532655327553285532955330553315533255333553345533555336553375533855339553405534155342553435534455345553465534755348553495535055351553525535355354553555535655357553585535955360553615536255363553645536555366553675536855369553705537155372553735537455375553765537755378553795538055381553825538355384553855538655387553885538955390553915539255393553945539555396553975539855399554005540155402554035540455405554065540755408554095541055411554125541355414554155541655417554185541955420554215542255423554245542555426554275542855429554305543155432554335543455435554365543755438554395544055441554425544355444554455544655447554485544955450554515545255453554545545555456554575545855459554605546155462554635546455465554665546755468554695547055471554725547355474554755547655477554785547955480554815548255483554845548555486554875548855489554905549155492554935549455495554965549755498554995550055501555025550355504555055550655507555085550955510555115551255513555145551555516555175551855519555205552155522555235552455525555265552755528555295553055531555325553355534555355553655537555385553955540555415554255543555445554555546555475554855549555505555155552555535555455555555565555755558555595556055561555625556355564555655556655567555685556955570555715557255573555745557555576555775557855579555805558155582555835558455585555865558755588555895559055591555925559355594555955559655597555985559955600556015560255603556045560555606556075560855609556105561155612556135561455615556165561755618556195562055621556225562355624556255562655627556285562955630556315563255633556345563555636556375563855639556405564155642556435564455645556465564755648556495565055651556525565355654556555565655657556585565955660556615566255663556645566555666556675566855669556705567155672556735567455675556765567755678556795568055681556825568355684556855568655687556885568955690556915569255693556945569555696556975569855699557005570155702557035570455705557065570755708557095571055711557125571355714557155571655717557185571955720557215572255723557245572555726557275572855729557305573155732557335573455735557365573755738557395574055741557425574355744557455574655747557485574955750557515575255753557545575555756557575575855759557605576155762557635576455765557665576755768557695577055771557725577355774557755577655777557785577955780557815578255783557845578555786557875578855789557905579155792557935579455795557965579755798557995580055801558025580355804558055580655807558085580955810558115581255813558145581555816558175581855819558205582155822558235582455825558265582755828558295583055831558325583355834558355583655837558385583955840558415584255843558445584555846558475584855849558505585155852558535585455855558565585755858558595586055861558625586355864558655586655867558685586955870558715587255873558745587555876558775587855879558805588155882558835588455885558865588755888558895589055891558925589355894558955589655897558985589955900559015590255903559045590555906559075590855909559105591155912559135591455915559165591755918559195592055921559225592355924559255592655927559285592955930559315593255933559345593555936559375593855939559405594155942559435594455945559465594755948559495595055951559525595355954559555595655957559585595955960559615596255963559645596555966559675596855969559705597155972559735597455975559765597755978559795598055981559825598355984559855598655987559885598955990559915599255993559945599555996559975599855999560005600156002560035600456005560065600756008560095601056011560125601356014560155601656017560185601956020560215602256023560245602556026560275602856029560305603156032560335603456035560365603756038560395604056041560425604356044560455604656047560485604956050560515605256053560545605556056560575605856059560605606156062560635606456065560665606756068560695607056071560725607356074560755607656077560785607956080560815608256083560845608556086560875608856089560905609156092560935609456095560965609756098560995610056101561025610356104561055610656107561085610956110561115611256113561145611556116561175611856119561205612156122561235612456125561265612756128561295613056131561325613356134561355613656137561385613956140561415614256143561445614556146561475614856149561505615156152561535615456155561565615756158561595616056161561625616356164561655616656167561685616956170561715617256173561745617556176561775617856179561805618156182561835618456185561865618756188561895619056191561925619356194561955619656197561985619956200562015620256203562045620556206562075620856209562105621156212562135621456215562165621756218562195622056221562225622356224562255622656227562285622956230562315623256233562345623556236562375623856239562405624156242562435624456245562465624756248562495625056251562525625356254562555625656257562585625956260562615626256263562645626556266562675626856269562705627156272562735627456275562765627756278562795628056281562825628356284562855628656287562885628956290562915629256293562945629556296562975629856299563005630156302563035630456305563065630756308563095631056311563125631356314563155631656317563185631956320563215632256323563245632556326563275632856329563305633156332563335633456335563365633756338563395634056341563425634356344563455634656347563485634956350563515635256353563545635556356563575635856359563605636156362563635636456365563665636756368563695637056371563725637356374563755637656377563785637956380563815638256383563845638556386563875638856389563905639156392563935639456395563965639756398563995640056401564025640356404564055640656407564085640956410564115641256413564145641556416564175641856419564205642156422564235642456425564265642756428564295643056431564325643356434564355643656437564385643956440564415644256443564445644556446564475644856449564505645156452564535645456455564565645756458564595646056461564625646356464564655646656467564685646956470564715647256473564745647556476564775647856479564805648156482564835648456485564865648756488564895649056491564925649356494564955649656497564985649956500565015650256503565045650556506565075650856509565105651156512565135651456515565165651756518565195652056521565225652356524565255652656527565285652956530565315653256533565345653556536565375653856539565405654156542565435654456545565465654756548565495655056551565525655356554565555655656557565585655956560565615656256563565645656556566565675656856569565705657156572565735657456575565765657756578565795658056581565825658356584565855658656587565885658956590565915659256593565945659556596565975659856599566005660156602566035660456605566065660756608566095661056611566125661356614566155661656617566185661956620566215662256623566245662556626566275662856629566305663156632566335663456635566365663756638566395664056641566425664356644566455664656647566485664956650566515665256653566545665556656566575665856659566605666156662566635666456665566665666756668566695667056671566725667356674566755667656677566785667956680566815668256683566845668556686566875668856689566905669156692566935669456695566965669756698566995670056701567025670356704567055670656707567085670956710567115671256713567145671556716567175671856719567205672156722567235672456725567265672756728567295673056731567325673356734567355673656737567385673956740567415674256743567445674556746567475674856749567505675156752567535675456755567565675756758567595676056761567625676356764567655676656767567685676956770567715677256773567745677556776567775677856779567805678156782567835678456785567865678756788567895679056791567925679356794567955679656797567985679956800568015680256803568045680556806568075680856809568105681156812568135681456815568165681756818568195682056821568225682356824568255682656827568285682956830568315683256833568345683556836568375683856839568405684156842568435684456845568465684756848568495685056851568525685356854568555685656857568585685956860568615686256863568645686556866568675686856869568705687156872568735687456875568765687756878568795688056881568825688356884568855688656887568885688956890568915689256893568945689556896568975689856899569005690156902569035690456905569065690756908569095691056911569125691356914569155691656917569185691956920569215692256923569245692556926569275692856929569305693156932569335693456935569365693756938569395694056941569425694356944569455694656947569485694956950569515695256953569545695556956569575695856959569605696156962569635696456965569665696756968569695697056971569725697356974569755697656977569785697956980569815698256983569845698556986569875698856989569905699156992569935699456995569965699756998569995700057001570025700357004570055700657007570085700957010570115701257013570145701557016570175701857019570205702157022570235702457025570265702757028570295703057031570325703357034570355703657037570385703957040570415704257043570445704557046570475704857049570505705157052570535705457055570565705757058570595706057061570625706357064570655706657067570685706957070570715707257073570745707557076570775707857079570805708157082570835708457085570865708757088570895709057091570925709357094570955709657097570985709957100571015710257103571045710557106571075710857109571105711157112571135711457115571165711757118571195712057121571225712357124571255712657127571285712957130571315713257133571345713557136571375713857139571405714157142571435714457145571465714757148571495715057151571525715357154571555715657157571585715957160571615716257163571645716557166571675716857169571705717157172571735717457175571765717757178571795718057181571825718357184571855718657187571885718957190571915719257193571945719557196571975719857199572005720157202572035720457205572065720757208572095721057211572125721357214572155721657217572185721957220572215722257223572245722557226572275722857229572305723157232572335723457235572365723757238572395724057241572425724357244572455724657247572485724957250572515725257253572545725557256572575725857259572605726157262572635726457265572665726757268572695727057271572725727357274572755727657277572785727957280572815728257283572845728557286572875728857289572905729157292572935729457295572965729757298572995730057301573025730357304573055730657307573085730957310573115731257313573145731557316573175731857319573205732157322573235732457325573265732757328573295733057331573325733357334573355733657337573385733957340573415734257343573445734557346573475734857349573505735157352573535735457355573565735757358573595736057361573625736357364573655736657367573685736957370573715737257373573745737557376573775737857379573805738157382573835738457385573865738757388573895739057391573925739357394573955739657397573985739957400574015740257403574045740557406574075740857409574105741157412574135741457415574165741757418574195742057421574225742357424574255742657427574285742957430574315743257433574345743557436574375743857439574405744157442574435744457445574465744757448574495745057451574525745357454574555745657457574585745957460574615746257463574645746557466574675746857469574705747157472574735747457475574765747757478574795748057481574825748357484574855748657487574885748957490574915749257493574945749557496574975749857499575005750157502575035750457505575065750757508575095751057511575125751357514575155751657517575185751957520575215752257523575245752557526575275752857529575305753157532575335753457535575365753757538575395754057541575425754357544575455754657547575485754957550575515755257553575545755557556575575755857559575605756157562575635756457565575665756757568575695757057571575725757357574575755757657577575785757957580575815758257583575845758557586575875758857589575905759157592575935759457595575965759757598575995760057601576025760357604576055760657607576085760957610576115761257613576145761557616576175761857619576205762157622576235762457625576265762757628576295763057631576325763357634576355763657637576385763957640576415764257643576445764557646576475764857649576505765157652576535765457655576565765757658576595766057661576625766357664576655766657667576685766957670576715767257673576745767557676576775767857679576805768157682576835768457685576865768757688576895769057691576925769357694576955769657697576985769957700577015770257703577045770557706577075770857709577105771157712577135771457715577165771757718577195772057721577225772357724577255772657727577285772957730577315773257733577345773557736577375773857739577405774157742577435774457745577465774757748577495775057751577525775357754577555775657757577585775957760577615776257763577645776557766577675776857769577705777157772577735777457775577765777757778577795778057781577825778357784577855778657787577885778957790577915779257793577945779557796577975779857799578005780157802578035780457805578065780757808578095781057811578125781357814578155781657817578185781957820578215782257823578245782557826578275782857829578305783157832578335783457835578365783757838578395784057841578425784357844578455784657847578485784957850578515785257853578545785557856578575785857859578605786157862578635786457865578665786757868578695787057871578725787357874578755787657877578785787957880578815788257883578845788557886578875788857889578905789157892578935789457895578965789757898578995790057901579025790357904579055790657907579085790957910579115791257913579145791557916579175791857919579205792157922579235792457925579265792757928579295793057931579325793357934579355793657937579385793957940579415794257943579445794557946579475794857949579505795157952579535795457955579565795757958579595796057961579625796357964579655796657967579685796957970579715797257973579745797557976579775797857979579805798157982579835798457985579865798757988579895799057991579925799357994579955799657997579985799958000580015800258003580045800558006580075800858009580105801158012580135801458015580165801758018580195802058021580225802358024580255802658027580285802958030580315803258033580345803558036580375803858039580405804158042580435804458045580465804758048580495805058051580525805358054580555805658057580585805958060580615806258063580645806558066580675806858069580705807158072580735807458075580765807758078580795808058081580825808358084580855808658087580885808958090580915809258093580945809558096580975809858099581005810158102581035810458105581065810758108581095811058111581125811358114581155811658117581185811958120581215812258123581245812558126581275812858129581305813158132581335813458135581365813758138581395814058141581425814358144581455814658147581485814958150581515815258153581545815558156581575815858159581605816158162581635816458165581665816758168581695817058171581725817358174581755817658177581785817958180581815818258183581845818558186581875818858189581905819158192581935819458195581965819758198581995820058201582025820358204582055820658207582085820958210582115821258213582145821558216582175821858219582205822158222582235822458225582265822758228582295823058231582325823358234582355823658237582385823958240582415824258243582445824558246582475824858249582505825158252582535825458255582565825758258582595826058261582625826358264582655826658267582685826958270582715827258273582745827558276582775827858279582805828158282582835828458285582865828758288582895829058291582925829358294582955829658297582985829958300583015830258303583045830558306583075830858309583105831158312583135831458315583165831758318583195832058321583225832358324583255832658327583285832958330583315833258333583345833558336583375833858339583405834158342583435834458345583465834758348583495835058351583525835358354583555835658357583585835958360583615836258363583645836558366583675836858369583705837158372583735837458375583765837758378583795838058381583825838358384583855838658387583885838958390583915839258393583945839558396583975839858399584005840158402584035840458405584065840758408584095841058411584125841358414584155841658417584185841958420584215842258423584245842558426584275842858429584305843158432584335843458435584365843758438584395844058441584425844358444584455844658447584485844958450584515845258453584545845558456584575845858459584605846158462584635846458465584665846758468584695847058471584725847358474584755847658477584785847958480584815848258483584845848558486584875848858489584905849158492584935849458495584965849758498584995850058501585025850358504585055850658507585085850958510585115851258513585145851558516585175851858519585205852158522585235852458525585265852758528585295853058531585325853358534585355853658537585385853958540585415854258543585445854558546585475854858549585505855158552585535855458555585565855758558585595856058561585625856358564585655856658567585685856958570585715857258573585745857558576585775857858579585805858158582585835858458585585865858758588585895859058591585925859358594585955859658597585985859958600586015860258603586045860558606586075860858609586105861158612586135861458615586165861758618586195862058621586225862358624586255862658627586285862958630586315863258633586345863558636586375863858639586405864158642586435864458645586465864758648586495865058651586525865358654586555865658657586585865958660586615866258663586645866558666586675866858669586705867158672586735867458675586765867758678586795868058681586825868358684586855868658687586885868958690586915869258693586945869558696586975869858699587005870158702587035870458705587065870758708587095871058711587125871358714587155871658717587185871958720587215872258723587245872558726587275872858729587305873158732587335873458735587365873758738587395874058741587425874358744587455874658747587485874958750587515875258753587545875558756587575875858759587605876158762587635876458765587665876758768587695877058771587725877358774587755877658777587785877958780587815878258783587845878558786587875878858789587905879158792587935879458795587965879758798587995880058801588025880358804588055880658807588085880958810588115881258813588145881558816588175881858819588205882158822588235882458825588265882758828588295883058831588325883358834588355883658837588385883958840588415884258843588445884558846588475884858849588505885158852588535885458855588565885758858588595886058861588625886358864588655886658867588685886958870588715887258873588745887558876588775887858879588805888158882588835888458885588865888758888588895889058891588925889358894588955889658897588985889958900589015890258903589045890558906589075890858909589105891158912589135891458915589165891758918589195892058921589225892358924589255892658927589285892958930589315893258933589345893558936589375893858939589405894158942589435894458945589465894758948589495895058951589525895358954589555895658957589585895958960589615896258963589645896558966589675896858969589705897158972589735897458975589765897758978589795898058981589825898358984589855898658987589885898958990589915899258993589945899558996589975899858999590005900159002590035900459005590065900759008590095901059011590125901359014590155901659017590185901959020590215902259023590245902559026590275902859029590305903159032590335903459035590365903759038590395904059041590425904359044590455904659047590485904959050590515905259053590545905559056590575905859059590605906159062590635906459065590665906759068590695907059071590725907359074590755907659077590785907959080590815908259083590845908559086590875908859089590905909159092590935909459095590965909759098590995910059101591025910359104591055910659107591085910959110591115911259113591145911559116591175911859119591205912159122591235912459125591265912759128591295913059131591325913359134591355913659137591385913959140591415914259143591445914559146591475914859149591505915159152591535915459155591565915759158591595916059161591625916359164591655916659167591685916959170591715917259173591745917559176591775917859179591805918159182591835918459185591865918759188591895919059191591925919359194591955919659197591985919959200592015920259203592045920559206592075920859209592105921159212592135921459215592165921759218592195922059221592225922359224592255922659227592285922959230592315923259233592345923559236592375923859239592405924159242592435924459245592465924759248592495925059251592525925359254592555925659257592585925959260592615926259263592645926559266592675926859269592705927159272592735927459275592765927759278592795928059281592825928359284592855928659287592885928959290592915929259293592945929559296592975929859299593005930159302593035930459305593065930759308593095931059311593125931359314593155931659317593185931959320593215932259323593245932559326593275932859329593305933159332593335933459335593365933759338593395934059341593425934359344593455934659347593485934959350593515935259353593545935559356593575935859359593605936159362593635936459365593665936759368593695937059371593725937359374593755937659377593785937959380593815938259383593845938559386593875938859389593905939159392593935939459395593965939759398593995940059401594025940359404594055940659407594085940959410594115941259413594145941559416594175941859419594205942159422594235942459425594265942759428594295943059431594325943359434594355943659437594385943959440594415944259443594445944559446594475944859449594505945159452594535945459455594565945759458594595946059461594625946359464594655946659467594685946959470594715947259473594745947559476594775947859479594805948159482594835948459485594865948759488594895949059491594925949359494594955949659497594985949959500595015950259503595045950559506595075950859509595105951159512595135951459515595165951759518595195952059521595225952359524595255952659527595285952959530595315953259533595345953559536595375953859539595405954159542595435954459545595465954759548595495955059551595525955359554595555955659557595585955959560595615956259563595645956559566595675956859569595705957159572595735957459575595765957759578595795958059581595825958359584595855958659587595885958959590595915959259593595945959559596595975959859599596005960159602596035960459605596065960759608596095961059611596125961359614596155961659617596185961959620596215962259623596245962559626596275962859629596305963159632596335963459635596365963759638596395964059641596425964359644596455964659647596485964959650596515965259653596545965559656596575965859659596605966159662596635966459665596665966759668596695967059671596725967359674596755967659677596785967959680596815968259683596845968559686596875968859689596905969159692596935969459695596965969759698596995970059701597025970359704597055970659707597085970959710597115971259713597145971559716597175971859719597205972159722597235972459725597265972759728597295973059731597325973359734597355973659737597385973959740597415974259743597445974559746597475974859749597505975159752597535975459755597565975759758597595976059761597625976359764597655976659767597685976959770597715977259773597745977559776597775977859779597805978159782597835978459785597865978759788597895979059791597925979359794597955979659797597985979959800598015980259803598045980559806598075980859809598105981159812598135981459815598165981759818598195982059821598225982359824598255982659827598285982959830598315983259833598345983559836598375983859839598405984159842598435984459845598465984759848598495985059851598525985359854598555985659857598585985959860598615986259863598645986559866598675986859869598705987159872598735987459875598765987759878598795988059881598825988359884598855988659887598885988959890598915989259893598945989559896598975989859899599005990159902599035990459905599065990759908599095991059911599125991359914599155991659917599185991959920599215992259923599245992559926599275992859929599305993159932599335993459935599365993759938599395994059941599425994359944599455994659947599485994959950599515995259953599545995559956599575995859959599605996159962599635996459965599665996759968599695997059971599725997359974599755997659977599785997959980599815998259983599845998559986599875998859989599905999159992599935999459995599965999759998599996000060001600026000360004600056000660007600086000960010600116001260013600146001560016600176001860019600206002160022600236002460025600266002760028600296003060031600326003360034600356003660037600386003960040600416004260043600446004560046600476004860049600506005160052600536005460055600566005760058600596006060061600626006360064600656006660067600686006960070600716007260073600746007560076600776007860079600806008160082600836008460085600866008760088600896009060091600926009360094600956009660097600986009960100601016010260103601046010560106601076010860109601106011160112601136011460115601166011760118601196012060121601226012360124601256012660127601286012960130601316013260133601346013560136601376013860139601406014160142601436014460145601466014760148601496015060151601526015360154601556015660157601586015960160601616016260163601646016560166601676016860169601706017160172601736017460175601766017760178601796018060181601826018360184601856018660187601886018960190601916019260193601946019560196601976019860199602006020160202602036020460205602066020760208602096021060211602126021360214602156021660217602186021960220602216022260223602246022560226602276022860229602306023160232602336023460235602366023760238602396024060241602426024360244602456024660247602486024960250602516025260253602546025560256602576025860259602606026160262602636026460265602666026760268602696027060271602726027360274602756027660277602786027960280602816028260283602846028560286602876028860289602906029160292602936029460295602966029760298602996030060301603026030360304603056030660307603086030960310603116031260313603146031560316603176031860319603206032160322603236032460325603266032760328603296033060331603326033360334603356033660337603386033960340603416034260343603446034560346603476034860349603506035160352603536035460355603566035760358603596036060361603626036360364603656036660367603686036960370603716037260373603746037560376603776037860379603806038160382603836038460385603866038760388603896039060391603926039360394603956039660397603986039960400604016040260403604046040560406604076040860409604106041160412604136041460415604166041760418604196042060421604226042360424604256042660427604286042960430604316043260433604346043560436604376043860439604406044160442604436044460445604466044760448604496045060451604526045360454604556045660457604586045960460604616046260463604646046560466604676046860469604706047160472604736047460475604766047760478604796048060481604826048360484604856048660487604886048960490604916049260493604946049560496604976049860499605006050160502605036050460505605066050760508605096051060511605126051360514605156051660517605186051960520605216052260523605246052560526605276052860529605306053160532605336053460535605366053760538605396054060541605426054360544605456054660547605486054960550605516055260553605546055560556605576055860559605606056160562605636056460565605666056760568605696057060571605726057360574605756057660577605786057960580605816058260583605846058560586605876058860589605906059160592605936059460595605966059760598605996060060601606026060360604606056060660607606086060960610606116061260613606146061560616606176061860619606206062160622606236062460625606266062760628606296063060631606326063360634606356063660637606386063960640606416064260643606446064560646606476064860649606506065160652606536065460655606566065760658606596066060661606626066360664606656066660667606686066960670606716067260673606746067560676606776067860679606806068160682606836068460685606866068760688606896069060691606926069360694606956069660697606986069960700607016070260703607046070560706607076070860709607106071160712607136071460715607166071760718607196072060721607226072360724607256072660727607286072960730607316073260733607346073560736607376073860739607406074160742607436074460745607466074760748607496075060751607526075360754607556075660757607586075960760607616076260763607646076560766607676076860769607706077160772607736077460775607766077760778607796078060781607826078360784607856078660787607886078960790607916079260793607946079560796607976079860799608006080160802608036080460805608066080760808608096081060811608126081360814608156081660817608186081960820608216082260823608246082560826608276082860829608306083160832608336083460835608366083760838608396084060841608426084360844608456084660847608486084960850608516085260853608546085560856608576085860859608606086160862608636086460865608666086760868608696087060871608726087360874608756087660877608786087960880608816088260883608846088560886608876088860889608906089160892608936089460895608966089760898608996090060901609026090360904609056090660907609086090960910609116091260913609146091560916609176091860919609206092160922609236092460925609266092760928609296093060931609326093360934609356093660937609386093960940609416094260943609446094560946609476094860949609506095160952609536095460955609566095760958609596096060961609626096360964609656096660967609686096960970609716097260973609746097560976609776097860979609806098160982609836098460985609866098760988609896099060991609926099360994609956099660997609986099961000610016100261003610046100561006610076100861009610106101161012610136101461015610166101761018610196102061021610226102361024610256102661027610286102961030610316103261033610346103561036610376103861039610406104161042610436104461045610466104761048610496105061051610526105361054610556105661057610586105961060610616106261063610646106561066610676106861069610706107161072610736107461075610766107761078610796108061081610826108361084610856108661087610886108961090610916109261093610946109561096610976109861099611006110161102611036110461105611066110761108611096111061111611126111361114611156111661117611186111961120611216112261123611246112561126611276112861129611306113161132611336113461135611366113761138611396114061141611426114361144611456114661147611486114961150611516115261153611546115561156611576115861159611606116161162611636116461165611666116761168611696117061171611726117361174611756117661177611786117961180611816118261183611846118561186611876118861189611906119161192611936119461195611966119761198611996120061201612026120361204612056120661207612086120961210612116121261213612146121561216612176121861219612206122161222612236122461225612266122761228612296123061231612326123361234612356123661237612386123961240612416124261243612446124561246612476124861249612506125161252612536125461255612566125761258612596126061261612626126361264612656126661267612686126961270612716127261273612746127561276612776127861279612806128161282612836128461285612866128761288612896129061291612926129361294612956129661297612986129961300613016130261303613046130561306613076130861309613106131161312613136131461315613166131761318613196132061321613226132361324613256132661327613286132961330613316133261333613346133561336613376133861339613406134161342613436134461345613466134761348613496135061351613526135361354613556135661357613586135961360613616136261363613646136561366613676136861369613706137161372613736137461375613766137761378613796138061381613826138361384613856138661387613886138961390613916139261393613946139561396613976139861399614006140161402614036140461405614066140761408614096141061411614126141361414614156141661417614186141961420614216142261423614246142561426614276142861429614306143161432614336143461435614366143761438614396144061441614426144361444614456144661447614486144961450614516145261453614546145561456614576145861459614606146161462614636146461465614666146761468614696147061471614726147361474614756147661477614786147961480614816148261483614846148561486614876148861489614906149161492614936149461495614966149761498614996150061501615026150361504615056150661507615086150961510615116151261513615146151561516615176151861519615206152161522615236152461525615266152761528615296153061531615326153361534615356153661537615386153961540615416154261543615446154561546615476154861549615506155161552615536155461555615566155761558615596156061561615626156361564615656156661567615686156961570615716157261573615746157561576615776157861579615806158161582615836158461585615866158761588615896159061591615926159361594615956159661597615986159961600616016160261603616046160561606616076160861609616106161161612616136161461615616166161761618616196162061621616226162361624616256162661627616286162961630616316163261633616346163561636616376163861639616406164161642616436164461645616466164761648616496165061651616526165361654616556165661657616586165961660616616166261663616646166561666616676166861669616706167161672616736167461675616766167761678616796168061681616826168361684616856168661687616886168961690616916169261693616946169561696616976169861699617006170161702617036170461705617066170761708617096171061711617126171361714617156171661717617186171961720617216172261723617246172561726617276172861729617306173161732617336173461735617366173761738617396174061741617426174361744617456174661747617486174961750617516175261753617546175561756617576175861759617606176161762617636176461765617666176761768617696177061771617726177361774617756177661777617786177961780617816178261783617846178561786617876178861789617906179161792617936179461795617966179761798617996180061801618026180361804618056180661807618086180961810618116181261813618146181561816618176181861819618206182161822618236182461825618266182761828618296183061831618326183361834618356183661837618386183961840618416184261843618446184561846618476184861849618506185161852618536185461855618566185761858618596186061861618626186361864618656186661867618686186961870618716187261873618746187561876618776187861879618806188161882618836188461885618866188761888618896189061891618926189361894618956189661897618986189961900619016190261903619046190561906619076190861909619106191161912619136191461915619166191761918619196192061921619226192361924619256192661927619286192961930619316193261933619346193561936619376193861939619406194161942619436194461945619466194761948619496195061951619526195361954619556195661957619586195961960619616196261963619646196561966619676196861969619706197161972619736197461975619766197761978619796198061981619826198361984619856198661987619886198961990619916199261993619946199561996619976199861999620006200162002620036200462005620066200762008620096201062011620126201362014620156201662017620186201962020620216202262023620246202562026620276202862029620306203162032620336203462035620366203762038620396204062041620426204362044620456204662047620486204962050620516205262053620546205562056620576205862059620606206162062620636206462065620666206762068620696207062071620726207362074620756207662077620786207962080620816208262083620846208562086620876208862089620906209162092620936209462095620966209762098620996210062101621026210362104621056210662107621086210962110621116211262113621146211562116621176211862119621206212162122621236212462125621266212762128621296213062131621326213362134621356213662137621386213962140621416214262143621446214562146621476214862149621506215162152621536215462155621566215762158621596216062161621626216362164621656216662167621686216962170621716217262173621746217562176621776217862179621806218162182621836218462185621866218762188621896219062191621926219362194621956219662197621986219962200622016220262203622046220562206622076220862209622106221162212622136221462215622166221762218622196222062221622226222362224622256222662227622286222962230622316223262233622346223562236622376223862239622406224162242622436224462245622466224762248622496225062251622526225362254622556225662257622586225962260622616226262263622646226562266622676226862269622706227162272622736227462275622766227762278622796228062281622826228362284622856228662287622886228962290622916229262293622946229562296622976229862299623006230162302623036230462305623066230762308623096231062311623126231362314623156231662317623186231962320623216232262323623246232562326623276232862329623306233162332623336233462335623366233762338623396234062341623426234362344623456234662347623486234962350623516235262353623546235562356623576235862359623606236162362623636236462365623666236762368623696237062371623726237362374623756237662377623786237962380623816238262383623846238562386623876238862389623906239162392623936239462395623966239762398623996240062401624026240362404624056240662407624086240962410624116241262413624146241562416624176241862419624206242162422624236242462425624266242762428624296243062431624326243362434624356243662437624386243962440624416244262443624446244562446624476244862449624506245162452624536245462455624566245762458624596246062461624626246362464624656246662467624686246962470624716247262473624746247562476624776247862479624806248162482624836248462485624866248762488624896249062491624926249362494624956249662497624986249962500625016250262503625046250562506625076250862509625106251162512625136251462515625166251762518625196252062521625226252362524625256252662527625286252962530625316253262533625346253562536625376253862539625406254162542625436254462545625466254762548625496255062551625526255362554625556255662557625586255962560625616256262563625646256562566625676256862569625706257162572625736257462575625766257762578625796258062581625826258362584625856258662587625886258962590625916259262593625946259562596625976259862599626006260162602626036260462605626066260762608626096261062611626126261362614626156261662617626186261962620626216262262623626246262562626626276262862629626306263162632626336263462635626366263762638626396264062641626426264362644626456264662647626486264962650626516265262653626546265562656626576265862659626606266162662626636266462665626666266762668626696267062671626726267362674626756267662677626786267962680626816268262683626846268562686626876268862689626906269162692626936269462695626966269762698626996270062701627026270362704627056270662707627086270962710627116271262713627146271562716627176271862719627206272162722627236272462725627266272762728627296273062731627326273362734627356273662737627386273962740627416274262743627446274562746627476274862749627506275162752627536275462755627566275762758627596276062761627626276362764627656276662767627686276962770627716277262773627746277562776627776277862779627806278162782627836278462785627866278762788627896279062791627926279362794627956279662797627986279962800628016280262803628046280562806628076280862809628106281162812628136281462815628166281762818628196282062821628226282362824628256282662827628286282962830628316283262833628346283562836628376283862839628406284162842628436284462845628466284762848628496285062851628526285362854628556285662857628586285962860628616286262863628646286562866628676286862869628706287162872628736287462875628766287762878628796288062881628826288362884628856288662887628886288962890628916289262893628946289562896628976289862899629006290162902629036290462905629066290762908629096291062911629126291362914629156291662917629186291962920629216292262923629246292562926629276292862929629306293162932629336293462935629366293762938629396294062941629426294362944629456294662947629486294962950629516295262953629546295562956629576295862959629606296162962629636296462965629666296762968629696297062971629726297362974629756297662977629786297962980629816298262983629846298562986629876298862989629906299162992629936299462995629966299762998629996300063001630026300363004630056300663007630086300963010630116301263013630146301563016630176301863019630206302163022630236302463025630266302763028630296303063031630326303363034630356303663037630386303963040630416304263043630446304563046630476304863049630506305163052630536305463055630566305763058630596306063061630626306363064630656306663067630686306963070630716307263073630746307563076630776307863079630806308163082630836308463085630866308763088630896309063091630926309363094630956309663097630986309963100631016310263103631046310563106631076310863109631106311163112631136311463115631166311763118631196312063121631226312363124631256312663127631286312963130631316313263133631346313563136631376313863139631406314163142631436314463145631466314763148631496315063151631526315363154631556315663157631586315963160631616316263163631646316563166631676316863169631706317163172631736317463175631766317763178631796318063181631826318363184631856318663187631886318963190631916319263193631946319563196631976319863199632006320163202632036320463205632066320763208632096321063211632126321363214632156321663217632186321963220632216322263223632246322563226632276322863229632306323163232632336323463235632366323763238632396324063241632426324363244632456324663247632486324963250632516325263253632546325563256632576325863259632606326163262632636326463265632666326763268632696327063271632726327363274632756327663277632786327963280632816328263283632846328563286632876328863289632906329163292632936329463295632966329763298632996330063301633026330363304633056330663307633086330963310633116331263313633146331563316633176331863319633206332163322633236332463325633266332763328633296333063331633326333363334633356333663337633386333963340633416334263343633446334563346633476334863349633506335163352633536335463355633566335763358633596336063361633626336363364633656336663367633686336963370633716337263373633746337563376633776337863379633806338163382633836338463385633866338763388633896339063391633926339363394633956339663397633986339963400634016340263403634046340563406634076340863409634106341163412634136341463415634166341763418634196342063421634226342363424634256342663427634286342963430634316343263433634346343563436634376343863439634406344163442634436344463445634466344763448634496345063451634526345363454634556345663457634586345963460634616346263463634646346563466634676346863469634706347163472634736347463475634766347763478634796348063481634826348363484634856348663487634886348963490634916349263493634946349563496634976349863499635006350163502635036350463505635066350763508635096351063511635126351363514635156351663517635186351963520635216352263523635246352563526635276352863529635306353163532635336353463535635366353763538635396354063541635426354363544635456354663547635486354963550635516355263553635546355563556635576355863559635606356163562635636356463565635666356763568635696357063571635726357363574635756357663577635786357963580635816358263583635846358563586635876358863589635906359163592635936359463595635966359763598635996360063601636026360363604636056360663607636086360963610636116361263613636146361563616636176361863619636206362163622636236362463625636266362763628636296363063631636326363363634636356363663637636386363963640636416364263643636446364563646636476364863649636506365163652636536365463655636566365763658636596366063661636626366363664636656366663667636686366963670636716367263673636746367563676636776367863679636806368163682636836368463685636866368763688636896369063691636926369363694636956369663697636986369963700637016370263703637046370563706637076370863709637106371163712637136371463715637166371763718637196372063721637226372363724637256372663727637286372963730637316373263733637346373563736637376373863739637406374163742637436374463745637466374763748637496375063751637526375363754637556375663757637586375963760637616376263763637646376563766637676376863769637706377163772637736377463775637766377763778637796378063781637826378363784637856378663787637886378963790637916379263793637946379563796637976379863799638006380163802638036380463805638066380763808638096381063811638126381363814638156381663817638186381963820638216382263823638246382563826638276382863829638306383163832638336383463835638366383763838638396384063841638426384363844638456384663847638486384963850638516385263853638546385563856638576385863859638606386163862638636386463865638666386763868638696387063871638726387363874638756387663877638786387963880638816388263883638846388563886638876388863889638906389163892638936389463895638966389763898638996390063901639026390363904639056390663907639086390963910639116391263913639146391563916639176391863919639206392163922639236392463925639266392763928639296393063931639326393363934639356393663937639386393963940639416394263943639446394563946639476394863949639506395163952639536395463955639566395763958639596396063961639626396363964639656396663967639686396963970639716397263973639746397563976639776397863979639806398163982639836398463985639866398763988639896399063991639926399363994639956399663997639986399964000640016400264003640046400564006640076400864009640106401164012640136401464015640166401764018640196402064021640226402364024640256402664027640286402964030640316403264033640346403564036640376403864039640406404164042640436404464045640466404764048640496405064051640526405364054640556405664057640586405964060640616406264063640646406564066640676406864069640706407164072640736407464075640766407764078640796408064081640826408364084640856408664087640886408964090640916409264093640946409564096640976409864099641006410164102641036410464105641066410764108641096411064111641126411364114641156411664117641186411964120641216412264123641246412564126641276412864129641306413164132641336413464135641366413764138641396414064141641426414364144641456414664147641486414964150641516415264153641546415564156641576415864159641606416164162641636416464165641666416764168641696417064171641726417364174641756417664177641786417964180641816418264183641846418564186641876418864189641906419164192641936419464195641966419764198641996420064201642026420364204642056420664207642086420964210642116421264213642146421564216642176421864219642206422164222642236422464225642266422764228642296423064231642326423364234642356423664237642386423964240642416424264243642446424564246642476424864249642506425164252642536425464255642566425764258642596426064261642626426364264642656426664267642686426964270642716427264273642746427564276642776427864279642806428164282642836428464285642866428764288642896429064291642926429364294642956429664297642986429964300643016430264303643046430564306643076430864309643106431164312643136431464315643166431764318643196432064321643226432364324643256432664327643286432964330643316433264333643346433564336643376433864339643406434164342643436434464345643466434764348643496435064351643526435364354643556435664357643586435964360643616436264363643646436564366643676436864369643706437164372643736437464375643766437764378643796438064381643826438364384643856438664387643886438964390643916439264393643946439564396643976439864399644006440164402644036440464405644066440764408644096441064411644126441364414644156441664417644186441964420644216442264423644246442564426644276442864429644306443164432644336443464435644366443764438644396444064441644426444364444644456444664447644486444964450644516445264453644546445564456644576445864459644606446164462644636446464465644666446764468644696447064471644726447364474644756447664477644786447964480644816448264483644846448564486644876448864489644906449164492644936449464495644966449764498644996450064501645026450364504645056450664507645086450964510645116451264513645146451564516645176451864519645206452164522645236452464525645266452764528645296453064531645326453364534645356453664537645386453964540645416454264543645446454564546645476454864549645506455164552645536455464555645566455764558645596456064561645626456364564645656456664567645686456964570645716457264573645746457564576645776457864579645806458164582645836458464585645866458764588645896459064591645926459364594645956459664597645986459964600646016460264603646046460564606646076460864609646106461164612646136461464615646166461764618646196462064621646226462364624646256462664627646286462964630646316463264633646346463564636646376463864639646406464164642646436464464645646466464764648646496465064651646526465364654646556465664657646586465964660646616466264663646646466564666646676466864669646706467164672646736467464675646766467764678646796468064681646826468364684646856468664687646886468964690646916469264693646946469564696646976469864699647006470164702647036470464705647066470764708647096471064711647126471364714647156471664717647186471964720647216472264723647246472564726647276472864729647306473164732647336473464735647366473764738647396474064741647426474364744647456474664747647486474964750647516475264753647546475564756647576475864759647606476164762647636476464765647666476764768647696477064771647726477364774647756477664777647786477964780647816478264783647846478564786647876478864789647906479164792647936479464795647966479764798647996480064801648026480364804648056480664807648086480964810648116481264813648146481564816648176481864819648206482164822648236482464825648266482764828648296483064831648326483364834648356483664837648386483964840648416484264843648446484564846648476484864849648506485164852648536485464855648566485764858648596486064861648626486364864648656486664867648686486964870648716487264873648746487564876648776487864879648806488164882648836488464885648866488764888648896489064891648926489364894648956489664897648986489964900649016490264903649046490564906649076490864909649106491164912649136491464915649166491764918649196492064921649226492364924649256492664927649286492964930649316493264933649346493564936649376493864939649406494164942649436494464945649466494764948649496495064951649526495364954649556495664957649586495964960649616496264963649646496564966649676496864969649706497164972649736497464975649766497764978649796498064981649826498364984649856498664987649886498964990649916499264993649946499564996649976499864999650006500165002650036500465005650066500765008650096501065011650126501365014650156501665017650186501965020650216502265023650246502565026650276502865029650306503165032650336503465035650366503765038650396504065041650426504365044650456504665047650486504965050650516505265053650546505565056650576505865059650606506165062650636506465065650666506765068650696507065071650726507365074650756507665077650786507965080650816508265083650846508565086650876508865089650906509165092650936509465095650966509765098650996510065101651026510365104651056510665107651086510965110651116511265113651146511565116651176511865119651206512165122651236512465125651266512765128651296513065131651326513365134651356513665137651386513965140651416514265143651446514565146651476514865149651506515165152651536515465155651566515765158651596516065161651626516365164651656516665167651686516965170651716517265173651746517565176651776517865179651806518165182651836518465185651866518765188651896519065191651926519365194651956519665197651986519965200652016520265203652046520565206652076520865209652106521165212652136521465215652166521765218652196522065221652226522365224652256522665227652286522965230652316523265233652346523565236652376523865239652406524165242652436524465245652466524765248652496525065251652526525365254652556525665257652586525965260652616526265263652646526565266652676526865269652706527165272652736527465275652766527765278652796528065281652826528365284652856528665287652886528965290652916529265293652946529565296652976529865299653006530165302653036530465305653066530765308653096531065311653126531365314653156531665317653186531965320653216532265323653246532565326653276532865329653306533165332653336533465335653366533765338653396534065341653426534365344653456534665347653486534965350653516535265353653546535565356653576535865359653606536165362653636536465365653666536765368653696537065371653726537365374653756537665377653786537965380653816538265383653846538565386653876538865389653906539165392653936539465395653966539765398653996540065401654026540365404654056540665407654086540965410654116541265413654146541565416654176541865419654206542165422654236542465425654266542765428654296543065431654326543365434654356543665437654386543965440654416544265443654446544565446654476544865449654506545165452654536545465455654566545765458654596546065461654626546365464654656546665467654686546965470654716547265473654746547565476654776547865479654806548165482654836548465485654866548765488654896549065491654926549365494654956549665497654986549965500655016550265503655046550565506655076550865509655106551165512655136551465515655166551765518655196552065521655226552365524655256552665527655286552965530655316553265533655346553565536655376553865539655406554165542655436554465545655466554765548655496555065551655526555365554655556555665557655586555965560655616556265563655646556565566655676556865569655706557165572655736557465575655766557765578655796558065581655826558365584655856558665587655886558965590655916559265593655946559565596655976559865599656006560165602656036560465605656066560765608656096561065611656126561365614656156561665617656186561965620656216562265623656246562565626656276562865629656306563165632656336563465635656366563765638656396564065641656426564365644656456564665647656486564965650656516565265653656546565565656656576565865659656606566165662656636566465665656666566765668656696567065671656726567365674656756567665677656786567965680656816568265683656846568565686656876568865689656906569165692656936569465695656966569765698656996570065701657026570365704657056570665707657086570965710657116571265713657146571565716657176571865719657206572165722657236572465725657266572765728657296573065731657326573365734657356573665737657386573965740657416574265743657446574565746657476574865749657506575165752657536575465755657566575765758657596576065761657626576365764657656576665767657686576965770657716577265773657746577565776657776577865779657806578165782657836578465785657866578765788657896579065791657926579365794657956579665797657986579965800658016580265803658046580565806658076580865809658106581165812658136581465815658166581765818658196582065821658226582365824658256582665827658286582965830658316583265833658346583565836658376583865839658406584165842658436584465845658466584765848658496585065851658526585365854658556585665857658586585965860658616586265863658646586565866658676586865869658706587165872658736587465875658766587765878658796588065881658826588365884658856588665887658886588965890658916589265893658946589565896658976589865899659006590165902659036590465905659066590765908659096591065911659126591365914659156591665917659186591965920659216592265923659246592565926659276592865929659306593165932659336593465935659366593765938659396594065941659426594365944659456594665947659486594965950659516595265953659546595565956659576595865959659606596165962659636596465965659666596765968659696597065971659726597365974659756597665977659786597965980659816598265983659846598565986659876598865989659906599165992659936599465995659966599765998659996600066001660026600366004660056600666007660086600966010660116601266013660146601566016660176601866019660206602166022660236602466025660266602766028660296603066031660326603366034660356603666037660386603966040660416604266043660446604566046660476604866049660506605166052660536605466055660566605766058660596606066061660626606366064660656606666067660686606966070660716607266073660746607566076660776607866079660806608166082660836608466085660866608766088660896609066091660926609366094660956609666097660986609966100661016610266103661046610566106661076610866109661106611166112661136611466115661166611766118661196612066121661226612366124661256612666127661286612966130661316613266133661346613566136661376613866139661406614166142661436614466145661466614766148661496615066151661526615366154661556615666157661586615966160661616616266163661646616566166661676616866169661706617166172661736617466175661766617766178661796618066181661826618366184661856618666187661886618966190661916619266193661946619566196661976619866199662006620166202662036620466205662066620766208662096621066211662126621366214662156621666217662186621966220662216622266223662246622566226662276622866229662306623166232662336623466235662366623766238662396624066241662426624366244662456624666247662486624966250662516625266253662546625566256662576625866259662606626166262662636626466265662666626766268662696627066271662726627366274662756627666277662786627966280662816628266283662846628566286662876628866289662906629166292662936629466295662966629766298662996630066301663026630366304663056630666307663086630966310663116631266313663146631566316663176631866319663206632166322663236632466325663266632766328663296633066331663326633366334663356633666337663386633966340663416634266343663446634566346663476634866349663506635166352663536635466355663566635766358663596636066361663626636366364663656636666367663686636966370663716637266373663746637566376663776637866379663806638166382663836638466385663866638766388663896639066391663926639366394663956639666397663986639966400664016640266403664046640566406664076640866409664106641166412664136641466415664166641766418664196642066421664226642366424664256642666427664286642966430664316643266433664346643566436664376643866439664406644166442664436644466445664466644766448664496645066451664526645366454664556645666457664586645966460664616646266463664646646566466664676646866469664706647166472664736647466475664766647766478664796648066481664826648366484664856648666487664886648966490664916649266493664946649566496664976649866499665006650166502665036650466505665066650766508665096651066511665126651366514665156651666517665186651966520665216652266523665246652566526665276652866529665306653166532665336653466535665366653766538665396654066541665426654366544665456654666547665486654966550665516655266553665546655566556665576655866559665606656166562665636656466565665666656766568665696657066571665726657366574665756657666577665786657966580665816658266583665846658566586665876658866589665906659166592665936659466595665966659766598665996660066601666026660366604666056660666607666086660966610666116661266613666146661566616666176661866619666206662166622666236662466625666266662766628666296663066631666326663366634666356663666637666386663966640666416664266643666446664566646666476664866649666506665166652666536665466655666566665766658666596666066661666626666366664666656666666667666686666966670666716667266673666746667566676666776667866679666806668166682666836668466685666866668766688666896669066691666926669366694666956669666697666986669966700667016670266703667046670566706667076670866709667106671166712667136671466715667166671766718667196672066721667226672366724667256672666727667286672966730667316673266733667346673566736667376673866739667406674166742667436674466745667466674766748667496675066751667526675366754667556675666757667586675966760667616676266763667646676566766667676676866769667706677166772667736677466775667766677766778667796678066781667826678366784667856678666787667886678966790667916679266793667946679566796667976679866799668006680166802668036680466805668066680766808668096681066811668126681366814668156681666817668186681966820668216682266823668246682566826668276682866829668306683166832668336683466835668366683766838668396684066841668426684366844668456684666847668486684966850668516685266853668546685566856668576685866859668606686166862668636686466865668666686766868668696687066871668726687366874668756687666877668786687966880668816688266883668846688566886668876688866889668906689166892668936689466895668966689766898668996690066901669026690366904669056690666907669086690966910669116691266913669146691566916669176691866919669206692166922669236692466925669266692766928669296693066931669326693366934669356693666937669386693966940669416694266943669446694566946669476694866949669506695166952669536695466955669566695766958669596696066961669626696366964669656696666967669686696966970669716697266973669746697566976669776697866979669806698166982669836698466985669866698766988669896699066991669926699366994669956699666997669986699967000670016700267003670046700567006670076700867009670106701167012670136701467015670166701767018670196702067021670226702367024670256702667027670286702967030670316703267033670346703567036670376703867039670406704167042670436704467045670466704767048670496705067051670526705367054670556705667057670586705967060670616706267063670646706567066670676706867069670706707167072670736707467075670766707767078670796708067081670826708367084670856708667087670886708967090670916709267093670946709567096670976709867099671006710167102671036710467105671066710767108671096711067111671126711367114671156711667117671186711967120671216712267123671246712567126671276712867129671306713167132671336713467135671366713767138671396714067141671426714367144671456714667147671486714967150671516715267153671546715567156671576715867159671606716167162671636716467165671666716767168671696717067171671726717367174671756717667177671786717967180671816718267183671846718567186671876718867189671906719167192671936719467195671966719767198671996720067201672026720367204672056720667207672086720967210672116721267213672146721567216672176721867219672206722167222672236722467225672266722767228672296723067231672326723367234672356723667237672386723967240672416724267243672446724567246672476724867249672506725167252672536725467255672566725767258672596726067261672626726367264672656726667267672686726967270672716727267273672746727567276672776727867279672806728167282672836728467285672866728767288672896729067291672926729367294672956729667297672986729967300673016730267303673046730567306673076730867309673106731167312673136731467315673166731767318673196732067321673226732367324673256732667327673286732967330673316733267333673346733567336673376733867339673406734167342673436734467345673466734767348673496735067351673526735367354673556735667357673586735967360673616736267363673646736567366673676736867369673706737167372673736737467375673766737767378673796738067381673826738367384673856738667387673886738967390673916739267393673946739567396673976739867399674006740167402674036740467405674066740767408674096741067411674126741367414674156741667417674186741967420674216742267423674246742567426674276742867429674306743167432674336743467435674366743767438674396744067441674426744367444674456744667447674486744967450674516745267453674546745567456674576745867459674606746167462674636746467465674666746767468674696747067471674726747367474674756747667477674786747967480674816748267483674846748567486674876748867489674906749167492674936749467495674966749767498674996750067501675026750367504675056750667507675086750967510675116751267513675146751567516675176751867519675206752167522675236752467525675266752767528675296753067531675326753367534675356753667537675386753967540675416754267543675446754567546675476754867549675506755167552675536755467555675566755767558675596756067561675626756367564675656756667567675686756967570675716757267573675746757567576675776757867579675806758167582675836758467585675866758767588675896759067591675926759367594675956759667597675986759967600676016760267603676046760567606676076760867609676106761167612676136761467615676166761767618676196762067621676226762367624676256762667627676286762967630676316763267633676346763567636676376763867639676406764167642676436764467645676466764767648676496765067651676526765367654676556765667657676586765967660676616766267663676646766567666676676766867669676706767167672676736767467675676766767767678676796768067681676826768367684676856768667687676886768967690676916769267693676946769567696676976769867699677006770167702677036770467705677066770767708677096771067711677126771367714677156771667717677186771967720677216772267723677246772567726677276772867729677306773167732677336773467735677366773767738677396774067741677426774367744677456774667747677486774967750677516775267753677546775567756677576775867759677606776167762677636776467765677666776767768677696777067771677726777367774677756777667777677786777967780677816778267783677846778567786677876778867789677906779167792677936779467795677966779767798677996780067801678026780367804678056780667807678086780967810678116781267813678146781567816678176781867819678206782167822678236782467825678266782767828678296783067831678326783367834678356783667837678386783967840678416784267843678446784567846678476784867849678506785167852678536785467855678566785767858678596786067861678626786367864678656786667867678686786967870678716787267873678746787567876678776787867879678806788167882678836788467885678866788767888678896789067891678926789367894678956789667897678986789967900679016790267903679046790567906679076790867909679106791167912679136791467915679166791767918679196792067921679226792367924679256792667927679286792967930679316793267933679346793567936679376793867939679406794167942679436794467945679466794767948679496795067951679526795367954679556795667957679586795967960679616796267963679646796567966679676796867969679706797167972679736797467975679766797767978679796798067981679826798367984679856798667987679886798967990679916799267993679946799567996679976799867999680006800168002680036800468005680066800768008680096801068011680126801368014680156801668017680186801968020680216802268023680246802568026680276802868029680306803168032680336803468035680366803768038680396804068041680426804368044680456804668047680486804968050680516805268053680546805568056680576805868059680606806168062680636806468065680666806768068680696807068071680726807368074680756807668077680786807968080680816808268083680846808568086680876808868089680906809168092680936809468095680966809768098680996810068101681026810368104681056810668107681086810968110681116811268113681146811568116681176811868119681206812168122681236812468125681266812768128681296813068131681326813368134681356813668137681386813968140681416814268143681446814568146681476814868149
  1. /******/ (function(modules) { // webpackBootstrap
  2. /******/ // The module cache
  3. /******/ var installedModules = {};
  4. /******/ // The require function
  5. /******/ function __webpack_require__(moduleId) {
  6. /******/ // Check if module is in cache
  7. /******/ if(installedModules[moduleId])
  8. /******/ return installedModules[moduleId].exports;
  9. /******/ // Create a new module (and put it into the cache)
  10. /******/ var module = installedModules[moduleId] = {
  11. /******/ exports: {},
  12. /******/ id: moduleId,
  13. /******/ loaded: false
  14. /******/ };
  15. /******/ // Execute the module function
  16. /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  17. /******/ // Flag the module as loaded
  18. /******/ module.loaded = true;
  19. /******/ // Return the exports of the module
  20. /******/ return module.exports;
  21. /******/ }
  22. /******/ // expose the modules object (__webpack_modules__)
  23. /******/ __webpack_require__.m = modules;
  24. /******/ // expose the module cache
  25. /******/ __webpack_require__.c = installedModules;
  26. /******/ // __webpack_public_path__
  27. /******/ __webpack_require__.p = "";
  28. /******/ // Load entry module and return exports
  29. /******/ return __webpack_require__(0);
  30. /******/ })
  31. /************************************************************************/
  32. /******/ ([
  33. /* 0 */
  34. /***/ function(module, exports, __webpack_require__) {
  35. /* WEBPACK VAR INJECTION */(function(global) {module.exports = global["pdfMake"] = __webpack_require__(1);
  36. /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
  37. /***/ },
  38. /* 1 */
  39. /***/ function(module, exports, __webpack_require__) {
  40. /* WEBPACK VAR INJECTION */(function(Buffer) {/* jslint node: true */
  41. /* jslint browser: true */
  42. /* global BlobBuilder */
  43. 'use strict';
  44. var PdfPrinter = __webpack_require__(6);
  45. var FileSaver = __webpack_require__(105);
  46. var saveAs = FileSaver.saveAs;
  47. var defaultClientFonts = {
  48. Roboto: {
  49. normal: 'Roboto-Regular.ttf',
  50. bold: 'Roboto-Medium.ttf',
  51. italics: 'Roboto-Italic.ttf',
  52. bolditalics: 'Roboto-Italic.ttf'
  53. }
  54. };
  55. function Document(docDefinition, fonts, vfs) {
  56. this.docDefinition = docDefinition;
  57. this.fonts = fonts || defaultClientFonts;
  58. this.vfs = vfs;
  59. }
  60. Document.prototype._createDoc = function(options, callback) {
  61. var printer = new PdfPrinter(this.fonts);
  62. printer.fs.bindFS(this.vfs);
  63. var doc = printer.createPdfKitDocument(this.docDefinition, options);
  64. var chunks = [];
  65. var result;
  66. doc.on('data', function(chunk) {
  67. chunks.push(chunk);
  68. });
  69. doc.on('end', function() {
  70. result = Buffer.concat(chunks);
  71. callback(result, doc._pdfMakePages);
  72. });
  73. doc.end();
  74. };
  75. Document.prototype._getPages = function(options, cb){
  76. if (!cb) throw 'getBuffer is an async method and needs a callback argument';
  77. this._createDoc(options, function(ignoreBuffer, pages){
  78. cb(pages);
  79. });
  80. };
  81. Document.prototype.open = function(message) {
  82. // we have to open the window immediately and store the reference
  83. // otherwise popup blockers will stop us
  84. var win = window.open('', '_blank');
  85. try {
  86. this.getDataUrl(function(result) {
  87. win.location.href = result;
  88. });
  89. } catch(e) {
  90. win.close();
  91. throw e;
  92. }
  93. };
  94. Document.prototype.print = function() {
  95. this.getDataUrl(function(dataUrl) {
  96. var iFrame = document.createElement('iframe');
  97. iFrame.style.position = 'absolute';
  98. iFrame.style.left = '-99999px';
  99. iFrame.src = dataUrl;
  100. iFrame.onload = function() {
  101. function removeIFrame(){
  102. document.body.removeChild(iFrame);
  103. document.removeEventListener('click', removeIFrame);
  104. }
  105. document.addEventListener('click', removeIFrame, false);
  106. };
  107. document.body.appendChild(iFrame);
  108. }, { autoPrint: true });
  109. };
  110. Document.prototype.download = function(defaultFileName, cb) {
  111. if(typeof defaultFileName === "function") {
  112. cb = defaultFileName;
  113. defaultFileName = null;
  114. }
  115. defaultFileName = defaultFileName || 'file.pdf';
  116. this.getBuffer(function (result) {
  117. var blob;
  118. try {
  119. blob = new Blob([result], { type: 'application/pdf' });
  120. }
  121. catch (e) {
  122. // Old browser which can't handle it without making it an byte array (ie10)
  123. if (e.name == "InvalidStateError") {
  124. var byteArray = new Uint8Array(result);
  125. blob = new Blob([byteArray.buffer], { type: 'application/pdf' });
  126. }
  127. }
  128. if (blob) {
  129. saveAs(blob, defaultFileName);
  130. }
  131. else {
  132. throw 'Could not generate blob';
  133. }
  134. if (typeof cb === "function") {
  135. cb();
  136. }
  137. });
  138. };
  139. Document.prototype.getBase64 = function(cb, options) {
  140. if (!cb) throw 'getBase64 is an async method and needs a callback argument';
  141. this._createDoc(options, function(buffer) {
  142. cb(buffer.toString('base64'));
  143. });
  144. };
  145. Document.prototype.getDataUrl = function(cb, options) {
  146. if (!cb) throw 'getDataUrl is an async method and needs a callback argument';
  147. this._createDoc(options, function(buffer) {
  148. cb('data:application/pdf;base64,' + buffer.toString('base64'));
  149. });
  150. };
  151. Document.prototype.getBuffer = function(cb, options) {
  152. if (!cb) throw 'getBuffer is an async method and needs a callback argument';
  153. this._createDoc(options, function(buffer){
  154. cb(buffer);
  155. });
  156. };
  157. module.exports = {
  158. createPdf: function(docDefinition) {
  159. return new Document(docDefinition, window.pdfMake.fonts, window.pdfMake.vfs);
  160. }
  161. };
  162. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
  163. /***/ },
  164. /* 2 */
  165. /***/ function(module, exports, __webpack_require__) {
  166. /* WEBPACK VAR INJECTION */(function(Buffer, global) {/*!
  167. * The buffer module from node.js, for the browser.
  168. *
  169. * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
  170. * @license MIT
  171. */
  172. /* eslint-disable no-proto */
  173. var base64 = __webpack_require__(3)
  174. var ieee754 = __webpack_require__(4)
  175. var isArray = __webpack_require__(5)
  176. exports.Buffer = Buffer
  177. exports.SlowBuffer = SlowBuffer
  178. exports.INSPECT_MAX_BYTES = 50
  179. Buffer.poolSize = 8192 // not used by this implementation
  180. var rootParent = {}
  181. /**
  182. * If `Buffer.TYPED_ARRAY_SUPPORT`:
  183. * === true Use Uint8Array implementation (fastest)
  184. * === false Use Object implementation (most compatible, even IE6)
  185. *
  186. * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
  187. * Opera 11.6+, iOS 4.2+.
  188. *
  189. * Due to various browser bugs, sometimes the Object implementation will be used even
  190. * when the browser supports typed arrays.
  191. *
  192. * Note:
  193. *
  194. * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
  195. * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
  196. *
  197. * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
  198. * on objects.
  199. *
  200. * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
  201. *
  202. * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
  203. * incorrect length in some situations.
  204. * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
  205. * get the Object implementation, which is slower but behaves correctly.
  206. */
  207. Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined
  208. ? global.TYPED_ARRAY_SUPPORT
  209. : typedArraySupport()
  210. function typedArraySupport () {
  211. function Bar () {}
  212. try {
  213. var arr = new Uint8Array(1)
  214. arr.foo = function () { return 42 }
  215. arr.constructor = Bar
  216. return arr.foo() === 42 && // typed array instances can be augmented
  217. arr.constructor === Bar && // constructor can be set
  218. typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
  219. arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
  220. } catch (e) {
  221. return false
  222. }
  223. }
  224. function kMaxLength () {
  225. return Buffer.TYPED_ARRAY_SUPPORT
  226. ? 0x7fffffff
  227. : 0x3fffffff
  228. }
  229. /**
  230. * Class: Buffer
  231. * =============
  232. *
  233. * The Buffer constructor returns instances of `Uint8Array` that are augmented
  234. * with function properties for all the node `Buffer` API functions. We use
  235. * `Uint8Array` so that square bracket notation works as expected -- it returns
  236. * a single octet.
  237. *
  238. * By augmenting the instances, we can avoid modifying the `Uint8Array`
  239. * prototype.
  240. */
  241. function Buffer (arg) {
  242. if (!(this instanceof Buffer)) {
  243. // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
  244. if (arguments.length > 1) return new Buffer(arg, arguments[1])
  245. return new Buffer(arg)
  246. }
  247. this.length = 0
  248. this.parent = undefined
  249. // Common case.
  250. if (typeof arg === 'number') {
  251. return fromNumber(this, arg)
  252. }
  253. // Slightly less common case.
  254. if (typeof arg === 'string') {
  255. return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
  256. }
  257. // Unusual.
  258. return fromObject(this, arg)
  259. }
  260. function fromNumber (that, length) {
  261. that = allocate(that, length < 0 ? 0 : checked(length) | 0)
  262. if (!Buffer.TYPED_ARRAY_SUPPORT) {
  263. for (var i = 0; i < length; i++) {
  264. that[i] = 0
  265. }
  266. }
  267. return that
  268. }
  269. function fromString (that, string, encoding) {
  270. if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
  271. // Assumption: byteLength() return value is always < kMaxLength.
  272. var length = byteLength(string, encoding) | 0
  273. that = allocate(that, length)
  274. that.write(string, encoding)
  275. return that
  276. }
  277. function fromObject (that, object) {
  278. if (Buffer.isBuffer(object)) return fromBuffer(that, object)
  279. if (isArray(object)) return fromArray(that, object)
  280. if (object == null) {
  281. throw new TypeError('must start with number, buffer, array or string')
  282. }
  283. if (typeof ArrayBuffer !== 'undefined') {
  284. if (object.buffer instanceof ArrayBuffer) {
  285. return fromTypedArray(that, object)
  286. }
  287. if (object instanceof ArrayBuffer) {
  288. return fromArrayBuffer(that, object)
  289. }
  290. }
  291. if (object.length) return fromArrayLike(that, object)
  292. return fromJsonObject(that, object)
  293. }
  294. function fromBuffer (that, buffer) {
  295. var length = checked(buffer.length) | 0
  296. that = allocate(that, length)
  297. buffer.copy(that, 0, 0, length)
  298. return that
  299. }
  300. function fromArray (that, array) {
  301. var length = checked(array.length) | 0
  302. that = allocate(that, length)
  303. for (var i = 0; i < length; i += 1) {
  304. that[i] = array[i] & 255
  305. }
  306. return that
  307. }
  308. // Duplicate of fromArray() to keep fromArray() monomorphic.
  309. function fromTypedArray (that, array) {
  310. var length = checked(array.length) | 0
  311. that = allocate(that, length)
  312. // Truncating the elements is probably not what people expect from typed
  313. // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
  314. // of the old Buffer constructor.
  315. for (var i = 0; i < length; i += 1) {
  316. that[i] = array[i] & 255
  317. }
  318. return that
  319. }
  320. function fromArrayBuffer (that, array) {
  321. if (Buffer.TYPED_ARRAY_SUPPORT) {
  322. // Return an augmented `Uint8Array` instance, for best performance
  323. array.byteLength
  324. that = Buffer._augment(new Uint8Array(array))
  325. } else {
  326. // Fallback: Return an object instance of the Buffer class
  327. that = fromTypedArray(that, new Uint8Array(array))
  328. }
  329. return that
  330. }
  331. function fromArrayLike (that, array) {
  332. var length = checked(array.length) | 0
  333. that = allocate(that, length)
  334. for (var i = 0; i < length; i += 1) {
  335. that[i] = array[i] & 255
  336. }
  337. return that
  338. }
  339. // Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
  340. // Returns a zero-length buffer for inputs that don't conform to the spec.
  341. function fromJsonObject (that, object) {
  342. var array
  343. var length = 0
  344. if (object.type === 'Buffer' && isArray(object.data)) {
  345. array = object.data
  346. length = checked(array.length) | 0
  347. }
  348. that = allocate(that, length)
  349. for (var i = 0; i < length; i += 1) {
  350. that[i] = array[i] & 255
  351. }
  352. return that
  353. }
  354. if (Buffer.TYPED_ARRAY_SUPPORT) {
  355. Buffer.prototype.__proto__ = Uint8Array.prototype
  356. Buffer.__proto__ = Uint8Array
  357. }
  358. function allocate (that, length) {
  359. if (Buffer.TYPED_ARRAY_SUPPORT) {
  360. // Return an augmented `Uint8Array` instance, for best performance
  361. that = Buffer._augment(new Uint8Array(length))
  362. that.__proto__ = Buffer.prototype
  363. } else {
  364. // Fallback: Return an object instance of the Buffer class
  365. that.length = length
  366. that._isBuffer = true
  367. }
  368. var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
  369. if (fromPool) that.parent = rootParent
  370. return that
  371. }
  372. function checked (length) {
  373. // Note: cannot use `length < kMaxLength` here because that fails when
  374. // length is NaN (which is otherwise coerced to zero.)
  375. if (length >= kMaxLength()) {
  376. throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
  377. 'size: 0x' + kMaxLength().toString(16) + ' bytes')
  378. }
  379. return length | 0
  380. }
  381. function SlowBuffer (subject, encoding) {
  382. if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
  383. var buf = new Buffer(subject, encoding)
  384. delete buf.parent
  385. return buf
  386. }
  387. Buffer.isBuffer = function isBuffer (b) {
  388. return !!(b != null && b._isBuffer)
  389. }
  390. Buffer.compare = function compare (a, b) {
  391. if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
  392. throw new TypeError('Arguments must be Buffers')
  393. }
  394. if (a === b) return 0
  395. var x = a.length
  396. var y = b.length
  397. var i = 0
  398. var len = Math.min(x, y)
  399. while (i < len) {
  400. if (a[i] !== b[i]) break
  401. ++i
  402. }
  403. if (i !== len) {
  404. x = a[i]
  405. y = b[i]
  406. }
  407. if (x < y) return -1
  408. if (y < x) return 1
  409. return 0
  410. }
  411. Buffer.isEncoding = function isEncoding (encoding) {
  412. switch (String(encoding).toLowerCase()) {
  413. case 'hex':
  414. case 'utf8':
  415. case 'utf-8':
  416. case 'ascii':
  417. case 'binary':
  418. case 'base64':
  419. case 'raw':
  420. case 'ucs2':
  421. case 'ucs-2':
  422. case 'utf16le':
  423. case 'utf-16le':
  424. return true
  425. default:
  426. return false
  427. }
  428. }
  429. Buffer.concat = function concat (list, length) {
  430. if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
  431. if (list.length === 0) {
  432. return new Buffer(0)
  433. }
  434. var i
  435. if (length === undefined) {
  436. length = 0
  437. for (i = 0; i < list.length; i++) {
  438. length += list[i].length
  439. }
  440. }
  441. var buf = new Buffer(length)
  442. var pos = 0
  443. for (i = 0; i < list.length; i++) {
  444. var item = list[i]
  445. item.copy(buf, pos)
  446. pos += item.length
  447. }
  448. return buf
  449. }
  450. function byteLength (string, encoding) {
  451. if (typeof string !== 'string') string = '' + string
  452. var len = string.length
  453. if (len === 0) return 0
  454. // Use a for loop to avoid recursion
  455. var loweredCase = false
  456. for (;;) {
  457. switch (encoding) {
  458. case 'ascii':
  459. case 'binary':
  460. // Deprecated
  461. case 'raw':
  462. case 'raws':
  463. return len
  464. case 'utf8':
  465. case 'utf-8':
  466. return utf8ToBytes(string).length
  467. case 'ucs2':
  468. case 'ucs-2':
  469. case 'utf16le':
  470. case 'utf-16le':
  471. return len * 2
  472. case 'hex':
  473. return len >>> 1
  474. case 'base64':
  475. return base64ToBytes(string).length
  476. default:
  477. if (loweredCase) return utf8ToBytes(string).length // assume utf8
  478. encoding = ('' + encoding).toLowerCase()
  479. loweredCase = true
  480. }
  481. }
  482. }
  483. Buffer.byteLength = byteLength
  484. // pre-set for values that may exist in the future
  485. Buffer.prototype.length = undefined
  486. Buffer.prototype.parent = undefined
  487. function slowToString (encoding, start, end) {
  488. var loweredCase = false
  489. start = start | 0
  490. end = end === undefined || end === Infinity ? this.length : end | 0
  491. if (!encoding) encoding = 'utf8'
  492. if (start < 0) start = 0
  493. if (end > this.length) end = this.length
  494. if (end <= start) return ''
  495. while (true) {
  496. switch (encoding) {
  497. case 'hex':
  498. return hexSlice(this, start, end)
  499. case 'utf8':
  500. case 'utf-8':
  501. return utf8Slice(this, start, end)
  502. case 'ascii':
  503. return asciiSlice(this, start, end)
  504. case 'binary':
  505. return binarySlice(this, start, end)
  506. case 'base64':
  507. return base64Slice(this, start, end)
  508. case 'ucs2':
  509. case 'ucs-2':
  510. case 'utf16le':
  511. case 'utf-16le':
  512. return utf16leSlice(this, start, end)
  513. default:
  514. if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
  515. encoding = (encoding + '').toLowerCase()
  516. loweredCase = true
  517. }
  518. }
  519. }
  520. Buffer.prototype.toString = function toString () {
  521. var length = this.length | 0
  522. if (length === 0) return ''
  523. if (arguments.length === 0) return utf8Slice(this, 0, length)
  524. return slowToString.apply(this, arguments)
  525. }
  526. Buffer.prototype.equals = function equals (b) {
  527. if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
  528. if (this === b) return true
  529. return Buffer.compare(this, b) === 0
  530. }
  531. Buffer.prototype.inspect = function inspect () {
  532. var str = ''
  533. var max = exports.INSPECT_MAX_BYTES
  534. if (this.length > 0) {
  535. str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
  536. if (this.length > max) str += ' ... '
  537. }
  538. return '<Buffer ' + str + '>'
  539. }
  540. Buffer.prototype.compare = function compare (b) {
  541. if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
  542. if (this === b) return 0
  543. return Buffer.compare(this, b)
  544. }
  545. Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
  546. if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
  547. else if (byteOffset < -0x80000000) byteOffset = -0x80000000
  548. byteOffset >>= 0
  549. if (this.length === 0) return -1
  550. if (byteOffset >= this.length) return -1
  551. // Negative offsets start from the end of the buffer
  552. if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
  553. if (typeof val === 'string') {
  554. if (val.length === 0) return -1 // special case: looking for empty string always fails
  555. return String.prototype.indexOf.call(this, val, byteOffset)
  556. }
  557. if (Buffer.isBuffer(val)) {
  558. return arrayIndexOf(this, val, byteOffset)
  559. }
  560. if (typeof val === 'number') {
  561. if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
  562. return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
  563. }
  564. return arrayIndexOf(this, [ val ], byteOffset)
  565. }
  566. function arrayIndexOf (arr, val, byteOffset) {
  567. var foundIndex = -1
  568. for (var i = 0; byteOffset + i < arr.length; i++) {
  569. if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
  570. if (foundIndex === -1) foundIndex = i
  571. if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
  572. } else {
  573. foundIndex = -1
  574. }
  575. }
  576. return -1
  577. }
  578. throw new TypeError('val must be string, number or Buffer')
  579. }
  580. // `get` is deprecated
  581. Buffer.prototype.get = function get (offset) {
  582. console.log('.get() is deprecated. Access using array indexes instead.')
  583. return this.readUInt8(offset)
  584. }
  585. // `set` is deprecated
  586. Buffer.prototype.set = function set (v, offset) {
  587. console.log('.set() is deprecated. Access using array indexes instead.')
  588. return this.writeUInt8(v, offset)
  589. }
  590. function hexWrite (buf, string, offset, length) {
  591. offset = Number(offset) || 0
  592. var remaining = buf.length - offset
  593. if (!length) {
  594. length = remaining
  595. } else {
  596. length = Number(length)
  597. if (length > remaining) {
  598. length = remaining
  599. }
  600. }
  601. // must be an even number of digits
  602. var strLen = string.length
  603. if (strLen % 2 !== 0) throw new Error('Invalid hex string')
  604. if (length > strLen / 2) {
  605. length = strLen / 2
  606. }
  607. for (var i = 0; i < length; i++) {
  608. var parsed = parseInt(string.substr(i * 2, 2), 16)
  609. if (isNaN(parsed)) throw new Error('Invalid hex string')
  610. buf[offset + i] = parsed
  611. }
  612. return i
  613. }
  614. function utf8Write (buf, string, offset, length) {
  615. return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
  616. }
  617. function asciiWrite (buf, string, offset, length) {
  618. return blitBuffer(asciiToBytes(string), buf, offset, length)
  619. }
  620. function binaryWrite (buf, string, offset, length) {
  621. return asciiWrite(buf, string, offset, length)
  622. }
  623. function base64Write (buf, string, offset, length) {
  624. return blitBuffer(base64ToBytes(string), buf, offset, length)
  625. }
  626. function ucs2Write (buf, string, offset, length) {
  627. return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
  628. }
  629. Buffer.prototype.write = function write (string, offset, length, encoding) {
  630. // Buffer#write(string)
  631. if (offset === undefined) {
  632. encoding = 'utf8'
  633. length = this.length
  634. offset = 0
  635. // Buffer#write(string, encoding)
  636. } else if (length === undefined && typeof offset === 'string') {
  637. encoding = offset
  638. length = this.length
  639. offset = 0
  640. // Buffer#write(string, offset[, length][, encoding])
  641. } else if (isFinite(offset)) {
  642. offset = offset | 0
  643. if (isFinite(length)) {
  644. length = length | 0
  645. if (encoding === undefined) encoding = 'utf8'
  646. } else {
  647. encoding = length
  648. length = undefined
  649. }
  650. // legacy write(string, encoding, offset, length) - remove in v0.13
  651. } else {
  652. var swap = encoding
  653. encoding = offset
  654. offset = length | 0
  655. length = swap
  656. }
  657. var remaining = this.length - offset
  658. if (length === undefined || length > remaining) length = remaining
  659. if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
  660. throw new RangeError('attempt to write outside buffer bounds')
  661. }
  662. if (!encoding) encoding = 'utf8'
  663. var loweredCase = false
  664. for (;;) {
  665. switch (encoding) {
  666. case 'hex':
  667. return hexWrite(this, string, offset, length)
  668. case 'utf8':
  669. case 'utf-8':
  670. return utf8Write(this, string, offset, length)
  671. case 'ascii':
  672. return asciiWrite(this, string, offset, length)
  673. case 'binary':
  674. return binaryWrite(this, string, offset, length)
  675. case 'base64':
  676. // Warning: maxLength not taken into account in base64Write
  677. return base64Write(this, string, offset, length)
  678. case 'ucs2':
  679. case 'ucs-2':
  680. case 'utf16le':
  681. case 'utf-16le':
  682. return ucs2Write(this, string, offset, length)
  683. default:
  684. if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
  685. encoding = ('' + encoding).toLowerCase()
  686. loweredCase = true
  687. }
  688. }
  689. }
  690. Buffer.prototype.toJSON = function toJSON () {
  691. return {
  692. type: 'Buffer',
  693. data: Array.prototype.slice.call(this._arr || this, 0)
  694. }
  695. }
  696. function base64Slice (buf, start, end) {
  697. if (start === 0 && end === buf.length) {
  698. return base64.fromByteArray(buf)
  699. } else {
  700. return base64.fromByteArray(buf.slice(start, end))
  701. }
  702. }
  703. function utf8Slice (buf, start, end) {
  704. end = Math.min(buf.length, end)
  705. var res = []
  706. var i = start
  707. while (i < end) {
  708. var firstByte = buf[i]
  709. var codePoint = null
  710. var bytesPerSequence = (firstByte > 0xEF) ? 4
  711. : (firstByte > 0xDF) ? 3
  712. : (firstByte > 0xBF) ? 2
  713. : 1
  714. if (i + bytesPerSequence <= end) {
  715. var secondByte, thirdByte, fourthByte, tempCodePoint
  716. switch (bytesPerSequence) {
  717. case 1:
  718. if (firstByte < 0x80) {
  719. codePoint = firstByte
  720. }
  721. break
  722. case 2:
  723. secondByte = buf[i + 1]
  724. if ((secondByte & 0xC0) === 0x80) {
  725. tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
  726. if (tempCodePoint > 0x7F) {
  727. codePoint = tempCodePoint
  728. }
  729. }
  730. break
  731. case 3:
  732. secondByte = buf[i + 1]
  733. thirdByte = buf[i + 2]
  734. if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
  735. tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
  736. if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
  737. codePoint = tempCodePoint
  738. }
  739. }
  740. break
  741. case 4:
  742. secondByte = buf[i + 1]
  743. thirdByte = buf[i + 2]
  744. fourthByte = buf[i + 3]
  745. if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
  746. tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
  747. if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
  748. codePoint = tempCodePoint
  749. }
  750. }
  751. }
  752. }
  753. if (codePoint === null) {
  754. // we did not generate a valid codePoint so insert a
  755. // replacement char (U+FFFD) and advance only 1 byte
  756. codePoint = 0xFFFD
  757. bytesPerSequence = 1
  758. } else if (codePoint > 0xFFFF) {
  759. // encode to utf16 (surrogate pair dance)
  760. codePoint -= 0x10000
  761. res.push(codePoint >>> 10 & 0x3FF | 0xD800)
  762. codePoint = 0xDC00 | codePoint & 0x3FF
  763. }
  764. res.push(codePoint)
  765. i += bytesPerSequence
  766. }
  767. return decodeCodePointsArray(res)
  768. }
  769. // Based on http://stackoverflow.com/a/22747272/680742, the browser with
  770. // the lowest limit is Chrome, with 0x10000 args.
  771. // We go 1 magnitude less, for safety
  772. var MAX_ARGUMENTS_LENGTH = 0x1000
  773. function decodeCodePointsArray (codePoints) {
  774. var len = codePoints.length
  775. if (len <= MAX_ARGUMENTS_LENGTH) {
  776. return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
  777. }
  778. // Decode in chunks to avoid "call stack size exceeded".
  779. var res = ''
  780. var i = 0
  781. while (i < len) {
  782. res += String.fromCharCode.apply(
  783. String,
  784. codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
  785. )
  786. }
  787. return res
  788. }
  789. function asciiSlice (buf, start, end) {
  790. var ret = ''
  791. end = Math.min(buf.length, end)
  792. for (var i = start; i < end; i++) {
  793. ret += String.fromCharCode(buf[i] & 0x7F)
  794. }
  795. return ret
  796. }
  797. function binarySlice (buf, start, end) {
  798. var ret = ''
  799. end = Math.min(buf.length, end)
  800. for (var i = start; i < end; i++) {
  801. ret += String.fromCharCode(buf[i])
  802. }
  803. return ret
  804. }
  805. function hexSlice (buf, start, end) {
  806. var len = buf.length
  807. if (!start || start < 0) start = 0
  808. if (!end || end < 0 || end > len) end = len
  809. var out = ''
  810. for (var i = start; i < end; i++) {
  811. out += toHex(buf[i])
  812. }
  813. return out
  814. }
  815. function utf16leSlice (buf, start, end) {
  816. var bytes = buf.slice(start, end)
  817. var res = ''
  818. for (var i = 0; i < bytes.length; i += 2) {
  819. res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
  820. }
  821. return res
  822. }
  823. Buffer.prototype.slice = function slice (start, end) {
  824. var len = this.length
  825. start = ~~start
  826. end = end === undefined ? len : ~~end
  827. if (start < 0) {
  828. start += len
  829. if (start < 0) start = 0
  830. } else if (start > len) {
  831. start = len
  832. }
  833. if (end < 0) {
  834. end += len
  835. if (end < 0) end = 0
  836. } else if (end > len) {
  837. end = len
  838. }
  839. if (end < start) end = start
  840. var newBuf
  841. if (Buffer.TYPED_ARRAY_SUPPORT) {
  842. newBuf = Buffer._augment(this.subarray(start, end))
  843. } else {
  844. var sliceLen = end - start
  845. newBuf = new Buffer(sliceLen, undefined)
  846. for (var i = 0; i < sliceLen; i++) {
  847. newBuf[i] = this[i + start]
  848. }
  849. }
  850. if (newBuf.length) newBuf.parent = this.parent || this
  851. return newBuf
  852. }
  853. /*
  854. * Need to make sure that buffer isn't trying to write out of bounds.
  855. */
  856. function checkOffset (offset, ext, length) {
  857. if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
  858. if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
  859. }
  860. Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
  861. offset = offset | 0
  862. byteLength = byteLength | 0
  863. if (!noAssert) checkOffset(offset, byteLength, this.length)
  864. var val = this[offset]
  865. var mul = 1
  866. var i = 0
  867. while (++i < byteLength && (mul *= 0x100)) {
  868. val += this[offset + i] * mul
  869. }
  870. return val
  871. }
  872. Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
  873. offset = offset | 0
  874. byteLength = byteLength | 0
  875. if (!noAssert) {
  876. checkOffset(offset, byteLength, this.length)
  877. }
  878. var val = this[offset + --byteLength]
  879. var mul = 1
  880. while (byteLength > 0 && (mul *= 0x100)) {
  881. val += this[offset + --byteLength] * mul
  882. }
  883. return val
  884. }
  885. Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
  886. if (!noAssert) checkOffset(offset, 1, this.length)
  887. return this[offset]
  888. }
  889. Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
  890. if (!noAssert) checkOffset(offset, 2, this.length)
  891. return this[offset] | (this[offset + 1] << 8)
  892. }
  893. Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
  894. if (!noAssert) checkOffset(offset, 2, this.length)
  895. return (this[offset] << 8) | this[offset + 1]
  896. }
  897. Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
  898. if (!noAssert) checkOffset(offset, 4, this.length)
  899. return ((this[offset]) |
  900. (this[offset + 1] << 8) |
  901. (this[offset + 2] << 16)) +
  902. (this[offset + 3] * 0x1000000)
  903. }
  904. Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
  905. if (!noAssert) checkOffset(offset, 4, this.length)
  906. return (this[offset] * 0x1000000) +
  907. ((this[offset + 1] << 16) |
  908. (this[offset + 2] << 8) |
  909. this[offset + 3])
  910. }
  911. Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
  912. offset = offset | 0
  913. byteLength = byteLength | 0
  914. if (!noAssert) checkOffset(offset, byteLength, this.length)
  915. var val = this[offset]
  916. var mul = 1
  917. var i = 0
  918. while (++i < byteLength && (mul *= 0x100)) {
  919. val += this[offset + i] * mul
  920. }
  921. mul *= 0x80
  922. if (val >= mul) val -= Math.pow(2, 8 * byteLength)
  923. return val
  924. }
  925. Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
  926. offset = offset | 0
  927. byteLength = byteLength | 0
  928. if (!noAssert) checkOffset(offset, byteLength, this.length)
  929. var i = byteLength
  930. var mul = 1
  931. var val = this[offset + --i]
  932. while (i > 0 && (mul *= 0x100)) {
  933. val += this[offset + --i] * mul
  934. }
  935. mul *= 0x80
  936. if (val >= mul) val -= Math.pow(2, 8 * byteLength)
  937. return val
  938. }
  939. Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
  940. if (!noAssert) checkOffset(offset, 1, this.length)
  941. if (!(this[offset] & 0x80)) return (this[offset])
  942. return ((0xff - this[offset] + 1) * -1)
  943. }
  944. Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
  945. if (!noAssert) checkOffset(offset, 2, this.length)
  946. var val = this[offset] | (this[offset + 1] << 8)
  947. return (val & 0x8000) ? val | 0xFFFF0000 : val
  948. }
  949. Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
  950. if (!noAssert) checkOffset(offset, 2, this.length)
  951. var val = this[offset + 1] | (this[offset] << 8)
  952. return (val & 0x8000) ? val | 0xFFFF0000 : val
  953. }
  954. Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
  955. if (!noAssert) checkOffset(offset, 4, this.length)
  956. return (this[offset]) |
  957. (this[offset + 1] << 8) |
  958. (this[offset + 2] << 16) |
  959. (this[offset + 3] << 24)
  960. }
  961. Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
  962. if (!noAssert) checkOffset(offset, 4, this.length)
  963. return (this[offset] << 24) |
  964. (this[offset + 1] << 16) |
  965. (this[offset + 2] << 8) |
  966. (this[offset + 3])
  967. }
  968. Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
  969. if (!noAssert) checkOffset(offset, 4, this.length)
  970. return ieee754.read(this, offset, true, 23, 4)
  971. }
  972. Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
  973. if (!noAssert) checkOffset(offset, 4, this.length)
  974. return ieee754.read(this, offset, false, 23, 4)
  975. }
  976. Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
  977. if (!noAssert) checkOffset(offset, 8, this.length)
  978. return ieee754.read(this, offset, true, 52, 8)
  979. }
  980. Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
  981. if (!noAssert) checkOffset(offset, 8, this.length)
  982. return ieee754.read(this, offset, false, 52, 8)
  983. }
  984. function checkInt (buf, value, offset, ext, max, min) {
  985. if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
  986. if (value > max || value < min) throw new RangeError('value is out of bounds')
  987. if (offset + ext > buf.length) throw new RangeError('index out of range')
  988. }
  989. Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
  990. value = +value
  991. offset = offset | 0
  992. byteLength = byteLength | 0
  993. if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
  994. var mul = 1
  995. var i = 0
  996. this[offset] = value & 0xFF
  997. while (++i < byteLength && (mul *= 0x100)) {
  998. this[offset + i] = (value / mul) & 0xFF
  999. }
  1000. return offset + byteLength
  1001. }
  1002. Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
  1003. value = +value
  1004. offset = offset | 0
  1005. byteLength = byteLength | 0
  1006. if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
  1007. var i = byteLength - 1
  1008. var mul = 1
  1009. this[offset + i] = value & 0xFF
  1010. while (--i >= 0 && (mul *= 0x100)) {
  1011. this[offset + i] = (value / mul) & 0xFF
  1012. }
  1013. return offset + byteLength
  1014. }
  1015. Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
  1016. value = +value
  1017. offset = offset | 0
  1018. if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
  1019. if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
  1020. this[offset] = (value & 0xff)
  1021. return offset + 1
  1022. }
  1023. function objectWriteUInt16 (buf, value, offset, littleEndian) {
  1024. if (value < 0) value = 0xffff + value + 1
  1025. for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
  1026. buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
  1027. (littleEndian ? i : 1 - i) * 8
  1028. }
  1029. }
  1030. Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
  1031. value = +value
  1032. offset = offset | 0
  1033. if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
  1034. if (Buffer.TYPED_ARRAY_SUPPORT) {
  1035. this[offset] = (value & 0xff)
  1036. this[offset + 1] = (value >>> 8)
  1037. } else {
  1038. objectWriteUInt16(this, value, offset, true)
  1039. }
  1040. return offset + 2
  1041. }
  1042. Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
  1043. value = +value
  1044. offset = offset | 0
  1045. if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
  1046. if (Buffer.TYPED_ARRAY_SUPPORT) {
  1047. this[offset] = (value >>> 8)
  1048. this[offset + 1] = (value & 0xff)
  1049. } else {
  1050. objectWriteUInt16(this, value, offset, false)
  1051. }
  1052. return offset + 2
  1053. }
  1054. function objectWriteUInt32 (buf, value, offset, littleEndian) {
  1055. if (value < 0) value = 0xffffffff + value + 1
  1056. for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
  1057. buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
  1058. }
  1059. }
  1060. Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
  1061. value = +value
  1062. offset = offset | 0
  1063. if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
  1064. if (Buffer.TYPED_ARRAY_SUPPORT) {
  1065. this[offset + 3] = (value >>> 24)
  1066. this[offset + 2] = (value >>> 16)
  1067. this[offset + 1] = (value >>> 8)
  1068. this[offset] = (value & 0xff)
  1069. } else {
  1070. objectWriteUInt32(this, value, offset, true)
  1071. }
  1072. return offset + 4
  1073. }
  1074. Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
  1075. value = +value
  1076. offset = offset | 0
  1077. if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
  1078. if (Buffer.TYPED_ARRAY_SUPPORT) {
  1079. this[offset] = (value >>> 24)
  1080. this[offset + 1] = (value >>> 16)
  1081. this[offset + 2] = (value >>> 8)
  1082. this[offset + 3] = (value & 0xff)
  1083. } else {
  1084. objectWriteUInt32(this, value, offset, false)
  1085. }
  1086. return offset + 4
  1087. }
  1088. Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
  1089. value = +value
  1090. offset = offset | 0
  1091. if (!noAssert) {
  1092. var limit = Math.pow(2, 8 * byteLength - 1)
  1093. checkInt(this, value, offset, byteLength, limit - 1, -limit)
  1094. }
  1095. var i = 0
  1096. var mul = 1
  1097. var sub = value < 0 ? 1 : 0
  1098. this[offset] = value & 0xFF
  1099. while (++i < byteLength && (mul *= 0x100)) {
  1100. this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
  1101. }
  1102. return offset + byteLength
  1103. }
  1104. Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
  1105. value = +value
  1106. offset = offset | 0
  1107. if (!noAssert) {
  1108. var limit = Math.pow(2, 8 * byteLength - 1)
  1109. checkInt(this, value, offset, byteLength, limit - 1, -limit)
  1110. }
  1111. var i = byteLength - 1
  1112. var mul = 1
  1113. var sub = value < 0 ? 1 : 0
  1114. this[offset + i] = value & 0xFF
  1115. while (--i >= 0 && (mul *= 0x100)) {
  1116. this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
  1117. }
  1118. return offset + byteLength
  1119. }
  1120. Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
  1121. value = +value
  1122. offset = offset | 0
  1123. if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
  1124. if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
  1125. if (value < 0) value = 0xff + value + 1
  1126. this[offset] = (value & 0xff)
  1127. return offset + 1
  1128. }
  1129. Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
  1130. value = +value
  1131. offset = offset | 0
  1132. if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
  1133. if (Buffer.TYPED_ARRAY_SUPPORT) {
  1134. this[offset] = (value & 0xff)
  1135. this[offset + 1] = (value >>> 8)
  1136. } else {
  1137. objectWriteUInt16(this, value, offset, true)
  1138. }
  1139. return offset + 2
  1140. }
  1141. Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
  1142. value = +value
  1143. offset = offset | 0
  1144. if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
  1145. if (Buffer.TYPED_ARRAY_SUPPORT) {
  1146. this[offset] = (value >>> 8)
  1147. this[offset + 1] = (value & 0xff)
  1148. } else {
  1149. objectWriteUInt16(this, value, offset, false)
  1150. }
  1151. return offset + 2
  1152. }
  1153. Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
  1154. value = +value
  1155. offset = offset | 0
  1156. if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
  1157. if (Buffer.TYPED_ARRAY_SUPPORT) {
  1158. this[offset] = (value & 0xff)
  1159. this[offset + 1] = (value >>> 8)
  1160. this[offset + 2] = (value >>> 16)
  1161. this[offset + 3] = (value >>> 24)
  1162. } else {
  1163. objectWriteUInt32(this, value, offset, true)
  1164. }
  1165. return offset + 4
  1166. }
  1167. Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
  1168. value = +value
  1169. offset = offset | 0
  1170. if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
  1171. if (value < 0) value = 0xffffffff + value + 1
  1172. if (Buffer.TYPED_ARRAY_SUPPORT) {
  1173. this[offset] = (value >>> 24)
  1174. this[offset + 1] = (value >>> 16)
  1175. this[offset + 2] = (value >>> 8)
  1176. this[offset + 3] = (value & 0xff)
  1177. } else {
  1178. objectWriteUInt32(this, value, offset, false)
  1179. }
  1180. return offset + 4
  1181. }
  1182. function checkIEEE754 (buf, value, offset, ext, max, min) {
  1183. if (value > max || value < min) throw new RangeError('value is out of bounds')
  1184. if (offset + ext > buf.length) throw new RangeError('index out of range')
  1185. if (offset < 0) throw new RangeError('index out of range')
  1186. }
  1187. function writeFloat (buf, value, offset, littleEndian, noAssert) {
  1188. if (!noAssert) {
  1189. checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
  1190. }
  1191. ieee754.write(buf, value, offset, littleEndian, 23, 4)
  1192. return offset + 4
  1193. }
  1194. Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
  1195. return writeFloat(this, value, offset, true, noAssert)
  1196. }
  1197. Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
  1198. return writeFloat(this, value, offset, false, noAssert)
  1199. }
  1200. function writeDouble (buf, value, offset, littleEndian, noAssert) {
  1201. if (!noAssert) {
  1202. checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
  1203. }
  1204. ieee754.write(buf, value, offset, littleEndian, 52, 8)
  1205. return offset + 8
  1206. }
  1207. Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
  1208. return writeDouble(this, value, offset, true, noAssert)
  1209. }
  1210. Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
  1211. return writeDouble(this, value, offset, false, noAssert)
  1212. }
  1213. // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
  1214. Buffer.prototype.copy = function copy (target, targetStart, start, end) {
  1215. if (!start) start = 0
  1216. if (!end && end !== 0) end = this.length
  1217. if (targetStart >= target.length) targetStart = target.length
  1218. if (!targetStart) targetStart = 0
  1219. if (end > 0 && end < start) end = start
  1220. // Copy 0 bytes; we're done
  1221. if (end === start) return 0
  1222. if (target.length === 0 || this.length === 0) return 0
  1223. // Fatal error conditions
  1224. if (targetStart < 0) {
  1225. throw new RangeError('targetStart out of bounds')
  1226. }
  1227. if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
  1228. if (end < 0) throw new RangeError('sourceEnd out of bounds')
  1229. // Are we oob?
  1230. if (end > this.length) end = this.length
  1231. if (target.length - targetStart < end - start) {
  1232. end = target.length - targetStart + start
  1233. }
  1234. var len = end - start
  1235. var i
  1236. if (this === target && start < targetStart && targetStart < end) {
  1237. // descending copy from end
  1238. for (i = len - 1; i >= 0; i--) {
  1239. target[i + targetStart] = this[i + start]
  1240. }
  1241. } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
  1242. // ascending copy from start
  1243. for (i = 0; i < len; i++) {
  1244. target[i + targetStart] = this[i + start]
  1245. }
  1246. } else {
  1247. target._set(this.subarray(start, start + len), targetStart)
  1248. }
  1249. return len
  1250. }
  1251. // fill(value, start=0, end=buffer.length)
  1252. Buffer.prototype.fill = function fill (value, start, end) {
  1253. if (!value) value = 0
  1254. if (!start) start = 0
  1255. if (!end) end = this.length
  1256. if (end < start) throw new RangeError('end < start')
  1257. // Fill 0 bytes; we're done
  1258. if (end === start) return
  1259. if (this.length === 0) return
  1260. if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
  1261. if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
  1262. var i
  1263. if (typeof value === 'number') {
  1264. for (i = start; i < end; i++) {
  1265. this[i] = value
  1266. }
  1267. } else {
  1268. var bytes = utf8ToBytes(value.toString())
  1269. var len = bytes.length
  1270. for (i = start; i < end; i++) {
  1271. this[i] = bytes[i % len]
  1272. }
  1273. }
  1274. return this
  1275. }
  1276. /**
  1277. * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
  1278. * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
  1279. */
  1280. Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
  1281. if (typeof Uint8Array !== 'undefined') {
  1282. if (Buffer.TYPED_ARRAY_SUPPORT) {
  1283. return (new Buffer(this)).buffer
  1284. } else {
  1285. var buf = new Uint8Array(this.length)
  1286. for (var i = 0, len = buf.length; i < len; i += 1) {
  1287. buf[i] = this[i]
  1288. }
  1289. return buf.buffer
  1290. }
  1291. } else {
  1292. throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
  1293. }
  1294. }
  1295. // HELPER FUNCTIONS
  1296. // ================
  1297. var BP = Buffer.prototype
  1298. /**
  1299. * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
  1300. */
  1301. Buffer._augment = function _augment (arr) {
  1302. arr.constructor = Buffer
  1303. arr._isBuffer = true
  1304. // save reference to original Uint8Array set method before overwriting
  1305. arr._set = arr.set
  1306. // deprecated
  1307. arr.get = BP.get
  1308. arr.set = BP.set
  1309. arr.write = BP.write
  1310. arr.toString = BP.toString
  1311. arr.toLocaleString = BP.toString
  1312. arr.toJSON = BP.toJSON
  1313. arr.equals = BP.equals
  1314. arr.compare = BP.compare
  1315. arr.indexOf = BP.indexOf
  1316. arr.copy = BP.copy
  1317. arr.slice = BP.slice
  1318. arr.readUIntLE = BP.readUIntLE
  1319. arr.readUIntBE = BP.readUIntBE
  1320. arr.readUInt8 = BP.readUInt8
  1321. arr.readUInt16LE = BP.readUInt16LE
  1322. arr.readUInt16BE = BP.readUInt16BE
  1323. arr.readUInt32LE = BP.readUInt32LE
  1324. arr.readUInt32BE = BP.readUInt32BE
  1325. arr.readIntLE = BP.readIntLE
  1326. arr.readIntBE = BP.readIntBE
  1327. arr.readInt8 = BP.readInt8
  1328. arr.readInt16LE = BP.readInt16LE
  1329. arr.readInt16BE = BP.readInt16BE
  1330. arr.readInt32LE = BP.readInt32LE
  1331. arr.readInt32BE = BP.readInt32BE
  1332. arr.readFloatLE = BP.readFloatLE
  1333. arr.readFloatBE = BP.readFloatBE
  1334. arr.readDoubleLE = BP.readDoubleLE
  1335. arr.readDoubleBE = BP.readDoubleBE
  1336. arr.writeUInt8 = BP.writeUInt8
  1337. arr.writeUIntLE = BP.writeUIntLE
  1338. arr.writeUIntBE = BP.writeUIntBE
  1339. arr.writeUInt16LE = BP.writeUInt16LE
  1340. arr.writeUInt16BE = BP.writeUInt16BE
  1341. arr.writeUInt32LE = BP.writeUInt32LE
  1342. arr.writeUInt32BE = BP.writeUInt32BE
  1343. arr.writeIntLE = BP.writeIntLE
  1344. arr.writeIntBE = BP.writeIntBE
  1345. arr.writeInt8 = BP.writeInt8
  1346. arr.writeInt16LE = BP.writeInt16LE
  1347. arr.writeInt16BE = BP.writeInt16BE
  1348. arr.writeInt32LE = BP.writeInt32LE
  1349. arr.writeInt32BE = BP.writeInt32BE
  1350. arr.writeFloatLE = BP.writeFloatLE
  1351. arr.writeFloatBE = BP.writeFloatBE
  1352. arr.writeDoubleLE = BP.writeDoubleLE
  1353. arr.writeDoubleBE = BP.writeDoubleBE
  1354. arr.fill = BP.fill
  1355. arr.inspect = BP.inspect
  1356. arr.toArrayBuffer = BP.toArrayBuffer
  1357. return arr
  1358. }
  1359. var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
  1360. function base64clean (str) {
  1361. // Node strips out invalid characters like \n and \t from the string, base64-js does not
  1362. str = stringtrim(str).replace(INVALID_BASE64_RE, '')
  1363. // Node converts strings with length < 2 to ''
  1364. if (str.length < 2) return ''
  1365. // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
  1366. while (str.length % 4 !== 0) {
  1367. str = str + '='
  1368. }
  1369. return str
  1370. }
  1371. function stringtrim (str) {
  1372. if (str.trim) return str.trim()
  1373. return str.replace(/^\s+|\s+$/g, '')
  1374. }
  1375. function toHex (n) {
  1376. if (n < 16) return '0' + n.toString(16)
  1377. return n.toString(16)
  1378. }
  1379. function utf8ToBytes (string, units) {
  1380. units = units || Infinity
  1381. var codePoint
  1382. var length = string.length
  1383. var leadSurrogate = null
  1384. var bytes = []
  1385. for (var i = 0; i < length; i++) {
  1386. codePoint = string.charCodeAt(i)
  1387. // is surrogate component
  1388. if (codePoint > 0xD7FF && codePoint < 0xE000) {
  1389. // last char was a lead
  1390. if (!leadSurrogate) {
  1391. // no lead yet
  1392. if (codePoint > 0xDBFF) {
  1393. // unexpected trail
  1394. if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
  1395. continue
  1396. } else if (i + 1 === length) {
  1397. // unpaired lead
  1398. if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
  1399. continue
  1400. }
  1401. // valid lead
  1402. leadSurrogate = codePoint
  1403. continue
  1404. }
  1405. // 2 leads in a row
  1406. if (codePoint < 0xDC00) {
  1407. if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
  1408. leadSurrogate = codePoint
  1409. continue
  1410. }
  1411. // valid surrogate pair
  1412. codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
  1413. } else if (leadSurrogate) {
  1414. // valid bmp char, but last char was a lead
  1415. if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
  1416. }
  1417. leadSurrogate = null
  1418. // encode utf8
  1419. if (codePoint < 0x80) {
  1420. if ((units -= 1) < 0) break
  1421. bytes.push(codePoint)
  1422. } else if (codePoint < 0x800) {
  1423. if ((units -= 2) < 0) break
  1424. bytes.push(
  1425. codePoint >> 0x6 | 0xC0,
  1426. codePoint & 0x3F | 0x80
  1427. )
  1428. } else if (codePoint < 0x10000) {
  1429. if ((units -= 3) < 0) break
  1430. bytes.push(
  1431. codePoint >> 0xC | 0xE0,
  1432. codePoint >> 0x6 & 0x3F | 0x80,
  1433. codePoint & 0x3F | 0x80
  1434. )
  1435. } else if (codePoint < 0x110000) {
  1436. if ((units -= 4) < 0) break
  1437. bytes.push(
  1438. codePoint >> 0x12 | 0xF0,
  1439. codePoint >> 0xC & 0x3F | 0x80,
  1440. codePoint >> 0x6 & 0x3F | 0x80,
  1441. codePoint & 0x3F | 0x80
  1442. )
  1443. } else {
  1444. throw new Error('Invalid code point')
  1445. }
  1446. }
  1447. return bytes
  1448. }
  1449. function asciiToBytes (str) {
  1450. var byteArray = []
  1451. for (var i = 0; i < str.length; i++) {
  1452. // Node's code seems to be doing this and not & 0x7F..
  1453. byteArray.push(str.charCodeAt(i) & 0xFF)
  1454. }
  1455. return byteArray
  1456. }
  1457. function utf16leToBytes (str, units) {
  1458. var c, hi, lo
  1459. var byteArray = []
  1460. for (var i = 0; i < str.length; i++) {
  1461. if ((units -= 2) < 0) break
  1462. c = str.charCodeAt(i)
  1463. hi = c >> 8
  1464. lo = c % 256
  1465. byteArray.push(lo)
  1466. byteArray.push(hi)
  1467. }
  1468. return byteArray
  1469. }
  1470. function base64ToBytes (str) {
  1471. return base64.toByteArray(base64clean(str))
  1472. }
  1473. function blitBuffer (src, dst, offset, length) {
  1474. for (var i = 0; i < length; i++) {
  1475. if ((i + offset >= dst.length) || (i >= src.length)) break
  1476. dst[i + offset] = src[i]
  1477. }
  1478. return i
  1479. }
  1480. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer, (function() { return this; }())))
  1481. /***/ },
  1482. /* 3 */
  1483. /***/ function(module, exports, __webpack_require__) {
  1484. var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
  1485. ;(function (exports) {
  1486. 'use strict';
  1487. var Arr = (typeof Uint8Array !== 'undefined')
  1488. ? Uint8Array
  1489. : Array
  1490. var PLUS = '+'.charCodeAt(0)
  1491. var SLASH = '/'.charCodeAt(0)
  1492. var NUMBER = '0'.charCodeAt(0)
  1493. var LOWER = 'a'.charCodeAt(0)
  1494. var UPPER = 'A'.charCodeAt(0)
  1495. var PLUS_URL_SAFE = '-'.charCodeAt(0)
  1496. var SLASH_URL_SAFE = '_'.charCodeAt(0)
  1497. function decode (elt) {
  1498. var code = elt.charCodeAt(0)
  1499. if (code === PLUS ||
  1500. code === PLUS_URL_SAFE)
  1501. return 62 // '+'
  1502. if (code === SLASH ||
  1503. code === SLASH_URL_SAFE)
  1504. return 63 // '/'
  1505. if (code < NUMBER)
  1506. return -1 //no match
  1507. if (code < NUMBER + 10)
  1508. return code - NUMBER + 26 + 26
  1509. if (code < UPPER + 26)
  1510. return code - UPPER
  1511. if (code < LOWER + 26)
  1512. return code - LOWER + 26
  1513. }
  1514. function b64ToByteArray (b64) {
  1515. var i, j, l, tmp, placeHolders, arr
  1516. if (b64.length % 4 > 0) {
  1517. throw new Error('Invalid string. Length must be a multiple of 4')
  1518. }
  1519. // the number of equal signs (place holders)
  1520. // if there are two placeholders, than the two characters before it
  1521. // represent one byte
  1522. // if there is only one, then the three characters before it represent 2 bytes
  1523. // this is just a cheap hack to not do indexOf twice
  1524. var len = b64.length
  1525. placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
  1526. // base64 is 4/3 + up to two characters of the original data
  1527. arr = new Arr(b64.length * 3 / 4 - placeHolders)
  1528. // if there are placeholders, only get up to the last complete 4 chars
  1529. l = placeHolders > 0 ? b64.length - 4 : b64.length
  1530. var L = 0
  1531. function push (v) {
  1532. arr[L++] = v
  1533. }
  1534. for (i = 0, j = 0; i < l; i += 4, j += 3) {
  1535. tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
  1536. push((tmp & 0xFF0000) >> 16)
  1537. push((tmp & 0xFF00) >> 8)
  1538. push(tmp & 0xFF)
  1539. }
  1540. if (placeHolders === 2) {
  1541. tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
  1542. push(tmp & 0xFF)
  1543. } else if (placeHolders === 1) {
  1544. tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
  1545. push((tmp >> 8) & 0xFF)
  1546. push(tmp & 0xFF)
  1547. }
  1548. return arr
  1549. }
  1550. function uint8ToBase64 (uint8) {
  1551. var i,
  1552. extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
  1553. output = "",
  1554. temp, length
  1555. function encode (num) {
  1556. return lookup.charAt(num)
  1557. }
  1558. function tripletToBase64 (num) {
  1559. return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
  1560. }
  1561. // go through the array every three bytes, we'll deal with trailing stuff later
  1562. for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
  1563. temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
  1564. output += tripletToBase64(temp)
  1565. }
  1566. // pad the end with zeros, but make sure to not forget the extra bytes
  1567. switch (extraBytes) {
  1568. case 1:
  1569. temp = uint8[uint8.length - 1]
  1570. output += encode(temp >> 2)
  1571. output += encode((temp << 4) & 0x3F)
  1572. output += '=='
  1573. break
  1574. case 2:
  1575. temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
  1576. output += encode(temp >> 10)
  1577. output += encode((temp >> 4) & 0x3F)
  1578. output += encode((temp << 2) & 0x3F)
  1579. output += '='
  1580. break
  1581. }
  1582. return output
  1583. }
  1584. exports.toByteArray = b64ToByteArray
  1585. exports.fromByteArray = uint8ToBase64
  1586. }( false ? (this.base64js = {}) : exports))
  1587. /***/ },
  1588. /* 4 */
  1589. /***/ function(module, exports) {
  1590. exports.read = function (buffer, offset, isLE, mLen, nBytes) {
  1591. var e, m
  1592. var eLen = nBytes * 8 - mLen - 1
  1593. var eMax = (1 << eLen) - 1
  1594. var eBias = eMax >> 1
  1595. var nBits = -7
  1596. var i = isLE ? (nBytes - 1) : 0
  1597. var d = isLE ? -1 : 1
  1598. var s = buffer[offset + i]
  1599. i += d
  1600. e = s & ((1 << (-nBits)) - 1)
  1601. s >>= (-nBits)
  1602. nBits += eLen
  1603. for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
  1604. m = e & ((1 << (-nBits)) - 1)
  1605. e >>= (-nBits)
  1606. nBits += mLen
  1607. for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
  1608. if (e === 0) {
  1609. e = 1 - eBias
  1610. } else if (e === eMax) {
  1611. return m ? NaN : ((s ? -1 : 1) * Infinity)
  1612. } else {
  1613. m = m + Math.pow(2, mLen)
  1614. e = e - eBias
  1615. }
  1616. return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
  1617. }
  1618. exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
  1619. var e, m, c
  1620. var eLen = nBytes * 8 - mLen - 1
  1621. var eMax = (1 << eLen) - 1
  1622. var eBias = eMax >> 1
  1623. var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
  1624. var i = isLE ? 0 : (nBytes - 1)
  1625. var d = isLE ? 1 : -1
  1626. var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
  1627. value = Math.abs(value)
  1628. if (isNaN(value) || value === Infinity) {
  1629. m = isNaN(value) ? 1 : 0
  1630. e = eMax
  1631. } else {
  1632. e = Math.floor(Math.log(value) / Math.LN2)
  1633. if (value * (c = Math.pow(2, -e)) < 1) {
  1634. e--
  1635. c *= 2
  1636. }
  1637. if (e + eBias >= 1) {
  1638. value += rt / c
  1639. } else {
  1640. value += rt * Math.pow(2, 1 - eBias)
  1641. }
  1642. if (value * c >= 2) {
  1643. e++
  1644. c /= 2
  1645. }
  1646. if (e + eBias >= eMax) {
  1647. m = 0
  1648. e = eMax
  1649. } else if (e + eBias >= 1) {
  1650. m = (value * c - 1) * Math.pow(2, mLen)
  1651. e = e + eBias
  1652. } else {
  1653. m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
  1654. e = 0
  1655. }
  1656. }
  1657. for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
  1658. e = (e << mLen) | m
  1659. eLen += mLen
  1660. for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
  1661. buffer[offset + i - d] |= s * 128
  1662. }
  1663. /***/ },
  1664. /* 5 */
  1665. /***/ function(module, exports) {
  1666. /**
  1667. * isArray
  1668. */
  1669. var isArray = Array.isArray;
  1670. /**
  1671. * toString
  1672. */
  1673. var str = Object.prototype.toString;
  1674. /**
  1675. * Whether or not the given `val`
  1676. * is an array.
  1677. *
  1678. * example:
  1679. *
  1680. * isArray([]);
  1681. * // > true
  1682. * isArray(arguments);
  1683. * // > false
  1684. * isArray('');
  1685. * // > false
  1686. *
  1687. * @param {mixed} val
  1688. * @return {bool}
  1689. */
  1690. module.exports = isArray || function (val) {
  1691. return !! val && '[object Array]' == str.call(val);
  1692. };
  1693. /***/ },
  1694. /* 6 */
  1695. /***/ function(module, exports, __webpack_require__) {
  1696. /* jslint node: true */
  1697. /* global window */
  1698. 'use strict';
  1699. var _ = __webpack_require__(7);
  1700. var FontProvider = __webpack_require__(9);
  1701. var LayoutBuilder = __webpack_require__(11);
  1702. var PdfKit = __webpack_require__(24);
  1703. var PDFReference = __webpack_require__(46);
  1704. var sizes = __webpack_require__(102);
  1705. var ImageMeasure = __webpack_require__(103);
  1706. var textDecorator = __webpack_require__(104);
  1707. var FontProvider = __webpack_require__(9);
  1708. ////////////////////////////////////////
  1709. // PdfPrinter
  1710. /**
  1711. * @class Creates an instance of a PdfPrinter which turns document definition into a pdf
  1712. *
  1713. * @param {Object} fontDescriptors font definition dictionary
  1714. *
  1715. * @example
  1716. * var fontDescriptors = {
  1717. * Roboto: {
  1718. * normal: 'fonts/Roboto-Regular.ttf',
  1719. * bold: 'fonts/Roboto-Medium.ttf',
  1720. * italics: 'fonts/Roboto-Italic.ttf',
  1721. * bolditalics: 'fonts/Roboto-Italic.ttf'
  1722. * }
  1723. * };
  1724. *
  1725. * var printer = new PdfPrinter(fontDescriptors);
  1726. */
  1727. function PdfPrinter(fontDescriptors) {
  1728. this.fontDescriptors = fontDescriptors;
  1729. }
  1730. /**
  1731. * Executes layout engine for the specified document and renders it into a pdfkit document
  1732. * ready to be saved.
  1733. *
  1734. * @param {Object} docDefinition document definition
  1735. * @param {Object} docDefinition.content an array describing the pdf structure (for more information take a look at the examples in the /examples folder)
  1736. * @param {Object} [docDefinition.defaultStyle] default (implicit) style definition
  1737. * @param {Object} [docDefinition.styles] dictionary defining all styles which can be used in the document
  1738. * @param {Object} [docDefinition.pageSize] page size (pdfkit units, A4 dimensions by default)
  1739. * @param {Number} docDefinition.pageSize.width width
  1740. * @param {Number} docDefinition.pageSize.height height
  1741. * @param {Object} [docDefinition.pageMargins] page margins (pdfkit units)
  1742. *
  1743. * @example
  1744. *
  1745. * var docDefinition = {
  1746. * info: {
  1747. * title: 'awesome Document',
  1748. * author: 'john doe',
  1749. * subject: 'subject of document',
  1750. * keywords: 'keywords for document',
  1751. * },
  1752. * content: [
  1753. * 'First paragraph',
  1754. * 'Second paragraph, this time a little bit longer',
  1755. * { text: 'Third paragraph, slightly bigger font size', fontSize: 20 },
  1756. * { text: 'Another paragraph using a named style', style: 'header' },
  1757. * { text: ['playing with ', 'inlines' ] },
  1758. * { text: ['and ', { text: 'restyling ', bold: true }, 'them'] },
  1759. * ],
  1760. * styles: {
  1761. * header: { fontSize: 30, bold: true }
  1762. * }
  1763. * }
  1764. *
  1765. * var pdfDoc = printer.createPdfKitDocument(docDefinition);
  1766. *
  1767. * pdfDoc.pipe(fs.createWriteStream('sample.pdf'));
  1768. * pdfDoc.end();
  1769. *
  1770. * @return {Object} a pdfKit document object which can be saved or encode to data-url
  1771. */
  1772. PdfPrinter.prototype.createPdfKitDocument = function(docDefinition, options) {
  1773. options = options || {};
  1774. var pageSize = pageSize2widthAndHeight(docDefinition.pageSize || 'a4');
  1775. if(docDefinition.pageOrientation === 'landscape') {
  1776. pageSize = { width: pageSize.height, height: pageSize.width};
  1777. }
  1778. pageSize.orientation = docDefinition.pageOrientation === 'landscape' ? docDefinition.pageOrientation : 'portrait';
  1779. this.pdfKitDoc = new PdfKit({ size: [ pageSize.width, pageSize.height ], compress: false});
  1780. this.pdfKitDoc.info.Producer = 'pdfmake';
  1781. this.pdfKitDoc.info.Creator = 'pdfmake';
  1782. // pdf kit maintains the uppercase fieldnames from pdf spec
  1783. // to keep the pdfmake api consistent, the info field are defined lowercase
  1784. if(docDefinition.info){
  1785. var info = docDefinition.info;
  1786. // check for falsey an set null, so that pdfkit always get either null or value
  1787. this.pdfKitDoc.info.Title = docDefinition.info.title ? docDefinition.info.title : null;
  1788. this.pdfKitDoc.info.Author = docDefinition.info.author ? docDefinition.info.author : null;
  1789. this.pdfKitDoc.info.Subject = docDefinition.info.subject ? docDefinition.info.subject : null;
  1790. this.pdfKitDoc.info.Keywords = docDefinition.info.keywords ? docDefinition.info.keywords : null;
  1791. }
  1792. this.fontProvider = new FontProvider(this.fontDescriptors, this.pdfKitDoc);
  1793. docDefinition.images = docDefinition.images || {};
  1794. var builder = new LayoutBuilder(
  1795. pageSize,
  1796. fixPageMargins(docDefinition.pageMargins || 40),
  1797. new ImageMeasure(this.pdfKitDoc, docDefinition.images));
  1798. registerDefaultTableLayouts(builder);
  1799. if (options.tableLayouts) {
  1800. builder.registerTableLayouts(options.tableLayouts);
  1801. }
  1802. var pages = builder.layoutDocument(docDefinition.content, this.fontProvider, docDefinition.styles || {}, docDefinition.defaultStyle || { fontSize: 12, font: 'Roboto' }, docDefinition.background, docDefinition.header, docDefinition.footer, docDefinition.images, docDefinition.watermark, docDefinition.pageBreakBefore);
  1803. renderPages(pages, this.fontProvider, this.pdfKitDoc);
  1804. if(options.autoPrint){
  1805. var printActionRef = this.pdfKitDoc.ref({
  1806. Type: 'Action',
  1807. S: 'Named',
  1808. N: 'Print'
  1809. });
  1810. this.pdfKitDoc._root.data.OpenAction = printActionRef;
  1811. printActionRef.end();
  1812. }
  1813. return this.pdfKitDoc;
  1814. };
  1815. function fixPageMargins(margin) {
  1816. if (!margin) return null;
  1817. if (typeof margin === 'number' || margin instanceof Number) {
  1818. margin = { left: margin, right: margin, top: margin, bottom: margin };
  1819. } else if (margin instanceof Array) {
  1820. if (margin.length === 2) {
  1821. margin = { left: margin[0], top: margin[1], right: margin[0], bottom: margin[1] };
  1822. } else if (margin.length === 4) {
  1823. margin = { left: margin[0], top: margin[1], right: margin[2], bottom: margin[3] };
  1824. } else throw 'Invalid pageMargins definition';
  1825. }
  1826. return margin;
  1827. }
  1828. function registerDefaultTableLayouts(layoutBuilder) {
  1829. layoutBuilder.registerTableLayouts({
  1830. noBorders: {
  1831. hLineWidth: function(i) { return 0; },
  1832. vLineWidth: function(i) { return 0; },
  1833. paddingLeft: function(i) { return i && 4 || 0; },
  1834. paddingRight: function(i, node) { return (i < node.table.widths.length - 1) ? 4 : 0; },
  1835. },
  1836. headerLineOnly: {
  1837. hLineWidth: function(i, node) {
  1838. if (i === 0 || i === node.table.body.length) return 0;
  1839. return (i === node.table.headerRows) ? 2 : 0;
  1840. },
  1841. vLineWidth: function(i) { return 0; },
  1842. paddingLeft: function(i) {
  1843. return i === 0 ? 0 : 8;
  1844. },
  1845. paddingRight: function(i, node) {
  1846. return (i === node.table.widths.length - 1) ? 0 : 8;
  1847. }
  1848. },
  1849. lightHorizontalLines: {
  1850. hLineWidth: function(i, node) {
  1851. if (i === 0 || i === node.table.body.length) return 0;
  1852. return (i === node.table.headerRows) ? 2 : 1;
  1853. },
  1854. vLineWidth: function(i) { return 0; },
  1855. hLineColor: function(i) { return i === 1 ? 'black' : '#aaa'; },
  1856. paddingLeft: function(i) {
  1857. return i === 0 ? 0 : 8;
  1858. },
  1859. paddingRight: function(i, node) {
  1860. return (i === node.table.widths.length - 1) ? 0 : 8;
  1861. }
  1862. }
  1863. });
  1864. }
  1865. var defaultLayout = {
  1866. hLineWidth: function(i, node) { return 1; }, //return node.table.headerRows && i === node.table.headerRows && 3 || 0; },
  1867. vLineWidth: function(i, node) { return 1; },
  1868. hLineColor: function(i, node) { return 'black'; },
  1869. vLineColor: function(i, node) { return 'black'; },
  1870. paddingLeft: function(i, node) { return 4; }, //i && 4 || 0; },
  1871. paddingRight: function(i, node) { return 4; }, //(i < node.table.widths.length - 1) ? 4 : 0; },
  1872. paddingTop: function(i, node) { return 2; },
  1873. paddingBottom: function(i, node) { return 2; }
  1874. };
  1875. function pageSize2widthAndHeight(pageSize) {
  1876. if (typeof pageSize == 'string' || pageSize instanceof String) {
  1877. var size = sizes[pageSize.toUpperCase()];
  1878. if (!size) throw ('Page size ' + pageSize + ' not recognized');
  1879. return { width: size[0], height: size[1] };
  1880. }
  1881. return pageSize;
  1882. }
  1883. function StringObject(str){
  1884. this.isString = true;
  1885. this.toString = function(){
  1886. return str;
  1887. };
  1888. }
  1889. function updatePageOrientationInOptions(currentPage, pdfKitDoc) {
  1890. var previousPageOrientation = pdfKitDoc.options.size[0] > pdfKitDoc.options.size[1] ? 'landscape' : 'portrait';
  1891. if(currentPage.pageSize.orientation !== previousPageOrientation) {
  1892. var width = pdfKitDoc.options.size[0];
  1893. var height = pdfKitDoc.options.size[1];
  1894. pdfKitDoc.options.size = [height, width];
  1895. }
  1896. }
  1897. function renderPages(pages, fontProvider, pdfKitDoc) {
  1898. pdfKitDoc._pdfMakePages = pages;
  1899. for (var i = 0; i < pages.length; i++) {
  1900. if (i > 0) {
  1901. updatePageOrientationInOptions(pages[i], pdfKitDoc);
  1902. pdfKitDoc.addPage(pdfKitDoc.options);
  1903. }
  1904. var page = pages[i];
  1905. for(var ii = 0, il = page.items.length; ii < il; ii++) {
  1906. var item = page.items[ii];
  1907. switch(item.type) {
  1908. case 'vector':
  1909. renderVector(item.item, pdfKitDoc);
  1910. break;
  1911. case 'line':
  1912. renderLine(item.item, item.item.x, item.item.y, pdfKitDoc);
  1913. break;
  1914. case 'image':
  1915. renderImage(item.item, item.item.x, item.item.y, pdfKitDoc);
  1916. break;
  1917. }
  1918. }
  1919. if(page.watermark){
  1920. renderWatermark(page, pdfKitDoc);
  1921. }
  1922. fontProvider.setFontRefsToPdfDoc();
  1923. }
  1924. }
  1925. function renderLine(line, x, y, pdfKitDoc) {
  1926. x = x || 0;
  1927. y = y || 0;
  1928. var lineHeight = line.getHeight();
  1929. var ascenderHeight = line.getAscenderHeight();
  1930. textDecorator.drawBackground(line, x, y, pdfKitDoc);
  1931. //TODO: line.optimizeInlines();
  1932. for(var i = 0, l = line.inlines.length; i < l; i++) {
  1933. var inline = line.inlines[i];
  1934. pdfKitDoc.fill(inline.color || 'black');
  1935. pdfKitDoc.save();
  1936. pdfKitDoc.transform(1, 0, 0, -1, 0, pdfKitDoc.page.height);
  1937. var encoded = inline.font.encode(inline.text);
  1938. pdfKitDoc.addContent('BT');
  1939. pdfKitDoc.addContent('' + (x + inline.x) + ' ' + (pdfKitDoc.page.height - y - ascenderHeight) + ' Td');
  1940. pdfKitDoc.addContent('/' + encoded.fontId + ' ' + inline.fontSize + ' Tf');
  1941. pdfKitDoc.addContent('<' + encoded.encodedText + '> Tj');
  1942. pdfKitDoc.addContent('ET');
  1943. if (inline.link) {
  1944. pdfKitDoc.link(x + inline.x, pdfKitDoc.page.height - y - lineHeight, inline.width, lineHeight, inline.link);
  1945. }
  1946. pdfKitDoc.restore();
  1947. }
  1948. textDecorator.drawDecorations(line, x, y, pdfKitDoc);
  1949. }
  1950. function renderWatermark(page, pdfKitDoc){
  1951. var watermark = page.watermark;
  1952. pdfKitDoc.fill('black');
  1953. pdfKitDoc.opacity(0.6);
  1954. pdfKitDoc.save();
  1955. pdfKitDoc.transform(1, 0, 0, -1, 0, pdfKitDoc.page.height);
  1956. var angle = Math.atan2(pdfKitDoc.page.height, pdfKitDoc.page.width) * 180/Math.PI;
  1957. pdfKitDoc.rotate(angle, {origin: [pdfKitDoc.page.width/2, pdfKitDoc.page.height/2]});
  1958. var encoded = watermark.font.encode(watermark.text);
  1959. pdfKitDoc.addContent('BT');
  1960. pdfKitDoc.addContent('' + (pdfKitDoc.page.width/2 - watermark.size.size.width/2) + ' ' + (pdfKitDoc.page.height/2 - watermark.size.size.height/4) + ' Td');
  1961. pdfKitDoc.addContent('/' + encoded.fontId + ' ' + watermark.size.fontSize + ' Tf');
  1962. pdfKitDoc.addContent('<' + encoded.encodedText + '> Tj');
  1963. pdfKitDoc.addContent('ET');
  1964. pdfKitDoc.restore();
  1965. }
  1966. function renderVector(vector, pdfDoc) {
  1967. //TODO: pdf optimization (there's no need to write all properties everytime)
  1968. pdfDoc.lineWidth(vector.lineWidth || 1);
  1969. if (vector.dash) {
  1970. pdfDoc.dash(vector.dash.length, { space: vector.dash.space || vector.dash.length });
  1971. } else {
  1972. pdfDoc.undash();
  1973. }
  1974. pdfDoc.fillOpacity(vector.fillOpacity || 1);
  1975. pdfDoc.strokeOpacity(vector.strokeOpacity || 1);
  1976. pdfDoc.lineJoin(vector.lineJoin || 'miter');
  1977. //TODO: clipping
  1978. switch(vector.type) {
  1979. case 'ellipse':
  1980. pdfDoc.ellipse(vector.x, vector.y, vector.r1, vector.r2);
  1981. break;
  1982. case 'rect':
  1983. if (vector.r) {
  1984. pdfDoc.roundedRect(vector.x, vector.y, vector.w, vector.h, vector.r);
  1985. } else {
  1986. pdfDoc.rect(vector.x, vector.y, vector.w, vector.h);
  1987. }
  1988. break;
  1989. case 'line':
  1990. pdfDoc.moveTo(vector.x1, vector.y1);
  1991. pdfDoc.lineTo(vector.x2, vector.y2);
  1992. break;
  1993. case 'polyline':
  1994. if (vector.points.length === 0) break;
  1995. pdfDoc.moveTo(vector.points[0].x, vector.points[0].y);
  1996. for(var i = 1, l = vector.points.length; i < l; i++) {
  1997. pdfDoc.lineTo(vector.points[i].x, vector.points[i].y);
  1998. }
  1999. if (vector.points.length > 1) {
  2000. var p1 = vector.points[0];
  2001. var pn = vector.points[vector.points.length - 1];
  2002. if (vector.closePath || p1.x === pn.x && p1.y === pn.y) {
  2003. pdfDoc.closePath();
  2004. }
  2005. }
  2006. break;
  2007. }
  2008. if (vector.color && vector.lineColor) {
  2009. pdfDoc.fillAndStroke(vector.color, vector.lineColor);
  2010. } else if (vector.color) {
  2011. pdfDoc.fill(vector.color);
  2012. } else {
  2013. pdfDoc.stroke(vector.lineColor || 'black');
  2014. }
  2015. }
  2016. function renderImage(image, x, y, pdfKitDoc) {
  2017. pdfKitDoc.image(image.image, image.x, image.y, { width: image._width, height: image._height });
  2018. }
  2019. module.exports = PdfPrinter;
  2020. /* temporary browser extension */
  2021. PdfPrinter.prototype.fs = __webpack_require__(44);
  2022. /***/ },
  2023. /* 7 */
  2024. /***/ function(module, exports, __webpack_require__) {
  2025. var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(module, global) {/**
  2026. * @license
  2027. * lodash 3.10.1 (Custom Build) <https://lodash.com/>
  2028. * Build: `lodash modern -d -o ./index.js`
  2029. * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
  2030. * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
  2031. * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
  2032. * Available under MIT license <https://lodash.com/license>
  2033. */
  2034. ;(function() {
  2035. /** Used as a safe reference for `undefined` in pre-ES5 environments. */
  2036. var undefined;
  2037. /** Used as the semantic version number. */
  2038. var VERSION = '3.10.1';
  2039. /** Used to compose bitmasks for wrapper metadata. */
  2040. var BIND_FLAG = 1,
  2041. BIND_KEY_FLAG = 2,
  2042. CURRY_BOUND_FLAG = 4,
  2043. CURRY_FLAG = 8,
  2044. CURRY_RIGHT_FLAG = 16,
  2045. PARTIAL_FLAG = 32,
  2046. PARTIAL_RIGHT_FLAG = 64,
  2047. ARY_FLAG = 128,
  2048. REARG_FLAG = 256;
  2049. /** Used as default options for `_.trunc`. */
  2050. var DEFAULT_TRUNC_LENGTH = 30,
  2051. DEFAULT_TRUNC_OMISSION = '...';
  2052. /** Used to detect when a function becomes hot. */
  2053. var HOT_COUNT = 150,
  2054. HOT_SPAN = 16;
  2055. /** Used as the size to enable large array optimizations. */
  2056. var LARGE_ARRAY_SIZE = 200;
  2057. /** Used to indicate the type of lazy iteratees. */
  2058. var LAZY_FILTER_FLAG = 1,
  2059. LAZY_MAP_FLAG = 2;
  2060. /** Used as the `TypeError` message for "Functions" methods. */
  2061. var FUNC_ERROR_TEXT = 'Expected a function';
  2062. /** Used as the internal argument placeholder. */
  2063. var PLACEHOLDER = '__lodash_placeholder__';
  2064. /** `Object#toString` result references. */
  2065. var argsTag = '[object Arguments]',
  2066. arrayTag = '[object Array]',
  2067. boolTag = '[object Boolean]',
  2068. dateTag = '[object Date]',
  2069. errorTag = '[object Error]',
  2070. funcTag = '[object Function]',
  2071. mapTag = '[object Map]',
  2072. numberTag = '[object Number]',
  2073. objectTag = '[object Object]',
  2074. regexpTag = '[object RegExp]',
  2075. setTag = '[object Set]',
  2076. stringTag = '[object String]',
  2077. weakMapTag = '[object WeakMap]';
  2078. var arrayBufferTag = '[object ArrayBuffer]',
  2079. float32Tag = '[object Float32Array]',
  2080. float64Tag = '[object Float64Array]',
  2081. int8Tag = '[object Int8Array]',
  2082. int16Tag = '[object Int16Array]',
  2083. int32Tag = '[object Int32Array]',
  2084. uint8Tag = '[object Uint8Array]',
  2085. uint8ClampedTag = '[object Uint8ClampedArray]',
  2086. uint16Tag = '[object Uint16Array]',
  2087. uint32Tag = '[object Uint32Array]';
  2088. /** Used to match empty string literals in compiled template source. */
  2089. var reEmptyStringLeading = /\b__p \+= '';/g,
  2090. reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
  2091. reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
  2092. /** Used to match HTML entities and HTML characters. */
  2093. var reEscapedHtml = /&(?:amp|lt|gt|quot|#39|#96);/g,
  2094. reUnescapedHtml = /[&<>"'`]/g,
  2095. reHasEscapedHtml = RegExp(reEscapedHtml.source),
  2096. reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
  2097. /** Used to match template delimiters. */
  2098. var reEscape = /<%-([\s\S]+?)%>/g,
  2099. reEvaluate = /<%([\s\S]+?)%>/g,
  2100. reInterpolate = /<%=([\s\S]+?)%>/g;
  2101. /** Used to match property names within property paths. */
  2102. var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,
  2103. reIsPlainProp = /^\w*$/,
  2104. rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g;
  2105. /**
  2106. * Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns)
  2107. * and those outlined by [`EscapeRegExpPattern`](http://ecma-international.org/ecma-262/6.0/#sec-escaperegexppattern).
  2108. */
  2109. var reRegExpChars = /^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g,
  2110. reHasRegExpChars = RegExp(reRegExpChars.source);
  2111. /** Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). */
  2112. var reComboMark = /[\u0300-\u036f\ufe20-\ufe23]/g;
  2113. /** Used to match backslashes in property paths. */
  2114. var reEscapeChar = /\\(\\)?/g;
  2115. /** Used to match [ES template delimiters](http://ecma-international.org/ecma-262/6.0/#sec-template-literal-lexical-components). */
  2116. var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
  2117. /** Used to match `RegExp` flags from their coerced string values. */
  2118. var reFlags = /\w*$/;
  2119. /** Used to detect hexadecimal string values. */
  2120. var reHasHexPrefix = /^0[xX]/;
  2121. /** Used to detect host constructors (Safari > 5). */
  2122. var reIsHostCtor = /^\[object .+?Constructor\]$/;
  2123. /** Used to detect unsigned integer values. */
  2124. var reIsUint = /^\d+$/;
  2125. /** Used to match latin-1 supplementary letters (excluding mathematical operators). */
  2126. var reLatin1 = /[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g;
  2127. /** Used to ensure capturing order of template delimiters. */
  2128. var reNoMatch = /($^)/;
  2129. /** Used to match unescaped characters in compiled string literals. */
  2130. var reUnescapedString = /['\n\r\u2028\u2029\\]/g;
  2131. /** Used to match words to create compound words. */
  2132. var reWords = (function() {
  2133. var upper = '[A-Z\\xc0-\\xd6\\xd8-\\xde]',
  2134. lower = '[a-z\\xdf-\\xf6\\xf8-\\xff]+';
  2135. return RegExp(upper + '+(?=' + upper + lower + ')|' + upper + '?' + lower + '|' + upper + '+|[0-9]+', 'g');
  2136. }());
  2137. /** Used to assign default `context` object properties. */
  2138. var contextProps = [
  2139. 'Array', 'ArrayBuffer', 'Date', 'Error', 'Float32Array', 'Float64Array',
  2140. 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Math', 'Number',
  2141. 'Object', 'RegExp', 'Set', 'String', '_', 'clearTimeout', 'isFinite',
  2142. 'parseFloat', 'parseInt', 'setTimeout', 'TypeError', 'Uint8Array',
  2143. 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap'
  2144. ];
  2145. /** Used to make template sourceURLs easier to identify. */
  2146. var templateCounter = -1;
  2147. /** Used to identify `toStringTag` values of typed arrays. */
  2148. var typedArrayTags = {};
  2149. typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
  2150. typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
  2151. typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
  2152. typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
  2153. typedArrayTags[uint32Tag] = true;
  2154. typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
  2155. typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
  2156. typedArrayTags[dateTag] = typedArrayTags[errorTag] =
  2157. typedArrayTags[funcTag] = typedArrayTags[mapTag] =
  2158. typedArrayTags[numberTag] = typedArrayTags[objectTag] =
  2159. typedArrayTags[regexpTag] = typedArrayTags[setTag] =
  2160. typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;
  2161. /** Used to identify `toStringTag` values supported by `_.clone`. */
  2162. var cloneableTags = {};
  2163. cloneableTags[argsTag] = cloneableTags[arrayTag] =
  2164. cloneableTags[arrayBufferTag] = cloneableTags[boolTag] =
  2165. cloneableTags[dateTag] = cloneableTags[float32Tag] =
  2166. cloneableTags[float64Tag] = cloneableTags[int8Tag] =
  2167. cloneableTags[int16Tag] = cloneableTags[int32Tag] =
  2168. cloneableTags[numberTag] = cloneableTags[objectTag] =
  2169. cloneableTags[regexpTag] = cloneableTags[stringTag] =
  2170. cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
  2171. cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
  2172. cloneableTags[errorTag] = cloneableTags[funcTag] =
  2173. cloneableTags[mapTag] = cloneableTags[setTag] =
  2174. cloneableTags[weakMapTag] = false;
  2175. /** Used to map latin-1 supplementary letters to basic latin letters. */
  2176. var deburredLetters = {
  2177. '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A',
  2178. '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a',
  2179. '\xc7': 'C', '\xe7': 'c',
  2180. '\xd0': 'D', '\xf0': 'd',
  2181. '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E',
  2182. '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e',
  2183. '\xcC': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I',
  2184. '\xeC': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i',
  2185. '\xd1': 'N', '\xf1': 'n',
  2186. '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O',
  2187. '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o',
  2188. '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U',
  2189. '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u',
  2190. '\xdd': 'Y', '\xfd': 'y', '\xff': 'y',
  2191. '\xc6': 'Ae', '\xe6': 'ae',
  2192. '\xde': 'Th', '\xfe': 'th',
  2193. '\xdf': 'ss'
  2194. };
  2195. /** Used to map characters to HTML entities. */
  2196. var htmlEscapes = {
  2197. '&': '&amp;',
  2198. '<': '&lt;',
  2199. '>': '&gt;',
  2200. '"': '&quot;',
  2201. "'": '&#39;',
  2202. '`': '&#96;'
  2203. };
  2204. /** Used to map HTML entities to characters. */
  2205. var htmlUnescapes = {
  2206. '&amp;': '&',
  2207. '&lt;': '<',
  2208. '&gt;': '>',
  2209. '&quot;': '"',
  2210. '&#39;': "'",
  2211. '&#96;': '`'
  2212. };
  2213. /** Used to determine if values are of the language type `Object`. */
  2214. var objectTypes = {
  2215. 'function': true,
  2216. 'object': true
  2217. };
  2218. /** Used to escape characters for inclusion in compiled regexes. */
  2219. var regexpEscapes = {
  2220. '0': 'x30', '1': 'x31', '2': 'x32', '3': 'x33', '4': 'x34',
  2221. '5': 'x35', '6': 'x36', '7': 'x37', '8': 'x38', '9': 'x39',
  2222. 'A': 'x41', 'B': 'x42', 'C': 'x43', 'D': 'x44', 'E': 'x45', 'F': 'x46',
  2223. 'a': 'x61', 'b': 'x62', 'c': 'x63', 'd': 'x64', 'e': 'x65', 'f': 'x66',
  2224. 'n': 'x6e', 'r': 'x72', 't': 'x74', 'u': 'x75', 'v': 'x76', 'x': 'x78'
  2225. };
  2226. /** Used to escape characters for inclusion in compiled string literals. */
  2227. var stringEscapes = {
  2228. '\\': '\\',
  2229. "'": "'",
  2230. '\n': 'n',
  2231. '\r': 'r',
  2232. '\u2028': 'u2028',
  2233. '\u2029': 'u2029'
  2234. };
  2235. /** Detect free variable `exports`. */
  2236. var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;
  2237. /** Detect free variable `module`. */
  2238. var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;
  2239. /** Detect free variable `global` from Node.js. */
  2240. var freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;
  2241. /** Detect free variable `self`. */
  2242. var freeSelf = objectTypes[typeof self] && self && self.Object && self;
  2243. /** Detect free variable `window`. */
  2244. var freeWindow = objectTypes[typeof window] && window && window.Object && window;
  2245. /** Detect the popular CommonJS extension `module.exports`. */
  2246. var moduleExports = freeModule && freeModule.exports === freeExports && freeExports;
  2247. /**
  2248. * Used as a reference to the global object.
  2249. *
  2250. * The `this` value is used if it's the global object to avoid Greasemonkey's
  2251. * restricted `window` object, otherwise the `window` object is used.
  2252. */
  2253. var root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;
  2254. /*--------------------------------------------------------------------------*/
  2255. /**
  2256. * The base implementation of `compareAscending` which compares values and
  2257. * sorts them in ascending order without guaranteeing a stable sort.
  2258. *
  2259. * @private
  2260. * @param {*} value The value to compare.
  2261. * @param {*} other The other value to compare.
  2262. * @returns {number} Returns the sort order indicator for `value`.
  2263. */
  2264. function baseCompareAscending(value, other) {
  2265. if (value !== other) {
  2266. var valIsNull = value === null,
  2267. valIsUndef = value === undefined,
  2268. valIsReflexive = value === value;
  2269. var othIsNull = other === null,
  2270. othIsUndef = other === undefined,
  2271. othIsReflexive = other === other;
  2272. if ((value > other && !othIsNull) || !valIsReflexive ||
  2273. (valIsNull && !othIsUndef && othIsReflexive) ||
  2274. (valIsUndef && othIsReflexive)) {
  2275. return 1;
  2276. }
  2277. if ((value < other && !valIsNull) || !othIsReflexive ||
  2278. (othIsNull && !valIsUndef && valIsReflexive) ||
  2279. (othIsUndef && valIsReflexive)) {
  2280. return -1;
  2281. }
  2282. }
  2283. return 0;
  2284. }
  2285. /**
  2286. * The base implementation of `_.findIndex` and `_.findLastIndex` without
  2287. * support for callback shorthands and `this` binding.
  2288. *
  2289. * @private
  2290. * @param {Array} array The array to search.
  2291. * @param {Function} predicate The function invoked per iteration.
  2292. * @param {boolean} [fromRight] Specify iterating from right to left.
  2293. * @returns {number} Returns the index of the matched value, else `-1`.
  2294. */
  2295. function baseFindIndex(array, predicate, fromRight) {
  2296. var length = array.length,
  2297. index = fromRight ? length : -1;
  2298. while ((fromRight ? index-- : ++index < length)) {
  2299. if (predicate(array[index], index, array)) {
  2300. return index;
  2301. }
  2302. }
  2303. return -1;
  2304. }
  2305. /**
  2306. * The base implementation of `_.indexOf` without support for binary searches.
  2307. *
  2308. * @private
  2309. * @param {Array} array The array to search.
  2310. * @param {*} value The value to search for.
  2311. * @param {number} fromIndex The index to search from.
  2312. * @returns {number} Returns the index of the matched value, else `-1`.
  2313. */
  2314. function baseIndexOf(array, value, fromIndex) {
  2315. if (value !== value) {
  2316. return indexOfNaN(array, fromIndex);
  2317. }
  2318. var index = fromIndex - 1,
  2319. length = array.length;
  2320. while (++index < length) {
  2321. if (array[index] === value) {
  2322. return index;
  2323. }
  2324. }
  2325. return -1;
  2326. }
  2327. /**
  2328. * The base implementation of `_.isFunction` without support for environments
  2329. * with incorrect `typeof` results.
  2330. *
  2331. * @private
  2332. * @param {*} value The value to check.
  2333. * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
  2334. */
  2335. function baseIsFunction(value) {
  2336. // Avoid a Chakra JIT bug in compatibility modes of IE 11.
  2337. // See https://github.com/jashkenas/underscore/issues/1621 for more details.
  2338. return typeof value == 'function' || false;
  2339. }
  2340. /**
  2341. * Converts `value` to a string if it's not one. An empty string is returned
  2342. * for `null` or `undefined` values.
  2343. *
  2344. * @private
  2345. * @param {*} value The value to process.
  2346. * @returns {string} Returns the string.
  2347. */
  2348. function baseToString(value) {
  2349. return value == null ? '' : (value + '');
  2350. }
  2351. /**
  2352. * Used by `_.trim` and `_.trimLeft` to get the index of the first character
  2353. * of `string` that is not found in `chars`.
  2354. *
  2355. * @private
  2356. * @param {string} string The string to inspect.
  2357. * @param {string} chars The characters to find.
  2358. * @returns {number} Returns the index of the first character not found in `chars`.
  2359. */
  2360. function charsLeftIndex(string, chars) {
  2361. var index = -1,
  2362. length = string.length;
  2363. while (++index < length && chars.indexOf(string.charAt(index)) > -1) {}
  2364. return index;
  2365. }
  2366. /**
  2367. * Used by `_.trim` and `_.trimRight` to get the index of the last character
  2368. * of `string` that is not found in `chars`.
  2369. *
  2370. * @private
  2371. * @param {string} string The string to inspect.
  2372. * @param {string} chars The characters to find.
  2373. * @returns {number} Returns the index of the last character not found in `chars`.
  2374. */
  2375. function charsRightIndex(string, chars) {
  2376. var index = string.length;
  2377. while (index-- && chars.indexOf(string.charAt(index)) > -1) {}
  2378. return index;
  2379. }
  2380. /**
  2381. * Used by `_.sortBy` to compare transformed elements of a collection and stable
  2382. * sort them in ascending order.
  2383. *
  2384. * @private
  2385. * @param {Object} object The object to compare.
  2386. * @param {Object} other The other object to compare.
  2387. * @returns {number} Returns the sort order indicator for `object`.
  2388. */
  2389. function compareAscending(object, other) {
  2390. return baseCompareAscending(object.criteria, other.criteria) || (object.index - other.index);
  2391. }
  2392. /**
  2393. * Used by `_.sortByOrder` to compare multiple properties of a value to another
  2394. * and stable sort them.
  2395. *
  2396. * If `orders` is unspecified, all valuess are sorted in ascending order. Otherwise,
  2397. * a value is sorted in ascending order if its corresponding order is "asc", and
  2398. * descending if "desc".
  2399. *
  2400. * @private
  2401. * @param {Object} object The object to compare.
  2402. * @param {Object} other The other object to compare.
  2403. * @param {boolean[]} orders The order to sort by for each property.
  2404. * @returns {number} Returns the sort order indicator for `object`.
  2405. */
  2406. function compareMultiple(object, other, orders) {
  2407. var index = -1,
  2408. objCriteria = object.criteria,
  2409. othCriteria = other.criteria,
  2410. length = objCriteria.length,
  2411. ordersLength = orders.length;
  2412. while (++index < length) {
  2413. var result = baseCompareAscending(objCriteria[index], othCriteria[index]);
  2414. if (result) {
  2415. if (index >= ordersLength) {
  2416. return result;
  2417. }
  2418. var order = orders[index];
  2419. return result * ((order === 'asc' || order === true) ? 1 : -1);
  2420. }
  2421. }
  2422. // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
  2423. // that causes it, under certain circumstances, to provide the same value for
  2424. // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247
  2425. // for more details.
  2426. //
  2427. // This also ensures a stable sort in V8 and other engines.
  2428. // See https://code.google.com/p/v8/issues/detail?id=90 for more details.
  2429. return object.index - other.index;
  2430. }
  2431. /**
  2432. * Used by `_.deburr` to convert latin-1 supplementary letters to basic latin letters.
  2433. *
  2434. * @private
  2435. * @param {string} letter The matched letter to deburr.
  2436. * @returns {string} Returns the deburred letter.
  2437. */
  2438. function deburrLetter(letter) {
  2439. return deburredLetters[letter];
  2440. }
  2441. /**
  2442. * Used by `_.escape` to convert characters to HTML entities.
  2443. *
  2444. * @private
  2445. * @param {string} chr The matched character to escape.
  2446. * @returns {string} Returns the escaped character.
  2447. */
  2448. function escapeHtmlChar(chr) {
  2449. return htmlEscapes[chr];
  2450. }
  2451. /**
  2452. * Used by `_.escapeRegExp` to escape characters for inclusion in compiled regexes.
  2453. *
  2454. * @private
  2455. * @param {string} chr The matched character to escape.
  2456. * @param {string} leadingChar The capture group for a leading character.
  2457. * @param {string} whitespaceChar The capture group for a whitespace character.
  2458. * @returns {string} Returns the escaped character.
  2459. */
  2460. function escapeRegExpChar(chr, leadingChar, whitespaceChar) {
  2461. if (leadingChar) {
  2462. chr = regexpEscapes[chr];
  2463. } else if (whitespaceChar) {
  2464. chr = stringEscapes[chr];
  2465. }
  2466. return '\\' + chr;
  2467. }
  2468. /**
  2469. * Used by `_.template` to escape characters for inclusion in compiled string literals.
  2470. *
  2471. * @private
  2472. * @param {string} chr The matched character to escape.
  2473. * @returns {string} Returns the escaped character.
  2474. */
  2475. function escapeStringChar(chr) {
  2476. return '\\' + stringEscapes[chr];
  2477. }
  2478. /**
  2479. * Gets the index at which the first occurrence of `NaN` is found in `array`.
  2480. *
  2481. * @private
  2482. * @param {Array} array The array to search.
  2483. * @param {number} fromIndex The index to search from.
  2484. * @param {boolean} [fromRight] Specify iterating from right to left.
  2485. * @returns {number} Returns the index of the matched `NaN`, else `-1`.
  2486. */
  2487. function indexOfNaN(array, fromIndex, fromRight) {
  2488. var length = array.length,
  2489. index = fromIndex + (fromRight ? 0 : -1);
  2490. while ((fromRight ? index-- : ++index < length)) {
  2491. var other = array[index];
  2492. if (other !== other) {
  2493. return index;
  2494. }
  2495. }
  2496. return -1;
  2497. }
  2498. /**
  2499. * Checks if `value` is object-like.
  2500. *
  2501. * @private
  2502. * @param {*} value The value to check.
  2503. * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
  2504. */
  2505. function isObjectLike(value) {
  2506. return !!value && typeof value == 'object';
  2507. }
  2508. /**
  2509. * Used by `trimmedLeftIndex` and `trimmedRightIndex` to determine if a
  2510. * character code is whitespace.
  2511. *
  2512. * @private
  2513. * @param {number} charCode The character code to inspect.
  2514. * @returns {boolean} Returns `true` if `charCode` is whitespace, else `false`.
  2515. */
  2516. function isSpace(charCode) {
  2517. return ((charCode <= 160 && (charCode >= 9 && charCode <= 13) || charCode == 32 || charCode == 160) || charCode == 5760 || charCode == 6158 ||
  2518. (charCode >= 8192 && (charCode <= 8202 || charCode == 8232 || charCode == 8233 || charCode == 8239 || charCode == 8287 || charCode == 12288 || charCode == 65279)));
  2519. }
  2520. /**
  2521. * Replaces all `placeholder` elements in `array` with an internal placeholder
  2522. * and returns an array of their indexes.
  2523. *
  2524. * @private
  2525. * @param {Array} array The array to modify.
  2526. * @param {*} placeholder The placeholder to replace.
  2527. * @returns {Array} Returns the new array of placeholder indexes.
  2528. */
  2529. function replaceHolders(array, placeholder) {
  2530. var index = -1,
  2531. length = array.length,
  2532. resIndex = -1,
  2533. result = [];
  2534. while (++index < length) {
  2535. if (array[index] === placeholder) {
  2536. array[index] = PLACEHOLDER;
  2537. result[++resIndex] = index;
  2538. }
  2539. }
  2540. return result;
  2541. }
  2542. /**
  2543. * An implementation of `_.uniq` optimized for sorted arrays without support
  2544. * for callback shorthands and `this` binding.
  2545. *
  2546. * @private
  2547. * @param {Array} array The array to inspect.
  2548. * @param {Function} [iteratee] The function invoked per iteration.
  2549. * @returns {Array} Returns the new duplicate-value-free array.
  2550. */
  2551. function sortedUniq(array, iteratee) {
  2552. var seen,
  2553. index = -1,
  2554. length = array.length,
  2555. resIndex = -1,
  2556. result = [];
  2557. while (++index < length) {
  2558. var value = array[index],
  2559. computed = iteratee ? iteratee(value, index, array) : value;
  2560. if (!index || seen !== computed) {
  2561. seen = computed;
  2562. result[++resIndex] = value;
  2563. }
  2564. }
  2565. return result;
  2566. }
  2567. /**
  2568. * Used by `_.trim` and `_.trimLeft` to get the index of the first non-whitespace
  2569. * character of `string`.
  2570. *
  2571. * @private
  2572. * @param {string} string The string to inspect.
  2573. * @returns {number} Returns the index of the first non-whitespace character.
  2574. */
  2575. function trimmedLeftIndex(string) {
  2576. var index = -1,
  2577. length = string.length;
  2578. while (++index < length && isSpace(string.charCodeAt(index))) {}
  2579. return index;
  2580. }
  2581. /**
  2582. * Used by `_.trim` and `_.trimRight` to get the index of the last non-whitespace
  2583. * character of `string`.
  2584. *
  2585. * @private
  2586. * @param {string} string The string to inspect.
  2587. * @returns {number} Returns the index of the last non-whitespace character.
  2588. */
  2589. function trimmedRightIndex(string) {
  2590. var index = string.length;
  2591. while (index-- && isSpace(string.charCodeAt(index))) {}
  2592. return index;
  2593. }
  2594. /**
  2595. * Used by `_.unescape` to convert HTML entities to characters.
  2596. *
  2597. * @private
  2598. * @param {string} chr The matched character to unescape.
  2599. * @returns {string} Returns the unescaped character.
  2600. */
  2601. function unescapeHtmlChar(chr) {
  2602. return htmlUnescapes[chr];
  2603. }
  2604. /*--------------------------------------------------------------------------*/
  2605. /**
  2606. * Create a new pristine `lodash` function using the given `context` object.
  2607. *
  2608. * @static
  2609. * @memberOf _
  2610. * @category Utility
  2611. * @param {Object} [context=root] The context object.
  2612. * @returns {Function} Returns a new `lodash` function.
  2613. * @example
  2614. *
  2615. * _.mixin({ 'foo': _.constant('foo') });
  2616. *
  2617. * var lodash = _.runInContext();
  2618. * lodash.mixin({ 'bar': lodash.constant('bar') });
  2619. *
  2620. * _.isFunction(_.foo);
  2621. * // => true
  2622. * _.isFunction(_.bar);
  2623. * // => false
  2624. *
  2625. * lodash.isFunction(lodash.foo);
  2626. * // => false
  2627. * lodash.isFunction(lodash.bar);
  2628. * // => true
  2629. *
  2630. * // using `context` to mock `Date#getTime` use in `_.now`
  2631. * var mock = _.runInContext({
  2632. * 'Date': function() {
  2633. * return { 'getTime': getTimeMock };
  2634. * }
  2635. * });
  2636. *
  2637. * // or creating a suped-up `defer` in Node.js
  2638. * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;
  2639. */
  2640. function runInContext(context) {
  2641. // Avoid issues with some ES3 environments that attempt to use values, named
  2642. // after built-in constructors like `Object`, for the creation of literals.
  2643. // ES5 clears this up by stating that literals must use built-in constructors.
  2644. // See https://es5.github.io/#x11.1.5 for more details.
  2645. context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root;
  2646. /** Native constructor references. */
  2647. var Array = context.Array,
  2648. Date = context.Date,
  2649. Error = context.Error,
  2650. Function = context.Function,
  2651. Math = context.Math,
  2652. Number = context.Number,
  2653. Object = context.Object,
  2654. RegExp = context.RegExp,
  2655. String = context.String,
  2656. TypeError = context.TypeError;
  2657. /** Used for native method references. */
  2658. var arrayProto = Array.prototype,
  2659. objectProto = Object.prototype,
  2660. stringProto = String.prototype;
  2661. /** Used to resolve the decompiled source of functions. */
  2662. var fnToString = Function.prototype.toString;
  2663. /** Used to check objects for own properties. */
  2664. var hasOwnProperty = objectProto.hasOwnProperty;
  2665. /** Used to generate unique IDs. */
  2666. var idCounter = 0;
  2667. /**
  2668. * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
  2669. * of values.
  2670. */
  2671. var objToString = objectProto.toString;
  2672. /** Used to restore the original `_` reference in `_.noConflict`. */
  2673. var oldDash = root._;
  2674. /** Used to detect if a method is native. */
  2675. var reIsNative = RegExp('^' +
  2676. fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&')
  2677. .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
  2678. );
  2679. /** Native method references. */
  2680. var ArrayBuffer = context.ArrayBuffer,
  2681. clearTimeout = context.clearTimeout,
  2682. parseFloat = context.parseFloat,
  2683. pow = Math.pow,
  2684. propertyIsEnumerable = objectProto.propertyIsEnumerable,
  2685. Set = getNative(context, 'Set'),
  2686. setTimeout = context.setTimeout,
  2687. splice = arrayProto.splice,
  2688. Uint8Array = context.Uint8Array,
  2689. WeakMap = getNative(context, 'WeakMap');
  2690. /* Native method references for those with the same name as other `lodash` methods. */
  2691. var nativeCeil = Math.ceil,
  2692. nativeCreate = getNative(Object, 'create'),
  2693. nativeFloor = Math.floor,
  2694. nativeIsArray = getNative(Array, 'isArray'),
  2695. nativeIsFinite = context.isFinite,
  2696. nativeKeys = getNative(Object, 'keys'),
  2697. nativeMax = Math.max,
  2698. nativeMin = Math.min,
  2699. nativeNow = getNative(Date, 'now'),
  2700. nativeParseInt = context.parseInt,
  2701. nativeRandom = Math.random;
  2702. /** Used as references for `-Infinity` and `Infinity`. */
  2703. var NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY,
  2704. POSITIVE_INFINITY = Number.POSITIVE_INFINITY;
  2705. /** Used as references for the maximum length and index of an array. */
  2706. var MAX_ARRAY_LENGTH = 4294967295,
  2707. MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,
  2708. HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;
  2709. /**
  2710. * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)
  2711. * of an array-like value.
  2712. */
  2713. var MAX_SAFE_INTEGER = 9007199254740991;
  2714. /** Used to store function metadata. */
  2715. var metaMap = WeakMap && new WeakMap;
  2716. /** Used to lookup unminified function names. */
  2717. var realNames = {};
  2718. /*------------------------------------------------------------------------*/
  2719. /**
  2720. * Creates a `lodash` object which wraps `value` to enable implicit chaining.
  2721. * Methods that operate on and return arrays, collections, and functions can
  2722. * be chained together. Methods that retrieve a single value or may return a
  2723. * primitive value will automatically end the chain returning the unwrapped
  2724. * value. Explicit chaining may be enabled using `_.chain`. The execution of
  2725. * chained methods is lazy, that is, execution is deferred until `_#value`
  2726. * is implicitly or explicitly called.
  2727. *
  2728. * Lazy evaluation allows several methods to support shortcut fusion. Shortcut
  2729. * fusion is an optimization strategy which merge iteratee calls; this can help
  2730. * to avoid the creation of intermediate data structures and greatly reduce the
  2731. * number of iteratee executions.
  2732. *
  2733. * Chaining is supported in custom builds as long as the `_#value` method is
  2734. * directly or indirectly included in the build.
  2735. *
  2736. * In addition to lodash methods, wrappers have `Array` and `String` methods.
  2737. *
  2738. * The wrapper `Array` methods are:
  2739. * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`,
  2740. * `splice`, and `unshift`
  2741. *
  2742. * The wrapper `String` methods are:
  2743. * `replace` and `split`
  2744. *
  2745. * The wrapper methods that support shortcut fusion are:
  2746. * `compact`, `drop`, `dropRight`, `dropRightWhile`, `dropWhile`, `filter`,
  2747. * `first`, `initial`, `last`, `map`, `pluck`, `reject`, `rest`, `reverse`,
  2748. * `slice`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, `toArray`,
  2749. * and `where`
  2750. *
  2751. * The chainable wrapper methods are:
  2752. * `after`, `ary`, `assign`, `at`, `before`, `bind`, `bindAll`, `bindKey`,
  2753. * `callback`, `chain`, `chunk`, `commit`, `compact`, `concat`, `constant`,
  2754. * `countBy`, `create`, `curry`, `debounce`, `defaults`, `defaultsDeep`,
  2755. * `defer`, `delay`, `difference`, `drop`, `dropRight`, `dropRightWhile`,
  2756. * `dropWhile`, `fill`, `filter`, `flatten`, `flattenDeep`, `flow`, `flowRight`,
  2757. * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`,
  2758. * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`,
  2759. * `invoke`, `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`,
  2760. * `matchesProperty`, `memoize`, `merge`, `method`, `methodOf`, `mixin`,
  2761. * `modArgs`, `negate`, `omit`, `once`, `pairs`, `partial`, `partialRight`,
  2762. * `partition`, `pick`, `plant`, `pluck`, `property`, `propertyOf`, `pull`,
  2763. * `pullAt`, `push`, `range`, `rearg`, `reject`, `remove`, `rest`, `restParam`,
  2764. * `reverse`, `set`, `shuffle`, `slice`, `sort`, `sortBy`, `sortByAll`,
  2765. * `sortByOrder`, `splice`, `spread`, `take`, `takeRight`, `takeRightWhile`,
  2766. * `takeWhile`, `tap`, `throttle`, `thru`, `times`, `toArray`, `toPlainObject`,
  2767. * `transform`, `union`, `uniq`, `unshift`, `unzip`, `unzipWith`, `values`,
  2768. * `valuesIn`, `where`, `without`, `wrap`, `xor`, `zip`, `zipObject`, `zipWith`
  2769. *
  2770. * The wrapper methods that are **not** chainable by default are:
  2771. * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clone`, `cloneDeep`,
  2772. * `deburr`, `endsWith`, `escape`, `escapeRegExp`, `every`, `find`, `findIndex`,
  2773. * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `findWhere`, `first`,
  2774. * `floor`, `get`, `gt`, `gte`, `has`, `identity`, `includes`, `indexOf`,
  2775. * `inRange`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`,
  2776. * `isEmpty`, `isEqual`, `isError`, `isFinite` `isFunction`, `isMatch`,
  2777. * `isNative`, `isNaN`, `isNull`, `isNumber`, `isObject`, `isPlainObject`,
  2778. * `isRegExp`, `isString`, `isUndefined`, `isTypedArray`, `join`, `kebabCase`,
  2779. * `last`, `lastIndexOf`, `lt`, `lte`, `max`, `min`, `noConflict`, `noop`,
  2780. * `now`, `pad`, `padLeft`, `padRight`, `parseInt`, `pop`, `random`, `reduce`,
  2781. * `reduceRight`, `repeat`, `result`, `round`, `runInContext`, `shift`, `size`,
  2782. * `snakeCase`, `some`, `sortedIndex`, `sortedLastIndex`, `startCase`,
  2783. * `startsWith`, `sum`, `template`, `trim`, `trimLeft`, `trimRight`, `trunc`,
  2784. * `unescape`, `uniqueId`, `value`, and `words`
  2785. *
  2786. * The wrapper method `sample` will return a wrapped value when `n` is provided,
  2787. * otherwise an unwrapped value is returned.
  2788. *
  2789. * @name _
  2790. * @constructor
  2791. * @category Chain
  2792. * @param {*} value The value to wrap in a `lodash` instance.
  2793. * @returns {Object} Returns the new `lodash` wrapper instance.
  2794. * @example
  2795. *
  2796. * var wrapped = _([1, 2, 3]);
  2797. *
  2798. * // returns an unwrapped value
  2799. * wrapped.reduce(function(total, n) {
  2800. * return total + n;
  2801. * });
  2802. * // => 6
  2803. *
  2804. * // returns a wrapped value
  2805. * var squares = wrapped.map(function(n) {
  2806. * return n * n;
  2807. * });
  2808. *
  2809. * _.isArray(squares);
  2810. * // => false
  2811. *
  2812. * _.isArray(squares.value());
  2813. * // => true
  2814. */
  2815. function lodash(value) {
  2816. if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {
  2817. if (value instanceof LodashWrapper) {
  2818. return value;
  2819. }
  2820. if (hasOwnProperty.call(value, '__chain__') && hasOwnProperty.call(value, '__wrapped__')) {
  2821. return wrapperClone(value);
  2822. }
  2823. }
  2824. return new LodashWrapper(value);
  2825. }
  2826. /**
  2827. * The function whose prototype all chaining wrappers inherit from.
  2828. *
  2829. * @private
  2830. */
  2831. function baseLodash() {
  2832. // No operation performed.
  2833. }
  2834. /**
  2835. * The base constructor for creating `lodash` wrapper objects.
  2836. *
  2837. * @private
  2838. * @param {*} value The value to wrap.
  2839. * @param {boolean} [chainAll] Enable chaining for all wrapper methods.
  2840. * @param {Array} [actions=[]] Actions to peform to resolve the unwrapped value.
  2841. */
  2842. function LodashWrapper(value, chainAll, actions) {
  2843. this.__wrapped__ = value;
  2844. this.__actions__ = actions || [];
  2845. this.__chain__ = !!chainAll;
  2846. }
  2847. /**
  2848. * An object environment feature flags.
  2849. *
  2850. * @static
  2851. * @memberOf _
  2852. * @type Object
  2853. */
  2854. var support = lodash.support = {};
  2855. /**
  2856. * By default, the template delimiters used by lodash are like those in
  2857. * embedded Ruby (ERB). Change the following template settings to use
  2858. * alternative delimiters.
  2859. *
  2860. * @static
  2861. * @memberOf _
  2862. * @type Object
  2863. */
  2864. lodash.templateSettings = {
  2865. /**
  2866. * Used to detect `data` property values to be HTML-escaped.
  2867. *
  2868. * @memberOf _.templateSettings
  2869. * @type RegExp
  2870. */
  2871. 'escape': reEscape,
  2872. /**
  2873. * Used to detect code to be evaluated.
  2874. *
  2875. * @memberOf _.templateSettings
  2876. * @type RegExp
  2877. */
  2878. 'evaluate': reEvaluate,
  2879. /**
  2880. * Used to detect `data` property values to inject.
  2881. *
  2882. * @memberOf _.templateSettings
  2883. * @type RegExp
  2884. */
  2885. 'interpolate': reInterpolate,
  2886. /**
  2887. * Used to reference the data object in the template text.
  2888. *
  2889. * @memberOf _.templateSettings
  2890. * @type string
  2891. */
  2892. 'variable': '',
  2893. /**
  2894. * Used to import variables into the compiled template.
  2895. *
  2896. * @memberOf _.templateSettings
  2897. * @type Object
  2898. */
  2899. 'imports': {
  2900. /**
  2901. * A reference to the `lodash` function.
  2902. *
  2903. * @memberOf _.templateSettings.imports
  2904. * @type Function
  2905. */
  2906. '_': lodash
  2907. }
  2908. };
  2909. /*------------------------------------------------------------------------*/
  2910. /**
  2911. * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.
  2912. *
  2913. * @private
  2914. * @param {*} value The value to wrap.
  2915. */
  2916. function LazyWrapper(value) {
  2917. this.__wrapped__ = value;
  2918. this.__actions__ = [];
  2919. this.__dir__ = 1;
  2920. this.__filtered__ = false;
  2921. this.__iteratees__ = [];
  2922. this.__takeCount__ = POSITIVE_INFINITY;
  2923. this.__views__ = [];
  2924. }
  2925. /**
  2926. * Creates a clone of the lazy wrapper object.
  2927. *
  2928. * @private
  2929. * @name clone
  2930. * @memberOf LazyWrapper
  2931. * @returns {Object} Returns the cloned `LazyWrapper` object.
  2932. */
  2933. function lazyClone() {
  2934. var result = new LazyWrapper(this.__wrapped__);
  2935. result.__actions__ = arrayCopy(this.__actions__);
  2936. result.__dir__ = this.__dir__;
  2937. result.__filtered__ = this.__filtered__;
  2938. result.__iteratees__ = arrayCopy(this.__iteratees__);
  2939. result.__takeCount__ = this.__takeCount__;
  2940. result.__views__ = arrayCopy(this.__views__);
  2941. return result;
  2942. }
  2943. /**
  2944. * Reverses the direction of lazy iteration.
  2945. *
  2946. * @private
  2947. * @name reverse
  2948. * @memberOf LazyWrapper
  2949. * @returns {Object} Returns the new reversed `LazyWrapper` object.
  2950. */
  2951. function lazyReverse() {
  2952. if (this.__filtered__) {
  2953. var result = new LazyWrapper(this);
  2954. result.__dir__ = -1;
  2955. result.__filtered__ = true;
  2956. } else {
  2957. result = this.clone();
  2958. result.__dir__ *= -1;
  2959. }
  2960. return result;
  2961. }
  2962. /**
  2963. * Extracts the unwrapped value from its lazy wrapper.
  2964. *
  2965. * @private
  2966. * @name value
  2967. * @memberOf LazyWrapper
  2968. * @returns {*} Returns the unwrapped value.
  2969. */
  2970. function lazyValue() {
  2971. var array = this.__wrapped__.value(),
  2972. dir = this.__dir__,
  2973. isArr = isArray(array),
  2974. isRight = dir < 0,
  2975. arrLength = isArr ? array.length : 0,
  2976. view = getView(0, arrLength, this.__views__),
  2977. start = view.start,
  2978. end = view.end,
  2979. length = end - start,
  2980. index = isRight ? end : (start - 1),
  2981. iteratees = this.__iteratees__,
  2982. iterLength = iteratees.length,
  2983. resIndex = 0,
  2984. takeCount = nativeMin(length, this.__takeCount__);
  2985. if (!isArr || arrLength < LARGE_ARRAY_SIZE || (arrLength == length && takeCount == length)) {
  2986. return baseWrapperValue((isRight && isArr) ? array.reverse() : array, this.__actions__);
  2987. }
  2988. var result = [];
  2989. outer:
  2990. while (length-- && resIndex < takeCount) {
  2991. index += dir;
  2992. var iterIndex = -1,
  2993. value = array[index];
  2994. while (++iterIndex < iterLength) {
  2995. var data = iteratees[iterIndex],
  2996. iteratee = data.iteratee,
  2997. type = data.type,
  2998. computed = iteratee(value);
  2999. if (type == LAZY_MAP_FLAG) {
  3000. value = computed;
  3001. } else if (!computed) {
  3002. if (type == LAZY_FILTER_FLAG) {
  3003. continue outer;
  3004. } else {
  3005. break outer;
  3006. }
  3007. }
  3008. }
  3009. result[resIndex++] = value;
  3010. }
  3011. return result;
  3012. }
  3013. /*------------------------------------------------------------------------*/
  3014. /**
  3015. * Creates a cache object to store key/value pairs.
  3016. *
  3017. * @private
  3018. * @static
  3019. * @name Cache
  3020. * @memberOf _.memoize
  3021. */
  3022. function MapCache() {
  3023. this.__data__ = {};
  3024. }
  3025. /**
  3026. * Removes `key` and its value from the cache.
  3027. *
  3028. * @private
  3029. * @name delete
  3030. * @memberOf _.memoize.Cache
  3031. * @param {string} key The key of the value to remove.
  3032. * @returns {boolean} Returns `true` if the entry was removed successfully, else `false`.
  3033. */
  3034. function mapDelete(key) {
  3035. return this.has(key) && delete this.__data__[key];
  3036. }
  3037. /**
  3038. * Gets the cached value for `key`.
  3039. *
  3040. * @private
  3041. * @name get
  3042. * @memberOf _.memoize.Cache
  3043. * @param {string} key The key of the value to get.
  3044. * @returns {*} Returns the cached value.
  3045. */
  3046. function mapGet(key) {
  3047. return key == '__proto__' ? undefined : this.__data__[key];
  3048. }
  3049. /**
  3050. * Checks if a cached value for `key` exists.
  3051. *
  3052. * @private
  3053. * @name has
  3054. * @memberOf _.memoize.Cache
  3055. * @param {string} key The key of the entry to check.
  3056. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
  3057. */
  3058. function mapHas(key) {
  3059. return key != '__proto__' && hasOwnProperty.call(this.__data__, key);
  3060. }
  3061. /**
  3062. * Sets `value` to `key` of the cache.
  3063. *
  3064. * @private
  3065. * @name set
  3066. * @memberOf _.memoize.Cache
  3067. * @param {string} key The key of the value to cache.
  3068. * @param {*} value The value to cache.
  3069. * @returns {Object} Returns the cache object.
  3070. */
  3071. function mapSet(key, value) {
  3072. if (key != '__proto__') {
  3073. this.__data__[key] = value;
  3074. }
  3075. return this;
  3076. }
  3077. /*------------------------------------------------------------------------*/
  3078. /**
  3079. *
  3080. * Creates a cache object to store unique values.
  3081. *
  3082. * @private
  3083. * @param {Array} [values] The values to cache.
  3084. */
  3085. function SetCache(values) {
  3086. var length = values ? values.length : 0;
  3087. this.data = { 'hash': nativeCreate(null), 'set': new Set };
  3088. while (length--) {
  3089. this.push(values[length]);
  3090. }
  3091. }
  3092. /**
  3093. * Checks if `value` is in `cache` mimicking the return signature of
  3094. * `_.indexOf` by returning `0` if the value is found, else `-1`.
  3095. *
  3096. * @private
  3097. * @param {Object} cache The cache to search.
  3098. * @param {*} value The value to search for.
  3099. * @returns {number} Returns `0` if `value` is found, else `-1`.
  3100. */
  3101. function cacheIndexOf(cache, value) {
  3102. var data = cache.data,
  3103. result = (typeof value == 'string' || isObject(value)) ? data.set.has(value) : data.hash[value];
  3104. return result ? 0 : -1;
  3105. }
  3106. /**
  3107. * Adds `value` to the cache.
  3108. *
  3109. * @private
  3110. * @name push
  3111. * @memberOf SetCache
  3112. * @param {*} value The value to cache.
  3113. */
  3114. function cachePush(value) {
  3115. var data = this.data;
  3116. if (typeof value == 'string' || isObject(value)) {
  3117. data.set.add(value);
  3118. } else {
  3119. data.hash[value] = true;
  3120. }
  3121. }
  3122. /*------------------------------------------------------------------------*/
  3123. /**
  3124. * Creates a new array joining `array` with `other`.
  3125. *
  3126. * @private
  3127. * @param {Array} array The array to join.
  3128. * @param {Array} other The other array to join.
  3129. * @returns {Array} Returns the new concatenated array.
  3130. */
  3131. function arrayConcat(array, other) {
  3132. var index = -1,
  3133. length = array.length,
  3134. othIndex = -1,
  3135. othLength = other.length,
  3136. result = Array(length + othLength);
  3137. while (++index < length) {
  3138. result[index] = array[index];
  3139. }
  3140. while (++othIndex < othLength) {
  3141. result[index++] = other[othIndex];
  3142. }
  3143. return result;
  3144. }
  3145. /**
  3146. * Copies the values of `source` to `array`.
  3147. *
  3148. * @private
  3149. * @param {Array} source The array to copy values from.
  3150. * @param {Array} [array=[]] The array to copy values to.
  3151. * @returns {Array} Returns `array`.
  3152. */
  3153. function arrayCopy(source, array) {
  3154. var index = -1,
  3155. length = source.length;
  3156. array || (array = Array(length));
  3157. while (++index < length) {
  3158. array[index] = source[index];
  3159. }
  3160. return array;
  3161. }
  3162. /**
  3163. * A specialized version of `_.forEach` for arrays without support for callback
  3164. * shorthands and `this` binding.
  3165. *
  3166. * @private
  3167. * @param {Array} array The array to iterate over.
  3168. * @param {Function} iteratee The function invoked per iteration.
  3169. * @returns {Array} Returns `array`.
  3170. */
  3171. function arrayEach(array, iteratee) {
  3172. var index = -1,
  3173. length = array.length;
  3174. while (++index < length) {
  3175. if (iteratee(array[index], index, array) === false) {
  3176. break;
  3177. }
  3178. }
  3179. return array;
  3180. }
  3181. /**
  3182. * A specialized version of `_.forEachRight` for arrays without support for
  3183. * callback shorthands and `this` binding.
  3184. *
  3185. * @private
  3186. * @param {Array} array The array to iterate over.
  3187. * @param {Function} iteratee The function invoked per iteration.
  3188. * @returns {Array} Returns `array`.
  3189. */
  3190. function arrayEachRight(array, iteratee) {
  3191. var length = array.length;
  3192. while (length--) {
  3193. if (iteratee(array[length], length, array) === false) {
  3194. break;
  3195. }
  3196. }
  3197. return array;
  3198. }
  3199. /**
  3200. * A specialized version of `_.every` for arrays without support for callback
  3201. * shorthands and `this` binding.
  3202. *
  3203. * @private
  3204. * @param {Array} array The array to iterate over.
  3205. * @param {Function} predicate The function invoked per iteration.
  3206. * @returns {boolean} Returns `true` if all elements pass the predicate check,
  3207. * else `false`.
  3208. */
  3209. function arrayEvery(array, predicate) {
  3210. var index = -1,
  3211. length = array.length;
  3212. while (++index < length) {
  3213. if (!predicate(array[index], index, array)) {
  3214. return false;
  3215. }
  3216. }
  3217. return true;
  3218. }
  3219. /**
  3220. * A specialized version of `baseExtremum` for arrays which invokes `iteratee`
  3221. * with one argument: (value).
  3222. *
  3223. * @private
  3224. * @param {Array} array The array to iterate over.
  3225. * @param {Function} iteratee The function invoked per iteration.
  3226. * @param {Function} comparator The function used to compare values.
  3227. * @param {*} exValue The initial extremum value.
  3228. * @returns {*} Returns the extremum value.
  3229. */
  3230. function arrayExtremum(array, iteratee, comparator, exValue) {
  3231. var index = -1,
  3232. length = array.length,
  3233. computed = exValue,
  3234. result = computed;
  3235. while (++index < length) {
  3236. var value = array[index],
  3237. current = +iteratee(value);
  3238. if (comparator(current, computed)) {
  3239. computed = current;
  3240. result = value;
  3241. }
  3242. }
  3243. return result;
  3244. }
  3245. /**
  3246. * A specialized version of `_.filter` for arrays without support for callback
  3247. * shorthands and `this` binding.
  3248. *
  3249. * @private
  3250. * @param {Array} array The array to iterate over.
  3251. * @param {Function} predicate The function invoked per iteration.
  3252. * @returns {Array} Returns the new filtered array.
  3253. */
  3254. function arrayFilter(array, predicate) {
  3255. var index = -1,
  3256. length = array.length,
  3257. resIndex = -1,
  3258. result = [];
  3259. while (++index < length) {
  3260. var value = array[index];
  3261. if (predicate(value, index, array)) {
  3262. result[++resIndex] = value;
  3263. }
  3264. }
  3265. return result;
  3266. }
  3267. /**
  3268. * A specialized version of `_.map` for arrays without support for callback
  3269. * shorthands and `this` binding.
  3270. *
  3271. * @private
  3272. * @param {Array} array The array to iterate over.
  3273. * @param {Function} iteratee The function invoked per iteration.
  3274. * @returns {Array} Returns the new mapped array.
  3275. */
  3276. function arrayMap(array, iteratee) {
  3277. var index = -1,
  3278. length = array.length,
  3279. result = Array(length);
  3280. while (++index < length) {
  3281. result[index] = iteratee(array[index], index, array);
  3282. }
  3283. return result;
  3284. }
  3285. /**
  3286. * Appends the elements of `values` to `array`.
  3287. *
  3288. * @private
  3289. * @param {Array} array The array to modify.
  3290. * @param {Array} values The values to append.
  3291. * @returns {Array} Returns `array`.
  3292. */
  3293. function arrayPush(array, values) {
  3294. var index = -1,
  3295. length = values.length,
  3296. offset = array.length;
  3297. while (++index < length) {
  3298. array[offset + index] = values[index];
  3299. }
  3300. return array;
  3301. }
  3302. /**
  3303. * A specialized version of `_.reduce` for arrays without support for callback
  3304. * shorthands and `this` binding.
  3305. *
  3306. * @private
  3307. * @param {Array} array The array to iterate over.
  3308. * @param {Function} iteratee The function invoked per iteration.
  3309. * @param {*} [accumulator] The initial value.
  3310. * @param {boolean} [initFromArray] Specify using the first element of `array`
  3311. * as the initial value.
  3312. * @returns {*} Returns the accumulated value.
  3313. */
  3314. function arrayReduce(array, iteratee, accumulator, initFromArray) {
  3315. var index = -1,
  3316. length = array.length;
  3317. if (initFromArray && length) {
  3318. accumulator = array[++index];
  3319. }
  3320. while (++index < length) {
  3321. accumulator = iteratee(accumulator, array[index], index, array);
  3322. }
  3323. return accumulator;
  3324. }
  3325. /**
  3326. * A specialized version of `_.reduceRight` for arrays without support for
  3327. * callback shorthands and `this` binding.
  3328. *
  3329. * @private
  3330. * @param {Array} array The array to iterate over.
  3331. * @param {Function} iteratee The function invoked per iteration.
  3332. * @param {*} [accumulator] The initial value.
  3333. * @param {boolean} [initFromArray] Specify using the last element of `array`
  3334. * as the initial value.
  3335. * @returns {*} Returns the accumulated value.
  3336. */
  3337. function arrayReduceRight(array, iteratee, accumulator, initFromArray) {
  3338. var length = array.length;
  3339. if (initFromArray && length) {
  3340. accumulator = array[--length];
  3341. }
  3342. while (length--) {
  3343. accumulator = iteratee(accumulator, array[length], length, array);
  3344. }
  3345. return accumulator;
  3346. }
  3347. /**
  3348. * A specialized version of `_.some` for arrays without support for callback
  3349. * shorthands and `this` binding.
  3350. *
  3351. * @private
  3352. * @param {Array} array The array to iterate over.
  3353. * @param {Function} predicate The function invoked per iteration.
  3354. * @returns {boolean} Returns `true` if any element passes the predicate check,
  3355. * else `false`.
  3356. */
  3357. function arraySome(array, predicate) {
  3358. var index = -1,
  3359. length = array.length;
  3360. while (++index < length) {
  3361. if (predicate(array[index], index, array)) {
  3362. return true;
  3363. }
  3364. }
  3365. return false;
  3366. }
  3367. /**
  3368. * A specialized version of `_.sum` for arrays without support for callback
  3369. * shorthands and `this` binding..
  3370. *
  3371. * @private
  3372. * @param {Array} array The array to iterate over.
  3373. * @param {Function} iteratee The function invoked per iteration.
  3374. * @returns {number} Returns the sum.
  3375. */
  3376. function arraySum(array, iteratee) {
  3377. var length = array.length,
  3378. result = 0;
  3379. while (length--) {
  3380. result += +iteratee(array[length]) || 0;
  3381. }
  3382. return result;
  3383. }
  3384. /**
  3385. * Used by `_.defaults` to customize its `_.assign` use.
  3386. *
  3387. * @private
  3388. * @param {*} objectValue The destination object property value.
  3389. * @param {*} sourceValue The source object property value.
  3390. * @returns {*} Returns the value to assign to the destination object.
  3391. */
  3392. function assignDefaults(objectValue, sourceValue) {
  3393. return objectValue === undefined ? sourceValue : objectValue;
  3394. }
  3395. /**
  3396. * Used by `_.template` to customize its `_.assign` use.
  3397. *
  3398. * **Note:** This function is like `assignDefaults` except that it ignores
  3399. * inherited property values when checking if a property is `undefined`.
  3400. *
  3401. * @private
  3402. * @param {*} objectValue The destination object property value.
  3403. * @param {*} sourceValue The source object property value.
  3404. * @param {string} key The key associated with the object and source values.
  3405. * @param {Object} object The destination object.
  3406. * @returns {*} Returns the value to assign to the destination object.
  3407. */
  3408. function assignOwnDefaults(objectValue, sourceValue, key, object) {
  3409. return (objectValue === undefined || !hasOwnProperty.call(object, key))
  3410. ? sourceValue
  3411. : objectValue;
  3412. }
  3413. /**
  3414. * A specialized version of `_.assign` for customizing assigned values without
  3415. * support for argument juggling, multiple sources, and `this` binding `customizer`
  3416. * functions.
  3417. *
  3418. * @private
  3419. * @param {Object} object The destination object.
  3420. * @param {Object} source The source object.
  3421. * @param {Function} customizer The function to customize assigned values.
  3422. * @returns {Object} Returns `object`.
  3423. */
  3424. function assignWith(object, source, customizer) {
  3425. var index = -1,
  3426. props = keys(source),
  3427. length = props.length;
  3428. while (++index < length) {
  3429. var key = props[index],
  3430. value = object[key],
  3431. result = customizer(value, source[key], key, object, source);
  3432. if ((result === result ? (result !== value) : (value === value)) ||
  3433. (value === undefined && !(key in object))) {
  3434. object[key] = result;
  3435. }
  3436. }
  3437. return object;
  3438. }
  3439. /**
  3440. * The base implementation of `_.assign` without support for argument juggling,
  3441. * multiple sources, and `customizer` functions.
  3442. *
  3443. * @private
  3444. * @param {Object} object The destination object.
  3445. * @param {Object} source The source object.
  3446. * @returns {Object} Returns `object`.
  3447. */
  3448. function baseAssign(object, source) {
  3449. return source == null
  3450. ? object
  3451. : baseCopy(source, keys(source), object);
  3452. }
  3453. /**
  3454. * The base implementation of `_.at` without support for string collections
  3455. * and individual key arguments.
  3456. *
  3457. * @private
  3458. * @param {Array|Object} collection The collection to iterate over.
  3459. * @param {number[]|string[]} props The property names or indexes of elements to pick.
  3460. * @returns {Array} Returns the new array of picked elements.
  3461. */
  3462. function baseAt(collection, props) {
  3463. var index = -1,
  3464. isNil = collection == null,
  3465. isArr = !isNil && isArrayLike(collection),
  3466. length = isArr ? collection.length : 0,
  3467. propsLength = props.length,
  3468. result = Array(propsLength);
  3469. while(++index < propsLength) {
  3470. var key = props[index];
  3471. if (isArr) {
  3472. result[index] = isIndex(key, length) ? collection[key] : undefined;
  3473. } else {
  3474. result[index] = isNil ? undefined : collection[key];
  3475. }
  3476. }
  3477. return result;
  3478. }
  3479. /**
  3480. * Copies properties of `source` to `object`.
  3481. *
  3482. * @private
  3483. * @param {Object} source The object to copy properties from.
  3484. * @param {Array} props The property names to copy.
  3485. * @param {Object} [object={}] The object to copy properties to.
  3486. * @returns {Object} Returns `object`.
  3487. */
  3488. function baseCopy(source, props, object) {
  3489. object || (object = {});
  3490. var index = -1,
  3491. length = props.length;
  3492. while (++index < length) {
  3493. var key = props[index];
  3494. object[key] = source[key];
  3495. }
  3496. return object;
  3497. }
  3498. /**
  3499. * The base implementation of `_.callback` which supports specifying the
  3500. * number of arguments to provide to `func`.
  3501. *
  3502. * @private
  3503. * @param {*} [func=_.identity] The value to convert to a callback.
  3504. * @param {*} [thisArg] The `this` binding of `func`.
  3505. * @param {number} [argCount] The number of arguments to provide to `func`.
  3506. * @returns {Function} Returns the callback.
  3507. */
  3508. function baseCallback(func, thisArg, argCount) {
  3509. var type = typeof func;
  3510. if (type == 'function') {
  3511. return thisArg === undefined
  3512. ? func
  3513. : bindCallback(func, thisArg, argCount);
  3514. }
  3515. if (func == null) {
  3516. return identity;
  3517. }
  3518. if (type == 'object') {
  3519. return baseMatches(func);
  3520. }
  3521. return thisArg === undefined
  3522. ? property(func)
  3523. : baseMatchesProperty(func, thisArg);
  3524. }
  3525. /**
  3526. * The base implementation of `_.clone` without support for argument juggling
  3527. * and `this` binding `customizer` functions.
  3528. *
  3529. * @private
  3530. * @param {*} value The value to clone.
  3531. * @param {boolean} [isDeep] Specify a deep clone.
  3532. * @param {Function} [customizer] The function to customize cloning values.
  3533. * @param {string} [key] The key of `value`.
  3534. * @param {Object} [object] The object `value` belongs to.
  3535. * @param {Array} [stackA=[]] Tracks traversed source objects.
  3536. * @param {Array} [stackB=[]] Associates clones with source counterparts.
  3537. * @returns {*} Returns the cloned value.
  3538. */
  3539. function baseClone(value, isDeep, customizer, key, object, stackA, stackB) {
  3540. var result;
  3541. if (customizer) {
  3542. result = object ? customizer(value, key, object) : customizer(value);
  3543. }
  3544. if (result !== undefined) {
  3545. return result;
  3546. }
  3547. if (!isObject(value)) {
  3548. return value;
  3549. }
  3550. var isArr = isArray(value);
  3551. if (isArr) {
  3552. result = initCloneArray(value);
  3553. if (!isDeep) {
  3554. return arrayCopy(value, result);
  3555. }
  3556. } else {
  3557. var tag = objToString.call(value),
  3558. isFunc = tag == funcTag;
  3559. if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
  3560. result = initCloneObject(isFunc ? {} : value);
  3561. if (!isDeep) {
  3562. return baseAssign(result, value);
  3563. }
  3564. } else {
  3565. return cloneableTags[tag]
  3566. ? initCloneByTag(value, tag, isDeep)
  3567. : (object ? value : {});
  3568. }
  3569. }
  3570. // Check for circular references and return its corresponding clone.
  3571. stackA || (stackA = []);
  3572. stackB || (stackB = []);
  3573. var length = stackA.length;
  3574. while (length--) {
  3575. if (stackA[length] == value) {
  3576. return stackB[length];
  3577. }
  3578. }
  3579. // Add the source value to the stack of traversed objects and associate it with its clone.
  3580. stackA.push(value);
  3581. stackB.push(result);
  3582. // Recursively populate clone (susceptible to call stack limits).
  3583. (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) {
  3584. result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB);
  3585. });
  3586. return result;
  3587. }
  3588. /**
  3589. * The base implementation of `_.create` without support for assigning
  3590. * properties to the created object.
  3591. *
  3592. * @private
  3593. * @param {Object} prototype The object to inherit from.
  3594. * @returns {Object} Returns the new object.
  3595. */
  3596. var baseCreate = (function() {
  3597. function object() {}
  3598. return function(prototype) {
  3599. if (isObject(prototype)) {
  3600. object.prototype = prototype;
  3601. var result = new object;
  3602. object.prototype = undefined;
  3603. }
  3604. return result || {};
  3605. };
  3606. }());
  3607. /**
  3608. * The base implementation of `_.delay` and `_.defer` which accepts an index
  3609. * of where to slice the arguments to provide to `func`.
  3610. *
  3611. * @private
  3612. * @param {Function} func The function to delay.
  3613. * @param {number} wait The number of milliseconds to delay invocation.
  3614. * @param {Object} args The arguments provide to `func`.
  3615. * @returns {number} Returns the timer id.
  3616. */
  3617. function baseDelay(func, wait, args) {
  3618. if (typeof func != 'function') {
  3619. throw new TypeError(FUNC_ERROR_TEXT);
  3620. }
  3621. return setTimeout(function() { func.apply(undefined, args); }, wait);
  3622. }
  3623. /**
  3624. * The base implementation of `_.difference` which accepts a single array
  3625. * of values to exclude.
  3626. *
  3627. * @private
  3628. * @param {Array} array The array to inspect.
  3629. * @param {Array} values The values to exclude.
  3630. * @returns {Array} Returns the new array of filtered values.
  3631. */
  3632. function baseDifference(array, values) {
  3633. var length = array ? array.length : 0,
  3634. result = [];
  3635. if (!length) {
  3636. return result;
  3637. }
  3638. var index = -1,
  3639. indexOf = getIndexOf(),
  3640. isCommon = indexOf == baseIndexOf,
  3641. cache = (isCommon && values.length >= LARGE_ARRAY_SIZE) ? createCache(values) : null,
  3642. valuesLength = values.length;
  3643. if (cache) {
  3644. indexOf = cacheIndexOf;
  3645. isCommon = false;
  3646. values = cache;
  3647. }
  3648. outer:
  3649. while (++index < length) {
  3650. var value = array[index];
  3651. if (isCommon && value === value) {
  3652. var valuesIndex = valuesLength;
  3653. while (valuesIndex--) {
  3654. if (values[valuesIndex] === value) {
  3655. continue outer;
  3656. }
  3657. }
  3658. result.push(value);
  3659. }
  3660. else if (indexOf(values, value, 0) < 0) {
  3661. result.push(value);
  3662. }
  3663. }
  3664. return result;
  3665. }
  3666. /**
  3667. * The base implementation of `_.forEach` without support for callback
  3668. * shorthands and `this` binding.
  3669. *
  3670. * @private
  3671. * @param {Array|Object|string} collection The collection to iterate over.
  3672. * @param {Function} iteratee The function invoked per iteration.
  3673. * @returns {Array|Object|string} Returns `collection`.
  3674. */
  3675. var baseEach = createBaseEach(baseForOwn);
  3676. /**
  3677. * The base implementation of `_.forEachRight` without support for callback
  3678. * shorthands and `this` binding.
  3679. *
  3680. * @private
  3681. * @param {Array|Object|string} collection The collection to iterate over.
  3682. * @param {Function} iteratee The function invoked per iteration.
  3683. * @returns {Array|Object|string} Returns `collection`.
  3684. */
  3685. var baseEachRight = createBaseEach(baseForOwnRight, true);
  3686. /**
  3687. * The base implementation of `_.every` without support for callback
  3688. * shorthands and `this` binding.
  3689. *
  3690. * @private
  3691. * @param {Array|Object|string} collection The collection to iterate over.
  3692. * @param {Function} predicate The function invoked per iteration.
  3693. * @returns {boolean} Returns `true` if all elements pass the predicate check,
  3694. * else `false`
  3695. */
  3696. function baseEvery(collection, predicate) {
  3697. var result = true;
  3698. baseEach(collection, function(value, index, collection) {
  3699. result = !!predicate(value, index, collection);
  3700. return result;
  3701. });
  3702. return result;
  3703. }
  3704. /**
  3705. * Gets the extremum value of `collection` invoking `iteratee` for each value
  3706. * in `collection` to generate the criterion by which the value is ranked.
  3707. * The `iteratee` is invoked with three arguments: (value, index|key, collection).
  3708. *
  3709. * @private
  3710. * @param {Array|Object|string} collection The collection to iterate over.
  3711. * @param {Function} iteratee The function invoked per iteration.
  3712. * @param {Function} comparator The function used to compare values.
  3713. * @param {*} exValue The initial extremum value.
  3714. * @returns {*} Returns the extremum value.
  3715. */
  3716. function baseExtremum(collection, iteratee, comparator, exValue) {
  3717. var computed = exValue,
  3718. result = computed;
  3719. baseEach(collection, function(value, index, collection) {
  3720. var current = +iteratee(value, index, collection);
  3721. if (comparator(current, computed) || (current === exValue && current === result)) {
  3722. computed = current;
  3723. result = value;
  3724. }
  3725. });
  3726. return result;
  3727. }
  3728. /**
  3729. * The base implementation of `_.fill` without an iteratee call guard.
  3730. *
  3731. * @private
  3732. * @param {Array} array The array to fill.
  3733. * @param {*} value The value to fill `array` with.
  3734. * @param {number} [start=0] The start position.
  3735. * @param {number} [end=array.length] The end position.
  3736. * @returns {Array} Returns `array`.
  3737. */
  3738. function baseFill(array, value, start, end) {
  3739. var length = array.length;
  3740. start = start == null ? 0 : (+start || 0);
  3741. if (start < 0) {
  3742. start = -start > length ? 0 : (length + start);
  3743. }
  3744. end = (end === undefined || end > length) ? length : (+end || 0);
  3745. if (end < 0) {
  3746. end += length;
  3747. }
  3748. length = start > end ? 0 : (end >>> 0);
  3749. start >>>= 0;
  3750. while (start < length) {
  3751. array[start++] = value;
  3752. }
  3753. return array;
  3754. }
  3755. /**
  3756. * The base implementation of `_.filter` without support for callback
  3757. * shorthands and `this` binding.
  3758. *
  3759. * @private
  3760. * @param {Array|Object|string} collection The collection to iterate over.
  3761. * @param {Function} predicate The function invoked per iteration.
  3762. * @returns {Array} Returns the new filtered array.
  3763. */
  3764. function baseFilter(collection, predicate) {
  3765. var result = [];
  3766. baseEach(collection, function(value, index, collection) {
  3767. if (predicate(value, index, collection)) {
  3768. result.push(value);
  3769. }
  3770. });
  3771. return result;
  3772. }
  3773. /**
  3774. * The base implementation of `_.find`, `_.findLast`, `_.findKey`, and `_.findLastKey`,
  3775. * without support for callback shorthands and `this` binding, which iterates
  3776. * over `collection` using the provided `eachFunc`.
  3777. *
  3778. * @private
  3779. * @param {Array|Object|string} collection The collection to search.
  3780. * @param {Function} predicate The function invoked per iteration.
  3781. * @param {Function} eachFunc The function to iterate over `collection`.
  3782. * @param {boolean} [retKey] Specify returning the key of the found element
  3783. * instead of the element itself.
  3784. * @returns {*} Returns the found element or its key, else `undefined`.
  3785. */
  3786. function baseFind(collection, predicate, eachFunc, retKey) {
  3787. var result;
  3788. eachFunc(collection, function(value, key, collection) {
  3789. if (predicate(value, key, collection)) {
  3790. result = retKey ? key : value;
  3791. return false;
  3792. }
  3793. });
  3794. return result;
  3795. }
  3796. /**
  3797. * The base implementation of `_.flatten` with added support for restricting
  3798. * flattening and specifying the start index.
  3799. *
  3800. * @private
  3801. * @param {Array} array The array to flatten.
  3802. * @param {boolean} [isDeep] Specify a deep flatten.
  3803. * @param {boolean} [isStrict] Restrict flattening to arrays-like objects.
  3804. * @param {Array} [result=[]] The initial result value.
  3805. * @returns {Array} Returns the new flattened array.
  3806. */
  3807. function baseFlatten(array, isDeep, isStrict, result) {
  3808. result || (result = []);
  3809. var index = -1,
  3810. length = array.length;
  3811. while (++index < length) {
  3812. var value = array[index];
  3813. if (isObjectLike(value) && isArrayLike(value) &&
  3814. (isStrict || isArray(value) || isArguments(value))) {
  3815. if (isDeep) {
  3816. // Recursively flatten arrays (susceptible to call stack limits).
  3817. baseFlatten(value, isDeep, isStrict, result);
  3818. } else {
  3819. arrayPush(result, value);
  3820. }
  3821. } else if (!isStrict) {
  3822. result[result.length] = value;
  3823. }
  3824. }
  3825. return result;
  3826. }
  3827. /**
  3828. * The base implementation of `baseForIn` and `baseForOwn` which iterates
  3829. * over `object` properties returned by `keysFunc` invoking `iteratee` for
  3830. * each property. Iteratee functions may exit iteration early by explicitly
  3831. * returning `false`.
  3832. *
  3833. * @private
  3834. * @param {Object} object The object to iterate over.
  3835. * @param {Function} iteratee The function invoked per iteration.
  3836. * @param {Function} keysFunc The function to get the keys of `object`.
  3837. * @returns {Object} Returns `object`.
  3838. */
  3839. var baseFor = createBaseFor();
  3840. /**
  3841. * This function is like `baseFor` except that it iterates over properties
  3842. * in the opposite order.
  3843. *
  3844. * @private
  3845. * @param {Object} object The object to iterate over.
  3846. * @param {Function} iteratee The function invoked per iteration.
  3847. * @param {Function} keysFunc The function to get the keys of `object`.
  3848. * @returns {Object} Returns `object`.
  3849. */
  3850. var baseForRight = createBaseFor(true);
  3851. /**
  3852. * The base implementation of `_.forIn` without support for callback
  3853. * shorthands and `this` binding.
  3854. *
  3855. * @private
  3856. * @param {Object} object The object to iterate over.
  3857. * @param {Function} iteratee The function invoked per iteration.
  3858. * @returns {Object} Returns `object`.
  3859. */
  3860. function baseForIn(object, iteratee) {
  3861. return baseFor(object, iteratee, keysIn);
  3862. }
  3863. /**
  3864. * The base implementation of `_.forOwn` without support for callback
  3865. * shorthands and `this` binding.
  3866. *
  3867. * @private
  3868. * @param {Object} object The object to iterate over.
  3869. * @param {Function} iteratee The function invoked per iteration.
  3870. * @returns {Object} Returns `object`.
  3871. */
  3872. function baseForOwn(object, iteratee) {
  3873. return baseFor(object, iteratee, keys);
  3874. }
  3875. /**
  3876. * The base implementation of `_.forOwnRight` without support for callback
  3877. * shorthands and `this` binding.
  3878. *
  3879. * @private
  3880. * @param {Object} object The object to iterate over.
  3881. * @param {Function} iteratee The function invoked per iteration.
  3882. * @returns {Object} Returns `object`.
  3883. */
  3884. function baseForOwnRight(object, iteratee) {
  3885. return baseForRight(object, iteratee, keys);
  3886. }
  3887. /**
  3888. * The base implementation of `_.functions` which creates an array of
  3889. * `object` function property names filtered from those provided.
  3890. *
  3891. * @private
  3892. * @param {Object} object The object to inspect.
  3893. * @param {Array} props The property names to filter.
  3894. * @returns {Array} Returns the new array of filtered property names.
  3895. */
  3896. function baseFunctions(object, props) {
  3897. var index = -1,
  3898. length = props.length,
  3899. resIndex = -1,
  3900. result = [];
  3901. while (++index < length) {
  3902. var key = props[index];
  3903. if (isFunction(object[key])) {
  3904. result[++resIndex] = key;
  3905. }
  3906. }
  3907. return result;
  3908. }
  3909. /**
  3910. * The base implementation of `get` without support for string paths
  3911. * and default values.
  3912. *
  3913. * @private
  3914. * @param {Object} object The object to query.
  3915. * @param {Array} path The path of the property to get.
  3916. * @param {string} [pathKey] The key representation of path.
  3917. * @returns {*} Returns the resolved value.
  3918. */
  3919. function baseGet(object, path, pathKey) {
  3920. if (object == null) {
  3921. return;
  3922. }
  3923. if (pathKey !== undefined && pathKey in toObject(object)) {
  3924. path = [pathKey];
  3925. }
  3926. var index = 0,
  3927. length = path.length;
  3928. while (object != null && index < length) {
  3929. object = object[path[index++]];
  3930. }
  3931. return (index && index == length) ? object : undefined;
  3932. }
  3933. /**
  3934. * The base implementation of `_.isEqual` without support for `this` binding
  3935. * `customizer` functions.
  3936. *
  3937. * @private
  3938. * @param {*} value The value to compare.
  3939. * @param {*} other The other value to compare.
  3940. * @param {Function} [customizer] The function to customize comparing values.
  3941. * @param {boolean} [isLoose] Specify performing partial comparisons.
  3942. * @param {Array} [stackA] Tracks traversed `value` objects.
  3943. * @param {Array} [stackB] Tracks traversed `other` objects.
  3944. * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
  3945. */
  3946. function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) {
  3947. if (value === other) {
  3948. return true;
  3949. }
  3950. if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {
  3951. return value !== value && other !== other;
  3952. }
  3953. return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB);
  3954. }
  3955. /**
  3956. * A specialized version of `baseIsEqual` for arrays and objects which performs
  3957. * deep comparisons and tracks traversed objects enabling objects with circular
  3958. * references to be compared.
  3959. *
  3960. * @private
  3961. * @param {Object} object The object to compare.
  3962. * @param {Object} other The other object to compare.
  3963. * @param {Function} equalFunc The function to determine equivalents of values.
  3964. * @param {Function} [customizer] The function to customize comparing objects.
  3965. * @param {boolean} [isLoose] Specify performing partial comparisons.
  3966. * @param {Array} [stackA=[]] Tracks traversed `value` objects.
  3967. * @param {Array} [stackB=[]] Tracks traversed `other` objects.
  3968. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
  3969. */
  3970. function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) {
  3971. var objIsArr = isArray(object),
  3972. othIsArr = isArray(other),
  3973. objTag = arrayTag,
  3974. othTag = arrayTag;
  3975. if (!objIsArr) {
  3976. objTag = objToString.call(object);
  3977. if (objTag == argsTag) {
  3978. objTag = objectTag;
  3979. } else if (objTag != objectTag) {
  3980. objIsArr = isTypedArray(object);
  3981. }
  3982. }
  3983. if (!othIsArr) {
  3984. othTag = objToString.call(other);
  3985. if (othTag == argsTag) {
  3986. othTag = objectTag;
  3987. } else if (othTag != objectTag) {
  3988. othIsArr = isTypedArray(other);
  3989. }
  3990. }
  3991. var objIsObj = objTag == objectTag,
  3992. othIsObj = othTag == objectTag,
  3993. isSameTag = objTag == othTag;
  3994. if (isSameTag && !(objIsArr || objIsObj)) {
  3995. return equalByTag(object, other, objTag);
  3996. }
  3997. if (!isLoose) {
  3998. var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
  3999. othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
  4000. if (objIsWrapped || othIsWrapped) {
  4001. return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, isLoose, stackA, stackB);
  4002. }
  4003. }
  4004. if (!isSameTag) {
  4005. return false;
  4006. }
  4007. // Assume cyclic values are equal.
  4008. // For more information on detecting circular references see https://es5.github.io/#JO.
  4009. stackA || (stackA = []);
  4010. stackB || (stackB = []);
  4011. var length = stackA.length;
  4012. while (length--) {
  4013. if (stackA[length] == object) {
  4014. return stackB[length] == other;
  4015. }
  4016. }
  4017. // Add `object` and `other` to the stack of traversed objects.
  4018. stackA.push(object);
  4019. stackB.push(other);
  4020. var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB);
  4021. stackA.pop();
  4022. stackB.pop();
  4023. return result;
  4024. }
  4025. /**
  4026. * The base implementation of `_.isMatch` without support for callback
  4027. * shorthands and `this` binding.
  4028. *
  4029. * @private
  4030. * @param {Object} object The object to inspect.
  4031. * @param {Array} matchData The propery names, values, and compare flags to match.
  4032. * @param {Function} [customizer] The function to customize comparing objects.
  4033. * @returns {boolean} Returns `true` if `object` is a match, else `false`.
  4034. */
  4035. function baseIsMatch(object, matchData, customizer) {
  4036. var index = matchData.length,
  4037. length = index,
  4038. noCustomizer = !customizer;
  4039. if (object == null) {
  4040. return !length;
  4041. }
  4042. object = toObject(object);
  4043. while (index--) {
  4044. var data = matchData[index];
  4045. if ((noCustomizer && data[2])
  4046. ? data[1] !== object[data[0]]
  4047. : !(data[0] in object)
  4048. ) {
  4049. return false;
  4050. }
  4051. }
  4052. while (++index < length) {
  4053. data = matchData[index];
  4054. var key = data[0],
  4055. objValue = object[key],
  4056. srcValue = data[1];
  4057. if (noCustomizer && data[2]) {
  4058. if (objValue === undefined && !(key in object)) {
  4059. return false;
  4060. }
  4061. } else {
  4062. var result = customizer ? customizer(objValue, srcValue, key) : undefined;
  4063. if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, true) : result)) {
  4064. return false;
  4065. }
  4066. }
  4067. }
  4068. return true;
  4069. }
  4070. /**
  4071. * The base implementation of `_.map` without support for callback shorthands
  4072. * and `this` binding.
  4073. *
  4074. * @private
  4075. * @param {Array|Object|string} collection The collection to iterate over.
  4076. * @param {Function} iteratee The function invoked per iteration.
  4077. * @returns {Array} Returns the new mapped array.
  4078. */
  4079. function baseMap(collection, iteratee) {
  4080. var index = -1,
  4081. result = isArrayLike(collection) ? Array(collection.length) : [];
  4082. baseEach(collection, function(value, key, collection) {
  4083. result[++index] = iteratee(value, key, collection);
  4084. });
  4085. return result;
  4086. }
  4087. /**
  4088. * The base implementation of `_.matches` which does not clone `source`.
  4089. *
  4090. * @private
  4091. * @param {Object} source The object of property values to match.
  4092. * @returns {Function} Returns the new function.
  4093. */
  4094. function baseMatches(source) {
  4095. var matchData = getMatchData(source);
  4096. if (matchData.length == 1 && matchData[0][2]) {
  4097. var key = matchData[0][0],
  4098. value = matchData[0][1];
  4099. return function(object) {
  4100. if (object == null) {
  4101. return false;
  4102. }
  4103. return object[key] === value && (value !== undefined || (key in toObject(object)));
  4104. };
  4105. }
  4106. return function(object) {
  4107. return baseIsMatch(object, matchData);
  4108. };
  4109. }
  4110. /**
  4111. * The base implementation of `_.matchesProperty` which does not clone `srcValue`.
  4112. *
  4113. * @private
  4114. * @param {string} path The path of the property to get.
  4115. * @param {*} srcValue The value to compare.
  4116. * @returns {Function} Returns the new function.
  4117. */
  4118. function baseMatchesProperty(path, srcValue) {
  4119. var isArr = isArray(path),
  4120. isCommon = isKey(path) && isStrictComparable(srcValue),
  4121. pathKey = (path + '');
  4122. path = toPath(path);
  4123. return function(object) {
  4124. if (object == null) {
  4125. return false;
  4126. }
  4127. var key = pathKey;
  4128. object = toObject(object);
  4129. if ((isArr || !isCommon) && !(key in object)) {
  4130. object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));
  4131. if (object == null) {
  4132. return false;
  4133. }
  4134. key = last(path);
  4135. object = toObject(object);
  4136. }
  4137. return object[key] === srcValue
  4138. ? (srcValue !== undefined || (key in object))
  4139. : baseIsEqual(srcValue, object[key], undefined, true);
  4140. };
  4141. }
  4142. /**
  4143. * The base implementation of `_.merge` without support for argument juggling,
  4144. * multiple sources, and `this` binding `customizer` functions.
  4145. *
  4146. * @private
  4147. * @param {Object} object The destination object.
  4148. * @param {Object} source The source object.
  4149. * @param {Function} [customizer] The function to customize merged values.
  4150. * @param {Array} [stackA=[]] Tracks traversed source objects.
  4151. * @param {Array} [stackB=[]] Associates values with source counterparts.
  4152. * @returns {Object} Returns `object`.
  4153. */
  4154. function baseMerge(object, source, customizer, stackA, stackB) {
  4155. if (!isObject(object)) {
  4156. return object;
  4157. }
  4158. var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)),
  4159. props = isSrcArr ? undefined : keys(source);
  4160. arrayEach(props || source, function(srcValue, key) {
  4161. if (props) {
  4162. key = srcValue;
  4163. srcValue = source[key];
  4164. }
  4165. if (isObjectLike(srcValue)) {
  4166. stackA || (stackA = []);
  4167. stackB || (stackB = []);
  4168. baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB);
  4169. }
  4170. else {
  4171. var value = object[key],
  4172. result = customizer ? customizer(value, srcValue, key, object, source) : undefined,
  4173. isCommon = result === undefined;
  4174. if (isCommon) {
  4175. result = srcValue;
  4176. }
  4177. if ((result !== undefined || (isSrcArr && !(key in object))) &&
  4178. (isCommon || (result === result ? (result !== value) : (value === value)))) {
  4179. object[key] = result;
  4180. }
  4181. }
  4182. });
  4183. return object;
  4184. }
  4185. /**
  4186. * A specialized version of `baseMerge` for arrays and objects which performs
  4187. * deep merges and tracks traversed objects enabling objects with circular
  4188. * references to be merged.
  4189. *
  4190. * @private
  4191. * @param {Object} object The destination object.
  4192. * @param {Object} source The source object.
  4193. * @param {string} key The key of the value to merge.
  4194. * @param {Function} mergeFunc The function to merge values.
  4195. * @param {Function} [customizer] The function to customize merged values.
  4196. * @param {Array} [stackA=[]] Tracks traversed source objects.
  4197. * @param {Array} [stackB=[]] Associates values with source counterparts.
  4198. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
  4199. */
  4200. function baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) {
  4201. var length = stackA.length,
  4202. srcValue = source[key];
  4203. while (length--) {
  4204. if (stackA[length] == srcValue) {
  4205. object[key] = stackB[length];
  4206. return;
  4207. }
  4208. }
  4209. var value = object[key],
  4210. result = customizer ? customizer(value, srcValue, key, object, source) : undefined,
  4211. isCommon = result === undefined;
  4212. if (isCommon) {
  4213. result = srcValue;
  4214. if (isArrayLike(srcValue) && (isArray(srcValue) || isTypedArray(srcValue))) {
  4215. result = isArray(value)
  4216. ? value
  4217. : (isArrayLike(value) ? arrayCopy(value) : []);
  4218. }
  4219. else if (isPlainObject(srcValue) || isArguments(srcValue)) {
  4220. result = isArguments(value)
  4221. ? toPlainObject(value)
  4222. : (isPlainObject(value) ? value : {});
  4223. }
  4224. else {
  4225. isCommon = false;
  4226. }
  4227. }
  4228. // Add the source value to the stack of traversed objects and associate
  4229. // it with its merged value.
  4230. stackA.push(srcValue);
  4231. stackB.push(result);
  4232. if (isCommon) {
  4233. // Recursively merge objects and arrays (susceptible to call stack limits).
  4234. object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB);
  4235. } else if (result === result ? (result !== value) : (value === value)) {
  4236. object[key] = result;
  4237. }
  4238. }
  4239. /**
  4240. * The base implementation of `_.property` without support for deep paths.
  4241. *
  4242. * @private
  4243. * @param {string} key The key of the property to get.
  4244. * @returns {Function} Returns the new function.
  4245. */
  4246. function baseProperty(key) {
  4247. return function(object) {
  4248. return object == null ? undefined : object[key];
  4249. };
  4250. }
  4251. /**
  4252. * A specialized version of `baseProperty` which supports deep paths.
  4253. *
  4254. * @private
  4255. * @param {Array|string} path The path of the property to get.
  4256. * @returns {Function} Returns the new function.
  4257. */
  4258. function basePropertyDeep(path) {
  4259. var pathKey = (path + '');
  4260. path = toPath(path);
  4261. return function(object) {
  4262. return baseGet(object, path, pathKey);
  4263. };
  4264. }
  4265. /**
  4266. * The base implementation of `_.pullAt` without support for individual
  4267. * index arguments and capturing the removed elements.
  4268. *
  4269. * @private
  4270. * @param {Array} array The array to modify.
  4271. * @param {number[]} indexes The indexes of elements to remove.
  4272. * @returns {Array} Returns `array`.
  4273. */
  4274. function basePullAt(array, indexes) {
  4275. var length = array ? indexes.length : 0;
  4276. while (length--) {
  4277. var index = indexes[length];
  4278. if (index != previous && isIndex(index)) {
  4279. var previous = index;
  4280. splice.call(array, index, 1);
  4281. }
  4282. }
  4283. return array;
  4284. }
  4285. /**
  4286. * The base implementation of `_.random` without support for argument juggling
  4287. * and returning floating-point numbers.
  4288. *
  4289. * @private
  4290. * @param {number} min The minimum possible value.
  4291. * @param {number} max The maximum possible value.
  4292. * @returns {number} Returns the random number.
  4293. */
  4294. function baseRandom(min, max) {
  4295. return min + nativeFloor(nativeRandom() * (max - min + 1));
  4296. }
  4297. /**
  4298. * The base implementation of `_.reduce` and `_.reduceRight` without support
  4299. * for callback shorthands and `this` binding, which iterates over `collection`
  4300. * using the provided `eachFunc`.
  4301. *
  4302. * @private
  4303. * @param {Array|Object|string} collection The collection to iterate over.
  4304. * @param {Function} iteratee The function invoked per iteration.
  4305. * @param {*} accumulator The initial value.
  4306. * @param {boolean} initFromCollection Specify using the first or last element
  4307. * of `collection` as the initial value.
  4308. * @param {Function} eachFunc The function to iterate over `collection`.
  4309. * @returns {*} Returns the accumulated value.
  4310. */
  4311. function baseReduce(collection, iteratee, accumulator, initFromCollection, eachFunc) {
  4312. eachFunc(collection, function(value, index, collection) {
  4313. accumulator = initFromCollection
  4314. ? (initFromCollection = false, value)
  4315. : iteratee(accumulator, value, index, collection);
  4316. });
  4317. return accumulator;
  4318. }
  4319. /**
  4320. * The base implementation of `setData` without support for hot loop detection.
  4321. *
  4322. * @private
  4323. * @param {Function} func The function to associate metadata with.
  4324. * @param {*} data The metadata.
  4325. * @returns {Function} Returns `func`.
  4326. */
  4327. var baseSetData = !metaMap ? identity : function(func, data) {
  4328. metaMap.set(func, data);
  4329. return func;
  4330. };
  4331. /**
  4332. * The base implementation of `_.slice` without an iteratee call guard.
  4333. *
  4334. * @private
  4335. * @param {Array} array The array to slice.
  4336. * @param {number} [start=0] The start position.
  4337. * @param {number} [end=array.length] The end position.
  4338. * @returns {Array} Returns the slice of `array`.
  4339. */
  4340. function baseSlice(array, start, end) {
  4341. var index = -1,
  4342. length = array.length;
  4343. start = start == null ? 0 : (+start || 0);
  4344. if (start < 0) {
  4345. start = -start > length ? 0 : (length + start);
  4346. }
  4347. end = (end === undefined || end > length) ? length : (+end || 0);
  4348. if (end < 0) {
  4349. end += length;
  4350. }
  4351. length = start > end ? 0 : ((end - start) >>> 0);
  4352. start >>>= 0;
  4353. var result = Array(length);
  4354. while (++index < length) {
  4355. result[index] = array[index + start];
  4356. }
  4357. return result;
  4358. }
  4359. /**
  4360. * The base implementation of `_.some` without support for callback shorthands
  4361. * and `this` binding.
  4362. *
  4363. * @private
  4364. * @param {Array|Object|string} collection The collection to iterate over.
  4365. * @param {Function} predicate The function invoked per iteration.
  4366. * @returns {boolean} Returns `true` if any element passes the predicate check,
  4367. * else `false`.
  4368. */
  4369. function baseSome(collection, predicate) {
  4370. var result;
  4371. baseEach(collection, function(value, index, collection) {
  4372. result = predicate(value, index, collection);
  4373. return !result;
  4374. });
  4375. return !!result;
  4376. }
  4377. /**
  4378. * The base implementation of `_.sortBy` which uses `comparer` to define
  4379. * the sort order of `array` and replaces criteria objects with their
  4380. * corresponding values.
  4381. *
  4382. * @private
  4383. * @param {Array} array The array to sort.
  4384. * @param {Function} comparer The function to define sort order.
  4385. * @returns {Array} Returns `array`.
  4386. */
  4387. function baseSortBy(array, comparer) {
  4388. var length = array.length;
  4389. array.sort(comparer);
  4390. while (length--) {
  4391. array[length] = array[length].value;
  4392. }
  4393. return array;
  4394. }
  4395. /**
  4396. * The base implementation of `_.sortByOrder` without param guards.
  4397. *
  4398. * @private
  4399. * @param {Array|Object|string} collection The collection to iterate over.
  4400. * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
  4401. * @param {boolean[]} orders The sort orders of `iteratees`.
  4402. * @returns {Array} Returns the new sorted array.
  4403. */
  4404. function baseSortByOrder(collection, iteratees, orders) {
  4405. var callback = getCallback(),
  4406. index = -1;
  4407. iteratees = arrayMap(iteratees, function(iteratee) { return callback(iteratee); });
  4408. var result = baseMap(collection, function(value) {
  4409. var criteria = arrayMap(iteratees, function(iteratee) { return iteratee(value); });
  4410. return { 'criteria': criteria, 'index': ++index, 'value': value };
  4411. });
  4412. return baseSortBy(result, function(object, other) {
  4413. return compareMultiple(object, other, orders);
  4414. });
  4415. }
  4416. /**
  4417. * The base implementation of `_.sum` without support for callback shorthands
  4418. * and `this` binding.
  4419. *
  4420. * @private
  4421. * @param {Array|Object|string} collection The collection to iterate over.
  4422. * @param {Function} iteratee The function invoked per iteration.
  4423. * @returns {number} Returns the sum.
  4424. */
  4425. function baseSum(collection, iteratee) {
  4426. var result = 0;
  4427. baseEach(collection, function(value, index, collection) {
  4428. result += +iteratee(value, index, collection) || 0;
  4429. });
  4430. return result;
  4431. }
  4432. /**
  4433. * The base implementation of `_.uniq` without support for callback shorthands
  4434. * and `this` binding.
  4435. *
  4436. * @private
  4437. * @param {Array} array The array to inspect.
  4438. * @param {Function} [iteratee] The function invoked per iteration.
  4439. * @returns {Array} Returns the new duplicate-value-free array.
  4440. */
  4441. function baseUniq(array, iteratee) {
  4442. var index = -1,
  4443. indexOf = getIndexOf(),
  4444. length = array.length,
  4445. isCommon = indexOf == baseIndexOf,
  4446. isLarge = isCommon && length >= LARGE_ARRAY_SIZE,
  4447. seen = isLarge ? createCache() : null,
  4448. result = [];
  4449. if (seen) {
  4450. indexOf = cacheIndexOf;
  4451. isCommon = false;
  4452. } else {
  4453. isLarge = false;
  4454. seen = iteratee ? [] : result;
  4455. }
  4456. outer:
  4457. while (++index < length) {
  4458. var value = array[index],
  4459. computed = iteratee ? iteratee(value, index, array) : value;
  4460. if (isCommon && value === value) {
  4461. var seenIndex = seen.length;
  4462. while (seenIndex--) {
  4463. if (seen[seenIndex] === computed) {
  4464. continue outer;
  4465. }
  4466. }
  4467. if (iteratee) {
  4468. seen.push(computed);
  4469. }
  4470. result.push(value);
  4471. }
  4472. else if (indexOf(seen, computed, 0) < 0) {
  4473. if (iteratee || isLarge) {
  4474. seen.push(computed);
  4475. }
  4476. result.push(value);
  4477. }
  4478. }
  4479. return result;
  4480. }
  4481. /**
  4482. * The base implementation of `_.values` and `_.valuesIn` which creates an
  4483. * array of `object` property values corresponding to the property names
  4484. * of `props`.
  4485. *
  4486. * @private
  4487. * @param {Object} object The object to query.
  4488. * @param {Array} props The property names to get values for.
  4489. * @returns {Object} Returns the array of property values.
  4490. */
  4491. function baseValues(object, props) {
  4492. var index = -1,
  4493. length = props.length,
  4494. result = Array(length);
  4495. while (++index < length) {
  4496. result[index] = object[props[index]];
  4497. }
  4498. return result;
  4499. }
  4500. /**
  4501. * The base implementation of `_.dropRightWhile`, `_.dropWhile`, `_.takeRightWhile`,
  4502. * and `_.takeWhile` without support for callback shorthands and `this` binding.
  4503. *
  4504. * @private
  4505. * @param {Array} array The array to query.
  4506. * @param {Function} predicate The function invoked per iteration.
  4507. * @param {boolean} [isDrop] Specify dropping elements instead of taking them.
  4508. * @param {boolean} [fromRight] Specify iterating from right to left.
  4509. * @returns {Array} Returns the slice of `array`.
  4510. */
  4511. function baseWhile(array, predicate, isDrop, fromRight) {
  4512. var length = array.length,
  4513. index = fromRight ? length : -1;
  4514. while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) {}
  4515. return isDrop
  4516. ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))
  4517. : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));
  4518. }
  4519. /**
  4520. * The base implementation of `wrapperValue` which returns the result of
  4521. * performing a sequence of actions on the unwrapped `value`, where each
  4522. * successive action is supplied the return value of the previous.
  4523. *
  4524. * @private
  4525. * @param {*} value The unwrapped value.
  4526. * @param {Array} actions Actions to peform to resolve the unwrapped value.
  4527. * @returns {*} Returns the resolved value.
  4528. */
  4529. function baseWrapperValue(value, actions) {
  4530. var result = value;
  4531. if (result instanceof LazyWrapper) {
  4532. result = result.value();
  4533. }
  4534. var index = -1,
  4535. length = actions.length;
  4536. while (++index < length) {
  4537. var action = actions[index];
  4538. result = action.func.apply(action.thisArg, arrayPush([result], action.args));
  4539. }
  4540. return result;
  4541. }
  4542. /**
  4543. * Performs a binary search of `array` to determine the index at which `value`
  4544. * should be inserted into `array` in order to maintain its sort order.
  4545. *
  4546. * @private
  4547. * @param {Array} array The sorted array to inspect.
  4548. * @param {*} value The value to evaluate.
  4549. * @param {boolean} [retHighest] Specify returning the highest qualified index.
  4550. * @returns {number} Returns the index at which `value` should be inserted
  4551. * into `array`.
  4552. */
  4553. function binaryIndex(array, value, retHighest) {
  4554. var low = 0,
  4555. high = array ? array.length : low;
  4556. if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {
  4557. while (low < high) {
  4558. var mid = (low + high) >>> 1,
  4559. computed = array[mid];
  4560. if ((retHighest ? (computed <= value) : (computed < value)) && computed !== null) {
  4561. low = mid + 1;
  4562. } else {
  4563. high = mid;
  4564. }
  4565. }
  4566. return high;
  4567. }
  4568. return binaryIndexBy(array, value, identity, retHighest);
  4569. }
  4570. /**
  4571. * This function is like `binaryIndex` except that it invokes `iteratee` for
  4572. * `value` and each element of `array` to compute their sort ranking. The
  4573. * iteratee is invoked with one argument; (value).
  4574. *
  4575. * @private
  4576. * @param {Array} array The sorted array to inspect.
  4577. * @param {*} value The value to evaluate.
  4578. * @param {Function} iteratee The function invoked per iteration.
  4579. * @param {boolean} [retHighest] Specify returning the highest qualified index.
  4580. * @returns {number} Returns the index at which `value` should be inserted
  4581. * into `array`.
  4582. */
  4583. function binaryIndexBy(array, value, iteratee, retHighest) {
  4584. value = iteratee(value);
  4585. var low = 0,
  4586. high = array ? array.length : 0,
  4587. valIsNaN = value !== value,
  4588. valIsNull = value === null,
  4589. valIsUndef = value === undefined;
  4590. while (low < high) {
  4591. var mid = nativeFloor((low + high) / 2),
  4592. computed = iteratee(array[mid]),
  4593. isDef = computed !== undefined,
  4594. isReflexive = computed === computed;
  4595. if (valIsNaN) {
  4596. var setLow = isReflexive || retHighest;
  4597. } else if (valIsNull) {
  4598. setLow = isReflexive && isDef && (retHighest || computed != null);
  4599. } else if (valIsUndef) {
  4600. setLow = isReflexive && (retHighest || isDef);
  4601. } else if (computed == null) {
  4602. setLow = false;
  4603. } else {
  4604. setLow = retHighest ? (computed <= value) : (computed < value);
  4605. }
  4606. if (setLow) {
  4607. low = mid + 1;
  4608. } else {
  4609. high = mid;
  4610. }
  4611. }
  4612. return nativeMin(high, MAX_ARRAY_INDEX);
  4613. }
  4614. /**
  4615. * A specialized version of `baseCallback` which only supports `this` binding
  4616. * and specifying the number of arguments to provide to `func`.
  4617. *
  4618. * @private
  4619. * @param {Function} func The function to bind.
  4620. * @param {*} thisArg The `this` binding of `func`.
  4621. * @param {number} [argCount] The number of arguments to provide to `func`.
  4622. * @returns {Function} Returns the callback.
  4623. */
  4624. function bindCallback(func, thisArg, argCount) {
  4625. if (typeof func != 'function') {
  4626. return identity;
  4627. }
  4628. if (thisArg === undefined) {
  4629. return func;
  4630. }
  4631. switch (argCount) {
  4632. case 1: return function(value) {
  4633. return func.call(thisArg, value);
  4634. };
  4635. case 3: return function(value, index, collection) {
  4636. return func.call(thisArg, value, index, collection);
  4637. };
  4638. case 4: return function(accumulator, value, index, collection) {
  4639. return func.call(thisArg, accumulator, value, index, collection);
  4640. };
  4641. case 5: return function(value, other, key, object, source) {
  4642. return func.call(thisArg, value, other, key, object, source);
  4643. };
  4644. }
  4645. return function() {
  4646. return func.apply(thisArg, arguments);
  4647. };
  4648. }
  4649. /**
  4650. * Creates a clone of the given array buffer.
  4651. *
  4652. * @private
  4653. * @param {ArrayBuffer} buffer The array buffer to clone.
  4654. * @returns {ArrayBuffer} Returns the cloned array buffer.
  4655. */
  4656. function bufferClone(buffer) {
  4657. var result = new ArrayBuffer(buffer.byteLength),
  4658. view = new Uint8Array(result);
  4659. view.set(new Uint8Array(buffer));
  4660. return result;
  4661. }
  4662. /**
  4663. * Creates an array that is the composition of partially applied arguments,
  4664. * placeholders, and provided arguments into a single array of arguments.
  4665. *
  4666. * @private
  4667. * @param {Array|Object} args The provided arguments.
  4668. * @param {Array} partials The arguments to prepend to those provided.
  4669. * @param {Array} holders The `partials` placeholder indexes.
  4670. * @returns {Array} Returns the new array of composed arguments.
  4671. */
  4672. function composeArgs(args, partials, holders) {
  4673. var holdersLength = holders.length,
  4674. argsIndex = -1,
  4675. argsLength = nativeMax(args.length - holdersLength, 0),
  4676. leftIndex = -1,
  4677. leftLength = partials.length,
  4678. result = Array(leftLength + argsLength);
  4679. while (++leftIndex < leftLength) {
  4680. result[leftIndex] = partials[leftIndex];
  4681. }
  4682. while (++argsIndex < holdersLength) {
  4683. result[holders[argsIndex]] = args[argsIndex];
  4684. }
  4685. while (argsLength--) {
  4686. result[leftIndex++] = args[argsIndex++];
  4687. }
  4688. return result;
  4689. }
  4690. /**
  4691. * This function is like `composeArgs` except that the arguments composition
  4692. * is tailored for `_.partialRight`.
  4693. *
  4694. * @private
  4695. * @param {Array|Object} args The provided arguments.
  4696. * @param {Array} partials The arguments to append to those provided.
  4697. * @param {Array} holders The `partials` placeholder indexes.
  4698. * @returns {Array} Returns the new array of composed arguments.
  4699. */
  4700. function composeArgsRight(args, partials, holders) {
  4701. var holdersIndex = -1,
  4702. holdersLength = holders.length,
  4703. argsIndex = -1,
  4704. argsLength = nativeMax(args.length - holdersLength, 0),
  4705. rightIndex = -1,
  4706. rightLength = partials.length,
  4707. result = Array(argsLength + rightLength);
  4708. while (++argsIndex < argsLength) {
  4709. result[argsIndex] = args[argsIndex];
  4710. }
  4711. var offset = argsIndex;
  4712. while (++rightIndex < rightLength) {
  4713. result[offset + rightIndex] = partials[rightIndex];
  4714. }
  4715. while (++holdersIndex < holdersLength) {
  4716. result[offset + holders[holdersIndex]] = args[argsIndex++];
  4717. }
  4718. return result;
  4719. }
  4720. /**
  4721. * Creates a `_.countBy`, `_.groupBy`, `_.indexBy`, or `_.partition` function.
  4722. *
  4723. * @private
  4724. * @param {Function} setter The function to set keys and values of the accumulator object.
  4725. * @param {Function} [initializer] The function to initialize the accumulator object.
  4726. * @returns {Function} Returns the new aggregator function.
  4727. */
  4728. function createAggregator(setter, initializer) {
  4729. return function(collection, iteratee, thisArg) {
  4730. var result = initializer ? initializer() : {};
  4731. iteratee = getCallback(iteratee, thisArg, 3);
  4732. if (isArray(collection)) {
  4733. var index = -1,
  4734. length = collection.length;
  4735. while (++index < length) {
  4736. var value = collection[index];
  4737. setter(result, value, iteratee(value, index, collection), collection);
  4738. }
  4739. } else {
  4740. baseEach(collection, function(value, key, collection) {
  4741. setter(result, value, iteratee(value, key, collection), collection);
  4742. });
  4743. }
  4744. return result;
  4745. };
  4746. }
  4747. /**
  4748. * Creates a `_.assign`, `_.defaults`, or `_.merge` function.
  4749. *
  4750. * @private
  4751. * @param {Function} assigner The function to assign values.
  4752. * @returns {Function} Returns the new assigner function.
  4753. */
  4754. function createAssigner(assigner) {
  4755. return restParam(function(object, sources) {
  4756. var index = -1,
  4757. length = object == null ? 0 : sources.length,
  4758. customizer = length > 2 ? sources[length - 2] : undefined,
  4759. guard = length > 2 ? sources[2] : undefined,
  4760. thisArg = length > 1 ? sources[length - 1] : undefined;
  4761. if (typeof customizer == 'function') {
  4762. customizer = bindCallback(customizer, thisArg, 5);
  4763. length -= 2;
  4764. } else {
  4765. customizer = typeof thisArg == 'function' ? thisArg : undefined;
  4766. length -= (customizer ? 1 : 0);
  4767. }
  4768. if (guard && isIterateeCall(sources[0], sources[1], guard)) {
  4769. customizer = length < 3 ? undefined : customizer;
  4770. length = 1;
  4771. }
  4772. while (++index < length) {
  4773. var source = sources[index];
  4774. if (source) {
  4775. assigner(object, source, customizer);
  4776. }
  4777. }
  4778. return object;
  4779. });
  4780. }
  4781. /**
  4782. * Creates a `baseEach` or `baseEachRight` function.
  4783. *
  4784. * @private
  4785. * @param {Function} eachFunc The function to iterate over a collection.
  4786. * @param {boolean} [fromRight] Specify iterating from right to left.
  4787. * @returns {Function} Returns the new base function.
  4788. */
  4789. function createBaseEach(eachFunc, fromRight) {
  4790. return function(collection, iteratee) {
  4791. var length = collection ? getLength(collection) : 0;
  4792. if (!isLength(length)) {
  4793. return eachFunc(collection, iteratee);
  4794. }
  4795. var index = fromRight ? length : -1,
  4796. iterable = toObject(collection);
  4797. while ((fromRight ? index-- : ++index < length)) {
  4798. if (iteratee(iterable[index], index, iterable) === false) {
  4799. break;
  4800. }
  4801. }
  4802. return collection;
  4803. };
  4804. }
  4805. /**
  4806. * Creates a base function for `_.forIn` or `_.forInRight`.
  4807. *
  4808. * @private
  4809. * @param {boolean} [fromRight] Specify iterating from right to left.
  4810. * @returns {Function} Returns the new base function.
  4811. */
  4812. function createBaseFor(fromRight) {
  4813. return function(object, iteratee, keysFunc) {
  4814. var iterable = toObject(object),
  4815. props = keysFunc(object),
  4816. length = props.length,
  4817. index = fromRight ? length : -1;
  4818. while ((fromRight ? index-- : ++index < length)) {
  4819. var key = props[index];
  4820. if (iteratee(iterable[key], key, iterable) === false) {
  4821. break;
  4822. }
  4823. }
  4824. return object;
  4825. };
  4826. }
  4827. /**
  4828. * Creates a function that wraps `func` and invokes it with the `this`
  4829. * binding of `thisArg`.
  4830. *
  4831. * @private
  4832. * @param {Function} func The function to bind.
  4833. * @param {*} [thisArg] The `this` binding of `func`.
  4834. * @returns {Function} Returns the new bound function.
  4835. */
  4836. function createBindWrapper(func, thisArg) {
  4837. var Ctor = createCtorWrapper(func);
  4838. function wrapper() {
  4839. var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
  4840. return fn.apply(thisArg, arguments);
  4841. }
  4842. return wrapper;
  4843. }
  4844. /**
  4845. * Creates a `Set` cache object to optimize linear searches of large arrays.
  4846. *
  4847. * @private
  4848. * @param {Array} [values] The values to cache.
  4849. * @returns {null|Object} Returns the new cache object if `Set` is supported, else `null`.
  4850. */
  4851. function createCache(values) {
  4852. return (nativeCreate && Set) ? new SetCache(values) : null;
  4853. }
  4854. /**
  4855. * Creates a function that produces compound words out of the words in a
  4856. * given string.
  4857. *
  4858. * @private
  4859. * @param {Function} callback The function to combine each word.
  4860. * @returns {Function} Returns the new compounder function.
  4861. */
  4862. function createCompounder(callback) {
  4863. return function(string) {
  4864. var index = -1,
  4865. array = words(deburr(string)),
  4866. length = array.length,
  4867. result = '';
  4868. while (++index < length) {
  4869. result = callback(result, array[index], index);
  4870. }
  4871. return result;
  4872. };
  4873. }
  4874. /**
  4875. * Creates a function that produces an instance of `Ctor` regardless of
  4876. * whether it was invoked as part of a `new` expression or by `call` or `apply`.
  4877. *
  4878. * @private
  4879. * @param {Function} Ctor The constructor to wrap.
  4880. * @returns {Function} Returns the new wrapped function.
  4881. */
  4882. function createCtorWrapper(Ctor) {
  4883. return function() {
  4884. // Use a `switch` statement to work with class constructors.
  4885. // See http://ecma-international.org/ecma-262/6.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist
  4886. // for more details.
  4887. var args = arguments;
  4888. switch (args.length) {
  4889. case 0: return new Ctor;
  4890. case 1: return new Ctor(args[0]);
  4891. case 2: return new Ctor(args[0], args[1]);
  4892. case 3: return new Ctor(args[0], args[1], args[2]);
  4893. case 4: return new Ctor(args[0], args[1], args[2], args[3]);
  4894. case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);
  4895. case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);
  4896. case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
  4897. }
  4898. var thisBinding = baseCreate(Ctor.prototype),
  4899. result = Ctor.apply(thisBinding, args);
  4900. // Mimic the constructor's `return` behavior.
  4901. // See https://es5.github.io/#x13.2.2 for more details.
  4902. return isObject(result) ? result : thisBinding;
  4903. };
  4904. }
  4905. /**
  4906. * Creates a `_.curry` or `_.curryRight` function.
  4907. *
  4908. * @private
  4909. * @param {boolean} flag The curry bit flag.
  4910. * @returns {Function} Returns the new curry function.
  4911. */
  4912. function createCurry(flag) {
  4913. function curryFunc(func, arity, guard) {
  4914. if (guard && isIterateeCall(func, arity, guard)) {
  4915. arity = undefined;
  4916. }
  4917. var result = createWrapper(func, flag, undefined, undefined, undefined, undefined, undefined, arity);
  4918. result.placeholder = curryFunc.placeholder;
  4919. return result;
  4920. }
  4921. return curryFunc;
  4922. }
  4923. /**
  4924. * Creates a `_.defaults` or `_.defaultsDeep` function.
  4925. *
  4926. * @private
  4927. * @param {Function} assigner The function to assign values.
  4928. * @param {Function} customizer The function to customize assigned values.
  4929. * @returns {Function} Returns the new defaults function.
  4930. */
  4931. function createDefaults(assigner, customizer) {
  4932. return restParam(function(args) {
  4933. var object = args[0];
  4934. if (object == null) {
  4935. return object;
  4936. }
  4937. args.push(customizer);
  4938. return assigner.apply(undefined, args);
  4939. });
  4940. }
  4941. /**
  4942. * Creates a `_.max` or `_.min` function.
  4943. *
  4944. * @private
  4945. * @param {Function} comparator The function used to compare values.
  4946. * @param {*} exValue The initial extremum value.
  4947. * @returns {Function} Returns the new extremum function.
  4948. */
  4949. function createExtremum(comparator, exValue) {
  4950. return function(collection, iteratee, thisArg) {
  4951. if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {
  4952. iteratee = undefined;
  4953. }
  4954. iteratee = getCallback(iteratee, thisArg, 3);
  4955. if (iteratee.length == 1) {
  4956. collection = isArray(collection) ? collection : toIterable(collection);
  4957. var result = arrayExtremum(collection, iteratee, comparator, exValue);
  4958. if (!(collection.length && result === exValue)) {
  4959. return result;
  4960. }
  4961. }
  4962. return baseExtremum(collection, iteratee, comparator, exValue);
  4963. };
  4964. }
  4965. /**
  4966. * Creates a `_.find` or `_.findLast` function.
  4967. *
  4968. * @private
  4969. * @param {Function} eachFunc The function to iterate over a collection.
  4970. * @param {boolean} [fromRight] Specify iterating from right to left.
  4971. * @returns {Function} Returns the new find function.
  4972. */
  4973. function createFind(eachFunc, fromRight) {
  4974. return function(collection, predicate, thisArg) {
  4975. predicate = getCallback(predicate, thisArg, 3);
  4976. if (isArray(collection)) {
  4977. var index = baseFindIndex(collection, predicate, fromRight);
  4978. return index > -1 ? collection[index] : undefined;
  4979. }
  4980. return baseFind(collection, predicate, eachFunc);
  4981. };
  4982. }
  4983. /**
  4984. * Creates a `_.findIndex` or `_.findLastIndex` function.
  4985. *
  4986. * @private
  4987. * @param {boolean} [fromRight] Specify iterating from right to left.
  4988. * @returns {Function} Returns the new find function.
  4989. */
  4990. function createFindIndex(fromRight) {
  4991. return function(array, predicate, thisArg) {
  4992. if (!(array && array.length)) {
  4993. return -1;
  4994. }
  4995. predicate = getCallback(predicate, thisArg, 3);
  4996. return baseFindIndex(array, predicate, fromRight);
  4997. };
  4998. }
  4999. /**
  5000. * Creates a `_.findKey` or `_.findLastKey` function.
  5001. *
  5002. * @private
  5003. * @param {Function} objectFunc The function to iterate over an object.
  5004. * @returns {Function} Returns the new find function.
  5005. */
  5006. function createFindKey(objectFunc) {
  5007. return function(object, predicate, thisArg) {
  5008. predicate = getCallback(predicate, thisArg, 3);
  5009. return baseFind(object, predicate, objectFunc, true);
  5010. };
  5011. }
  5012. /**
  5013. * Creates a `_.flow` or `_.flowRight` function.
  5014. *
  5015. * @private
  5016. * @param {boolean} [fromRight] Specify iterating from right to left.
  5017. * @returns {Function} Returns the new flow function.
  5018. */
  5019. function createFlow(fromRight) {
  5020. return function() {
  5021. var wrapper,
  5022. length = arguments.length,
  5023. index = fromRight ? length : -1,
  5024. leftIndex = 0,
  5025. funcs = Array(length);
  5026. while ((fromRight ? index-- : ++index < length)) {
  5027. var func = funcs[leftIndex++] = arguments[index];
  5028. if (typeof func != 'function') {
  5029. throw new TypeError(FUNC_ERROR_TEXT);
  5030. }
  5031. if (!wrapper && LodashWrapper.prototype.thru && getFuncName(func) == 'wrapper') {
  5032. wrapper = new LodashWrapper([], true);
  5033. }
  5034. }
  5035. index = wrapper ? -1 : length;
  5036. while (++index < length) {
  5037. func = funcs[index];
  5038. var funcName = getFuncName(func),
  5039. data = funcName == 'wrapper' ? getData(func) : undefined;
  5040. if (data && isLaziable(data[0]) && data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) && !data[4].length && data[9] == 1) {
  5041. wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
  5042. } else {
  5043. wrapper = (func.length == 1 && isLaziable(func)) ? wrapper[funcName]() : wrapper.thru(func);
  5044. }
  5045. }
  5046. return function() {
  5047. var args = arguments,
  5048. value = args[0];
  5049. if (wrapper && args.length == 1 && isArray(value) && value.length >= LARGE_ARRAY_SIZE) {
  5050. return wrapper.plant(value).value();
  5051. }
  5052. var index = 0,
  5053. result = length ? funcs[index].apply(this, args) : value;
  5054. while (++index < length) {
  5055. result = funcs[index].call(this, result);
  5056. }
  5057. return result;
  5058. };
  5059. };
  5060. }
  5061. /**
  5062. * Creates a function for `_.forEach` or `_.forEachRight`.
  5063. *
  5064. * @private
  5065. * @param {Function} arrayFunc The function to iterate over an array.
  5066. * @param {Function} eachFunc The function to iterate over a collection.
  5067. * @returns {Function} Returns the new each function.
  5068. */
  5069. function createForEach(arrayFunc, eachFunc) {
  5070. return function(collection, iteratee, thisArg) {
  5071. return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection))
  5072. ? arrayFunc(collection, iteratee)
  5073. : eachFunc(collection, bindCallback(iteratee, thisArg, 3));
  5074. };
  5075. }
  5076. /**
  5077. * Creates a function for `_.forIn` or `_.forInRight`.
  5078. *
  5079. * @private
  5080. * @param {Function} objectFunc The function to iterate over an object.
  5081. * @returns {Function} Returns the new each function.
  5082. */
  5083. function createForIn(objectFunc) {
  5084. return function(object, iteratee, thisArg) {
  5085. if (typeof iteratee != 'function' || thisArg !== undefined) {
  5086. iteratee = bindCallback(iteratee, thisArg, 3);
  5087. }
  5088. return objectFunc(object, iteratee, keysIn);
  5089. };
  5090. }
  5091. /**
  5092. * Creates a function for `_.forOwn` or `_.forOwnRight`.
  5093. *
  5094. * @private
  5095. * @param {Function} objectFunc The function to iterate over an object.
  5096. * @returns {Function} Returns the new each function.
  5097. */
  5098. function createForOwn(objectFunc) {
  5099. return function(object, iteratee, thisArg) {
  5100. if (typeof iteratee != 'function' || thisArg !== undefined) {
  5101. iteratee = bindCallback(iteratee, thisArg, 3);
  5102. }
  5103. return objectFunc(object, iteratee);
  5104. };
  5105. }
  5106. /**
  5107. * Creates a function for `_.mapKeys` or `_.mapValues`.
  5108. *
  5109. * @private
  5110. * @param {boolean} [isMapKeys] Specify mapping keys instead of values.
  5111. * @returns {Function} Returns the new map function.
  5112. */
  5113. function createObjectMapper(isMapKeys) {
  5114. return function(object, iteratee, thisArg) {
  5115. var result = {};
  5116. iteratee = getCallback(iteratee, thisArg, 3);
  5117. baseForOwn(object, function(value, key, object) {
  5118. var mapped = iteratee(value, key, object);
  5119. key = isMapKeys ? mapped : key;
  5120. value = isMapKeys ? value : mapped;
  5121. result[key] = value;
  5122. });
  5123. return result;
  5124. };
  5125. }
  5126. /**
  5127. * Creates a function for `_.padLeft` or `_.padRight`.
  5128. *
  5129. * @private
  5130. * @param {boolean} [fromRight] Specify padding from the right.
  5131. * @returns {Function} Returns the new pad function.
  5132. */
  5133. function createPadDir(fromRight) {
  5134. return function(string, length, chars) {
  5135. string = baseToString(string);
  5136. return (fromRight ? string : '') + createPadding(string, length, chars) + (fromRight ? '' : string);
  5137. };
  5138. }
  5139. /**
  5140. * Creates a `_.partial` or `_.partialRight` function.
  5141. *
  5142. * @private
  5143. * @param {boolean} flag The partial bit flag.
  5144. * @returns {Function} Returns the new partial function.
  5145. */
  5146. function createPartial(flag) {
  5147. var partialFunc = restParam(function(func, partials) {
  5148. var holders = replaceHolders(partials, partialFunc.placeholder);
  5149. return createWrapper(func, flag, undefined, partials, holders);
  5150. });
  5151. return partialFunc;
  5152. }
  5153. /**
  5154. * Creates a function for `_.reduce` or `_.reduceRight`.
  5155. *
  5156. * @private
  5157. * @param {Function} arrayFunc The function to iterate over an array.
  5158. * @param {Function} eachFunc The function to iterate over a collection.
  5159. * @returns {Function} Returns the new each function.
  5160. */
  5161. function createReduce(arrayFunc, eachFunc) {
  5162. return function(collection, iteratee, accumulator, thisArg) {
  5163. var initFromArray = arguments.length < 3;
  5164. return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection))
  5165. ? arrayFunc(collection, iteratee, accumulator, initFromArray)
  5166. : baseReduce(collection, getCallback(iteratee, thisArg, 4), accumulator, initFromArray, eachFunc);
  5167. };
  5168. }
  5169. /**
  5170. * Creates a function that wraps `func` and invokes it with optional `this`
  5171. * binding of, partial application, and currying.
  5172. *
  5173. * @private
  5174. * @param {Function|string} func The function or method name to reference.
  5175. * @param {number} bitmask The bitmask of flags. See `createWrapper` for more details.
  5176. * @param {*} [thisArg] The `this` binding of `func`.
  5177. * @param {Array} [partials] The arguments to prepend to those provided to the new function.
  5178. * @param {Array} [holders] The `partials` placeholder indexes.
  5179. * @param {Array} [partialsRight] The arguments to append to those provided to the new function.
  5180. * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.
  5181. * @param {Array} [argPos] The argument positions of the new function.
  5182. * @param {number} [ary] The arity cap of `func`.
  5183. * @param {number} [arity] The arity of `func`.
  5184. * @returns {Function} Returns the new wrapped function.
  5185. */
  5186. function createHybridWrapper(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
  5187. var isAry = bitmask & ARY_FLAG,
  5188. isBind = bitmask & BIND_FLAG,
  5189. isBindKey = bitmask & BIND_KEY_FLAG,
  5190. isCurry = bitmask & CURRY_FLAG,
  5191. isCurryBound = bitmask & CURRY_BOUND_FLAG,
  5192. isCurryRight = bitmask & CURRY_RIGHT_FLAG,
  5193. Ctor = isBindKey ? undefined : createCtorWrapper(func);
  5194. function wrapper() {
  5195. // Avoid `arguments` object use disqualifying optimizations by
  5196. // converting it to an array before providing it to other functions.
  5197. var length = arguments.length,
  5198. index = length,
  5199. args = Array(length);
  5200. while (index--) {
  5201. args[index] = arguments[index];
  5202. }
  5203. if (partials) {
  5204. args = composeArgs(args, partials, holders);
  5205. }
  5206. if (partialsRight) {
  5207. args = composeArgsRight(args, partialsRight, holdersRight);
  5208. }
  5209. if (isCurry || isCurryRight) {
  5210. var placeholder = wrapper.placeholder,
  5211. argsHolders = replaceHolders(args, placeholder);
  5212. length -= argsHolders.length;
  5213. if (length < arity) {
  5214. var newArgPos = argPos ? arrayCopy(argPos) : undefined,
  5215. newArity = nativeMax(arity - length, 0),
  5216. newsHolders = isCurry ? argsHolders : undefined,
  5217. newHoldersRight = isCurry ? undefined : argsHolders,
  5218. newPartials = isCurry ? args : undefined,
  5219. newPartialsRight = isCurry ? undefined : args;
  5220. bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG);
  5221. bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG);
  5222. if (!isCurryBound) {
  5223. bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG);
  5224. }
  5225. var newData = [func, bitmask, thisArg, newPartials, newsHolders, newPartialsRight, newHoldersRight, newArgPos, ary, newArity],
  5226. result = createHybridWrapper.apply(undefined, newData);
  5227. if (isLaziable(func)) {
  5228. setData(result, newData);
  5229. }
  5230. result.placeholder = placeholder;
  5231. return result;
  5232. }
  5233. }
  5234. var thisBinding = isBind ? thisArg : this,
  5235. fn = isBindKey ? thisBinding[func] : func;
  5236. if (argPos) {
  5237. args = reorder(args, argPos);
  5238. }
  5239. if (isAry && ary < args.length) {
  5240. args.length = ary;
  5241. }
  5242. if (this && this !== root && this instanceof wrapper) {
  5243. fn = Ctor || createCtorWrapper(func);
  5244. }
  5245. return fn.apply(thisBinding, args);
  5246. }
  5247. return wrapper;
  5248. }
  5249. /**
  5250. * Creates the padding required for `string` based on the given `length`.
  5251. * The `chars` string is truncated if the number of characters exceeds `length`.
  5252. *
  5253. * @private
  5254. * @param {string} string The string to create padding for.
  5255. * @param {number} [length=0] The padding length.
  5256. * @param {string} [chars=' '] The string used as padding.
  5257. * @returns {string} Returns the pad for `string`.
  5258. */
  5259. function createPadding(string, length, chars) {
  5260. var strLength = string.length;
  5261. length = +length;
  5262. if (strLength >= length || !nativeIsFinite(length)) {
  5263. return '';
  5264. }
  5265. var padLength = length - strLength;
  5266. chars = chars == null ? ' ' : (chars + '');
  5267. return repeat(chars, nativeCeil(padLength / chars.length)).slice(0, padLength);
  5268. }
  5269. /**
  5270. * Creates a function that wraps `func` and invokes it with the optional `this`
  5271. * binding of `thisArg` and the `partials` prepended to those provided to
  5272. * the wrapper.
  5273. *
  5274. * @private
  5275. * @param {Function} func The function to partially apply arguments to.
  5276. * @param {number} bitmask The bitmask of flags. See `createWrapper` for more details.
  5277. * @param {*} thisArg The `this` binding of `func`.
  5278. * @param {Array} partials The arguments to prepend to those provided to the new function.
  5279. * @returns {Function} Returns the new bound function.
  5280. */
  5281. function createPartialWrapper(func, bitmask, thisArg, partials) {
  5282. var isBind = bitmask & BIND_FLAG,
  5283. Ctor = createCtorWrapper(func);
  5284. function wrapper() {
  5285. // Avoid `arguments` object use disqualifying optimizations by
  5286. // converting it to an array before providing it `func`.
  5287. var argsIndex = -1,
  5288. argsLength = arguments.length,
  5289. leftIndex = -1,
  5290. leftLength = partials.length,
  5291. args = Array(leftLength + argsLength);
  5292. while (++leftIndex < leftLength) {
  5293. args[leftIndex] = partials[leftIndex];
  5294. }
  5295. while (argsLength--) {
  5296. args[leftIndex++] = arguments[++argsIndex];
  5297. }
  5298. var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
  5299. return fn.apply(isBind ? thisArg : this, args);
  5300. }
  5301. return wrapper;
  5302. }
  5303. /**
  5304. * Creates a `_.ceil`, `_.floor`, or `_.round` function.
  5305. *
  5306. * @private
  5307. * @param {string} methodName The name of the `Math` method to use when rounding.
  5308. * @returns {Function} Returns the new round function.
  5309. */
  5310. function createRound(methodName) {
  5311. var func = Math[methodName];
  5312. return function(number, precision) {
  5313. precision = precision === undefined ? 0 : (+precision || 0);
  5314. if (precision) {
  5315. precision = pow(10, precision);
  5316. return func(number * precision) / precision;
  5317. }
  5318. return func(number);
  5319. };
  5320. }
  5321. /**
  5322. * Creates a `_.sortedIndex` or `_.sortedLastIndex` function.
  5323. *
  5324. * @private
  5325. * @param {boolean} [retHighest] Specify returning the highest qualified index.
  5326. * @returns {Function} Returns the new index function.
  5327. */
  5328. function createSortedIndex(retHighest) {
  5329. return function(array, value, iteratee, thisArg) {
  5330. var callback = getCallback(iteratee);
  5331. return (iteratee == null && callback === baseCallback)
  5332. ? binaryIndex(array, value, retHighest)
  5333. : binaryIndexBy(array, value, callback(iteratee, thisArg, 1), retHighest);
  5334. };
  5335. }
  5336. /**
  5337. * Creates a function that either curries or invokes `func` with optional
  5338. * `this` binding and partially applied arguments.
  5339. *
  5340. * @private
  5341. * @param {Function|string} func The function or method name to reference.
  5342. * @param {number} bitmask The bitmask of flags.
  5343. * The bitmask may be composed of the following flags:
  5344. * 1 - `_.bind`
  5345. * 2 - `_.bindKey`
  5346. * 4 - `_.curry` or `_.curryRight` of a bound function
  5347. * 8 - `_.curry`
  5348. * 16 - `_.curryRight`
  5349. * 32 - `_.partial`
  5350. * 64 - `_.partialRight`
  5351. * 128 - `_.rearg`
  5352. * 256 - `_.ary`
  5353. * @param {*} [thisArg] The `this` binding of `func`.
  5354. * @param {Array} [partials] The arguments to be partially applied.
  5355. * @param {Array} [holders] The `partials` placeholder indexes.
  5356. * @param {Array} [argPos] The argument positions of the new function.
  5357. * @param {number} [ary] The arity cap of `func`.
  5358. * @param {number} [arity] The arity of `func`.
  5359. * @returns {Function} Returns the new wrapped function.
  5360. */
  5361. function createWrapper(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {
  5362. var isBindKey = bitmask & BIND_KEY_FLAG;
  5363. if (!isBindKey && typeof func != 'function') {
  5364. throw new TypeError(FUNC_ERROR_TEXT);
  5365. }
  5366. var length = partials ? partials.length : 0;
  5367. if (!length) {
  5368. bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG);
  5369. partials = holders = undefined;
  5370. }
  5371. length -= (holders ? holders.length : 0);
  5372. if (bitmask & PARTIAL_RIGHT_FLAG) {
  5373. var partialsRight = partials,
  5374. holdersRight = holders;
  5375. partials = holders = undefined;
  5376. }
  5377. var data = isBindKey ? undefined : getData(func),
  5378. newData = [func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity];
  5379. if (data) {
  5380. mergeData(newData, data);
  5381. bitmask = newData[1];
  5382. arity = newData[9];
  5383. }
  5384. newData[9] = arity == null
  5385. ? (isBindKey ? 0 : func.length)
  5386. : (nativeMax(arity - length, 0) || 0);
  5387. if (bitmask == BIND_FLAG) {
  5388. var result = createBindWrapper(newData[0], newData[2]);
  5389. } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !newData[4].length) {
  5390. result = createPartialWrapper.apply(undefined, newData);
  5391. } else {
  5392. result = createHybridWrapper.apply(undefined, newData);
  5393. }
  5394. var setter = data ? baseSetData : setData;
  5395. return setter(result, newData);
  5396. }
  5397. /**
  5398. * A specialized version of `baseIsEqualDeep` for arrays with support for
  5399. * partial deep comparisons.
  5400. *
  5401. * @private
  5402. * @param {Array} array The array to compare.
  5403. * @param {Array} other The other array to compare.
  5404. * @param {Function} equalFunc The function to determine equivalents of values.
  5405. * @param {Function} [customizer] The function to customize comparing arrays.
  5406. * @param {boolean} [isLoose] Specify performing partial comparisons.
  5407. * @param {Array} [stackA] Tracks traversed `value` objects.
  5408. * @param {Array} [stackB] Tracks traversed `other` objects.
  5409. * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
  5410. */
  5411. function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) {
  5412. var index = -1,
  5413. arrLength = array.length,
  5414. othLength = other.length;
  5415. if (arrLength != othLength && !(isLoose && othLength > arrLength)) {
  5416. return false;
  5417. }
  5418. // Ignore non-index properties.
  5419. while (++index < arrLength) {
  5420. var arrValue = array[index],
  5421. othValue = other[index],
  5422. result = customizer ? customizer(isLoose ? othValue : arrValue, isLoose ? arrValue : othValue, index) : undefined;
  5423. if (result !== undefined) {
  5424. if (result) {
  5425. continue;
  5426. }
  5427. return false;
  5428. }
  5429. // Recursively compare arrays (susceptible to call stack limits).
  5430. if (isLoose) {
  5431. if (!arraySome(other, function(othValue) {
  5432. return arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);
  5433. })) {
  5434. return false;
  5435. }
  5436. } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB))) {
  5437. return false;
  5438. }
  5439. }
  5440. return true;
  5441. }
  5442. /**
  5443. * A specialized version of `baseIsEqualDeep` for comparing objects of
  5444. * the same `toStringTag`.
  5445. *
  5446. * **Note:** This function only supports comparing values with tags of
  5447. * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
  5448. *
  5449. * @private
  5450. * @param {Object} object The object to compare.
  5451. * @param {Object} other The other object to compare.
  5452. * @param {string} tag The `toStringTag` of the objects to compare.
  5453. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
  5454. */
  5455. function equalByTag(object, other, tag) {
  5456. switch (tag) {
  5457. case boolTag:
  5458. case dateTag:
  5459. // Coerce dates and booleans to numbers, dates to milliseconds and booleans
  5460. // to `1` or `0` treating invalid dates coerced to `NaN` as not equal.
  5461. return +object == +other;
  5462. case errorTag:
  5463. return object.name == other.name && object.message == other.message;
  5464. case numberTag:
  5465. // Treat `NaN` vs. `NaN` as equal.
  5466. return (object != +object)
  5467. ? other != +other
  5468. : object == +other;
  5469. case regexpTag:
  5470. case stringTag:
  5471. // Coerce regexes to strings and treat strings primitives and string
  5472. // objects as equal. See https://es5.github.io/#x15.10.6.4 for more details.
  5473. return object == (other + '');
  5474. }
  5475. return false;
  5476. }
  5477. /**
  5478. * A specialized version of `baseIsEqualDeep` for objects with support for
  5479. * partial deep comparisons.
  5480. *
  5481. * @private
  5482. * @param {Object} object The object to compare.
  5483. * @param {Object} other The other object to compare.
  5484. * @param {Function} equalFunc The function to determine equivalents of values.
  5485. * @param {Function} [customizer] The function to customize comparing values.
  5486. * @param {boolean} [isLoose] Specify performing partial comparisons.
  5487. * @param {Array} [stackA] Tracks traversed `value` objects.
  5488. * @param {Array} [stackB] Tracks traversed `other` objects.
  5489. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
  5490. */
  5491. function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) {
  5492. var objProps = keys(object),
  5493. objLength = objProps.length,
  5494. othProps = keys(other),
  5495. othLength = othProps.length;
  5496. if (objLength != othLength && !isLoose) {
  5497. return false;
  5498. }
  5499. var index = objLength;
  5500. while (index--) {
  5501. var key = objProps[index];
  5502. if (!(isLoose ? key in other : hasOwnProperty.call(other, key))) {
  5503. return false;
  5504. }
  5505. }
  5506. var skipCtor = isLoose;
  5507. while (++index < objLength) {
  5508. key = objProps[index];
  5509. var objValue = object[key],
  5510. othValue = other[key],
  5511. result = customizer ? customizer(isLoose ? othValue : objValue, isLoose? objValue : othValue, key) : undefined;
  5512. // Recursively compare objects (susceptible to call stack limits).
  5513. if (!(result === undefined ? equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB) : result)) {
  5514. return false;
  5515. }
  5516. skipCtor || (skipCtor = key == 'constructor');
  5517. }
  5518. if (!skipCtor) {
  5519. var objCtor = object.constructor,
  5520. othCtor = other.constructor;
  5521. // Non `Object` object instances with different constructors are not equal.
  5522. if (objCtor != othCtor &&
  5523. ('constructor' in object && 'constructor' in other) &&
  5524. !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
  5525. typeof othCtor == 'function' && othCtor instanceof othCtor)) {
  5526. return false;
  5527. }
  5528. }
  5529. return true;
  5530. }
  5531. /**
  5532. * Gets the appropriate "callback" function. If the `_.callback` method is
  5533. * customized this function returns the custom method, otherwise it returns
  5534. * the `baseCallback` function. If arguments are provided the chosen function
  5535. * is invoked with them and its result is returned.
  5536. *
  5537. * @private
  5538. * @returns {Function} Returns the chosen function or its result.
  5539. */
  5540. function getCallback(func, thisArg, argCount) {
  5541. var result = lodash.callback || callback;
  5542. result = result === callback ? baseCallback : result;
  5543. return argCount ? result(func, thisArg, argCount) : result;
  5544. }
  5545. /**
  5546. * Gets metadata for `func`.
  5547. *
  5548. * @private
  5549. * @param {Function} func The function to query.
  5550. * @returns {*} Returns the metadata for `func`.
  5551. */
  5552. var getData = !metaMap ? noop : function(func) {
  5553. return metaMap.get(func);
  5554. };
  5555. /**
  5556. * Gets the name of `func`.
  5557. *
  5558. * @private
  5559. * @param {Function} func The function to query.
  5560. * @returns {string} Returns the function name.
  5561. */
  5562. function getFuncName(func) {
  5563. var result = func.name,
  5564. array = realNames[result],
  5565. length = array ? array.length : 0;
  5566. while (length--) {
  5567. var data = array[length],
  5568. otherFunc = data.func;
  5569. if (otherFunc == null || otherFunc == func) {
  5570. return data.name;
  5571. }
  5572. }
  5573. return result;
  5574. }
  5575. /**
  5576. * Gets the appropriate "indexOf" function. If the `_.indexOf` method is
  5577. * customized this function returns the custom method, otherwise it returns
  5578. * the `baseIndexOf` function. If arguments are provided the chosen function
  5579. * is invoked with them and its result is returned.
  5580. *
  5581. * @private
  5582. * @returns {Function|number} Returns the chosen function or its result.
  5583. */
  5584. function getIndexOf(collection, target, fromIndex) {
  5585. var result = lodash.indexOf || indexOf;
  5586. result = result === indexOf ? baseIndexOf : result;
  5587. return collection ? result(collection, target, fromIndex) : result;
  5588. }
  5589. /**
  5590. * Gets the "length" property value of `object`.
  5591. *
  5592. * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)
  5593. * that affects Safari on at least iOS 8.1-8.3 ARM64.
  5594. *
  5595. * @private
  5596. * @param {Object} object The object to query.
  5597. * @returns {*} Returns the "length" value.
  5598. */
  5599. var getLength = baseProperty('length');
  5600. /**
  5601. * Gets the propery names, values, and compare flags of `object`.
  5602. *
  5603. * @private
  5604. * @param {Object} object The object to query.
  5605. * @returns {Array} Returns the match data of `object`.
  5606. */
  5607. function getMatchData(object) {
  5608. var result = pairs(object),
  5609. length = result.length;
  5610. while (length--) {
  5611. result[length][2] = isStrictComparable(result[length][1]);
  5612. }
  5613. return result;
  5614. }
  5615. /**
  5616. * Gets the native function at `key` of `object`.
  5617. *
  5618. * @private
  5619. * @param {Object} object The object to query.
  5620. * @param {string} key The key of the method to get.
  5621. * @returns {*} Returns the function if it's native, else `undefined`.
  5622. */
  5623. function getNative(object, key) {
  5624. var value = object == null ? undefined : object[key];
  5625. return isNative(value) ? value : undefined;
  5626. }
  5627. /**
  5628. * Gets the view, applying any `transforms` to the `start` and `end` positions.
  5629. *
  5630. * @private
  5631. * @param {number} start The start of the view.
  5632. * @param {number} end The end of the view.
  5633. * @param {Array} transforms The transformations to apply to the view.
  5634. * @returns {Object} Returns an object containing the `start` and `end`
  5635. * positions of the view.
  5636. */
  5637. function getView(start, end, transforms) {
  5638. var index = -1,
  5639. length = transforms.length;
  5640. while (++index < length) {
  5641. var data = transforms[index],
  5642. size = data.size;
  5643. switch (data.type) {
  5644. case 'drop': start += size; break;
  5645. case 'dropRight': end -= size; break;
  5646. case 'take': end = nativeMin(end, start + size); break;
  5647. case 'takeRight': start = nativeMax(start, end - size); break;
  5648. }
  5649. }
  5650. return { 'start': start, 'end': end };
  5651. }
  5652. /**
  5653. * Initializes an array clone.
  5654. *
  5655. * @private
  5656. * @param {Array} array The array to clone.
  5657. * @returns {Array} Returns the initialized clone.
  5658. */
  5659. function initCloneArray(array) {
  5660. var length = array.length,
  5661. result = new array.constructor(length);
  5662. // Add array properties assigned by `RegExp#exec`.
  5663. if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
  5664. result.index = array.index;
  5665. result.input = array.input;
  5666. }
  5667. return result;
  5668. }
  5669. /**
  5670. * Initializes an object clone.
  5671. *
  5672. * @private
  5673. * @param {Object} object The object to clone.
  5674. * @returns {Object} Returns the initialized clone.
  5675. */
  5676. function initCloneObject(object) {
  5677. var Ctor = object.constructor;
  5678. if (!(typeof Ctor == 'function' && Ctor instanceof Ctor)) {
  5679. Ctor = Object;
  5680. }
  5681. return new Ctor;
  5682. }
  5683. /**
  5684. * Initializes an object clone based on its `toStringTag`.
  5685. *
  5686. * **Note:** This function only supports cloning values with tags of
  5687. * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
  5688. *
  5689. * @private
  5690. * @param {Object} object The object to clone.
  5691. * @param {string} tag The `toStringTag` of the object to clone.
  5692. * @param {boolean} [isDeep] Specify a deep clone.
  5693. * @returns {Object} Returns the initialized clone.
  5694. */
  5695. function initCloneByTag(object, tag, isDeep) {
  5696. var Ctor = object.constructor;
  5697. switch (tag) {
  5698. case arrayBufferTag:
  5699. return bufferClone(object);
  5700. case boolTag:
  5701. case dateTag:
  5702. return new Ctor(+object);
  5703. case float32Tag: case float64Tag:
  5704. case int8Tag: case int16Tag: case int32Tag:
  5705. case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
  5706. var buffer = object.buffer;
  5707. return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length);
  5708. case numberTag:
  5709. case stringTag:
  5710. return new Ctor(object);
  5711. case regexpTag:
  5712. var result = new Ctor(object.source, reFlags.exec(object));
  5713. result.lastIndex = object.lastIndex;
  5714. }
  5715. return result;
  5716. }
  5717. /**
  5718. * Invokes the method at `path` on `object`.
  5719. *
  5720. * @private
  5721. * @param {Object} object The object to query.
  5722. * @param {Array|string} path The path of the method to invoke.
  5723. * @param {Array} args The arguments to invoke the method with.
  5724. * @returns {*} Returns the result of the invoked method.
  5725. */
  5726. function invokePath(object, path, args) {
  5727. if (object != null && !isKey(path, object)) {
  5728. path = toPath(path);
  5729. object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));
  5730. path = last(path);
  5731. }
  5732. var func = object == null ? object : object[path];
  5733. return func == null ? undefined : func.apply(object, args);
  5734. }
  5735. /**
  5736. * Checks if `value` is array-like.
  5737. *
  5738. * @private
  5739. * @param {*} value The value to check.
  5740. * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
  5741. */
  5742. function isArrayLike(value) {
  5743. return value != null && isLength(getLength(value));
  5744. }
  5745. /**
  5746. * Checks if `value` is a valid array-like index.
  5747. *
  5748. * @private
  5749. * @param {*} value The value to check.
  5750. * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
  5751. * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
  5752. */
  5753. function isIndex(value, length) {
  5754. value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;
  5755. length = length == null ? MAX_SAFE_INTEGER : length;
  5756. return value > -1 && value % 1 == 0 && value < length;
  5757. }
  5758. /**
  5759. * Checks if the provided arguments are from an iteratee call.
  5760. *
  5761. * @private
  5762. * @param {*} value The potential iteratee value argument.
  5763. * @param {*} index The potential iteratee index or key argument.
  5764. * @param {*} object The potential iteratee object argument.
  5765. * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.
  5766. */
  5767. function isIterateeCall(value, index, object) {
  5768. if (!isObject(object)) {
  5769. return false;
  5770. }
  5771. var type = typeof index;
  5772. if (type == 'number'
  5773. ? (isArrayLike(object) && isIndex(index, object.length))
  5774. : (type == 'string' && index in object)) {
  5775. var other = object[index];
  5776. return value === value ? (value === other) : (other !== other);
  5777. }
  5778. return false;
  5779. }
  5780. /**
  5781. * Checks if `value` is a property name and not a property path.
  5782. *
  5783. * @private
  5784. * @param {*} value The value to check.
  5785. * @param {Object} [object] The object to query keys on.
  5786. * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
  5787. */
  5788. function isKey(value, object) {
  5789. var type = typeof value;
  5790. if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') {
  5791. return true;
  5792. }
  5793. if (isArray(value)) {
  5794. return false;
  5795. }
  5796. var result = !reIsDeepProp.test(value);
  5797. return result || (object != null && value in toObject(object));
  5798. }
  5799. /**
  5800. * Checks if `func` has a lazy counterpart.
  5801. *
  5802. * @private
  5803. * @param {Function} func The function to check.
  5804. * @returns {boolean} Returns `true` if `func` has a lazy counterpart, else `false`.
  5805. */
  5806. function isLaziable(func) {
  5807. var funcName = getFuncName(func);
  5808. if (!(funcName in LazyWrapper.prototype)) {
  5809. return false;
  5810. }
  5811. var other = lodash[funcName];
  5812. if (func === other) {
  5813. return true;
  5814. }
  5815. var data = getData(other);
  5816. return !!data && func === data[0];
  5817. }
  5818. /**
  5819. * Checks if `value` is a valid array-like length.
  5820. *
  5821. * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).
  5822. *
  5823. * @private
  5824. * @param {*} value The value to check.
  5825. * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
  5826. */
  5827. function isLength(value) {
  5828. return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
  5829. }
  5830. /**
  5831. * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
  5832. *
  5833. * @private
  5834. * @param {*} value The value to check.
  5835. * @returns {boolean} Returns `true` if `value` if suitable for strict
  5836. * equality comparisons, else `false`.
  5837. */
  5838. function isStrictComparable(value) {
  5839. return value === value && !isObject(value);
  5840. }
  5841. /**
  5842. * Merges the function metadata of `source` into `data`.
  5843. *
  5844. * Merging metadata reduces the number of wrappers required to invoke a function.
  5845. * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`
  5846. * may be applied regardless of execution order. Methods like `_.ary` and `_.rearg`
  5847. * augment function arguments, making the order in which they are executed important,
  5848. * preventing the merging of metadata. However, we make an exception for a safe
  5849. * common case where curried functions have `_.ary` and or `_.rearg` applied.
  5850. *
  5851. * @private
  5852. * @param {Array} data The destination metadata.
  5853. * @param {Array} source The source metadata.
  5854. * @returns {Array} Returns `data`.
  5855. */
  5856. function mergeData(data, source) {
  5857. var bitmask = data[1],
  5858. srcBitmask = source[1],
  5859. newBitmask = bitmask | srcBitmask,
  5860. isCommon = newBitmask < ARY_FLAG;
  5861. var isCombo =
  5862. (srcBitmask == ARY_FLAG && bitmask == CURRY_FLAG) ||
  5863. (srcBitmask == ARY_FLAG && bitmask == REARG_FLAG && data[7].length <= source[8]) ||
  5864. (srcBitmask == (ARY_FLAG | REARG_FLAG) && bitmask == CURRY_FLAG);
  5865. // Exit early if metadata can't be merged.
  5866. if (!(isCommon || isCombo)) {
  5867. return data;
  5868. }
  5869. // Use source `thisArg` if available.
  5870. if (srcBitmask & BIND_FLAG) {
  5871. data[2] = source[2];
  5872. // Set when currying a bound function.
  5873. newBitmask |= (bitmask & BIND_FLAG) ? 0 : CURRY_BOUND_FLAG;
  5874. }
  5875. // Compose partial arguments.
  5876. var value = source[3];
  5877. if (value) {
  5878. var partials = data[3];
  5879. data[3] = partials ? composeArgs(partials, value, source[4]) : arrayCopy(value);
  5880. data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : arrayCopy(source[4]);
  5881. }
  5882. // Compose partial right arguments.
  5883. value = source[5];
  5884. if (value) {
  5885. partials = data[5];
  5886. data[5] = partials ? composeArgsRight(partials, value, source[6]) : arrayCopy(value);
  5887. data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : arrayCopy(source[6]);
  5888. }
  5889. // Use source `argPos` if available.
  5890. value = source[7];
  5891. if (value) {
  5892. data[7] = arrayCopy(value);
  5893. }
  5894. // Use source `ary` if it's smaller.
  5895. if (srcBitmask & ARY_FLAG) {
  5896. data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);
  5897. }
  5898. // Use source `arity` if one is not provided.
  5899. if (data[9] == null) {
  5900. data[9] = source[9];
  5901. }
  5902. // Use source `func` and merge bitmasks.
  5903. data[0] = source[0];
  5904. data[1] = newBitmask;
  5905. return data;
  5906. }
  5907. /**
  5908. * Used by `_.defaultsDeep` to customize its `_.merge` use.
  5909. *
  5910. * @private
  5911. * @param {*} objectValue The destination object property value.
  5912. * @param {*} sourceValue The source object property value.
  5913. * @returns {*} Returns the value to assign to the destination object.
  5914. */
  5915. function mergeDefaults(objectValue, sourceValue) {
  5916. return objectValue === undefined ? sourceValue : merge(objectValue, sourceValue, mergeDefaults);
  5917. }
  5918. /**
  5919. * A specialized version of `_.pick` which picks `object` properties specified
  5920. * by `props`.
  5921. *
  5922. * @private
  5923. * @param {Object} object The source object.
  5924. * @param {string[]} props The property names to pick.
  5925. * @returns {Object} Returns the new object.
  5926. */
  5927. function pickByArray(object, props) {
  5928. object = toObject(object);
  5929. var index = -1,
  5930. length = props.length,
  5931. result = {};
  5932. while (++index < length) {
  5933. var key = props[index];
  5934. if (key in object) {
  5935. result[key] = object[key];
  5936. }
  5937. }
  5938. return result;
  5939. }
  5940. /**
  5941. * A specialized version of `_.pick` which picks `object` properties `predicate`
  5942. * returns truthy for.
  5943. *
  5944. * @private
  5945. * @param {Object} object The source object.
  5946. * @param {Function} predicate The function invoked per iteration.
  5947. * @returns {Object} Returns the new object.
  5948. */
  5949. function pickByCallback(object, predicate) {
  5950. var result = {};
  5951. baseForIn(object, function(value, key, object) {
  5952. if (predicate(value, key, object)) {
  5953. result[key] = value;
  5954. }
  5955. });
  5956. return result;
  5957. }
  5958. /**
  5959. * Reorder `array` according to the specified indexes where the element at
  5960. * the first index is assigned as the first element, the element at
  5961. * the second index is assigned as the second element, and so on.
  5962. *
  5963. * @private
  5964. * @param {Array} array The array to reorder.
  5965. * @param {Array} indexes The arranged array indexes.
  5966. * @returns {Array} Returns `array`.
  5967. */
  5968. function reorder(array, indexes) {
  5969. var arrLength = array.length,
  5970. length = nativeMin(indexes.length, arrLength),
  5971. oldArray = arrayCopy(array);
  5972. while (length--) {
  5973. var index = indexes[length];
  5974. array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;
  5975. }
  5976. return array;
  5977. }
  5978. /**
  5979. * Sets metadata for `func`.
  5980. *
  5981. * **Note:** If this function becomes hot, i.e. is invoked a lot in a short
  5982. * period of time, it will trip its breaker and transition to an identity function
  5983. * to avoid garbage collection pauses in V8. See [V8 issue 2070](https://code.google.com/p/v8/issues/detail?id=2070)
  5984. * for more details.
  5985. *
  5986. * @private
  5987. * @param {Function} func The function to associate metadata with.
  5988. * @param {*} data The metadata.
  5989. * @returns {Function} Returns `func`.
  5990. */
  5991. var setData = (function() {
  5992. var count = 0,
  5993. lastCalled = 0;
  5994. return function(key, value) {
  5995. var stamp = now(),
  5996. remaining = HOT_SPAN - (stamp - lastCalled);
  5997. lastCalled = stamp;
  5998. if (remaining > 0) {
  5999. if (++count >= HOT_COUNT) {
  6000. return key;
  6001. }
  6002. } else {
  6003. count = 0;
  6004. }
  6005. return baseSetData(key, value);
  6006. };
  6007. }());
  6008. /**
  6009. * A fallback implementation of `Object.keys` which creates an array of the
  6010. * own enumerable property names of `object`.
  6011. *
  6012. * @private
  6013. * @param {Object} object The object to query.
  6014. * @returns {Array} Returns the array of property names.
  6015. */
  6016. function shimKeys(object) {
  6017. var props = keysIn(object),
  6018. propsLength = props.length,
  6019. length = propsLength && object.length;
  6020. var allowIndexes = !!length && isLength(length) &&
  6021. (isArray(object) || isArguments(object));
  6022. var index = -1,
  6023. result = [];
  6024. while (++index < propsLength) {
  6025. var key = props[index];
  6026. if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {
  6027. result.push(key);
  6028. }
  6029. }
  6030. return result;
  6031. }
  6032. /**
  6033. * Converts `value` to an array-like object if it's not one.
  6034. *
  6035. * @private
  6036. * @param {*} value The value to process.
  6037. * @returns {Array|Object} Returns the array-like object.
  6038. */
  6039. function toIterable(value) {
  6040. if (value == null) {
  6041. return [];
  6042. }
  6043. if (!isArrayLike(value)) {
  6044. return values(value);
  6045. }
  6046. return isObject(value) ? value : Object(value);
  6047. }
  6048. /**
  6049. * Converts `value` to an object if it's not one.
  6050. *
  6051. * @private
  6052. * @param {*} value The value to process.
  6053. * @returns {Object} Returns the object.
  6054. */
  6055. function toObject(value) {
  6056. return isObject(value) ? value : Object(value);
  6057. }
  6058. /**
  6059. * Converts `value` to property path array if it's not one.
  6060. *
  6061. * @private
  6062. * @param {*} value The value to process.
  6063. * @returns {Array} Returns the property path array.
  6064. */
  6065. function toPath(value) {
  6066. if (isArray(value)) {
  6067. return value;
  6068. }
  6069. var result = [];
  6070. baseToString(value).replace(rePropName, function(match, number, quote, string) {
  6071. result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));
  6072. });
  6073. return result;
  6074. }
  6075. /**
  6076. * Creates a clone of `wrapper`.
  6077. *
  6078. * @private
  6079. * @param {Object} wrapper The wrapper to clone.
  6080. * @returns {Object} Returns the cloned wrapper.
  6081. */
  6082. function wrapperClone(wrapper) {
  6083. return wrapper instanceof LazyWrapper
  6084. ? wrapper.clone()
  6085. : new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__, arrayCopy(wrapper.__actions__));
  6086. }
  6087. /*------------------------------------------------------------------------*/
  6088. /**
  6089. * Creates an array of elements split into groups the length of `size`.
  6090. * If `collection` can't be split evenly, the final chunk will be the remaining
  6091. * elements.
  6092. *
  6093. * @static
  6094. * @memberOf _
  6095. * @category Array
  6096. * @param {Array} array The array to process.
  6097. * @param {number} [size=1] The length of each chunk.
  6098. * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
  6099. * @returns {Array} Returns the new array containing chunks.
  6100. * @example
  6101. *
  6102. * _.chunk(['a', 'b', 'c', 'd'], 2);
  6103. * // => [['a', 'b'], ['c', 'd']]
  6104. *
  6105. * _.chunk(['a', 'b', 'c', 'd'], 3);
  6106. * // => [['a', 'b', 'c'], ['d']]
  6107. */
  6108. function chunk(array, size, guard) {
  6109. if (guard ? isIterateeCall(array, size, guard) : size == null) {
  6110. size = 1;
  6111. } else {
  6112. size = nativeMax(nativeFloor(size) || 1, 1);
  6113. }
  6114. var index = 0,
  6115. length = array ? array.length : 0,
  6116. resIndex = -1,
  6117. result = Array(nativeCeil(length / size));
  6118. while (index < length) {
  6119. result[++resIndex] = baseSlice(array, index, (index += size));
  6120. }
  6121. return result;
  6122. }
  6123. /**
  6124. * Creates an array with all falsey values removed. The values `false`, `null`,
  6125. * `0`, `""`, `undefined`, and `NaN` are falsey.
  6126. *
  6127. * @static
  6128. * @memberOf _
  6129. * @category Array
  6130. * @param {Array} array The array to compact.
  6131. * @returns {Array} Returns the new array of filtered values.
  6132. * @example
  6133. *
  6134. * _.compact([0, 1, false, 2, '', 3]);
  6135. * // => [1, 2, 3]
  6136. */
  6137. function compact(array) {
  6138. var index = -1,
  6139. length = array ? array.length : 0,
  6140. resIndex = -1,
  6141. result = [];
  6142. while (++index < length) {
  6143. var value = array[index];
  6144. if (value) {
  6145. result[++resIndex] = value;
  6146. }
  6147. }
  6148. return result;
  6149. }
  6150. /**
  6151. * Creates an array of unique `array` values not included in the other
  6152. * provided arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
  6153. * for equality comparisons.
  6154. *
  6155. * @static
  6156. * @memberOf _
  6157. * @category Array
  6158. * @param {Array} array The array to inspect.
  6159. * @param {...Array} [values] The arrays of values to exclude.
  6160. * @returns {Array} Returns the new array of filtered values.
  6161. * @example
  6162. *
  6163. * _.difference([1, 2, 3], [4, 2]);
  6164. * // => [1, 3]
  6165. */
  6166. var difference = restParam(function(array, values) {
  6167. return (isObjectLike(array) && isArrayLike(array))
  6168. ? baseDifference(array, baseFlatten(values, false, true))
  6169. : [];
  6170. });
  6171. /**
  6172. * Creates a slice of `array` with `n` elements dropped from the beginning.
  6173. *
  6174. * @static
  6175. * @memberOf _
  6176. * @category Array
  6177. * @param {Array} array The array to query.
  6178. * @param {number} [n=1] The number of elements to drop.
  6179. * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
  6180. * @returns {Array} Returns the slice of `array`.
  6181. * @example
  6182. *
  6183. * _.drop([1, 2, 3]);
  6184. * // => [2, 3]
  6185. *
  6186. * _.drop([1, 2, 3], 2);
  6187. * // => [3]
  6188. *
  6189. * _.drop([1, 2, 3], 5);
  6190. * // => []
  6191. *
  6192. * _.drop([1, 2, 3], 0);
  6193. * // => [1, 2, 3]
  6194. */
  6195. function drop(array, n, guard) {
  6196. var length = array ? array.length : 0;
  6197. if (!length) {
  6198. return [];
  6199. }
  6200. if (guard ? isIterateeCall(array, n, guard) : n == null) {
  6201. n = 1;
  6202. }
  6203. return baseSlice(array, n < 0 ? 0 : n);
  6204. }
  6205. /**
  6206. * Creates a slice of `array` with `n` elements dropped from the end.
  6207. *
  6208. * @static
  6209. * @memberOf _
  6210. * @category Array
  6211. * @param {Array} array The array to query.
  6212. * @param {number} [n=1] The number of elements to drop.
  6213. * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
  6214. * @returns {Array} Returns the slice of `array`.
  6215. * @example
  6216. *
  6217. * _.dropRight([1, 2, 3]);
  6218. * // => [1, 2]
  6219. *
  6220. * _.dropRight([1, 2, 3], 2);
  6221. * // => [1]
  6222. *
  6223. * _.dropRight([1, 2, 3], 5);
  6224. * // => []
  6225. *
  6226. * _.dropRight([1, 2, 3], 0);
  6227. * // => [1, 2, 3]
  6228. */
  6229. function dropRight(array, n, guard) {
  6230. var length = array ? array.length : 0;
  6231. if (!length) {
  6232. return [];
  6233. }
  6234. if (guard ? isIterateeCall(array, n, guard) : n == null) {
  6235. n = 1;
  6236. }
  6237. n = length - (+n || 0);
  6238. return baseSlice(array, 0, n < 0 ? 0 : n);
  6239. }
  6240. /**
  6241. * Creates a slice of `array` excluding elements dropped from the end.
  6242. * Elements are dropped until `predicate` returns falsey. The predicate is
  6243. * bound to `thisArg` and invoked with three arguments: (value, index, array).
  6244. *
  6245. * If a property name is provided for `predicate` the created `_.property`
  6246. * style callback returns the property value of the given element.
  6247. *
  6248. * If a value is also provided for `thisArg` the created `_.matchesProperty`
  6249. * style callback returns `true` for elements that have a matching property
  6250. * value, else `false`.
  6251. *
  6252. * If an object is provided for `predicate` the created `_.matches` style
  6253. * callback returns `true` for elements that match the properties of the given
  6254. * object, else `false`.
  6255. *
  6256. * @static
  6257. * @memberOf _
  6258. * @category Array
  6259. * @param {Array} array The array to query.
  6260. * @param {Function|Object|string} [predicate=_.identity] The function invoked
  6261. * per iteration.
  6262. * @param {*} [thisArg] The `this` binding of `predicate`.
  6263. * @returns {Array} Returns the slice of `array`.
  6264. * @example
  6265. *
  6266. * _.dropRightWhile([1, 2, 3], function(n) {
  6267. * return n > 1;
  6268. * });
  6269. * // => [1]
  6270. *
  6271. * var users = [
  6272. * { 'user': 'barney', 'active': true },
  6273. * { 'user': 'fred', 'active': false },
  6274. * { 'user': 'pebbles', 'active': false }
  6275. * ];
  6276. *
  6277. * // using the `_.matches` callback shorthand
  6278. * _.pluck(_.dropRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user');
  6279. * // => ['barney', 'fred']
  6280. *
  6281. * // using the `_.matchesProperty` callback shorthand
  6282. * _.pluck(_.dropRightWhile(users, 'active', false), 'user');
  6283. * // => ['barney']
  6284. *
  6285. * // using the `_.property` callback shorthand
  6286. * _.pluck(_.dropRightWhile(users, 'active'), 'user');
  6287. * // => ['barney', 'fred', 'pebbles']
  6288. */
  6289. function dropRightWhile(array, predicate, thisArg) {
  6290. return (array && array.length)
  6291. ? baseWhile(array, getCallback(predicate, thisArg, 3), true, true)
  6292. : [];
  6293. }
  6294. /**
  6295. * Creates a slice of `array` excluding elements dropped from the beginning.
  6296. * Elements are dropped until `predicate` returns falsey. The predicate is
  6297. * bound to `thisArg` and invoked with three arguments: (value, index, array).
  6298. *
  6299. * If a property name is provided for `predicate` the created `_.property`
  6300. * style callback returns the property value of the given element.
  6301. *
  6302. * If a value is also provided for `thisArg` the created `_.matchesProperty`
  6303. * style callback returns `true` for elements that have a matching property
  6304. * value, else `false`.
  6305. *
  6306. * If an object is provided for `predicate` the created `_.matches` style
  6307. * callback returns `true` for elements that have the properties of the given
  6308. * object, else `false`.
  6309. *
  6310. * @static
  6311. * @memberOf _
  6312. * @category Array
  6313. * @param {Array} array The array to query.
  6314. * @param {Function|Object|string} [predicate=_.identity] The function invoked
  6315. * per iteration.
  6316. * @param {*} [thisArg] The `this` binding of `predicate`.
  6317. * @returns {Array} Returns the slice of `array`.
  6318. * @example
  6319. *
  6320. * _.dropWhile([1, 2, 3], function(n) {
  6321. * return n < 3;
  6322. * });
  6323. * // => [3]
  6324. *
  6325. * var users = [
  6326. * { 'user': 'barney', 'active': false },
  6327. * { 'user': 'fred', 'active': false },
  6328. * { 'user': 'pebbles', 'active': true }
  6329. * ];
  6330. *
  6331. * // using the `_.matches` callback shorthand
  6332. * _.pluck(_.dropWhile(users, { 'user': 'barney', 'active': false }), 'user');
  6333. * // => ['fred', 'pebbles']
  6334. *
  6335. * // using the `_.matchesProperty` callback shorthand
  6336. * _.pluck(_.dropWhile(users, 'active', false), 'user');
  6337. * // => ['pebbles']
  6338. *
  6339. * // using the `_.property` callback shorthand
  6340. * _.pluck(_.dropWhile(users, 'active'), 'user');
  6341. * // => ['barney', 'fred', 'pebbles']
  6342. */
  6343. function dropWhile(array, predicate, thisArg) {
  6344. return (array && array.length)
  6345. ? baseWhile(array, getCallback(predicate, thisArg, 3), true)
  6346. : [];
  6347. }
  6348. /**
  6349. * Fills elements of `array` with `value` from `start` up to, but not
  6350. * including, `end`.
  6351. *
  6352. * **Note:** This method mutates `array`.
  6353. *
  6354. * @static
  6355. * @memberOf _
  6356. * @category Array
  6357. * @param {Array} array The array to fill.
  6358. * @param {*} value The value to fill `array` with.
  6359. * @param {number} [start=0] The start position.
  6360. * @param {number} [end=array.length] The end position.
  6361. * @returns {Array} Returns `array`.
  6362. * @example
  6363. *
  6364. * var array = [1, 2, 3];
  6365. *
  6366. * _.fill(array, 'a');
  6367. * console.log(array);
  6368. * // => ['a', 'a', 'a']
  6369. *
  6370. * _.fill(Array(3), 2);
  6371. * // => [2, 2, 2]
  6372. *
  6373. * _.fill([4, 6, 8], '*', 1, 2);
  6374. * // => [4, '*', 8]
  6375. */
  6376. function fill(array, value, start, end) {
  6377. var length = array ? array.length : 0;
  6378. if (!length) {
  6379. return [];
  6380. }
  6381. if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {
  6382. start = 0;
  6383. end = length;
  6384. }
  6385. return baseFill(array, value, start, end);
  6386. }
  6387. /**
  6388. * This method is like `_.find` except that it returns the index of the first
  6389. * element `predicate` returns truthy for instead of the element itself.
  6390. *
  6391. * If a property name is provided for `predicate` the created `_.property`
  6392. * style callback returns the property value of the given element.
  6393. *
  6394. * If a value is also provided for `thisArg` the created `_.matchesProperty`
  6395. * style callback returns `true` for elements that have a matching property
  6396. * value, else `false`.
  6397. *
  6398. * If an object is provided for `predicate` the created `_.matches` style
  6399. * callback returns `true` for elements that have the properties of the given
  6400. * object, else `false`.
  6401. *
  6402. * @static
  6403. * @memberOf _
  6404. * @category Array
  6405. * @param {Array} array The array to search.
  6406. * @param {Function|Object|string} [predicate=_.identity] The function invoked
  6407. * per iteration.
  6408. * @param {*} [thisArg] The `this` binding of `predicate`.
  6409. * @returns {number} Returns the index of the found element, else `-1`.
  6410. * @example
  6411. *
  6412. * var users = [
  6413. * { 'user': 'barney', 'active': false },
  6414. * { 'user': 'fred', 'active': false },
  6415. * { 'user': 'pebbles', 'active': true }
  6416. * ];
  6417. *
  6418. * _.findIndex(users, function(chr) {
  6419. * return chr.user == 'barney';
  6420. * });
  6421. * // => 0
  6422. *
  6423. * // using the `_.matches` callback shorthand
  6424. * _.findIndex(users, { 'user': 'fred', 'active': false });
  6425. * // => 1
  6426. *
  6427. * // using the `_.matchesProperty` callback shorthand
  6428. * _.findIndex(users, 'active', false);
  6429. * // => 0
  6430. *
  6431. * // using the `_.property` callback shorthand
  6432. * _.findIndex(users, 'active');
  6433. * // => 2
  6434. */
  6435. var findIndex = createFindIndex();
  6436. /**
  6437. * This method is like `_.findIndex` except that it iterates over elements
  6438. * of `collection` from right to left.
  6439. *
  6440. * If a property name is provided for `predicate` the created `_.property`
  6441. * style callback returns the property value of the given element.
  6442. *
  6443. * If a value is also provided for `thisArg` the created `_.matchesProperty`
  6444. * style callback returns `true` for elements that have a matching property
  6445. * value, else `false`.
  6446. *
  6447. * If an object is provided for `predicate` the created `_.matches` style
  6448. * callback returns `true` for elements that have the properties of the given
  6449. * object, else `false`.
  6450. *
  6451. * @static
  6452. * @memberOf _
  6453. * @category Array
  6454. * @param {Array} array The array to search.
  6455. * @param {Function|Object|string} [predicate=_.identity] The function invoked
  6456. * per iteration.
  6457. * @param {*} [thisArg] The `this` binding of `predicate`.
  6458. * @returns {number} Returns the index of the found element, else `-1`.
  6459. * @example
  6460. *
  6461. * var users = [
  6462. * { 'user': 'barney', 'active': true },
  6463. * { 'user': 'fred', 'active': false },
  6464. * { 'user': 'pebbles', 'active': false }
  6465. * ];
  6466. *
  6467. * _.findLastIndex(users, function(chr) {
  6468. * return chr.user == 'pebbles';
  6469. * });
  6470. * // => 2
  6471. *
  6472. * // using the `_.matches` callback shorthand
  6473. * _.findLastIndex(users, { 'user': 'barney', 'active': true });
  6474. * // => 0
  6475. *
  6476. * // using the `_.matchesProperty` callback shorthand
  6477. * _.findLastIndex(users, 'active', false);
  6478. * // => 2
  6479. *
  6480. * // using the `_.property` callback shorthand
  6481. * _.findLastIndex(users, 'active');
  6482. * // => 0
  6483. */
  6484. var findLastIndex = createFindIndex(true);
  6485. /**
  6486. * Gets the first element of `array`.
  6487. *
  6488. * @static
  6489. * @memberOf _
  6490. * @alias head
  6491. * @category Array
  6492. * @param {Array} array The array to query.
  6493. * @returns {*} Returns the first element of `array`.
  6494. * @example
  6495. *
  6496. * _.first([1, 2, 3]);
  6497. * // => 1
  6498. *
  6499. * _.first([]);
  6500. * // => undefined
  6501. */
  6502. function first(array) {
  6503. return array ? array[0] : undefined;
  6504. }
  6505. /**
  6506. * Flattens a nested array. If `isDeep` is `true` the array is recursively
  6507. * flattened, otherwise it is only flattened a single level.
  6508. *
  6509. * @static
  6510. * @memberOf _
  6511. * @category Array
  6512. * @param {Array} array The array to flatten.
  6513. * @param {boolean} [isDeep] Specify a deep flatten.
  6514. * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
  6515. * @returns {Array} Returns the new flattened array.
  6516. * @example
  6517. *
  6518. * _.flatten([1, [2, 3, [4]]]);
  6519. * // => [1, 2, 3, [4]]
  6520. *
  6521. * // using `isDeep`
  6522. * _.flatten([1, [2, 3, [4]]], true);
  6523. * // => [1, 2, 3, 4]
  6524. */
  6525. function flatten(array, isDeep, guard) {
  6526. var length = array ? array.length : 0;
  6527. if (guard && isIterateeCall(array, isDeep, guard)) {
  6528. isDeep = false;
  6529. }
  6530. return length ? baseFlatten(array, isDeep) : [];
  6531. }
  6532. /**
  6533. * Recursively flattens a nested array.
  6534. *
  6535. * @static
  6536. * @memberOf _
  6537. * @category Array
  6538. * @param {Array} array The array to recursively flatten.
  6539. * @returns {Array} Returns the new flattened array.
  6540. * @example
  6541. *
  6542. * _.flattenDeep([1, [2, 3, [4]]]);
  6543. * // => [1, 2, 3, 4]
  6544. */
  6545. function flattenDeep(array) {
  6546. var length = array ? array.length : 0;
  6547. return length ? baseFlatten(array, true) : [];
  6548. }
  6549. /**
  6550. * Gets the index at which the first occurrence of `value` is found in `array`
  6551. * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
  6552. * for equality comparisons. If `fromIndex` is negative, it is used as the offset
  6553. * from the end of `array`. If `array` is sorted providing `true` for `fromIndex`
  6554. * performs a faster binary search.
  6555. *
  6556. * @static
  6557. * @memberOf _
  6558. * @category Array
  6559. * @param {Array} array The array to search.
  6560. * @param {*} value The value to search for.
  6561. * @param {boolean|number} [fromIndex=0] The index to search from or `true`
  6562. * to perform a binary search on a sorted array.
  6563. * @returns {number} Returns the index of the matched value, else `-1`.
  6564. * @example
  6565. *
  6566. * _.indexOf([1, 2, 1, 2], 2);
  6567. * // => 1
  6568. *
  6569. * // using `fromIndex`
  6570. * _.indexOf([1, 2, 1, 2], 2, 2);
  6571. * // => 3
  6572. *
  6573. * // performing a binary search
  6574. * _.indexOf([1, 1, 2, 2], 2, true);
  6575. * // => 2
  6576. */
  6577. function indexOf(array, value, fromIndex) {
  6578. var length = array ? array.length : 0;
  6579. if (!length) {
  6580. return -1;
  6581. }
  6582. if (typeof fromIndex == 'number') {
  6583. fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex;
  6584. } else if (fromIndex) {
  6585. var index = binaryIndex(array, value);
  6586. if (index < length &&
  6587. (value === value ? (value === array[index]) : (array[index] !== array[index]))) {
  6588. return index;
  6589. }
  6590. return -1;
  6591. }
  6592. return baseIndexOf(array, value, fromIndex || 0);
  6593. }
  6594. /**
  6595. * Gets all but the last element of `array`.
  6596. *
  6597. * @static
  6598. * @memberOf _
  6599. * @category Array
  6600. * @param {Array} array The array to query.
  6601. * @returns {Array} Returns the slice of `array`.
  6602. * @example
  6603. *
  6604. * _.initial([1, 2, 3]);
  6605. * // => [1, 2]
  6606. */
  6607. function initial(array) {
  6608. return dropRight(array, 1);
  6609. }
  6610. /**
  6611. * Creates an array of unique values that are included in all of the provided
  6612. * arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
  6613. * for equality comparisons.
  6614. *
  6615. * @static
  6616. * @memberOf _
  6617. * @category Array
  6618. * @param {...Array} [arrays] The arrays to inspect.
  6619. * @returns {Array} Returns the new array of shared values.
  6620. * @example
  6621. * _.intersection([1, 2], [4, 2], [2, 1]);
  6622. * // => [2]
  6623. */
  6624. var intersection = restParam(function(arrays) {
  6625. var othLength = arrays.length,
  6626. othIndex = othLength,
  6627. caches = Array(length),
  6628. indexOf = getIndexOf(),
  6629. isCommon = indexOf == baseIndexOf,
  6630. result = [];
  6631. while (othIndex--) {
  6632. var value = arrays[othIndex] = isArrayLike(value = arrays[othIndex]) ? value : [];
  6633. caches[othIndex] = (isCommon && value.length >= 120) ? createCache(othIndex && value) : null;
  6634. }
  6635. var array = arrays[0],
  6636. index = -1,
  6637. length = array ? array.length : 0,
  6638. seen = caches[0];
  6639. outer:
  6640. while (++index < length) {
  6641. value = array[index];
  6642. if ((seen ? cacheIndexOf(seen, value) : indexOf(result, value, 0)) < 0) {
  6643. var othIndex = othLength;
  6644. while (--othIndex) {
  6645. var cache = caches[othIndex];
  6646. if ((cache ? cacheIndexOf(cache, value) : indexOf(arrays[othIndex], value, 0)) < 0) {
  6647. continue outer;
  6648. }
  6649. }
  6650. if (seen) {
  6651. seen.push(value);
  6652. }
  6653. result.push(value);
  6654. }
  6655. }
  6656. return result;
  6657. });
  6658. /**
  6659. * Gets the last element of `array`.
  6660. *
  6661. * @static
  6662. * @memberOf _
  6663. * @category Array
  6664. * @param {Array} array The array to query.
  6665. * @returns {*} Returns the last element of `array`.
  6666. * @example
  6667. *
  6668. * _.last([1, 2, 3]);
  6669. * // => 3
  6670. */
  6671. function last(array) {
  6672. var length = array ? array.length : 0;
  6673. return length ? array[length - 1] : undefined;
  6674. }
  6675. /**
  6676. * This method is like `_.indexOf` except that it iterates over elements of
  6677. * `array` from right to left.
  6678. *
  6679. * @static
  6680. * @memberOf _
  6681. * @category Array
  6682. * @param {Array} array The array to search.
  6683. * @param {*} value The value to search for.
  6684. * @param {boolean|number} [fromIndex=array.length-1] The index to search from
  6685. * or `true` to perform a binary search on a sorted array.
  6686. * @returns {number} Returns the index of the matched value, else `-1`.
  6687. * @example
  6688. *
  6689. * _.lastIndexOf([1, 2, 1, 2], 2);
  6690. * // => 3
  6691. *
  6692. * // using `fromIndex`
  6693. * _.lastIndexOf([1, 2, 1, 2], 2, 2);
  6694. * // => 1
  6695. *
  6696. * // performing a binary search
  6697. * _.lastIndexOf([1, 1, 2, 2], 2, true);
  6698. * // => 3
  6699. */
  6700. function lastIndexOf(array, value, fromIndex) {
  6701. var length = array ? array.length : 0;
  6702. if (!length) {
  6703. return -1;
  6704. }
  6705. var index = length;
  6706. if (typeof fromIndex == 'number') {
  6707. index = (fromIndex < 0 ? nativeMax(length + fromIndex, 0) : nativeMin(fromIndex || 0, length - 1)) + 1;
  6708. } else if (fromIndex) {
  6709. index = binaryIndex(array, value, true) - 1;
  6710. var other = array[index];
  6711. if (value === value ? (value === other) : (other !== other)) {
  6712. return index;
  6713. }
  6714. return -1;
  6715. }
  6716. if (value !== value) {
  6717. return indexOfNaN(array, index, true);
  6718. }
  6719. while (index--) {
  6720. if (array[index] === value) {
  6721. return index;
  6722. }
  6723. }
  6724. return -1;
  6725. }
  6726. /**
  6727. * Removes all provided values from `array` using
  6728. * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
  6729. * for equality comparisons.
  6730. *
  6731. * **Note:** Unlike `_.without`, this method mutates `array`.
  6732. *
  6733. * @static
  6734. * @memberOf _
  6735. * @category Array
  6736. * @param {Array} array The array to modify.
  6737. * @param {...*} [values] The values to remove.
  6738. * @returns {Array} Returns `array`.
  6739. * @example
  6740. *
  6741. * var array = [1, 2, 3, 1, 2, 3];
  6742. *
  6743. * _.pull(array, 2, 3);
  6744. * console.log(array);
  6745. * // => [1, 1]
  6746. */
  6747. function pull() {
  6748. var args = arguments,
  6749. array = args[0];
  6750. if (!(array && array.length)) {
  6751. return array;
  6752. }
  6753. var index = 0,
  6754. indexOf = getIndexOf(),
  6755. length = args.length;
  6756. while (++index < length) {
  6757. var fromIndex = 0,
  6758. value = args[index];
  6759. while ((fromIndex = indexOf(array, value, fromIndex)) > -1) {
  6760. splice.call(array, fromIndex, 1);
  6761. }
  6762. }
  6763. return array;
  6764. }
  6765. /**
  6766. * Removes elements from `array` corresponding to the given indexes and returns
  6767. * an array of the removed elements. Indexes may be specified as an array of
  6768. * indexes or as individual arguments.
  6769. *
  6770. * **Note:** Unlike `_.at`, this method mutates `array`.
  6771. *
  6772. * @static
  6773. * @memberOf _
  6774. * @category Array
  6775. * @param {Array} array The array to modify.
  6776. * @param {...(number|number[])} [indexes] The indexes of elements to remove,
  6777. * specified as individual indexes or arrays of indexes.
  6778. * @returns {Array} Returns the new array of removed elements.
  6779. * @example
  6780. *
  6781. * var array = [5, 10, 15, 20];
  6782. * var evens = _.pullAt(array, 1, 3);
  6783. *
  6784. * console.log(array);
  6785. * // => [5, 15]
  6786. *
  6787. * console.log(evens);
  6788. * // => [10, 20]
  6789. */
  6790. var pullAt = restParam(function(array, indexes) {
  6791. indexes = baseFlatten(indexes);
  6792. var result = baseAt(array, indexes);
  6793. basePullAt(array, indexes.sort(baseCompareAscending));
  6794. return result;
  6795. });
  6796. /**
  6797. * Removes all elements from `array` that `predicate` returns truthy for
  6798. * and returns an array of the removed elements. The predicate is bound to
  6799. * `thisArg` and invoked with three arguments: (value, index, array).
  6800. *
  6801. * If a property name is provided for `predicate` the created `_.property`
  6802. * style callback returns the property value of the given element.
  6803. *
  6804. * If a value is also provided for `thisArg` the created `_.matchesProperty`
  6805. * style callback returns `true` for elements that have a matching property
  6806. * value, else `false`.
  6807. *
  6808. * If an object is provided for `predicate` the created `_.matches` style
  6809. * callback returns `true` for elements that have the properties of the given
  6810. * object, else `false`.
  6811. *
  6812. * **Note:** Unlike `_.filter`, this method mutates `array`.
  6813. *
  6814. * @static
  6815. * @memberOf _
  6816. * @category Array
  6817. * @param {Array} array The array to modify.
  6818. * @param {Function|Object|string} [predicate=_.identity] The function invoked
  6819. * per iteration.
  6820. * @param {*} [thisArg] The `this` binding of `predicate`.
  6821. * @returns {Array} Returns the new array of removed elements.
  6822. * @example
  6823. *
  6824. * var array = [1, 2, 3, 4];
  6825. * var evens = _.remove(array, function(n) {
  6826. * return n % 2 == 0;
  6827. * });
  6828. *
  6829. * console.log(array);
  6830. * // => [1, 3]
  6831. *
  6832. * console.log(evens);
  6833. * // => [2, 4]
  6834. */
  6835. function remove(array, predicate, thisArg) {
  6836. var result = [];
  6837. if (!(array && array.length)) {
  6838. return result;
  6839. }
  6840. var index = -1,
  6841. indexes = [],
  6842. length = array.length;
  6843. predicate = getCallback(predicate, thisArg, 3);
  6844. while (++index < length) {
  6845. var value = array[index];
  6846. if (predicate(value, index, array)) {
  6847. result.push(value);
  6848. indexes.push(index);
  6849. }
  6850. }
  6851. basePullAt(array, indexes);
  6852. return result;
  6853. }
  6854. /**
  6855. * Gets all but the first element of `array`.
  6856. *
  6857. * @static
  6858. * @memberOf _
  6859. * @alias tail
  6860. * @category Array
  6861. * @param {Array} array The array to query.
  6862. * @returns {Array} Returns the slice of `array`.
  6863. * @example
  6864. *
  6865. * _.rest([1, 2, 3]);
  6866. * // => [2, 3]
  6867. */
  6868. function rest(array) {
  6869. return drop(array, 1);
  6870. }
  6871. /**
  6872. * Creates a slice of `array` from `start` up to, but not including, `end`.
  6873. *
  6874. * **Note:** This method is used instead of `Array#slice` to support node
  6875. * lists in IE < 9 and to ensure dense arrays are returned.
  6876. *
  6877. * @static
  6878. * @memberOf _
  6879. * @category Array
  6880. * @param {Array} array The array to slice.
  6881. * @param {number} [start=0] The start position.
  6882. * @param {number} [end=array.length] The end position.
  6883. * @returns {Array} Returns the slice of `array`.
  6884. */
  6885. function slice(array, start, end) {
  6886. var length = array ? array.length : 0;
  6887. if (!length) {
  6888. return [];
  6889. }
  6890. if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {
  6891. start = 0;
  6892. end = length;
  6893. }
  6894. return baseSlice(array, start, end);
  6895. }
  6896. /**
  6897. * Uses a binary search to determine the lowest index at which `value` should
  6898. * be inserted into `array` in order to maintain its sort order. If an iteratee
  6899. * function is provided it is invoked for `value` and each element of `array`
  6900. * to compute their sort ranking. The iteratee is bound to `thisArg` and
  6901. * invoked with one argument; (value).
  6902. *
  6903. * If a property name is provided for `iteratee` the created `_.property`
  6904. * style callback returns the property value of the given element.
  6905. *
  6906. * If a value is also provided for `thisArg` the created `_.matchesProperty`
  6907. * style callback returns `true` for elements that have a matching property
  6908. * value, else `false`.
  6909. *
  6910. * If an object is provided for `iteratee` the created `_.matches` style
  6911. * callback returns `true` for elements that have the properties of the given
  6912. * object, else `false`.
  6913. *
  6914. * @static
  6915. * @memberOf _
  6916. * @category Array
  6917. * @param {Array} array The sorted array to inspect.
  6918. * @param {*} value The value to evaluate.
  6919. * @param {Function|Object|string} [iteratee=_.identity] The function invoked
  6920. * per iteration.
  6921. * @param {*} [thisArg] The `this` binding of `iteratee`.
  6922. * @returns {number} Returns the index at which `value` should be inserted
  6923. * into `array`.
  6924. * @example
  6925. *
  6926. * _.sortedIndex([30, 50], 40);
  6927. * // => 1
  6928. *
  6929. * _.sortedIndex([4, 4, 5, 5], 5);
  6930. * // => 2
  6931. *
  6932. * var dict = { 'data': { 'thirty': 30, 'forty': 40, 'fifty': 50 } };
  6933. *
  6934. * // using an iteratee function
  6935. * _.sortedIndex(['thirty', 'fifty'], 'forty', function(word) {
  6936. * return this.data[word];
  6937. * }, dict);
  6938. * // => 1
  6939. *
  6940. * // using the `_.property` callback shorthand
  6941. * _.sortedIndex([{ 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x');
  6942. * // => 1
  6943. */
  6944. var sortedIndex = createSortedIndex();
  6945. /**
  6946. * This method is like `_.sortedIndex` except that it returns the highest
  6947. * index at which `value` should be inserted into `array` in order to
  6948. * maintain its sort order.
  6949. *
  6950. * @static
  6951. * @memberOf _
  6952. * @category Array
  6953. * @param {Array} array The sorted array to inspect.
  6954. * @param {*} value The value to evaluate.
  6955. * @param {Function|Object|string} [iteratee=_.identity] The function invoked
  6956. * per iteration.
  6957. * @param {*} [thisArg] The `this` binding of `iteratee`.
  6958. * @returns {number} Returns the index at which `value` should be inserted
  6959. * into `array`.
  6960. * @example
  6961. *
  6962. * _.sortedLastIndex([4, 4, 5, 5], 5);
  6963. * // => 4
  6964. */
  6965. var sortedLastIndex = createSortedIndex(true);
  6966. /**
  6967. * Creates a slice of `array` with `n` elements taken from the beginning.
  6968. *
  6969. * @static
  6970. * @memberOf _
  6971. * @category Array
  6972. * @param {Array} array The array to query.
  6973. * @param {number} [n=1] The number of elements to take.
  6974. * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
  6975. * @returns {Array} Returns the slice of `array`.
  6976. * @example
  6977. *
  6978. * _.take([1, 2, 3]);
  6979. * // => [1]
  6980. *
  6981. * _.take([1, 2, 3], 2);
  6982. * // => [1, 2]
  6983. *
  6984. * _.take([1, 2, 3], 5);
  6985. * // => [1, 2, 3]
  6986. *
  6987. * _.take([1, 2, 3], 0);
  6988. * // => []
  6989. */
  6990. function take(array, n, guard) {
  6991. var length = array ? array.length : 0;
  6992. if (!length) {
  6993. return [];
  6994. }
  6995. if (guard ? isIterateeCall(array, n, guard) : n == null) {
  6996. n = 1;
  6997. }
  6998. return baseSlice(array, 0, n < 0 ? 0 : n);
  6999. }
  7000. /**
  7001. * Creates a slice of `array` with `n` elements taken from the end.
  7002. *
  7003. * @static
  7004. * @memberOf _
  7005. * @category Array
  7006. * @param {Array} array The array to query.
  7007. * @param {number} [n=1] The number of elements to take.
  7008. * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
  7009. * @returns {Array} Returns the slice of `array`.
  7010. * @example
  7011. *
  7012. * _.takeRight([1, 2, 3]);
  7013. * // => [3]
  7014. *
  7015. * _.takeRight([1, 2, 3], 2);
  7016. * // => [2, 3]
  7017. *
  7018. * _.takeRight([1, 2, 3], 5);
  7019. * // => [1, 2, 3]
  7020. *
  7021. * _.takeRight([1, 2, 3], 0);
  7022. * // => []
  7023. */
  7024. function takeRight(array, n, guard) {
  7025. var length = array ? array.length : 0;
  7026. if (!length) {
  7027. return [];
  7028. }
  7029. if (guard ? isIterateeCall(array, n, guard) : n == null) {
  7030. n = 1;
  7031. }
  7032. n = length - (+n || 0);
  7033. return baseSlice(array, n < 0 ? 0 : n);
  7034. }
  7035. /**
  7036. * Creates a slice of `array` with elements taken from the end. Elements are
  7037. * taken until `predicate` returns falsey. The predicate is bound to `thisArg`
  7038. * and invoked with three arguments: (value, index, array).
  7039. *
  7040. * If a property name is provided for `predicate` the created `_.property`
  7041. * style callback returns the property value of the given element.
  7042. *
  7043. * If a value is also provided for `thisArg` the created `_.matchesProperty`
  7044. * style callback returns `true` for elements that have a matching property
  7045. * value, else `false`.
  7046. *
  7047. * If an object is provided for `predicate` the created `_.matches` style
  7048. * callback returns `true` for elements that have the properties of the given
  7049. * object, else `false`.
  7050. *
  7051. * @static
  7052. * @memberOf _
  7053. * @category Array
  7054. * @param {Array} array The array to query.
  7055. * @param {Function|Object|string} [predicate=_.identity] The function invoked
  7056. * per iteration.
  7057. * @param {*} [thisArg] The `this` binding of `predicate`.
  7058. * @returns {Array} Returns the slice of `array`.
  7059. * @example
  7060. *
  7061. * _.takeRightWhile([1, 2, 3], function(n) {
  7062. * return n > 1;
  7063. * });
  7064. * // => [2, 3]
  7065. *
  7066. * var users = [
  7067. * { 'user': 'barney', 'active': true },
  7068. * { 'user': 'fred', 'active': false },
  7069. * { 'user': 'pebbles', 'active': false }
  7070. * ];
  7071. *
  7072. * // using the `_.matches` callback shorthand
  7073. * _.pluck(_.takeRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user');
  7074. * // => ['pebbles']
  7075. *
  7076. * // using the `_.matchesProperty` callback shorthand
  7077. * _.pluck(_.takeRightWhile(users, 'active', false), 'user');
  7078. * // => ['fred', 'pebbles']
  7079. *
  7080. * // using the `_.property` callback shorthand
  7081. * _.pluck(_.takeRightWhile(users, 'active'), 'user');
  7082. * // => []
  7083. */
  7084. function takeRightWhile(array, predicate, thisArg) {
  7085. return (array && array.length)
  7086. ? baseWhile(array, getCallback(predicate, thisArg, 3), false, true)
  7087. : [];
  7088. }
  7089. /**
  7090. * Creates a slice of `array` with elements taken from the beginning. Elements
  7091. * are taken until `predicate` returns falsey. The predicate is bound to
  7092. * `thisArg` and invoked with three arguments: (value, index, array).
  7093. *
  7094. * If a property name is provided for `predicate` the created `_.property`
  7095. * style callback returns the property value of the given element.
  7096. *
  7097. * If a value is also provided for `thisArg` the created `_.matchesProperty`
  7098. * style callback returns `true` for elements that have a matching property
  7099. * value, else `false`.
  7100. *
  7101. * If an object is provided for `predicate` the created `_.matches` style
  7102. * callback returns `true` for elements that have the properties of the given
  7103. * object, else `false`.
  7104. *
  7105. * @static
  7106. * @memberOf _
  7107. * @category Array
  7108. * @param {Array} array The array to query.
  7109. * @param {Function|Object|string} [predicate=_.identity] The function invoked
  7110. * per iteration.
  7111. * @param {*} [thisArg] The `this` binding of `predicate`.
  7112. * @returns {Array} Returns the slice of `array`.
  7113. * @example
  7114. *
  7115. * _.takeWhile([1, 2, 3], function(n) {
  7116. * return n < 3;
  7117. * });
  7118. * // => [1, 2]
  7119. *
  7120. * var users = [
  7121. * { 'user': 'barney', 'active': false },
  7122. * { 'user': 'fred', 'active': false},
  7123. * { 'user': 'pebbles', 'active': true }
  7124. * ];
  7125. *
  7126. * // using the `_.matches` callback shorthand
  7127. * _.pluck(_.takeWhile(users, { 'user': 'barney', 'active': false }), 'user');
  7128. * // => ['barney']
  7129. *
  7130. * // using the `_.matchesProperty` callback shorthand
  7131. * _.pluck(_.takeWhile(users, 'active', false), 'user');
  7132. * // => ['barney', 'fred']
  7133. *
  7134. * // using the `_.property` callback shorthand
  7135. * _.pluck(_.takeWhile(users, 'active'), 'user');
  7136. * // => []
  7137. */
  7138. function takeWhile(array, predicate, thisArg) {
  7139. return (array && array.length)
  7140. ? baseWhile(array, getCallback(predicate, thisArg, 3))
  7141. : [];
  7142. }
  7143. /**
  7144. * Creates an array of unique values, in order, from all of the provided arrays
  7145. * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
  7146. * for equality comparisons.
  7147. *
  7148. * @static
  7149. * @memberOf _
  7150. * @category Array
  7151. * @param {...Array} [arrays] The arrays to inspect.
  7152. * @returns {Array} Returns the new array of combined values.
  7153. * @example
  7154. *
  7155. * _.union([1, 2], [4, 2], [2, 1]);
  7156. * // => [1, 2, 4]
  7157. */
  7158. var union = restParam(function(arrays) {
  7159. return baseUniq(baseFlatten(arrays, false, true));
  7160. });
  7161. /**
  7162. * Creates a duplicate-free version of an array, using
  7163. * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
  7164. * for equality comparisons, in which only the first occurence of each element
  7165. * is kept. Providing `true` for `isSorted` performs a faster search algorithm
  7166. * for sorted arrays. If an iteratee function is provided it is invoked for
  7167. * each element in the array to generate the criterion by which uniqueness
  7168. * is computed. The `iteratee` is bound to `thisArg` and invoked with three
  7169. * arguments: (value, index, array).
  7170. *
  7171. * If a property name is provided for `iteratee` the created `_.property`
  7172. * style callback returns the property value of the given element.
  7173. *
  7174. * If a value is also provided for `thisArg` the created `_.matchesProperty`
  7175. * style callback returns `true` for elements that have a matching property
  7176. * value, else `false`.
  7177. *
  7178. * If an object is provided for `iteratee` the created `_.matches` style
  7179. * callback returns `true` for elements that have the properties of the given
  7180. * object, else `false`.
  7181. *
  7182. * @static
  7183. * @memberOf _
  7184. * @alias unique
  7185. * @category Array
  7186. * @param {Array} array The array to inspect.
  7187. * @param {boolean} [isSorted] Specify the array is sorted.
  7188. * @param {Function|Object|string} [iteratee] The function invoked per iteration.
  7189. * @param {*} [thisArg] The `this` binding of `iteratee`.
  7190. * @returns {Array} Returns the new duplicate-value-free array.
  7191. * @example
  7192. *
  7193. * _.uniq([2, 1, 2]);
  7194. * // => [2, 1]
  7195. *
  7196. * // using `isSorted`
  7197. * _.uniq([1, 1, 2], true);
  7198. * // => [1, 2]
  7199. *
  7200. * // using an iteratee function
  7201. * _.uniq([1, 2.5, 1.5, 2], function(n) {
  7202. * return this.floor(n);
  7203. * }, Math);
  7204. * // => [1, 2.5]
  7205. *
  7206. * // using the `_.property` callback shorthand
  7207. * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
  7208. * // => [{ 'x': 1 }, { 'x': 2 }]
  7209. */
  7210. function uniq(array, isSorted, iteratee, thisArg) {
  7211. var length = array ? array.length : 0;
  7212. if (!length) {
  7213. return [];
  7214. }
  7215. if (isSorted != null && typeof isSorted != 'boolean') {
  7216. thisArg = iteratee;
  7217. iteratee = isIterateeCall(array, isSorted, thisArg) ? undefined : isSorted;
  7218. isSorted = false;
  7219. }
  7220. var callback = getCallback();
  7221. if (!(iteratee == null && callback === baseCallback)) {
  7222. iteratee = callback(iteratee, thisArg, 3);
  7223. }
  7224. return (isSorted && getIndexOf() == baseIndexOf)
  7225. ? sortedUniq(array, iteratee)
  7226. : baseUniq(array, iteratee);
  7227. }
  7228. /**
  7229. * This method is like `_.zip` except that it accepts an array of grouped
  7230. * elements and creates an array regrouping the elements to their pre-zip
  7231. * configuration.
  7232. *
  7233. * @static
  7234. * @memberOf _
  7235. * @category Array
  7236. * @param {Array} array The array of grouped elements to process.
  7237. * @returns {Array} Returns the new array of regrouped elements.
  7238. * @example
  7239. *
  7240. * var zipped = _.zip(['fred', 'barney'], [30, 40], [true, false]);
  7241. * // => [['fred', 30, true], ['barney', 40, false]]
  7242. *
  7243. * _.unzip(zipped);
  7244. * // => [['fred', 'barney'], [30, 40], [true, false]]
  7245. */
  7246. function unzip(array) {
  7247. if (!(array && array.length)) {
  7248. return [];
  7249. }
  7250. var index = -1,
  7251. length = 0;
  7252. array = arrayFilter(array, function(group) {
  7253. if (isArrayLike(group)) {
  7254. length = nativeMax(group.length, length);
  7255. return true;
  7256. }
  7257. });
  7258. var result = Array(length);
  7259. while (++index < length) {
  7260. result[index] = arrayMap(array, baseProperty(index));
  7261. }
  7262. return result;
  7263. }
  7264. /**
  7265. * This method is like `_.unzip` except that it accepts an iteratee to specify
  7266. * how regrouped values should be combined. The `iteratee` is bound to `thisArg`
  7267. * and invoked with four arguments: (accumulator, value, index, group).
  7268. *
  7269. * @static
  7270. * @memberOf _
  7271. * @category Array
  7272. * @param {Array} array The array of grouped elements to process.
  7273. * @param {Function} [iteratee] The function to combine regrouped values.
  7274. * @param {*} [thisArg] The `this` binding of `iteratee`.
  7275. * @returns {Array} Returns the new array of regrouped elements.
  7276. * @example
  7277. *
  7278. * var zipped = _.zip([1, 2], [10, 20], [100, 200]);
  7279. * // => [[1, 10, 100], [2, 20, 200]]
  7280. *
  7281. * _.unzipWith(zipped, _.add);
  7282. * // => [3, 30, 300]
  7283. */
  7284. function unzipWith(array, iteratee, thisArg) {
  7285. var length = array ? array.length : 0;
  7286. if (!length) {
  7287. return [];
  7288. }
  7289. var result = unzip(array);
  7290. if (iteratee == null) {
  7291. return result;
  7292. }
  7293. iteratee = bindCallback(iteratee, thisArg, 4);
  7294. return arrayMap(result, function(group) {
  7295. return arrayReduce(group, iteratee, undefined, true);
  7296. });
  7297. }
  7298. /**
  7299. * Creates an array excluding all provided values using
  7300. * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
  7301. * for equality comparisons.
  7302. *
  7303. * @static
  7304. * @memberOf _
  7305. * @category Array
  7306. * @param {Array} array The array to filter.
  7307. * @param {...*} [values] The values to exclude.
  7308. * @returns {Array} Returns the new array of filtered values.
  7309. * @example
  7310. *
  7311. * _.without([1, 2, 1, 3], 1, 2);
  7312. * // => [3]
  7313. */
  7314. var without = restParam(function(array, values) {
  7315. return isArrayLike(array)
  7316. ? baseDifference(array, values)
  7317. : [];
  7318. });
  7319. /**
  7320. * Creates an array of unique values that is the [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)
  7321. * of the provided arrays.
  7322. *
  7323. * @static
  7324. * @memberOf _
  7325. * @category Array
  7326. * @param {...Array} [arrays] The arrays to inspect.
  7327. * @returns {Array} Returns the new array of values.
  7328. * @example
  7329. *
  7330. * _.xor([1, 2], [4, 2]);
  7331. * // => [1, 4]
  7332. */
  7333. function xor() {
  7334. var index = -1,
  7335. length = arguments.length;
  7336. while (++index < length) {
  7337. var array = arguments[index];
  7338. if (isArrayLike(array)) {
  7339. var result = result
  7340. ? arrayPush(baseDifference(result, array), baseDifference(array, result))
  7341. : array;
  7342. }
  7343. }
  7344. return result ? baseUniq(result) : [];
  7345. }
  7346. /**
  7347. * Creates an array of grouped elements, the first of which contains the first
  7348. * elements of the given arrays, the second of which contains the second elements
  7349. * of the given arrays, and so on.
  7350. *
  7351. * @static
  7352. * @memberOf _
  7353. * @category Array
  7354. * @param {...Array} [arrays] The arrays to process.
  7355. * @returns {Array} Returns the new array of grouped elements.
  7356. * @example
  7357. *
  7358. * _.zip(['fred', 'barney'], [30, 40], [true, false]);
  7359. * // => [['fred', 30, true], ['barney', 40, false]]
  7360. */
  7361. var zip = restParam(unzip);
  7362. /**
  7363. * The inverse of `_.pairs`; this method returns an object composed from arrays
  7364. * of property names and values. Provide either a single two dimensional array,
  7365. * e.g. `[[key1, value1], [key2, value2]]` or two arrays, one of property names
  7366. * and one of corresponding values.
  7367. *
  7368. * @static
  7369. * @memberOf _
  7370. * @alias object
  7371. * @category Array
  7372. * @param {Array} props The property names.
  7373. * @param {Array} [values=[]] The property values.
  7374. * @returns {Object} Returns the new object.
  7375. * @example
  7376. *
  7377. * _.zipObject([['fred', 30], ['barney', 40]]);
  7378. * // => { 'fred': 30, 'barney': 40 }
  7379. *
  7380. * _.zipObject(['fred', 'barney'], [30, 40]);
  7381. * // => { 'fred': 30, 'barney': 40 }
  7382. */
  7383. function zipObject(props, values) {
  7384. var index = -1,
  7385. length = props ? props.length : 0,
  7386. result = {};
  7387. if (length && !values && !isArray(props[0])) {
  7388. values = [];
  7389. }
  7390. while (++index < length) {
  7391. var key = props[index];
  7392. if (values) {
  7393. result[key] = values[index];
  7394. } else if (key) {
  7395. result[key[0]] = key[1];
  7396. }
  7397. }
  7398. return result;
  7399. }
  7400. /**
  7401. * This method is like `_.zip` except that it accepts an iteratee to specify
  7402. * how grouped values should be combined. The `iteratee` is bound to `thisArg`
  7403. * and invoked with four arguments: (accumulator, value, index, group).
  7404. *
  7405. * @static
  7406. * @memberOf _
  7407. * @category Array
  7408. * @param {...Array} [arrays] The arrays to process.
  7409. * @param {Function} [iteratee] The function to combine grouped values.
  7410. * @param {*} [thisArg] The `this` binding of `iteratee`.
  7411. * @returns {Array} Returns the new array of grouped elements.
  7412. * @example
  7413. *
  7414. * _.zipWith([1, 2], [10, 20], [100, 200], _.add);
  7415. * // => [111, 222]
  7416. */
  7417. var zipWith = restParam(function(arrays) {
  7418. var length = arrays.length,
  7419. iteratee = length > 2 ? arrays[length - 2] : undefined,
  7420. thisArg = length > 1 ? arrays[length - 1] : undefined;
  7421. if (length > 2 && typeof iteratee == 'function') {
  7422. length -= 2;
  7423. } else {
  7424. iteratee = (length > 1 && typeof thisArg == 'function') ? (--length, thisArg) : undefined;
  7425. thisArg = undefined;
  7426. }
  7427. arrays.length = length;
  7428. return unzipWith(arrays, iteratee, thisArg);
  7429. });
  7430. /*------------------------------------------------------------------------*/
  7431. /**
  7432. * Creates a `lodash` object that wraps `value` with explicit method
  7433. * chaining enabled.
  7434. *
  7435. * @static
  7436. * @memberOf _
  7437. * @category Chain
  7438. * @param {*} value The value to wrap.
  7439. * @returns {Object} Returns the new `lodash` wrapper instance.
  7440. * @example
  7441. *
  7442. * var users = [
  7443. * { 'user': 'barney', 'age': 36 },
  7444. * { 'user': 'fred', 'age': 40 },
  7445. * { 'user': 'pebbles', 'age': 1 }
  7446. * ];
  7447. *
  7448. * var youngest = _.chain(users)
  7449. * .sortBy('age')
  7450. * .map(function(chr) {
  7451. * return chr.user + ' is ' + chr.age;
  7452. * })
  7453. * .first()
  7454. * .value();
  7455. * // => 'pebbles is 1'
  7456. */
  7457. function chain(value) {
  7458. var result = lodash(value);
  7459. result.__chain__ = true;
  7460. return result;
  7461. }
  7462. /**
  7463. * This method invokes `interceptor` and returns `value`. The interceptor is
  7464. * bound to `thisArg` and invoked with one argument; (value). The purpose of
  7465. * this method is to "tap into" a method chain in order to perform operations
  7466. * on intermediate results within the chain.
  7467. *
  7468. * @static
  7469. * @memberOf _
  7470. * @category Chain
  7471. * @param {*} value The value to provide to `interceptor`.
  7472. * @param {Function} interceptor The function to invoke.
  7473. * @param {*} [thisArg] The `this` binding of `interceptor`.
  7474. * @returns {*} Returns `value`.
  7475. * @example
  7476. *
  7477. * _([1, 2, 3])
  7478. * .tap(function(array) {
  7479. * array.pop();
  7480. * })
  7481. * .reverse()
  7482. * .value();
  7483. * // => [2, 1]
  7484. */
  7485. function tap(value, interceptor, thisArg) {
  7486. interceptor.call(thisArg, value);
  7487. return value;
  7488. }
  7489. /**
  7490. * This method is like `_.tap` except that it returns the result of `interceptor`.
  7491. *
  7492. * @static
  7493. * @memberOf _
  7494. * @category Chain
  7495. * @param {*} value The value to provide to `interceptor`.
  7496. * @param {Function} interceptor The function to invoke.
  7497. * @param {*} [thisArg] The `this` binding of `interceptor`.
  7498. * @returns {*} Returns the result of `interceptor`.
  7499. * @example
  7500. *
  7501. * _(' abc ')
  7502. * .chain()
  7503. * .trim()
  7504. * .thru(function(value) {
  7505. * return [value];
  7506. * })
  7507. * .value();
  7508. * // => ['abc']
  7509. */
  7510. function thru(value, interceptor, thisArg) {
  7511. return interceptor.call(thisArg, value);
  7512. }
  7513. /**
  7514. * Enables explicit method chaining on the wrapper object.
  7515. *
  7516. * @name chain
  7517. * @memberOf _
  7518. * @category Chain
  7519. * @returns {Object} Returns the new `lodash` wrapper instance.
  7520. * @example
  7521. *
  7522. * var users = [
  7523. * { 'user': 'barney', 'age': 36 },
  7524. * { 'user': 'fred', 'age': 40 }
  7525. * ];
  7526. *
  7527. * // without explicit chaining
  7528. * _(users).first();
  7529. * // => { 'user': 'barney', 'age': 36 }
  7530. *
  7531. * // with explicit chaining
  7532. * _(users).chain()
  7533. * .first()
  7534. * .pick('user')
  7535. * .value();
  7536. * // => { 'user': 'barney' }
  7537. */
  7538. function wrapperChain() {
  7539. return chain(this);
  7540. }
  7541. /**
  7542. * Executes the chained sequence and returns the wrapped result.
  7543. *
  7544. * @name commit
  7545. * @memberOf _
  7546. * @category Chain
  7547. * @returns {Object} Returns the new `lodash` wrapper instance.
  7548. * @example
  7549. *
  7550. * var array = [1, 2];
  7551. * var wrapped = _(array).push(3);
  7552. *
  7553. * console.log(array);
  7554. * // => [1, 2]
  7555. *
  7556. * wrapped = wrapped.commit();
  7557. * console.log(array);
  7558. * // => [1, 2, 3]
  7559. *
  7560. * wrapped.last();
  7561. * // => 3
  7562. *
  7563. * console.log(array);
  7564. * // => [1, 2, 3]
  7565. */
  7566. function wrapperCommit() {
  7567. return new LodashWrapper(this.value(), this.__chain__);
  7568. }
  7569. /**
  7570. * Creates a new array joining a wrapped array with any additional arrays
  7571. * and/or values.
  7572. *
  7573. * @name concat
  7574. * @memberOf _
  7575. * @category Chain
  7576. * @param {...*} [values] The values to concatenate.
  7577. * @returns {Array} Returns the new concatenated array.
  7578. * @example
  7579. *
  7580. * var array = [1];
  7581. * var wrapped = _(array).concat(2, [3], [[4]]);
  7582. *
  7583. * console.log(wrapped.value());
  7584. * // => [1, 2, 3, [4]]
  7585. *
  7586. * console.log(array);
  7587. * // => [1]
  7588. */
  7589. var wrapperConcat = restParam(function(values) {
  7590. values = baseFlatten(values);
  7591. return this.thru(function(array) {
  7592. return arrayConcat(isArray(array) ? array : [toObject(array)], values);
  7593. });
  7594. });
  7595. /**
  7596. * Creates a clone of the chained sequence planting `value` as the wrapped value.
  7597. *
  7598. * @name plant
  7599. * @memberOf _
  7600. * @category Chain
  7601. * @returns {Object} Returns the new `lodash` wrapper instance.
  7602. * @example
  7603. *
  7604. * var array = [1, 2];
  7605. * var wrapped = _(array).map(function(value) {
  7606. * return Math.pow(value, 2);
  7607. * });
  7608. *
  7609. * var other = [3, 4];
  7610. * var otherWrapped = wrapped.plant(other);
  7611. *
  7612. * otherWrapped.value();
  7613. * // => [9, 16]
  7614. *
  7615. * wrapped.value();
  7616. * // => [1, 4]
  7617. */
  7618. function wrapperPlant(value) {
  7619. var result,
  7620. parent = this;
  7621. while (parent instanceof baseLodash) {
  7622. var clone = wrapperClone(parent);
  7623. if (result) {
  7624. previous.__wrapped__ = clone;
  7625. } else {
  7626. result = clone;
  7627. }
  7628. var previous = clone;
  7629. parent = parent.__wrapped__;
  7630. }
  7631. previous.__wrapped__ = value;
  7632. return result;
  7633. }
  7634. /**
  7635. * Reverses the wrapped array so the first element becomes the last, the
  7636. * second element becomes the second to last, and so on.
  7637. *
  7638. * **Note:** This method mutates the wrapped array.
  7639. *
  7640. * @name reverse
  7641. * @memberOf _
  7642. * @category Chain
  7643. * @returns {Object} Returns the new reversed `lodash` wrapper instance.
  7644. * @example
  7645. *
  7646. * var array = [1, 2, 3];
  7647. *
  7648. * _(array).reverse().value()
  7649. * // => [3, 2, 1]
  7650. *
  7651. * console.log(array);
  7652. * // => [3, 2, 1]
  7653. */
  7654. function wrapperReverse() {
  7655. var value = this.__wrapped__;
  7656. var interceptor = function(value) {
  7657. return (wrapped && wrapped.__dir__ < 0) ? value : value.reverse();
  7658. };
  7659. if (value instanceof LazyWrapper) {
  7660. var wrapped = value;
  7661. if (this.__actions__.length) {
  7662. wrapped = new LazyWrapper(this);
  7663. }
  7664. wrapped = wrapped.reverse();
  7665. wrapped.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });
  7666. return new LodashWrapper(wrapped, this.__chain__);
  7667. }
  7668. return this.thru(interceptor);
  7669. }
  7670. /**
  7671. * Produces the result of coercing the unwrapped value to a string.
  7672. *
  7673. * @name toString
  7674. * @memberOf _
  7675. * @category Chain
  7676. * @returns {string} Returns the coerced string value.
  7677. * @example
  7678. *
  7679. * _([1, 2, 3]).toString();
  7680. * // => '1,2,3'
  7681. */
  7682. function wrapperToString() {
  7683. return (this.value() + '');
  7684. }
  7685. /**
  7686. * Executes the chained sequence to extract the unwrapped value.
  7687. *
  7688. * @name value
  7689. * @memberOf _
  7690. * @alias run, toJSON, valueOf
  7691. * @category Chain
  7692. * @returns {*} Returns the resolved unwrapped value.
  7693. * @example
  7694. *
  7695. * _([1, 2, 3]).value();
  7696. * // => [1, 2, 3]
  7697. */
  7698. function wrapperValue() {
  7699. return baseWrapperValue(this.__wrapped__, this.__actions__);
  7700. }
  7701. /*------------------------------------------------------------------------*/
  7702. /**
  7703. * Creates an array of elements corresponding to the given keys, or indexes,
  7704. * of `collection`. Keys may be specified as individual arguments or as arrays
  7705. * of keys.
  7706. *
  7707. * @static
  7708. * @memberOf _
  7709. * @category Collection
  7710. * @param {Array|Object|string} collection The collection to iterate over.
  7711. * @param {...(number|number[]|string|string[])} [props] The property names
  7712. * or indexes of elements to pick, specified individually or in arrays.
  7713. * @returns {Array} Returns the new array of picked elements.
  7714. * @example
  7715. *
  7716. * _.at(['a', 'b', 'c'], [0, 2]);
  7717. * // => ['a', 'c']
  7718. *
  7719. * _.at(['barney', 'fred', 'pebbles'], 0, 2);
  7720. * // => ['barney', 'pebbles']
  7721. */
  7722. var at = restParam(function(collection, props) {
  7723. return baseAt(collection, baseFlatten(props));
  7724. });
  7725. /**
  7726. * Creates an object composed of keys generated from the results of running
  7727. * each element of `collection` through `iteratee`. The corresponding value
  7728. * of each key is the number of times the key was returned by `iteratee`.
  7729. * The `iteratee` is bound to `thisArg` and invoked with three arguments:
  7730. * (value, index|key, collection).
  7731. *
  7732. * If a property name is provided for `iteratee` the created `_.property`
  7733. * style callback returns the property value of the given element.
  7734. *
  7735. * If a value is also provided for `thisArg` the created `_.matchesProperty`
  7736. * style callback returns `true` for elements that have a matching property
  7737. * value, else `false`.
  7738. *
  7739. * If an object is provided for `iteratee` the created `_.matches` style
  7740. * callback returns `true` for elements that have the properties of the given
  7741. * object, else `false`.
  7742. *
  7743. * @static
  7744. * @memberOf _
  7745. * @category Collection
  7746. * @param {Array|Object|string} collection The collection to iterate over.
  7747. * @param {Function|Object|string} [iteratee=_.identity] The function invoked
  7748. * per iteration.
  7749. * @param {*} [thisArg] The `this` binding of `iteratee`.
  7750. * @returns {Object} Returns the composed aggregate object.
  7751. * @example
  7752. *
  7753. * _.countBy([4.3, 6.1, 6.4], function(n) {
  7754. * return Math.floor(n);
  7755. * });
  7756. * // => { '4': 1, '6': 2 }
  7757. *
  7758. * _.countBy([4.3, 6.1, 6.4], function(n) {
  7759. * return this.floor(n);
  7760. * }, Math);
  7761. * // => { '4': 1, '6': 2 }
  7762. *
  7763. * _.countBy(['one', 'two', 'three'], 'length');
  7764. * // => { '3': 2, '5': 1 }
  7765. */
  7766. var countBy = createAggregator(function(result, value, key) {
  7767. hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1);
  7768. });
  7769. /**
  7770. * Checks if `predicate` returns truthy for **all** elements of `collection`.
  7771. * The predicate is bound to `thisArg` and invoked with three arguments:
  7772. * (value, index|key, collection).
  7773. *
  7774. * If a property name is provided for `predicate` the created `_.property`
  7775. * style callback returns the property value of the given element.
  7776. *
  7777. * If a value is also provided for `thisArg` the created `_.matchesProperty`
  7778. * style callback returns `true` for elements that have a matching property
  7779. * value, else `false`.
  7780. *
  7781. * If an object is provided for `predicate` the created `_.matches` style
  7782. * callback returns `true` for elements that have the properties of the given
  7783. * object, else `false`.
  7784. *
  7785. * @static
  7786. * @memberOf _
  7787. * @alias all
  7788. * @category Collection
  7789. * @param {Array|Object|string} collection The collection to iterate over.
  7790. * @param {Function|Object|string} [predicate=_.identity] The function invoked
  7791. * per iteration.
  7792. * @param {*} [thisArg] The `this` binding of `predicate`.
  7793. * @returns {boolean} Returns `true` if all elements pass the predicate check,
  7794. * else `false`.
  7795. * @example
  7796. *
  7797. * _.every([true, 1, null, 'yes'], Boolean);
  7798. * // => false
  7799. *
  7800. * var users = [
  7801. * { 'user': 'barney', 'active': false },
  7802. * { 'user': 'fred', 'active': false }
  7803. * ];
  7804. *
  7805. * // using the `_.matches` callback shorthand
  7806. * _.every(users, { 'user': 'barney', 'active': false });
  7807. * // => false
  7808. *
  7809. * // using the `_.matchesProperty` callback shorthand
  7810. * _.every(users, 'active', false);
  7811. * // => true
  7812. *
  7813. * // using the `_.property` callback shorthand
  7814. * _.every(users, 'active');
  7815. * // => false
  7816. */
  7817. function every(collection, predicate, thisArg) {
  7818. var func = isArray(collection) ? arrayEvery : baseEvery;
  7819. if (thisArg && isIterateeCall(collection, predicate, thisArg)) {
  7820. predicate = undefined;
  7821. }
  7822. if (typeof predicate != 'function' || thisArg !== undefined) {
  7823. predicate = getCallback(predicate, thisArg, 3);
  7824. }
  7825. return func(collection, predicate);
  7826. }
  7827. /**
  7828. * Iterates over elements of `collection`, returning an array of all elements
  7829. * `predicate` returns truthy for. The predicate is bound to `thisArg` and
  7830. * invoked with three arguments: (value, index|key, collection).
  7831. *
  7832. * If a property name is provided for `predicate` the created `_.property`
  7833. * style callback returns the property value of the given element.
  7834. *
  7835. * If a value is also provided for `thisArg` the created `_.matchesProperty`
  7836. * style callback returns `true` for elements that have a matching property
  7837. * value, else `false`.
  7838. *
  7839. * If an object is provided for `predicate` the created `_.matches` style
  7840. * callback returns `true` for elements that have the properties of the given
  7841. * object, else `false`.
  7842. *
  7843. * @static
  7844. * @memberOf _
  7845. * @alias select
  7846. * @category Collection
  7847. * @param {Array|Object|string} collection The collection to iterate over.
  7848. * @param {Function|Object|string} [predicate=_.identity] The function invoked
  7849. * per iteration.
  7850. * @param {*} [thisArg] The `this` binding of `predicate`.
  7851. * @returns {Array} Returns the new filtered array.
  7852. * @example
  7853. *
  7854. * _.filter([4, 5, 6], function(n) {
  7855. * return n % 2 == 0;
  7856. * });
  7857. * // => [4, 6]
  7858. *
  7859. * var users = [
  7860. * { 'user': 'barney', 'age': 36, 'active': true },
  7861. * { 'user': 'fred', 'age': 40, 'active': false }
  7862. * ];
  7863. *
  7864. * // using the `_.matches` callback shorthand
  7865. * _.pluck(_.filter(users, { 'age': 36, 'active': true }), 'user');
  7866. * // => ['barney']
  7867. *
  7868. * // using the `_.matchesProperty` callback shorthand
  7869. * _.pluck(_.filter(users, 'active', false), 'user');
  7870. * // => ['fred']
  7871. *
  7872. * // using the `_.property` callback shorthand
  7873. * _.pluck(_.filter(users, 'active'), 'user');
  7874. * // => ['barney']
  7875. */
  7876. function filter(collection, predicate, thisArg) {
  7877. var func = isArray(collection) ? arrayFilter : baseFilter;
  7878. predicate = getCallback(predicate, thisArg, 3);
  7879. return func(collection, predicate);
  7880. }
  7881. /**
  7882. * Iterates over elements of `collection`, returning the first element
  7883. * `predicate` returns truthy for. The predicate is bound to `thisArg` and
  7884. * invoked with three arguments: (value, index|key, collection).
  7885. *
  7886. * If a property name is provided for `predicate` the created `_.property`
  7887. * style callback returns the property value of the given element.
  7888. *
  7889. * If a value is also provided for `thisArg` the created `_.matchesProperty`
  7890. * style callback returns `true` for elements that have a matching property
  7891. * value, else `false`.
  7892. *
  7893. * If an object is provided for `predicate` the created `_.matches` style
  7894. * callback returns `true` for elements that have the properties of the given
  7895. * object, else `false`.
  7896. *
  7897. * @static
  7898. * @memberOf _
  7899. * @alias detect
  7900. * @category Collection
  7901. * @param {Array|Object|string} collection The collection to search.
  7902. * @param {Function|Object|string} [predicate=_.identity] The function invoked
  7903. * per iteration.
  7904. * @param {*} [thisArg] The `this` binding of `predicate`.
  7905. * @returns {*} Returns the matched element, else `undefined`.
  7906. * @example
  7907. *
  7908. * var users = [
  7909. * { 'user': 'barney', 'age': 36, 'active': true },
  7910. * { 'user': 'fred', 'age': 40, 'active': false },
  7911. * { 'user': 'pebbles', 'age': 1, 'active': true }
  7912. * ];
  7913. *
  7914. * _.result(_.find(users, function(chr) {
  7915. * return chr.age < 40;
  7916. * }), 'user');
  7917. * // => 'barney'
  7918. *
  7919. * // using the `_.matches` callback shorthand
  7920. * _.result(_.find(users, { 'age': 1, 'active': true }), 'user');
  7921. * // => 'pebbles'
  7922. *
  7923. * // using the `_.matchesProperty` callback shorthand
  7924. * _.result(_.find(users, 'active', false), 'user');
  7925. * // => 'fred'
  7926. *
  7927. * // using the `_.property` callback shorthand
  7928. * _.result(_.find(users, 'active'), 'user');
  7929. * // => 'barney'
  7930. */
  7931. var find = createFind(baseEach);
  7932. /**
  7933. * This method is like `_.find` except that it iterates over elements of
  7934. * `collection` from right to left.
  7935. *
  7936. * @static
  7937. * @memberOf _
  7938. * @category Collection
  7939. * @param {Array|Object|string} collection The collection to search.
  7940. * @param {Function|Object|string} [predicate=_.identity] The function invoked
  7941. * per iteration.
  7942. * @param {*} [thisArg] The `this` binding of `predicate`.
  7943. * @returns {*} Returns the matched element, else `undefined`.
  7944. * @example
  7945. *
  7946. * _.findLast([1, 2, 3, 4], function(n) {
  7947. * return n % 2 == 1;
  7948. * });
  7949. * // => 3
  7950. */
  7951. var findLast = createFind(baseEachRight, true);
  7952. /**
  7953. * Performs a deep comparison between each element in `collection` and the
  7954. * source object, returning the first element that has equivalent property
  7955. * values.
  7956. *
  7957. * **Note:** This method supports comparing arrays, booleans, `Date` objects,
  7958. * numbers, `Object` objects, regexes, and strings. Objects are compared by
  7959. * their own, not inherited, enumerable properties. For comparing a single
  7960. * own or inherited property value see `_.matchesProperty`.
  7961. *
  7962. * @static
  7963. * @memberOf _
  7964. * @category Collection
  7965. * @param {Array|Object|string} collection The collection to search.
  7966. * @param {Object} source The object of property values to match.
  7967. * @returns {*} Returns the matched element, else `undefined`.
  7968. * @example
  7969. *
  7970. * var users = [
  7971. * { 'user': 'barney', 'age': 36, 'active': true },
  7972. * { 'user': 'fred', 'age': 40, 'active': false }
  7973. * ];
  7974. *
  7975. * _.result(_.findWhere(users, { 'age': 36, 'active': true }), 'user');
  7976. * // => 'barney'
  7977. *
  7978. * _.result(_.findWhere(users, { 'age': 40, 'active': false }), 'user');
  7979. * // => 'fred'
  7980. */
  7981. function findWhere(collection, source) {
  7982. return find(collection, baseMatches(source));
  7983. }
  7984. /**
  7985. * Iterates over elements of `collection` invoking `iteratee` for each element.
  7986. * The `iteratee` is bound to `thisArg` and invoked with three arguments:
  7987. * (value, index|key, collection). Iteratee functions may exit iteration early
  7988. * by explicitly returning `false`.
  7989. *
  7990. * **Note:** As with other "Collections" methods, objects with a "length" property
  7991. * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn`
  7992. * may be used for object iteration.
  7993. *
  7994. * @static
  7995. * @memberOf _
  7996. * @alias each
  7997. * @category Collection
  7998. * @param {Array|Object|string} collection The collection to iterate over.
  7999. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  8000. * @param {*} [thisArg] The `this` binding of `iteratee`.
  8001. * @returns {Array|Object|string} Returns `collection`.
  8002. * @example
  8003. *
  8004. * _([1, 2]).forEach(function(n) {
  8005. * console.log(n);
  8006. * }).value();
  8007. * // => logs each value from left to right and returns the array
  8008. *
  8009. * _.forEach({ 'a': 1, 'b': 2 }, function(n, key) {
  8010. * console.log(n, key);
  8011. * });
  8012. * // => logs each value-key pair and returns the object (iteration order is not guaranteed)
  8013. */
  8014. var forEach = createForEach(arrayEach, baseEach);
  8015. /**
  8016. * This method is like `_.forEach` except that it iterates over elements of
  8017. * `collection` from right to left.
  8018. *
  8019. * @static
  8020. * @memberOf _
  8021. * @alias eachRight
  8022. * @category Collection
  8023. * @param {Array|Object|string} collection The collection to iterate over.
  8024. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  8025. * @param {*} [thisArg] The `this` binding of `iteratee`.
  8026. * @returns {Array|Object|string} Returns `collection`.
  8027. * @example
  8028. *
  8029. * _([1, 2]).forEachRight(function(n) {
  8030. * console.log(n);
  8031. * }).value();
  8032. * // => logs each value from right to left and returns the array
  8033. */
  8034. var forEachRight = createForEach(arrayEachRight, baseEachRight);
  8035. /**
  8036. * Creates an object composed of keys generated from the results of running
  8037. * each element of `collection` through `iteratee`. The corresponding value
  8038. * of each key is an array of the elements responsible for generating the key.
  8039. * The `iteratee` is bound to `thisArg` and invoked with three arguments:
  8040. * (value, index|key, collection).
  8041. *
  8042. * If a property name is provided for `iteratee` the created `_.property`
  8043. * style callback returns the property value of the given element.
  8044. *
  8045. * If a value is also provided for `thisArg` the created `_.matchesProperty`
  8046. * style callback returns `true` for elements that have a matching property
  8047. * value, else `false`.
  8048. *
  8049. * If an object is provided for `iteratee` the created `_.matches` style
  8050. * callback returns `true` for elements that have the properties of the given
  8051. * object, else `false`.
  8052. *
  8053. * @static
  8054. * @memberOf _
  8055. * @category Collection
  8056. * @param {Array|Object|string} collection The collection to iterate over.
  8057. * @param {Function|Object|string} [iteratee=_.identity] The function invoked
  8058. * per iteration.
  8059. * @param {*} [thisArg] The `this` binding of `iteratee`.
  8060. * @returns {Object} Returns the composed aggregate object.
  8061. * @example
  8062. *
  8063. * _.groupBy([4.2, 6.1, 6.4], function(n) {
  8064. * return Math.floor(n);
  8065. * });
  8066. * // => { '4': [4.2], '6': [6.1, 6.4] }
  8067. *
  8068. * _.groupBy([4.2, 6.1, 6.4], function(n) {
  8069. * return this.floor(n);
  8070. * }, Math);
  8071. * // => { '4': [4.2], '6': [6.1, 6.4] }
  8072. *
  8073. * // using the `_.property` callback shorthand
  8074. * _.groupBy(['one', 'two', 'three'], 'length');
  8075. * // => { '3': ['one', 'two'], '5': ['three'] }
  8076. */
  8077. var groupBy = createAggregator(function(result, value, key) {
  8078. if (hasOwnProperty.call(result, key)) {
  8079. result[key].push(value);
  8080. } else {
  8081. result[key] = [value];
  8082. }
  8083. });
  8084. /**
  8085. * Checks if `value` is in `collection` using
  8086. * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
  8087. * for equality comparisons. If `fromIndex` is negative, it is used as the offset
  8088. * from the end of `collection`.
  8089. *
  8090. * @static
  8091. * @memberOf _
  8092. * @alias contains, include
  8093. * @category Collection
  8094. * @param {Array|Object|string} collection The collection to search.
  8095. * @param {*} target The value to search for.
  8096. * @param {number} [fromIndex=0] The index to search from.
  8097. * @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`.
  8098. * @returns {boolean} Returns `true` if a matching element is found, else `false`.
  8099. * @example
  8100. *
  8101. * _.includes([1, 2, 3], 1);
  8102. * // => true
  8103. *
  8104. * _.includes([1, 2, 3], 1, 2);
  8105. * // => false
  8106. *
  8107. * _.includes({ 'user': 'fred', 'age': 40 }, 'fred');
  8108. * // => true
  8109. *
  8110. * _.includes('pebbles', 'eb');
  8111. * // => true
  8112. */
  8113. function includes(collection, target, fromIndex, guard) {
  8114. var length = collection ? getLength(collection) : 0;
  8115. if (!isLength(length)) {
  8116. collection = values(collection);
  8117. length = collection.length;
  8118. }
  8119. if (typeof fromIndex != 'number' || (guard && isIterateeCall(target, fromIndex, guard))) {
  8120. fromIndex = 0;
  8121. } else {
  8122. fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0);
  8123. }
  8124. return (typeof collection == 'string' || !isArray(collection) && isString(collection))
  8125. ? (fromIndex <= length && collection.indexOf(target, fromIndex) > -1)
  8126. : (!!length && getIndexOf(collection, target, fromIndex) > -1);
  8127. }
  8128. /**
  8129. * Creates an object composed of keys generated from the results of running
  8130. * each element of `collection` through `iteratee`. The corresponding value
  8131. * of each key is the last element responsible for generating the key. The
  8132. * iteratee function is bound to `thisArg` and invoked with three arguments:
  8133. * (value, index|key, collection).
  8134. *
  8135. * If a property name is provided for `iteratee` the created `_.property`
  8136. * style callback returns the property value of the given element.
  8137. *
  8138. * If a value is also provided for `thisArg` the created `_.matchesProperty`
  8139. * style callback returns `true` for elements that have a matching property
  8140. * value, else `false`.
  8141. *
  8142. * If an object is provided for `iteratee` the created `_.matches` style
  8143. * callback returns `true` for elements that have the properties of the given
  8144. * object, else `false`.
  8145. *
  8146. * @static
  8147. * @memberOf _
  8148. * @category Collection
  8149. * @param {Array|Object|string} collection The collection to iterate over.
  8150. * @param {Function|Object|string} [iteratee=_.identity] The function invoked
  8151. * per iteration.
  8152. * @param {*} [thisArg] The `this` binding of `iteratee`.
  8153. * @returns {Object} Returns the composed aggregate object.
  8154. * @example
  8155. *
  8156. * var keyData = [
  8157. * { 'dir': 'left', 'code': 97 },
  8158. * { 'dir': 'right', 'code': 100 }
  8159. * ];
  8160. *
  8161. * _.indexBy(keyData, 'dir');
  8162. * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
  8163. *
  8164. * _.indexBy(keyData, function(object) {
  8165. * return String.fromCharCode(object.code);
  8166. * });
  8167. * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
  8168. *
  8169. * _.indexBy(keyData, function(object) {
  8170. * return this.fromCharCode(object.code);
  8171. * }, String);
  8172. * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
  8173. */
  8174. var indexBy = createAggregator(function(result, value, key) {
  8175. result[key] = value;
  8176. });
  8177. /**
  8178. * Invokes the method at `path` of each element in `collection`, returning
  8179. * an array of the results of each invoked method. Any additional arguments
  8180. * are provided to each invoked method. If `methodName` is a function it is
  8181. * invoked for, and `this` bound to, each element in `collection`.
  8182. *
  8183. * @static
  8184. * @memberOf _
  8185. * @category Collection
  8186. * @param {Array|Object|string} collection The collection to iterate over.
  8187. * @param {Array|Function|string} path The path of the method to invoke or
  8188. * the function invoked per iteration.
  8189. * @param {...*} [args] The arguments to invoke the method with.
  8190. * @returns {Array} Returns the array of results.
  8191. * @example
  8192. *
  8193. * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort');
  8194. * // => [[1, 5, 7], [1, 2, 3]]
  8195. *
  8196. * _.invoke([123, 456], String.prototype.split, '');
  8197. * // => [['1', '2', '3'], ['4', '5', '6']]
  8198. */
  8199. var invoke = restParam(function(collection, path, args) {
  8200. var index = -1,
  8201. isFunc = typeof path == 'function',
  8202. isProp = isKey(path),
  8203. result = isArrayLike(collection) ? Array(collection.length) : [];
  8204. baseEach(collection, function(value) {
  8205. var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined);
  8206. result[++index] = func ? func.apply(value, args) : invokePath(value, path, args);
  8207. });
  8208. return result;
  8209. });
  8210. /**
  8211. * Creates an array of values by running each element in `collection` through
  8212. * `iteratee`. The `iteratee` is bound to `thisArg` and invoked with three
  8213. * arguments: (value, index|key, collection).
  8214. *
  8215. * If a property name is provided for `iteratee` the created `_.property`
  8216. * style callback returns the property value of the given element.
  8217. *
  8218. * If a value is also provided for `thisArg` the created `_.matchesProperty`
  8219. * style callback returns `true` for elements that have a matching property
  8220. * value, else `false`.
  8221. *
  8222. * If an object is provided for `iteratee` the created `_.matches` style
  8223. * callback returns `true` for elements that have the properties of the given
  8224. * object, else `false`.
  8225. *
  8226. * Many lodash methods are guarded to work as iteratees for methods like
  8227. * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
  8228. *
  8229. * The guarded methods are:
  8230. * `ary`, `callback`, `chunk`, `clone`, `create`, `curry`, `curryRight`,
  8231. * `drop`, `dropRight`, `every`, `fill`, `flatten`, `invert`, `max`, `min`,
  8232. * `parseInt`, `slice`, `sortBy`, `take`, `takeRight`, `template`, `trim`,
  8233. * `trimLeft`, `trimRight`, `trunc`, `random`, `range`, `sample`, `some`,
  8234. * `sum`, `uniq`, and `words`
  8235. *
  8236. * @static
  8237. * @memberOf _
  8238. * @alias collect
  8239. * @category Collection
  8240. * @param {Array|Object|string} collection The collection to iterate over.
  8241. * @param {Function|Object|string} [iteratee=_.identity] The function invoked
  8242. * per iteration.
  8243. * @param {*} [thisArg] The `this` binding of `iteratee`.
  8244. * @returns {Array} Returns the new mapped array.
  8245. * @example
  8246. *
  8247. * function timesThree(n) {
  8248. * return n * 3;
  8249. * }
  8250. *
  8251. * _.map([1, 2], timesThree);
  8252. * // => [3, 6]
  8253. *
  8254. * _.map({ 'a': 1, 'b': 2 }, timesThree);
  8255. * // => [3, 6] (iteration order is not guaranteed)
  8256. *
  8257. * var users = [
  8258. * { 'user': 'barney' },
  8259. * { 'user': 'fred' }
  8260. * ];
  8261. *
  8262. * // using the `_.property` callback shorthand
  8263. * _.map(users, 'user');
  8264. * // => ['barney', 'fred']
  8265. */
  8266. function map(collection, iteratee, thisArg) {
  8267. var func = isArray(collection) ? arrayMap : baseMap;
  8268. iteratee = getCallback(iteratee, thisArg, 3);
  8269. return func(collection, iteratee);
  8270. }
  8271. /**
  8272. * Creates an array of elements split into two groups, the first of which
  8273. * contains elements `predicate` returns truthy for, while the second of which
  8274. * contains elements `predicate` returns falsey for. The predicate is bound
  8275. * to `thisArg` and invoked with three arguments: (value, index|key, collection).
  8276. *
  8277. * If a property name is provided for `predicate` the created `_.property`
  8278. * style callback returns the property value of the given element.
  8279. *
  8280. * If a value is also provided for `thisArg` the created `_.matchesProperty`
  8281. * style callback returns `true` for elements that have a matching property
  8282. * value, else `false`.
  8283. *
  8284. * If an object is provided for `predicate` the created `_.matches` style
  8285. * callback returns `true` for elements that have the properties of the given
  8286. * object, else `false`.
  8287. *
  8288. * @static
  8289. * @memberOf _
  8290. * @category Collection
  8291. * @param {Array|Object|string} collection The collection to iterate over.
  8292. * @param {Function|Object|string} [predicate=_.identity] The function invoked
  8293. * per iteration.
  8294. * @param {*} [thisArg] The `this` binding of `predicate`.
  8295. * @returns {Array} Returns the array of grouped elements.
  8296. * @example
  8297. *
  8298. * _.partition([1, 2, 3], function(n) {
  8299. * return n % 2;
  8300. * });
  8301. * // => [[1, 3], [2]]
  8302. *
  8303. * _.partition([1.2, 2.3, 3.4], function(n) {
  8304. * return this.floor(n) % 2;
  8305. * }, Math);
  8306. * // => [[1.2, 3.4], [2.3]]
  8307. *
  8308. * var users = [
  8309. * { 'user': 'barney', 'age': 36, 'active': false },
  8310. * { 'user': 'fred', 'age': 40, 'active': true },
  8311. * { 'user': 'pebbles', 'age': 1, 'active': false }
  8312. * ];
  8313. *
  8314. * var mapper = function(array) {
  8315. * return _.pluck(array, 'user');
  8316. * };
  8317. *
  8318. * // using the `_.matches` callback shorthand
  8319. * _.map(_.partition(users, { 'age': 1, 'active': false }), mapper);
  8320. * // => [['pebbles'], ['barney', 'fred']]
  8321. *
  8322. * // using the `_.matchesProperty` callback shorthand
  8323. * _.map(_.partition(users, 'active', false), mapper);
  8324. * // => [['barney', 'pebbles'], ['fred']]
  8325. *
  8326. * // using the `_.property` callback shorthand
  8327. * _.map(_.partition(users, 'active'), mapper);
  8328. * // => [['fred'], ['barney', 'pebbles']]
  8329. */
  8330. var partition = createAggregator(function(result, value, key) {
  8331. result[key ? 0 : 1].push(value);
  8332. }, function() { return [[], []]; });
  8333. /**
  8334. * Gets the property value of `path` from all elements in `collection`.
  8335. *
  8336. * @static
  8337. * @memberOf _
  8338. * @category Collection
  8339. * @param {Array|Object|string} collection The collection to iterate over.
  8340. * @param {Array|string} path The path of the property to pluck.
  8341. * @returns {Array} Returns the property values.
  8342. * @example
  8343. *
  8344. * var users = [
  8345. * { 'user': 'barney', 'age': 36 },
  8346. * { 'user': 'fred', 'age': 40 }
  8347. * ];
  8348. *
  8349. * _.pluck(users, 'user');
  8350. * // => ['barney', 'fred']
  8351. *
  8352. * var userIndex = _.indexBy(users, 'user');
  8353. * _.pluck(userIndex, 'age');
  8354. * // => [36, 40] (iteration order is not guaranteed)
  8355. */
  8356. function pluck(collection, path) {
  8357. return map(collection, property(path));
  8358. }
  8359. /**
  8360. * Reduces `collection` to a value which is the accumulated result of running
  8361. * each element in `collection` through `iteratee`, where each successive
  8362. * invocation is supplied the return value of the previous. If `accumulator`
  8363. * is not provided the first element of `collection` is used as the initial
  8364. * value. The `iteratee` is bound to `thisArg` and invoked with four arguments:
  8365. * (accumulator, value, index|key, collection).
  8366. *
  8367. * Many lodash methods are guarded to work as iteratees for methods like
  8368. * `_.reduce`, `_.reduceRight`, and `_.transform`.
  8369. *
  8370. * The guarded methods are:
  8371. * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `sortByAll`,
  8372. * and `sortByOrder`
  8373. *
  8374. * @static
  8375. * @memberOf _
  8376. * @alias foldl, inject
  8377. * @category Collection
  8378. * @param {Array|Object|string} collection The collection to iterate over.
  8379. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  8380. * @param {*} [accumulator] The initial value.
  8381. * @param {*} [thisArg] The `this` binding of `iteratee`.
  8382. * @returns {*} Returns the accumulated value.
  8383. * @example
  8384. *
  8385. * _.reduce([1, 2], function(total, n) {
  8386. * return total + n;
  8387. * });
  8388. * // => 3
  8389. *
  8390. * _.reduce({ 'a': 1, 'b': 2 }, function(result, n, key) {
  8391. * result[key] = n * 3;
  8392. * return result;
  8393. * }, {});
  8394. * // => { 'a': 3, 'b': 6 } (iteration order is not guaranteed)
  8395. */
  8396. var reduce = createReduce(arrayReduce, baseEach);
  8397. /**
  8398. * This method is like `_.reduce` except that it iterates over elements of
  8399. * `collection` from right to left.
  8400. *
  8401. * @static
  8402. * @memberOf _
  8403. * @alias foldr
  8404. * @category Collection
  8405. * @param {Array|Object|string} collection The collection to iterate over.
  8406. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  8407. * @param {*} [accumulator] The initial value.
  8408. * @param {*} [thisArg] The `this` binding of `iteratee`.
  8409. * @returns {*} Returns the accumulated value.
  8410. * @example
  8411. *
  8412. * var array = [[0, 1], [2, 3], [4, 5]];
  8413. *
  8414. * _.reduceRight(array, function(flattened, other) {
  8415. * return flattened.concat(other);
  8416. * }, []);
  8417. * // => [4, 5, 2, 3, 0, 1]
  8418. */
  8419. var reduceRight = createReduce(arrayReduceRight, baseEachRight);
  8420. /**
  8421. * The opposite of `_.filter`; this method returns the elements of `collection`
  8422. * that `predicate` does **not** return truthy for.
  8423. *
  8424. * @static
  8425. * @memberOf _
  8426. * @category Collection
  8427. * @param {Array|Object|string} collection The collection to iterate over.
  8428. * @param {Function|Object|string} [predicate=_.identity] The function invoked
  8429. * per iteration.
  8430. * @param {*} [thisArg] The `this` binding of `predicate`.
  8431. * @returns {Array} Returns the new filtered array.
  8432. * @example
  8433. *
  8434. * _.reject([1, 2, 3, 4], function(n) {
  8435. * return n % 2 == 0;
  8436. * });
  8437. * // => [1, 3]
  8438. *
  8439. * var users = [
  8440. * { 'user': 'barney', 'age': 36, 'active': false },
  8441. * { 'user': 'fred', 'age': 40, 'active': true }
  8442. * ];
  8443. *
  8444. * // using the `_.matches` callback shorthand
  8445. * _.pluck(_.reject(users, { 'age': 40, 'active': true }), 'user');
  8446. * // => ['barney']
  8447. *
  8448. * // using the `_.matchesProperty` callback shorthand
  8449. * _.pluck(_.reject(users, 'active', false), 'user');
  8450. * // => ['fred']
  8451. *
  8452. * // using the `_.property` callback shorthand
  8453. * _.pluck(_.reject(users, 'active'), 'user');
  8454. * // => ['barney']
  8455. */
  8456. function reject(collection, predicate, thisArg) {
  8457. var func = isArray(collection) ? arrayFilter : baseFilter;
  8458. predicate = getCallback(predicate, thisArg, 3);
  8459. return func(collection, function(value, index, collection) {
  8460. return !predicate(value, index, collection);
  8461. });
  8462. }
  8463. /**
  8464. * Gets a random element or `n` random elements from a collection.
  8465. *
  8466. * @static
  8467. * @memberOf _
  8468. * @category Collection
  8469. * @param {Array|Object|string} collection The collection to sample.
  8470. * @param {number} [n] The number of elements to sample.
  8471. * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
  8472. * @returns {*} Returns the random sample(s).
  8473. * @example
  8474. *
  8475. * _.sample([1, 2, 3, 4]);
  8476. * // => 2
  8477. *
  8478. * _.sample([1, 2, 3, 4], 2);
  8479. * // => [3, 1]
  8480. */
  8481. function sample(collection, n, guard) {
  8482. if (guard ? isIterateeCall(collection, n, guard) : n == null) {
  8483. collection = toIterable(collection);
  8484. var length = collection.length;
  8485. return length > 0 ? collection[baseRandom(0, length - 1)] : undefined;
  8486. }
  8487. var index = -1,
  8488. result = toArray(collection),
  8489. length = result.length,
  8490. lastIndex = length - 1;
  8491. n = nativeMin(n < 0 ? 0 : (+n || 0), length);
  8492. while (++index < n) {
  8493. var rand = baseRandom(index, lastIndex),
  8494. value = result[rand];
  8495. result[rand] = result[index];
  8496. result[index] = value;
  8497. }
  8498. result.length = n;
  8499. return result;
  8500. }
  8501. /**
  8502. * Creates an array of shuffled values, using a version of the
  8503. * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).
  8504. *
  8505. * @static
  8506. * @memberOf _
  8507. * @category Collection
  8508. * @param {Array|Object|string} collection The collection to shuffle.
  8509. * @returns {Array} Returns the new shuffled array.
  8510. * @example
  8511. *
  8512. * _.shuffle([1, 2, 3, 4]);
  8513. * // => [4, 1, 3, 2]
  8514. */
  8515. function shuffle(collection) {
  8516. return sample(collection, POSITIVE_INFINITY);
  8517. }
  8518. /**
  8519. * Gets the size of `collection` by returning its length for array-like
  8520. * values or the number of own enumerable properties for objects.
  8521. *
  8522. * @static
  8523. * @memberOf _
  8524. * @category Collection
  8525. * @param {Array|Object|string} collection The collection to inspect.
  8526. * @returns {number} Returns the size of `collection`.
  8527. * @example
  8528. *
  8529. * _.size([1, 2, 3]);
  8530. * // => 3
  8531. *
  8532. * _.size({ 'a': 1, 'b': 2 });
  8533. * // => 2
  8534. *
  8535. * _.size('pebbles');
  8536. * // => 7
  8537. */
  8538. function size(collection) {
  8539. var length = collection ? getLength(collection) : 0;
  8540. return isLength(length) ? length : keys(collection).length;
  8541. }
  8542. /**
  8543. * Checks if `predicate` returns truthy for **any** element of `collection`.
  8544. * The function returns as soon as it finds a passing value and does not iterate
  8545. * over the entire collection. The predicate is bound to `thisArg` and invoked
  8546. * with three arguments: (value, index|key, collection).
  8547. *
  8548. * If a property name is provided for `predicate` the created `_.property`
  8549. * style callback returns the property value of the given element.
  8550. *
  8551. * If a value is also provided for `thisArg` the created `_.matchesProperty`
  8552. * style callback returns `true` for elements that have a matching property
  8553. * value, else `false`.
  8554. *
  8555. * If an object is provided for `predicate` the created `_.matches` style
  8556. * callback returns `true` for elements that have the properties of the given
  8557. * object, else `false`.
  8558. *
  8559. * @static
  8560. * @memberOf _
  8561. * @alias any
  8562. * @category Collection
  8563. * @param {Array|Object|string} collection The collection to iterate over.
  8564. * @param {Function|Object|string} [predicate=_.identity] The function invoked
  8565. * per iteration.
  8566. * @param {*} [thisArg] The `this` binding of `predicate`.
  8567. * @returns {boolean} Returns `true` if any element passes the predicate check,
  8568. * else `false`.
  8569. * @example
  8570. *
  8571. * _.some([null, 0, 'yes', false], Boolean);
  8572. * // => true
  8573. *
  8574. * var users = [
  8575. * { 'user': 'barney', 'active': true },
  8576. * { 'user': 'fred', 'active': false }
  8577. * ];
  8578. *
  8579. * // using the `_.matches` callback shorthand
  8580. * _.some(users, { 'user': 'barney', 'active': false });
  8581. * // => false
  8582. *
  8583. * // using the `_.matchesProperty` callback shorthand
  8584. * _.some(users, 'active', false);
  8585. * // => true
  8586. *
  8587. * // using the `_.property` callback shorthand
  8588. * _.some(users, 'active');
  8589. * // => true
  8590. */
  8591. function some(collection, predicate, thisArg) {
  8592. var func = isArray(collection) ? arraySome : baseSome;
  8593. if (thisArg && isIterateeCall(collection, predicate, thisArg)) {
  8594. predicate = undefined;
  8595. }
  8596. if (typeof predicate != 'function' || thisArg !== undefined) {
  8597. predicate = getCallback(predicate, thisArg, 3);
  8598. }
  8599. return func(collection, predicate);
  8600. }
  8601. /**
  8602. * Creates an array of elements, sorted in ascending order by the results of
  8603. * running each element in a collection through `iteratee`. This method performs
  8604. * a stable sort, that is, it preserves the original sort order of equal elements.
  8605. * The `iteratee` is bound to `thisArg` and invoked with three arguments:
  8606. * (value, index|key, collection).
  8607. *
  8608. * If a property name is provided for `iteratee` the created `_.property`
  8609. * style callback returns the property value of the given element.
  8610. *
  8611. * If a value is also provided for `thisArg` the created `_.matchesProperty`
  8612. * style callback returns `true` for elements that have a matching property
  8613. * value, else `false`.
  8614. *
  8615. * If an object is provided for `iteratee` the created `_.matches` style
  8616. * callback returns `true` for elements that have the properties of the given
  8617. * object, else `false`.
  8618. *
  8619. * @static
  8620. * @memberOf _
  8621. * @category Collection
  8622. * @param {Array|Object|string} collection The collection to iterate over.
  8623. * @param {Function|Object|string} [iteratee=_.identity] The function invoked
  8624. * per iteration.
  8625. * @param {*} [thisArg] The `this` binding of `iteratee`.
  8626. * @returns {Array} Returns the new sorted array.
  8627. * @example
  8628. *
  8629. * _.sortBy([1, 2, 3], function(n) {
  8630. * return Math.sin(n);
  8631. * });
  8632. * // => [3, 1, 2]
  8633. *
  8634. * _.sortBy([1, 2, 3], function(n) {
  8635. * return this.sin(n);
  8636. * }, Math);
  8637. * // => [3, 1, 2]
  8638. *
  8639. * var users = [
  8640. * { 'user': 'fred' },
  8641. * { 'user': 'pebbles' },
  8642. * { 'user': 'barney' }
  8643. * ];
  8644. *
  8645. * // using the `_.property` callback shorthand
  8646. * _.pluck(_.sortBy(users, 'user'), 'user');
  8647. * // => ['barney', 'fred', 'pebbles']
  8648. */
  8649. function sortBy(collection, iteratee, thisArg) {
  8650. if (collection == null) {
  8651. return [];
  8652. }
  8653. if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {
  8654. iteratee = undefined;
  8655. }
  8656. var index = -1;
  8657. iteratee = getCallback(iteratee, thisArg, 3);
  8658. var result = baseMap(collection, function(value, key, collection) {
  8659. return { 'criteria': iteratee(value, key, collection), 'index': ++index, 'value': value };
  8660. });
  8661. return baseSortBy(result, compareAscending);
  8662. }
  8663. /**
  8664. * This method is like `_.sortBy` except that it can sort by multiple iteratees
  8665. * or property names.
  8666. *
  8667. * If a property name is provided for an iteratee the created `_.property`
  8668. * style callback returns the property value of the given element.
  8669. *
  8670. * If an object is provided for an iteratee the created `_.matches` style
  8671. * callback returns `true` for elements that have the properties of the given
  8672. * object, else `false`.
  8673. *
  8674. * @static
  8675. * @memberOf _
  8676. * @category Collection
  8677. * @param {Array|Object|string} collection The collection to iterate over.
  8678. * @param {...(Function|Function[]|Object|Object[]|string|string[])} iteratees
  8679. * The iteratees to sort by, specified as individual values or arrays of values.
  8680. * @returns {Array} Returns the new sorted array.
  8681. * @example
  8682. *
  8683. * var users = [
  8684. * { 'user': 'fred', 'age': 48 },
  8685. * { 'user': 'barney', 'age': 36 },
  8686. * { 'user': 'fred', 'age': 42 },
  8687. * { 'user': 'barney', 'age': 34 }
  8688. * ];
  8689. *
  8690. * _.map(_.sortByAll(users, ['user', 'age']), _.values);
  8691. * // => [['barney', 34], ['barney', 36], ['fred', 42], ['fred', 48]]
  8692. *
  8693. * _.map(_.sortByAll(users, 'user', function(chr) {
  8694. * return Math.floor(chr.age / 10);
  8695. * }), _.values);
  8696. * // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]]
  8697. */
  8698. var sortByAll = restParam(function(collection, iteratees) {
  8699. if (collection == null) {
  8700. return [];
  8701. }
  8702. var guard = iteratees[2];
  8703. if (guard && isIterateeCall(iteratees[0], iteratees[1], guard)) {
  8704. iteratees.length = 1;
  8705. }
  8706. return baseSortByOrder(collection, baseFlatten(iteratees), []);
  8707. });
  8708. /**
  8709. * This method is like `_.sortByAll` except that it allows specifying the
  8710. * sort orders of the iteratees to sort by. If `orders` is unspecified, all
  8711. * values are sorted in ascending order. Otherwise, a value is sorted in
  8712. * ascending order if its corresponding order is "asc", and descending if "desc".
  8713. *
  8714. * If a property name is provided for an iteratee the created `_.property`
  8715. * style callback returns the property value of the given element.
  8716. *
  8717. * If an object is provided for an iteratee the created `_.matches` style
  8718. * callback returns `true` for elements that have the properties of the given
  8719. * object, else `false`.
  8720. *
  8721. * @static
  8722. * @memberOf _
  8723. * @category Collection
  8724. * @param {Array|Object|string} collection The collection to iterate over.
  8725. * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
  8726. * @param {boolean[]} [orders] The sort orders of `iteratees`.
  8727. * @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`.
  8728. * @returns {Array} Returns the new sorted array.
  8729. * @example
  8730. *
  8731. * var users = [
  8732. * { 'user': 'fred', 'age': 48 },
  8733. * { 'user': 'barney', 'age': 34 },
  8734. * { 'user': 'fred', 'age': 42 },
  8735. * { 'user': 'barney', 'age': 36 }
  8736. * ];
  8737. *
  8738. * // sort by `user` in ascending order and by `age` in descending order
  8739. * _.map(_.sortByOrder(users, ['user', 'age'], ['asc', 'desc']), _.values);
  8740. * // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]]
  8741. */
  8742. function sortByOrder(collection, iteratees, orders, guard) {
  8743. if (collection == null) {
  8744. return [];
  8745. }
  8746. if (guard && isIterateeCall(iteratees, orders, guard)) {
  8747. orders = undefined;
  8748. }
  8749. if (!isArray(iteratees)) {
  8750. iteratees = iteratees == null ? [] : [iteratees];
  8751. }
  8752. if (!isArray(orders)) {
  8753. orders = orders == null ? [] : [orders];
  8754. }
  8755. return baseSortByOrder(collection, iteratees, orders);
  8756. }
  8757. /**
  8758. * Performs a deep comparison between each element in `collection` and the
  8759. * source object, returning an array of all elements that have equivalent
  8760. * property values.
  8761. *
  8762. * **Note:** This method supports comparing arrays, booleans, `Date` objects,
  8763. * numbers, `Object` objects, regexes, and strings. Objects are compared by
  8764. * their own, not inherited, enumerable properties. For comparing a single
  8765. * own or inherited property value see `_.matchesProperty`.
  8766. *
  8767. * @static
  8768. * @memberOf _
  8769. * @category Collection
  8770. * @param {Array|Object|string} collection The collection to search.
  8771. * @param {Object} source The object of property values to match.
  8772. * @returns {Array} Returns the new filtered array.
  8773. * @example
  8774. *
  8775. * var users = [
  8776. * { 'user': 'barney', 'age': 36, 'active': false, 'pets': ['hoppy'] },
  8777. * { 'user': 'fred', 'age': 40, 'active': true, 'pets': ['baby puss', 'dino'] }
  8778. * ];
  8779. *
  8780. * _.pluck(_.where(users, { 'age': 36, 'active': false }), 'user');
  8781. * // => ['barney']
  8782. *
  8783. * _.pluck(_.where(users, { 'pets': ['dino'] }), 'user');
  8784. * // => ['fred']
  8785. */
  8786. function where(collection, source) {
  8787. return filter(collection, baseMatches(source));
  8788. }
  8789. /*------------------------------------------------------------------------*/
  8790. /**
  8791. * Gets the number of milliseconds that have elapsed since the Unix epoch
  8792. * (1 January 1970 00:00:00 UTC).
  8793. *
  8794. * @static
  8795. * @memberOf _
  8796. * @category Date
  8797. * @example
  8798. *
  8799. * _.defer(function(stamp) {
  8800. * console.log(_.now() - stamp);
  8801. * }, _.now());
  8802. * // => logs the number of milliseconds it took for the deferred function to be invoked
  8803. */
  8804. var now = nativeNow || function() {
  8805. return new Date().getTime();
  8806. };
  8807. /*------------------------------------------------------------------------*/
  8808. /**
  8809. * The opposite of `_.before`; this method creates a function that invokes
  8810. * `func` once it is called `n` or more times.
  8811. *
  8812. * @static
  8813. * @memberOf _
  8814. * @category Function
  8815. * @param {number} n The number of calls before `func` is invoked.
  8816. * @param {Function} func The function to restrict.
  8817. * @returns {Function} Returns the new restricted function.
  8818. * @example
  8819. *
  8820. * var saves = ['profile', 'settings'];
  8821. *
  8822. * var done = _.after(saves.length, function() {
  8823. * console.log('done saving!');
  8824. * });
  8825. *
  8826. * _.forEach(saves, function(type) {
  8827. * asyncSave({ 'type': type, 'complete': done });
  8828. * });
  8829. * // => logs 'done saving!' after the two async saves have completed
  8830. */
  8831. function after(n, func) {
  8832. if (typeof func != 'function') {
  8833. if (typeof n == 'function') {
  8834. var temp = n;
  8835. n = func;
  8836. func = temp;
  8837. } else {
  8838. throw new TypeError(FUNC_ERROR_TEXT);
  8839. }
  8840. }
  8841. n = nativeIsFinite(n = +n) ? n : 0;
  8842. return function() {
  8843. if (--n < 1) {
  8844. return func.apply(this, arguments);
  8845. }
  8846. };
  8847. }
  8848. /**
  8849. * Creates a function that accepts up to `n` arguments ignoring any
  8850. * additional arguments.
  8851. *
  8852. * @static
  8853. * @memberOf _
  8854. * @category Function
  8855. * @param {Function} func The function to cap arguments for.
  8856. * @param {number} [n=func.length] The arity cap.
  8857. * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
  8858. * @returns {Function} Returns the new function.
  8859. * @example
  8860. *
  8861. * _.map(['6', '8', '10'], _.ary(parseInt, 1));
  8862. * // => [6, 8, 10]
  8863. */
  8864. function ary(func, n, guard) {
  8865. if (guard && isIterateeCall(func, n, guard)) {
  8866. n = undefined;
  8867. }
  8868. n = (func && n == null) ? func.length : nativeMax(+n || 0, 0);
  8869. return createWrapper(func, ARY_FLAG, undefined, undefined, undefined, undefined, n);
  8870. }
  8871. /**
  8872. * Creates a function that invokes `func`, with the `this` binding and arguments
  8873. * of the created function, while it is called less than `n` times. Subsequent
  8874. * calls to the created function return the result of the last `func` invocation.
  8875. *
  8876. * @static
  8877. * @memberOf _
  8878. * @category Function
  8879. * @param {number} n The number of calls at which `func` is no longer invoked.
  8880. * @param {Function} func The function to restrict.
  8881. * @returns {Function} Returns the new restricted function.
  8882. * @example
  8883. *
  8884. * jQuery('#add').on('click', _.before(5, addContactToList));
  8885. * // => allows adding up to 4 contacts to the list
  8886. */
  8887. function before(n, func) {
  8888. var result;
  8889. if (typeof func != 'function') {
  8890. if (typeof n == 'function') {
  8891. var temp = n;
  8892. n = func;
  8893. func = temp;
  8894. } else {
  8895. throw new TypeError(FUNC_ERROR_TEXT);
  8896. }
  8897. }
  8898. return function() {
  8899. if (--n > 0) {
  8900. result = func.apply(this, arguments);
  8901. }
  8902. if (n <= 1) {
  8903. func = undefined;
  8904. }
  8905. return result;
  8906. };
  8907. }
  8908. /**
  8909. * Creates a function that invokes `func` with the `this` binding of `thisArg`
  8910. * and prepends any additional `_.bind` arguments to those provided to the
  8911. * bound function.
  8912. *
  8913. * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,
  8914. * may be used as a placeholder for partially applied arguments.
  8915. *
  8916. * **Note:** Unlike native `Function#bind` this method does not set the "length"
  8917. * property of bound functions.
  8918. *
  8919. * @static
  8920. * @memberOf _
  8921. * @category Function
  8922. * @param {Function} func The function to bind.
  8923. * @param {*} thisArg The `this` binding of `func`.
  8924. * @param {...*} [partials] The arguments to be partially applied.
  8925. * @returns {Function} Returns the new bound function.
  8926. * @example
  8927. *
  8928. * var greet = function(greeting, punctuation) {
  8929. * return greeting + ' ' + this.user + punctuation;
  8930. * };
  8931. *
  8932. * var object = { 'user': 'fred' };
  8933. *
  8934. * var bound = _.bind(greet, object, 'hi');
  8935. * bound('!');
  8936. * // => 'hi fred!'
  8937. *
  8938. * // using placeholders
  8939. * var bound = _.bind(greet, object, _, '!');
  8940. * bound('hi');
  8941. * // => 'hi fred!'
  8942. */
  8943. var bind = restParam(function(func, thisArg, partials) {
  8944. var bitmask = BIND_FLAG;
  8945. if (partials.length) {
  8946. var holders = replaceHolders(partials, bind.placeholder);
  8947. bitmask |= PARTIAL_FLAG;
  8948. }
  8949. return createWrapper(func, bitmask, thisArg, partials, holders);
  8950. });
  8951. /**
  8952. * Binds methods of an object to the object itself, overwriting the existing
  8953. * method. Method names may be specified as individual arguments or as arrays
  8954. * of method names. If no method names are provided all enumerable function
  8955. * properties, own and inherited, of `object` are bound.
  8956. *
  8957. * **Note:** This method does not set the "length" property of bound functions.
  8958. *
  8959. * @static
  8960. * @memberOf _
  8961. * @category Function
  8962. * @param {Object} object The object to bind and assign the bound methods to.
  8963. * @param {...(string|string[])} [methodNames] The object method names to bind,
  8964. * specified as individual method names or arrays of method names.
  8965. * @returns {Object} Returns `object`.
  8966. * @example
  8967. *
  8968. * var view = {
  8969. * 'label': 'docs',
  8970. * 'onClick': function() {
  8971. * console.log('clicked ' + this.label);
  8972. * }
  8973. * };
  8974. *
  8975. * _.bindAll(view);
  8976. * jQuery('#docs').on('click', view.onClick);
  8977. * // => logs 'clicked docs' when the element is clicked
  8978. */
  8979. var bindAll = restParam(function(object, methodNames) {
  8980. methodNames = methodNames.length ? baseFlatten(methodNames) : functions(object);
  8981. var index = -1,
  8982. length = methodNames.length;
  8983. while (++index < length) {
  8984. var key = methodNames[index];
  8985. object[key] = createWrapper(object[key], BIND_FLAG, object);
  8986. }
  8987. return object;
  8988. });
  8989. /**
  8990. * Creates a function that invokes the method at `object[key]` and prepends
  8991. * any additional `_.bindKey` arguments to those provided to the bound function.
  8992. *
  8993. * This method differs from `_.bind` by allowing bound functions to reference
  8994. * methods that may be redefined or don't yet exist.
  8995. * See [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)
  8996. * for more details.
  8997. *
  8998. * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic
  8999. * builds, may be used as a placeholder for partially applied arguments.
  9000. *
  9001. * @static
  9002. * @memberOf _
  9003. * @category Function
  9004. * @param {Object} object The object the method belongs to.
  9005. * @param {string} key The key of the method.
  9006. * @param {...*} [partials] The arguments to be partially applied.
  9007. * @returns {Function} Returns the new bound function.
  9008. * @example
  9009. *
  9010. * var object = {
  9011. * 'user': 'fred',
  9012. * 'greet': function(greeting, punctuation) {
  9013. * return greeting + ' ' + this.user + punctuation;
  9014. * }
  9015. * };
  9016. *
  9017. * var bound = _.bindKey(object, 'greet', 'hi');
  9018. * bound('!');
  9019. * // => 'hi fred!'
  9020. *
  9021. * object.greet = function(greeting, punctuation) {
  9022. * return greeting + 'ya ' + this.user + punctuation;
  9023. * };
  9024. *
  9025. * bound('!');
  9026. * // => 'hiya fred!'
  9027. *
  9028. * // using placeholders
  9029. * var bound = _.bindKey(object, 'greet', _, '!');
  9030. * bound('hi');
  9031. * // => 'hiya fred!'
  9032. */
  9033. var bindKey = restParam(function(object, key, partials) {
  9034. var bitmask = BIND_FLAG | BIND_KEY_FLAG;
  9035. if (partials.length) {
  9036. var holders = replaceHolders(partials, bindKey.placeholder);
  9037. bitmask |= PARTIAL_FLAG;
  9038. }
  9039. return createWrapper(key, bitmask, object, partials, holders);
  9040. });
  9041. /**
  9042. * Creates a function that accepts one or more arguments of `func` that when
  9043. * called either invokes `func` returning its result, if all `func` arguments
  9044. * have been provided, or returns a function that accepts one or more of the
  9045. * remaining `func` arguments, and so on. The arity of `func` may be specified
  9046. * if `func.length` is not sufficient.
  9047. *
  9048. * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,
  9049. * may be used as a placeholder for provided arguments.
  9050. *
  9051. * **Note:** This method does not set the "length" property of curried functions.
  9052. *
  9053. * @static
  9054. * @memberOf _
  9055. * @category Function
  9056. * @param {Function} func The function to curry.
  9057. * @param {number} [arity=func.length] The arity of `func`.
  9058. * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
  9059. * @returns {Function} Returns the new curried function.
  9060. * @example
  9061. *
  9062. * var abc = function(a, b, c) {
  9063. * return [a, b, c];
  9064. * };
  9065. *
  9066. * var curried = _.curry(abc);
  9067. *
  9068. * curried(1)(2)(3);
  9069. * // => [1, 2, 3]
  9070. *
  9071. * curried(1, 2)(3);
  9072. * // => [1, 2, 3]
  9073. *
  9074. * curried(1, 2, 3);
  9075. * // => [1, 2, 3]
  9076. *
  9077. * // using placeholders
  9078. * curried(1)(_, 3)(2);
  9079. * // => [1, 2, 3]
  9080. */
  9081. var curry = createCurry(CURRY_FLAG);
  9082. /**
  9083. * This method is like `_.curry` except that arguments are applied to `func`
  9084. * in the manner of `_.partialRight` instead of `_.partial`.
  9085. *
  9086. * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic
  9087. * builds, may be used as a placeholder for provided arguments.
  9088. *
  9089. * **Note:** This method does not set the "length" property of curried functions.
  9090. *
  9091. * @static
  9092. * @memberOf _
  9093. * @category Function
  9094. * @param {Function} func The function to curry.
  9095. * @param {number} [arity=func.length] The arity of `func`.
  9096. * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
  9097. * @returns {Function} Returns the new curried function.
  9098. * @example
  9099. *
  9100. * var abc = function(a, b, c) {
  9101. * return [a, b, c];
  9102. * };
  9103. *
  9104. * var curried = _.curryRight(abc);
  9105. *
  9106. * curried(3)(2)(1);
  9107. * // => [1, 2, 3]
  9108. *
  9109. * curried(2, 3)(1);
  9110. * // => [1, 2, 3]
  9111. *
  9112. * curried(1, 2, 3);
  9113. * // => [1, 2, 3]
  9114. *
  9115. * // using placeholders
  9116. * curried(3)(1, _)(2);
  9117. * // => [1, 2, 3]
  9118. */
  9119. var curryRight = createCurry(CURRY_RIGHT_FLAG);
  9120. /**
  9121. * Creates a debounced function that delays invoking `func` until after `wait`
  9122. * milliseconds have elapsed since the last time the debounced function was
  9123. * invoked. The debounced function comes with a `cancel` method to cancel
  9124. * delayed invocations. Provide an options object to indicate that `func`
  9125. * should be invoked on the leading and/or trailing edge of the `wait` timeout.
  9126. * Subsequent calls to the debounced function return the result of the last
  9127. * `func` invocation.
  9128. *
  9129. * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked
  9130. * on the trailing edge of the timeout only if the the debounced function is
  9131. * invoked more than once during the `wait` timeout.
  9132. *
  9133. * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)
  9134. * for details over the differences between `_.debounce` and `_.throttle`.
  9135. *
  9136. * @static
  9137. * @memberOf _
  9138. * @category Function
  9139. * @param {Function} func The function to debounce.
  9140. * @param {number} [wait=0] The number of milliseconds to delay.
  9141. * @param {Object} [options] The options object.
  9142. * @param {boolean} [options.leading=false] Specify invoking on the leading
  9143. * edge of the timeout.
  9144. * @param {number} [options.maxWait] The maximum time `func` is allowed to be
  9145. * delayed before it is invoked.
  9146. * @param {boolean} [options.trailing=true] Specify invoking on the trailing
  9147. * edge of the timeout.
  9148. * @returns {Function} Returns the new debounced function.
  9149. * @example
  9150. *
  9151. * // avoid costly calculations while the window size is in flux
  9152. * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
  9153. *
  9154. * // invoke `sendMail` when the click event is fired, debouncing subsequent calls
  9155. * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {
  9156. * 'leading': true,
  9157. * 'trailing': false
  9158. * }));
  9159. *
  9160. * // ensure `batchLog` is invoked once after 1 second of debounced calls
  9161. * var source = new EventSource('/stream');
  9162. * jQuery(source).on('message', _.debounce(batchLog, 250, {
  9163. * 'maxWait': 1000
  9164. * }));
  9165. *
  9166. * // cancel a debounced call
  9167. * var todoChanges = _.debounce(batchLog, 1000);
  9168. * Object.observe(models.todo, todoChanges);
  9169. *
  9170. * Object.observe(models, function(changes) {
  9171. * if (_.find(changes, { 'user': 'todo', 'type': 'delete'})) {
  9172. * todoChanges.cancel();
  9173. * }
  9174. * }, ['delete']);
  9175. *
  9176. * // ...at some point `models.todo` is changed
  9177. * models.todo.completed = true;
  9178. *
  9179. * // ...before 1 second has passed `models.todo` is deleted
  9180. * // which cancels the debounced `todoChanges` call
  9181. * delete models.todo;
  9182. */
  9183. function debounce(func, wait, options) {
  9184. var args,
  9185. maxTimeoutId,
  9186. result,
  9187. stamp,
  9188. thisArg,
  9189. timeoutId,
  9190. trailingCall,
  9191. lastCalled = 0,
  9192. maxWait = false,
  9193. trailing = true;
  9194. if (typeof func != 'function') {
  9195. throw new TypeError(FUNC_ERROR_TEXT);
  9196. }
  9197. wait = wait < 0 ? 0 : (+wait || 0);
  9198. if (options === true) {
  9199. var leading = true;
  9200. trailing = false;
  9201. } else if (isObject(options)) {
  9202. leading = !!options.leading;
  9203. maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait);
  9204. trailing = 'trailing' in options ? !!options.trailing : trailing;
  9205. }
  9206. function cancel() {
  9207. if (timeoutId) {
  9208. clearTimeout(timeoutId);
  9209. }
  9210. if (maxTimeoutId) {
  9211. clearTimeout(maxTimeoutId);
  9212. }
  9213. lastCalled = 0;
  9214. maxTimeoutId = timeoutId = trailingCall = undefined;
  9215. }
  9216. function complete(isCalled, id) {
  9217. if (id) {
  9218. clearTimeout(id);
  9219. }
  9220. maxTimeoutId = timeoutId = trailingCall = undefined;
  9221. if (isCalled) {
  9222. lastCalled = now();
  9223. result = func.apply(thisArg, args);
  9224. if (!timeoutId && !maxTimeoutId) {
  9225. args = thisArg = undefined;
  9226. }
  9227. }
  9228. }
  9229. function delayed() {
  9230. var remaining = wait - (now() - stamp);
  9231. if (remaining <= 0 || remaining > wait) {
  9232. complete(trailingCall, maxTimeoutId);
  9233. } else {
  9234. timeoutId = setTimeout(delayed, remaining);
  9235. }
  9236. }
  9237. function maxDelayed() {
  9238. complete(trailing, timeoutId);
  9239. }
  9240. function debounced() {
  9241. args = arguments;
  9242. stamp = now();
  9243. thisArg = this;
  9244. trailingCall = trailing && (timeoutId || !leading);
  9245. if (maxWait === false) {
  9246. var leadingCall = leading && !timeoutId;
  9247. } else {
  9248. if (!maxTimeoutId && !leading) {
  9249. lastCalled = stamp;
  9250. }
  9251. var remaining = maxWait - (stamp - lastCalled),
  9252. isCalled = remaining <= 0 || remaining > maxWait;
  9253. if (isCalled) {
  9254. if (maxTimeoutId) {
  9255. maxTimeoutId = clearTimeout(maxTimeoutId);
  9256. }
  9257. lastCalled = stamp;
  9258. result = func.apply(thisArg, args);
  9259. }
  9260. else if (!maxTimeoutId) {
  9261. maxTimeoutId = setTimeout(maxDelayed, remaining);
  9262. }
  9263. }
  9264. if (isCalled && timeoutId) {
  9265. timeoutId = clearTimeout(timeoutId);
  9266. }
  9267. else if (!timeoutId && wait !== maxWait) {
  9268. timeoutId = setTimeout(delayed, wait);
  9269. }
  9270. if (leadingCall) {
  9271. isCalled = true;
  9272. result = func.apply(thisArg, args);
  9273. }
  9274. if (isCalled && !timeoutId && !maxTimeoutId) {
  9275. args = thisArg = undefined;
  9276. }
  9277. return result;
  9278. }
  9279. debounced.cancel = cancel;
  9280. return debounced;
  9281. }
  9282. /**
  9283. * Defers invoking the `func` until the current call stack has cleared. Any
  9284. * additional arguments are provided to `func` when it is invoked.
  9285. *
  9286. * @static
  9287. * @memberOf _
  9288. * @category Function
  9289. * @param {Function} func The function to defer.
  9290. * @param {...*} [args] The arguments to invoke the function with.
  9291. * @returns {number} Returns the timer id.
  9292. * @example
  9293. *
  9294. * _.defer(function(text) {
  9295. * console.log(text);
  9296. * }, 'deferred');
  9297. * // logs 'deferred' after one or more milliseconds
  9298. */
  9299. var defer = restParam(function(func, args) {
  9300. return baseDelay(func, 1, args);
  9301. });
  9302. /**
  9303. * Invokes `func` after `wait` milliseconds. Any additional arguments are
  9304. * provided to `func` when it is invoked.
  9305. *
  9306. * @static
  9307. * @memberOf _
  9308. * @category Function
  9309. * @param {Function} func The function to delay.
  9310. * @param {number} wait The number of milliseconds to delay invocation.
  9311. * @param {...*} [args] The arguments to invoke the function with.
  9312. * @returns {number} Returns the timer id.
  9313. * @example
  9314. *
  9315. * _.delay(function(text) {
  9316. * console.log(text);
  9317. * }, 1000, 'later');
  9318. * // => logs 'later' after one second
  9319. */
  9320. var delay = restParam(function(func, wait, args) {
  9321. return baseDelay(func, wait, args);
  9322. });
  9323. /**
  9324. * Creates a function that returns the result of invoking the provided
  9325. * functions with the `this` binding of the created function, where each
  9326. * successive invocation is supplied the return value of the previous.
  9327. *
  9328. * @static
  9329. * @memberOf _
  9330. * @category Function
  9331. * @param {...Function} [funcs] Functions to invoke.
  9332. * @returns {Function} Returns the new function.
  9333. * @example
  9334. *
  9335. * function square(n) {
  9336. * return n * n;
  9337. * }
  9338. *
  9339. * var addSquare = _.flow(_.add, square);
  9340. * addSquare(1, 2);
  9341. * // => 9
  9342. */
  9343. var flow = createFlow();
  9344. /**
  9345. * This method is like `_.flow` except that it creates a function that
  9346. * invokes the provided functions from right to left.
  9347. *
  9348. * @static
  9349. * @memberOf _
  9350. * @alias backflow, compose
  9351. * @category Function
  9352. * @param {...Function} [funcs] Functions to invoke.
  9353. * @returns {Function} Returns the new function.
  9354. * @example
  9355. *
  9356. * function square(n) {
  9357. * return n * n;
  9358. * }
  9359. *
  9360. * var addSquare = _.flowRight(square, _.add);
  9361. * addSquare(1, 2);
  9362. * // => 9
  9363. */
  9364. var flowRight = createFlow(true);
  9365. /**
  9366. * Creates a function that memoizes the result of `func`. If `resolver` is
  9367. * provided it determines the cache key for storing the result based on the
  9368. * arguments provided to the memoized function. By default, the first argument
  9369. * provided to the memoized function is coerced to a string and used as the
  9370. * cache key. The `func` is invoked with the `this` binding of the memoized
  9371. * function.
  9372. *
  9373. * **Note:** The cache is exposed as the `cache` property on the memoized
  9374. * function. Its creation may be customized by replacing the `_.memoize.Cache`
  9375. * constructor with one whose instances implement the [`Map`](http://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-map-prototype-object)
  9376. * method interface of `get`, `has`, and `set`.
  9377. *
  9378. * @static
  9379. * @memberOf _
  9380. * @category Function
  9381. * @param {Function} func The function to have its output memoized.
  9382. * @param {Function} [resolver] The function to resolve the cache key.
  9383. * @returns {Function} Returns the new memoizing function.
  9384. * @example
  9385. *
  9386. * var upperCase = _.memoize(function(string) {
  9387. * return string.toUpperCase();
  9388. * });
  9389. *
  9390. * upperCase('fred');
  9391. * // => 'FRED'
  9392. *
  9393. * // modifying the result cache
  9394. * upperCase.cache.set('fred', 'BARNEY');
  9395. * upperCase('fred');
  9396. * // => 'BARNEY'
  9397. *
  9398. * // replacing `_.memoize.Cache`
  9399. * var object = { 'user': 'fred' };
  9400. * var other = { 'user': 'barney' };
  9401. * var identity = _.memoize(_.identity);
  9402. *
  9403. * identity(object);
  9404. * // => { 'user': 'fred' }
  9405. * identity(other);
  9406. * // => { 'user': 'fred' }
  9407. *
  9408. * _.memoize.Cache = WeakMap;
  9409. * var identity = _.memoize(_.identity);
  9410. *
  9411. * identity(object);
  9412. * // => { 'user': 'fred' }
  9413. * identity(other);
  9414. * // => { 'user': 'barney' }
  9415. */
  9416. function memoize(func, resolver) {
  9417. if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {
  9418. throw new TypeError(FUNC_ERROR_TEXT);
  9419. }
  9420. var memoized = function() {
  9421. var args = arguments,
  9422. key = resolver ? resolver.apply(this, args) : args[0],
  9423. cache = memoized.cache;
  9424. if (cache.has(key)) {
  9425. return cache.get(key);
  9426. }
  9427. var result = func.apply(this, args);
  9428. memoized.cache = cache.set(key, result);
  9429. return result;
  9430. };
  9431. memoized.cache = new memoize.Cache;
  9432. return memoized;
  9433. }
  9434. /**
  9435. * Creates a function that runs each argument through a corresponding
  9436. * transform function.
  9437. *
  9438. * @static
  9439. * @memberOf _
  9440. * @category Function
  9441. * @param {Function} func The function to wrap.
  9442. * @param {...(Function|Function[])} [transforms] The functions to transform
  9443. * arguments, specified as individual functions or arrays of functions.
  9444. * @returns {Function} Returns the new function.
  9445. * @example
  9446. *
  9447. * function doubled(n) {
  9448. * return n * 2;
  9449. * }
  9450. *
  9451. * function square(n) {
  9452. * return n * n;
  9453. * }
  9454. *
  9455. * var modded = _.modArgs(function(x, y) {
  9456. * return [x, y];
  9457. * }, square, doubled);
  9458. *
  9459. * modded(1, 2);
  9460. * // => [1, 4]
  9461. *
  9462. * modded(5, 10);
  9463. * // => [25, 20]
  9464. */
  9465. var modArgs = restParam(function(func, transforms) {
  9466. transforms = baseFlatten(transforms);
  9467. if (typeof func != 'function' || !arrayEvery(transforms, baseIsFunction)) {
  9468. throw new TypeError(FUNC_ERROR_TEXT);
  9469. }
  9470. var length = transforms.length;
  9471. return restParam(function(args) {
  9472. var index = nativeMin(args.length, length);
  9473. while (index--) {
  9474. args[index] = transforms[index](args[index]);
  9475. }
  9476. return func.apply(this, args);
  9477. });
  9478. });
  9479. /**
  9480. * Creates a function that negates the result of the predicate `func`. The
  9481. * `func` predicate is invoked with the `this` binding and arguments of the
  9482. * created function.
  9483. *
  9484. * @static
  9485. * @memberOf _
  9486. * @category Function
  9487. * @param {Function} predicate The predicate to negate.
  9488. * @returns {Function} Returns the new function.
  9489. * @example
  9490. *
  9491. * function isEven(n) {
  9492. * return n % 2 == 0;
  9493. * }
  9494. *
  9495. * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));
  9496. * // => [1, 3, 5]
  9497. */
  9498. function negate(predicate) {
  9499. if (typeof predicate != 'function') {
  9500. throw new TypeError(FUNC_ERROR_TEXT);
  9501. }
  9502. return function() {
  9503. return !predicate.apply(this, arguments);
  9504. };
  9505. }
  9506. /**
  9507. * Creates a function that is restricted to invoking `func` once. Repeat calls
  9508. * to the function return the value of the first call. The `func` is invoked
  9509. * with the `this` binding and arguments of the created function.
  9510. *
  9511. * @static
  9512. * @memberOf _
  9513. * @category Function
  9514. * @param {Function} func The function to restrict.
  9515. * @returns {Function} Returns the new restricted function.
  9516. * @example
  9517. *
  9518. * var initialize = _.once(createApplication);
  9519. * initialize();
  9520. * initialize();
  9521. * // `initialize` invokes `createApplication` once
  9522. */
  9523. function once(func) {
  9524. return before(2, func);
  9525. }
  9526. /**
  9527. * Creates a function that invokes `func` with `partial` arguments prepended
  9528. * to those provided to the new function. This method is like `_.bind` except
  9529. * it does **not** alter the `this` binding.
  9530. *
  9531. * The `_.partial.placeholder` value, which defaults to `_` in monolithic
  9532. * builds, may be used as a placeholder for partially applied arguments.
  9533. *
  9534. * **Note:** This method does not set the "length" property of partially
  9535. * applied functions.
  9536. *
  9537. * @static
  9538. * @memberOf _
  9539. * @category Function
  9540. * @param {Function} func The function to partially apply arguments to.
  9541. * @param {...*} [partials] The arguments to be partially applied.
  9542. * @returns {Function} Returns the new partially applied function.
  9543. * @example
  9544. *
  9545. * var greet = function(greeting, name) {
  9546. * return greeting + ' ' + name;
  9547. * };
  9548. *
  9549. * var sayHelloTo = _.partial(greet, 'hello');
  9550. * sayHelloTo('fred');
  9551. * // => 'hello fred'
  9552. *
  9553. * // using placeholders
  9554. * var greetFred = _.partial(greet, _, 'fred');
  9555. * greetFred('hi');
  9556. * // => 'hi fred'
  9557. */
  9558. var partial = createPartial(PARTIAL_FLAG);
  9559. /**
  9560. * This method is like `_.partial` except that partially applied arguments
  9561. * are appended to those provided to the new function.
  9562. *
  9563. * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic
  9564. * builds, may be used as a placeholder for partially applied arguments.
  9565. *
  9566. * **Note:** This method does not set the "length" property of partially
  9567. * applied functions.
  9568. *
  9569. * @static
  9570. * @memberOf _
  9571. * @category Function
  9572. * @param {Function} func The function to partially apply arguments to.
  9573. * @param {...*} [partials] The arguments to be partially applied.
  9574. * @returns {Function} Returns the new partially applied function.
  9575. * @example
  9576. *
  9577. * var greet = function(greeting, name) {
  9578. * return greeting + ' ' + name;
  9579. * };
  9580. *
  9581. * var greetFred = _.partialRight(greet, 'fred');
  9582. * greetFred('hi');
  9583. * // => 'hi fred'
  9584. *
  9585. * // using placeholders
  9586. * var sayHelloTo = _.partialRight(greet, 'hello', _);
  9587. * sayHelloTo('fred');
  9588. * // => 'hello fred'
  9589. */
  9590. var partialRight = createPartial(PARTIAL_RIGHT_FLAG);
  9591. /**
  9592. * Creates a function that invokes `func` with arguments arranged according
  9593. * to the specified indexes where the argument value at the first index is
  9594. * provided as the first argument, the argument value at the second index is
  9595. * provided as the second argument, and so on.
  9596. *
  9597. * @static
  9598. * @memberOf _
  9599. * @category Function
  9600. * @param {Function} func The function to rearrange arguments for.
  9601. * @param {...(number|number[])} indexes The arranged argument indexes,
  9602. * specified as individual indexes or arrays of indexes.
  9603. * @returns {Function} Returns the new function.
  9604. * @example
  9605. *
  9606. * var rearged = _.rearg(function(a, b, c) {
  9607. * return [a, b, c];
  9608. * }, 2, 0, 1);
  9609. *
  9610. * rearged('b', 'c', 'a')
  9611. * // => ['a', 'b', 'c']
  9612. *
  9613. * var map = _.rearg(_.map, [1, 0]);
  9614. * map(function(n) {
  9615. * return n * 3;
  9616. * }, [1, 2, 3]);
  9617. * // => [3, 6, 9]
  9618. */
  9619. var rearg = restParam(function(func, indexes) {
  9620. return createWrapper(func, REARG_FLAG, undefined, undefined, undefined, baseFlatten(indexes));
  9621. });
  9622. /**
  9623. * Creates a function that invokes `func` with the `this` binding of the
  9624. * created function and arguments from `start` and beyond provided as an array.
  9625. *
  9626. * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters).
  9627. *
  9628. * @static
  9629. * @memberOf _
  9630. * @category Function
  9631. * @param {Function} func The function to apply a rest parameter to.
  9632. * @param {number} [start=func.length-1] The start position of the rest parameter.
  9633. * @returns {Function} Returns the new function.
  9634. * @example
  9635. *
  9636. * var say = _.restParam(function(what, names) {
  9637. * return what + ' ' + _.initial(names).join(', ') +
  9638. * (_.size(names) > 1 ? ', & ' : '') + _.last(names);
  9639. * });
  9640. *
  9641. * say('hello', 'fred', 'barney', 'pebbles');
  9642. * // => 'hello fred, barney, & pebbles'
  9643. */
  9644. function restParam(func, start) {
  9645. if (typeof func != 'function') {
  9646. throw new TypeError(FUNC_ERROR_TEXT);
  9647. }
  9648. start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);
  9649. return function() {
  9650. var args = arguments,
  9651. index = -1,
  9652. length = nativeMax(args.length - start, 0),
  9653. rest = Array(length);
  9654. while (++index < length) {
  9655. rest[index] = args[start + index];
  9656. }
  9657. switch (start) {
  9658. case 0: return func.call(this, rest);
  9659. case 1: return func.call(this, args[0], rest);
  9660. case 2: return func.call(this, args[0], args[1], rest);
  9661. }
  9662. var otherArgs = Array(start + 1);
  9663. index = -1;
  9664. while (++index < start) {
  9665. otherArgs[index] = args[index];
  9666. }
  9667. otherArgs[start] = rest;
  9668. return func.apply(this, otherArgs);
  9669. };
  9670. }
  9671. /**
  9672. * Creates a function that invokes `func` with the `this` binding of the created
  9673. * function and an array of arguments much like [`Function#apply`](https://es5.github.io/#x15.3.4.3).
  9674. *
  9675. * **Note:** This method is based on the [spread operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator).
  9676. *
  9677. * @static
  9678. * @memberOf _
  9679. * @category Function
  9680. * @param {Function} func The function to spread arguments over.
  9681. * @returns {Function} Returns the new function.
  9682. * @example
  9683. *
  9684. * var say = _.spread(function(who, what) {
  9685. * return who + ' says ' + what;
  9686. * });
  9687. *
  9688. * say(['fred', 'hello']);
  9689. * // => 'fred says hello'
  9690. *
  9691. * // with a Promise
  9692. * var numbers = Promise.all([
  9693. * Promise.resolve(40),
  9694. * Promise.resolve(36)
  9695. * ]);
  9696. *
  9697. * numbers.then(_.spread(function(x, y) {
  9698. * return x + y;
  9699. * }));
  9700. * // => a Promise of 76
  9701. */
  9702. function spread(func) {
  9703. if (typeof func != 'function') {
  9704. throw new TypeError(FUNC_ERROR_TEXT);
  9705. }
  9706. return function(array) {
  9707. return func.apply(this, array);
  9708. };
  9709. }
  9710. /**
  9711. * Creates a throttled function that only invokes `func` at most once per
  9712. * every `wait` milliseconds. The throttled function comes with a `cancel`
  9713. * method to cancel delayed invocations. Provide an options object to indicate
  9714. * that `func` should be invoked on the leading and/or trailing edge of the
  9715. * `wait` timeout. Subsequent calls to the throttled function return the
  9716. * result of the last `func` call.
  9717. *
  9718. * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked
  9719. * on the trailing edge of the timeout only if the the throttled function is
  9720. * invoked more than once during the `wait` timeout.
  9721. *
  9722. * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)
  9723. * for details over the differences between `_.throttle` and `_.debounce`.
  9724. *
  9725. * @static
  9726. * @memberOf _
  9727. * @category Function
  9728. * @param {Function} func The function to throttle.
  9729. * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
  9730. * @param {Object} [options] The options object.
  9731. * @param {boolean} [options.leading=true] Specify invoking on the leading
  9732. * edge of the timeout.
  9733. * @param {boolean} [options.trailing=true] Specify invoking on the trailing
  9734. * edge of the timeout.
  9735. * @returns {Function} Returns the new throttled function.
  9736. * @example
  9737. *
  9738. * // avoid excessively updating the position while scrolling
  9739. * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
  9740. *
  9741. * // invoke `renewToken` when the click event is fired, but not more than once every 5 minutes
  9742. * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, {
  9743. * 'trailing': false
  9744. * }));
  9745. *
  9746. * // cancel a trailing throttled call
  9747. * jQuery(window).on('popstate', throttled.cancel);
  9748. */
  9749. function throttle(func, wait, options) {
  9750. var leading = true,
  9751. trailing = true;
  9752. if (typeof func != 'function') {
  9753. throw new TypeError(FUNC_ERROR_TEXT);
  9754. }
  9755. if (options === false) {
  9756. leading = false;
  9757. } else if (isObject(options)) {
  9758. leading = 'leading' in options ? !!options.leading : leading;
  9759. trailing = 'trailing' in options ? !!options.trailing : trailing;
  9760. }
  9761. return debounce(func, wait, { 'leading': leading, 'maxWait': +wait, 'trailing': trailing });
  9762. }
  9763. /**
  9764. * Creates a function that provides `value` to the wrapper function as its
  9765. * first argument. Any additional arguments provided to the function are
  9766. * appended to those provided to the wrapper function. The wrapper is invoked
  9767. * with the `this` binding of the created function.
  9768. *
  9769. * @static
  9770. * @memberOf _
  9771. * @category Function
  9772. * @param {*} value The value to wrap.
  9773. * @param {Function} wrapper The wrapper function.
  9774. * @returns {Function} Returns the new function.
  9775. * @example
  9776. *
  9777. * var p = _.wrap(_.escape, function(func, text) {
  9778. * return '<p>' + func(text) + '</p>';
  9779. * });
  9780. *
  9781. * p('fred, barney, & pebbles');
  9782. * // => '<p>fred, barney, &amp; pebbles</p>'
  9783. */
  9784. function wrap(value, wrapper) {
  9785. wrapper = wrapper == null ? identity : wrapper;
  9786. return createWrapper(wrapper, PARTIAL_FLAG, undefined, [value], []);
  9787. }
  9788. /*------------------------------------------------------------------------*/
  9789. /**
  9790. * Creates a clone of `value`. If `isDeep` is `true` nested objects are cloned,
  9791. * otherwise they are assigned by reference. If `customizer` is provided it is
  9792. * invoked to produce the cloned values. If `customizer` returns `undefined`
  9793. * cloning is handled by the method instead. The `customizer` is bound to
  9794. * `thisArg` and invoked with two argument; (value [, index|key, object]).
  9795. *
  9796. * **Note:** This method is loosely based on the
  9797. * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm).
  9798. * The enumerable properties of `arguments` objects and objects created by
  9799. * constructors other than `Object` are cloned to plain `Object` objects. An
  9800. * empty object is returned for uncloneable values such as functions, DOM nodes,
  9801. * Maps, Sets, and WeakMaps.
  9802. *
  9803. * @static
  9804. * @memberOf _
  9805. * @category Lang
  9806. * @param {*} value The value to clone.
  9807. * @param {boolean} [isDeep] Specify a deep clone.
  9808. * @param {Function} [customizer] The function to customize cloning values.
  9809. * @param {*} [thisArg] The `this` binding of `customizer`.
  9810. * @returns {*} Returns the cloned value.
  9811. * @example
  9812. *
  9813. * var users = [
  9814. * { 'user': 'barney' },
  9815. * { 'user': 'fred' }
  9816. * ];
  9817. *
  9818. * var shallow = _.clone(users);
  9819. * shallow[0] === users[0];
  9820. * // => true
  9821. *
  9822. * var deep = _.clone(users, true);
  9823. * deep[0] === users[0];
  9824. * // => false
  9825. *
  9826. * // using a customizer callback
  9827. * var el = _.clone(document.body, function(value) {
  9828. * if (_.isElement(value)) {
  9829. * return value.cloneNode(false);
  9830. * }
  9831. * });
  9832. *
  9833. * el === document.body
  9834. * // => false
  9835. * el.nodeName
  9836. * // => BODY
  9837. * el.childNodes.length;
  9838. * // => 0
  9839. */
  9840. function clone(value, isDeep, customizer, thisArg) {
  9841. if (isDeep && typeof isDeep != 'boolean' && isIterateeCall(value, isDeep, customizer)) {
  9842. isDeep = false;
  9843. }
  9844. else if (typeof isDeep == 'function') {
  9845. thisArg = customizer;
  9846. customizer = isDeep;
  9847. isDeep = false;
  9848. }
  9849. return typeof customizer == 'function'
  9850. ? baseClone(value, isDeep, bindCallback(customizer, thisArg, 1))
  9851. : baseClone(value, isDeep);
  9852. }
  9853. /**
  9854. * Creates a deep clone of `value`. If `customizer` is provided it is invoked
  9855. * to produce the cloned values. If `customizer` returns `undefined` cloning
  9856. * is handled by the method instead. The `customizer` is bound to `thisArg`
  9857. * and invoked with two argument; (value [, index|key, object]).
  9858. *
  9859. * **Note:** This method is loosely based on the
  9860. * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm).
  9861. * The enumerable properties of `arguments` objects and objects created by
  9862. * constructors other than `Object` are cloned to plain `Object` objects. An
  9863. * empty object is returned for uncloneable values such as functions, DOM nodes,
  9864. * Maps, Sets, and WeakMaps.
  9865. *
  9866. * @static
  9867. * @memberOf _
  9868. * @category Lang
  9869. * @param {*} value The value to deep clone.
  9870. * @param {Function} [customizer] The function to customize cloning values.
  9871. * @param {*} [thisArg] The `this` binding of `customizer`.
  9872. * @returns {*} Returns the deep cloned value.
  9873. * @example
  9874. *
  9875. * var users = [
  9876. * { 'user': 'barney' },
  9877. * { 'user': 'fred' }
  9878. * ];
  9879. *
  9880. * var deep = _.cloneDeep(users);
  9881. * deep[0] === users[0];
  9882. * // => false
  9883. *
  9884. * // using a customizer callback
  9885. * var el = _.cloneDeep(document.body, function(value) {
  9886. * if (_.isElement(value)) {
  9887. * return value.cloneNode(true);
  9888. * }
  9889. * });
  9890. *
  9891. * el === document.body
  9892. * // => false
  9893. * el.nodeName
  9894. * // => BODY
  9895. * el.childNodes.length;
  9896. * // => 20
  9897. */
  9898. function cloneDeep(value, customizer, thisArg) {
  9899. return typeof customizer == 'function'
  9900. ? baseClone(value, true, bindCallback(customizer, thisArg, 1))
  9901. : baseClone(value, true);
  9902. }
  9903. /**
  9904. * Checks if `value` is greater than `other`.
  9905. *
  9906. * @static
  9907. * @memberOf _
  9908. * @category Lang
  9909. * @param {*} value The value to compare.
  9910. * @param {*} other The other value to compare.
  9911. * @returns {boolean} Returns `true` if `value` is greater than `other`, else `false`.
  9912. * @example
  9913. *
  9914. * _.gt(3, 1);
  9915. * // => true
  9916. *
  9917. * _.gt(3, 3);
  9918. * // => false
  9919. *
  9920. * _.gt(1, 3);
  9921. * // => false
  9922. */
  9923. function gt(value, other) {
  9924. return value > other;
  9925. }
  9926. /**
  9927. * Checks if `value` is greater than or equal to `other`.
  9928. *
  9929. * @static
  9930. * @memberOf _
  9931. * @category Lang
  9932. * @param {*} value The value to compare.
  9933. * @param {*} other The other value to compare.
  9934. * @returns {boolean} Returns `true` if `value` is greater than or equal to `other`, else `false`.
  9935. * @example
  9936. *
  9937. * _.gte(3, 1);
  9938. * // => true
  9939. *
  9940. * _.gte(3, 3);
  9941. * // => true
  9942. *
  9943. * _.gte(1, 3);
  9944. * // => false
  9945. */
  9946. function gte(value, other) {
  9947. return value >= other;
  9948. }
  9949. /**
  9950. * Checks if `value` is classified as an `arguments` object.
  9951. *
  9952. * @static
  9953. * @memberOf _
  9954. * @category Lang
  9955. * @param {*} value The value to check.
  9956. * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
  9957. * @example
  9958. *
  9959. * _.isArguments(function() { return arguments; }());
  9960. * // => true
  9961. *
  9962. * _.isArguments([1, 2, 3]);
  9963. * // => false
  9964. */
  9965. function isArguments(value) {
  9966. return isObjectLike(value) && isArrayLike(value) &&
  9967. hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');
  9968. }
  9969. /**
  9970. * Checks if `value` is classified as an `Array` object.
  9971. *
  9972. * @static
  9973. * @memberOf _
  9974. * @category Lang
  9975. * @param {*} value The value to check.
  9976. * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
  9977. * @example
  9978. *
  9979. * _.isArray([1, 2, 3]);
  9980. * // => true
  9981. *
  9982. * _.isArray(function() { return arguments; }());
  9983. * // => false
  9984. */
  9985. var isArray = nativeIsArray || function(value) {
  9986. return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;
  9987. };
  9988. /**
  9989. * Checks if `value` is classified as a boolean primitive or object.
  9990. *
  9991. * @static
  9992. * @memberOf _
  9993. * @category Lang
  9994. * @param {*} value The value to check.
  9995. * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
  9996. * @example
  9997. *
  9998. * _.isBoolean(false);
  9999. * // => true
  10000. *
  10001. * _.isBoolean(null);
  10002. * // => false
  10003. */
  10004. function isBoolean(value) {
  10005. return value === true || value === false || (isObjectLike(value) && objToString.call(value) == boolTag);
  10006. }
  10007. /**
  10008. * Checks if `value` is classified as a `Date` object.
  10009. *
  10010. * @static
  10011. * @memberOf _
  10012. * @category Lang
  10013. * @param {*} value The value to check.
  10014. * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
  10015. * @example
  10016. *
  10017. * _.isDate(new Date);
  10018. * // => true
  10019. *
  10020. * _.isDate('Mon April 23 2012');
  10021. * // => false
  10022. */
  10023. function isDate(value) {
  10024. return isObjectLike(value) && objToString.call(value) == dateTag;
  10025. }
  10026. /**
  10027. * Checks if `value` is a DOM element.
  10028. *
  10029. * @static
  10030. * @memberOf _
  10031. * @category Lang
  10032. * @param {*} value The value to check.
  10033. * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.
  10034. * @example
  10035. *
  10036. * _.isElement(document.body);
  10037. * // => true
  10038. *
  10039. * _.isElement('<body>');
  10040. * // => false
  10041. */
  10042. function isElement(value) {
  10043. return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value);
  10044. }
  10045. /**
  10046. * Checks if `value` is empty. A value is considered empty unless it is an
  10047. * `arguments` object, array, string, or jQuery-like collection with a length
  10048. * greater than `0` or an object with own enumerable properties.
  10049. *
  10050. * @static
  10051. * @memberOf _
  10052. * @category Lang
  10053. * @param {Array|Object|string} value The value to inspect.
  10054. * @returns {boolean} Returns `true` if `value` is empty, else `false`.
  10055. * @example
  10056. *
  10057. * _.isEmpty(null);
  10058. * // => true
  10059. *
  10060. * _.isEmpty(true);
  10061. * // => true
  10062. *
  10063. * _.isEmpty(1);
  10064. * // => true
  10065. *
  10066. * _.isEmpty([1, 2, 3]);
  10067. * // => false
  10068. *
  10069. * _.isEmpty({ 'a': 1 });
  10070. * // => false
  10071. */
  10072. function isEmpty(value) {
  10073. if (value == null) {
  10074. return true;
  10075. }
  10076. if (isArrayLike(value) && (isArray(value) || isString(value) || isArguments(value) ||
  10077. (isObjectLike(value) && isFunction(value.splice)))) {
  10078. return !value.length;
  10079. }
  10080. return !keys(value).length;
  10081. }
  10082. /**
  10083. * Performs a deep comparison between two values to determine if they are
  10084. * equivalent. If `customizer` is provided it is invoked to compare values.
  10085. * If `customizer` returns `undefined` comparisons are handled by the method
  10086. * instead. The `customizer` is bound to `thisArg` and invoked with three
  10087. * arguments: (value, other [, index|key]).
  10088. *
  10089. * **Note:** This method supports comparing arrays, booleans, `Date` objects,
  10090. * numbers, `Object` objects, regexes, and strings. Objects are compared by
  10091. * their own, not inherited, enumerable properties. Functions and DOM nodes
  10092. * are **not** supported. Provide a customizer function to extend support
  10093. * for comparing other values.
  10094. *
  10095. * @static
  10096. * @memberOf _
  10097. * @alias eq
  10098. * @category Lang
  10099. * @param {*} value The value to compare.
  10100. * @param {*} other The other value to compare.
  10101. * @param {Function} [customizer] The function to customize value comparisons.
  10102. * @param {*} [thisArg] The `this` binding of `customizer`.
  10103. * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
  10104. * @example
  10105. *
  10106. * var object = { 'user': 'fred' };
  10107. * var other = { 'user': 'fred' };
  10108. *
  10109. * object == other;
  10110. * // => false
  10111. *
  10112. * _.isEqual(object, other);
  10113. * // => true
  10114. *
  10115. * // using a customizer callback
  10116. * var array = ['hello', 'goodbye'];
  10117. * var other = ['hi', 'goodbye'];
  10118. *
  10119. * _.isEqual(array, other, function(value, other) {
  10120. * if (_.every([value, other], RegExp.prototype.test, /^h(?:i|ello)$/)) {
  10121. * return true;
  10122. * }
  10123. * });
  10124. * // => true
  10125. */
  10126. function isEqual(value, other, customizer, thisArg) {
  10127. customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined;
  10128. var result = customizer ? customizer(value, other) : undefined;
  10129. return result === undefined ? baseIsEqual(value, other, customizer) : !!result;
  10130. }
  10131. /**
  10132. * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,
  10133. * `SyntaxError`, `TypeError`, or `URIError` object.
  10134. *
  10135. * @static
  10136. * @memberOf _
  10137. * @category Lang
  10138. * @param {*} value The value to check.
  10139. * @returns {boolean} Returns `true` if `value` is an error object, else `false`.
  10140. * @example
  10141. *
  10142. * _.isError(new Error);
  10143. * // => true
  10144. *
  10145. * _.isError(Error);
  10146. * // => false
  10147. */
  10148. function isError(value) {
  10149. return isObjectLike(value) && typeof value.message == 'string' && objToString.call(value) == errorTag;
  10150. }
  10151. /**
  10152. * Checks if `value` is a finite primitive number.
  10153. *
  10154. * **Note:** This method is based on [`Number.isFinite`](http://ecma-international.org/ecma-262/6.0/#sec-number.isfinite).
  10155. *
  10156. * @static
  10157. * @memberOf _
  10158. * @category Lang
  10159. * @param {*} value The value to check.
  10160. * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.
  10161. * @example
  10162. *
  10163. * _.isFinite(10);
  10164. * // => true
  10165. *
  10166. * _.isFinite('10');
  10167. * // => false
  10168. *
  10169. * _.isFinite(true);
  10170. * // => false
  10171. *
  10172. * _.isFinite(Object(10));
  10173. * // => false
  10174. *
  10175. * _.isFinite(Infinity);
  10176. * // => false
  10177. */
  10178. function isFinite(value) {
  10179. return typeof value == 'number' && nativeIsFinite(value);
  10180. }
  10181. /**
  10182. * Checks if `value` is classified as a `Function` object.
  10183. *
  10184. * @static
  10185. * @memberOf _
  10186. * @category Lang
  10187. * @param {*} value The value to check.
  10188. * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
  10189. * @example
  10190. *
  10191. * _.isFunction(_);
  10192. * // => true
  10193. *
  10194. * _.isFunction(/abc/);
  10195. * // => false
  10196. */
  10197. function isFunction(value) {
  10198. // The use of `Object#toString` avoids issues with the `typeof` operator
  10199. // in older versions of Chrome and Safari which return 'function' for regexes
  10200. // and Safari 8 equivalents which return 'object' for typed array constructors.
  10201. return isObject(value) && objToString.call(value) == funcTag;
  10202. }
  10203. /**
  10204. * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
  10205. * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
  10206. *
  10207. * @static
  10208. * @memberOf _
  10209. * @category Lang
  10210. * @param {*} value The value to check.
  10211. * @returns {boolean} Returns `true` if `value` is an object, else `false`.
  10212. * @example
  10213. *
  10214. * _.isObject({});
  10215. * // => true
  10216. *
  10217. * _.isObject([1, 2, 3]);
  10218. * // => true
  10219. *
  10220. * _.isObject(1);
  10221. * // => false
  10222. */
  10223. function isObject(value) {
  10224. // Avoid a V8 JIT bug in Chrome 19-20.
  10225. // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
  10226. var type = typeof value;
  10227. return !!value && (type == 'object' || type == 'function');
  10228. }
  10229. /**
  10230. * Performs a deep comparison between `object` and `source` to determine if
  10231. * `object` contains equivalent property values. If `customizer` is provided
  10232. * it is invoked to compare values. If `customizer` returns `undefined`
  10233. * comparisons are handled by the method instead. The `customizer` is bound
  10234. * to `thisArg` and invoked with three arguments: (value, other, index|key).
  10235. *
  10236. * **Note:** This method supports comparing properties of arrays, booleans,
  10237. * `Date` objects, numbers, `Object` objects, regexes, and strings. Functions
  10238. * and DOM nodes are **not** supported. Provide a customizer function to extend
  10239. * support for comparing other values.
  10240. *
  10241. * @static
  10242. * @memberOf _
  10243. * @category Lang
  10244. * @param {Object} object The object to inspect.
  10245. * @param {Object} source The object of property values to match.
  10246. * @param {Function} [customizer] The function to customize value comparisons.
  10247. * @param {*} [thisArg] The `this` binding of `customizer`.
  10248. * @returns {boolean} Returns `true` if `object` is a match, else `false`.
  10249. * @example
  10250. *
  10251. * var object = { 'user': 'fred', 'age': 40 };
  10252. *
  10253. * _.isMatch(object, { 'age': 40 });
  10254. * // => true
  10255. *
  10256. * _.isMatch(object, { 'age': 36 });
  10257. * // => false
  10258. *
  10259. * // using a customizer callback
  10260. * var object = { 'greeting': 'hello' };
  10261. * var source = { 'greeting': 'hi' };
  10262. *
  10263. * _.isMatch(object, source, function(value, other) {
  10264. * return _.every([value, other], RegExp.prototype.test, /^h(?:i|ello)$/) || undefined;
  10265. * });
  10266. * // => true
  10267. */
  10268. function isMatch(object, source, customizer, thisArg) {
  10269. customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined;
  10270. return baseIsMatch(object, getMatchData(source), customizer);
  10271. }
  10272. /**
  10273. * Checks if `value` is `NaN`.
  10274. *
  10275. * **Note:** This method is not the same as [`isNaN`](https://es5.github.io/#x15.1.2.4)
  10276. * which returns `true` for `undefined` and other non-numeric values.
  10277. *
  10278. * @static
  10279. * @memberOf _
  10280. * @category Lang
  10281. * @param {*} value The value to check.
  10282. * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
  10283. * @example
  10284. *
  10285. * _.isNaN(NaN);
  10286. * // => true
  10287. *
  10288. * _.isNaN(new Number(NaN));
  10289. * // => true
  10290. *
  10291. * isNaN(undefined);
  10292. * // => true
  10293. *
  10294. * _.isNaN(undefined);
  10295. * // => false
  10296. */
  10297. function isNaN(value) {
  10298. // An `NaN` primitive is the only value that is not equal to itself.
  10299. // Perform the `toStringTag` check first to avoid errors with some host objects in IE.
  10300. return isNumber(value) && value != +value;
  10301. }
  10302. /**
  10303. * Checks if `value` is a native function.
  10304. *
  10305. * @static
  10306. * @memberOf _
  10307. * @category Lang
  10308. * @param {*} value The value to check.
  10309. * @returns {boolean} Returns `true` if `value` is a native function, else `false`.
  10310. * @example
  10311. *
  10312. * _.isNative(Array.prototype.push);
  10313. * // => true
  10314. *
  10315. * _.isNative(_);
  10316. * // => false
  10317. */
  10318. function isNative(value) {
  10319. if (value == null) {
  10320. return false;
  10321. }
  10322. if (isFunction(value)) {
  10323. return reIsNative.test(fnToString.call(value));
  10324. }
  10325. return isObjectLike(value) && reIsHostCtor.test(value);
  10326. }
  10327. /**
  10328. * Checks if `value` is `null`.
  10329. *
  10330. * @static
  10331. * @memberOf _
  10332. * @category Lang
  10333. * @param {*} value The value to check.
  10334. * @returns {boolean} Returns `true` if `value` is `null`, else `false`.
  10335. * @example
  10336. *
  10337. * _.isNull(null);
  10338. * // => true
  10339. *
  10340. * _.isNull(void 0);
  10341. * // => false
  10342. */
  10343. function isNull(value) {
  10344. return value === null;
  10345. }
  10346. /**
  10347. * Checks if `value` is classified as a `Number` primitive or object.
  10348. *
  10349. * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are classified
  10350. * as numbers, use the `_.isFinite` method.
  10351. *
  10352. * @static
  10353. * @memberOf _
  10354. * @category Lang
  10355. * @param {*} value The value to check.
  10356. * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
  10357. * @example
  10358. *
  10359. * _.isNumber(8.4);
  10360. * // => true
  10361. *
  10362. * _.isNumber(NaN);
  10363. * // => true
  10364. *
  10365. * _.isNumber('8.4');
  10366. * // => false
  10367. */
  10368. function isNumber(value) {
  10369. return typeof value == 'number' || (isObjectLike(value) && objToString.call(value) == numberTag);
  10370. }
  10371. /**
  10372. * Checks if `value` is a plain object, that is, an object created by the
  10373. * `Object` constructor or one with a `[[Prototype]]` of `null`.
  10374. *
  10375. * **Note:** This method assumes objects created by the `Object` constructor
  10376. * have no inherited enumerable properties.
  10377. *
  10378. * @static
  10379. * @memberOf _
  10380. * @category Lang
  10381. * @param {*} value The value to check.
  10382. * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
  10383. * @example
  10384. *
  10385. * function Foo() {
  10386. * this.a = 1;
  10387. * }
  10388. *
  10389. * _.isPlainObject(new Foo);
  10390. * // => false
  10391. *
  10392. * _.isPlainObject([1, 2, 3]);
  10393. * // => false
  10394. *
  10395. * _.isPlainObject({ 'x': 0, 'y': 0 });
  10396. * // => true
  10397. *
  10398. * _.isPlainObject(Object.create(null));
  10399. * // => true
  10400. */
  10401. function isPlainObject(value) {
  10402. var Ctor;
  10403. // Exit early for non `Object` objects.
  10404. if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isArguments(value)) ||
  10405. (!hasOwnProperty.call(value, 'constructor') && (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) {
  10406. return false;
  10407. }
  10408. // IE < 9 iterates inherited properties before own properties. If the first
  10409. // iterated property is an object's own property then there are no inherited
  10410. // enumerable properties.
  10411. var result;
  10412. // In most environments an object's own properties are iterated before
  10413. // its inherited properties. If the last iterated property is an object's
  10414. // own property then there are no inherited enumerable properties.
  10415. baseForIn(value, function(subValue, key) {
  10416. result = key;
  10417. });
  10418. return result === undefined || hasOwnProperty.call(value, result);
  10419. }
  10420. /**
  10421. * Checks if `value` is classified as a `RegExp` object.
  10422. *
  10423. * @static
  10424. * @memberOf _
  10425. * @category Lang
  10426. * @param {*} value The value to check.
  10427. * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
  10428. * @example
  10429. *
  10430. * _.isRegExp(/abc/);
  10431. * // => true
  10432. *
  10433. * _.isRegExp('/abc/');
  10434. * // => false
  10435. */
  10436. function isRegExp(value) {
  10437. return isObject(value) && objToString.call(value) == regexpTag;
  10438. }
  10439. /**
  10440. * Checks if `value` is classified as a `String` primitive or object.
  10441. *
  10442. * @static
  10443. * @memberOf _
  10444. * @category Lang
  10445. * @param {*} value The value to check.
  10446. * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
  10447. * @example
  10448. *
  10449. * _.isString('abc');
  10450. * // => true
  10451. *
  10452. * _.isString(1);
  10453. * // => false
  10454. */
  10455. function isString(value) {
  10456. return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag);
  10457. }
  10458. /**
  10459. * Checks if `value` is classified as a typed array.
  10460. *
  10461. * @static
  10462. * @memberOf _
  10463. * @category Lang
  10464. * @param {*} value The value to check.
  10465. * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
  10466. * @example
  10467. *
  10468. * _.isTypedArray(new Uint8Array);
  10469. * // => true
  10470. *
  10471. * _.isTypedArray([]);
  10472. * // => false
  10473. */
  10474. function isTypedArray(value) {
  10475. return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];
  10476. }
  10477. /**
  10478. * Checks if `value` is `undefined`.
  10479. *
  10480. * @static
  10481. * @memberOf _
  10482. * @category Lang
  10483. * @param {*} value The value to check.
  10484. * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.
  10485. * @example
  10486. *
  10487. * _.isUndefined(void 0);
  10488. * // => true
  10489. *
  10490. * _.isUndefined(null);
  10491. * // => false
  10492. */
  10493. function isUndefined(value) {
  10494. return value === undefined;
  10495. }
  10496. /**
  10497. * Checks if `value` is less than `other`.
  10498. *
  10499. * @static
  10500. * @memberOf _
  10501. * @category Lang
  10502. * @param {*} value The value to compare.
  10503. * @param {*} other The other value to compare.
  10504. * @returns {boolean} Returns `true` if `value` is less than `other`, else `false`.
  10505. * @example
  10506. *
  10507. * _.lt(1, 3);
  10508. * // => true
  10509. *
  10510. * _.lt(3, 3);
  10511. * // => false
  10512. *
  10513. * _.lt(3, 1);
  10514. * // => false
  10515. */
  10516. function lt(value, other) {
  10517. return value < other;
  10518. }
  10519. /**
  10520. * Checks if `value` is less than or equal to `other`.
  10521. *
  10522. * @static
  10523. * @memberOf _
  10524. * @category Lang
  10525. * @param {*} value The value to compare.
  10526. * @param {*} other The other value to compare.
  10527. * @returns {boolean} Returns `true` if `value` is less than or equal to `other`, else `false`.
  10528. * @example
  10529. *
  10530. * _.lte(1, 3);
  10531. * // => true
  10532. *
  10533. * _.lte(3, 3);
  10534. * // => true
  10535. *
  10536. * _.lte(3, 1);
  10537. * // => false
  10538. */
  10539. function lte(value, other) {
  10540. return value <= other;
  10541. }
  10542. /**
  10543. * Converts `value` to an array.
  10544. *
  10545. * @static
  10546. * @memberOf _
  10547. * @category Lang
  10548. * @param {*} value The value to convert.
  10549. * @returns {Array} Returns the converted array.
  10550. * @example
  10551. *
  10552. * (function() {
  10553. * return _.toArray(arguments).slice(1);
  10554. * }(1, 2, 3));
  10555. * // => [2, 3]
  10556. */
  10557. function toArray(value) {
  10558. var length = value ? getLength(value) : 0;
  10559. if (!isLength(length)) {
  10560. return values(value);
  10561. }
  10562. if (!length) {
  10563. return [];
  10564. }
  10565. return arrayCopy(value);
  10566. }
  10567. /**
  10568. * Converts `value` to a plain object flattening inherited enumerable
  10569. * properties of `value` to own properties of the plain object.
  10570. *
  10571. * @static
  10572. * @memberOf _
  10573. * @category Lang
  10574. * @param {*} value The value to convert.
  10575. * @returns {Object} Returns the converted plain object.
  10576. * @example
  10577. *
  10578. * function Foo() {
  10579. * this.b = 2;
  10580. * }
  10581. *
  10582. * Foo.prototype.c = 3;
  10583. *
  10584. * _.assign({ 'a': 1 }, new Foo);
  10585. * // => { 'a': 1, 'b': 2 }
  10586. *
  10587. * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));
  10588. * // => { 'a': 1, 'b': 2, 'c': 3 }
  10589. */
  10590. function toPlainObject(value) {
  10591. return baseCopy(value, keysIn(value));
  10592. }
  10593. /*------------------------------------------------------------------------*/
  10594. /**
  10595. * Recursively merges own enumerable properties of the source object(s), that
  10596. * don't resolve to `undefined` into the destination object. Subsequent sources
  10597. * overwrite property assignments of previous sources. If `customizer` is
  10598. * provided it is invoked to produce the merged values of the destination and
  10599. * source properties. If `customizer` returns `undefined` merging is handled
  10600. * by the method instead. The `customizer` is bound to `thisArg` and invoked
  10601. * with five arguments: (objectValue, sourceValue, key, object, source).
  10602. *
  10603. * @static
  10604. * @memberOf _
  10605. * @category Object
  10606. * @param {Object} object The destination object.
  10607. * @param {...Object} [sources] The source objects.
  10608. * @param {Function} [customizer] The function to customize assigned values.
  10609. * @param {*} [thisArg] The `this` binding of `customizer`.
  10610. * @returns {Object} Returns `object`.
  10611. * @example
  10612. *
  10613. * var users = {
  10614. * 'data': [{ 'user': 'barney' }, { 'user': 'fred' }]
  10615. * };
  10616. *
  10617. * var ages = {
  10618. * 'data': [{ 'age': 36 }, { 'age': 40 }]
  10619. * };
  10620. *
  10621. * _.merge(users, ages);
  10622. * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] }
  10623. *
  10624. * // using a customizer callback
  10625. * var object = {
  10626. * 'fruits': ['apple'],
  10627. * 'vegetables': ['beet']
  10628. * };
  10629. *
  10630. * var other = {
  10631. * 'fruits': ['banana'],
  10632. * 'vegetables': ['carrot']
  10633. * };
  10634. *
  10635. * _.merge(object, other, function(a, b) {
  10636. * if (_.isArray(a)) {
  10637. * return a.concat(b);
  10638. * }
  10639. * });
  10640. * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] }
  10641. */
  10642. var merge = createAssigner(baseMerge);
  10643. /**
  10644. * Assigns own enumerable properties of source object(s) to the destination
  10645. * object. Subsequent sources overwrite property assignments of previous sources.
  10646. * If `customizer` is provided it is invoked to produce the assigned values.
  10647. * The `customizer` is bound to `thisArg` and invoked with five arguments:
  10648. * (objectValue, sourceValue, key, object, source).
  10649. *
  10650. * **Note:** This method mutates `object` and is based on
  10651. * [`Object.assign`](http://ecma-international.org/ecma-262/6.0/#sec-object.assign).
  10652. *
  10653. * @static
  10654. * @memberOf _
  10655. * @alias extend
  10656. * @category Object
  10657. * @param {Object} object The destination object.
  10658. * @param {...Object} [sources] The source objects.
  10659. * @param {Function} [customizer] The function to customize assigned values.
  10660. * @param {*} [thisArg] The `this` binding of `customizer`.
  10661. * @returns {Object} Returns `object`.
  10662. * @example
  10663. *
  10664. * _.assign({ 'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' });
  10665. * // => { 'user': 'fred', 'age': 40 }
  10666. *
  10667. * // using a customizer callback
  10668. * var defaults = _.partialRight(_.assign, function(value, other) {
  10669. * return _.isUndefined(value) ? other : value;
  10670. * });
  10671. *
  10672. * defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });
  10673. * // => { 'user': 'barney', 'age': 36 }
  10674. */
  10675. var assign = createAssigner(function(object, source, customizer) {
  10676. return customizer
  10677. ? assignWith(object, source, customizer)
  10678. : baseAssign(object, source);
  10679. });
  10680. /**
  10681. * Creates an object that inherits from the given `prototype` object. If a
  10682. * `properties` object is provided its own enumerable properties are assigned
  10683. * to the created object.
  10684. *
  10685. * @static
  10686. * @memberOf _
  10687. * @category Object
  10688. * @param {Object} prototype The object to inherit from.
  10689. * @param {Object} [properties] The properties to assign to the object.
  10690. * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
  10691. * @returns {Object} Returns the new object.
  10692. * @example
  10693. *
  10694. * function Shape() {
  10695. * this.x = 0;
  10696. * this.y = 0;
  10697. * }
  10698. *
  10699. * function Circle() {
  10700. * Shape.call(this);
  10701. * }
  10702. *
  10703. * Circle.prototype = _.create(Shape.prototype, {
  10704. * 'constructor': Circle
  10705. * });
  10706. *
  10707. * var circle = new Circle;
  10708. * circle instanceof Circle;
  10709. * // => true
  10710. *
  10711. * circle instanceof Shape;
  10712. * // => true
  10713. */
  10714. function create(prototype, properties, guard) {
  10715. var result = baseCreate(prototype);
  10716. if (guard && isIterateeCall(prototype, properties, guard)) {
  10717. properties = undefined;
  10718. }
  10719. return properties ? baseAssign(result, properties) : result;
  10720. }
  10721. /**
  10722. * Assigns own enumerable properties of source object(s) to the destination
  10723. * object for all destination properties that resolve to `undefined`. Once a
  10724. * property is set, additional values of the same property are ignored.
  10725. *
  10726. * **Note:** This method mutates `object`.
  10727. *
  10728. * @static
  10729. * @memberOf _
  10730. * @category Object
  10731. * @param {Object} object The destination object.
  10732. * @param {...Object} [sources] The source objects.
  10733. * @returns {Object} Returns `object`.
  10734. * @example
  10735. *
  10736. * _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });
  10737. * // => { 'user': 'barney', 'age': 36 }
  10738. */
  10739. var defaults = createDefaults(assign, assignDefaults);
  10740. /**
  10741. * This method is like `_.defaults` except that it recursively assigns
  10742. * default properties.
  10743. *
  10744. * **Note:** This method mutates `object`.
  10745. *
  10746. * @static
  10747. * @memberOf _
  10748. * @category Object
  10749. * @param {Object} object The destination object.
  10750. * @param {...Object} [sources] The source objects.
  10751. * @returns {Object} Returns `object`.
  10752. * @example
  10753. *
  10754. * _.defaultsDeep({ 'user': { 'name': 'barney' } }, { 'user': { 'name': 'fred', 'age': 36 } });
  10755. * // => { 'user': { 'name': 'barney', 'age': 36 } }
  10756. *
  10757. */
  10758. var defaultsDeep = createDefaults(merge, mergeDefaults);
  10759. /**
  10760. * This method is like `_.find` except that it returns the key of the first
  10761. * element `predicate` returns truthy for instead of the element itself.
  10762. *
  10763. * If a property name is provided for `predicate` the created `_.property`
  10764. * style callback returns the property value of the given element.
  10765. *
  10766. * If a value is also provided for `thisArg` the created `_.matchesProperty`
  10767. * style callback returns `true` for elements that have a matching property
  10768. * value, else `false`.
  10769. *
  10770. * If an object is provided for `predicate` the created `_.matches` style
  10771. * callback returns `true` for elements that have the properties of the given
  10772. * object, else `false`.
  10773. *
  10774. * @static
  10775. * @memberOf _
  10776. * @category Object
  10777. * @param {Object} object The object to search.
  10778. * @param {Function|Object|string} [predicate=_.identity] The function invoked
  10779. * per iteration.
  10780. * @param {*} [thisArg] The `this` binding of `predicate`.
  10781. * @returns {string|undefined} Returns the key of the matched element, else `undefined`.
  10782. * @example
  10783. *
  10784. * var users = {
  10785. * 'barney': { 'age': 36, 'active': true },
  10786. * 'fred': { 'age': 40, 'active': false },
  10787. * 'pebbles': { 'age': 1, 'active': true }
  10788. * };
  10789. *
  10790. * _.findKey(users, function(chr) {
  10791. * return chr.age < 40;
  10792. * });
  10793. * // => 'barney' (iteration order is not guaranteed)
  10794. *
  10795. * // using the `_.matches` callback shorthand
  10796. * _.findKey(users, { 'age': 1, 'active': true });
  10797. * // => 'pebbles'
  10798. *
  10799. * // using the `_.matchesProperty` callback shorthand
  10800. * _.findKey(users, 'active', false);
  10801. * // => 'fred'
  10802. *
  10803. * // using the `_.property` callback shorthand
  10804. * _.findKey(users, 'active');
  10805. * // => 'barney'
  10806. */
  10807. var findKey = createFindKey(baseForOwn);
  10808. /**
  10809. * This method is like `_.findKey` except that it iterates over elements of
  10810. * a collection in the opposite order.
  10811. *
  10812. * If a property name is provided for `predicate` the created `_.property`
  10813. * style callback returns the property value of the given element.
  10814. *
  10815. * If a value is also provided for `thisArg` the created `_.matchesProperty`
  10816. * style callback returns `true` for elements that have a matching property
  10817. * value, else `false`.
  10818. *
  10819. * If an object is provided for `predicate` the created `_.matches` style
  10820. * callback returns `true` for elements that have the properties of the given
  10821. * object, else `false`.
  10822. *
  10823. * @static
  10824. * @memberOf _
  10825. * @category Object
  10826. * @param {Object} object The object to search.
  10827. * @param {Function|Object|string} [predicate=_.identity] The function invoked
  10828. * per iteration.
  10829. * @param {*} [thisArg] The `this` binding of `predicate`.
  10830. * @returns {string|undefined} Returns the key of the matched element, else `undefined`.
  10831. * @example
  10832. *
  10833. * var users = {
  10834. * 'barney': { 'age': 36, 'active': true },
  10835. * 'fred': { 'age': 40, 'active': false },
  10836. * 'pebbles': { 'age': 1, 'active': true }
  10837. * };
  10838. *
  10839. * _.findLastKey(users, function(chr) {
  10840. * return chr.age < 40;
  10841. * });
  10842. * // => returns `pebbles` assuming `_.findKey` returns `barney`
  10843. *
  10844. * // using the `_.matches` callback shorthand
  10845. * _.findLastKey(users, { 'age': 36, 'active': true });
  10846. * // => 'barney'
  10847. *
  10848. * // using the `_.matchesProperty` callback shorthand
  10849. * _.findLastKey(users, 'active', false);
  10850. * // => 'fred'
  10851. *
  10852. * // using the `_.property` callback shorthand
  10853. * _.findLastKey(users, 'active');
  10854. * // => 'pebbles'
  10855. */
  10856. var findLastKey = createFindKey(baseForOwnRight);
  10857. /**
  10858. * Iterates over own and inherited enumerable properties of an object invoking
  10859. * `iteratee` for each property. The `iteratee` is bound to `thisArg` and invoked
  10860. * with three arguments: (value, key, object). Iteratee functions may exit
  10861. * iteration early by explicitly returning `false`.
  10862. *
  10863. * @static
  10864. * @memberOf _
  10865. * @category Object
  10866. * @param {Object} object The object to iterate over.
  10867. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  10868. * @param {*} [thisArg] The `this` binding of `iteratee`.
  10869. * @returns {Object} Returns `object`.
  10870. * @example
  10871. *
  10872. * function Foo() {
  10873. * this.a = 1;
  10874. * this.b = 2;
  10875. * }
  10876. *
  10877. * Foo.prototype.c = 3;
  10878. *
  10879. * _.forIn(new Foo, function(value, key) {
  10880. * console.log(key);
  10881. * });
  10882. * // => logs 'a', 'b', and 'c' (iteration order is not guaranteed)
  10883. */
  10884. var forIn = createForIn(baseFor);
  10885. /**
  10886. * This method is like `_.forIn` except that it iterates over properties of
  10887. * `object` in the opposite order.
  10888. *
  10889. * @static
  10890. * @memberOf _
  10891. * @category Object
  10892. * @param {Object} object The object to iterate over.
  10893. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  10894. * @param {*} [thisArg] The `this` binding of `iteratee`.
  10895. * @returns {Object} Returns `object`.
  10896. * @example
  10897. *
  10898. * function Foo() {
  10899. * this.a = 1;
  10900. * this.b = 2;
  10901. * }
  10902. *
  10903. * Foo.prototype.c = 3;
  10904. *
  10905. * _.forInRight(new Foo, function(value, key) {
  10906. * console.log(key);
  10907. * });
  10908. * // => logs 'c', 'b', and 'a' assuming `_.forIn ` logs 'a', 'b', and 'c'
  10909. */
  10910. var forInRight = createForIn(baseForRight);
  10911. /**
  10912. * Iterates over own enumerable properties of an object invoking `iteratee`
  10913. * for each property. The `iteratee` is bound to `thisArg` and invoked with
  10914. * three arguments: (value, key, object). Iteratee functions may exit iteration
  10915. * early by explicitly returning `false`.
  10916. *
  10917. * @static
  10918. * @memberOf _
  10919. * @category Object
  10920. * @param {Object} object The object to iterate over.
  10921. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  10922. * @param {*} [thisArg] The `this` binding of `iteratee`.
  10923. * @returns {Object} Returns `object`.
  10924. * @example
  10925. *
  10926. * function Foo() {
  10927. * this.a = 1;
  10928. * this.b = 2;
  10929. * }
  10930. *
  10931. * Foo.prototype.c = 3;
  10932. *
  10933. * _.forOwn(new Foo, function(value, key) {
  10934. * console.log(key);
  10935. * });
  10936. * // => logs 'a' and 'b' (iteration order is not guaranteed)
  10937. */
  10938. var forOwn = createForOwn(baseForOwn);
  10939. /**
  10940. * This method is like `_.forOwn` except that it iterates over properties of
  10941. * `object` in the opposite order.
  10942. *
  10943. * @static
  10944. * @memberOf _
  10945. * @category Object
  10946. * @param {Object} object The object to iterate over.
  10947. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  10948. * @param {*} [thisArg] The `this` binding of `iteratee`.
  10949. * @returns {Object} Returns `object`.
  10950. * @example
  10951. *
  10952. * function Foo() {
  10953. * this.a = 1;
  10954. * this.b = 2;
  10955. * }
  10956. *
  10957. * Foo.prototype.c = 3;
  10958. *
  10959. * _.forOwnRight(new Foo, function(value, key) {
  10960. * console.log(key);
  10961. * });
  10962. * // => logs 'b' and 'a' assuming `_.forOwn` logs 'a' and 'b'
  10963. */
  10964. var forOwnRight = createForOwn(baseForOwnRight);
  10965. /**
  10966. * Creates an array of function property names from all enumerable properties,
  10967. * own and inherited, of `object`.
  10968. *
  10969. * @static
  10970. * @memberOf _
  10971. * @alias methods
  10972. * @category Object
  10973. * @param {Object} object The object to inspect.
  10974. * @returns {Array} Returns the new array of property names.
  10975. * @example
  10976. *
  10977. * _.functions(_);
  10978. * // => ['after', 'ary', 'assign', ...]
  10979. */
  10980. function functions(object) {
  10981. return baseFunctions(object, keysIn(object));
  10982. }
  10983. /**
  10984. * Gets the property value at `path` of `object`. If the resolved value is
  10985. * `undefined` the `defaultValue` is used in its place.
  10986. *
  10987. * @static
  10988. * @memberOf _
  10989. * @category Object
  10990. * @param {Object} object The object to query.
  10991. * @param {Array|string} path The path of the property to get.
  10992. * @param {*} [defaultValue] The value returned if the resolved value is `undefined`.
  10993. * @returns {*} Returns the resolved value.
  10994. * @example
  10995. *
  10996. * var object = { 'a': [{ 'b': { 'c': 3 } }] };
  10997. *
  10998. * _.get(object, 'a[0].b.c');
  10999. * // => 3
  11000. *
  11001. * _.get(object, ['a', '0', 'b', 'c']);
  11002. * // => 3
  11003. *
  11004. * _.get(object, 'a.b.c', 'default');
  11005. * // => 'default'
  11006. */
  11007. function get(object, path, defaultValue) {
  11008. var result = object == null ? undefined : baseGet(object, toPath(path), path + '');
  11009. return result === undefined ? defaultValue : result;
  11010. }
  11011. /**
  11012. * Checks if `path` is a direct property.
  11013. *
  11014. * @static
  11015. * @memberOf _
  11016. * @category Object
  11017. * @param {Object} object The object to query.
  11018. * @param {Array|string} path The path to check.
  11019. * @returns {boolean} Returns `true` if `path` is a direct property, else `false`.
  11020. * @example
  11021. *
  11022. * var object = { 'a': { 'b': { 'c': 3 } } };
  11023. *
  11024. * _.has(object, 'a');
  11025. * // => true
  11026. *
  11027. * _.has(object, 'a.b.c');
  11028. * // => true
  11029. *
  11030. * _.has(object, ['a', 'b', 'c']);
  11031. * // => true
  11032. */
  11033. function has(object, path) {
  11034. if (object == null) {
  11035. return false;
  11036. }
  11037. var result = hasOwnProperty.call(object, path);
  11038. if (!result && !isKey(path)) {
  11039. path = toPath(path);
  11040. object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));
  11041. if (object == null) {
  11042. return false;
  11043. }
  11044. path = last(path);
  11045. result = hasOwnProperty.call(object, path);
  11046. }
  11047. return result || (isLength(object.length) && isIndex(path, object.length) &&
  11048. (isArray(object) || isArguments(object)));
  11049. }
  11050. /**
  11051. * Creates an object composed of the inverted keys and values of `object`.
  11052. * If `object` contains duplicate values, subsequent values overwrite property
  11053. * assignments of previous values unless `multiValue` is `true`.
  11054. *
  11055. * @static
  11056. * @memberOf _
  11057. * @category Object
  11058. * @param {Object} object The object to invert.
  11059. * @param {boolean} [multiValue] Allow multiple values per key.
  11060. * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
  11061. * @returns {Object} Returns the new inverted object.
  11062. * @example
  11063. *
  11064. * var object = { 'a': 1, 'b': 2, 'c': 1 };
  11065. *
  11066. * _.invert(object);
  11067. * // => { '1': 'c', '2': 'b' }
  11068. *
  11069. * // with `multiValue`
  11070. * _.invert(object, true);
  11071. * // => { '1': ['a', 'c'], '2': ['b'] }
  11072. */
  11073. function invert(object, multiValue, guard) {
  11074. if (guard && isIterateeCall(object, multiValue, guard)) {
  11075. multiValue = undefined;
  11076. }
  11077. var index = -1,
  11078. props = keys(object),
  11079. length = props.length,
  11080. result = {};
  11081. while (++index < length) {
  11082. var key = props[index],
  11083. value = object[key];
  11084. if (multiValue) {
  11085. if (hasOwnProperty.call(result, value)) {
  11086. result[value].push(key);
  11087. } else {
  11088. result[value] = [key];
  11089. }
  11090. }
  11091. else {
  11092. result[value] = key;
  11093. }
  11094. }
  11095. return result;
  11096. }
  11097. /**
  11098. * Creates an array of the own enumerable property names of `object`.
  11099. *
  11100. * **Note:** Non-object values are coerced to objects. See the
  11101. * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)
  11102. * for more details.
  11103. *
  11104. * @static
  11105. * @memberOf _
  11106. * @category Object
  11107. * @param {Object} object The object to query.
  11108. * @returns {Array} Returns the array of property names.
  11109. * @example
  11110. *
  11111. * function Foo() {
  11112. * this.a = 1;
  11113. * this.b = 2;
  11114. * }
  11115. *
  11116. * Foo.prototype.c = 3;
  11117. *
  11118. * _.keys(new Foo);
  11119. * // => ['a', 'b'] (iteration order is not guaranteed)
  11120. *
  11121. * _.keys('hi');
  11122. * // => ['0', '1']
  11123. */
  11124. var keys = !nativeKeys ? shimKeys : function(object) {
  11125. var Ctor = object == null ? undefined : object.constructor;
  11126. if ((typeof Ctor == 'function' && Ctor.prototype === object) ||
  11127. (typeof object != 'function' && isArrayLike(object))) {
  11128. return shimKeys(object);
  11129. }
  11130. return isObject(object) ? nativeKeys(object) : [];
  11131. };
  11132. /**
  11133. * Creates an array of the own and inherited enumerable property names of `object`.
  11134. *
  11135. * **Note:** Non-object values are coerced to objects.
  11136. *
  11137. * @static
  11138. * @memberOf _
  11139. * @category Object
  11140. * @param {Object} object The object to query.
  11141. * @returns {Array} Returns the array of property names.
  11142. * @example
  11143. *
  11144. * function Foo() {
  11145. * this.a = 1;
  11146. * this.b = 2;
  11147. * }
  11148. *
  11149. * Foo.prototype.c = 3;
  11150. *
  11151. * _.keysIn(new Foo);
  11152. * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
  11153. */
  11154. function keysIn(object) {
  11155. if (object == null) {
  11156. return [];
  11157. }
  11158. if (!isObject(object)) {
  11159. object = Object(object);
  11160. }
  11161. var length = object.length;
  11162. length = (length && isLength(length) &&
  11163. (isArray(object) || isArguments(object)) && length) || 0;
  11164. var Ctor = object.constructor,
  11165. index = -1,
  11166. isProto = typeof Ctor == 'function' && Ctor.prototype === object,
  11167. result = Array(length),
  11168. skipIndexes = length > 0;
  11169. while (++index < length) {
  11170. result[index] = (index + '');
  11171. }
  11172. for (var key in object) {
  11173. if (!(skipIndexes && isIndex(key, length)) &&
  11174. !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
  11175. result.push(key);
  11176. }
  11177. }
  11178. return result;
  11179. }
  11180. /**
  11181. * The opposite of `_.mapValues`; this method creates an object with the
  11182. * same values as `object` and keys generated by running each own enumerable
  11183. * property of `object` through `iteratee`.
  11184. *
  11185. * @static
  11186. * @memberOf _
  11187. * @category Object
  11188. * @param {Object} object The object to iterate over.
  11189. * @param {Function|Object|string} [iteratee=_.identity] The function invoked
  11190. * per iteration.
  11191. * @param {*} [thisArg] The `this` binding of `iteratee`.
  11192. * @returns {Object} Returns the new mapped object.
  11193. * @example
  11194. *
  11195. * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {
  11196. * return key + value;
  11197. * });
  11198. * // => { 'a1': 1, 'b2': 2 }
  11199. */
  11200. var mapKeys = createObjectMapper(true);
  11201. /**
  11202. * Creates an object with the same keys as `object` and values generated by
  11203. * running each own enumerable property of `object` through `iteratee`. The
  11204. * iteratee function is bound to `thisArg` and invoked with three arguments:
  11205. * (value, key, object).
  11206. *
  11207. * If a property name is provided for `iteratee` the created `_.property`
  11208. * style callback returns the property value of the given element.
  11209. *
  11210. * If a value is also provided for `thisArg` the created `_.matchesProperty`
  11211. * style callback returns `true` for elements that have a matching property
  11212. * value, else `false`.
  11213. *
  11214. * If an object is provided for `iteratee` the created `_.matches` style
  11215. * callback returns `true` for elements that have the properties of the given
  11216. * object, else `false`.
  11217. *
  11218. * @static
  11219. * @memberOf _
  11220. * @category Object
  11221. * @param {Object} object The object to iterate over.
  11222. * @param {Function|Object|string} [iteratee=_.identity] The function invoked
  11223. * per iteration.
  11224. * @param {*} [thisArg] The `this` binding of `iteratee`.
  11225. * @returns {Object} Returns the new mapped object.
  11226. * @example
  11227. *
  11228. * _.mapValues({ 'a': 1, 'b': 2 }, function(n) {
  11229. * return n * 3;
  11230. * });
  11231. * // => { 'a': 3, 'b': 6 }
  11232. *
  11233. * var users = {
  11234. * 'fred': { 'user': 'fred', 'age': 40 },
  11235. * 'pebbles': { 'user': 'pebbles', 'age': 1 }
  11236. * };
  11237. *
  11238. * // using the `_.property` callback shorthand
  11239. * _.mapValues(users, 'age');
  11240. * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
  11241. */
  11242. var mapValues = createObjectMapper();
  11243. /**
  11244. * The opposite of `_.pick`; this method creates an object composed of the
  11245. * own and inherited enumerable properties of `object` that are not omitted.
  11246. *
  11247. * @static
  11248. * @memberOf _
  11249. * @category Object
  11250. * @param {Object} object The source object.
  11251. * @param {Function|...(string|string[])} [predicate] The function invoked per
  11252. * iteration or property names to omit, specified as individual property
  11253. * names or arrays of property names.
  11254. * @param {*} [thisArg] The `this` binding of `predicate`.
  11255. * @returns {Object} Returns the new object.
  11256. * @example
  11257. *
  11258. * var object = { 'user': 'fred', 'age': 40 };
  11259. *
  11260. * _.omit(object, 'age');
  11261. * // => { 'user': 'fred' }
  11262. *
  11263. * _.omit(object, _.isNumber);
  11264. * // => { 'user': 'fred' }
  11265. */
  11266. var omit = restParam(function(object, props) {
  11267. if (object == null) {
  11268. return {};
  11269. }
  11270. if (typeof props[0] != 'function') {
  11271. var props = arrayMap(baseFlatten(props), String);
  11272. return pickByArray(object, baseDifference(keysIn(object), props));
  11273. }
  11274. var predicate = bindCallback(props[0], props[1], 3);
  11275. return pickByCallback(object, function(value, key, object) {
  11276. return !predicate(value, key, object);
  11277. });
  11278. });
  11279. /**
  11280. * Creates a two dimensional array of the key-value pairs for `object`,
  11281. * e.g. `[[key1, value1], [key2, value2]]`.
  11282. *
  11283. * @static
  11284. * @memberOf _
  11285. * @category Object
  11286. * @param {Object} object The object to query.
  11287. * @returns {Array} Returns the new array of key-value pairs.
  11288. * @example
  11289. *
  11290. * _.pairs({ 'barney': 36, 'fred': 40 });
  11291. * // => [['barney', 36], ['fred', 40]] (iteration order is not guaranteed)
  11292. */
  11293. function pairs(object) {
  11294. object = toObject(object);
  11295. var index = -1,
  11296. props = keys(object),
  11297. length = props.length,
  11298. result = Array(length);
  11299. while (++index < length) {
  11300. var key = props[index];
  11301. result[index] = [key, object[key]];
  11302. }
  11303. return result;
  11304. }
  11305. /**
  11306. * Creates an object composed of the picked `object` properties. Property
  11307. * names may be specified as individual arguments or as arrays of property
  11308. * names. If `predicate` is provided it is invoked for each property of `object`
  11309. * picking the properties `predicate` returns truthy for. The predicate is
  11310. * bound to `thisArg` and invoked with three arguments: (value, key, object).
  11311. *
  11312. * @static
  11313. * @memberOf _
  11314. * @category Object
  11315. * @param {Object} object The source object.
  11316. * @param {Function|...(string|string[])} [predicate] The function invoked per
  11317. * iteration or property names to pick, specified as individual property
  11318. * names or arrays of property names.
  11319. * @param {*} [thisArg] The `this` binding of `predicate`.
  11320. * @returns {Object} Returns the new object.
  11321. * @example
  11322. *
  11323. * var object = { 'user': 'fred', 'age': 40 };
  11324. *
  11325. * _.pick(object, 'user');
  11326. * // => { 'user': 'fred' }
  11327. *
  11328. * _.pick(object, _.isString);
  11329. * // => { 'user': 'fred' }
  11330. */
  11331. var pick = restParam(function(object, props) {
  11332. if (object == null) {
  11333. return {};
  11334. }
  11335. return typeof props[0] == 'function'
  11336. ? pickByCallback(object, bindCallback(props[0], props[1], 3))
  11337. : pickByArray(object, baseFlatten(props));
  11338. });
  11339. /**
  11340. * This method is like `_.get` except that if the resolved value is a function
  11341. * it is invoked with the `this` binding of its parent object and its result
  11342. * is returned.
  11343. *
  11344. * @static
  11345. * @memberOf _
  11346. * @category Object
  11347. * @param {Object} object The object to query.
  11348. * @param {Array|string} path The path of the property to resolve.
  11349. * @param {*} [defaultValue] The value returned if the resolved value is `undefined`.
  11350. * @returns {*} Returns the resolved value.
  11351. * @example
  11352. *
  11353. * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };
  11354. *
  11355. * _.result(object, 'a[0].b.c1');
  11356. * // => 3
  11357. *
  11358. * _.result(object, 'a[0].b.c2');
  11359. * // => 4
  11360. *
  11361. * _.result(object, 'a.b.c', 'default');
  11362. * // => 'default'
  11363. *
  11364. * _.result(object, 'a.b.c', _.constant('default'));
  11365. * // => 'default'
  11366. */
  11367. function result(object, path, defaultValue) {
  11368. var result = object == null ? undefined : object[path];
  11369. if (result === undefined) {
  11370. if (object != null && !isKey(path, object)) {
  11371. path = toPath(path);
  11372. object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));
  11373. result = object == null ? undefined : object[last(path)];
  11374. }
  11375. result = result === undefined ? defaultValue : result;
  11376. }
  11377. return isFunction(result) ? result.call(object) : result;
  11378. }
  11379. /**
  11380. * Sets the property value of `path` on `object`. If a portion of `path`
  11381. * does not exist it is created.
  11382. *
  11383. * @static
  11384. * @memberOf _
  11385. * @category Object
  11386. * @param {Object} object The object to augment.
  11387. * @param {Array|string} path The path of the property to set.
  11388. * @param {*} value The value to set.
  11389. * @returns {Object} Returns `object`.
  11390. * @example
  11391. *
  11392. * var object = { 'a': [{ 'b': { 'c': 3 } }] };
  11393. *
  11394. * _.set(object, 'a[0].b.c', 4);
  11395. * console.log(object.a[0].b.c);
  11396. * // => 4
  11397. *
  11398. * _.set(object, 'x[0].y.z', 5);
  11399. * console.log(object.x[0].y.z);
  11400. * // => 5
  11401. */
  11402. function set(object, path, value) {
  11403. if (object == null) {
  11404. return object;
  11405. }
  11406. var pathKey = (path + '');
  11407. path = (object[pathKey] != null || isKey(path, object)) ? [pathKey] : toPath(path);
  11408. var index = -1,
  11409. length = path.length,
  11410. lastIndex = length - 1,
  11411. nested = object;
  11412. while (nested != null && ++index < length) {
  11413. var key = path[index];
  11414. if (isObject(nested)) {
  11415. if (index == lastIndex) {
  11416. nested[key] = value;
  11417. } else if (nested[key] == null) {
  11418. nested[key] = isIndex(path[index + 1]) ? [] : {};
  11419. }
  11420. }
  11421. nested = nested[key];
  11422. }
  11423. return object;
  11424. }
  11425. /**
  11426. * An alternative to `_.reduce`; this method transforms `object` to a new
  11427. * `accumulator` object which is the result of running each of its own enumerable
  11428. * properties through `iteratee`, with each invocation potentially mutating
  11429. * the `accumulator` object. The `iteratee` is bound to `thisArg` and invoked
  11430. * with four arguments: (accumulator, value, key, object). Iteratee functions
  11431. * may exit iteration early by explicitly returning `false`.
  11432. *
  11433. * @static
  11434. * @memberOf _
  11435. * @category Object
  11436. * @param {Array|Object} object The object to iterate over.
  11437. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  11438. * @param {*} [accumulator] The custom accumulator value.
  11439. * @param {*} [thisArg] The `this` binding of `iteratee`.
  11440. * @returns {*} Returns the accumulated value.
  11441. * @example
  11442. *
  11443. * _.transform([2, 3, 4], function(result, n) {
  11444. * result.push(n *= n);
  11445. * return n % 2 == 0;
  11446. * });
  11447. * // => [4, 9]
  11448. *
  11449. * _.transform({ 'a': 1, 'b': 2 }, function(result, n, key) {
  11450. * result[key] = n * 3;
  11451. * });
  11452. * // => { 'a': 3, 'b': 6 }
  11453. */
  11454. function transform(object, iteratee, accumulator, thisArg) {
  11455. var isArr = isArray(object) || isTypedArray(object);
  11456. iteratee = getCallback(iteratee, thisArg, 4);
  11457. if (accumulator == null) {
  11458. if (isArr || isObject(object)) {
  11459. var Ctor = object.constructor;
  11460. if (isArr) {
  11461. accumulator = isArray(object) ? new Ctor : [];
  11462. } else {
  11463. accumulator = baseCreate(isFunction(Ctor) ? Ctor.prototype : undefined);
  11464. }
  11465. } else {
  11466. accumulator = {};
  11467. }
  11468. }
  11469. (isArr ? arrayEach : baseForOwn)(object, function(value, index, object) {
  11470. return iteratee(accumulator, value, index, object);
  11471. });
  11472. return accumulator;
  11473. }
  11474. /**
  11475. * Creates an array of the own enumerable property values of `object`.
  11476. *
  11477. * **Note:** Non-object values are coerced to objects.
  11478. *
  11479. * @static
  11480. * @memberOf _
  11481. * @category Object
  11482. * @param {Object} object The object to query.
  11483. * @returns {Array} Returns the array of property values.
  11484. * @example
  11485. *
  11486. * function Foo() {
  11487. * this.a = 1;
  11488. * this.b = 2;
  11489. * }
  11490. *
  11491. * Foo.prototype.c = 3;
  11492. *
  11493. * _.values(new Foo);
  11494. * // => [1, 2] (iteration order is not guaranteed)
  11495. *
  11496. * _.values('hi');
  11497. * // => ['h', 'i']
  11498. */
  11499. function values(object) {
  11500. return baseValues(object, keys(object));
  11501. }
  11502. /**
  11503. * Creates an array of the own and inherited enumerable property values
  11504. * of `object`.
  11505. *
  11506. * **Note:** Non-object values are coerced to objects.
  11507. *
  11508. * @static
  11509. * @memberOf _
  11510. * @category Object
  11511. * @param {Object} object The object to query.
  11512. * @returns {Array} Returns the array of property values.
  11513. * @example
  11514. *
  11515. * function Foo() {
  11516. * this.a = 1;
  11517. * this.b = 2;
  11518. * }
  11519. *
  11520. * Foo.prototype.c = 3;
  11521. *
  11522. * _.valuesIn(new Foo);
  11523. * // => [1, 2, 3] (iteration order is not guaranteed)
  11524. */
  11525. function valuesIn(object) {
  11526. return baseValues(object, keysIn(object));
  11527. }
  11528. /*------------------------------------------------------------------------*/
  11529. /**
  11530. * Checks if `n` is between `start` and up to but not including, `end`. If
  11531. * `end` is not specified it is set to `start` with `start` then set to `0`.
  11532. *
  11533. * @static
  11534. * @memberOf _
  11535. * @category Number
  11536. * @param {number} n The number to check.
  11537. * @param {number} [start=0] The start of the range.
  11538. * @param {number} end The end of the range.
  11539. * @returns {boolean} Returns `true` if `n` is in the range, else `false`.
  11540. * @example
  11541. *
  11542. * _.inRange(3, 2, 4);
  11543. * // => true
  11544. *
  11545. * _.inRange(4, 8);
  11546. * // => true
  11547. *
  11548. * _.inRange(4, 2);
  11549. * // => false
  11550. *
  11551. * _.inRange(2, 2);
  11552. * // => false
  11553. *
  11554. * _.inRange(1.2, 2);
  11555. * // => true
  11556. *
  11557. * _.inRange(5.2, 4);
  11558. * // => false
  11559. */
  11560. function inRange(value, start, end) {
  11561. start = +start || 0;
  11562. if (end === undefined) {
  11563. end = start;
  11564. start = 0;
  11565. } else {
  11566. end = +end || 0;
  11567. }
  11568. return value >= nativeMin(start, end) && value < nativeMax(start, end);
  11569. }
  11570. /**
  11571. * Produces a random number between `min` and `max` (inclusive). If only one
  11572. * argument is provided a number between `0` and the given number is returned.
  11573. * If `floating` is `true`, or either `min` or `max` are floats, a floating-point
  11574. * number is returned instead of an integer.
  11575. *
  11576. * @static
  11577. * @memberOf _
  11578. * @category Number
  11579. * @param {number} [min=0] The minimum possible value.
  11580. * @param {number} [max=1] The maximum possible value.
  11581. * @param {boolean} [floating] Specify returning a floating-point number.
  11582. * @returns {number} Returns the random number.
  11583. * @example
  11584. *
  11585. * _.random(0, 5);
  11586. * // => an integer between 0 and 5
  11587. *
  11588. * _.random(5);
  11589. * // => also an integer between 0 and 5
  11590. *
  11591. * _.random(5, true);
  11592. * // => a floating-point number between 0 and 5
  11593. *
  11594. * _.random(1.2, 5.2);
  11595. * // => a floating-point number between 1.2 and 5.2
  11596. */
  11597. function random(min, max, floating) {
  11598. if (floating && isIterateeCall(min, max, floating)) {
  11599. max = floating = undefined;
  11600. }
  11601. var noMin = min == null,
  11602. noMax = max == null;
  11603. if (floating == null) {
  11604. if (noMax && typeof min == 'boolean') {
  11605. floating = min;
  11606. min = 1;
  11607. }
  11608. else if (typeof max == 'boolean') {
  11609. floating = max;
  11610. noMax = true;
  11611. }
  11612. }
  11613. if (noMin && noMax) {
  11614. max = 1;
  11615. noMax = false;
  11616. }
  11617. min = +min || 0;
  11618. if (noMax) {
  11619. max = min;
  11620. min = 0;
  11621. } else {
  11622. max = +max || 0;
  11623. }
  11624. if (floating || min % 1 || max % 1) {
  11625. var rand = nativeRandom();
  11626. return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand + '').length - 1)))), max);
  11627. }
  11628. return baseRandom(min, max);
  11629. }
  11630. /*------------------------------------------------------------------------*/
  11631. /**
  11632. * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).
  11633. *
  11634. * @static
  11635. * @memberOf _
  11636. * @category String
  11637. * @param {string} [string=''] The string to convert.
  11638. * @returns {string} Returns the camel cased string.
  11639. * @example
  11640. *
  11641. * _.camelCase('Foo Bar');
  11642. * // => 'fooBar'
  11643. *
  11644. * _.camelCase('--foo-bar');
  11645. * // => 'fooBar'
  11646. *
  11647. * _.camelCase('__foo_bar__');
  11648. * // => 'fooBar'
  11649. */
  11650. var camelCase = createCompounder(function(result, word, index) {
  11651. word = word.toLowerCase();
  11652. return result + (index ? (word.charAt(0).toUpperCase() + word.slice(1)) : word);
  11653. });
  11654. /**
  11655. * Capitalizes the first character of `string`.
  11656. *
  11657. * @static
  11658. * @memberOf _
  11659. * @category String
  11660. * @param {string} [string=''] The string to capitalize.
  11661. * @returns {string} Returns the capitalized string.
  11662. * @example
  11663. *
  11664. * _.capitalize('fred');
  11665. * // => 'Fred'
  11666. */
  11667. function capitalize(string) {
  11668. string = baseToString(string);
  11669. return string && (string.charAt(0).toUpperCase() + string.slice(1));
  11670. }
  11671. /**
  11672. * Deburrs `string` by converting [latin-1 supplementary letters](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)
  11673. * to basic latin letters and removing [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).
  11674. *
  11675. * @static
  11676. * @memberOf _
  11677. * @category String
  11678. * @param {string} [string=''] The string to deburr.
  11679. * @returns {string} Returns the deburred string.
  11680. * @example
  11681. *
  11682. * _.deburr('déjà vu');
  11683. * // => 'deja vu'
  11684. */
  11685. function deburr(string) {
  11686. string = baseToString(string);
  11687. return string && string.replace(reLatin1, deburrLetter).replace(reComboMark, '');
  11688. }
  11689. /**
  11690. * Checks if `string` ends with the given target string.
  11691. *
  11692. * @static
  11693. * @memberOf _
  11694. * @category String
  11695. * @param {string} [string=''] The string to search.
  11696. * @param {string} [target] The string to search for.
  11697. * @param {number} [position=string.length] The position to search from.
  11698. * @returns {boolean} Returns `true` if `string` ends with `target`, else `false`.
  11699. * @example
  11700. *
  11701. * _.endsWith('abc', 'c');
  11702. * // => true
  11703. *
  11704. * _.endsWith('abc', 'b');
  11705. * // => false
  11706. *
  11707. * _.endsWith('abc', 'b', 2);
  11708. * // => true
  11709. */
  11710. function endsWith(string, target, position) {
  11711. string = baseToString(string);
  11712. target = (target + '');
  11713. var length = string.length;
  11714. position = position === undefined
  11715. ? length
  11716. : nativeMin(position < 0 ? 0 : (+position || 0), length);
  11717. position -= target.length;
  11718. return position >= 0 && string.indexOf(target, position) == position;
  11719. }
  11720. /**
  11721. * Converts the characters "&", "<", ">", '"', "'", and "\`", in `string` to
  11722. * their corresponding HTML entities.
  11723. *
  11724. * **Note:** No other characters are escaped. To escape additional characters
  11725. * use a third-party library like [_he_](https://mths.be/he).
  11726. *
  11727. * Though the ">" character is escaped for symmetry, characters like
  11728. * ">" and "/" don't need escaping in HTML and have no special meaning
  11729. * unless they're part of a tag or unquoted attribute value.
  11730. * See [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)
  11731. * (under "semi-related fun fact") for more details.
  11732. *
  11733. * Backticks are escaped because in Internet Explorer < 9, they can break out
  11734. * of attribute values or HTML comments. See [#59](https://html5sec.org/#59),
  11735. * [#102](https://html5sec.org/#102), [#108](https://html5sec.org/#108), and
  11736. * [#133](https://html5sec.org/#133) of the [HTML5 Security Cheatsheet](https://html5sec.org/)
  11737. * for more details.
  11738. *
  11739. * When working with HTML you should always [quote attribute values](http://wonko.com/post/html-escaping)
  11740. * to reduce XSS vectors.
  11741. *
  11742. * @static
  11743. * @memberOf _
  11744. * @category String
  11745. * @param {string} [string=''] The string to escape.
  11746. * @returns {string} Returns the escaped string.
  11747. * @example
  11748. *
  11749. * _.escape('fred, barney, & pebbles');
  11750. * // => 'fred, barney, &amp; pebbles'
  11751. */
  11752. function escape(string) {
  11753. // Reset `lastIndex` because in IE < 9 `String#replace` does not.
  11754. string = baseToString(string);
  11755. return (string && reHasUnescapedHtml.test(string))
  11756. ? string.replace(reUnescapedHtml, escapeHtmlChar)
  11757. : string;
  11758. }
  11759. /**
  11760. * Escapes the `RegExp` special characters "\", "/", "^", "$", ".", "|", "?",
  11761. * "*", "+", "(", ")", "[", "]", "{" and "}" in `string`.
  11762. *
  11763. * @static
  11764. * @memberOf _
  11765. * @category String
  11766. * @param {string} [string=''] The string to escape.
  11767. * @returns {string} Returns the escaped string.
  11768. * @example
  11769. *
  11770. * _.escapeRegExp('[lodash](https://lodash.com/)');
  11771. * // => '\[lodash\]\(https:\/\/lodash\.com\/\)'
  11772. */
  11773. function escapeRegExp(string) {
  11774. string = baseToString(string);
  11775. return (string && reHasRegExpChars.test(string))
  11776. ? string.replace(reRegExpChars, escapeRegExpChar)
  11777. : (string || '(?:)');
  11778. }
  11779. /**
  11780. * Converts `string` to [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).
  11781. *
  11782. * @static
  11783. * @memberOf _
  11784. * @category String
  11785. * @param {string} [string=''] The string to convert.
  11786. * @returns {string} Returns the kebab cased string.
  11787. * @example
  11788. *
  11789. * _.kebabCase('Foo Bar');
  11790. * // => 'foo-bar'
  11791. *
  11792. * _.kebabCase('fooBar');
  11793. * // => 'foo-bar'
  11794. *
  11795. * _.kebabCase('__foo_bar__');
  11796. * // => 'foo-bar'
  11797. */
  11798. var kebabCase = createCompounder(function(result, word, index) {
  11799. return result + (index ? '-' : '') + word.toLowerCase();
  11800. });
  11801. /**
  11802. * Pads `string` on the left and right sides if it's shorter than `length`.
  11803. * Padding characters are truncated if they can't be evenly divided by `length`.
  11804. *
  11805. * @static
  11806. * @memberOf _
  11807. * @category String
  11808. * @param {string} [string=''] The string to pad.
  11809. * @param {number} [length=0] The padding length.
  11810. * @param {string} [chars=' '] The string used as padding.
  11811. * @returns {string} Returns the padded string.
  11812. * @example
  11813. *
  11814. * _.pad('abc', 8);
  11815. * // => ' abc '
  11816. *
  11817. * _.pad('abc', 8, '_-');
  11818. * // => '_-abc_-_'
  11819. *
  11820. * _.pad('abc', 3);
  11821. * // => 'abc'
  11822. */
  11823. function pad(string, length, chars) {
  11824. string = baseToString(string);
  11825. length = +length;
  11826. var strLength = string.length;
  11827. if (strLength >= length || !nativeIsFinite(length)) {
  11828. return string;
  11829. }
  11830. var mid = (length - strLength) / 2,
  11831. leftLength = nativeFloor(mid),
  11832. rightLength = nativeCeil(mid);
  11833. chars = createPadding('', rightLength, chars);
  11834. return chars.slice(0, leftLength) + string + chars;
  11835. }
  11836. /**
  11837. * Pads `string` on the left side if it's shorter than `length`. Padding
  11838. * characters are truncated if they exceed `length`.
  11839. *
  11840. * @static
  11841. * @memberOf _
  11842. * @category String
  11843. * @param {string} [string=''] The string to pad.
  11844. * @param {number} [length=0] The padding length.
  11845. * @param {string} [chars=' '] The string used as padding.
  11846. * @returns {string} Returns the padded string.
  11847. * @example
  11848. *
  11849. * _.padLeft('abc', 6);
  11850. * // => ' abc'
  11851. *
  11852. * _.padLeft('abc', 6, '_-');
  11853. * // => '_-_abc'
  11854. *
  11855. * _.padLeft('abc', 3);
  11856. * // => 'abc'
  11857. */
  11858. var padLeft = createPadDir();
  11859. /**
  11860. * Pads `string` on the right side if it's shorter than `length`. Padding
  11861. * characters are truncated if they exceed `length`.
  11862. *
  11863. * @static
  11864. * @memberOf _
  11865. * @category String
  11866. * @param {string} [string=''] The string to pad.
  11867. * @param {number} [length=0] The padding length.
  11868. * @param {string} [chars=' '] The string used as padding.
  11869. * @returns {string} Returns the padded string.
  11870. * @example
  11871. *
  11872. * _.padRight('abc', 6);
  11873. * // => 'abc '
  11874. *
  11875. * _.padRight('abc', 6, '_-');
  11876. * // => 'abc_-_'
  11877. *
  11878. * _.padRight('abc', 3);
  11879. * // => 'abc'
  11880. */
  11881. var padRight = createPadDir(true);
  11882. /**
  11883. * Converts `string` to an integer of the specified radix. If `radix` is
  11884. * `undefined` or `0`, a `radix` of `10` is used unless `value` is a hexadecimal,
  11885. * in which case a `radix` of `16` is used.
  11886. *
  11887. * **Note:** This method aligns with the [ES5 implementation](https://es5.github.io/#E)
  11888. * of `parseInt`.
  11889. *
  11890. * @static
  11891. * @memberOf _
  11892. * @category String
  11893. * @param {string} string The string to convert.
  11894. * @param {number} [radix] The radix to interpret `value` by.
  11895. * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
  11896. * @returns {number} Returns the converted integer.
  11897. * @example
  11898. *
  11899. * _.parseInt('08');
  11900. * // => 8
  11901. *
  11902. * _.map(['6', '08', '10'], _.parseInt);
  11903. * // => [6, 8, 10]
  11904. */
  11905. function parseInt(string, radix, guard) {
  11906. // Firefox < 21 and Opera < 15 follow ES3 for `parseInt`.
  11907. // Chrome fails to trim leading <BOM> whitespace characters.
  11908. // See https://code.google.com/p/v8/issues/detail?id=3109 for more details.
  11909. if (guard ? isIterateeCall(string, radix, guard) : radix == null) {
  11910. radix = 0;
  11911. } else if (radix) {
  11912. radix = +radix;
  11913. }
  11914. string = trim(string);
  11915. return nativeParseInt(string, radix || (reHasHexPrefix.test(string) ? 16 : 10));
  11916. }
  11917. /**
  11918. * Repeats the given string `n` times.
  11919. *
  11920. * @static
  11921. * @memberOf _
  11922. * @category String
  11923. * @param {string} [string=''] The string to repeat.
  11924. * @param {number} [n=0] The number of times to repeat the string.
  11925. * @returns {string} Returns the repeated string.
  11926. * @example
  11927. *
  11928. * _.repeat('*', 3);
  11929. * // => '***'
  11930. *
  11931. * _.repeat('abc', 2);
  11932. * // => 'abcabc'
  11933. *
  11934. * _.repeat('abc', 0);
  11935. * // => ''
  11936. */
  11937. function repeat(string, n) {
  11938. var result = '';
  11939. string = baseToString(string);
  11940. n = +n;
  11941. if (n < 1 || !string || !nativeIsFinite(n)) {
  11942. return result;
  11943. }
  11944. // Leverage the exponentiation by squaring algorithm for a faster repeat.
  11945. // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.
  11946. do {
  11947. if (n % 2) {
  11948. result += string;
  11949. }
  11950. n = nativeFloor(n / 2);
  11951. string += string;
  11952. } while (n);
  11953. return result;
  11954. }
  11955. /**
  11956. * Converts `string` to [snake case](https://en.wikipedia.org/wiki/Snake_case).
  11957. *
  11958. * @static
  11959. * @memberOf _
  11960. * @category String
  11961. * @param {string} [string=''] The string to convert.
  11962. * @returns {string} Returns the snake cased string.
  11963. * @example
  11964. *
  11965. * _.snakeCase('Foo Bar');
  11966. * // => 'foo_bar'
  11967. *
  11968. * _.snakeCase('fooBar');
  11969. * // => 'foo_bar'
  11970. *
  11971. * _.snakeCase('--foo-bar');
  11972. * // => 'foo_bar'
  11973. */
  11974. var snakeCase = createCompounder(function(result, word, index) {
  11975. return result + (index ? '_' : '') + word.toLowerCase();
  11976. });
  11977. /**
  11978. * Converts `string` to [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).
  11979. *
  11980. * @static
  11981. * @memberOf _
  11982. * @category String
  11983. * @param {string} [string=''] The string to convert.
  11984. * @returns {string} Returns the start cased string.
  11985. * @example
  11986. *
  11987. * _.startCase('--foo-bar');
  11988. * // => 'Foo Bar'
  11989. *
  11990. * _.startCase('fooBar');
  11991. * // => 'Foo Bar'
  11992. *
  11993. * _.startCase('__foo_bar__');
  11994. * // => 'Foo Bar'
  11995. */
  11996. var startCase = createCompounder(function(result, word, index) {
  11997. return result + (index ? ' ' : '') + (word.charAt(0).toUpperCase() + word.slice(1));
  11998. });
  11999. /**
  12000. * Checks if `string` starts with the given target string.
  12001. *
  12002. * @static
  12003. * @memberOf _
  12004. * @category String
  12005. * @param {string} [string=''] The string to search.
  12006. * @param {string} [target] The string to search for.
  12007. * @param {number} [position=0] The position to search from.
  12008. * @returns {boolean} Returns `true` if `string` starts with `target`, else `false`.
  12009. * @example
  12010. *
  12011. * _.startsWith('abc', 'a');
  12012. * // => true
  12013. *
  12014. * _.startsWith('abc', 'b');
  12015. * // => false
  12016. *
  12017. * _.startsWith('abc', 'b', 1);
  12018. * // => true
  12019. */
  12020. function startsWith(string, target, position) {
  12021. string = baseToString(string);
  12022. position = position == null
  12023. ? 0
  12024. : nativeMin(position < 0 ? 0 : (+position || 0), string.length);
  12025. return string.lastIndexOf(target, position) == position;
  12026. }
  12027. /**
  12028. * Creates a compiled template function that can interpolate data properties
  12029. * in "interpolate" delimiters, HTML-escape interpolated data properties in
  12030. * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data
  12031. * properties may be accessed as free variables in the template. If a setting
  12032. * object is provided it takes precedence over `_.templateSettings` values.
  12033. *
  12034. * **Note:** In the development build `_.template` utilizes
  12035. * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)
  12036. * for easier debugging.
  12037. *
  12038. * For more information on precompiling templates see
  12039. * [lodash's custom builds documentation](https://lodash.com/custom-builds).
  12040. *
  12041. * For more information on Chrome extension sandboxes see
  12042. * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).
  12043. *
  12044. * @static
  12045. * @memberOf _
  12046. * @category String
  12047. * @param {string} [string=''] The template string.
  12048. * @param {Object} [options] The options object.
  12049. * @param {RegExp} [options.escape] The HTML "escape" delimiter.
  12050. * @param {RegExp} [options.evaluate] The "evaluate" delimiter.
  12051. * @param {Object} [options.imports] An object to import into the template as free variables.
  12052. * @param {RegExp} [options.interpolate] The "interpolate" delimiter.
  12053. * @param {string} [options.sourceURL] The sourceURL of the template's compiled source.
  12054. * @param {string} [options.variable] The data object variable name.
  12055. * @param- {Object} [otherOptions] Enables the legacy `options` param signature.
  12056. * @returns {Function} Returns the compiled template function.
  12057. * @example
  12058. *
  12059. * // using the "interpolate" delimiter to create a compiled template
  12060. * var compiled = _.template('hello <%= user %>!');
  12061. * compiled({ 'user': 'fred' });
  12062. * // => 'hello fred!'
  12063. *
  12064. * // using the HTML "escape" delimiter to escape data property values
  12065. * var compiled = _.template('<b><%- value %></b>');
  12066. * compiled({ 'value': '<script>' });
  12067. * // => '<b>&lt;script&gt;</b>'
  12068. *
  12069. * // using the "evaluate" delimiter to execute JavaScript and generate HTML
  12070. * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');
  12071. * compiled({ 'users': ['fred', 'barney'] });
  12072. * // => '<li>fred</li><li>barney</li>'
  12073. *
  12074. * // using the internal `print` function in "evaluate" delimiters
  12075. * var compiled = _.template('<% print("hello " + user); %>!');
  12076. * compiled({ 'user': 'barney' });
  12077. * // => 'hello barney!'
  12078. *
  12079. * // using the ES delimiter as an alternative to the default "interpolate" delimiter
  12080. * var compiled = _.template('hello ${ user }!');
  12081. * compiled({ 'user': 'pebbles' });
  12082. * // => 'hello pebbles!'
  12083. *
  12084. * // using custom template delimiters
  12085. * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g;
  12086. * var compiled = _.template('hello {{ user }}!');
  12087. * compiled({ 'user': 'mustache' });
  12088. * // => 'hello mustache!'
  12089. *
  12090. * // using backslashes to treat delimiters as plain text
  12091. * var compiled = _.template('<%= "\\<%- value %\\>" %>');
  12092. * compiled({ 'value': 'ignored' });
  12093. * // => '<%- value %>'
  12094. *
  12095. * // using the `imports` option to import `jQuery` as `jq`
  12096. * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';
  12097. * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });
  12098. * compiled({ 'users': ['fred', 'barney'] });
  12099. * // => '<li>fred</li><li>barney</li>'
  12100. *
  12101. * // using the `sourceURL` option to specify a custom sourceURL for the template
  12102. * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });
  12103. * compiled(data);
  12104. * // => find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector
  12105. *
  12106. * // using the `variable` option to ensure a with-statement isn't used in the compiled template
  12107. * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });
  12108. * compiled.source;
  12109. * // => function(data) {
  12110. * // var __t, __p = '';
  12111. * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';
  12112. * // return __p;
  12113. * // }
  12114. *
  12115. * // using the `source` property to inline compiled templates for meaningful
  12116. * // line numbers in error messages and a stack trace
  12117. * fs.writeFileSync(path.join(cwd, 'jst.js'), '\
  12118. * var JST = {\
  12119. * "main": ' + _.template(mainText).source + '\
  12120. * };\
  12121. * ');
  12122. */
  12123. function template(string, options, otherOptions) {
  12124. // Based on John Resig's `tmpl` implementation (http://ejohn.org/blog/javascript-micro-templating/)
  12125. // and Laura Doktorova's doT.js (https://github.com/olado/doT).
  12126. var settings = lodash.templateSettings;
  12127. if (otherOptions && isIterateeCall(string, options, otherOptions)) {
  12128. options = otherOptions = undefined;
  12129. }
  12130. string = baseToString(string);
  12131. options = assignWith(baseAssign({}, otherOptions || options), settings, assignOwnDefaults);
  12132. var imports = assignWith(baseAssign({}, options.imports), settings.imports, assignOwnDefaults),
  12133. importsKeys = keys(imports),
  12134. importsValues = baseValues(imports, importsKeys);
  12135. var isEscaping,
  12136. isEvaluating,
  12137. index = 0,
  12138. interpolate = options.interpolate || reNoMatch,
  12139. source = "__p += '";
  12140. // Compile the regexp to match each delimiter.
  12141. var reDelimiters = RegExp(
  12142. (options.escape || reNoMatch).source + '|' +
  12143. interpolate.source + '|' +
  12144. (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +
  12145. (options.evaluate || reNoMatch).source + '|$'
  12146. , 'g');
  12147. // Use a sourceURL for easier debugging.
  12148. var sourceURL = '//# sourceURL=' +
  12149. ('sourceURL' in options
  12150. ? options.sourceURL
  12151. : ('lodash.templateSources[' + (++templateCounter) + ']')
  12152. ) + '\n';
  12153. string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
  12154. interpolateValue || (interpolateValue = esTemplateValue);
  12155. // Escape characters that can't be included in string literals.
  12156. source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);
  12157. // Replace delimiters with snippets.
  12158. if (escapeValue) {
  12159. isEscaping = true;
  12160. source += "' +\n__e(" + escapeValue + ") +\n'";
  12161. }
  12162. if (evaluateValue) {
  12163. isEvaluating = true;
  12164. source += "';\n" + evaluateValue + ";\n__p += '";
  12165. }
  12166. if (interpolateValue) {
  12167. source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
  12168. }
  12169. index = offset + match.length;
  12170. // The JS engine embedded in Adobe products requires returning the `match`
  12171. // string in order to produce the correct `offset` value.
  12172. return match;
  12173. });
  12174. source += "';\n";
  12175. // If `variable` is not specified wrap a with-statement around the generated
  12176. // code to add the data object to the top of the scope chain.
  12177. var variable = options.variable;
  12178. if (!variable) {
  12179. source = 'with (obj) {\n' + source + '\n}\n';
  12180. }
  12181. // Cleanup code by stripping empty strings.
  12182. source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)
  12183. .replace(reEmptyStringMiddle, '$1')
  12184. .replace(reEmptyStringTrailing, '$1;');
  12185. // Frame code as the function body.
  12186. source = 'function(' + (variable || 'obj') + ') {\n' +
  12187. (variable
  12188. ? ''
  12189. : 'obj || (obj = {});\n'
  12190. ) +
  12191. "var __t, __p = ''" +
  12192. (isEscaping
  12193. ? ', __e = _.escape'
  12194. : ''
  12195. ) +
  12196. (isEvaluating
  12197. ? ', __j = Array.prototype.join;\n' +
  12198. "function print() { __p += __j.call(arguments, '') }\n"
  12199. : ';\n'
  12200. ) +
  12201. source +
  12202. 'return __p\n}';
  12203. var result = attempt(function() {
  12204. return Function(importsKeys, sourceURL + 'return ' + source).apply(undefined, importsValues);
  12205. });
  12206. // Provide the compiled function's source by its `toString` method or
  12207. // the `source` property as a convenience for inlining compiled templates.
  12208. result.source = source;
  12209. if (isError(result)) {
  12210. throw result;
  12211. }
  12212. return result;
  12213. }
  12214. /**
  12215. * Removes leading and trailing whitespace or specified characters from `string`.
  12216. *
  12217. * @static
  12218. * @memberOf _
  12219. * @category String
  12220. * @param {string} [string=''] The string to trim.
  12221. * @param {string} [chars=whitespace] The characters to trim.
  12222. * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
  12223. * @returns {string} Returns the trimmed string.
  12224. * @example
  12225. *
  12226. * _.trim(' abc ');
  12227. * // => 'abc'
  12228. *
  12229. * _.trim('-_-abc-_-', '_-');
  12230. * // => 'abc'
  12231. *
  12232. * _.map([' foo ', ' bar '], _.trim);
  12233. * // => ['foo', 'bar']
  12234. */
  12235. function trim(string, chars, guard) {
  12236. var value = string;
  12237. string = baseToString(string);
  12238. if (!string) {
  12239. return string;
  12240. }
  12241. if (guard ? isIterateeCall(value, chars, guard) : chars == null) {
  12242. return string.slice(trimmedLeftIndex(string), trimmedRightIndex(string) + 1);
  12243. }
  12244. chars = (chars + '');
  12245. return string.slice(charsLeftIndex(string, chars), charsRightIndex(string, chars) + 1);
  12246. }
  12247. /**
  12248. * Removes leading whitespace or specified characters from `string`.
  12249. *
  12250. * @static
  12251. * @memberOf _
  12252. * @category String
  12253. * @param {string} [string=''] The string to trim.
  12254. * @param {string} [chars=whitespace] The characters to trim.
  12255. * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
  12256. * @returns {string} Returns the trimmed string.
  12257. * @example
  12258. *
  12259. * _.trimLeft(' abc ');
  12260. * // => 'abc '
  12261. *
  12262. * _.trimLeft('-_-abc-_-', '_-');
  12263. * // => 'abc-_-'
  12264. */
  12265. function trimLeft(string, chars, guard) {
  12266. var value = string;
  12267. string = baseToString(string);
  12268. if (!string) {
  12269. return string;
  12270. }
  12271. if (guard ? isIterateeCall(value, chars, guard) : chars == null) {
  12272. return string.slice(trimmedLeftIndex(string));
  12273. }
  12274. return string.slice(charsLeftIndex(string, (chars + '')));
  12275. }
  12276. /**
  12277. * Removes trailing whitespace or specified characters from `string`.
  12278. *
  12279. * @static
  12280. * @memberOf _
  12281. * @category String
  12282. * @param {string} [string=''] The string to trim.
  12283. * @param {string} [chars=whitespace] The characters to trim.
  12284. * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
  12285. * @returns {string} Returns the trimmed string.
  12286. * @example
  12287. *
  12288. * _.trimRight(' abc ');
  12289. * // => ' abc'
  12290. *
  12291. * _.trimRight('-_-abc-_-', '_-');
  12292. * // => '-_-abc'
  12293. */
  12294. function trimRight(string, chars, guard) {
  12295. var value = string;
  12296. string = baseToString(string);
  12297. if (!string) {
  12298. return string;
  12299. }
  12300. if (guard ? isIterateeCall(value, chars, guard) : chars == null) {
  12301. return string.slice(0, trimmedRightIndex(string) + 1);
  12302. }
  12303. return string.slice(0, charsRightIndex(string, (chars + '')) + 1);
  12304. }
  12305. /**
  12306. * Truncates `string` if it's longer than the given maximum string length.
  12307. * The last characters of the truncated string are replaced with the omission
  12308. * string which defaults to "...".
  12309. *
  12310. * @static
  12311. * @memberOf _
  12312. * @category String
  12313. * @param {string} [string=''] The string to truncate.
  12314. * @param {Object|number} [options] The options object or maximum string length.
  12315. * @param {number} [options.length=30] The maximum string length.
  12316. * @param {string} [options.omission='...'] The string to indicate text is omitted.
  12317. * @param {RegExp|string} [options.separator] The separator pattern to truncate to.
  12318. * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
  12319. * @returns {string} Returns the truncated string.
  12320. * @example
  12321. *
  12322. * _.trunc('hi-diddly-ho there, neighborino');
  12323. * // => 'hi-diddly-ho there, neighbo...'
  12324. *
  12325. * _.trunc('hi-diddly-ho there, neighborino', 24);
  12326. * // => 'hi-diddly-ho there, n...'
  12327. *
  12328. * _.trunc('hi-diddly-ho there, neighborino', {
  12329. * 'length': 24,
  12330. * 'separator': ' '
  12331. * });
  12332. * // => 'hi-diddly-ho there,...'
  12333. *
  12334. * _.trunc('hi-diddly-ho there, neighborino', {
  12335. * 'length': 24,
  12336. * 'separator': /,? +/
  12337. * });
  12338. * // => 'hi-diddly-ho there...'
  12339. *
  12340. * _.trunc('hi-diddly-ho there, neighborino', {
  12341. * 'omission': ' [...]'
  12342. * });
  12343. * // => 'hi-diddly-ho there, neig [...]'
  12344. */
  12345. function trunc(string, options, guard) {
  12346. if (guard && isIterateeCall(string, options, guard)) {
  12347. options = undefined;
  12348. }
  12349. var length = DEFAULT_TRUNC_LENGTH,
  12350. omission = DEFAULT_TRUNC_OMISSION;
  12351. if (options != null) {
  12352. if (isObject(options)) {
  12353. var separator = 'separator' in options ? options.separator : separator;
  12354. length = 'length' in options ? (+options.length || 0) : length;
  12355. omission = 'omission' in options ? baseToString(options.omission) : omission;
  12356. } else {
  12357. length = +options || 0;
  12358. }
  12359. }
  12360. string = baseToString(string);
  12361. if (length >= string.length) {
  12362. return string;
  12363. }
  12364. var end = length - omission.length;
  12365. if (end < 1) {
  12366. return omission;
  12367. }
  12368. var result = string.slice(0, end);
  12369. if (separator == null) {
  12370. return result + omission;
  12371. }
  12372. if (isRegExp(separator)) {
  12373. if (string.slice(end).search(separator)) {
  12374. var match,
  12375. newEnd,
  12376. substring = string.slice(0, end);
  12377. if (!separator.global) {
  12378. separator = RegExp(separator.source, (reFlags.exec(separator) || '') + 'g');
  12379. }
  12380. separator.lastIndex = 0;
  12381. while ((match = separator.exec(substring))) {
  12382. newEnd = match.index;
  12383. }
  12384. result = result.slice(0, newEnd == null ? end : newEnd);
  12385. }
  12386. } else if (string.indexOf(separator, end) != end) {
  12387. var index = result.lastIndexOf(separator);
  12388. if (index > -1) {
  12389. result = result.slice(0, index);
  12390. }
  12391. }
  12392. return result + omission;
  12393. }
  12394. /**
  12395. * The inverse of `_.escape`; this method converts the HTML entities
  12396. * `&amp;`, `&lt;`, `&gt;`, `&quot;`, `&#39;`, and `&#96;` in `string` to their
  12397. * corresponding characters.
  12398. *
  12399. * **Note:** No other HTML entities are unescaped. To unescape additional HTML
  12400. * entities use a third-party library like [_he_](https://mths.be/he).
  12401. *
  12402. * @static
  12403. * @memberOf _
  12404. * @category String
  12405. * @param {string} [string=''] The string to unescape.
  12406. * @returns {string} Returns the unescaped string.
  12407. * @example
  12408. *
  12409. * _.unescape('fred, barney, &amp; pebbles');
  12410. * // => 'fred, barney, & pebbles'
  12411. */
  12412. function unescape(string) {
  12413. string = baseToString(string);
  12414. return (string && reHasEscapedHtml.test(string))
  12415. ? string.replace(reEscapedHtml, unescapeHtmlChar)
  12416. : string;
  12417. }
  12418. /**
  12419. * Splits `string` into an array of its words.
  12420. *
  12421. * @static
  12422. * @memberOf _
  12423. * @category String
  12424. * @param {string} [string=''] The string to inspect.
  12425. * @param {RegExp|string} [pattern] The pattern to match words.
  12426. * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
  12427. * @returns {Array} Returns the words of `string`.
  12428. * @example
  12429. *
  12430. * _.words('fred, barney, & pebbles');
  12431. * // => ['fred', 'barney', 'pebbles']
  12432. *
  12433. * _.words('fred, barney, & pebbles', /[^, ]+/g);
  12434. * // => ['fred', 'barney', '&', 'pebbles']
  12435. */
  12436. function words(string, pattern, guard) {
  12437. if (guard && isIterateeCall(string, pattern, guard)) {
  12438. pattern = undefined;
  12439. }
  12440. string = baseToString(string);
  12441. return string.match(pattern || reWords) || [];
  12442. }
  12443. /*------------------------------------------------------------------------*/
  12444. /**
  12445. * Attempts to invoke `func`, returning either the result or the caught error
  12446. * object. Any additional arguments are provided to `func` when it is invoked.
  12447. *
  12448. * @static
  12449. * @memberOf _
  12450. * @category Utility
  12451. * @param {Function} func The function to attempt.
  12452. * @returns {*} Returns the `func` result or error object.
  12453. * @example
  12454. *
  12455. * // avoid throwing errors for invalid selectors
  12456. * var elements = _.attempt(function(selector) {
  12457. * return document.querySelectorAll(selector);
  12458. * }, '>_>');
  12459. *
  12460. * if (_.isError(elements)) {
  12461. * elements = [];
  12462. * }
  12463. */
  12464. var attempt = restParam(function(func, args) {
  12465. try {
  12466. return func.apply(undefined, args);
  12467. } catch(e) {
  12468. return isError(e) ? e : new Error(e);
  12469. }
  12470. });
  12471. /**
  12472. * Creates a function that invokes `func` with the `this` binding of `thisArg`
  12473. * and arguments of the created function. If `func` is a property name the
  12474. * created callback returns the property value for a given element. If `func`
  12475. * is an object the created callback returns `true` for elements that contain
  12476. * the equivalent object properties, otherwise it returns `false`.
  12477. *
  12478. * @static
  12479. * @memberOf _
  12480. * @alias iteratee
  12481. * @category Utility
  12482. * @param {*} [func=_.identity] The value to convert to a callback.
  12483. * @param {*} [thisArg] The `this` binding of `func`.
  12484. * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
  12485. * @returns {Function} Returns the callback.
  12486. * @example
  12487. *
  12488. * var users = [
  12489. * { 'user': 'barney', 'age': 36 },
  12490. * { 'user': 'fred', 'age': 40 }
  12491. * ];
  12492. *
  12493. * // wrap to create custom callback shorthands
  12494. * _.callback = _.wrap(_.callback, function(callback, func, thisArg) {
  12495. * var match = /^(.+?)__([gl]t)(.+)$/.exec(func);
  12496. * if (!match) {
  12497. * return callback(func, thisArg);
  12498. * }
  12499. * return function(object) {
  12500. * return match[2] == 'gt'
  12501. * ? object[match[1]] > match[3]
  12502. * : object[match[1]] < match[3];
  12503. * };
  12504. * });
  12505. *
  12506. * _.filter(users, 'age__gt36');
  12507. * // => [{ 'user': 'fred', 'age': 40 }]
  12508. */
  12509. function callback(func, thisArg, guard) {
  12510. if (guard && isIterateeCall(func, thisArg, guard)) {
  12511. thisArg = undefined;
  12512. }
  12513. return isObjectLike(func)
  12514. ? matches(func)
  12515. : baseCallback(func, thisArg);
  12516. }
  12517. /**
  12518. * Creates a function that returns `value`.
  12519. *
  12520. * @static
  12521. * @memberOf _
  12522. * @category Utility
  12523. * @param {*} value The value to return from the new function.
  12524. * @returns {Function} Returns the new function.
  12525. * @example
  12526. *
  12527. * var object = { 'user': 'fred' };
  12528. * var getter = _.constant(object);
  12529. *
  12530. * getter() === object;
  12531. * // => true
  12532. */
  12533. function constant(value) {
  12534. return function() {
  12535. return value;
  12536. };
  12537. }
  12538. /**
  12539. * This method returns the first argument provided to it.
  12540. *
  12541. * @static
  12542. * @memberOf _
  12543. * @category Utility
  12544. * @param {*} value Any value.
  12545. * @returns {*} Returns `value`.
  12546. * @example
  12547. *
  12548. * var object = { 'user': 'fred' };
  12549. *
  12550. * _.identity(object) === object;
  12551. * // => true
  12552. */
  12553. function identity(value) {
  12554. return value;
  12555. }
  12556. /**
  12557. * Creates a function that performs a deep comparison between a given object
  12558. * and `source`, returning `true` if the given object has equivalent property
  12559. * values, else `false`.
  12560. *
  12561. * **Note:** This method supports comparing arrays, booleans, `Date` objects,
  12562. * numbers, `Object` objects, regexes, and strings. Objects are compared by
  12563. * their own, not inherited, enumerable properties. For comparing a single
  12564. * own or inherited property value see `_.matchesProperty`.
  12565. *
  12566. * @static
  12567. * @memberOf _
  12568. * @category Utility
  12569. * @param {Object} source The object of property values to match.
  12570. * @returns {Function} Returns the new function.
  12571. * @example
  12572. *
  12573. * var users = [
  12574. * { 'user': 'barney', 'age': 36, 'active': true },
  12575. * { 'user': 'fred', 'age': 40, 'active': false }
  12576. * ];
  12577. *
  12578. * _.filter(users, _.matches({ 'age': 40, 'active': false }));
  12579. * // => [{ 'user': 'fred', 'age': 40, 'active': false }]
  12580. */
  12581. function matches(source) {
  12582. return baseMatches(baseClone(source, true));
  12583. }
  12584. /**
  12585. * Creates a function that compares the property value of `path` on a given
  12586. * object to `value`.
  12587. *
  12588. * **Note:** This method supports comparing arrays, booleans, `Date` objects,
  12589. * numbers, `Object` objects, regexes, and strings. Objects are compared by
  12590. * their own, not inherited, enumerable properties.
  12591. *
  12592. * @static
  12593. * @memberOf _
  12594. * @category Utility
  12595. * @param {Array|string} path The path of the property to get.
  12596. * @param {*} srcValue The value to match.
  12597. * @returns {Function} Returns the new function.
  12598. * @example
  12599. *
  12600. * var users = [
  12601. * { 'user': 'barney' },
  12602. * { 'user': 'fred' }
  12603. * ];
  12604. *
  12605. * _.find(users, _.matchesProperty('user', 'fred'));
  12606. * // => { 'user': 'fred' }
  12607. */
  12608. function matchesProperty(path, srcValue) {
  12609. return baseMatchesProperty(path, baseClone(srcValue, true));
  12610. }
  12611. /**
  12612. * Creates a function that invokes the method at `path` on a given object.
  12613. * Any additional arguments are provided to the invoked method.
  12614. *
  12615. * @static
  12616. * @memberOf _
  12617. * @category Utility
  12618. * @param {Array|string} path The path of the method to invoke.
  12619. * @param {...*} [args] The arguments to invoke the method with.
  12620. * @returns {Function} Returns the new function.
  12621. * @example
  12622. *
  12623. * var objects = [
  12624. * { 'a': { 'b': { 'c': _.constant(2) } } },
  12625. * { 'a': { 'b': { 'c': _.constant(1) } } }
  12626. * ];
  12627. *
  12628. * _.map(objects, _.method('a.b.c'));
  12629. * // => [2, 1]
  12630. *
  12631. * _.invoke(_.sortBy(objects, _.method(['a', 'b', 'c'])), 'a.b.c');
  12632. * // => [1, 2]
  12633. */
  12634. var method = restParam(function(path, args) {
  12635. return function(object) {
  12636. return invokePath(object, path, args);
  12637. };
  12638. });
  12639. /**
  12640. * The opposite of `_.method`; this method creates a function that invokes
  12641. * the method at a given path on `object`. Any additional arguments are
  12642. * provided to the invoked method.
  12643. *
  12644. * @static
  12645. * @memberOf _
  12646. * @category Utility
  12647. * @param {Object} object The object to query.
  12648. * @param {...*} [args] The arguments to invoke the method with.
  12649. * @returns {Function} Returns the new function.
  12650. * @example
  12651. *
  12652. * var array = _.times(3, _.constant),
  12653. * object = { 'a': array, 'b': array, 'c': array };
  12654. *
  12655. * _.map(['a[2]', 'c[0]'], _.methodOf(object));
  12656. * // => [2, 0]
  12657. *
  12658. * _.map([['a', '2'], ['c', '0']], _.methodOf(object));
  12659. * // => [2, 0]
  12660. */
  12661. var methodOf = restParam(function(object, args) {
  12662. return function(path) {
  12663. return invokePath(object, path, args);
  12664. };
  12665. });
  12666. /**
  12667. * Adds all own enumerable function properties of a source object to the
  12668. * destination object. If `object` is a function then methods are added to
  12669. * its prototype as well.
  12670. *
  12671. * **Note:** Use `_.runInContext` to create a pristine `lodash` function to
  12672. * avoid conflicts caused by modifying the original.
  12673. *
  12674. * @static
  12675. * @memberOf _
  12676. * @category Utility
  12677. * @param {Function|Object} [object=lodash] The destination object.
  12678. * @param {Object} source The object of functions to add.
  12679. * @param {Object} [options] The options object.
  12680. * @param {boolean} [options.chain=true] Specify whether the functions added
  12681. * are chainable.
  12682. * @returns {Function|Object} Returns `object`.
  12683. * @example
  12684. *
  12685. * function vowels(string) {
  12686. * return _.filter(string, function(v) {
  12687. * return /[aeiou]/i.test(v);
  12688. * });
  12689. * }
  12690. *
  12691. * _.mixin({ 'vowels': vowels });
  12692. * _.vowels('fred');
  12693. * // => ['e']
  12694. *
  12695. * _('fred').vowels().value();
  12696. * // => ['e']
  12697. *
  12698. * _.mixin({ 'vowels': vowels }, { 'chain': false });
  12699. * _('fred').vowels();
  12700. * // => ['e']
  12701. */
  12702. function mixin(object, source, options) {
  12703. if (options == null) {
  12704. var isObj = isObject(source),
  12705. props = isObj ? keys(source) : undefined,
  12706. methodNames = (props && props.length) ? baseFunctions(source, props) : undefined;
  12707. if (!(methodNames ? methodNames.length : isObj)) {
  12708. methodNames = false;
  12709. options = source;
  12710. source = object;
  12711. object = this;
  12712. }
  12713. }
  12714. if (!methodNames) {
  12715. methodNames = baseFunctions(source, keys(source));
  12716. }
  12717. var chain = true,
  12718. index = -1,
  12719. isFunc = isFunction(object),
  12720. length = methodNames.length;
  12721. if (options === false) {
  12722. chain = false;
  12723. } else if (isObject(options) && 'chain' in options) {
  12724. chain = options.chain;
  12725. }
  12726. while (++index < length) {
  12727. var methodName = methodNames[index],
  12728. func = source[methodName];
  12729. object[methodName] = func;
  12730. if (isFunc) {
  12731. object.prototype[methodName] = (function(func) {
  12732. return function() {
  12733. var chainAll = this.__chain__;
  12734. if (chain || chainAll) {
  12735. var result = object(this.__wrapped__),
  12736. actions = result.__actions__ = arrayCopy(this.__actions__);
  12737. actions.push({ 'func': func, 'args': arguments, 'thisArg': object });
  12738. result.__chain__ = chainAll;
  12739. return result;
  12740. }
  12741. return func.apply(object, arrayPush([this.value()], arguments));
  12742. };
  12743. }(func));
  12744. }
  12745. }
  12746. return object;
  12747. }
  12748. /**
  12749. * Reverts the `_` variable to its previous value and returns a reference to
  12750. * the `lodash` function.
  12751. *
  12752. * @static
  12753. * @memberOf _
  12754. * @category Utility
  12755. * @returns {Function} Returns the `lodash` function.
  12756. * @example
  12757. *
  12758. * var lodash = _.noConflict();
  12759. */
  12760. function noConflict() {
  12761. root._ = oldDash;
  12762. return this;
  12763. }
  12764. /**
  12765. * A no-operation function that returns `undefined` regardless of the
  12766. * arguments it receives.
  12767. *
  12768. * @static
  12769. * @memberOf _
  12770. * @category Utility
  12771. * @example
  12772. *
  12773. * var object = { 'user': 'fred' };
  12774. *
  12775. * _.noop(object) === undefined;
  12776. * // => true
  12777. */
  12778. function noop() {
  12779. // No operation performed.
  12780. }
  12781. /**
  12782. * Creates a function that returns the property value at `path` on a
  12783. * given object.
  12784. *
  12785. * @static
  12786. * @memberOf _
  12787. * @category Utility
  12788. * @param {Array|string} path The path of the property to get.
  12789. * @returns {Function} Returns the new function.
  12790. * @example
  12791. *
  12792. * var objects = [
  12793. * { 'a': { 'b': { 'c': 2 } } },
  12794. * { 'a': { 'b': { 'c': 1 } } }
  12795. * ];
  12796. *
  12797. * _.map(objects, _.property('a.b.c'));
  12798. * // => [2, 1]
  12799. *
  12800. * _.pluck(_.sortBy(objects, _.property(['a', 'b', 'c'])), 'a.b.c');
  12801. * // => [1, 2]
  12802. */
  12803. function property(path) {
  12804. return isKey(path) ? baseProperty(path) : basePropertyDeep(path);
  12805. }
  12806. /**
  12807. * The opposite of `_.property`; this method creates a function that returns
  12808. * the property value at a given path on `object`.
  12809. *
  12810. * @static
  12811. * @memberOf _
  12812. * @category Utility
  12813. * @param {Object} object The object to query.
  12814. * @returns {Function} Returns the new function.
  12815. * @example
  12816. *
  12817. * var array = [0, 1, 2],
  12818. * object = { 'a': array, 'b': array, 'c': array };
  12819. *
  12820. * _.map(['a[2]', 'c[0]'], _.propertyOf(object));
  12821. * // => [2, 0]
  12822. *
  12823. * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));
  12824. * // => [2, 0]
  12825. */
  12826. function propertyOf(object) {
  12827. return function(path) {
  12828. return baseGet(object, toPath(path), path + '');
  12829. };
  12830. }
  12831. /**
  12832. * Creates an array of numbers (positive and/or negative) progressing from
  12833. * `start` up to, but not including, `end`. If `end` is not specified it is
  12834. * set to `start` with `start` then set to `0`. If `end` is less than `start`
  12835. * a zero-length range is created unless a negative `step` is specified.
  12836. *
  12837. * @static
  12838. * @memberOf _
  12839. * @category Utility
  12840. * @param {number} [start=0] The start of the range.
  12841. * @param {number} end The end of the range.
  12842. * @param {number} [step=1] The value to increment or decrement by.
  12843. * @returns {Array} Returns the new array of numbers.
  12844. * @example
  12845. *
  12846. * _.range(4);
  12847. * // => [0, 1, 2, 3]
  12848. *
  12849. * _.range(1, 5);
  12850. * // => [1, 2, 3, 4]
  12851. *
  12852. * _.range(0, 20, 5);
  12853. * // => [0, 5, 10, 15]
  12854. *
  12855. * _.range(0, -4, -1);
  12856. * // => [0, -1, -2, -3]
  12857. *
  12858. * _.range(1, 4, 0);
  12859. * // => [1, 1, 1]
  12860. *
  12861. * _.range(0);
  12862. * // => []
  12863. */
  12864. function range(start, end, step) {
  12865. if (step && isIterateeCall(start, end, step)) {
  12866. end = step = undefined;
  12867. }
  12868. start = +start || 0;
  12869. step = step == null ? 1 : (+step || 0);
  12870. if (end == null) {
  12871. end = start;
  12872. start = 0;
  12873. } else {
  12874. end = +end || 0;
  12875. }
  12876. // Use `Array(length)` so engines like Chakra and V8 avoid slower modes.
  12877. // See https://youtu.be/XAqIpGU8ZZk#t=17m25s for more details.
  12878. var index = -1,
  12879. length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),
  12880. result = Array(length);
  12881. while (++index < length) {
  12882. result[index] = start;
  12883. start += step;
  12884. }
  12885. return result;
  12886. }
  12887. /**
  12888. * Invokes the iteratee function `n` times, returning an array of the results
  12889. * of each invocation. The `iteratee` is bound to `thisArg` and invoked with
  12890. * one argument; (index).
  12891. *
  12892. * @static
  12893. * @memberOf _
  12894. * @category Utility
  12895. * @param {number} n The number of times to invoke `iteratee`.
  12896. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  12897. * @param {*} [thisArg] The `this` binding of `iteratee`.
  12898. * @returns {Array} Returns the array of results.
  12899. * @example
  12900. *
  12901. * var diceRolls = _.times(3, _.partial(_.random, 1, 6, false));
  12902. * // => [3, 6, 4]
  12903. *
  12904. * _.times(3, function(n) {
  12905. * mage.castSpell(n);
  12906. * });
  12907. * // => invokes `mage.castSpell(n)` three times with `n` of `0`, `1`, and `2`
  12908. *
  12909. * _.times(3, function(n) {
  12910. * this.cast(n);
  12911. * }, mage);
  12912. * // => also invokes `mage.castSpell(n)` three times
  12913. */
  12914. function times(n, iteratee, thisArg) {
  12915. n = nativeFloor(n);
  12916. // Exit early to avoid a JSC JIT bug in Safari 8
  12917. // where `Array(0)` is treated as `Array(1)`.
  12918. if (n < 1 || !nativeIsFinite(n)) {
  12919. return [];
  12920. }
  12921. var index = -1,
  12922. result = Array(nativeMin(n, MAX_ARRAY_LENGTH));
  12923. iteratee = bindCallback(iteratee, thisArg, 1);
  12924. while (++index < n) {
  12925. if (index < MAX_ARRAY_LENGTH) {
  12926. result[index] = iteratee(index);
  12927. } else {
  12928. iteratee(index);
  12929. }
  12930. }
  12931. return result;
  12932. }
  12933. /**
  12934. * Generates a unique ID. If `prefix` is provided the ID is appended to it.
  12935. *
  12936. * @static
  12937. * @memberOf _
  12938. * @category Utility
  12939. * @param {string} [prefix] The value to prefix the ID with.
  12940. * @returns {string} Returns the unique ID.
  12941. * @example
  12942. *
  12943. * _.uniqueId('contact_');
  12944. * // => 'contact_104'
  12945. *
  12946. * _.uniqueId();
  12947. * // => '105'
  12948. */
  12949. function uniqueId(prefix) {
  12950. var id = ++idCounter;
  12951. return baseToString(prefix) + id;
  12952. }
  12953. /*------------------------------------------------------------------------*/
  12954. /**
  12955. * Adds two numbers.
  12956. *
  12957. * @static
  12958. * @memberOf _
  12959. * @category Math
  12960. * @param {number} augend The first number to add.
  12961. * @param {number} addend The second number to add.
  12962. * @returns {number} Returns the sum.
  12963. * @example
  12964. *
  12965. * _.add(6, 4);
  12966. * // => 10
  12967. */
  12968. function add(augend, addend) {
  12969. return (+augend || 0) + (+addend || 0);
  12970. }
  12971. /**
  12972. * Calculates `n` rounded up to `precision`.
  12973. *
  12974. * @static
  12975. * @memberOf _
  12976. * @category Math
  12977. * @param {number} n The number to round up.
  12978. * @param {number} [precision=0] The precision to round up to.
  12979. * @returns {number} Returns the rounded up number.
  12980. * @example
  12981. *
  12982. * _.ceil(4.006);
  12983. * // => 5
  12984. *
  12985. * _.ceil(6.004, 2);
  12986. * // => 6.01
  12987. *
  12988. * _.ceil(6040, -2);
  12989. * // => 6100
  12990. */
  12991. var ceil = createRound('ceil');
  12992. /**
  12993. * Calculates `n` rounded down to `precision`.
  12994. *
  12995. * @static
  12996. * @memberOf _
  12997. * @category Math
  12998. * @param {number} n The number to round down.
  12999. * @param {number} [precision=0] The precision to round down to.
  13000. * @returns {number} Returns the rounded down number.
  13001. * @example
  13002. *
  13003. * _.floor(4.006);
  13004. * // => 4
  13005. *
  13006. * _.floor(0.046, 2);
  13007. * // => 0.04
  13008. *
  13009. * _.floor(4060, -2);
  13010. * // => 4000
  13011. */
  13012. var floor = createRound('floor');
  13013. /**
  13014. * Gets the maximum value of `collection`. If `collection` is empty or falsey
  13015. * `-Infinity` is returned. If an iteratee function is provided it is invoked
  13016. * for each value in `collection` to generate the criterion by which the value
  13017. * is ranked. The `iteratee` is bound to `thisArg` and invoked with three
  13018. * arguments: (value, index, collection).
  13019. *
  13020. * If a property name is provided for `iteratee` the created `_.property`
  13021. * style callback returns the property value of the given element.
  13022. *
  13023. * If a value is also provided for `thisArg` the created `_.matchesProperty`
  13024. * style callback returns `true` for elements that have a matching property
  13025. * value, else `false`.
  13026. *
  13027. * If an object is provided for `iteratee` the created `_.matches` style
  13028. * callback returns `true` for elements that have the properties of the given
  13029. * object, else `false`.
  13030. *
  13031. * @static
  13032. * @memberOf _
  13033. * @category Math
  13034. * @param {Array|Object|string} collection The collection to iterate over.
  13035. * @param {Function|Object|string} [iteratee] The function invoked per iteration.
  13036. * @param {*} [thisArg] The `this` binding of `iteratee`.
  13037. * @returns {*} Returns the maximum value.
  13038. * @example
  13039. *
  13040. * _.max([4, 2, 8, 6]);
  13041. * // => 8
  13042. *
  13043. * _.max([]);
  13044. * // => -Infinity
  13045. *
  13046. * var users = [
  13047. * { 'user': 'barney', 'age': 36 },
  13048. * { 'user': 'fred', 'age': 40 }
  13049. * ];
  13050. *
  13051. * _.max(users, function(chr) {
  13052. * return chr.age;
  13053. * });
  13054. * // => { 'user': 'fred', 'age': 40 }
  13055. *
  13056. * // using the `_.property` callback shorthand
  13057. * _.max(users, 'age');
  13058. * // => { 'user': 'fred', 'age': 40 }
  13059. */
  13060. var max = createExtremum(gt, NEGATIVE_INFINITY);
  13061. /**
  13062. * Gets the minimum value of `collection`. If `collection` is empty or falsey
  13063. * `Infinity` is returned. If an iteratee function is provided it is invoked
  13064. * for each value in `collection` to generate the criterion by which the value
  13065. * is ranked. The `iteratee` is bound to `thisArg` and invoked with three
  13066. * arguments: (value, index, collection).
  13067. *
  13068. * If a property name is provided for `iteratee` the created `_.property`
  13069. * style callback returns the property value of the given element.
  13070. *
  13071. * If a value is also provided for `thisArg` the created `_.matchesProperty`
  13072. * style callback returns `true` for elements that have a matching property
  13073. * value, else `false`.
  13074. *
  13075. * If an object is provided for `iteratee` the created `_.matches` style
  13076. * callback returns `true` for elements that have the properties of the given
  13077. * object, else `false`.
  13078. *
  13079. * @static
  13080. * @memberOf _
  13081. * @category Math
  13082. * @param {Array|Object|string} collection The collection to iterate over.
  13083. * @param {Function|Object|string} [iteratee] The function invoked per iteration.
  13084. * @param {*} [thisArg] The `this` binding of `iteratee`.
  13085. * @returns {*} Returns the minimum value.
  13086. * @example
  13087. *
  13088. * _.min([4, 2, 8, 6]);
  13089. * // => 2
  13090. *
  13091. * _.min([]);
  13092. * // => Infinity
  13093. *
  13094. * var users = [
  13095. * { 'user': 'barney', 'age': 36 },
  13096. * { 'user': 'fred', 'age': 40 }
  13097. * ];
  13098. *
  13099. * _.min(users, function(chr) {
  13100. * return chr.age;
  13101. * });
  13102. * // => { 'user': 'barney', 'age': 36 }
  13103. *
  13104. * // using the `_.property` callback shorthand
  13105. * _.min(users, 'age');
  13106. * // => { 'user': 'barney', 'age': 36 }
  13107. */
  13108. var min = createExtremum(lt, POSITIVE_INFINITY);
  13109. /**
  13110. * Calculates `n` rounded to `precision`.
  13111. *
  13112. * @static
  13113. * @memberOf _
  13114. * @category Math
  13115. * @param {number} n The number to round.
  13116. * @param {number} [precision=0] The precision to round to.
  13117. * @returns {number} Returns the rounded number.
  13118. * @example
  13119. *
  13120. * _.round(4.006);
  13121. * // => 4
  13122. *
  13123. * _.round(4.006, 2);
  13124. * // => 4.01
  13125. *
  13126. * _.round(4060, -2);
  13127. * // => 4100
  13128. */
  13129. var round = createRound('round');
  13130. /**
  13131. * Gets the sum of the values in `collection`.
  13132. *
  13133. * @static
  13134. * @memberOf _
  13135. * @category Math
  13136. * @param {Array|Object|string} collection The collection to iterate over.
  13137. * @param {Function|Object|string} [iteratee] The function invoked per iteration.
  13138. * @param {*} [thisArg] The `this` binding of `iteratee`.
  13139. * @returns {number} Returns the sum.
  13140. * @example
  13141. *
  13142. * _.sum([4, 6]);
  13143. * // => 10
  13144. *
  13145. * _.sum({ 'a': 4, 'b': 6 });
  13146. * // => 10
  13147. *
  13148. * var objects = [
  13149. * { 'n': 4 },
  13150. * { 'n': 6 }
  13151. * ];
  13152. *
  13153. * _.sum(objects, function(object) {
  13154. * return object.n;
  13155. * });
  13156. * // => 10
  13157. *
  13158. * // using the `_.property` callback shorthand
  13159. * _.sum(objects, 'n');
  13160. * // => 10
  13161. */
  13162. function sum(collection, iteratee, thisArg) {
  13163. if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {
  13164. iteratee = undefined;
  13165. }
  13166. iteratee = getCallback(iteratee, thisArg, 3);
  13167. return iteratee.length == 1
  13168. ? arraySum(isArray(collection) ? collection : toIterable(collection), iteratee)
  13169. : baseSum(collection, iteratee);
  13170. }
  13171. /*------------------------------------------------------------------------*/
  13172. // Ensure wrappers are instances of `baseLodash`.
  13173. lodash.prototype = baseLodash.prototype;
  13174. LodashWrapper.prototype = baseCreate(baseLodash.prototype);
  13175. LodashWrapper.prototype.constructor = LodashWrapper;
  13176. LazyWrapper.prototype = baseCreate(baseLodash.prototype);
  13177. LazyWrapper.prototype.constructor = LazyWrapper;
  13178. // Add functions to the `Map` cache.
  13179. MapCache.prototype['delete'] = mapDelete;
  13180. MapCache.prototype.get = mapGet;
  13181. MapCache.prototype.has = mapHas;
  13182. MapCache.prototype.set = mapSet;
  13183. // Add functions to the `Set` cache.
  13184. SetCache.prototype.push = cachePush;
  13185. // Assign cache to `_.memoize`.
  13186. memoize.Cache = MapCache;
  13187. // Add functions that return wrapped values when chaining.
  13188. lodash.after = after;
  13189. lodash.ary = ary;
  13190. lodash.assign = assign;
  13191. lodash.at = at;
  13192. lodash.before = before;
  13193. lodash.bind = bind;
  13194. lodash.bindAll = bindAll;
  13195. lodash.bindKey = bindKey;
  13196. lodash.callback = callback;
  13197. lodash.chain = chain;
  13198. lodash.chunk = chunk;
  13199. lodash.compact = compact;
  13200. lodash.constant = constant;
  13201. lodash.countBy = countBy;
  13202. lodash.create = create;
  13203. lodash.curry = curry;
  13204. lodash.curryRight = curryRight;
  13205. lodash.debounce = debounce;
  13206. lodash.defaults = defaults;
  13207. lodash.defaultsDeep = defaultsDeep;
  13208. lodash.defer = defer;
  13209. lodash.delay = delay;
  13210. lodash.difference = difference;
  13211. lodash.drop = drop;
  13212. lodash.dropRight = dropRight;
  13213. lodash.dropRightWhile = dropRightWhile;
  13214. lodash.dropWhile = dropWhile;
  13215. lodash.fill = fill;
  13216. lodash.filter = filter;
  13217. lodash.flatten = flatten;
  13218. lodash.flattenDeep = flattenDeep;
  13219. lodash.flow = flow;
  13220. lodash.flowRight = flowRight;
  13221. lodash.forEach = forEach;
  13222. lodash.forEachRight = forEachRight;
  13223. lodash.forIn = forIn;
  13224. lodash.forInRight = forInRight;
  13225. lodash.forOwn = forOwn;
  13226. lodash.forOwnRight = forOwnRight;
  13227. lodash.functions = functions;
  13228. lodash.groupBy = groupBy;
  13229. lodash.indexBy = indexBy;
  13230. lodash.initial = initial;
  13231. lodash.intersection = intersection;
  13232. lodash.invert = invert;
  13233. lodash.invoke = invoke;
  13234. lodash.keys = keys;
  13235. lodash.keysIn = keysIn;
  13236. lodash.map = map;
  13237. lodash.mapKeys = mapKeys;
  13238. lodash.mapValues = mapValues;
  13239. lodash.matches = matches;
  13240. lodash.matchesProperty = matchesProperty;
  13241. lodash.memoize = memoize;
  13242. lodash.merge = merge;
  13243. lodash.method = method;
  13244. lodash.methodOf = methodOf;
  13245. lodash.mixin = mixin;
  13246. lodash.modArgs = modArgs;
  13247. lodash.negate = negate;
  13248. lodash.omit = omit;
  13249. lodash.once = once;
  13250. lodash.pairs = pairs;
  13251. lodash.partial = partial;
  13252. lodash.partialRight = partialRight;
  13253. lodash.partition = partition;
  13254. lodash.pick = pick;
  13255. lodash.pluck = pluck;
  13256. lodash.property = property;
  13257. lodash.propertyOf = propertyOf;
  13258. lodash.pull = pull;
  13259. lodash.pullAt = pullAt;
  13260. lodash.range = range;
  13261. lodash.rearg = rearg;
  13262. lodash.reject = reject;
  13263. lodash.remove = remove;
  13264. lodash.rest = rest;
  13265. lodash.restParam = restParam;
  13266. lodash.set = set;
  13267. lodash.shuffle = shuffle;
  13268. lodash.slice = slice;
  13269. lodash.sortBy = sortBy;
  13270. lodash.sortByAll = sortByAll;
  13271. lodash.sortByOrder = sortByOrder;
  13272. lodash.spread = spread;
  13273. lodash.take = take;
  13274. lodash.takeRight = takeRight;
  13275. lodash.takeRightWhile = takeRightWhile;
  13276. lodash.takeWhile = takeWhile;
  13277. lodash.tap = tap;
  13278. lodash.throttle = throttle;
  13279. lodash.thru = thru;
  13280. lodash.times = times;
  13281. lodash.toArray = toArray;
  13282. lodash.toPlainObject = toPlainObject;
  13283. lodash.transform = transform;
  13284. lodash.union = union;
  13285. lodash.uniq = uniq;
  13286. lodash.unzip = unzip;
  13287. lodash.unzipWith = unzipWith;
  13288. lodash.values = values;
  13289. lodash.valuesIn = valuesIn;
  13290. lodash.where = where;
  13291. lodash.without = without;
  13292. lodash.wrap = wrap;
  13293. lodash.xor = xor;
  13294. lodash.zip = zip;
  13295. lodash.zipObject = zipObject;
  13296. lodash.zipWith = zipWith;
  13297. // Add aliases.
  13298. lodash.backflow = flowRight;
  13299. lodash.collect = map;
  13300. lodash.compose = flowRight;
  13301. lodash.each = forEach;
  13302. lodash.eachRight = forEachRight;
  13303. lodash.extend = assign;
  13304. lodash.iteratee = callback;
  13305. lodash.methods = functions;
  13306. lodash.object = zipObject;
  13307. lodash.select = filter;
  13308. lodash.tail = rest;
  13309. lodash.unique = uniq;
  13310. // Add functions to `lodash.prototype`.
  13311. mixin(lodash, lodash);
  13312. /*------------------------------------------------------------------------*/
  13313. // Add functions that return unwrapped values when chaining.
  13314. lodash.add = add;
  13315. lodash.attempt = attempt;
  13316. lodash.camelCase = camelCase;
  13317. lodash.capitalize = capitalize;
  13318. lodash.ceil = ceil;
  13319. lodash.clone = clone;
  13320. lodash.cloneDeep = cloneDeep;
  13321. lodash.deburr = deburr;
  13322. lodash.endsWith = endsWith;
  13323. lodash.escape = escape;
  13324. lodash.escapeRegExp = escapeRegExp;
  13325. lodash.every = every;
  13326. lodash.find = find;
  13327. lodash.findIndex = findIndex;
  13328. lodash.findKey = findKey;
  13329. lodash.findLast = findLast;
  13330. lodash.findLastIndex = findLastIndex;
  13331. lodash.findLastKey = findLastKey;
  13332. lodash.findWhere = findWhere;
  13333. lodash.first = first;
  13334. lodash.floor = floor;
  13335. lodash.get = get;
  13336. lodash.gt = gt;
  13337. lodash.gte = gte;
  13338. lodash.has = has;
  13339. lodash.identity = identity;
  13340. lodash.includes = includes;
  13341. lodash.indexOf = indexOf;
  13342. lodash.inRange = inRange;
  13343. lodash.isArguments = isArguments;
  13344. lodash.isArray = isArray;
  13345. lodash.isBoolean = isBoolean;
  13346. lodash.isDate = isDate;
  13347. lodash.isElement = isElement;
  13348. lodash.isEmpty = isEmpty;
  13349. lodash.isEqual = isEqual;
  13350. lodash.isError = isError;
  13351. lodash.isFinite = isFinite;
  13352. lodash.isFunction = isFunction;
  13353. lodash.isMatch = isMatch;
  13354. lodash.isNaN = isNaN;
  13355. lodash.isNative = isNative;
  13356. lodash.isNull = isNull;
  13357. lodash.isNumber = isNumber;
  13358. lodash.isObject = isObject;
  13359. lodash.isPlainObject = isPlainObject;
  13360. lodash.isRegExp = isRegExp;
  13361. lodash.isString = isString;
  13362. lodash.isTypedArray = isTypedArray;
  13363. lodash.isUndefined = isUndefined;
  13364. lodash.kebabCase = kebabCase;
  13365. lodash.last = last;
  13366. lodash.lastIndexOf = lastIndexOf;
  13367. lodash.lt = lt;
  13368. lodash.lte = lte;
  13369. lodash.max = max;
  13370. lodash.min = min;
  13371. lodash.noConflict = noConflict;
  13372. lodash.noop = noop;
  13373. lodash.now = now;
  13374. lodash.pad = pad;
  13375. lodash.padLeft = padLeft;
  13376. lodash.padRight = padRight;
  13377. lodash.parseInt = parseInt;
  13378. lodash.random = random;
  13379. lodash.reduce = reduce;
  13380. lodash.reduceRight = reduceRight;
  13381. lodash.repeat = repeat;
  13382. lodash.result = result;
  13383. lodash.round = round;
  13384. lodash.runInContext = runInContext;
  13385. lodash.size = size;
  13386. lodash.snakeCase = snakeCase;
  13387. lodash.some = some;
  13388. lodash.sortedIndex = sortedIndex;
  13389. lodash.sortedLastIndex = sortedLastIndex;
  13390. lodash.startCase = startCase;
  13391. lodash.startsWith = startsWith;
  13392. lodash.sum = sum;
  13393. lodash.template = template;
  13394. lodash.trim = trim;
  13395. lodash.trimLeft = trimLeft;
  13396. lodash.trimRight = trimRight;
  13397. lodash.trunc = trunc;
  13398. lodash.unescape = unescape;
  13399. lodash.uniqueId = uniqueId;
  13400. lodash.words = words;
  13401. // Add aliases.
  13402. lodash.all = every;
  13403. lodash.any = some;
  13404. lodash.contains = includes;
  13405. lodash.eq = isEqual;
  13406. lodash.detect = find;
  13407. lodash.foldl = reduce;
  13408. lodash.foldr = reduceRight;
  13409. lodash.head = first;
  13410. lodash.include = includes;
  13411. lodash.inject = reduce;
  13412. mixin(lodash, (function() {
  13413. var source = {};
  13414. baseForOwn(lodash, function(func, methodName) {
  13415. if (!lodash.prototype[methodName]) {
  13416. source[methodName] = func;
  13417. }
  13418. });
  13419. return source;
  13420. }()), false);
  13421. /*------------------------------------------------------------------------*/
  13422. // Add functions capable of returning wrapped and unwrapped values when chaining.
  13423. lodash.sample = sample;
  13424. lodash.prototype.sample = function(n) {
  13425. if (!this.__chain__ && n == null) {
  13426. return sample(this.value());
  13427. }
  13428. return this.thru(function(value) {
  13429. return sample(value, n);
  13430. });
  13431. };
  13432. /*------------------------------------------------------------------------*/
  13433. /**
  13434. * The semantic version number.
  13435. *
  13436. * @static
  13437. * @memberOf _
  13438. * @type string
  13439. */
  13440. lodash.VERSION = VERSION;
  13441. // Assign default placeholders.
  13442. arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {
  13443. lodash[methodName].placeholder = lodash;
  13444. });
  13445. // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.
  13446. arrayEach(['drop', 'take'], function(methodName, index) {
  13447. LazyWrapper.prototype[methodName] = function(n) {
  13448. var filtered = this.__filtered__;
  13449. if (filtered && !index) {
  13450. return new LazyWrapper(this);
  13451. }
  13452. n = n == null ? 1 : nativeMax(nativeFloor(n) || 0, 0);
  13453. var result = this.clone();
  13454. if (filtered) {
  13455. result.__takeCount__ = nativeMin(result.__takeCount__, n);
  13456. } else {
  13457. result.__views__.push({ 'size': n, 'type': methodName + (result.__dir__ < 0 ? 'Right' : '') });
  13458. }
  13459. return result;
  13460. };
  13461. LazyWrapper.prototype[methodName + 'Right'] = function(n) {
  13462. return this.reverse()[methodName](n).reverse();
  13463. };
  13464. });
  13465. // Add `LazyWrapper` methods that accept an `iteratee` value.
  13466. arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {
  13467. var type = index + 1,
  13468. isFilter = type != LAZY_MAP_FLAG;
  13469. LazyWrapper.prototype[methodName] = function(iteratee, thisArg) {
  13470. var result = this.clone();
  13471. result.__iteratees__.push({ 'iteratee': getCallback(iteratee, thisArg, 1), 'type': type });
  13472. result.__filtered__ = result.__filtered__ || isFilter;
  13473. return result;
  13474. };
  13475. });
  13476. // Add `LazyWrapper` methods for `_.first` and `_.last`.
  13477. arrayEach(['first', 'last'], function(methodName, index) {
  13478. var takeName = 'take' + (index ? 'Right' : '');
  13479. LazyWrapper.prototype[methodName] = function() {
  13480. return this[takeName](1).value()[0];
  13481. };
  13482. });
  13483. // Add `LazyWrapper` methods for `_.initial` and `_.rest`.
  13484. arrayEach(['initial', 'rest'], function(methodName, index) {
  13485. var dropName = 'drop' + (index ? '' : 'Right');
  13486. LazyWrapper.prototype[methodName] = function() {
  13487. return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);
  13488. };
  13489. });
  13490. // Add `LazyWrapper` methods for `_.pluck` and `_.where`.
  13491. arrayEach(['pluck', 'where'], function(methodName, index) {
  13492. var operationName = index ? 'filter' : 'map',
  13493. createCallback = index ? baseMatches : property;
  13494. LazyWrapper.prototype[methodName] = function(value) {
  13495. return this[operationName](createCallback(value));
  13496. };
  13497. });
  13498. LazyWrapper.prototype.compact = function() {
  13499. return this.filter(identity);
  13500. };
  13501. LazyWrapper.prototype.reject = function(predicate, thisArg) {
  13502. predicate = getCallback(predicate, thisArg, 1);
  13503. return this.filter(function(value) {
  13504. return !predicate(value);
  13505. });
  13506. };
  13507. LazyWrapper.prototype.slice = function(start, end) {
  13508. start = start == null ? 0 : (+start || 0);
  13509. var result = this;
  13510. if (result.__filtered__ && (start > 0 || end < 0)) {
  13511. return new LazyWrapper(result);
  13512. }
  13513. if (start < 0) {
  13514. result = result.takeRight(-start);
  13515. } else if (start) {
  13516. result = result.drop(start);
  13517. }
  13518. if (end !== undefined) {
  13519. end = (+end || 0);
  13520. result = end < 0 ? result.dropRight(-end) : result.take(end - start);
  13521. }
  13522. return result;
  13523. };
  13524. LazyWrapper.prototype.takeRightWhile = function(predicate, thisArg) {
  13525. return this.reverse().takeWhile(predicate, thisArg).reverse();
  13526. };
  13527. LazyWrapper.prototype.toArray = function() {
  13528. return this.take(POSITIVE_INFINITY);
  13529. };
  13530. // Add `LazyWrapper` methods to `lodash.prototype`.
  13531. baseForOwn(LazyWrapper.prototype, function(func, methodName) {
  13532. var checkIteratee = /^(?:filter|map|reject)|While$/.test(methodName),
  13533. retUnwrapped = /^(?:first|last)$/.test(methodName),
  13534. lodashFunc = lodash[retUnwrapped ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName];
  13535. if (!lodashFunc) {
  13536. return;
  13537. }
  13538. lodash.prototype[methodName] = function() {
  13539. var args = retUnwrapped ? [1] : arguments,
  13540. chainAll = this.__chain__,
  13541. value = this.__wrapped__,
  13542. isHybrid = !!this.__actions__.length,
  13543. isLazy = value instanceof LazyWrapper,
  13544. iteratee = args[0],
  13545. useLazy = isLazy || isArray(value);
  13546. if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {
  13547. // Avoid lazy use if the iteratee has a "length" value other than `1`.
  13548. isLazy = useLazy = false;
  13549. }
  13550. var interceptor = function(value) {
  13551. return (retUnwrapped && chainAll)
  13552. ? lodashFunc(value, 1)[0]
  13553. : lodashFunc.apply(undefined, arrayPush([value], args));
  13554. };
  13555. var action = { 'func': thru, 'args': [interceptor], 'thisArg': undefined },
  13556. onlyLazy = isLazy && !isHybrid;
  13557. if (retUnwrapped && !chainAll) {
  13558. if (onlyLazy) {
  13559. value = value.clone();
  13560. value.__actions__.push(action);
  13561. return func.call(value);
  13562. }
  13563. return lodashFunc.call(undefined, this.value())[0];
  13564. }
  13565. if (!retUnwrapped && useLazy) {
  13566. value = onlyLazy ? value : new LazyWrapper(this);
  13567. var result = func.apply(value, args);
  13568. result.__actions__.push(action);
  13569. return new LodashWrapper(result, chainAll);
  13570. }
  13571. return this.thru(interceptor);
  13572. };
  13573. });
  13574. // Add `Array` and `String` methods to `lodash.prototype`.
  13575. arrayEach(['join', 'pop', 'push', 'replace', 'shift', 'sort', 'splice', 'split', 'unshift'], function(methodName) {
  13576. var func = (/^(?:replace|split)$/.test(methodName) ? stringProto : arrayProto)[methodName],
  13577. chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',
  13578. retUnwrapped = /^(?:join|pop|replace|shift)$/.test(methodName);
  13579. lodash.prototype[methodName] = function() {
  13580. var args = arguments;
  13581. if (retUnwrapped && !this.__chain__) {
  13582. return func.apply(this.value(), args);
  13583. }
  13584. return this[chainName](function(value) {
  13585. return func.apply(value, args);
  13586. });
  13587. };
  13588. });
  13589. // Map minified function names to their real names.
  13590. baseForOwn(LazyWrapper.prototype, function(func, methodName) {
  13591. var lodashFunc = lodash[methodName];
  13592. if (lodashFunc) {
  13593. var key = lodashFunc.name,
  13594. names = realNames[key] || (realNames[key] = []);
  13595. names.push({ 'name': methodName, 'func': lodashFunc });
  13596. }
  13597. });
  13598. realNames[createHybridWrapper(undefined, BIND_KEY_FLAG).name] = [{ 'name': 'wrapper', 'func': undefined }];
  13599. // Add functions to the lazy wrapper.
  13600. LazyWrapper.prototype.clone = lazyClone;
  13601. LazyWrapper.prototype.reverse = lazyReverse;
  13602. LazyWrapper.prototype.value = lazyValue;
  13603. // Add chaining functions to the `lodash` wrapper.
  13604. lodash.prototype.chain = wrapperChain;
  13605. lodash.prototype.commit = wrapperCommit;
  13606. lodash.prototype.concat = wrapperConcat;
  13607. lodash.prototype.plant = wrapperPlant;
  13608. lodash.prototype.reverse = wrapperReverse;
  13609. lodash.prototype.toString = wrapperToString;
  13610. lodash.prototype.run = lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;
  13611. // Add function aliases to the `lodash` wrapper.
  13612. lodash.prototype.collect = lodash.prototype.map;
  13613. lodash.prototype.head = lodash.prototype.first;
  13614. lodash.prototype.select = lodash.prototype.filter;
  13615. lodash.prototype.tail = lodash.prototype.rest;
  13616. return lodash;
  13617. }
  13618. /*--------------------------------------------------------------------------*/
  13619. // Export lodash.
  13620. var _ = runInContext();
  13621. // Some AMD build optimizers like r.js check for condition patterns like the following:
  13622. if (true) {
  13623. // Expose lodash to the global object when an AMD loader is present to avoid
  13624. // errors in cases where lodash is loaded by a script tag and not intended
  13625. // as an AMD module. See http://requirejs.org/docs/errors.html#mismatch for
  13626. // more details.
  13627. root._ = _;
  13628. // Define as an anonymous module so, through path mapping, it can be
  13629. // referenced as the "underscore" module.
  13630. !(__WEBPACK_AMD_DEFINE_RESULT__ = function() {
  13631. return _;
  13632. }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
  13633. }
  13634. // Check for `exports` after `define` in case a build optimizer adds an `exports` object.
  13635. else if (freeExports && freeModule) {
  13636. // Export for Node.js or RingoJS.
  13637. if (moduleExports) {
  13638. (freeModule.exports = _)._ = _;
  13639. }
  13640. // Export for Rhino with CommonJS support.
  13641. else {
  13642. freeExports._ = _;
  13643. }
  13644. }
  13645. else {
  13646. // Export for a browser or Rhino.
  13647. root._ = _;
  13648. }
  13649. }.call(this));
  13650. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(8)(module), (function() { return this; }())))
  13651. /***/ },
  13652. /* 8 */
  13653. /***/ function(module, exports) {
  13654. module.exports = function(module) {
  13655. if(!module.webpackPolyfill) {
  13656. module.deprecate = function() {};
  13657. module.paths = [];
  13658. // module.parent = undefined by default
  13659. module.children = [];
  13660. module.webpackPolyfill = 1;
  13661. }
  13662. return module;
  13663. }
  13664. /***/ },
  13665. /* 9 */
  13666. /***/ function(module, exports, __webpack_require__) {
  13667. /* jslint node: true */
  13668. 'use strict';
  13669. var _ = __webpack_require__(7);
  13670. var FontWrapper = __webpack_require__(10);
  13671. function typeName(bold, italics){
  13672. var type = 'normal';
  13673. if (bold && italics) type = 'bolditalics';
  13674. else if (bold) type = 'bold';
  13675. else if (italics) type = 'italics';
  13676. return type;
  13677. }
  13678. function FontProvider(fontDescriptors, pdfDoc) {
  13679. this.fonts = {};
  13680. this.pdfDoc = pdfDoc;
  13681. this.fontWrappers = {};
  13682. for(var font in fontDescriptors) {
  13683. if (fontDescriptors.hasOwnProperty(font)) {
  13684. var fontDef = fontDescriptors[font];
  13685. this.fonts[font] = {
  13686. normal: fontDef.normal,
  13687. bold: fontDef.bold,
  13688. italics: fontDef.italics,
  13689. bolditalics: fontDef.bolditalics
  13690. };
  13691. }
  13692. }
  13693. }
  13694. FontProvider.prototype.provideFont = function(familyName, bold, italics) {
  13695. var type = typeName(bold, italics);
  13696. if (!this.fonts[familyName] || !this.fonts[familyName][type]) {
  13697. throw new Error('Font \''+ familyName + '\' in style \''+type+ '\' is not defined in the font section of the document definition.');
  13698. }
  13699. this.fontWrappers[familyName] = this.fontWrappers[familyName] || {};
  13700. if (!this.fontWrappers[familyName][type]) {
  13701. this.fontWrappers[familyName][type] = new FontWrapper(this.pdfDoc, this.fonts[familyName][type], familyName + '(' + type + ')');
  13702. }
  13703. return this.fontWrappers[familyName][type];
  13704. };
  13705. FontProvider.prototype.setFontRefsToPdfDoc = function(){
  13706. var self = this;
  13707. _.each(self.fontWrappers, function(fontFamily) {
  13708. _.each(fontFamily, function(fontWrapper){
  13709. _.each(fontWrapper.pdfFonts, function(font){
  13710. if (!self.pdfDoc.page.fonts[font.id]) {
  13711. self.pdfDoc.page.fonts[font.id] = font.ref();
  13712. }
  13713. });
  13714. });
  13715. });
  13716. };
  13717. module.exports = FontProvider;
  13718. /***/ },
  13719. /* 10 */
  13720. /***/ function(module, exports, __webpack_require__) {
  13721. /* jslint node: true */
  13722. 'use strict';
  13723. var _ = __webpack_require__(7);
  13724. function FontWrapper(pdfkitDoc, path, fontName){
  13725. this.MAX_CHAR_TYPES = 92;
  13726. this.pdfkitDoc = pdfkitDoc;
  13727. this.path = path;
  13728. this.pdfFonts = [];
  13729. this.charCatalogue = [];
  13730. this.name = fontName;
  13731. Object.defineProperty(this, 'ascender', {
  13732. get: function () {
  13733. var font = this.getFont(0);
  13734. return font.ascender;
  13735. }
  13736. });
  13737. Object.defineProperty(this, 'decender', {
  13738. get: function () {
  13739. var font = this.getFont(0);
  13740. return font.decender;
  13741. }
  13742. });
  13743. }
  13744. // private
  13745. FontWrapper.prototype.getFont = function(index){
  13746. if(!this.pdfFonts[index]){
  13747. var pseudoName = this.name + index;
  13748. if(this.postscriptName){
  13749. delete this.pdfkitDoc._fontFamilies[this.postscriptName];
  13750. }
  13751. this.pdfFonts[index] = this.pdfkitDoc.font(this.path, pseudoName)._font;
  13752. if(!this.postscriptName){
  13753. this.postscriptName = this.pdfFonts[index].name;
  13754. }
  13755. }
  13756. return this.pdfFonts[index];
  13757. };
  13758. // public
  13759. FontWrapper.prototype.widthOfString = function(){
  13760. var font = this.getFont(0);
  13761. return font.widthOfString.apply(font, arguments);
  13762. };
  13763. FontWrapper.prototype.lineHeight = function(){
  13764. var font = this.getFont(0);
  13765. return font.lineHeight.apply(font, arguments);
  13766. };
  13767. FontWrapper.prototype.ref = function(){
  13768. var font = this.getFont(0);
  13769. return font.ref.apply(font, arguments);
  13770. };
  13771. var toCharCode = function(char){
  13772. return char.charCodeAt(0);
  13773. };
  13774. FontWrapper.prototype.encode = function(text){
  13775. var self = this;
  13776. var charTypesInInline = _.chain(text.split('')).map(toCharCode).uniq().value();
  13777. if (charTypesInInline.length > self.MAX_CHAR_TYPES) {
  13778. throw new Error('Inline has more than '+ self.MAX_CHAR_TYPES + ': ' + text + ' different character types and therefore cannot be properly embedded into pdf.');
  13779. }
  13780. var characterFitInFontWithIndex = function (charCatalogue) {
  13781. return _.uniq(charCatalogue.concat(charTypesInInline)).length <= self.MAX_CHAR_TYPES;
  13782. };
  13783. var index = _.findIndex(self.charCatalogue, characterFitInFontWithIndex);
  13784. if(index < 0){
  13785. index = self.charCatalogue.length;
  13786. self.charCatalogue[index] = [];
  13787. }
  13788. var font = self.getFont(index);
  13789. font.use(text);
  13790. _.each(charTypesInInline, function(charCode){
  13791. if(!_.includes(self.charCatalogue[index], charCode)){
  13792. self.charCatalogue[index].push(charCode);
  13793. }
  13794. });
  13795. var encodedText = _.map(font.encode(text), function (char) {
  13796. return char.charCodeAt(0).toString(16);
  13797. }).join('');
  13798. return {
  13799. encodedText: encodedText,
  13800. fontId: font.id
  13801. };
  13802. };
  13803. module.exports = FontWrapper;
  13804. /***/ },
  13805. /* 11 */
  13806. /***/ function(module, exports, __webpack_require__) {
  13807. /* jslint node: true */
  13808. 'use strict';
  13809. var _ = __webpack_require__(7);
  13810. var TraversalTracker = __webpack_require__(12);
  13811. var DocMeasure = __webpack_require__(13);
  13812. var DocumentContext = __webpack_require__(19);
  13813. var PageElementWriter = __webpack_require__(20);
  13814. var ColumnCalculator = __webpack_require__(16);
  13815. var TableProcessor = __webpack_require__(23);
  13816. var Line = __webpack_require__(22);
  13817. var pack = __webpack_require__(17).pack;
  13818. var offsetVector = __webpack_require__(17).offsetVector;
  13819. var fontStringify = __webpack_require__(17).fontStringify;
  13820. var isFunction = __webpack_require__(17).isFunction;
  13821. var TextTools = __webpack_require__(14);
  13822. var StyleContextStack = __webpack_require__(15);
  13823. function addAll(target, otherArray){
  13824. _.each(otherArray, function(item){
  13825. target.push(item);
  13826. });
  13827. }
  13828. /**
  13829. * Creates an instance of LayoutBuilder - layout engine which turns document-definition-object
  13830. * into a set of pages, lines, inlines and vectors ready to be rendered into a PDF
  13831. *
  13832. * @param {Object} pageSize - an object defining page width and height
  13833. * @param {Object} pageMargins - an object defining top, left, right and bottom margins
  13834. */
  13835. function LayoutBuilder(pageSize, pageMargins, imageMeasure) {
  13836. this.pageSize = pageSize;
  13837. this.pageMargins = pageMargins;
  13838. this.tracker = new TraversalTracker();
  13839. this.imageMeasure = imageMeasure;
  13840. this.tableLayouts = {};
  13841. }
  13842. LayoutBuilder.prototype.registerTableLayouts = function (tableLayouts) {
  13843. this.tableLayouts = pack(this.tableLayouts, tableLayouts);
  13844. };
  13845. /**
  13846. * Executes layout engine on document-definition-object and creates an array of pages
  13847. * containing positioned Blocks, Lines and inlines
  13848. *
  13849. * @param {Object} docStructure document-definition-object
  13850. * @param {Object} fontProvider font provider
  13851. * @param {Object} styleDictionary dictionary with style definitions
  13852. * @param {Object} defaultStyle default style definition
  13853. * @return {Array} an array of pages
  13854. */
  13855. LayoutBuilder.prototype.layoutDocument = function (docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark, pageBreakBeforeFct) {
  13856. function addPageBreaksIfNecessary(linearNodeList, pages) {
  13857. if(!isFunction(pageBreakBeforeFct)){
  13858. return false;
  13859. }
  13860. linearNodeList = _.reject(linearNodeList, function(node){
  13861. return _.isEmpty(node.positions);
  13862. });
  13863. _.each(linearNodeList, function(node) {
  13864. var nodeInfo = _.pick(node, [
  13865. 'id', 'text', 'ul', 'ol', 'table', 'image', 'qr', 'canvas', 'columns',
  13866. 'headlineLevel', 'style', 'pageBreak', 'pageOrientation',
  13867. 'width', 'height'
  13868. ]);
  13869. nodeInfo.startPosition = _.first(node.positions);
  13870. nodeInfo.pageNumbers = _.chain(node.positions).map('pageNumber').uniq().value();
  13871. nodeInfo.pages = pages.length;
  13872. nodeInfo.stack = _.isArray(node.stack);
  13873. node.nodeInfo = nodeInfo;
  13874. });
  13875. return _.any(linearNodeList, function (node, index, followingNodeList) {
  13876. if (node.pageBreak !== 'before' && !node.pageBreakCalculated) {
  13877. node.pageBreakCalculated = true;
  13878. var pageNumber = _.first(node.nodeInfo.pageNumbers);
  13879. var followingNodesOnPage = _.chain(followingNodeList).drop(index + 1).filter(function (node0) {
  13880. return _.contains(node0.nodeInfo.pageNumbers, pageNumber);
  13881. }).value();
  13882. var nodesOnNextPage = _.chain(followingNodeList).drop(index + 1).filter(function (node0) {
  13883. return _.contains(node0.nodeInfo.pageNumbers, pageNumber + 1);
  13884. }).value();
  13885. var previousNodesOnPage = _.chain(followingNodeList).take(index).filter(function (node0) {
  13886. return _.contains(node0.nodeInfo.pageNumbers, pageNumber);
  13887. }).value();
  13888. if (pageBreakBeforeFct(node.nodeInfo,
  13889. _.map(followingNodesOnPage, 'nodeInfo'),
  13890. _.map(nodesOnNextPage, 'nodeInfo'),
  13891. _.map(previousNodesOnPage, 'nodeInfo'))) {
  13892. node.pageBreak = 'before';
  13893. return true;
  13894. }
  13895. }
  13896. });
  13897. }
  13898. this.docMeasure = new DocMeasure(fontProvider, styleDictionary, defaultStyle, this.imageMeasure, this.tableLayouts, images);
  13899. function resetXYs(result) {
  13900. _.each(result.linearNodeList, function (node) {
  13901. node.resetXY();
  13902. });
  13903. }
  13904. var result = this.tryLayoutDocument(docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark);
  13905. while(addPageBreaksIfNecessary(result.linearNodeList, result.pages)){
  13906. resetXYs(result);
  13907. result = this.tryLayoutDocument(docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark);
  13908. }
  13909. return result.pages;
  13910. };
  13911. LayoutBuilder.prototype.tryLayoutDocument = function (docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark, pageBreakBeforeFct) {
  13912. this.linearNodeList = [];
  13913. docStructure = this.docMeasure.measureDocument(docStructure);
  13914. this.writer = new PageElementWriter(
  13915. new DocumentContext(this.pageSize, this.pageMargins), this.tracker);
  13916. var _this = this;
  13917. this.writer.context().tracker.startTracking('pageAdded', function() {
  13918. _this.addBackground(background);
  13919. });
  13920. this.addBackground(background);
  13921. this.processNode(docStructure);
  13922. this.addHeadersAndFooters(header, footer);
  13923. /* jshint eqnull:true */
  13924. if(watermark != null)
  13925. this.addWatermark(watermark, fontProvider);
  13926. return {pages: this.writer.context().pages, linearNodeList: this.linearNodeList};
  13927. };
  13928. LayoutBuilder.prototype.addBackground = function(background) {
  13929. var backgroundGetter = isFunction(background) ? background : function() { return background; };
  13930. var pageBackground = backgroundGetter(this.writer.context().page + 1);
  13931. if (pageBackground) {
  13932. var pageSize = this.writer.context().getCurrentPage().pageSize;
  13933. this.writer.beginUnbreakableBlock(pageSize.width, pageSize.height);
  13934. this.processNode(this.docMeasure.measureDocument(pageBackground));
  13935. this.writer.commitUnbreakableBlock(0, 0);
  13936. }
  13937. };
  13938. LayoutBuilder.prototype.addStaticRepeatable = function(headerOrFooter, sizeFunction) {
  13939. this.addDynamicRepeatable(function() { return headerOrFooter; }, sizeFunction);
  13940. };
  13941. LayoutBuilder.prototype.addDynamicRepeatable = function(nodeGetter, sizeFunction) {
  13942. var pages = this.writer.context().pages;
  13943. for(var pageIndex = 0, l = pages.length; pageIndex < l; pageIndex++) {
  13944. this.writer.context().page = pageIndex;
  13945. var node = nodeGetter(pageIndex + 1, l);
  13946. if (node) {
  13947. var sizes = sizeFunction(this.writer.context().getCurrentPage().pageSize, this.pageMargins);
  13948. this.writer.beginUnbreakableBlock(sizes.width, sizes.height);
  13949. this.processNode(this.docMeasure.measureDocument(node));
  13950. this.writer.commitUnbreakableBlock(sizes.x, sizes.y);
  13951. }
  13952. }
  13953. };
  13954. LayoutBuilder.prototype.addHeadersAndFooters = function(header, footer) {
  13955. var headerSizeFct = function(pageSize, pageMargins){
  13956. return {
  13957. x: 0,
  13958. y: 0,
  13959. width: pageSize.width,
  13960. height: pageMargins.top
  13961. };
  13962. };
  13963. var footerSizeFct = function (pageSize, pageMargins) {
  13964. return {
  13965. x: 0,
  13966. y: pageSize.height - pageMargins.bottom,
  13967. width: pageSize.width,
  13968. height: pageMargins.bottom
  13969. };
  13970. };
  13971. if(isFunction(header)) {
  13972. this.addDynamicRepeatable(header, headerSizeFct);
  13973. } else if(header) {
  13974. this.addStaticRepeatable(header, headerSizeFct);
  13975. }
  13976. if(isFunction(footer)) {
  13977. this.addDynamicRepeatable(footer, footerSizeFct);
  13978. } else if(footer) {
  13979. this.addStaticRepeatable(footer, footerSizeFct);
  13980. }
  13981. };
  13982. LayoutBuilder.prototype.addWatermark = function(watermark, fontProvider){
  13983. var defaultFont = Object.getOwnPropertyNames(fontProvider.fonts)[0]; // TODO allow selection of other font
  13984. var watermarkObject = {
  13985. text: watermark,
  13986. font: fontProvider.provideFont(fontProvider[defaultFont], false, false),
  13987. size: getSize(this.pageSize, watermark, fontProvider)
  13988. };
  13989. var pages = this.writer.context().pages;
  13990. for(var i = 0, l = pages.length; i < l; i++) {
  13991. pages[i].watermark = watermarkObject;
  13992. }
  13993. function getSize(pageSize, watermark, fontProvider){
  13994. var width = pageSize.width;
  13995. var height = pageSize.height;
  13996. var targetWidth = Math.sqrt(width*width + height*height)*0.8; /* page diagnoal * sample factor */
  13997. var textTools = new TextTools(fontProvider);
  13998. var styleContextStack = new StyleContextStack();
  13999. var size;
  14000. /**
  14001. * Binary search the best font size.
  14002. * Initial bounds [0, 1000]
  14003. * Break when range < 1
  14004. */
  14005. var a = 0;
  14006. var b = 1000;
  14007. var c = (a+b)/2;
  14008. while(Math.abs(a - b) > 1){
  14009. styleContextStack.push({
  14010. fontSize: c
  14011. });
  14012. size = textTools.sizeOfString(watermark, styleContextStack);
  14013. if(size.width > targetWidth){
  14014. b = c;
  14015. c = (a+b)/2;
  14016. }
  14017. else if(size.width < targetWidth){
  14018. a = c;
  14019. c = (a+b)/2;
  14020. }
  14021. styleContextStack.pop();
  14022. }
  14023. /*
  14024. End binary search
  14025. */
  14026. return {size: size, fontSize: c};
  14027. }
  14028. };
  14029. function decorateNode(node){
  14030. var x = node.x, y = node.y;
  14031. node.positions = [];
  14032. _.each(node.canvas, function(vector){
  14033. var x = vector.x, y = vector.y, x1 = vector.x1, y1 = vector.y1, x2 = vector.x2, y2 = vector.y2;
  14034. vector.resetXY = function(){
  14035. vector.x = x;
  14036. vector.y = y;
  14037. vector.x1 = x1;
  14038. vector.y1 = y1;
  14039. vector.x2 = x2;
  14040. vector.y2 = y2;
  14041. };
  14042. });
  14043. node.resetXY = function(){
  14044. node.x = x;
  14045. node.y = y;
  14046. _.each(node.canvas, function(vector){
  14047. vector.resetXY();
  14048. });
  14049. };
  14050. }
  14051. LayoutBuilder.prototype.processNode = function(node) {
  14052. var self = this;
  14053. this.linearNodeList.push(node);
  14054. decorateNode(node);
  14055. applyMargins(function() {
  14056. var absPosition = node.absolutePosition;
  14057. if(absPosition){
  14058. self.writer.context().beginDetachedBlock();
  14059. self.writer.context().moveTo(absPosition.x || 0, absPosition.y || 0);
  14060. }
  14061. if (node.stack) {
  14062. self.processVerticalContainer(node);
  14063. } else if (node.columns) {
  14064. self.processColumns(node);
  14065. } else if (node.ul) {
  14066. self.processList(false, node);
  14067. } else if (node.ol) {
  14068. self.processList(true, node);
  14069. } else if (node.table) {
  14070. self.processTable(node);
  14071. } else if (node.text !== undefined) {
  14072. self.processLeaf(node);
  14073. } else if (node.image) {
  14074. self.processImage(node);
  14075. } else if (node.canvas) {
  14076. self.processCanvas(node);
  14077. } else if (node.qr) {
  14078. self.processQr(node);
  14079. }else if (!node._span) {
  14080. throw 'Unrecognized document structure: ' + JSON.stringify(node, fontStringify);
  14081. }
  14082. if(absPosition){
  14083. self.writer.context().endDetachedBlock();
  14084. }
  14085. });
  14086. function applyMargins(callback) {
  14087. var margin = node._margin;
  14088. if (node.pageBreak === 'before') {
  14089. self.writer.moveToNextPage(node.pageOrientation);
  14090. }
  14091. if (margin) {
  14092. self.writer.context().moveDown(margin[1]);
  14093. self.writer.context().addMargin(margin[0], margin[2]);
  14094. }
  14095. callback();
  14096. if(margin) {
  14097. self.writer.context().addMargin(-margin[0], -margin[2]);
  14098. self.writer.context().moveDown(margin[3]);
  14099. }
  14100. if (node.pageBreak === 'after') {
  14101. self.writer.moveToNextPage(node.pageOrientation);
  14102. }
  14103. }
  14104. };
  14105. // vertical container
  14106. LayoutBuilder.prototype.processVerticalContainer = function(node) {
  14107. var self = this;
  14108. node.stack.forEach(function(item) {
  14109. self.processNode(item);
  14110. addAll(node.positions, item.positions);
  14111. //TODO: paragraph gap
  14112. });
  14113. };
  14114. // columns
  14115. LayoutBuilder.prototype.processColumns = function(columnNode) {
  14116. var columns = columnNode.columns;
  14117. var availableWidth = this.writer.context().availableWidth;
  14118. var gaps = gapArray(columnNode._gap);
  14119. if (gaps) availableWidth -= (gaps.length - 1) * columnNode._gap;
  14120. ColumnCalculator.buildColumnWidths(columns, availableWidth);
  14121. var result = this.processRow(columns, columns, gaps);
  14122. addAll(columnNode.positions, result.positions);
  14123. function gapArray(gap) {
  14124. if (!gap) return null;
  14125. var gaps = [];
  14126. gaps.push(0);
  14127. for(var i = columns.length - 1; i > 0; i--) {
  14128. gaps.push(gap);
  14129. }
  14130. return gaps;
  14131. }
  14132. };
  14133. LayoutBuilder.prototype.processRow = function(columns, widths, gaps, tableBody, tableRow) {
  14134. var self = this;
  14135. var pageBreaks = [], positions = [];
  14136. this.tracker.auto('pageChanged', storePageBreakData, function() {
  14137. widths = widths || columns;
  14138. self.writer.context().beginColumnGroup();
  14139. for(var i = 0, l = columns.length; i < l; i++) {
  14140. var column = columns[i];
  14141. var width = widths[i]._calcWidth;
  14142. var leftOffset = colLeftOffset(i);
  14143. if (column.colSpan && column.colSpan > 1) {
  14144. for(var j = 1; j < column.colSpan; j++) {
  14145. width += widths[++i]._calcWidth + gaps[i];
  14146. }
  14147. }
  14148. self.writer.context().beginColumn(width, leftOffset, getEndingCell(column, i));
  14149. if (!column._span) {
  14150. self.processNode(column);
  14151. addAll(positions, column.positions);
  14152. } else if (column._columnEndingContext) {
  14153. // row-span ending
  14154. self.writer.context().markEnding(column);
  14155. }
  14156. }
  14157. self.writer.context().completeColumnGroup();
  14158. });
  14159. return {pageBreaks: pageBreaks, positions: positions};
  14160. function storePageBreakData(data) {
  14161. var pageDesc;
  14162. for(var i = 0, l = pageBreaks.length; i < l; i++) {
  14163. var desc = pageBreaks[i];
  14164. if (desc.prevPage === data.prevPage) {
  14165. pageDesc = desc;
  14166. break;
  14167. }
  14168. }
  14169. if (!pageDesc) {
  14170. pageDesc = data;
  14171. pageBreaks.push(pageDesc);
  14172. }
  14173. pageDesc.prevY = Math.max(pageDesc.prevY, data.prevY);
  14174. pageDesc.y = Math.min(pageDesc.y, data.y);
  14175. }
  14176. function colLeftOffset(i) {
  14177. if (gaps && gaps.length > i) return gaps[i];
  14178. return 0;
  14179. }
  14180. function getEndingCell(column, columnIndex) {
  14181. if (column.rowSpan && column.rowSpan > 1) {
  14182. var endingRow = tableRow + column.rowSpan - 1;
  14183. if (endingRow >= tableBody.length) throw 'Row span for column ' + columnIndex + ' (with indexes starting from 0) exceeded row count';
  14184. return tableBody[endingRow][columnIndex];
  14185. }
  14186. return null;
  14187. }
  14188. };
  14189. // lists
  14190. LayoutBuilder.prototype.processList = function(orderedList, node) {
  14191. var self = this,
  14192. items = orderedList ? node.ol : node.ul,
  14193. gapSize = node._gapSize;
  14194. this.writer.context().addMargin(gapSize.width);
  14195. var nextMarker;
  14196. this.tracker.auto('lineAdded', addMarkerToFirstLeaf, function() {
  14197. items.forEach(function(item) {
  14198. nextMarker = item.listMarker;
  14199. self.processNode(item);
  14200. addAll(node.positions, item.positions);
  14201. });
  14202. });
  14203. this.writer.context().addMargin(-gapSize.width);
  14204. function addMarkerToFirstLeaf(line) {
  14205. // I'm not very happy with the way list processing is implemented
  14206. // (both code and algorithm should be rethinked)
  14207. if (nextMarker) {
  14208. var marker = nextMarker;
  14209. nextMarker = null;
  14210. if (marker.canvas) {
  14211. var vector = marker.canvas[0];
  14212. offsetVector(vector, -marker._minWidth, 0);
  14213. self.writer.addVector(vector);
  14214. } else {
  14215. var markerLine = new Line(self.pageSize.width);
  14216. markerLine.addInline(marker._inlines[0]);
  14217. markerLine.x = -marker._minWidth;
  14218. markerLine.y = line.getAscenderHeight() - markerLine.getAscenderHeight();
  14219. self.writer.addLine(markerLine, true);
  14220. }
  14221. }
  14222. }
  14223. };
  14224. // tables
  14225. LayoutBuilder.prototype.processTable = function(tableNode) {
  14226. var processor = new TableProcessor(tableNode);
  14227. processor.beginTable(this.writer);
  14228. for(var i = 0, l = tableNode.table.body.length; i < l; i++) {
  14229. processor.beginRow(i, this.writer);
  14230. var result = this.processRow(tableNode.table.body[i], tableNode.table.widths, tableNode._offsets.offsets, tableNode.table.body, i);
  14231. addAll(tableNode.positions, result.positions);
  14232. processor.endRow(i, this.writer, result.pageBreaks);
  14233. }
  14234. processor.endTable(this.writer);
  14235. };
  14236. // leafs (texts)
  14237. LayoutBuilder.prototype.processLeaf = function(node) {
  14238. var line = this.buildNextLine(node);
  14239. var currentHeight = (line) ? line.getHeight() : 0;
  14240. var maxHeight = node.maxHeight || -1;
  14241. while (line && (maxHeight === -1 || currentHeight < maxHeight)) {
  14242. var positions = this.writer.addLine(line);
  14243. node.positions.push(positions);
  14244. line = this.buildNextLine(node);
  14245. if (line) {
  14246. currentHeight += line.getHeight();
  14247. }
  14248. }
  14249. };
  14250. LayoutBuilder.prototype.buildNextLine = function(textNode) {
  14251. if (!textNode._inlines || textNode._inlines.length === 0) return null;
  14252. var line = new Line(this.writer.context().availableWidth);
  14253. while(textNode._inlines && textNode._inlines.length > 0 && line.hasEnoughSpaceForInline(textNode._inlines[0])) {
  14254. line.addInline(textNode._inlines.shift());
  14255. }
  14256. line.lastLineInParagraph = textNode._inlines.length === 0;
  14257. return line;
  14258. };
  14259. // images
  14260. LayoutBuilder.prototype.processImage = function(node) {
  14261. var position = this.writer.addImage(node);
  14262. node.positions.push(position);
  14263. };
  14264. LayoutBuilder.prototype.processCanvas = function(node) {
  14265. var height = node._minHeight;
  14266. if (this.writer.context().availableHeight < height) {
  14267. // TODO: support for canvas larger than a page
  14268. // TODO: support for other overflow methods
  14269. this.writer.moveToNextPage();
  14270. }
  14271. node.canvas.forEach(function(vector) {
  14272. var position = this.writer.addVector(vector);
  14273. node.positions.push(position);
  14274. }, this);
  14275. this.writer.context().moveDown(height);
  14276. };
  14277. LayoutBuilder.prototype.processQr = function(node) {
  14278. var position = this.writer.addQr(node);
  14279. node.positions.push(position);
  14280. };
  14281. module.exports = LayoutBuilder;
  14282. /***/ },
  14283. /* 12 */
  14284. /***/ function(module, exports) {
  14285. /* jslint node: true */
  14286. 'use strict';
  14287. /**
  14288. * Creates an instance of TraversalTracker
  14289. *
  14290. * @constructor
  14291. */
  14292. function TraversalTracker() {
  14293. this.events = {};
  14294. }
  14295. TraversalTracker.prototype.startTracking = function(event, cb) {
  14296. var callbacks = (this.events[event] || (this.events[event] = []));
  14297. if (callbacks.indexOf(cb) < 0) {
  14298. callbacks.push(cb);
  14299. }
  14300. };
  14301. TraversalTracker.prototype.stopTracking = function(event, cb) {
  14302. var callbacks = this.events[event];
  14303. if (callbacks) {
  14304. var index = callbacks.indexOf(cb);
  14305. if (index >= 0) {
  14306. callbacks.splice(index, 1);
  14307. }
  14308. }
  14309. };
  14310. TraversalTracker.prototype.emit = function(event) {
  14311. var args = Array.prototype.slice.call(arguments, 1);
  14312. var callbacks = this.events[event];
  14313. if (callbacks) {
  14314. callbacks.forEach(function(cb) {
  14315. cb.apply(this, args);
  14316. });
  14317. }
  14318. };
  14319. TraversalTracker.prototype.auto = function(event, cb, innerBlock) {
  14320. this.startTracking(event, cb);
  14321. innerBlock();
  14322. this.stopTracking(event, cb);
  14323. };
  14324. module.exports = TraversalTracker;
  14325. /***/ },
  14326. /* 13 */
  14327. /***/ function(module, exports, __webpack_require__) {
  14328. /* jslint node: true */
  14329. 'use strict';
  14330. var TextTools = __webpack_require__(14);
  14331. var StyleContextStack = __webpack_require__(15);
  14332. var ColumnCalculator = __webpack_require__(16);
  14333. var fontStringify = __webpack_require__(17).fontStringify;
  14334. var pack = __webpack_require__(17).pack;
  14335. var qrEncoder = __webpack_require__(18);
  14336. /**
  14337. * @private
  14338. */
  14339. function DocMeasure(fontProvider, styleDictionary, defaultStyle, imageMeasure, tableLayouts, images) {
  14340. this.textTools = new TextTools(fontProvider);
  14341. this.styleStack = new StyleContextStack(styleDictionary, defaultStyle);
  14342. this.imageMeasure = imageMeasure;
  14343. this.tableLayouts = tableLayouts;
  14344. this.images = images;
  14345. this.autoImageIndex = 1;
  14346. }
  14347. /**
  14348. * Measures all nodes and sets min/max-width properties required for the second
  14349. * layout-pass.
  14350. * @param {Object} docStructure document-definition-object
  14351. * @return {Object} document-measurement-object
  14352. */
  14353. DocMeasure.prototype.measureDocument = function(docStructure) {
  14354. return this.measureNode(docStructure);
  14355. };
  14356. DocMeasure.prototype.measureNode = function(node) {
  14357. // expand shortcuts
  14358. if (node instanceof Array) {
  14359. node = { stack: node };
  14360. } else if (typeof node == 'string' || node instanceof String) {
  14361. node = { text: node };
  14362. }
  14363. // Deal with empty nodes to prevent crash in getNodeMargin
  14364. if (Object.keys(node).length === 0) {
  14365. // A warning could be logged: console.warn('pdfmake: Empty node, ignoring it');
  14366. node = { text: '' };
  14367. }
  14368. var self = this;
  14369. return this.styleStack.auto(node, function() {
  14370. // TODO: refactor + rethink whether this is the proper way to handle margins
  14371. node._margin = getNodeMargin(node);
  14372. if (node.columns) {
  14373. return extendMargins(self.measureColumns(node));
  14374. } else if (node.stack) {
  14375. return extendMargins(self.measureVerticalContainer(node));
  14376. } else if (node.ul) {
  14377. return extendMargins(self.measureList(false, node));
  14378. } else if (node.ol) {
  14379. return extendMargins(self.measureList(true, node));
  14380. } else if (node.table) {
  14381. return extendMargins(self.measureTable(node));
  14382. } else if (node.text !== undefined) {
  14383. return extendMargins(self.measureLeaf(node));
  14384. } else if (node.image) {
  14385. return extendMargins(self.measureImage(node));
  14386. } else if (node.canvas) {
  14387. return extendMargins(self.measureCanvas(node));
  14388. } else if (node.qr) {
  14389. return extendMargins(self.measureQr(node));
  14390. } else {
  14391. throw 'Unrecognized document structure: ' + JSON.stringify(node, fontStringify);
  14392. }
  14393. });
  14394. function extendMargins(node) {
  14395. var margin = node._margin;
  14396. if (margin) {
  14397. node._minWidth += margin[0] + margin[2];
  14398. node._maxWidth += margin[0] + margin[2];
  14399. }
  14400. return node;
  14401. }
  14402. function getNodeMargin() {
  14403. function processSingleMargins(node, currentMargin){
  14404. if (node.marginLeft || node.marginTop || node.marginRight || node.marginBottom) {
  14405. return [
  14406. node.marginLeft || currentMargin[0] || 0,
  14407. node.marginTop || currentMargin[1] || 0,
  14408. node.marginRight || currentMargin[2] || 0,
  14409. node.marginBottom || currentMargin[3] || 0
  14410. ];
  14411. }
  14412. return currentMargin;
  14413. }
  14414. function flattenStyleArray(styleArray){
  14415. var flattenedStyles = {};
  14416. for (var i = styleArray.length - 1; i >= 0; i--) {
  14417. var styleName = styleArray[i];
  14418. var style = self.styleStack.styleDictionary[styleName];
  14419. for(var key in style){
  14420. if(style.hasOwnProperty(key)){
  14421. flattenedStyles[key] = style[key];
  14422. }
  14423. }
  14424. }
  14425. return flattenedStyles;
  14426. }
  14427. function convertMargin(margin) {
  14428. if (typeof margin === 'number' || margin instanceof Number) {
  14429. margin = [ margin, margin, margin, margin ];
  14430. } else if (margin instanceof Array) {
  14431. if (margin.length === 2) {
  14432. margin = [ margin[0], margin[1], margin[0], margin[1] ];
  14433. }
  14434. }
  14435. return margin;
  14436. }
  14437. var margin = [undefined, undefined, undefined, undefined];
  14438. if(node.style) {
  14439. var styleArray = (node.style instanceof Array) ? node.style : [node.style];
  14440. var flattenedStyleArray = flattenStyleArray(styleArray);
  14441. if(flattenedStyleArray) {
  14442. margin = processSingleMargins(flattenedStyleArray, margin);
  14443. }
  14444. if(flattenedStyleArray.margin){
  14445. margin = convertMargin(flattenedStyleArray.margin);
  14446. }
  14447. }
  14448. margin = processSingleMargins(node, margin);
  14449. if(node.margin){
  14450. margin = convertMargin(node.margin);
  14451. }
  14452. if(margin[0] === undefined && margin[1] === undefined && margin[2] === undefined && margin[3] === undefined) {
  14453. return null;
  14454. } else {
  14455. return margin;
  14456. }
  14457. }
  14458. };
  14459. DocMeasure.prototype.convertIfBase64Image = function(node) {
  14460. if (/^data:image\/(jpeg|jpg|png);base64,/.test(node.image)) {
  14461. var label = '$$pdfmake$$' + this.autoImageIndex++;
  14462. this.images[label] = node.image;
  14463. node.image = label;
  14464. }
  14465. };
  14466. DocMeasure.prototype.measureImage = function(node) {
  14467. if (this.images) {
  14468. this.convertIfBase64Image(node);
  14469. }
  14470. var imageSize = this.imageMeasure.measureImage(node.image);
  14471. if (node.fit) {
  14472. var factor = (imageSize.width / imageSize.height > node.fit[0] / node.fit[1]) ? node.fit[0] / imageSize.width : node.fit[1] / imageSize.height;
  14473. node._width = node._minWidth = node._maxWidth = imageSize.width * factor;
  14474. node._height = imageSize.height * factor;
  14475. } else {
  14476. node._width = node._minWidth = node._maxWidth = node.width || imageSize.width;
  14477. node._height = node.height || (imageSize.height * node._width / imageSize.width);
  14478. }
  14479. node._alignment = this.styleStack.getProperty('alignment');
  14480. return node;
  14481. };
  14482. DocMeasure.prototype.measureLeaf = function(node) {
  14483. // Make sure style properties of the node itself are considered when building inlines.
  14484. // We could also just pass [node] to buildInlines, but that fails for bullet points.
  14485. var styleStack = this.styleStack.clone();
  14486. styleStack.push(node);
  14487. var data = this.textTools.buildInlines(node.text, styleStack);
  14488. node._inlines = data.items;
  14489. node._minWidth = data.minWidth;
  14490. node._maxWidth = data.maxWidth;
  14491. return node;
  14492. };
  14493. DocMeasure.prototype.measureVerticalContainer = function(node) {
  14494. var items = node.stack;
  14495. node._minWidth = 0;
  14496. node._maxWidth = 0;
  14497. for(var i = 0, l = items.length; i < l; i++) {
  14498. items[i] = this.measureNode(items[i]);
  14499. node._minWidth = Math.max(node._minWidth, items[i]._minWidth);
  14500. node._maxWidth = Math.max(node._maxWidth, items[i]._maxWidth);
  14501. }
  14502. return node;
  14503. };
  14504. DocMeasure.prototype.gapSizeForList = function(isOrderedList, listItems) {
  14505. if (isOrderedList) {
  14506. var longestNo = (listItems.length).toString().replace(/./g, '9');
  14507. return this.textTools.sizeOfString(longestNo + '. ', this.styleStack);
  14508. } else {
  14509. return this.textTools.sizeOfString('9. ', this.styleStack);
  14510. }
  14511. };
  14512. DocMeasure.prototype.buildMarker = function(isOrderedList, counter, styleStack, gapSize) {
  14513. var marker;
  14514. if (isOrderedList) {
  14515. marker = { _inlines: this.textTools.buildInlines(counter, styleStack).items };
  14516. }
  14517. else {
  14518. // TODO: ascender-based calculations
  14519. var radius = gapSize.fontSize / 6;
  14520. marker = {
  14521. canvas: [ {
  14522. x: radius,
  14523. y: (gapSize.height / gapSize.lineHeight) + gapSize.decender - gapSize.fontSize / 3,//0,// gapSize.fontSize * 2 / 3,
  14524. r1: radius,
  14525. r2: radius,
  14526. type: 'ellipse',
  14527. color: 'black'
  14528. } ]
  14529. };
  14530. }
  14531. marker._minWidth = marker._maxWidth = gapSize.width;
  14532. marker._minHeight = marker._maxHeight = gapSize.height;
  14533. return marker;
  14534. };
  14535. DocMeasure.prototype.measureList = function(isOrdered, node) {
  14536. var style = this.styleStack.clone();
  14537. var items = isOrdered ? node.ol : node.ul;
  14538. node._gapSize = this.gapSizeForList(isOrdered, items);
  14539. node._minWidth = 0;
  14540. node._maxWidth = 0;
  14541. var counter = 1;
  14542. for(var i = 0, l = items.length; i < l; i++) {
  14543. var nextItem = items[i] = this.measureNode(items[i]);
  14544. var marker = counter++ + '. ';
  14545. if (!nextItem.ol && !nextItem.ul) {
  14546. nextItem.listMarker = this.buildMarker(isOrdered, nextItem.counter || marker, style, node._gapSize);
  14547. } // TODO: else - nested lists numbering
  14548. node._minWidth = Math.max(node._minWidth, items[i]._minWidth + node._gapSize.width);
  14549. node._maxWidth = Math.max(node._maxWidth, items[i]._maxWidth + node._gapSize.width);
  14550. }
  14551. return node;
  14552. };
  14553. DocMeasure.prototype.measureColumns = function(node) {
  14554. var columns = node.columns;
  14555. node._gap = this.styleStack.getProperty('columnGap') || 0;
  14556. for(var i = 0, l = columns.length; i < l; i++) {
  14557. columns[i] = this.measureNode(columns[i]);
  14558. }
  14559. var measures = ColumnCalculator.measureMinMax(columns);
  14560. node._minWidth = measures.min + node._gap * (columns.length - 1);
  14561. node._maxWidth = measures.max + node._gap * (columns.length - 1);
  14562. return node;
  14563. };
  14564. DocMeasure.prototype.measureTable = function(node) {
  14565. extendTableWidths(node);
  14566. node._layout = getLayout(this.tableLayouts);
  14567. node._offsets = getOffsets(node._layout);
  14568. var colSpans = [];
  14569. var col, row, cols, rows;
  14570. for(col = 0, cols = node.table.body[0].length; col < cols; col++) {
  14571. var c = node.table.widths[col];
  14572. c._minWidth = 0;
  14573. c._maxWidth = 0;
  14574. for(row = 0, rows = node.table.body.length; row < rows; row++) {
  14575. var rowData = node.table.body[row];
  14576. var data = rowData[col];
  14577. if (!data._span) {
  14578. var _this = this;
  14579. data = rowData[col] = this.styleStack.auto(data, measureCb(this, data));
  14580. if (data.colSpan && data.colSpan > 1) {
  14581. markSpans(rowData, col, data.colSpan);
  14582. colSpans.push({ col: col, span: data.colSpan, minWidth: data._minWidth, maxWidth: data._maxWidth });
  14583. } else {
  14584. c._minWidth = Math.max(c._minWidth, data._minWidth);
  14585. c._maxWidth = Math.max(c._maxWidth, data._maxWidth);
  14586. }
  14587. }
  14588. if (data.rowSpan && data.rowSpan > 1) {
  14589. markVSpans(node.table, row, col, data.rowSpan);
  14590. }
  14591. }
  14592. }
  14593. extendWidthsForColSpans();
  14594. var measures = ColumnCalculator.measureMinMax(node.table.widths);
  14595. node._minWidth = measures.min + node._offsets.total;
  14596. node._maxWidth = measures.max + node._offsets.total;
  14597. return node;
  14598. function measureCb(_this, data) {
  14599. return function() {
  14600. if (data !== null && typeof data === 'object') {
  14601. data.fillColor = _this.styleStack.getProperty('fillColor');
  14602. }
  14603. return _this.measureNode(data);
  14604. };
  14605. }
  14606. function getLayout(tableLayouts) {
  14607. var layout = node.layout;
  14608. if (typeof node.layout === 'string' || node instanceof String) {
  14609. layout = tableLayouts[layout];
  14610. }
  14611. var defaultLayout = {
  14612. hLineWidth: function(i, node) { return 1; }, //return node.table.headerRows && i === node.table.headerRows && 3 || 0; },
  14613. vLineWidth: function(i, node) { return 1; },
  14614. hLineColor: function(i, node) { return 'black'; },
  14615. vLineColor: function(i, node) { return 'black'; },
  14616. paddingLeft: function(i, node) { return 4; }, //i && 4 || 0; },
  14617. paddingRight: function(i, node) { return 4; }, //(i < node.table.widths.length - 1) ? 4 : 0; },
  14618. paddingTop: function(i, node) { return 2; },
  14619. paddingBottom: function(i, node) { return 2; }
  14620. };
  14621. return pack(defaultLayout, layout);
  14622. }
  14623. function getOffsets(layout) {
  14624. var offsets = [];
  14625. var totalOffset = 0;
  14626. var prevRightPadding = 0;
  14627. for(var i = 0, l = node.table.widths.length; i < l; i++) {
  14628. var lOffset = prevRightPadding + layout.vLineWidth(i, node) + layout.paddingLeft(i, node);
  14629. offsets.push(lOffset);
  14630. totalOffset += lOffset;
  14631. prevRightPadding = layout.paddingRight(i, node);
  14632. }
  14633. totalOffset += prevRightPadding + layout.vLineWidth(node.table.widths.length, node);
  14634. return {
  14635. total: totalOffset,
  14636. offsets: offsets
  14637. };
  14638. }
  14639. function extendWidthsForColSpans() {
  14640. var q, j;
  14641. for (var i = 0, l = colSpans.length; i < l; i++) {
  14642. var span = colSpans[i];
  14643. var currentMinMax = getMinMax(span.col, span.span, node._offsets);
  14644. var minDifference = span.minWidth - currentMinMax.minWidth;
  14645. var maxDifference = span.maxWidth - currentMinMax.maxWidth;
  14646. if (minDifference > 0) {
  14647. q = minDifference / span.span;
  14648. for(j = 0; j < span.span; j++) {
  14649. node.table.widths[span.col + j]._minWidth += q;
  14650. }
  14651. }
  14652. if (maxDifference > 0) {
  14653. q = maxDifference / span.span;
  14654. for(j = 0; j < span.span; j++) {
  14655. node.table.widths[span.col + j]._maxWidth += q;
  14656. }
  14657. }
  14658. }
  14659. }
  14660. function getMinMax(col, span, offsets) {
  14661. var result = { minWidth: 0, maxWidth: 0 };
  14662. for(var i = 0; i < span; i++) {
  14663. result.minWidth += node.table.widths[col + i]._minWidth + (i? offsets.offsets[col + i] : 0);
  14664. result.maxWidth += node.table.widths[col + i]._maxWidth + (i? offsets.offsets[col + i] : 0);
  14665. }
  14666. return result;
  14667. }
  14668. function markSpans(rowData, col, span) {
  14669. for (var i = 1; i < span; i++) {
  14670. rowData[col + i] = {
  14671. _span: true,
  14672. _minWidth: 0,
  14673. _maxWidth: 0,
  14674. rowSpan: rowData[col].rowSpan
  14675. };
  14676. }
  14677. }
  14678. function markVSpans(table, row, col, span) {
  14679. for (var i = 1; i < span; i++) {
  14680. table.body[row + i][col] = {
  14681. _span: true,
  14682. _minWidth: 0,
  14683. _maxWidth: 0,
  14684. fillColor: table.body[row][col].fillColor
  14685. };
  14686. }
  14687. }
  14688. function extendTableWidths(node) {
  14689. if (!node.table.widths) {
  14690. node.table.widths = 'auto';
  14691. }
  14692. if (typeof node.table.widths === 'string' || node.table.widths instanceof String) {
  14693. node.table.widths = [ node.table.widths ];
  14694. while(node.table.widths.length < node.table.body[0].length) {
  14695. node.table.widths.push(node.table.widths[node.table.widths.length - 1]);
  14696. }
  14697. }
  14698. for(var i = 0, l = node.table.widths.length; i < l; i++) {
  14699. var w = node.table.widths[i];
  14700. if (typeof w === 'number' || w instanceof Number || typeof w === 'string' || w instanceof String) {
  14701. node.table.widths[i] = { width: w };
  14702. }
  14703. }
  14704. }
  14705. };
  14706. DocMeasure.prototype.measureCanvas = function(node) {
  14707. var w = 0, h = 0;
  14708. for(var i = 0, l = node.canvas.length; i < l; i++) {
  14709. var vector = node.canvas[i];
  14710. switch(vector.type) {
  14711. case 'ellipse':
  14712. w = Math.max(w, vector.x + vector.r1);
  14713. h = Math.max(h, vector.y + vector.r2);
  14714. break;
  14715. case 'rect':
  14716. w = Math.max(w, vector.x + vector.w);
  14717. h = Math.max(h, vector.y + vector.h);
  14718. break;
  14719. case 'line':
  14720. w = Math.max(w, vector.x1, vector.x2);
  14721. h = Math.max(h, vector.y1, vector.y2);
  14722. break;
  14723. case 'polyline':
  14724. for(var i2 = 0, l2 = vector.points.length; i2 < l2; i2++) {
  14725. w = Math.max(w, vector.points[i2].x);
  14726. h = Math.max(h, vector.points[i2].y);
  14727. }
  14728. break;
  14729. }
  14730. }
  14731. node._minWidth = node._maxWidth = w;
  14732. node._minHeight = node._maxHeight = h;
  14733. return node;
  14734. };
  14735. DocMeasure.prototype.measureQr = function(node) {
  14736. node = qrEncoder.measure(node);
  14737. node._alignment = this.styleStack.getProperty('alignment');
  14738. return node;
  14739. };
  14740. module.exports = DocMeasure;
  14741. /***/ },
  14742. /* 14 */
  14743. /***/ function(module, exports) {
  14744. /* jslint node: true */
  14745. 'use strict';
  14746. var WORD_RE = /([^ ,\/!.?:;\-\n]*[ ,\/!.?:;\-]*)|\n/g;
  14747. // /\S*\s*/g to be considered (I'm not sure however - we shouldn't split 'aaa !!!!')
  14748. var LEADING = /^(\s)+/g;
  14749. var TRAILING = /(\s)+$/g;
  14750. /**
  14751. * Creates an instance of TextTools - text measurement utility
  14752. *
  14753. * @constructor
  14754. * @param {FontProvider} fontProvider
  14755. */
  14756. function TextTools(fontProvider) {
  14757. this.fontProvider = fontProvider;
  14758. }
  14759. /**
  14760. * Converts an array of strings (or inline-definition-objects) into a collection
  14761. * of inlines and calculated minWidth/maxWidth.
  14762. * and their min/max widths
  14763. * @param {Object} textArray - an array of inline-definition-objects (or strings)
  14764. * @param {Object} styleContextStack current style stack
  14765. * @return {Object} collection of inlines, minWidth, maxWidth
  14766. */
  14767. TextTools.prototype.buildInlines = function(textArray, styleContextStack) {
  14768. var measured = measure(this.fontProvider, textArray, styleContextStack);
  14769. var minWidth = 0,
  14770. maxWidth = 0,
  14771. currentLineWidth;
  14772. measured.forEach(function (inline) {
  14773. minWidth = Math.max(minWidth, inline.width - inline.leadingCut - inline.trailingCut);
  14774. if (!currentLineWidth) {
  14775. currentLineWidth = { width: 0, leadingCut: inline.leadingCut, trailingCut: 0 };
  14776. }
  14777. currentLineWidth.width += inline.width;
  14778. currentLineWidth.trailingCut = inline.trailingCut;
  14779. maxWidth = Math.max(maxWidth, getTrimmedWidth(currentLineWidth));
  14780. if (inline.lineEnd) {
  14781. currentLineWidth = null;
  14782. }
  14783. });
  14784. if (getStyleProperty({}, styleContextStack, 'noWrap', false)) {
  14785. minWidth = maxWidth;
  14786. }
  14787. return {
  14788. items: measured,
  14789. minWidth: minWidth,
  14790. maxWidth: maxWidth
  14791. };
  14792. function getTrimmedWidth(item) {
  14793. return Math.max(0, item.width - item.leadingCut - item.trailingCut);
  14794. }
  14795. };
  14796. /**
  14797. * Returns size of the specified string (without breaking it) using the current style
  14798. * @param {String} text text to be measured
  14799. * @param {Object} styleContextStack current style stack
  14800. * @return {Object} size of the specified string
  14801. */
  14802. TextTools.prototype.sizeOfString = function(text, styleContextStack) {
  14803. text = text.replace('\t', ' ');
  14804. //TODO: refactor - extract from measure
  14805. var fontName = getStyleProperty({}, styleContextStack, 'font', 'Roboto');
  14806. var fontSize = getStyleProperty({}, styleContextStack, 'fontSize', 12);
  14807. var bold = getStyleProperty({}, styleContextStack, 'bold', false);
  14808. var italics = getStyleProperty({}, styleContextStack, 'italics', false);
  14809. var lineHeight = getStyleProperty({}, styleContextStack, 'lineHeight', 1);
  14810. var font = this.fontProvider.provideFont(fontName, bold, italics);
  14811. return {
  14812. width: font.widthOfString(removeDiacritics(text), fontSize),
  14813. height: font.lineHeight(fontSize) * lineHeight,
  14814. fontSize: fontSize,
  14815. lineHeight: lineHeight,
  14816. ascender: font.ascender / 1000 * fontSize,
  14817. decender: font.decender / 1000 * fontSize
  14818. };
  14819. };
  14820. function splitWords(text, noWrap) {
  14821. var results = [];
  14822. text = text.replace('\t', ' ');
  14823. var array;
  14824. if (noWrap) {
  14825. array = [ text, "" ];
  14826. } else {
  14827. array = text.match(WORD_RE);
  14828. }
  14829. // i < l - 1, because the last match is always an empty string
  14830. // other empty strings however are treated as new-lines
  14831. for(var i = 0, l = array.length; i < l - 1; i++) {
  14832. var item = array[i];
  14833. var isNewLine = item.length === 0;
  14834. if (!isNewLine) {
  14835. results.push({text: item});
  14836. }
  14837. else {
  14838. var shouldAddLine = (results.length === 0 || results[results.length - 1].lineEnd);
  14839. if (shouldAddLine) {
  14840. results.push({ text: '', lineEnd: true });
  14841. }
  14842. else {
  14843. results[results.length - 1].lineEnd = true;
  14844. }
  14845. }
  14846. }
  14847. return results;
  14848. }
  14849. function copyStyle(source, destination) {
  14850. destination = destination || {};
  14851. source = source || {}; //TODO: default style
  14852. for(var key in source) {
  14853. if (key != 'text' && source.hasOwnProperty(key)) {
  14854. destination[key] = source[key];
  14855. }
  14856. }
  14857. return destination;
  14858. }
  14859. function normalizeTextArray(array) {
  14860. var results = [];
  14861. if (typeof array == 'string' || array instanceof String) {
  14862. array = [ array ];
  14863. }
  14864. for(var i = 0, l = array.length; i < l; i++) {
  14865. var item = array[i];
  14866. var style = null;
  14867. var words;
  14868. if (typeof item == 'string' || item instanceof String) {
  14869. words = splitWords(item);
  14870. } else {
  14871. words = splitWords(item.text, item.noWrap);
  14872. style = copyStyle(item);
  14873. }
  14874. for(var i2 = 0, l2 = words.length; i2 < l2; i2++) {
  14875. var result = {
  14876. text: words[i2].text
  14877. };
  14878. if (words[i2].lineEnd) {
  14879. result.lineEnd = true;
  14880. }
  14881. copyStyle(style, result);
  14882. results.push(result);
  14883. }
  14884. }
  14885. return results;
  14886. }
  14887. //TODO: support for other languages (currently only polish is supported)
  14888. var diacriticsMap = { 'Ą': 'A', 'Ć': 'C', 'Ę': 'E', 'Ł': 'L', 'Ń': 'N', 'Ó': 'O', 'Ś': 'S', 'Ź': 'Z', 'Ż': 'Z', 'ą': 'a', 'ć': 'c', 'ę': 'e', 'ł': 'l', 'ń': 'n', 'ó': 'o', 'ś': 's', 'ź': 'z', 'ż': 'z' };
  14889. // ' << atom.io workaround
  14890. function removeDiacritics(text) {
  14891. return text.replace(/[^A-Za-z0-9\[\] ]/g, function(a) {
  14892. return diacriticsMap[a] || a;
  14893. });
  14894. }
  14895. function getStyleProperty(item, styleContextStack, property, defaultValue) {
  14896. var value;
  14897. if (item[property] !== undefined && item[property] !== null) {
  14898. // item defines this property
  14899. return item[property];
  14900. }
  14901. if (!styleContextStack) return defaultValue;
  14902. styleContextStack.auto(item, function() {
  14903. value = styleContextStack.getProperty(property);
  14904. });
  14905. if (value !== null && value !== undefined) {
  14906. return value;
  14907. } else {
  14908. return defaultValue;
  14909. }
  14910. }
  14911. function measure(fontProvider, textArray, styleContextStack) {
  14912. var normalized = normalizeTextArray(textArray);
  14913. normalized.forEach(function(item) {
  14914. var fontName = getStyleProperty(item, styleContextStack, 'font', 'Roboto');
  14915. var fontSize = getStyleProperty(item, styleContextStack, 'fontSize', 12);
  14916. var bold = getStyleProperty(item, styleContextStack, 'bold', false);
  14917. var italics = getStyleProperty(item, styleContextStack, 'italics', false);
  14918. var color = getStyleProperty(item, styleContextStack, 'color', 'black');
  14919. var decoration = getStyleProperty(item, styleContextStack, 'decoration', null);
  14920. var decorationColor = getStyleProperty(item, styleContextStack, 'decorationColor', null);
  14921. var decorationStyle = getStyleProperty(item, styleContextStack, 'decorationStyle', null);
  14922. var background = getStyleProperty(item, styleContextStack, 'background', null);
  14923. var lineHeight = getStyleProperty(item, styleContextStack, 'lineHeight', 1);
  14924. var font = fontProvider.provideFont(fontName, bold, italics);
  14925. // TODO: character spacing
  14926. item.width = font.widthOfString(removeDiacritics(item.text), fontSize);
  14927. item.height = font.lineHeight(fontSize) * lineHeight;
  14928. var leadingSpaces = item.text.match(LEADING);
  14929. var trailingSpaces = item.text.match(TRAILING);
  14930. if (leadingSpaces) {
  14931. item.leadingCut = font.widthOfString(leadingSpaces[0], fontSize);
  14932. }
  14933. else {
  14934. item.leadingCut = 0;
  14935. }
  14936. if (trailingSpaces) {
  14937. item.trailingCut = font.widthOfString(trailingSpaces[0], fontSize);
  14938. }
  14939. else {
  14940. item.trailingCut = 0;
  14941. }
  14942. item.alignment = getStyleProperty(item, styleContextStack, 'alignment', 'left');
  14943. item.font = font;
  14944. item.fontSize = fontSize;
  14945. item.color = color;
  14946. item.decoration = decoration;
  14947. item.decorationColor = decorationColor;
  14948. item.decorationStyle = decorationStyle;
  14949. item.background = background;
  14950. });
  14951. return normalized;
  14952. }
  14953. /****TESTS**** (add a leading '/' to uncomment)
  14954. TextTools.prototype.splitWords = splitWords;
  14955. TextTools.prototype.normalizeTextArray = normalizeTextArray;
  14956. TextTools.prototype.measure = measure;
  14957. // */
  14958. module.exports = TextTools;
  14959. /***/ },
  14960. /* 15 */
  14961. /***/ function(module, exports) {
  14962. /* jslint node: true */
  14963. 'use strict';
  14964. /**
  14965. * Creates an instance of StyleContextStack used for style inheritance and style overrides
  14966. *
  14967. * @constructor
  14968. * @this {StyleContextStack}
  14969. * @param {Object} named styles dictionary
  14970. * @param {Object} optional default style definition
  14971. */
  14972. function StyleContextStack (styleDictionary, defaultStyle) {
  14973. this.defaultStyle = defaultStyle || {};
  14974. this.styleDictionary = styleDictionary;
  14975. this.styleOverrides = [];
  14976. }
  14977. /**
  14978. * Creates cloned version of current stack
  14979. * @return {StyleContextStack} current stack snapshot
  14980. */
  14981. StyleContextStack.prototype.clone = function() {
  14982. var stack = new StyleContextStack(this.styleDictionary, this.defaultStyle);
  14983. this.styleOverrides.forEach(function(item) {
  14984. stack.styleOverrides.push(item);
  14985. });
  14986. return stack;
  14987. };
  14988. /**
  14989. * Pushes style-name or style-overrides-object onto the stack for future evaluation
  14990. *
  14991. * @param {String|Object} styleNameOrOverride style-name (referring to styleDictionary) or
  14992. * a new dictionary defining overriding properties
  14993. */
  14994. StyleContextStack.prototype.push = function(styleNameOrOverride) {
  14995. this.styleOverrides.push(styleNameOrOverride);
  14996. };
  14997. /**
  14998. * Removes last style-name or style-overrides-object from the stack
  14999. *
  15000. * @param {Number} howMany - optional number of elements to be popped (if not specified,
  15001. * one element will be removed from the stack)
  15002. */
  15003. StyleContextStack.prototype.pop = function(howMany) {
  15004. howMany = howMany || 1;
  15005. while(howMany-- > 0) {
  15006. this.styleOverrides.pop();
  15007. }
  15008. };
  15009. /**
  15010. * Creates a set of named styles or/and a style-overrides-object based on the item,
  15011. * pushes those elements onto the stack for future evaluation and returns the number
  15012. * of elements pushed, so they can be easily poped then.
  15013. *
  15014. * @param {Object} item - an object with optional style property and/or style overrides
  15015. * @return the number of items pushed onto the stack
  15016. */
  15017. StyleContextStack.prototype.autopush = function(item) {
  15018. if (typeof item === 'string' || item instanceof String) return 0;
  15019. var styleNames = [];
  15020. if (item.style) {
  15021. if (item.style instanceof Array) {
  15022. styleNames = item.style;
  15023. } else {
  15024. styleNames = [ item.style ];
  15025. }
  15026. }
  15027. for(var i = 0, l = styleNames.length; i < l; i++) {
  15028. this.push(styleNames[i]);
  15029. }
  15030. var styleOverrideObject = {};
  15031. var pushSOO = false;
  15032. [
  15033. 'font',
  15034. 'fontSize',
  15035. 'bold',
  15036. 'italics',
  15037. 'alignment',
  15038. 'color',
  15039. 'columnGap',
  15040. 'fillColor',
  15041. 'decoration',
  15042. 'decorationStyle',
  15043. 'decorationColor',
  15044. 'background',
  15045. 'lineHeight',
  15046. 'noWrap'
  15047. //'tableCellPadding'
  15048. // 'cellBorder',
  15049. // 'headerCellBorder',
  15050. // 'oddRowCellBorder',
  15051. // 'evenRowCellBorder',
  15052. // 'tableBorder'
  15053. ].forEach(function(key) {
  15054. if (item[key] !== undefined && item[key] !== null) {
  15055. styleOverrideObject[key] = item[key];
  15056. pushSOO = true;
  15057. }
  15058. });
  15059. if (pushSOO) {
  15060. this.push(styleOverrideObject);
  15061. }
  15062. return styleNames.length + (pushSOO ? 1 : 0);
  15063. };
  15064. /**
  15065. * Automatically pushes elements onto the stack, using autopush based on item,
  15066. * executes callback and then pops elements back. Returns value returned by callback
  15067. *
  15068. * @param {Object} item - an object with optional style property and/or style overrides
  15069. * @param {Function} function to be called between autopush and pop
  15070. * @return {Object} value returned by callback
  15071. */
  15072. StyleContextStack.prototype.auto = function(item, callback) {
  15073. var pushedItems = this.autopush(item);
  15074. var result = callback();
  15075. if (pushedItems > 0) {
  15076. this.pop(pushedItems);
  15077. }
  15078. return result;
  15079. };
  15080. /**
  15081. * Evaluates stack and returns value of a named property
  15082. *
  15083. * @param {String} property - property name
  15084. * @return property value or null if not found
  15085. */
  15086. StyleContextStack.prototype.getProperty = function(property) {
  15087. if (this.styleOverrides) {
  15088. for(var i = this.styleOverrides.length - 1; i >= 0; i--) {
  15089. var item = this.styleOverrides[i];
  15090. if (typeof item == 'string' || item instanceof String) {
  15091. // named-style-override
  15092. var style = this.styleDictionary[item];
  15093. if (style && style[property] !== null && style[property] !== undefined) {
  15094. return style[property];
  15095. }
  15096. } else {
  15097. // style-overrides-object
  15098. if (item[property] !== undefined && item[property] !== null) {
  15099. return item[property];
  15100. }
  15101. }
  15102. }
  15103. }
  15104. return this.defaultStyle && this.defaultStyle[property];
  15105. };
  15106. module.exports = StyleContextStack;
  15107. /***/ },
  15108. /* 16 */
  15109. /***/ function(module, exports) {
  15110. /* jslint node: true */
  15111. 'use strict';
  15112. function buildColumnWidths(columns, availableWidth) {
  15113. var autoColumns = [],
  15114. autoMin = 0, autoMax = 0,
  15115. starColumns = [],
  15116. starMaxMin = 0,
  15117. starMaxMax = 0,
  15118. fixedColumns = [],
  15119. initial_availableWidth = availableWidth;
  15120. columns.forEach(function(column) {
  15121. if (isAutoColumn(column)) {
  15122. autoColumns.push(column);
  15123. autoMin += column._minWidth;
  15124. autoMax += column._maxWidth;
  15125. } else if (isStarColumn(column)) {
  15126. starColumns.push(column);
  15127. starMaxMin = Math.max(starMaxMin, column._minWidth);
  15128. starMaxMax = Math.max(starMaxMax, column._maxWidth);
  15129. } else {
  15130. fixedColumns.push(column);
  15131. }
  15132. });
  15133. fixedColumns.forEach(function(col) {
  15134. // width specified as %
  15135. if (typeof col.width === 'string' && /\d+%/.test(col.width) ) {
  15136. col.width = parseFloat(col.width)*initial_availableWidth/100;
  15137. }
  15138. if (col.width < (col._minWidth) && col.elasticWidth) {
  15139. col._calcWidth = col._minWidth;
  15140. } else {
  15141. col._calcWidth = col.width;
  15142. }
  15143. availableWidth -= col._calcWidth;
  15144. });
  15145. // http://www.freesoft.org/CIE/RFC/1942/18.htm
  15146. // http://www.w3.org/TR/CSS2/tables.html#width-layout
  15147. // http://dev.w3.org/csswg/css3-tables-algorithms/Overview.src.htm
  15148. var minW = autoMin + starMaxMin * starColumns.length;
  15149. var maxW = autoMax + starMaxMax * starColumns.length;
  15150. if (minW >= availableWidth) {
  15151. // case 1 - there's no way to fit all columns within available width
  15152. // that's actually pretty bad situation with PDF as we have no horizontal scroll
  15153. // no easy workaround (unless we decide, in the future, to split single words)
  15154. // currently we simply use minWidths for all columns
  15155. autoColumns.forEach(function(col) {
  15156. col._calcWidth = col._minWidth;
  15157. });
  15158. starColumns.forEach(function(col) {
  15159. col._calcWidth = starMaxMin; // starMaxMin already contains padding
  15160. });
  15161. } else {
  15162. if (maxW < availableWidth) {
  15163. // case 2 - we can fit rest of the table within available space
  15164. autoColumns.forEach(function(col) {
  15165. col._calcWidth = col._maxWidth;
  15166. availableWidth -= col._calcWidth;
  15167. });
  15168. } else {
  15169. // maxW is too large, but minW fits within available width
  15170. var W = availableWidth - minW;
  15171. var D = maxW - minW;
  15172. autoColumns.forEach(function(col) {
  15173. var d = col._maxWidth - col._minWidth;
  15174. col._calcWidth = col._minWidth + d * W / D;
  15175. availableWidth -= col._calcWidth;
  15176. });
  15177. }
  15178. if (starColumns.length > 0) {
  15179. var starSize = availableWidth / starColumns.length;
  15180. starColumns.forEach(function(col) {
  15181. col._calcWidth = starSize;
  15182. });
  15183. }
  15184. }
  15185. }
  15186. function isAutoColumn(column) {
  15187. return column.width === 'auto';
  15188. }
  15189. function isStarColumn(column) {
  15190. return column.width === null || column.width === undefined || column.width === '*' || column.width === 'star';
  15191. }
  15192. //TODO: refactor and reuse in measureTable
  15193. function measureMinMax(columns) {
  15194. var result = { min: 0, max: 0 };
  15195. var maxStar = { min: 0, max: 0 };
  15196. var starCount = 0;
  15197. for(var i = 0, l = columns.length; i < l; i++) {
  15198. var c = columns[i];
  15199. if (isStarColumn(c)) {
  15200. maxStar.min = Math.max(maxStar.min, c._minWidth);
  15201. maxStar.max = Math.max(maxStar.max, c._maxWidth);
  15202. starCount++;
  15203. } else if (isAutoColumn(c)) {
  15204. result.min += c._minWidth;
  15205. result.max += c._maxWidth;
  15206. } else {
  15207. result.min += ((c.width !== undefined && c.width) || c._minWidth);
  15208. result.max += ((c.width !== undefined && c.width) || c._maxWidth);
  15209. }
  15210. }
  15211. if (starCount) {
  15212. result.min += starCount * maxStar.min;
  15213. result.max += starCount * maxStar.max;
  15214. }
  15215. return result;
  15216. }
  15217. /**
  15218. * Calculates column widths
  15219. * @private
  15220. */
  15221. module.exports = {
  15222. buildColumnWidths: buildColumnWidths,
  15223. measureMinMax: measureMinMax,
  15224. isAutoColumn: isAutoColumn,
  15225. isStarColumn: isStarColumn
  15226. };
  15227. /***/ },
  15228. /* 17 */
  15229. /***/ function(module, exports) {
  15230. /* jslint node: true */
  15231. 'use strict';
  15232. function pack() {
  15233. var result = {};
  15234. for(var i = 0, l = arguments.length; i < l; i++) {
  15235. var obj = arguments[i];
  15236. if (obj) {
  15237. for(var key in obj) {
  15238. if (obj.hasOwnProperty(key)) {
  15239. result[key] = obj[key];
  15240. }
  15241. }
  15242. }
  15243. }
  15244. return result;
  15245. }
  15246. function offsetVector(vector, x, y) {
  15247. switch(vector.type) {
  15248. case 'ellipse':
  15249. case 'rect':
  15250. vector.x += x;
  15251. vector.y += y;
  15252. break;
  15253. case 'line':
  15254. vector.x1 += x;
  15255. vector.x2 += x;
  15256. vector.y1 += y;
  15257. vector.y2 += y;
  15258. break;
  15259. case 'polyline':
  15260. for(var i = 0, l = vector.points.length; i < l; i++) {
  15261. vector.points[i].x += x;
  15262. vector.points[i].y += y;
  15263. }
  15264. break;
  15265. }
  15266. }
  15267. function fontStringify(key, val) {
  15268. if (key === 'font') {
  15269. return 'font';
  15270. }
  15271. return val;
  15272. }
  15273. function isFunction(functionToCheck) {
  15274. var getType = {};
  15275. return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
  15276. }
  15277. module.exports = {
  15278. pack: pack,
  15279. fontStringify: fontStringify,
  15280. offsetVector: offsetVector,
  15281. isFunction: isFunction
  15282. };
  15283. /***/ },
  15284. /* 18 */
  15285. /***/ function(module, exports) {
  15286. /* jslint node: true */
  15287. 'use strict';
  15288. /*jshint -W004 */
  15289. /* qr.js -- QR code generator in Javascript (revision 2011-01-19)
  15290. * Written by Kang Seonghoon <public+qrjs@mearie.org>.
  15291. *
  15292. * This source code is in the public domain; if your jurisdiction does not
  15293. * recognize the public domain the terms of Creative Commons CC0 license
  15294. * apply. In the other words, you can always do what you want.
  15295. */
  15296. // per-version information (cf. JIS X 0510:2004 pp. 30--36, 71)
  15297. //
  15298. // [0]: the degree of generator polynomial by ECC levels
  15299. // [1]: # of code blocks by ECC levels
  15300. // [2]: left-top positions of alignment patterns
  15301. //
  15302. // the number in this table (in particular, [0]) does not exactly match with
  15303. // the numbers in the specficiation. see augumenteccs below for the reason.
  15304. var VERSIONS = [
  15305. null,
  15306. [[10, 7,17,13], [ 1, 1, 1, 1], []],
  15307. [[16,10,28,22], [ 1, 1, 1, 1], [4,16]],
  15308. [[26,15,22,18], [ 1, 1, 2, 2], [4,20]],
  15309. [[18,20,16,26], [ 2, 1, 4, 2], [4,24]],
  15310. [[24,26,22,18], [ 2, 1, 4, 4], [4,28]],
  15311. [[16,18,28,24], [ 4, 2, 4, 4], [4,32]],
  15312. [[18,20,26,18], [ 4, 2, 5, 6], [4,20,36]],
  15313. [[22,24,26,22], [ 4, 2, 6, 6], [4,22,40]],
  15314. [[22,30,24,20], [ 5, 2, 8, 8], [4,24,44]],
  15315. [[26,18,28,24], [ 5, 4, 8, 8], [4,26,48]],
  15316. [[30,20,24,28], [ 5, 4,11, 8], [4,28,52]],
  15317. [[22,24,28,26], [ 8, 4,11,10], [4,30,56]],
  15318. [[22,26,22,24], [ 9, 4,16,12], [4,32,60]],
  15319. [[24,30,24,20], [ 9, 4,16,16], [4,24,44,64]],
  15320. [[24,22,24,30], [10, 6,18,12], [4,24,46,68]],
  15321. [[28,24,30,24], [10, 6,16,17], [4,24,48,72]],
  15322. [[28,28,28,28], [11, 6,19,16], [4,28,52,76]],
  15323. [[26,30,28,28], [13, 6,21,18], [4,28,54,80]],
  15324. [[26,28,26,26], [14, 7,25,21], [4,28,56,84]],
  15325. [[26,28,28,30], [16, 8,25,20], [4,32,60,88]],
  15326. [[26,28,30,28], [17, 8,25,23], [4,26,48,70,92]],
  15327. [[28,28,24,30], [17, 9,34,23], [4,24,48,72,96]],
  15328. [[28,30,30,30], [18, 9,30,25], [4,28,52,76,100]],
  15329. [[28,30,30,30], [20,10,32,27], [4,26,52,78,104]],
  15330. [[28,26,30,30], [21,12,35,29], [4,30,56,82,108]],
  15331. [[28,28,30,28], [23,12,37,34], [4,28,56,84,112]],
  15332. [[28,30,30,30], [25,12,40,34], [4,32,60,88,116]],
  15333. [[28,30,30,30], [26,13,42,35], [4,24,48,72,96,120]],
  15334. [[28,30,30,30], [28,14,45,38], [4,28,52,76,100,124]],
  15335. [[28,30,30,30], [29,15,48,40], [4,24,50,76,102,128]],
  15336. [[28,30,30,30], [31,16,51,43], [4,28,54,80,106,132]],
  15337. [[28,30,30,30], [33,17,54,45], [4,32,58,84,110,136]],
  15338. [[28,30,30,30], [35,18,57,48], [4,28,56,84,112,140]],
  15339. [[28,30,30,30], [37,19,60,51], [4,32,60,88,116,144]],
  15340. [[28,30,30,30], [38,19,63,53], [4,28,52,76,100,124,148]],
  15341. [[28,30,30,30], [40,20,66,56], [4,22,48,74,100,126,152]],
  15342. [[28,30,30,30], [43,21,70,59], [4,26,52,78,104,130,156]],
  15343. [[28,30,30,30], [45,22,74,62], [4,30,56,82,108,134,160]],
  15344. [[28,30,30,30], [47,24,77,65], [4,24,52,80,108,136,164]],
  15345. [[28,30,30,30], [49,25,81,68], [4,28,56,84,112,140,168]]];
  15346. // mode constants (cf. Table 2 in JIS X 0510:2004 p. 16)
  15347. var MODE_TERMINATOR = 0;
  15348. var MODE_NUMERIC = 1, MODE_ALPHANUMERIC = 2, MODE_OCTET = 4, MODE_KANJI = 8;
  15349. // validation regexps
  15350. var NUMERIC_REGEXP = /^\d*$/;
  15351. var ALPHANUMERIC_REGEXP = /^[A-Za-z0-9 $%*+\-./:]*$/;
  15352. var ALPHANUMERIC_OUT_REGEXP = /^[A-Z0-9 $%*+\-./:]*$/;
  15353. // ECC levels (cf. Table 22 in JIS X 0510:2004 p. 45)
  15354. var ECCLEVEL_L = 1, ECCLEVEL_M = 0, ECCLEVEL_Q = 3, ECCLEVEL_H = 2;
  15355. // GF(2^8)-to-integer mapping with a reducing polynomial x^8+x^4+x^3+x^2+1
  15356. // invariant: GF256_MAP[GF256_INVMAP[i]] == i for all i in [1,256)
  15357. var GF256_MAP = [], GF256_INVMAP = [-1];
  15358. for (var i = 0, v = 1; i < 255; ++i) {
  15359. GF256_MAP.push(v);
  15360. GF256_INVMAP[v] = i;
  15361. v = (v * 2) ^ (v >= 128 ? 0x11d : 0);
  15362. }
  15363. // generator polynomials up to degree 30
  15364. // (should match with polynomials in JIS X 0510:2004 Appendix A)
  15365. //
  15366. // generator polynomial of degree K is product of (x-\alpha^0), (x-\alpha^1),
  15367. // ..., (x-\alpha^(K-1)). by convention, we omit the K-th coefficient (always 1)
  15368. // from the result; also other coefficients are written in terms of the exponent
  15369. // to \alpha to avoid the redundant calculation. (see also calculateecc below.)
  15370. var GF256_GENPOLY = [[]];
  15371. for (var i = 0; i < 30; ++i) {
  15372. var prevpoly = GF256_GENPOLY[i], poly = [];
  15373. for (var j = 0; j <= i; ++j) {
  15374. var a = (j < i ? GF256_MAP[prevpoly[j]] : 0);
  15375. var b = GF256_MAP[(i + (prevpoly[j-1] || 0)) % 255];
  15376. poly.push(GF256_INVMAP[a ^ b]);
  15377. }
  15378. GF256_GENPOLY.push(poly);
  15379. }
  15380. // alphanumeric character mapping (cf. Table 5 in JIS X 0510:2004 p. 19)
  15381. var ALPHANUMERIC_MAP = {};
  15382. for (var i = 0; i < 45; ++i) {
  15383. ALPHANUMERIC_MAP['0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:'.charAt(i)] = i;
  15384. }
  15385. // mask functions in terms of row # and column #
  15386. // (cf. Table 20 in JIS X 0510:2004 p. 42)
  15387. var MASKFUNCS = [
  15388. function(i,j) { return (i+j) % 2 === 0; },
  15389. function(i,j) { return i % 2 === 0; },
  15390. function(i,j) { return j % 3 === 0; },
  15391. function(i,j) { return (i+j) % 3 === 0; },
  15392. function(i,j) { return (((i/2)|0) + ((j/3)|0)) % 2 === 0; },
  15393. function(i,j) { return (i*j) % 2 + (i*j) % 3 === 0; },
  15394. function(i,j) { return ((i*j) % 2 + (i*j) % 3) % 2 === 0; },
  15395. function(i,j) { return ((i+j) % 2 + (i*j) % 3) % 2 === 0; }];
  15396. // returns true when the version information has to be embeded.
  15397. var needsverinfo = function(ver) { return ver > 6; };
  15398. // returns the size of entire QR code for given version.
  15399. var getsizebyver = function(ver) { return 4 * ver + 17; };
  15400. // returns the number of bits available for code words in this version.
  15401. var nfullbits = function(ver) {
  15402. /*
  15403. * |<--------------- n --------------->|
  15404. * | |<----- n-17 ---->| |
  15405. * +-------+ ///+-------+ ----
  15406. * | | ///| | ^
  15407. * | 9x9 | @@@@@ ///| 9x8 | |
  15408. * | | # # # @5x5@ # # # | | |
  15409. * +-------+ @@@@@ +-------+ |
  15410. * # ---|
  15411. * ^ |
  15412. * # |
  15413. * @@@@@ @@@@@ @@@@@ | n
  15414. * @5x5@ @5x5@ @5x5@ n-17
  15415. * @@@@@ @@@@@ @@@@@ | |
  15416. * # | |
  15417. * ////// v |
  15418. * //////# ---|
  15419. * +-------+ @@@@@ @@@@@ |
  15420. * | | @5x5@ @5x5@ |
  15421. * | 8x9 | @@@@@ @@@@@ |
  15422. * | | v
  15423. * +-------+ ----
  15424. *
  15425. * when the entire code has n^2 modules and there are m^2-3 alignment
  15426. * patterns, we have:
  15427. * - 225 (= 9x9 + 9x8 + 8x9) modules for finder patterns and
  15428. * format information;
  15429. * - 2n-34 (= 2(n-17)) modules for timing patterns;
  15430. * - 36 (= 3x6 + 6x3) modules for version information, if any;
  15431. * - 25m^2-75 (= (m^2-3)(5x5)) modules for alignment patterns
  15432. * if any, but 10m-20 (= 2(m-2)x5) of them overlaps with
  15433. * timing patterns.
  15434. */
  15435. var v = VERSIONS[ver];
  15436. var nbits = 16*ver*ver + 128*ver + 64; // finder, timing and format info.
  15437. if (needsverinfo(ver)) nbits -= 36; // version information
  15438. if (v[2].length) { // alignment patterns
  15439. nbits -= 25 * v[2].length * v[2].length - 10 * v[2].length - 55;
  15440. }
  15441. return nbits;
  15442. };
  15443. // returns the number of bits available for data portions (i.e. excludes ECC
  15444. // bits but includes mode and length bits) in this version and ECC level.
  15445. var ndatabits = function(ver, ecclevel) {
  15446. var nbits = nfullbits(ver) & ~7; // no sub-octet code words
  15447. var v = VERSIONS[ver];
  15448. nbits -= 8 * v[0][ecclevel] * v[1][ecclevel]; // ecc bits
  15449. return nbits;
  15450. };
  15451. // returns the number of bits required for the length of data.
  15452. // (cf. Table 3 in JIS X 0510:2004 p. 16)
  15453. var ndatalenbits = function(ver, mode) {
  15454. switch (mode) {
  15455. case MODE_NUMERIC: return (ver < 10 ? 10 : ver < 27 ? 12 : 14);
  15456. case MODE_ALPHANUMERIC: return (ver < 10 ? 9 : ver < 27 ? 11 : 13);
  15457. case MODE_OCTET: return (ver < 10 ? 8 : 16);
  15458. case MODE_KANJI: return (ver < 10 ? 8 : ver < 27 ? 10 : 12);
  15459. }
  15460. };
  15461. // returns the maximum length of data possible in given configuration.
  15462. var getmaxdatalen = function(ver, mode, ecclevel) {
  15463. var nbits = ndatabits(ver, ecclevel) - 4 - ndatalenbits(ver, mode); // 4 for mode bits
  15464. switch (mode) {
  15465. case MODE_NUMERIC:
  15466. return ((nbits/10) | 0) * 3 + (nbits%10 < 4 ? 0 : nbits%10 < 7 ? 1 : 2);
  15467. case MODE_ALPHANUMERIC:
  15468. return ((nbits/11) | 0) * 2 + (nbits%11 < 6 ? 0 : 1);
  15469. case MODE_OCTET:
  15470. return (nbits/8) | 0;
  15471. case MODE_KANJI:
  15472. return (nbits/13) | 0;
  15473. }
  15474. };
  15475. // checks if the given data can be encoded in given mode, and returns
  15476. // the converted data for the further processing if possible. otherwise
  15477. // returns null.
  15478. //
  15479. // this function does not check the length of data; it is a duty of
  15480. // encode function below (as it depends on the version and ECC level too).
  15481. var validatedata = function(mode, data) {
  15482. switch (mode) {
  15483. case MODE_NUMERIC:
  15484. if (!data.match(NUMERIC_REGEXP)) return null;
  15485. return data;
  15486. case MODE_ALPHANUMERIC:
  15487. if (!data.match(ALPHANUMERIC_REGEXP)) return null;
  15488. return data.toUpperCase();
  15489. case MODE_OCTET:
  15490. if (typeof data === 'string') { // encode as utf-8 string
  15491. var newdata = [];
  15492. for (var i = 0; i < data.length; ++i) {
  15493. var ch = data.charCodeAt(i);
  15494. if (ch < 0x80) {
  15495. newdata.push(ch);
  15496. } else if (ch < 0x800) {
  15497. newdata.push(0xc0 | (ch >> 6),
  15498. 0x80 | (ch & 0x3f));
  15499. } else if (ch < 0x10000) {
  15500. newdata.push(0xe0 | (ch >> 12),
  15501. 0x80 | ((ch >> 6) & 0x3f),
  15502. 0x80 | (ch & 0x3f));
  15503. } else {
  15504. newdata.push(0xf0 | (ch >> 18),
  15505. 0x80 | ((ch >> 12) & 0x3f),
  15506. 0x80 | ((ch >> 6) & 0x3f),
  15507. 0x80 | (ch & 0x3f));
  15508. }
  15509. }
  15510. return newdata;
  15511. } else {
  15512. return data;
  15513. }
  15514. }
  15515. };
  15516. // returns the code words (sans ECC bits) for given data and configurations.
  15517. // requires data to be preprocessed by validatedata. no length check is
  15518. // performed, and everything has to be checked before calling this function.
  15519. var encode = function(ver, mode, data, maxbuflen) {
  15520. var buf = [];
  15521. var bits = 0, remaining = 8;
  15522. var datalen = data.length;
  15523. // this function is intentionally no-op when n=0.
  15524. var pack = function(x, n) {
  15525. if (n >= remaining) {
  15526. buf.push(bits | (x >> (n -= remaining)));
  15527. while (n >= 8) buf.push((x >> (n -= 8)) & 255);
  15528. bits = 0;
  15529. remaining = 8;
  15530. }
  15531. if (n > 0) bits |= (x & ((1 << n) - 1)) << (remaining -= n);
  15532. };
  15533. var nlenbits = ndatalenbits(ver, mode);
  15534. pack(mode, 4);
  15535. pack(datalen, nlenbits);
  15536. switch (mode) {
  15537. case MODE_NUMERIC:
  15538. for (var i = 2; i < datalen; i += 3) {
  15539. pack(parseInt(data.substring(i-2,i+1), 10), 10);
  15540. }
  15541. pack(parseInt(data.substring(i-2), 10), [0,4,7][datalen%3]);
  15542. break;
  15543. case MODE_ALPHANUMERIC:
  15544. for (var i = 1; i < datalen; i += 2) {
  15545. pack(ALPHANUMERIC_MAP[data.charAt(i-1)] * 45 +
  15546. ALPHANUMERIC_MAP[data.charAt(i)], 11);
  15547. }
  15548. if (datalen % 2 == 1) {
  15549. pack(ALPHANUMERIC_MAP[data.charAt(i-1)], 6);
  15550. }
  15551. break;
  15552. case MODE_OCTET:
  15553. for (var i = 0; i < datalen; ++i) {
  15554. pack(data[i], 8);
  15555. }
  15556. break;
  15557. }
  15558. // final bits. it is possible that adding terminator causes the buffer
  15559. // to overflow, but then the buffer truncated to the maximum size will
  15560. // be valid as the truncated terminator mode bits and padding is
  15561. // identical in appearance (cf. JIS X 0510:2004 sec 8.4.8).
  15562. pack(MODE_TERMINATOR, 4);
  15563. if (remaining < 8) buf.push(bits);
  15564. // the padding to fill up the remaining space. we should not add any
  15565. // words when the overflow already occurred.
  15566. while (buf.length + 1 < maxbuflen) buf.push(0xec, 0x11);
  15567. if (buf.length < maxbuflen) buf.push(0xec);
  15568. return buf;
  15569. };
  15570. // calculates ECC code words for given code words and generator polynomial.
  15571. //
  15572. // this is quite similar to CRC calculation as both Reed-Solomon and CRC use
  15573. // the certain kind of cyclic codes, which is effectively the division of
  15574. // zero-augumented polynomial by the generator polynomial. the only difference
  15575. // is that Reed-Solomon uses GF(2^8), instead of CRC's GF(2), and Reed-Solomon
  15576. // uses the different generator polynomial than CRC's.
  15577. var calculateecc = function(poly, genpoly) {
  15578. var modulus = poly.slice(0);
  15579. var polylen = poly.length, genpolylen = genpoly.length;
  15580. for (var i = 0; i < genpolylen; ++i) modulus.push(0);
  15581. for (var i = 0; i < polylen; ) {
  15582. var quotient = GF256_INVMAP[modulus[i++]];
  15583. if (quotient >= 0) {
  15584. for (var j = 0; j < genpolylen; ++j) {
  15585. modulus[i+j] ^= GF256_MAP[(quotient + genpoly[j]) % 255];
  15586. }
  15587. }
  15588. }
  15589. return modulus.slice(polylen);
  15590. };
  15591. // auguments ECC code words to given code words. the resulting words are
  15592. // ready to be encoded in the matrix.
  15593. //
  15594. // the much of actual augumenting procedure follows JIS X 0510:2004 sec 8.7.
  15595. // the code is simplified using the fact that the size of each code & ECC
  15596. // blocks is almost same; for example, when we have 4 blocks and 46 data words
  15597. // the number of code words in those blocks are 11, 11, 12, 12 respectively.
  15598. var augumenteccs = function(poly, nblocks, genpoly) {
  15599. var subsizes = [];
  15600. var subsize = (poly.length / nblocks) | 0, subsize0 = 0;
  15601. var pivot = nblocks - poly.length % nblocks;
  15602. for (var i = 0; i < pivot; ++i) {
  15603. subsizes.push(subsize0);
  15604. subsize0 += subsize;
  15605. }
  15606. for (var i = pivot; i < nblocks; ++i) {
  15607. subsizes.push(subsize0);
  15608. subsize0 += subsize+1;
  15609. }
  15610. subsizes.push(subsize0);
  15611. var eccs = [];
  15612. for (var i = 0; i < nblocks; ++i) {
  15613. eccs.push(calculateecc(poly.slice(subsizes[i], subsizes[i+1]), genpoly));
  15614. }
  15615. var result = [];
  15616. var nitemsperblock = (poly.length / nblocks) | 0;
  15617. for (var i = 0; i < nitemsperblock; ++i) {
  15618. for (var j = 0; j < nblocks; ++j) {
  15619. result.push(poly[subsizes[j] + i]);
  15620. }
  15621. }
  15622. for (var j = pivot; j < nblocks; ++j) {
  15623. result.push(poly[subsizes[j+1] - 1]);
  15624. }
  15625. for (var i = 0; i < genpoly.length; ++i) {
  15626. for (var j = 0; j < nblocks; ++j) {
  15627. result.push(eccs[j][i]);
  15628. }
  15629. }
  15630. return result;
  15631. };
  15632. // auguments BCH(p+q,q) code to the polynomial over GF(2), given the proper
  15633. // genpoly. the both input and output are in binary numbers, and unlike
  15634. // calculateecc genpoly should include the 1 bit for the highest degree.
  15635. //
  15636. // actual polynomials used for this procedure are as follows:
  15637. // - p=10, q=5, genpoly=x^10+x^8+x^5+x^4+x^2+x+1 (JIS X 0510:2004 Appendix C)
  15638. // - p=18, q=6, genpoly=x^12+x^11+x^10+x^9+x^8+x^5+x^2+1 (ibid. Appendix D)
  15639. var augumentbch = function(poly, p, genpoly, q) {
  15640. var modulus = poly << q;
  15641. for (var i = p - 1; i >= 0; --i) {
  15642. if ((modulus >> (q+i)) & 1) modulus ^= genpoly << i;
  15643. }
  15644. return (poly << q) | modulus;
  15645. };
  15646. // creates the base matrix for given version. it returns two matrices, one of
  15647. // them is the actual one and the another represents the "reserved" portion
  15648. // (e.g. finder and timing patterns) of the matrix.
  15649. //
  15650. // some entries in the matrix may be undefined, rather than 0 or 1. this is
  15651. // intentional (no initialization needed!), and putdata below will fill
  15652. // the remaining ones.
  15653. var makebasematrix = function(ver) {
  15654. var v = VERSIONS[ver], n = getsizebyver(ver);
  15655. var matrix = [], reserved = [];
  15656. for (var i = 0; i < n; ++i) {
  15657. matrix.push([]);
  15658. reserved.push([]);
  15659. }
  15660. var blit = function(y, x, h, w, bits) {
  15661. for (var i = 0; i < h; ++i) {
  15662. for (var j = 0; j < w; ++j) {
  15663. matrix[y+i][x+j] = (bits[i] >> j) & 1;
  15664. reserved[y+i][x+j] = 1;
  15665. }
  15666. }
  15667. };
  15668. // finder patterns and a part of timing patterns
  15669. // will also mark the format information area (not yet written) as reserved.
  15670. blit(0, 0, 9, 9, [0x7f, 0x41, 0x5d, 0x5d, 0x5d, 0x41, 0x17f, 0x00, 0x40]);
  15671. blit(n-8, 0, 8, 9, [0x100, 0x7f, 0x41, 0x5d, 0x5d, 0x5d, 0x41, 0x7f]);
  15672. blit(0, n-8, 9, 8, [0xfe, 0x82, 0xba, 0xba, 0xba, 0x82, 0xfe, 0x00, 0x00]);
  15673. // the rest of timing patterns
  15674. for (var i = 9; i < n-8; ++i) {
  15675. matrix[6][i] = matrix[i][6] = ~i & 1;
  15676. reserved[6][i] = reserved[i][6] = 1;
  15677. }
  15678. // alignment patterns
  15679. var aligns = v[2], m = aligns.length;
  15680. for (var i = 0; i < m; ++i) {
  15681. var minj = (i===0 || i===m-1 ? 1 : 0), maxj = (i===0 ? m-1 : m);
  15682. for (var j = minj; j < maxj; ++j) {
  15683. blit(aligns[i], aligns[j], 5, 5, [0x1f, 0x11, 0x15, 0x11, 0x1f]);
  15684. }
  15685. }
  15686. // version information
  15687. if (needsverinfo(ver)) {
  15688. var code = augumentbch(ver, 6, 0x1f25, 12);
  15689. var k = 0;
  15690. for (var i = 0; i < 6; ++i) {
  15691. for (var j = 0; j < 3; ++j) {
  15692. matrix[i][(n-11)+j] = matrix[(n-11)+j][i] = (code >> k++) & 1;
  15693. reserved[i][(n-11)+j] = reserved[(n-11)+j][i] = 1;
  15694. }
  15695. }
  15696. }
  15697. return {matrix: matrix, reserved: reserved};
  15698. };
  15699. // fills the data portion (i.e. unmarked in reserved) of the matrix with given
  15700. // code words. the size of code words should be no more than available bits,
  15701. // and remaining bits are padded to 0 (cf. JIS X 0510:2004 sec 8.7.3).
  15702. var putdata = function(matrix, reserved, buf) {
  15703. var n = matrix.length;
  15704. var k = 0, dir = -1;
  15705. for (var i = n-1; i >= 0; i -= 2) {
  15706. if (i == 6) --i; // skip the entire timing pattern column
  15707. var jj = (dir < 0 ? n-1 : 0);
  15708. for (var j = 0; j < n; ++j) {
  15709. for (var ii = i; ii > i-2; --ii) {
  15710. if (!reserved[jj][ii]) {
  15711. // may overflow, but (undefined >> x)
  15712. // is 0 so it will auto-pad to zero.
  15713. matrix[jj][ii] = (buf[k >> 3] >> (~k&7)) & 1;
  15714. ++k;
  15715. }
  15716. }
  15717. jj += dir;
  15718. }
  15719. dir = -dir;
  15720. }
  15721. return matrix;
  15722. };
  15723. // XOR-masks the data portion of the matrix. repeating the call with the same
  15724. // arguments will revert the prior call (convenient in the matrix evaluation).
  15725. var maskdata = function(matrix, reserved, mask) {
  15726. var maskf = MASKFUNCS[mask];
  15727. var n = matrix.length;
  15728. for (var i = 0; i < n; ++i) {
  15729. for (var j = 0; j < n; ++j) {
  15730. if (!reserved[i][j]) matrix[i][j] ^= maskf(i,j);
  15731. }
  15732. }
  15733. return matrix;
  15734. };
  15735. // puts the format information.
  15736. var putformatinfo = function(matrix, reserved, ecclevel, mask) {
  15737. var n = matrix.length;
  15738. var code = augumentbch((ecclevel << 3) | mask, 5, 0x537, 10) ^ 0x5412;
  15739. for (var i = 0; i < 15; ++i) {
  15740. var r = [0,1,2,3,4,5,7,8,n-7,n-6,n-5,n-4,n-3,n-2,n-1][i];
  15741. var c = [n-1,n-2,n-3,n-4,n-5,n-6,n-7,n-8,7,5,4,3,2,1,0][i];
  15742. matrix[r][8] = matrix[8][c] = (code >> i) & 1;
  15743. // we don't have to mark those bits reserved; always done
  15744. // in makebasematrix above.
  15745. }
  15746. return matrix;
  15747. };
  15748. // evaluates the resulting matrix and returns the score (lower is better).
  15749. // (cf. JIS X 0510:2004 sec 8.8.2)
  15750. //
  15751. // the evaluation procedure tries to avoid the problematic patterns naturally
  15752. // occuring from the original matrix. for example, it penaltizes the patterns
  15753. // which just look like the finder pattern which will confuse the decoder.
  15754. // we choose the mask which results in the lowest score among 8 possible ones.
  15755. //
  15756. // note: zxing seems to use the same procedure and in many cases its choice
  15757. // agrees to ours, but sometimes it does not. practically it doesn't matter.
  15758. var evaluatematrix = function(matrix) {
  15759. // N1+(k-5) points for each consecutive row of k same-colored modules,
  15760. // where k >= 5. no overlapping row counts.
  15761. var PENALTY_CONSECUTIVE = 3;
  15762. // N2 points for each 2x2 block of same-colored modules.
  15763. // overlapping block does count.
  15764. var PENALTY_TWOBYTWO = 3;
  15765. // N3 points for each pattern with >4W:1B:1W:3B:1W:1B or
  15766. // 1B:1W:3B:1W:1B:>4W, or their multiples (e.g. highly unlikely,
  15767. // but 13W:3B:3W:9B:3W:3B counts).
  15768. var PENALTY_FINDERLIKE = 40;
  15769. // N4*k points for every (5*k)% deviation from 50% black density.
  15770. // i.e. k=1 for 55~60% and 40~45%, k=2 for 60~65% and 35~40%, etc.
  15771. var PENALTY_DENSITY = 10;
  15772. var evaluategroup = function(groups) { // assumes [W,B,W,B,W,...,B,W]
  15773. var score = 0;
  15774. for (var i = 0; i < groups.length; ++i) {
  15775. if (groups[i] >= 5) score += PENALTY_CONSECUTIVE + (groups[i]-5);
  15776. }
  15777. for (var i = 5; i < groups.length; i += 2) {
  15778. var p = groups[i];
  15779. if (groups[i-1] == p && groups[i-2] == 3*p && groups[i-3] == p &&
  15780. groups[i-4] == p && (groups[i-5] >= 4*p || groups[i+1] >= 4*p)) {
  15781. // this part differs from zxing...
  15782. score += PENALTY_FINDERLIKE;
  15783. }
  15784. }
  15785. return score;
  15786. };
  15787. var n = matrix.length;
  15788. var score = 0, nblacks = 0;
  15789. for (var i = 0; i < n; ++i) {
  15790. var row = matrix[i];
  15791. var groups;
  15792. // evaluate the current row
  15793. groups = [0]; // the first empty group of white
  15794. for (var j = 0; j < n; ) {
  15795. var k;
  15796. for (k = 0; j < n && row[j]; ++k) ++j;
  15797. groups.push(k);
  15798. for (k = 0; j < n && !row[j]; ++k) ++j;
  15799. groups.push(k);
  15800. }
  15801. score += evaluategroup(groups);
  15802. // evaluate the current column
  15803. groups = [0];
  15804. for (var j = 0; j < n; ) {
  15805. var k;
  15806. for (k = 0; j < n && matrix[j][i]; ++k) ++j;
  15807. groups.push(k);
  15808. for (k = 0; j < n && !matrix[j][i]; ++k) ++j;
  15809. groups.push(k);
  15810. }
  15811. score += evaluategroup(groups);
  15812. // check the 2x2 box and calculate the density
  15813. var nextrow = matrix[i+1] || [];
  15814. nblacks += row[0];
  15815. for (var j = 1; j < n; ++j) {
  15816. var p = row[j];
  15817. nblacks += p;
  15818. // at least comparison with next row should be strict...
  15819. if (row[j-1] == p && nextrow[j] === p && nextrow[j-1] === p) {
  15820. score += PENALTY_TWOBYTWO;
  15821. }
  15822. }
  15823. }
  15824. score += PENALTY_DENSITY * ((Math.abs(nblacks / n / n - 0.5) / 0.05) | 0);
  15825. return score;
  15826. };
  15827. // returns the fully encoded QR code matrix which contains given data.
  15828. // it also chooses the best mask automatically when mask is -1.
  15829. var generate = function(data, ver, mode, ecclevel, mask) {
  15830. var v = VERSIONS[ver];
  15831. var buf = encode(ver, mode, data, ndatabits(ver, ecclevel) >> 3);
  15832. buf = augumenteccs(buf, v[1][ecclevel], GF256_GENPOLY[v[0][ecclevel]]);
  15833. var result = makebasematrix(ver);
  15834. var matrix = result.matrix, reserved = result.reserved;
  15835. putdata(matrix, reserved, buf);
  15836. if (mask < 0) {
  15837. // find the best mask
  15838. maskdata(matrix, reserved, 0);
  15839. putformatinfo(matrix, reserved, ecclevel, 0);
  15840. var bestmask = 0, bestscore = evaluatematrix(matrix);
  15841. maskdata(matrix, reserved, 0);
  15842. for (mask = 1; mask < 8; ++mask) {
  15843. maskdata(matrix, reserved, mask);
  15844. putformatinfo(matrix, reserved, ecclevel, mask);
  15845. var score = evaluatematrix(matrix);
  15846. if (bestscore > score) {
  15847. bestscore = score;
  15848. bestmask = mask;
  15849. }
  15850. maskdata(matrix, reserved, mask);
  15851. }
  15852. mask = bestmask;
  15853. }
  15854. maskdata(matrix, reserved, mask);
  15855. putformatinfo(matrix, reserved, ecclevel, mask);
  15856. return matrix;
  15857. };
  15858. // the public interface is trivial; the options available are as follows:
  15859. //
  15860. // - version: an integer in [1,40]. when omitted (or -1) the smallest possible
  15861. // version is chosen.
  15862. // - mode: one of 'numeric', 'alphanumeric', 'octet'. when omitted the smallest
  15863. // possible mode is chosen.
  15864. // - eccLevel: one of 'L', 'M', 'Q', 'H'. defaults to 'L'.
  15865. // - mask: an integer in [0,7]. when omitted (or -1) the best mask is chosen.
  15866. //
  15867. function generateFrame(data, options) {
  15868. var MODES = {'numeric': MODE_NUMERIC, 'alphanumeric': MODE_ALPHANUMERIC,
  15869. 'octet': MODE_OCTET};
  15870. var ECCLEVELS = {'L': ECCLEVEL_L, 'M': ECCLEVEL_M, 'Q': ECCLEVEL_Q,
  15871. 'H': ECCLEVEL_H};
  15872. options = options || {};
  15873. var ver = options.version || -1;
  15874. var ecclevel = ECCLEVELS[(options.eccLevel || 'L').toUpperCase()];
  15875. var mode = options.mode ? MODES[options.mode.toLowerCase()] : -1;
  15876. var mask = 'mask' in options ? options.mask : -1;
  15877. if (mode < 0) {
  15878. if (typeof data === 'string') {
  15879. if (data.match(NUMERIC_REGEXP)) {
  15880. mode = MODE_NUMERIC;
  15881. } else if (data.match(ALPHANUMERIC_OUT_REGEXP)) {
  15882. // while encode supports case-insensitive encoding, we restrict the data to be uppercased when auto-selecting the mode.
  15883. mode = MODE_ALPHANUMERIC;
  15884. } else {
  15885. mode = MODE_OCTET;
  15886. }
  15887. } else {
  15888. mode = MODE_OCTET;
  15889. }
  15890. } else if (!(mode == MODE_NUMERIC || mode == MODE_ALPHANUMERIC ||
  15891. mode == MODE_OCTET)) {
  15892. throw 'invalid or unsupported mode';
  15893. }
  15894. data = validatedata(mode, data);
  15895. if (data === null) throw 'invalid data format';
  15896. if (ecclevel < 0 || ecclevel > 3) throw 'invalid ECC level';
  15897. if (ver < 0) {
  15898. for (ver = 1; ver <= 40; ++ver) {
  15899. if (data.length <= getmaxdatalen(ver, mode, ecclevel)) break;
  15900. }
  15901. if (ver > 40) throw 'too large data for the Qr format';
  15902. } else if (ver < 1 || ver > 40) {
  15903. throw 'invalid Qr version! should be between 1 and 40';
  15904. }
  15905. if (mask != -1 && (mask < 0 || mask > 8)) throw 'invalid mask';
  15906. //console.log('version:', ver, 'mode:', mode, 'ECC:', ecclevel, 'mask:', mask )
  15907. return generate(data, ver, mode, ecclevel, mask);
  15908. }
  15909. // options
  15910. // - modulesize: a number. this is a size of each modules in pixels, and
  15911. // defaults to 5px.
  15912. // - margin: a number. this is a size of margin in *modules*, and defaults to
  15913. // 4 (white modules). the specficiation mandates the margin no less than 4
  15914. // modules, so it is better not to alter this value unless you know what
  15915. // you're doing.
  15916. function buildCanvas(data, options) {
  15917. var canvas = [];
  15918. var background = data.background || '#fff';
  15919. var foreground = data.foreground || '#000';
  15920. //var margin = options.margin || 4;
  15921. var matrix = generateFrame(data, options);
  15922. var n = matrix.length;
  15923. var modSize = Math.floor( options.fit ? options.fit/n : 5 );
  15924. var size = n * modSize;
  15925. canvas.push({
  15926. type: 'rect',
  15927. x: 0, y: 0, w: size, h: size, lineWidth: 0, color: background
  15928. });
  15929. for (var i = 0; i < n; ++i) {
  15930. for (var j = 0; j < n; ++j) {
  15931. if(matrix[i][j]) {
  15932. canvas.push({
  15933. type: 'rect',
  15934. x: modSize * i,
  15935. y: modSize * j,
  15936. w: modSize,
  15937. h: modSize,
  15938. lineWidth: 0,
  15939. color: foreground
  15940. });
  15941. }
  15942. }
  15943. }
  15944. return {
  15945. canvas: canvas,
  15946. size: size
  15947. };
  15948. }
  15949. function measure(node) {
  15950. var cd = buildCanvas(node.qr, node);
  15951. node._canvas = cd.canvas;
  15952. node._width = node._height = node._minWidth = node._maxWidth = node._minHeight = node._maxHeight = cd.size;
  15953. return node;
  15954. }
  15955. module.exports = {
  15956. measure: measure
  15957. };
  15958. /***/ },
  15959. /* 19 */
  15960. /***/ function(module, exports, __webpack_require__) {
  15961. /* jslint node: true */
  15962. 'use strict';
  15963. var TraversalTracker = __webpack_require__(12);
  15964. /**
  15965. * Creates an instance of DocumentContext - a store for current x, y positions and available width/height.
  15966. * It facilitates column divisions and vertical sync
  15967. */
  15968. function DocumentContext(pageSize, pageMargins) {
  15969. this.pages = [];
  15970. this.pageMargins = pageMargins;
  15971. this.x = pageMargins.left;
  15972. this.availableWidth = pageSize.width - pageMargins.left - pageMargins.right;
  15973. this.availableHeight = 0;
  15974. this.page = -1;
  15975. this.snapshots = [];
  15976. this.endingCell = null;
  15977. this.tracker = new TraversalTracker();
  15978. this.addPage(pageSize);
  15979. }
  15980. DocumentContext.prototype.beginColumnGroup = function() {
  15981. this.snapshots.push({
  15982. x: this.x,
  15983. y: this.y,
  15984. availableHeight: this.availableHeight,
  15985. availableWidth: this.availableWidth,
  15986. page: this.page,
  15987. bottomMost: { y: this.y, page: this.page },
  15988. endingCell: this.endingCell,
  15989. lastColumnWidth: this.lastColumnWidth
  15990. });
  15991. this.lastColumnWidth = 0;
  15992. };
  15993. DocumentContext.prototype.beginColumn = function(width, offset, endingCell) {
  15994. var saved = this.snapshots[this.snapshots.length - 1];
  15995. this.calculateBottomMost(saved);
  15996. this.endingCell = endingCell;
  15997. this.page = saved.page;
  15998. this.x = this.x + this.lastColumnWidth + (offset || 0);
  15999. this.y = saved.y;
  16000. this.availableWidth = width; //saved.availableWidth - offset;
  16001. this.availableHeight = saved.availableHeight;
  16002. this.lastColumnWidth = width;
  16003. };
  16004. DocumentContext.prototype.calculateBottomMost = function(destContext) {
  16005. if (this.endingCell) {
  16006. this.saveContextInEndingCell(this.endingCell);
  16007. this.endingCell = null;
  16008. } else {
  16009. destContext.bottomMost = bottomMostContext(this, destContext.bottomMost);
  16010. }
  16011. };
  16012. DocumentContext.prototype.markEnding = function(endingCell) {
  16013. this.page = endingCell._columnEndingContext.page;
  16014. this.x = endingCell._columnEndingContext.x;
  16015. this.y = endingCell._columnEndingContext.y;
  16016. this.availableWidth = endingCell._columnEndingContext.availableWidth;
  16017. this.availableHeight = endingCell._columnEndingContext.availableHeight;
  16018. this.lastColumnWidth = endingCell._columnEndingContext.lastColumnWidth;
  16019. };
  16020. DocumentContext.prototype.saveContextInEndingCell = function(endingCell) {
  16021. endingCell._columnEndingContext = {
  16022. page: this.page,
  16023. x: this.x,
  16024. y: this.y,
  16025. availableHeight: this.availableHeight,
  16026. availableWidth: this.availableWidth,
  16027. lastColumnWidth: this.lastColumnWidth
  16028. };
  16029. };
  16030. DocumentContext.prototype.completeColumnGroup = function() {
  16031. var saved = this.snapshots.pop();
  16032. this.calculateBottomMost(saved);
  16033. this.endingCell = null;
  16034. this.x = saved.x;
  16035. this.y = saved.bottomMost.y;
  16036. this.page = saved.bottomMost.page;
  16037. this.availableWidth = saved.availableWidth;
  16038. this.availableHeight = saved.bottomMost.availableHeight;
  16039. this.lastColumnWidth = saved.lastColumnWidth;
  16040. };
  16041. DocumentContext.prototype.addMargin = function(left, right) {
  16042. this.x += left;
  16043. this.availableWidth -= left + (right || 0);
  16044. };
  16045. DocumentContext.prototype.moveDown = function(offset) {
  16046. this.y += offset;
  16047. this.availableHeight -= offset;
  16048. return this.availableHeight > 0;
  16049. };
  16050. DocumentContext.prototype.initializePage = function() {
  16051. this.y = this.pageMargins.top;
  16052. this.availableHeight = this.getCurrentPage().pageSize.height - this.pageMargins.top - this.pageMargins.bottom;
  16053. this.pageSnapshot().availableWidth = this.getCurrentPage().pageSize.width - this.pageMargins.left - this.pageMargins.right;
  16054. };
  16055. DocumentContext.prototype.pageSnapshot = function(){
  16056. if(this.snapshots[0]){
  16057. return this.snapshots[0];
  16058. } else {
  16059. return this;
  16060. }
  16061. };
  16062. DocumentContext.prototype.moveTo = function(x,y) {
  16063. if(x !== undefined && x !== null) {
  16064. this.x = x;
  16065. this.availableWidth = this.getCurrentPage().pageSize.width - this.x - this.pageMargins.right;
  16066. }
  16067. if(y !== undefined && y !== null){
  16068. this.y = y;
  16069. this.availableHeight = this.getCurrentPage().pageSize.height - this.y - this.pageMargins.bottom;
  16070. }
  16071. };
  16072. DocumentContext.prototype.beginDetachedBlock = function() {
  16073. this.snapshots.push({
  16074. x: this.x,
  16075. y: this.y,
  16076. availableHeight: this.availableHeight,
  16077. availableWidth: this.availableWidth,
  16078. page: this.page,
  16079. endingCell: this.endingCell,
  16080. lastColumnWidth: this.lastColumnWidth
  16081. });
  16082. };
  16083. DocumentContext.prototype.endDetachedBlock = function() {
  16084. var saved = this.snapshots.pop();
  16085. this.x = saved.x;
  16086. this.y = saved.y;
  16087. this.availableWidth = saved.availableWidth;
  16088. this.availableHeight = saved.availableHeight;
  16089. this.page = saved.page;
  16090. this.endingCell = saved.endingCell;
  16091. this.lastColumnWidth = saved.lastColumnWidth;
  16092. };
  16093. function pageOrientation(pageOrientationString, currentPageOrientation){
  16094. if(pageOrientationString === undefined) {
  16095. return currentPageOrientation;
  16096. } else if(pageOrientationString === 'landscape'){
  16097. return 'landscape';
  16098. } else {
  16099. return 'portrait';
  16100. }
  16101. }
  16102. var getPageSize = function (currentPage, newPageOrientation) {
  16103. newPageOrientation = pageOrientation(newPageOrientation, currentPage.pageSize.orientation);
  16104. if(newPageOrientation !== currentPage.pageSize.orientation) {
  16105. return {
  16106. orientation: newPageOrientation,
  16107. width: currentPage.pageSize.height,
  16108. height: currentPage.pageSize.width
  16109. };
  16110. } else {
  16111. return {
  16112. orientation: currentPage.pageSize.orientation,
  16113. width: currentPage.pageSize.width,
  16114. height: currentPage.pageSize.height
  16115. };
  16116. }
  16117. };
  16118. DocumentContext.prototype.moveToNextPage = function(pageOrientation) {
  16119. var nextPageIndex = this.page + 1;
  16120. var prevPage = this.page;
  16121. var prevY = this.y;
  16122. var createNewPage = nextPageIndex >= this.pages.length;
  16123. if (createNewPage) {
  16124. this.addPage(getPageSize(this.getCurrentPage(), pageOrientation));
  16125. } else {
  16126. this.page = nextPageIndex;
  16127. this.initializePage();
  16128. }
  16129. return {
  16130. newPageCreated: createNewPage,
  16131. prevPage: prevPage,
  16132. prevY: prevY,
  16133. y: this.y
  16134. };
  16135. };
  16136. DocumentContext.prototype.addPage = function(pageSize) {
  16137. var page = { items: [], pageSize: pageSize };
  16138. this.pages.push(page);
  16139. this.page = this.pages.length - 1;
  16140. this.initializePage();
  16141. this.tracker.emit('pageAdded');
  16142. return page;
  16143. };
  16144. DocumentContext.prototype.getCurrentPage = function() {
  16145. if (this.page < 0 || this.page >= this.pages.length) return null;
  16146. return this.pages[this.page];
  16147. };
  16148. DocumentContext.prototype.getCurrentPosition = function() {
  16149. var pageSize = this.getCurrentPage().pageSize;
  16150. var innerHeight = pageSize.height - this.pageMargins.top - this.pageMargins.bottom;
  16151. var innerWidth = pageSize.width - this.pageMargins.left - this.pageMargins.right;
  16152. return {
  16153. pageNumber: this.page + 1,
  16154. pageOrientation: pageSize.orientation,
  16155. pageInnerHeight: innerHeight,
  16156. pageInnerWidth: innerWidth,
  16157. left: this.x,
  16158. top: this.y,
  16159. verticalRatio: ((this.y - this.pageMargins.top) / innerHeight),
  16160. horizontalRatio: ((this.x - this.pageMargins.left) / innerWidth)
  16161. };
  16162. };
  16163. function bottomMostContext(c1, c2) {
  16164. var r;
  16165. if (c1.page > c2.page) r = c1;
  16166. else if (c2.page > c1.page) r = c2;
  16167. else r = (c1.y > c2.y) ? c1 : c2;
  16168. return {
  16169. page: r.page,
  16170. x: r.x,
  16171. y: r.y,
  16172. availableHeight: r.availableHeight,
  16173. availableWidth: r.availableWidth
  16174. };
  16175. }
  16176. /****TESTS**** (add a leading '/' to uncomment)
  16177. DocumentContext.bottomMostContext = bottomMostContext;
  16178. // */
  16179. module.exports = DocumentContext;
  16180. /***/ },
  16181. /* 20 */
  16182. /***/ function(module, exports, __webpack_require__) {
  16183. /* jslint node: true */
  16184. 'use strict';
  16185. var ElementWriter = __webpack_require__(21);
  16186. /**
  16187. * Creates an instance of PageElementWriter - an extended ElementWriter
  16188. * which can handle:
  16189. * - page-breaks (it adds new pages when there's not enough space left),
  16190. * - repeatable fragments (like table-headers, which are repeated everytime
  16191. * a page-break occurs)
  16192. * - transactions (used for unbreakable-blocks when we want to make sure
  16193. * whole block will be rendered on the same page)
  16194. */
  16195. function PageElementWriter(context, tracker) {
  16196. this.transactionLevel = 0;
  16197. this.repeatables = [];
  16198. this.tracker = tracker;
  16199. this.writer = new ElementWriter(context, tracker);
  16200. }
  16201. function fitOnPage(self, addFct){
  16202. var position = addFct(self);
  16203. if (!position) {
  16204. self.moveToNextPage();
  16205. position = addFct(self);
  16206. }
  16207. return position;
  16208. }
  16209. PageElementWriter.prototype.addLine = function(line, dontUpdateContextPosition, index) {
  16210. return fitOnPage(this, function(self){
  16211. return self.writer.addLine(line, dontUpdateContextPosition, index);
  16212. });
  16213. };
  16214. PageElementWriter.prototype.addImage = function(image, index) {
  16215. return fitOnPage(this, function(self){
  16216. return self.writer.addImage(image, index);
  16217. });
  16218. };
  16219. PageElementWriter.prototype.addQr = function(qr, index) {
  16220. return fitOnPage(this, function(self){
  16221. return self.writer.addQr(qr, index);
  16222. });
  16223. };
  16224. PageElementWriter.prototype.addVector = function(vector, ignoreContextX, ignoreContextY, index) {
  16225. return this.writer.addVector(vector, ignoreContextX, ignoreContextY, index);
  16226. };
  16227. PageElementWriter.prototype.addFragment = function(fragment, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition) {
  16228. if (!this.writer.addFragment(fragment, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition)) {
  16229. this.moveToNextPage();
  16230. this.writer.addFragment(fragment, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition);
  16231. }
  16232. };
  16233. PageElementWriter.prototype.moveToNextPage = function(pageOrientation) {
  16234. var nextPage = this.writer.context.moveToNextPage(pageOrientation);
  16235. if (nextPage.newPageCreated) {
  16236. this.repeatables.forEach(function(rep) {
  16237. this.writer.addFragment(rep, true);
  16238. }, this);
  16239. } else {
  16240. this.repeatables.forEach(function(rep) {
  16241. this.writer.context.moveDown(rep.height);
  16242. }, this);
  16243. }
  16244. this.writer.tracker.emit('pageChanged', {
  16245. prevPage: nextPage.prevPage,
  16246. prevY: nextPage.prevY,
  16247. y: nextPage.y
  16248. });
  16249. };
  16250. PageElementWriter.prototype.beginUnbreakableBlock = function(width, height) {
  16251. if (this.transactionLevel++ === 0) {
  16252. this.originalX = this.writer.context.x;
  16253. this.writer.pushContext(width, height);
  16254. }
  16255. };
  16256. PageElementWriter.prototype.commitUnbreakableBlock = function(forcedX, forcedY) {
  16257. if (--this.transactionLevel === 0) {
  16258. var unbreakableContext = this.writer.context;
  16259. this.writer.popContext();
  16260. var nbPages = unbreakableContext.pages.length;
  16261. if(nbPages > 0) {
  16262. // no support for multi-page unbreakableBlocks
  16263. var fragment = unbreakableContext.pages[0];
  16264. fragment.xOffset = forcedX;
  16265. fragment.yOffset = forcedY;
  16266. //TODO: vectors can influence height in some situations
  16267. if(nbPages > 1) {
  16268. // on out-of-context blocs (headers, footers, background) height should be the whole DocumentContext height
  16269. if (forcedX !== undefined || forcedY !== undefined) {
  16270. fragment.height = unbreakableContext.getCurrentPage().pageSize.height - unbreakableContext.pageMargins.top - unbreakableContext.pageMargins.bottom;
  16271. } else {
  16272. fragment.height = this.writer.context.getCurrentPage().pageSize.height - this.writer.context.pageMargins.top - this.writer.context.pageMargins.bottom;
  16273. for (var i = 0, l = this.repeatables.length; i < l; i++) {
  16274. fragment.height -= this.repeatables[i].height;
  16275. }
  16276. }
  16277. } else {
  16278. fragment.height = unbreakableContext.y;
  16279. }
  16280. if (forcedX !== undefined || forcedY !== undefined) {
  16281. this.writer.addFragment(fragment, true, true, true);
  16282. } else {
  16283. this.addFragment(fragment);
  16284. }
  16285. }
  16286. }
  16287. };
  16288. PageElementWriter.prototype.currentBlockToRepeatable = function() {
  16289. var unbreakableContext = this.writer.context;
  16290. var rep = { items: [] };
  16291. unbreakableContext.pages[0].items.forEach(function(item) {
  16292. rep.items.push(item);
  16293. });
  16294. rep.xOffset = this.originalX;
  16295. //TODO: vectors can influence height in some situations
  16296. rep.height = unbreakableContext.y;
  16297. return rep;
  16298. };
  16299. PageElementWriter.prototype.pushToRepeatables = function(rep) {
  16300. this.repeatables.push(rep);
  16301. };
  16302. PageElementWriter.prototype.popFromRepeatables = function() {
  16303. this.repeatables.pop();
  16304. };
  16305. PageElementWriter.prototype.context = function() {
  16306. return this.writer.context;
  16307. };
  16308. module.exports = PageElementWriter;
  16309. /***/ },
  16310. /* 21 */
  16311. /***/ function(module, exports, __webpack_require__) {
  16312. /* jslint node: true */
  16313. 'use strict';
  16314. var Line = __webpack_require__(22);
  16315. var pack = __webpack_require__(17).pack;
  16316. var offsetVector = __webpack_require__(17).offsetVector;
  16317. var DocumentContext = __webpack_require__(19);
  16318. /**
  16319. * Creates an instance of ElementWriter - a line/vector writer, which adds
  16320. * elements to current page and sets their positions based on the context
  16321. */
  16322. function ElementWriter(context, tracker) {
  16323. this.context = context;
  16324. this.contextStack = [];
  16325. this.tracker = tracker;
  16326. }
  16327. function addPageItem(page, item, index) {
  16328. if(index === null || index === undefined || index < 0 || index > page.items.length) {
  16329. page.items.push(item);
  16330. } else {
  16331. page.items.splice(index, 0, item);
  16332. }
  16333. }
  16334. ElementWriter.prototype.addLine = function(line, dontUpdateContextPosition, index) {
  16335. var height = line.getHeight();
  16336. var context = this.context;
  16337. var page = context.getCurrentPage(),
  16338. position = this.getCurrentPositionOnPage();
  16339. if (context.availableHeight < height || !page) {
  16340. return false;
  16341. }
  16342. line.x = context.x + (line.x || 0);
  16343. line.y = context.y + (line.y || 0);
  16344. this.alignLine(line);
  16345. addPageItem(page, {
  16346. type: 'line',
  16347. item: line
  16348. }, index);
  16349. this.tracker.emit('lineAdded', line);
  16350. if (!dontUpdateContextPosition) context.moveDown(height);
  16351. return position;
  16352. };
  16353. ElementWriter.prototype.alignLine = function(line) {
  16354. var width = this.context.availableWidth;
  16355. var lineWidth = line.getWidth();
  16356. var alignment = line.inlines && line.inlines.length > 0 && line.inlines[0].alignment;
  16357. var offset = 0;
  16358. switch(alignment) {
  16359. case 'right':
  16360. offset = width - lineWidth;
  16361. break;
  16362. case 'center':
  16363. offset = (width - lineWidth) / 2;
  16364. break;
  16365. }
  16366. if (offset) {
  16367. line.x = (line.x || 0) + offset;
  16368. }
  16369. if (alignment === 'justify' &&
  16370. !line.newLineForced &&
  16371. !line.lastLineInParagraph &&
  16372. line.inlines.length > 1) {
  16373. var additionalSpacing = (width - lineWidth) / (line.inlines.length - 1);
  16374. for(var i = 1, l = line.inlines.length; i < l; i++) {
  16375. offset = i * additionalSpacing;
  16376. line.inlines[i].x += offset;
  16377. }
  16378. }
  16379. };
  16380. ElementWriter.prototype.addImage = function(image, index) {
  16381. var context = this.context;
  16382. var page = context.getCurrentPage(),
  16383. position = this.getCurrentPositionOnPage();
  16384. if (context.availableHeight < image._height || !page) {
  16385. return false;
  16386. }
  16387. image.x = context.x + (image.x || 0);
  16388. image.y = context.y;
  16389. this.alignImage(image);
  16390. addPageItem(page, {
  16391. type: 'image',
  16392. item: image
  16393. }, index);
  16394. context.moveDown(image._height);
  16395. return position;
  16396. };
  16397. ElementWriter.prototype.addQr = function(qr, index) {
  16398. var context = this.context;
  16399. var page = context.getCurrentPage(),
  16400. position = this.getCurrentPositionOnPage();
  16401. if (context.availableHeight < qr._height || !page) {
  16402. return false;
  16403. }
  16404. qr.x = context.x + (qr.x || 0);
  16405. qr.y = context.y;
  16406. this.alignImage(qr);
  16407. for (var i=0, l=qr._canvas.length; i < l; i++) {
  16408. var vector = qr._canvas[i];
  16409. vector.x += qr.x;
  16410. vector.y += qr.y;
  16411. this.addVector(vector, true, true, index);
  16412. }
  16413. context.moveDown(qr._height);
  16414. return position;
  16415. };
  16416. ElementWriter.prototype.alignImage = function(image) {
  16417. var width = this.context.availableWidth;
  16418. var imageWidth = image._minWidth;
  16419. var offset = 0;
  16420. switch(image._alignment) {
  16421. case 'right':
  16422. offset = width - imageWidth;
  16423. break;
  16424. case 'center':
  16425. offset = (width - imageWidth) / 2;
  16426. break;
  16427. }
  16428. if (offset) {
  16429. image.x = (image.x || 0) + offset;
  16430. }
  16431. };
  16432. ElementWriter.prototype.addVector = function(vector, ignoreContextX, ignoreContextY, index) {
  16433. var context = this.context;
  16434. var page = context.getCurrentPage(),
  16435. position = this.getCurrentPositionOnPage();
  16436. if (page) {
  16437. offsetVector(vector, ignoreContextX ? 0 : context.x, ignoreContextY ? 0 : context.y);
  16438. addPageItem(page, {
  16439. type: 'vector',
  16440. item: vector
  16441. }, index);
  16442. return position;
  16443. }
  16444. };
  16445. function cloneLine(line) {
  16446. var result = new Line(line.maxWidth);
  16447. for(var key in line) {
  16448. if (line.hasOwnProperty(key)) {
  16449. result[key] = line[key];
  16450. }
  16451. }
  16452. return result;
  16453. }
  16454. ElementWriter.prototype.addFragment = function(block, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition) {
  16455. var ctx = this.context;
  16456. var page = ctx.getCurrentPage();
  16457. if (!useBlockXOffset && block.height > ctx.availableHeight) return false;
  16458. block.items.forEach(function(item) {
  16459. switch(item.type) {
  16460. case 'line':
  16461. var l = cloneLine(item.item);
  16462. l.x = (l.x || 0) + (useBlockXOffset ? (block.xOffset || 0) : ctx.x);
  16463. l.y = (l.y || 0) + (useBlockYOffset ? (block.yOffset || 0) : ctx.y);
  16464. page.items.push({
  16465. type: 'line',
  16466. item: l
  16467. });
  16468. break;
  16469. case 'vector':
  16470. var v = pack(item.item);
  16471. offsetVector(v, useBlockXOffset ? (block.xOffset || 0) : ctx.x, useBlockYOffset ? (block.yOffset || 0) : ctx.y);
  16472. page.items.push({
  16473. type: 'vector',
  16474. item: v
  16475. });
  16476. break;
  16477. case 'image':
  16478. var img = pack(item.item);
  16479. img.x = (img.x || 0) + (useBlockXOffset ? (block.xOffset || 0) : ctx.x);
  16480. img.y = (img.y || 0) + (useBlockYOffset ? (block.yOffset || 0) : ctx.y);
  16481. page.items.push({
  16482. type: 'image',
  16483. item: img
  16484. });
  16485. break;
  16486. }
  16487. });
  16488. if (!dontUpdateContextPosition) ctx.moveDown(block.height);
  16489. return true;
  16490. };
  16491. /**
  16492. * Pushes the provided context onto the stack or creates a new one
  16493. *
  16494. * pushContext(context) - pushes the provided context and makes it current
  16495. * pushContext(width, height) - creates and pushes a new context with the specified width and height
  16496. * pushContext() - creates a new context for unbreakable blocks (with current availableWidth and full-page-height)
  16497. */
  16498. ElementWriter.prototype.pushContext = function(contextOrWidth, height) {
  16499. if (contextOrWidth === undefined) {
  16500. height = this.context.getCurrentPage().height - this.context.pageMargins.top - this.context.pageMargins.bottom;
  16501. contextOrWidth = this.context.availableWidth;
  16502. }
  16503. if (typeof contextOrWidth === 'number' || contextOrWidth instanceof Number) {
  16504. contextOrWidth = new DocumentContext({ width: contextOrWidth, height: height }, { left: 0, right: 0, top: 0, bottom: 0 });
  16505. }
  16506. this.contextStack.push(this.context);
  16507. this.context = contextOrWidth;
  16508. };
  16509. ElementWriter.prototype.popContext = function() {
  16510. this.context = this.contextStack.pop();
  16511. };
  16512. ElementWriter.prototype.getCurrentPositionOnPage = function(){
  16513. return (this.contextStack[0] || this.context).getCurrentPosition();
  16514. };
  16515. module.exports = ElementWriter;
  16516. /***/ },
  16517. /* 22 */
  16518. /***/ function(module, exports) {
  16519. /* jslint node: true */
  16520. 'use strict';
  16521. /**
  16522. * Creates an instance of Line
  16523. *
  16524. * @constructor
  16525. * @this {Line}
  16526. * @param {Number} Maximum width this line can have
  16527. */
  16528. function Line(maxWidth) {
  16529. this.maxWidth = maxWidth;
  16530. this.leadingCut = 0;
  16531. this.trailingCut = 0;
  16532. this.inlineWidths = 0;
  16533. this.inlines = [];
  16534. }
  16535. Line.prototype.getAscenderHeight = function() {
  16536. var y = 0;
  16537. this.inlines.forEach(function(inline) {
  16538. y = Math.max(y, inline.font.ascender / 1000 * inline.fontSize);
  16539. });
  16540. return y;
  16541. };
  16542. Line.prototype.hasEnoughSpaceForInline = function(inline) {
  16543. if (this.inlines.length === 0) return true;
  16544. if (this.newLineForced) return false;
  16545. return this.inlineWidths + inline.width - this.leadingCut - (inline.trailingCut || 0) <= this.maxWidth;
  16546. };
  16547. Line.prototype.addInline = function(inline) {
  16548. if (this.inlines.length === 0) {
  16549. this.leadingCut = inline.leadingCut || 0;
  16550. }
  16551. this.trailingCut = inline.trailingCut || 0;
  16552. inline.x = this.inlineWidths - this.leadingCut;
  16553. this.inlines.push(inline);
  16554. this.inlineWidths += inline.width;
  16555. if (inline.lineEnd) {
  16556. this.newLineForced = true;
  16557. }
  16558. };
  16559. Line.prototype.getWidth = function() {
  16560. return this.inlineWidths - this.leadingCut - this.trailingCut;
  16561. };
  16562. /**
  16563. * Returns line height
  16564. * @return {Number}
  16565. */
  16566. Line.prototype.getHeight = function() {
  16567. var max = 0;
  16568. this.inlines.forEach(function(item) {
  16569. max = Math.max(max, item.height || 0);
  16570. });
  16571. return max;
  16572. };
  16573. module.exports = Line;
  16574. /***/ },
  16575. /* 23 */
  16576. /***/ function(module, exports, __webpack_require__) {
  16577. /* jslint node: true */
  16578. 'use strict';
  16579. var ColumnCalculator = __webpack_require__(16);
  16580. function TableProcessor(tableNode) {
  16581. this.tableNode = tableNode;
  16582. }
  16583. TableProcessor.prototype.beginTable = function(writer) {
  16584. var tableNode;
  16585. var availableWidth;
  16586. var self = this;
  16587. tableNode = this.tableNode;
  16588. this.offsets = tableNode._offsets;
  16589. this.layout = tableNode._layout;
  16590. availableWidth = writer.context().availableWidth - this.offsets.total;
  16591. ColumnCalculator.buildColumnWidths(tableNode.table.widths, availableWidth);
  16592. this.tableWidth = tableNode._offsets.total + getTableInnerContentWidth();
  16593. this.rowSpanData = prepareRowSpanData();
  16594. this.cleanUpRepeatables = false;
  16595. this.headerRows = tableNode.table.headerRows || 0;
  16596. this.rowsWithoutPageBreak = this.headerRows + (tableNode.table.keepWithHeaderRows || 0);
  16597. this.dontBreakRows = tableNode.table.dontBreakRows || false;
  16598. if (this.rowsWithoutPageBreak) {
  16599. writer.beginUnbreakableBlock();
  16600. }
  16601. this.drawHorizontalLine(0, writer);
  16602. function getTableInnerContentWidth() {
  16603. var width = 0;
  16604. tableNode.table.widths.forEach(function(w) {
  16605. width += w._calcWidth;
  16606. });
  16607. return width;
  16608. }
  16609. function prepareRowSpanData() {
  16610. var rsd = [];
  16611. var x = 0;
  16612. var lastWidth = 0;
  16613. rsd.push({ left: 0, rowSpan: 0 });
  16614. for(var i = 0, l = self.tableNode.table.body[0].length; i < l; i++) {
  16615. var paddings = self.layout.paddingLeft(i, self.tableNode) + self.layout.paddingRight(i, self.tableNode);
  16616. var lBorder = self.layout.vLineWidth(i, self.tableNode);
  16617. lastWidth = paddings + lBorder + self.tableNode.table.widths[i]._calcWidth;
  16618. rsd[rsd.length - 1].width = lastWidth;
  16619. x += lastWidth;
  16620. rsd.push({ left: x, rowSpan: 0, width: 0 });
  16621. }
  16622. return rsd;
  16623. }
  16624. };
  16625. TableProcessor.prototype.onRowBreak = function(rowIndex, writer) {
  16626. var self = this;
  16627. return function() {
  16628. //console.log('moving by : ', topLineWidth, rowPaddingTop);
  16629. var offset = self.rowPaddingTop + (!self.headerRows ? self.topLineWidth : 0);
  16630. writer.context().moveDown(offset);
  16631. };
  16632. };
  16633. TableProcessor.prototype.beginRow = function(rowIndex, writer) {
  16634. this.topLineWidth = this.layout.hLineWidth(rowIndex, this.tableNode);
  16635. this.rowPaddingTop = this.layout.paddingTop(rowIndex, this.tableNode);
  16636. this.bottomLineWidth = this.layout.hLineWidth(rowIndex+1, this.tableNode);
  16637. this.rowPaddingBottom = this.layout.paddingBottom(rowIndex, this.tableNode);
  16638. this.rowCallback = this.onRowBreak(rowIndex, writer);
  16639. writer.tracker.startTracking('pageChanged', this.rowCallback );
  16640. if(this.dontBreakRows) {
  16641. writer.beginUnbreakableBlock();
  16642. }
  16643. this.rowTopY = writer.context().y;
  16644. this.reservedAtBottom = this.bottomLineWidth + this.rowPaddingBottom;
  16645. writer.context().availableHeight -= this.reservedAtBottom;
  16646. writer.context().moveDown(this.rowPaddingTop);
  16647. };
  16648. TableProcessor.prototype.drawHorizontalLine = function(lineIndex, writer, overrideY) {
  16649. var lineWidth = this.layout.hLineWidth(lineIndex, this.tableNode);
  16650. if (lineWidth) {
  16651. var offset = lineWidth / 2;
  16652. var currentLine = null;
  16653. for(var i = 0, l = this.rowSpanData.length; i < l; i++) {
  16654. var data = this.rowSpanData[i];
  16655. var shouldDrawLine = !data.rowSpan;
  16656. if (!currentLine && shouldDrawLine) {
  16657. currentLine = { left: data.left, width: 0 };
  16658. }
  16659. if (shouldDrawLine) {
  16660. currentLine.width += (data.width || 0);
  16661. }
  16662. var y = (overrideY || 0) + offset;
  16663. if (!shouldDrawLine || i === l - 1) {
  16664. if (currentLine) {
  16665. writer.addVector({
  16666. type: 'line',
  16667. x1: currentLine.left,
  16668. x2: currentLine.left + currentLine.width,
  16669. y1: y,
  16670. y2: y,
  16671. lineWidth: lineWidth,
  16672. lineColor: typeof this.layout.hLineColor === 'function' ? this.layout.hLineColor(lineIndex, this.tableNode) : this.layout.hLineColor
  16673. }, false, overrideY);
  16674. currentLine = null;
  16675. }
  16676. }
  16677. }
  16678. writer.context().moveDown(lineWidth);
  16679. }
  16680. };
  16681. TableProcessor.prototype.drawVerticalLine = function(x, y0, y1, vLineIndex, writer) {
  16682. var width = this.layout.vLineWidth(vLineIndex, this.tableNode);
  16683. if (width === 0) return;
  16684. writer.addVector({
  16685. type: 'line',
  16686. x1: x + width/2,
  16687. x2: x + width/2,
  16688. y1: y0,
  16689. y2: y1,
  16690. lineWidth: width,
  16691. lineColor: typeof this.layout.vLineColor === 'function' ? this.layout.vLineColor(vLineIndex, this.tableNode) : this.layout.vLineColor
  16692. }, false, true);
  16693. };
  16694. TableProcessor.prototype.endTable = function(writer) {
  16695. if (this.cleanUpRepeatables) {
  16696. writer.popFromRepeatables();
  16697. }
  16698. };
  16699. TableProcessor.prototype.endRow = function(rowIndex, writer, pageBreaks) {
  16700. var l, i;
  16701. var self = this;
  16702. writer.tracker.stopTracking('pageChanged', this.rowCallback);
  16703. writer.context().moveDown(this.layout.paddingBottom(rowIndex, this.tableNode));
  16704. writer.context().availableHeight += this.reservedAtBottom;
  16705. var endingPage = writer.context().page;
  16706. var endingY = writer.context().y;
  16707. var xs = getLineXs();
  16708. var ys = [];
  16709. var hasBreaks = pageBreaks && pageBreaks.length > 0;
  16710. ys.push({
  16711. y0: this.rowTopY,
  16712. page: hasBreaks ? pageBreaks[0].prevPage : endingPage
  16713. });
  16714. if (hasBreaks) {
  16715. for(i = 0, l = pageBreaks.length; i < l; i++) {
  16716. var pageBreak = pageBreaks[i];
  16717. ys[ys.length - 1].y1 = pageBreak.prevY;
  16718. ys.push({y0: pageBreak.y, page: pageBreak.prevPage + 1});
  16719. }
  16720. }
  16721. ys[ys.length - 1].y1 = endingY;
  16722. var skipOrphanePadding = (ys[0].y1 - ys[0].y0 === this.rowPaddingTop);
  16723. for(var yi = (skipOrphanePadding ? 1 : 0), yl = ys.length; yi < yl; yi++) {
  16724. var willBreak = yi < ys.length - 1;
  16725. var rowBreakWithoutHeader = (yi > 0 && !this.headerRows);
  16726. var hzLineOffset = rowBreakWithoutHeader ? 0 : this.topLineWidth;
  16727. var y1 = ys[yi].y0;
  16728. var y2 = ys[yi].y1;
  16729. if(willBreak) {
  16730. y2 = y2 + this.rowPaddingBottom;
  16731. }
  16732. if (writer.context().page != ys[yi].page) {
  16733. writer.context().page = ys[yi].page;
  16734. //TODO: buggy, availableHeight should be updated on every pageChanged event
  16735. // TableProcessor should be pageChanged listener, instead of processRow
  16736. this.reservedAtBottom = 0;
  16737. }
  16738. for(i = 0, l = xs.length; i < l; i++) {
  16739. this.drawVerticalLine(xs[i].x, y1 - hzLineOffset, y2 + this.bottomLineWidth, xs[i].index, writer);
  16740. if(i < l-1) {
  16741. var colIndex = xs[i].index;
  16742. var fillColor= this.tableNode.table.body[rowIndex][colIndex].fillColor;
  16743. if(fillColor ) {
  16744. var wBorder = this.layout.vLineWidth(colIndex, this.tableNode);
  16745. var xf = xs[i].x+wBorder;
  16746. var yf = y1 - hzLineOffset;
  16747. writer.addVector({
  16748. type: 'rect',
  16749. x: xf,
  16750. y: yf,
  16751. w: xs[i+1].x-xf,
  16752. h: y2+this.bottomLineWidth-yf,
  16753. lineWidth: 0,
  16754. color: fillColor
  16755. }, false, true, 0);
  16756. }
  16757. }
  16758. }
  16759. if (willBreak && this.layout.hLineWhenBroken !== false) {
  16760. this.drawHorizontalLine(rowIndex + 1, writer, y2);
  16761. }
  16762. if(rowBreakWithoutHeader && this.layout.hLineWhenBroken !== false) {
  16763. this.drawHorizontalLine(rowIndex, writer, y1);
  16764. }
  16765. }
  16766. writer.context().page = endingPage;
  16767. writer.context().y = endingY;
  16768. var row = this.tableNode.table.body[rowIndex];
  16769. for(i = 0, l = row.length; i < l; i++) {
  16770. if (row[i].rowSpan) {
  16771. this.rowSpanData[i].rowSpan = row[i].rowSpan;
  16772. // fix colSpans
  16773. if (row[i].colSpan && row[i].colSpan > 1) {
  16774. for(var j = 1; j < row[i].rowSpan; j++) {
  16775. this.tableNode.table.body[rowIndex + j][i]._colSpan = row[i].colSpan;
  16776. }
  16777. }
  16778. }
  16779. if(this.rowSpanData[i].rowSpan > 0) {
  16780. this.rowSpanData[i].rowSpan--;
  16781. }
  16782. }
  16783. this.drawHorizontalLine(rowIndex + 1, writer);
  16784. if(this.headerRows && rowIndex === this.headerRows - 1) {
  16785. this.headerRepeatable = writer.currentBlockToRepeatable();
  16786. }
  16787. if(this.dontBreakRows) {
  16788. writer.tracker.auto('pageChanged',
  16789. function() {
  16790. self.drawHorizontalLine(rowIndex, writer);
  16791. },
  16792. function() {
  16793. writer.commitUnbreakableBlock();
  16794. self.drawHorizontalLine(rowIndex, writer);
  16795. }
  16796. );
  16797. }
  16798. if(this.headerRepeatable && (rowIndex === (this.rowsWithoutPageBreak - 1) || rowIndex === this.tableNode.table.body.length - 1)) {
  16799. writer.commitUnbreakableBlock();
  16800. writer.pushToRepeatables(this.headerRepeatable);
  16801. this.cleanUpRepeatables = true;
  16802. this.headerRepeatable = null;
  16803. }
  16804. function getLineXs() {
  16805. var result = [];
  16806. var cols = 0;
  16807. for(var i = 0, l = self.tableNode.table.body[rowIndex].length; i < l; i++) {
  16808. if (!cols) {
  16809. result.push({ x: self.rowSpanData[i].left, index: i});
  16810. var item = self.tableNode.table.body[rowIndex][i];
  16811. cols = (item._colSpan || item.colSpan || 0);
  16812. }
  16813. if (cols > 0) {
  16814. cols--;
  16815. }
  16816. }
  16817. result.push({ x: self.rowSpanData[self.rowSpanData.length - 1].left, index: self.rowSpanData.length - 1});
  16818. return result;
  16819. }
  16820. };
  16821. module.exports = TableProcessor;
  16822. /***/ },
  16823. /* 24 */
  16824. /***/ function(module, exports, __webpack_require__) {
  16825. /* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.7.1
  16826. /*
  16827. PDFDocument - represents an entire PDF document
  16828. By Devon Govett
  16829. */
  16830. (function() {
  16831. var PDFDocument, PDFObject, PDFPage, PDFReference, fs, stream,
  16832. __hasProp = {}.hasOwnProperty,
  16833. __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
  16834. stream = __webpack_require__(25);
  16835. fs = __webpack_require__(44);
  16836. PDFObject = __webpack_require__(45);
  16837. PDFReference = __webpack_require__(46);
  16838. PDFPage = __webpack_require__(64);
  16839. PDFDocument = (function(_super) {
  16840. var mixin;
  16841. __extends(PDFDocument, _super);
  16842. function PDFDocument(options) {
  16843. var key, val, _ref, _ref1;
  16844. this.options = options != null ? options : {};
  16845. PDFDocument.__super__.constructor.apply(this, arguments);
  16846. this.version = 1.3;
  16847. this.compress = (_ref = this.options.compress) != null ? _ref : true;
  16848. this._pageBuffer = [];
  16849. this._pageBufferStart = 0;
  16850. this._offsets = [];
  16851. this._waiting = 0;
  16852. this._ended = false;
  16853. this._offset = 0;
  16854. this._root = this.ref({
  16855. Type: 'Catalog',
  16856. Pages: this.ref({
  16857. Type: 'Pages',
  16858. Count: 0,
  16859. Kids: []
  16860. })
  16861. });
  16862. this.page = null;
  16863. this.initColor();
  16864. this.initVector();
  16865. this.initFonts();
  16866. this.initText();
  16867. this.initImages();
  16868. this.info = {
  16869. Producer: 'PDFKit',
  16870. Creator: 'PDFKit',
  16871. CreationDate: new Date()
  16872. };
  16873. if (this.options.info) {
  16874. _ref1 = this.options.info;
  16875. for (key in _ref1) {
  16876. val = _ref1[key];
  16877. this.info[key] = val;
  16878. }
  16879. }
  16880. this._write("%PDF-" + this.version);
  16881. this._write("%\xFF\xFF\xFF\xFF");
  16882. this.addPage();
  16883. }
  16884. mixin = function(methods) {
  16885. var method, name, _results;
  16886. _results = [];
  16887. for (name in methods) {
  16888. method = methods[name];
  16889. _results.push(PDFDocument.prototype[name] = method);
  16890. }
  16891. return _results;
  16892. };
  16893. mixin(__webpack_require__(65));
  16894. mixin(__webpack_require__(67));
  16895. mixin(__webpack_require__(69));
  16896. mixin(__webpack_require__(89));
  16897. mixin(__webpack_require__(96));
  16898. mixin(__webpack_require__(101));
  16899. PDFDocument.prototype.addPage = function(options) {
  16900. var pages;
  16901. if (options == null) {
  16902. options = this.options;
  16903. }
  16904. if (!this.options.bufferPages) {
  16905. this.flushPages();
  16906. }
  16907. this.page = new PDFPage(this, options);
  16908. this._pageBuffer.push(this.page);
  16909. pages = this._root.data.Pages.data;
  16910. pages.Kids.push(this.page.dictionary);
  16911. pages.Count++;
  16912. this.x = this.page.margins.left;
  16913. this.y = this.page.margins.top;
  16914. this._ctm = [1, 0, 0, 1, 0, 0];
  16915. this.transform(1, 0, 0, -1, 0, this.page.height);
  16916. return this;
  16917. };
  16918. PDFDocument.prototype.bufferedPageRange = function() {
  16919. return {
  16920. start: this._pageBufferStart,
  16921. count: this._pageBuffer.length
  16922. };
  16923. };
  16924. PDFDocument.prototype.switchToPage = function(n) {
  16925. var page;
  16926. if (!(page = this._pageBuffer[n - this._pageBufferStart])) {
  16927. throw new Error("switchToPage(" + n + ") out of bounds, current buffer covers pages " + this._pageBufferStart + " to " + (this._pageBufferStart + this._pageBuffer.length - 1));
  16928. }
  16929. return this.page = page;
  16930. };
  16931. PDFDocument.prototype.flushPages = function() {
  16932. var page, pages, _i, _len;
  16933. pages = this._pageBuffer;
  16934. this._pageBuffer = [];
  16935. this._pageBufferStart += pages.length;
  16936. for (_i = 0, _len = pages.length; _i < _len; _i++) {
  16937. page = pages[_i];
  16938. page.end();
  16939. }
  16940. };
  16941. PDFDocument.prototype.ref = function(data) {
  16942. var ref;
  16943. ref = new PDFReference(this, this._offsets.length + 1, data);
  16944. this._offsets.push(null);
  16945. this._waiting++;
  16946. return ref;
  16947. };
  16948. PDFDocument.prototype._read = function() {};
  16949. PDFDocument.prototype._write = function(data) {
  16950. if (!Buffer.isBuffer(data)) {
  16951. data = new Buffer(data + '\n', 'binary');
  16952. }
  16953. this.push(data);
  16954. return this._offset += data.length;
  16955. };
  16956. PDFDocument.prototype.addContent = function(data) {
  16957. this.page.write(data);
  16958. return this;
  16959. };
  16960. PDFDocument.prototype._refEnd = function(ref) {
  16961. this._offsets[ref.id - 1] = ref.offset;
  16962. if (--this._waiting === 0 && this._ended) {
  16963. this._finalize();
  16964. return this._ended = false;
  16965. }
  16966. };
  16967. PDFDocument.prototype.write = function(filename, fn) {
  16968. var err;
  16969. err = new Error('PDFDocument#write is deprecated, and will be removed in a future version of PDFKit. Please pipe the document into a Node stream.');
  16970. console.warn(err.stack);
  16971. this.pipe(fs.createWriteStream(filename));
  16972. this.end();
  16973. return this.once('end', fn);
  16974. };
  16975. PDFDocument.prototype.output = function(fn) {
  16976. throw new Error('PDFDocument#output is deprecated, and has been removed from PDFKit. Please pipe the document into a Node stream.');
  16977. };
  16978. PDFDocument.prototype.end = function() {
  16979. var font, key, name, val, _ref, _ref1;
  16980. this.flushPages();
  16981. this._info = this.ref();
  16982. _ref = this.info;
  16983. for (key in _ref) {
  16984. val = _ref[key];
  16985. if (typeof val === 'string') {
  16986. val = new String(val);
  16987. }
  16988. this._info.data[key] = val;
  16989. }
  16990. this._info.end();
  16991. _ref1 = this._fontFamilies;
  16992. for (name in _ref1) {
  16993. font = _ref1[name];
  16994. font.embed();
  16995. }
  16996. this._root.end();
  16997. this._root.data.Pages.end();
  16998. if (this._waiting === 0) {
  16999. return this._finalize();
  17000. } else {
  17001. return this._ended = true;
  17002. }
  17003. };
  17004. PDFDocument.prototype._finalize = function(fn) {
  17005. var offset, xRefOffset, _i, _len, _ref;
  17006. xRefOffset = this._offset;
  17007. this._write("xref");
  17008. this._write("0 " + (this._offsets.length + 1));
  17009. this._write("0000000000 65535 f ");
  17010. _ref = this._offsets;
  17011. for (_i = 0, _len = _ref.length; _i < _len; _i++) {
  17012. offset = _ref[_i];
  17013. offset = ('0000000000' + offset).slice(-10);
  17014. this._write(offset + ' 00000 n ');
  17015. }
  17016. this._write('trailer');
  17017. this._write(PDFObject.convert({
  17018. Size: this._offsets.length + 1,
  17019. Root: this._root,
  17020. Info: this._info
  17021. }));
  17022. this._write('startxref');
  17023. this._write("" + xRefOffset);
  17024. this._write('%%EOF');
  17025. return this.push(null);
  17026. };
  17027. PDFDocument.prototype.toString = function() {
  17028. return "[object PDFDocument]";
  17029. };
  17030. return PDFDocument;
  17031. })(stream.Readable);
  17032. module.exports = PDFDocument;
  17033. }).call(this);
  17034. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
  17035. /***/ },
  17036. /* 25 */
  17037. /***/ function(module, exports, __webpack_require__) {
  17038. // Copyright Joyent, Inc. and other Node contributors.
  17039. //
  17040. // Permission is hereby granted, free of charge, to any person obtaining a
  17041. // copy of this software and associated documentation files (the
  17042. // "Software"), to deal in the Software without restriction, including
  17043. // without limitation the rights to use, copy, modify, merge, publish,
  17044. // distribute, sublicense, and/or sell copies of the Software, and to permit
  17045. // persons to whom the Software is furnished to do so, subject to the
  17046. // following conditions:
  17047. //
  17048. // The above copyright notice and this permission notice shall be included
  17049. // in all copies or substantial portions of the Software.
  17050. //
  17051. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  17052. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  17053. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  17054. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  17055. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  17056. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  17057. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  17058. module.exports = Stream;
  17059. var EE = __webpack_require__(26).EventEmitter;
  17060. var inherits = __webpack_require__(27);
  17061. inherits(Stream, EE);
  17062. Stream.Readable = __webpack_require__(28);
  17063. Stream.Writable = __webpack_require__(40);
  17064. Stream.Duplex = __webpack_require__(41);
  17065. Stream.Transform = __webpack_require__(42);
  17066. Stream.PassThrough = __webpack_require__(43);
  17067. // Backwards-compat with node 0.4.x
  17068. Stream.Stream = Stream;
  17069. // old-style streams. Note that the pipe method (the only relevant
  17070. // part of this class) is overridden in the Readable class.
  17071. function Stream() {
  17072. EE.call(this);
  17073. }
  17074. Stream.prototype.pipe = function(dest, options) {
  17075. var source = this;
  17076. function ondata(chunk) {
  17077. if (dest.writable) {
  17078. if (false === dest.write(chunk) && source.pause) {
  17079. source.pause();
  17080. }
  17081. }
  17082. }
  17083. source.on('data', ondata);
  17084. function ondrain() {
  17085. if (source.readable && source.resume) {
  17086. source.resume();
  17087. }
  17088. }
  17089. dest.on('drain', ondrain);
  17090. // If the 'end' option is not supplied, dest.end() will be called when
  17091. // source gets the 'end' or 'close' events. Only dest.end() once.
  17092. if (!dest._isStdio && (!options || options.end !== false)) {
  17093. source.on('end', onend);
  17094. source.on('close', onclose);
  17095. }
  17096. var didOnEnd = false;
  17097. function onend() {
  17098. if (didOnEnd) return;
  17099. didOnEnd = true;
  17100. dest.end();
  17101. }
  17102. function onclose() {
  17103. if (didOnEnd) return;
  17104. didOnEnd = true;
  17105. if (typeof dest.destroy === 'function') dest.destroy();
  17106. }
  17107. // don't leave dangling pipes when there are errors.
  17108. function onerror(er) {
  17109. cleanup();
  17110. if (EE.listenerCount(this, 'error') === 0) {
  17111. throw er; // Unhandled stream error in pipe.
  17112. }
  17113. }
  17114. source.on('error', onerror);
  17115. dest.on('error', onerror);
  17116. // remove all the event listeners that were added.
  17117. function cleanup() {
  17118. source.removeListener('data', ondata);
  17119. dest.removeListener('drain', ondrain);
  17120. source.removeListener('end', onend);
  17121. source.removeListener('close', onclose);
  17122. source.removeListener('error', onerror);
  17123. dest.removeListener('error', onerror);
  17124. source.removeListener('end', cleanup);
  17125. source.removeListener('close', cleanup);
  17126. dest.removeListener('close', cleanup);
  17127. }
  17128. source.on('end', cleanup);
  17129. source.on('close', cleanup);
  17130. dest.on('close', cleanup);
  17131. dest.emit('pipe', source);
  17132. // Allow for unix-like usage: A.pipe(B).pipe(C)
  17133. return dest;
  17134. };
  17135. /***/ },
  17136. /* 26 */
  17137. /***/ function(module, exports) {
  17138. // Copyright Joyent, Inc. and other Node contributors.
  17139. //
  17140. // Permission is hereby granted, free of charge, to any person obtaining a
  17141. // copy of this software and associated documentation files (the
  17142. // "Software"), to deal in the Software without restriction, including
  17143. // without limitation the rights to use, copy, modify, merge, publish,
  17144. // distribute, sublicense, and/or sell copies of the Software, and to permit
  17145. // persons to whom the Software is furnished to do so, subject to the
  17146. // following conditions:
  17147. //
  17148. // The above copyright notice and this permission notice shall be included
  17149. // in all copies or substantial portions of the Software.
  17150. //
  17151. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  17152. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  17153. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  17154. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  17155. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  17156. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  17157. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  17158. function EventEmitter() {
  17159. this._events = this._events || {};
  17160. this._maxListeners = this._maxListeners || undefined;
  17161. }
  17162. module.exports = EventEmitter;
  17163. // Backwards-compat with node 0.10.x
  17164. EventEmitter.EventEmitter = EventEmitter;
  17165. EventEmitter.prototype._events = undefined;
  17166. EventEmitter.prototype._maxListeners = undefined;
  17167. // By default EventEmitters will print a warning if more than 10 listeners are
  17168. // added to it. This is a useful default which helps finding memory leaks.
  17169. EventEmitter.defaultMaxListeners = 10;
  17170. // Obviously not all Emitters should be limited to 10. This function allows
  17171. // that to be increased. Set to zero for unlimited.
  17172. EventEmitter.prototype.setMaxListeners = function(n) {
  17173. if (!isNumber(n) || n < 0 || isNaN(n))
  17174. throw TypeError('n must be a positive number');
  17175. this._maxListeners = n;
  17176. return this;
  17177. };
  17178. EventEmitter.prototype.emit = function(type) {
  17179. var er, handler, len, args, i, listeners;
  17180. if (!this._events)
  17181. this._events = {};
  17182. // If there is no 'error' event listener then throw.
  17183. if (type === 'error') {
  17184. if (!this._events.error ||
  17185. (isObject(this._events.error) && !this._events.error.length)) {
  17186. er = arguments[1];
  17187. if (er instanceof Error) {
  17188. throw er; // Unhandled 'error' event
  17189. }
  17190. throw TypeError('Uncaught, unspecified "error" event.');
  17191. }
  17192. }
  17193. handler = this._events[type];
  17194. if (isUndefined(handler))
  17195. return false;
  17196. if (isFunction(handler)) {
  17197. switch (arguments.length) {
  17198. // fast cases
  17199. case 1:
  17200. handler.call(this);
  17201. break;
  17202. case 2:
  17203. handler.call(this, arguments[1]);
  17204. break;
  17205. case 3:
  17206. handler.call(this, arguments[1], arguments[2]);
  17207. break;
  17208. // slower
  17209. default:
  17210. args = Array.prototype.slice.call(arguments, 1);
  17211. handler.apply(this, args);
  17212. }
  17213. } else if (isObject(handler)) {
  17214. args = Array.prototype.slice.call(arguments, 1);
  17215. listeners = handler.slice();
  17216. len = listeners.length;
  17217. for (i = 0; i < len; i++)
  17218. listeners[i].apply(this, args);
  17219. }
  17220. return true;
  17221. };
  17222. EventEmitter.prototype.addListener = function(type, listener) {
  17223. var m;
  17224. if (!isFunction(listener))
  17225. throw TypeError('listener must be a function');
  17226. if (!this._events)
  17227. this._events = {};
  17228. // To avoid recursion in the case that type === "newListener"! Before
  17229. // adding it to the listeners, first emit "newListener".
  17230. if (this._events.newListener)
  17231. this.emit('newListener', type,
  17232. isFunction(listener.listener) ?
  17233. listener.listener : listener);
  17234. if (!this._events[type])
  17235. // Optimize the case of one listener. Don't need the extra array object.
  17236. this._events[type] = listener;
  17237. else if (isObject(this._events[type]))
  17238. // If we've already got an array, just append.
  17239. this._events[type].push(listener);
  17240. else
  17241. // Adding the second element, need to change to array.
  17242. this._events[type] = [this._events[type], listener];
  17243. // Check for listener leak
  17244. if (isObject(this._events[type]) && !this._events[type].warned) {
  17245. if (!isUndefined(this._maxListeners)) {
  17246. m = this._maxListeners;
  17247. } else {
  17248. m = EventEmitter.defaultMaxListeners;
  17249. }
  17250. if (m && m > 0 && this._events[type].length > m) {
  17251. this._events[type].warned = true;
  17252. console.error('(node) warning: possible EventEmitter memory ' +
  17253. 'leak detected. %d listeners added. ' +
  17254. 'Use emitter.setMaxListeners() to increase limit.',
  17255. this._events[type].length);
  17256. if (typeof console.trace === 'function') {
  17257. // not supported in IE 10
  17258. console.trace();
  17259. }
  17260. }
  17261. }
  17262. return this;
  17263. };
  17264. EventEmitter.prototype.on = EventEmitter.prototype.addListener;
  17265. EventEmitter.prototype.once = function(type, listener) {
  17266. if (!isFunction(listener))
  17267. throw TypeError('listener must be a function');
  17268. var fired = false;
  17269. function g() {
  17270. this.removeListener(type, g);
  17271. if (!fired) {
  17272. fired = true;
  17273. listener.apply(this, arguments);
  17274. }
  17275. }
  17276. g.listener = listener;
  17277. this.on(type, g);
  17278. return this;
  17279. };
  17280. // emits a 'removeListener' event iff the listener was removed
  17281. EventEmitter.prototype.removeListener = function(type, listener) {
  17282. var list, position, length, i;
  17283. if (!isFunction(listener))
  17284. throw TypeError('listener must be a function');
  17285. if (!this._events || !this._events[type])
  17286. return this;
  17287. list = this._events[type];
  17288. length = list.length;
  17289. position = -1;
  17290. if (list === listener ||
  17291. (isFunction(list.listener) && list.listener === listener)) {
  17292. delete this._events[type];
  17293. if (this._events.removeListener)
  17294. this.emit('removeListener', type, listener);
  17295. } else if (isObject(list)) {
  17296. for (i = length; i-- > 0;) {
  17297. if (list[i] === listener ||
  17298. (list[i].listener && list[i].listener === listener)) {
  17299. position = i;
  17300. break;
  17301. }
  17302. }
  17303. if (position < 0)
  17304. return this;
  17305. if (list.length === 1) {
  17306. list.length = 0;
  17307. delete this._events[type];
  17308. } else {
  17309. list.splice(position, 1);
  17310. }
  17311. if (this._events.removeListener)
  17312. this.emit('removeListener', type, listener);
  17313. }
  17314. return this;
  17315. };
  17316. EventEmitter.prototype.removeAllListeners = function(type) {
  17317. var key, listeners;
  17318. if (!this._events)
  17319. return this;
  17320. // not listening for removeListener, no need to emit
  17321. if (!this._events.removeListener) {
  17322. if (arguments.length === 0)
  17323. this._events = {};
  17324. else if (this._events[type])
  17325. delete this._events[type];
  17326. return this;
  17327. }
  17328. // emit removeListener for all listeners on all events
  17329. if (arguments.length === 0) {
  17330. for (key in this._events) {
  17331. if (key === 'removeListener') continue;
  17332. this.removeAllListeners(key);
  17333. }
  17334. this.removeAllListeners('removeListener');
  17335. this._events = {};
  17336. return this;
  17337. }
  17338. listeners = this._events[type];
  17339. if (isFunction(listeners)) {
  17340. this.removeListener(type, listeners);
  17341. } else if (listeners) {
  17342. // LIFO order
  17343. while (listeners.length)
  17344. this.removeListener(type, listeners[listeners.length - 1]);
  17345. }
  17346. delete this._events[type];
  17347. return this;
  17348. };
  17349. EventEmitter.prototype.listeners = function(type) {
  17350. var ret;
  17351. if (!this._events || !this._events[type])
  17352. ret = [];
  17353. else if (isFunction(this._events[type]))
  17354. ret = [this._events[type]];
  17355. else
  17356. ret = this._events[type].slice();
  17357. return ret;
  17358. };
  17359. EventEmitter.prototype.listenerCount = function(type) {
  17360. if (this._events) {
  17361. var evlistener = this._events[type];
  17362. if (isFunction(evlistener))
  17363. return 1;
  17364. else if (evlistener)
  17365. return evlistener.length;
  17366. }
  17367. return 0;
  17368. };
  17369. EventEmitter.listenerCount = function(emitter, type) {
  17370. return emitter.listenerCount(type);
  17371. };
  17372. function isFunction(arg) {
  17373. return typeof arg === 'function';
  17374. }
  17375. function isNumber(arg) {
  17376. return typeof arg === 'number';
  17377. }
  17378. function isObject(arg) {
  17379. return typeof arg === 'object' && arg !== null;
  17380. }
  17381. function isUndefined(arg) {
  17382. return arg === void 0;
  17383. }
  17384. /***/ },
  17385. /* 27 */
  17386. /***/ function(module, exports) {
  17387. if (typeof Object.create === 'function') {
  17388. // implementation from standard node.js 'util' module
  17389. module.exports = function inherits(ctor, superCtor) {
  17390. ctor.super_ = superCtor
  17391. ctor.prototype = Object.create(superCtor.prototype, {
  17392. constructor: {
  17393. value: ctor,
  17394. enumerable: false,
  17395. writable: true,
  17396. configurable: true
  17397. }
  17398. });
  17399. };
  17400. } else {
  17401. // old school shim for old browsers
  17402. module.exports = function inherits(ctor, superCtor) {
  17403. ctor.super_ = superCtor
  17404. var TempCtor = function () {}
  17405. TempCtor.prototype = superCtor.prototype
  17406. ctor.prototype = new TempCtor()
  17407. ctor.prototype.constructor = ctor
  17408. }
  17409. }
  17410. /***/ },
  17411. /* 28 */
  17412. /***/ function(module, exports, __webpack_require__) {
  17413. exports = module.exports = __webpack_require__(29);
  17414. exports.Stream = __webpack_require__(25);
  17415. exports.Readable = exports;
  17416. exports.Writable = __webpack_require__(36);
  17417. exports.Duplex = __webpack_require__(35);
  17418. exports.Transform = __webpack_require__(38);
  17419. exports.PassThrough = __webpack_require__(39);
  17420. /***/ },
  17421. /* 29 */
  17422. /***/ function(module, exports, __webpack_require__) {
  17423. /* WEBPACK VAR INJECTION */(function(process) {// Copyright Joyent, Inc. and other Node contributors.
  17424. //
  17425. // Permission is hereby granted, free of charge, to any person obtaining a
  17426. // copy of this software and associated documentation files (the
  17427. // "Software"), to deal in the Software without restriction, including
  17428. // without limitation the rights to use, copy, modify, merge, publish,
  17429. // distribute, sublicense, and/or sell copies of the Software, and to permit
  17430. // persons to whom the Software is furnished to do so, subject to the
  17431. // following conditions:
  17432. //
  17433. // The above copyright notice and this permission notice shall be included
  17434. // in all copies or substantial portions of the Software.
  17435. //
  17436. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  17437. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  17438. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  17439. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  17440. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  17441. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  17442. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  17443. module.exports = Readable;
  17444. /*<replacement>*/
  17445. var isArray = __webpack_require__(31);
  17446. /*</replacement>*/
  17447. /*<replacement>*/
  17448. var Buffer = __webpack_require__(2).Buffer;
  17449. /*</replacement>*/
  17450. Readable.ReadableState = ReadableState;
  17451. var EE = __webpack_require__(26).EventEmitter;
  17452. /*<replacement>*/
  17453. if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
  17454. return emitter.listeners(type).length;
  17455. };
  17456. /*</replacement>*/
  17457. var Stream = __webpack_require__(25);
  17458. /*<replacement>*/
  17459. var util = __webpack_require__(32);
  17460. util.inherits = __webpack_require__(33);
  17461. /*</replacement>*/
  17462. var StringDecoder;
  17463. /*<replacement>*/
  17464. var debug = __webpack_require__(34);
  17465. if (debug && debug.debuglog) {
  17466. debug = debug.debuglog('stream');
  17467. } else {
  17468. debug = function () {};
  17469. }
  17470. /*</replacement>*/
  17471. util.inherits(Readable, Stream);
  17472. function ReadableState(options, stream) {
  17473. var Duplex = __webpack_require__(35);
  17474. options = options || {};
  17475. // the point at which it stops calling _read() to fill the buffer
  17476. // Note: 0 is a valid value, means "don't call _read preemptively ever"
  17477. var hwm = options.highWaterMark;
  17478. var defaultHwm = options.objectMode ? 16 : 16 * 1024;
  17479. this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
  17480. // cast to ints.
  17481. this.highWaterMark = ~~this.highWaterMark;
  17482. this.buffer = [];
  17483. this.length = 0;
  17484. this.pipes = null;
  17485. this.pipesCount = 0;
  17486. this.flowing = null;
  17487. this.ended = false;
  17488. this.endEmitted = false;
  17489. this.reading = false;
  17490. // a flag to be able to tell if the onwrite cb is called immediately,
  17491. // or on a later tick. We set this to true at first, because any
  17492. // actions that shouldn't happen until "later" should generally also
  17493. // not happen before the first write call.
  17494. this.sync = true;
  17495. // whenever we return null, then we set a flag to say
  17496. // that we're awaiting a 'readable' event emission.
  17497. this.needReadable = false;
  17498. this.emittedReadable = false;
  17499. this.readableListening = false;
  17500. // object stream flag. Used to make read(n) ignore n and to
  17501. // make all the buffer merging and length checks go away
  17502. this.objectMode = !!options.objectMode;
  17503. if (stream instanceof Duplex)
  17504. this.objectMode = this.objectMode || !!options.readableObjectMode;
  17505. // Crypto is kind of old and crusty. Historically, its default string
  17506. // encoding is 'binary' so we have to make this configurable.
  17507. // Everything else in the universe uses 'utf8', though.
  17508. this.defaultEncoding = options.defaultEncoding || 'utf8';
  17509. // when piping, we only care about 'readable' events that happen
  17510. // after read()ing all the bytes and not getting any pushback.
  17511. this.ranOut = false;
  17512. // the number of writers that are awaiting a drain event in .pipe()s
  17513. this.awaitDrain = 0;
  17514. // if true, a maybeReadMore has been scheduled
  17515. this.readingMore = false;
  17516. this.decoder = null;
  17517. this.encoding = null;
  17518. if (options.encoding) {
  17519. if (!StringDecoder)
  17520. StringDecoder = __webpack_require__(37).StringDecoder;
  17521. this.decoder = new StringDecoder(options.encoding);
  17522. this.encoding = options.encoding;
  17523. }
  17524. }
  17525. function Readable(options) {
  17526. var Duplex = __webpack_require__(35);
  17527. if (!(this instanceof Readable))
  17528. return new Readable(options);
  17529. this._readableState = new ReadableState(options, this);
  17530. // legacy
  17531. this.readable = true;
  17532. Stream.call(this);
  17533. }
  17534. // Manually shove something into the read() buffer.
  17535. // This returns true if the highWaterMark has not been hit yet,
  17536. // similar to how Writable.write() returns true if you should
  17537. // write() some more.
  17538. Readable.prototype.push = function(chunk, encoding) {
  17539. var state = this._readableState;
  17540. if (util.isString(chunk) && !state.objectMode) {
  17541. encoding = encoding || state.defaultEncoding;
  17542. if (encoding !== state.encoding) {
  17543. chunk = new Buffer(chunk, encoding);
  17544. encoding = '';
  17545. }
  17546. }
  17547. return readableAddChunk(this, state, chunk, encoding, false);
  17548. };
  17549. // Unshift should *always* be something directly out of read()
  17550. Readable.prototype.unshift = function(chunk) {
  17551. var state = this._readableState;
  17552. return readableAddChunk(this, state, chunk, '', true);
  17553. };
  17554. function readableAddChunk(stream, state, chunk, encoding, addToFront) {
  17555. var er = chunkInvalid(state, chunk);
  17556. if (er) {
  17557. stream.emit('error', er);
  17558. } else if (util.isNullOrUndefined(chunk)) {
  17559. state.reading = false;
  17560. if (!state.ended)
  17561. onEofChunk(stream, state);
  17562. } else if (state.objectMode || chunk && chunk.length > 0) {
  17563. if (state.ended && !addToFront) {
  17564. var e = new Error('stream.push() after EOF');
  17565. stream.emit('error', e);
  17566. } else if (state.endEmitted && addToFront) {
  17567. var e = new Error('stream.unshift() after end event');
  17568. stream.emit('error', e);
  17569. } else {
  17570. if (state.decoder && !addToFront && !encoding)
  17571. chunk = state.decoder.write(chunk);
  17572. if (!addToFront)
  17573. state.reading = false;
  17574. // if we want the data now, just emit it.
  17575. if (state.flowing && state.length === 0 && !state.sync) {
  17576. stream.emit('data', chunk);
  17577. stream.read(0);
  17578. } else {
  17579. // update the buffer info.
  17580. state.length += state.objectMode ? 1 : chunk.length;
  17581. if (addToFront)
  17582. state.buffer.unshift(chunk);
  17583. else
  17584. state.buffer.push(chunk);
  17585. if (state.needReadable)
  17586. emitReadable(stream);
  17587. }
  17588. maybeReadMore(stream, state);
  17589. }
  17590. } else if (!addToFront) {
  17591. state.reading = false;
  17592. }
  17593. return needMoreData(state);
  17594. }
  17595. // if it's past the high water mark, we can push in some more.
  17596. // Also, if we have no data yet, we can stand some
  17597. // more bytes. This is to work around cases where hwm=0,
  17598. // such as the repl. Also, if the push() triggered a
  17599. // readable event, and the user called read(largeNumber) such that
  17600. // needReadable was set, then we ought to push more, so that another
  17601. // 'readable' event will be triggered.
  17602. function needMoreData(state) {
  17603. return !state.ended &&
  17604. (state.needReadable ||
  17605. state.length < state.highWaterMark ||
  17606. state.length === 0);
  17607. }
  17608. // backwards compatibility.
  17609. Readable.prototype.setEncoding = function(enc) {
  17610. if (!StringDecoder)
  17611. StringDecoder = __webpack_require__(37).StringDecoder;
  17612. this._readableState.decoder = new StringDecoder(enc);
  17613. this._readableState.encoding = enc;
  17614. return this;
  17615. };
  17616. // Don't raise the hwm > 128MB
  17617. var MAX_HWM = 0x800000;
  17618. function roundUpToNextPowerOf2(n) {
  17619. if (n >= MAX_HWM) {
  17620. n = MAX_HWM;
  17621. } else {
  17622. // Get the next highest power of 2
  17623. n--;
  17624. for (var p = 1; p < 32; p <<= 1) n |= n >> p;
  17625. n++;
  17626. }
  17627. return n;
  17628. }
  17629. function howMuchToRead(n, state) {
  17630. if (state.length === 0 && state.ended)
  17631. return 0;
  17632. if (state.objectMode)
  17633. return n === 0 ? 0 : 1;
  17634. if (isNaN(n) || util.isNull(n)) {
  17635. // only flow one buffer at a time
  17636. if (state.flowing && state.buffer.length)
  17637. return state.buffer[0].length;
  17638. else
  17639. return state.length;
  17640. }
  17641. if (n <= 0)
  17642. return 0;
  17643. // If we're asking for more than the target buffer level,
  17644. // then raise the water mark. Bump up to the next highest
  17645. // power of 2, to prevent increasing it excessively in tiny
  17646. // amounts.
  17647. if (n > state.highWaterMark)
  17648. state.highWaterMark = roundUpToNextPowerOf2(n);
  17649. // don't have that much. return null, unless we've ended.
  17650. if (n > state.length) {
  17651. if (!state.ended) {
  17652. state.needReadable = true;
  17653. return 0;
  17654. } else
  17655. return state.length;
  17656. }
  17657. return n;
  17658. }
  17659. // you can override either this method, or the async _read(n) below.
  17660. Readable.prototype.read = function(n) {
  17661. debug('read', n);
  17662. var state = this._readableState;
  17663. var nOrig = n;
  17664. if (!util.isNumber(n) || n > 0)
  17665. state.emittedReadable = false;
  17666. // if we're doing read(0) to trigger a readable event, but we
  17667. // already have a bunch of data in the buffer, then just trigger
  17668. // the 'readable' event and move on.
  17669. if (n === 0 &&
  17670. state.needReadable &&
  17671. (state.length >= state.highWaterMark || state.ended)) {
  17672. debug('read: emitReadable', state.length, state.ended);
  17673. if (state.length === 0 && state.ended)
  17674. endReadable(this);
  17675. else
  17676. emitReadable(this);
  17677. return null;
  17678. }
  17679. n = howMuchToRead(n, state);
  17680. // if we've ended, and we're now clear, then finish it up.
  17681. if (n === 0 && state.ended) {
  17682. if (state.length === 0)
  17683. endReadable(this);
  17684. return null;
  17685. }
  17686. // All the actual chunk generation logic needs to be
  17687. // *below* the call to _read. The reason is that in certain
  17688. // synthetic stream cases, such as passthrough streams, _read
  17689. // may be a completely synchronous operation which may change
  17690. // the state of the read buffer, providing enough data when
  17691. // before there was *not* enough.
  17692. //
  17693. // So, the steps are:
  17694. // 1. Figure out what the state of things will be after we do
  17695. // a read from the buffer.
  17696. //
  17697. // 2. If that resulting state will trigger a _read, then call _read.
  17698. // Note that this may be asynchronous, or synchronous. Yes, it is
  17699. // deeply ugly to write APIs this way, but that still doesn't mean
  17700. // that the Readable class should behave improperly, as streams are
  17701. // designed to be sync/async agnostic.
  17702. // Take note if the _read call is sync or async (ie, if the read call
  17703. // has returned yet), so that we know whether or not it's safe to emit
  17704. // 'readable' etc.
  17705. //
  17706. // 3. Actually pull the requested chunks out of the buffer and return.
  17707. // if we need a readable event, then we need to do some reading.
  17708. var doRead = state.needReadable;
  17709. debug('need readable', doRead);
  17710. // if we currently have less than the highWaterMark, then also read some
  17711. if (state.length === 0 || state.length - n < state.highWaterMark) {
  17712. doRead = true;
  17713. debug('length less than watermark', doRead);
  17714. }
  17715. // however, if we've ended, then there's no point, and if we're already
  17716. // reading, then it's unnecessary.
  17717. if (state.ended || state.reading) {
  17718. doRead = false;
  17719. debug('reading or ended', doRead);
  17720. }
  17721. if (doRead) {
  17722. debug('do read');
  17723. state.reading = true;
  17724. state.sync = true;
  17725. // if the length is currently zero, then we *need* a readable event.
  17726. if (state.length === 0)
  17727. state.needReadable = true;
  17728. // call internal read method
  17729. this._read(state.highWaterMark);
  17730. state.sync = false;
  17731. }
  17732. // If _read pushed data synchronously, then `reading` will be false,
  17733. // and we need to re-evaluate how much data we can return to the user.
  17734. if (doRead && !state.reading)
  17735. n = howMuchToRead(nOrig, state);
  17736. var ret;
  17737. if (n > 0)
  17738. ret = fromList(n, state);
  17739. else
  17740. ret = null;
  17741. if (util.isNull(ret)) {
  17742. state.needReadable = true;
  17743. n = 0;
  17744. }
  17745. state.length -= n;
  17746. // If we have nothing in the buffer, then we want to know
  17747. // as soon as we *do* get something into the buffer.
  17748. if (state.length === 0 && !state.ended)
  17749. state.needReadable = true;
  17750. // If we tried to read() past the EOF, then emit end on the next tick.
  17751. if (nOrig !== n && state.ended && state.length === 0)
  17752. endReadable(this);
  17753. if (!util.isNull(ret))
  17754. this.emit('data', ret);
  17755. return ret;
  17756. };
  17757. function chunkInvalid(state, chunk) {
  17758. var er = null;
  17759. if (!util.isBuffer(chunk) &&
  17760. !util.isString(chunk) &&
  17761. !util.isNullOrUndefined(chunk) &&
  17762. !state.objectMode) {
  17763. er = new TypeError('Invalid non-string/buffer chunk');
  17764. }
  17765. return er;
  17766. }
  17767. function onEofChunk(stream, state) {
  17768. if (state.decoder && !state.ended) {
  17769. var chunk = state.decoder.end();
  17770. if (chunk && chunk.length) {
  17771. state.buffer.push(chunk);
  17772. state.length += state.objectMode ? 1 : chunk.length;
  17773. }
  17774. }
  17775. state.ended = true;
  17776. // emit 'readable' now to make sure it gets picked up.
  17777. emitReadable(stream);
  17778. }
  17779. // Don't emit readable right away in sync mode, because this can trigger
  17780. // another read() call => stack overflow. This way, it might trigger
  17781. // a nextTick recursion warning, but that's not so bad.
  17782. function emitReadable(stream) {
  17783. var state = stream._readableState;
  17784. state.needReadable = false;
  17785. if (!state.emittedReadable) {
  17786. debug('emitReadable', state.flowing);
  17787. state.emittedReadable = true;
  17788. if (state.sync)
  17789. process.nextTick(function() {
  17790. emitReadable_(stream);
  17791. });
  17792. else
  17793. emitReadable_(stream);
  17794. }
  17795. }
  17796. function emitReadable_(stream) {
  17797. debug('emit readable');
  17798. stream.emit('readable');
  17799. flow(stream);
  17800. }
  17801. // at this point, the user has presumably seen the 'readable' event,
  17802. // and called read() to consume some data. that may have triggered
  17803. // in turn another _read(n) call, in which case reading = true if
  17804. // it's in progress.
  17805. // However, if we're not ended, or reading, and the length < hwm,
  17806. // then go ahead and try to read some more preemptively.
  17807. function maybeReadMore(stream, state) {
  17808. if (!state.readingMore) {
  17809. state.readingMore = true;
  17810. process.nextTick(function() {
  17811. maybeReadMore_(stream, state);
  17812. });
  17813. }
  17814. }
  17815. function maybeReadMore_(stream, state) {
  17816. var len = state.length;
  17817. while (!state.reading && !state.flowing && !state.ended &&
  17818. state.length < state.highWaterMark) {
  17819. debug('maybeReadMore read 0');
  17820. stream.read(0);
  17821. if (len === state.length)
  17822. // didn't get any data, stop spinning.
  17823. break;
  17824. else
  17825. len = state.length;
  17826. }
  17827. state.readingMore = false;
  17828. }
  17829. // abstract method. to be overridden in specific implementation classes.
  17830. // call cb(er, data) where data is <= n in length.
  17831. // for virtual (non-string, non-buffer) streams, "length" is somewhat
  17832. // arbitrary, and perhaps not very meaningful.
  17833. Readable.prototype._read = function(n) {
  17834. this.emit('error', new Error('not implemented'));
  17835. };
  17836. Readable.prototype.pipe = function(dest, pipeOpts) {
  17837. var src = this;
  17838. var state = this._readableState;
  17839. switch (state.pipesCount) {
  17840. case 0:
  17841. state.pipes = dest;
  17842. break;
  17843. case 1:
  17844. state.pipes = [state.pipes, dest];
  17845. break;
  17846. default:
  17847. state.pipes.push(dest);
  17848. break;
  17849. }
  17850. state.pipesCount += 1;
  17851. debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
  17852. var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
  17853. dest !== process.stdout &&
  17854. dest !== process.stderr;
  17855. var endFn = doEnd ? onend : cleanup;
  17856. if (state.endEmitted)
  17857. process.nextTick(endFn);
  17858. else
  17859. src.once('end', endFn);
  17860. dest.on('unpipe', onunpipe);
  17861. function onunpipe(readable) {
  17862. debug('onunpipe');
  17863. if (readable === src) {
  17864. cleanup();
  17865. }
  17866. }
  17867. function onend() {
  17868. debug('onend');
  17869. dest.end();
  17870. }
  17871. // when the dest drains, it reduces the awaitDrain counter
  17872. // on the source. This would be more elegant with a .once()
  17873. // handler in flow(), but adding and removing repeatedly is
  17874. // too slow.
  17875. var ondrain = pipeOnDrain(src);
  17876. dest.on('drain', ondrain);
  17877. function cleanup() {
  17878. debug('cleanup');
  17879. // cleanup event handlers once the pipe is broken
  17880. dest.removeListener('close', onclose);
  17881. dest.removeListener('finish', onfinish);
  17882. dest.removeListener('drain', ondrain);
  17883. dest.removeListener('error', onerror);
  17884. dest.removeListener('unpipe', onunpipe);
  17885. src.removeListener('end', onend);
  17886. src.removeListener('end', cleanup);
  17887. src.removeListener('data', ondata);
  17888. // if the reader is waiting for a drain event from this
  17889. // specific writer, then it would cause it to never start
  17890. // flowing again.
  17891. // So, if this is awaiting a drain, then we just call it now.
  17892. // If we don't know, then assume that we are waiting for one.
  17893. if (state.awaitDrain &&
  17894. (!dest._writableState || dest._writableState.needDrain))
  17895. ondrain();
  17896. }
  17897. src.on('data', ondata);
  17898. function ondata(chunk) {
  17899. debug('ondata');
  17900. var ret = dest.write(chunk);
  17901. if (false === ret) {
  17902. debug('false write response, pause',
  17903. src._readableState.awaitDrain);
  17904. src._readableState.awaitDrain++;
  17905. src.pause();
  17906. }
  17907. }
  17908. // if the dest has an error, then stop piping into it.
  17909. // however, don't suppress the throwing behavior for this.
  17910. function onerror(er) {
  17911. debug('onerror', er);
  17912. unpipe();
  17913. dest.removeListener('error', onerror);
  17914. if (EE.listenerCount(dest, 'error') === 0)
  17915. dest.emit('error', er);
  17916. }
  17917. // This is a brutally ugly hack to make sure that our error handler
  17918. // is attached before any userland ones. NEVER DO THIS.
  17919. if (!dest._events || !dest._events.error)
  17920. dest.on('error', onerror);
  17921. else if (isArray(dest._events.error))
  17922. dest._events.error.unshift(onerror);
  17923. else
  17924. dest._events.error = [onerror, dest._events.error];
  17925. // Both close and finish should trigger unpipe, but only once.
  17926. function onclose() {
  17927. dest.removeListener('finish', onfinish);
  17928. unpipe();
  17929. }
  17930. dest.once('close', onclose);
  17931. function onfinish() {
  17932. debug('onfinish');
  17933. dest.removeListener('close', onclose);
  17934. unpipe();
  17935. }
  17936. dest.once('finish', onfinish);
  17937. function unpipe() {
  17938. debug('unpipe');
  17939. src.unpipe(dest);
  17940. }
  17941. // tell the dest that it's being piped to
  17942. dest.emit('pipe', src);
  17943. // start the flow if it hasn't been started already.
  17944. if (!state.flowing) {
  17945. debug('pipe resume');
  17946. src.resume();
  17947. }
  17948. return dest;
  17949. };
  17950. function pipeOnDrain(src) {
  17951. return function() {
  17952. var state = src._readableState;
  17953. debug('pipeOnDrain', state.awaitDrain);
  17954. if (state.awaitDrain)
  17955. state.awaitDrain--;
  17956. if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
  17957. state.flowing = true;
  17958. flow(src);
  17959. }
  17960. };
  17961. }
  17962. Readable.prototype.unpipe = function(dest) {
  17963. var state = this._readableState;
  17964. // if we're not piping anywhere, then do nothing.
  17965. if (state.pipesCount === 0)
  17966. return this;
  17967. // just one destination. most common case.
  17968. if (state.pipesCount === 1) {
  17969. // passed in one, but it's not the right one.
  17970. if (dest && dest !== state.pipes)
  17971. return this;
  17972. if (!dest)
  17973. dest = state.pipes;
  17974. // got a match.
  17975. state.pipes = null;
  17976. state.pipesCount = 0;
  17977. state.flowing = false;
  17978. if (dest)
  17979. dest.emit('unpipe', this);
  17980. return this;
  17981. }
  17982. // slow case. multiple pipe destinations.
  17983. if (!dest) {
  17984. // remove all.
  17985. var dests = state.pipes;
  17986. var len = state.pipesCount;
  17987. state.pipes = null;
  17988. state.pipesCount = 0;
  17989. state.flowing = false;
  17990. for (var i = 0; i < len; i++)
  17991. dests[i].emit('unpipe', this);
  17992. return this;
  17993. }
  17994. // try to find the right one.
  17995. var i = indexOf(state.pipes, dest);
  17996. if (i === -1)
  17997. return this;
  17998. state.pipes.splice(i, 1);
  17999. state.pipesCount -= 1;
  18000. if (state.pipesCount === 1)
  18001. state.pipes = state.pipes[0];
  18002. dest.emit('unpipe', this);
  18003. return this;
  18004. };
  18005. // set up data events if they are asked for
  18006. // Ensure readable listeners eventually get something
  18007. Readable.prototype.on = function(ev, fn) {
  18008. var res = Stream.prototype.on.call(this, ev, fn);
  18009. // If listening to data, and it has not explicitly been paused,
  18010. // then call resume to start the flow of data on the next tick.
  18011. if (ev === 'data' && false !== this._readableState.flowing) {
  18012. this.resume();
  18013. }
  18014. if (ev === 'readable' && this.readable) {
  18015. var state = this._readableState;
  18016. if (!state.readableListening) {
  18017. state.readableListening = true;
  18018. state.emittedReadable = false;
  18019. state.needReadable = true;
  18020. if (!state.reading) {
  18021. var self = this;
  18022. process.nextTick(function() {
  18023. debug('readable nexttick read 0');
  18024. self.read(0);
  18025. });
  18026. } else if (state.length) {
  18027. emitReadable(this, state);
  18028. }
  18029. }
  18030. }
  18031. return res;
  18032. };
  18033. Readable.prototype.addListener = Readable.prototype.on;
  18034. // pause() and resume() are remnants of the legacy readable stream API
  18035. // If the user uses them, then switch into old mode.
  18036. Readable.prototype.resume = function() {
  18037. var state = this._readableState;
  18038. if (!state.flowing) {
  18039. debug('resume');
  18040. state.flowing = true;
  18041. if (!state.reading) {
  18042. debug('resume read 0');
  18043. this.read(0);
  18044. }
  18045. resume(this, state);
  18046. }
  18047. return this;
  18048. };
  18049. function resume(stream, state) {
  18050. if (!state.resumeScheduled) {
  18051. state.resumeScheduled = true;
  18052. process.nextTick(function() {
  18053. resume_(stream, state);
  18054. });
  18055. }
  18056. }
  18057. function resume_(stream, state) {
  18058. state.resumeScheduled = false;
  18059. stream.emit('resume');
  18060. flow(stream);
  18061. if (state.flowing && !state.reading)
  18062. stream.read(0);
  18063. }
  18064. Readable.prototype.pause = function() {
  18065. debug('call pause flowing=%j', this._readableState.flowing);
  18066. if (false !== this._readableState.flowing) {
  18067. debug('pause');
  18068. this._readableState.flowing = false;
  18069. this.emit('pause');
  18070. }
  18071. return this;
  18072. };
  18073. function flow(stream) {
  18074. var state = stream._readableState;
  18075. debug('flow', state.flowing);
  18076. if (state.flowing) {
  18077. do {
  18078. var chunk = stream.read();
  18079. } while (null !== chunk && state.flowing);
  18080. }
  18081. }
  18082. // wrap an old-style stream as the async data source.
  18083. // This is *not* part of the readable stream interface.
  18084. // It is an ugly unfortunate mess of history.
  18085. Readable.prototype.wrap = function(stream) {
  18086. var state = this._readableState;
  18087. var paused = false;
  18088. var self = this;
  18089. stream.on('end', function() {
  18090. debug('wrapped end');
  18091. if (state.decoder && !state.ended) {
  18092. var chunk = state.decoder.end();
  18093. if (chunk && chunk.length)
  18094. self.push(chunk);
  18095. }
  18096. self.push(null);
  18097. });
  18098. stream.on('data', function(chunk) {
  18099. debug('wrapped data');
  18100. if (state.decoder)
  18101. chunk = state.decoder.write(chunk);
  18102. if (!chunk || !state.objectMode && !chunk.length)
  18103. return;
  18104. var ret = self.push(chunk);
  18105. if (!ret) {
  18106. paused = true;
  18107. stream.pause();
  18108. }
  18109. });
  18110. // proxy all the other methods.
  18111. // important when wrapping filters and duplexes.
  18112. for (var i in stream) {
  18113. if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
  18114. this[i] = function(method) { return function() {
  18115. return stream[method].apply(stream, arguments);
  18116. }}(i);
  18117. }
  18118. }
  18119. // proxy certain important events.
  18120. var events = ['error', 'close', 'destroy', 'pause', 'resume'];
  18121. forEach(events, function(ev) {
  18122. stream.on(ev, self.emit.bind(self, ev));
  18123. });
  18124. // when we try to consume some more bytes, simply unpause the
  18125. // underlying stream.
  18126. self._read = function(n) {
  18127. debug('wrapped _read', n);
  18128. if (paused) {
  18129. paused = false;
  18130. stream.resume();
  18131. }
  18132. };
  18133. return self;
  18134. };
  18135. // exposed for testing purposes only.
  18136. Readable._fromList = fromList;
  18137. // Pluck off n bytes from an array of buffers.
  18138. // Length is the combined lengths of all the buffers in the list.
  18139. function fromList(n, state) {
  18140. var list = state.buffer;
  18141. var length = state.length;
  18142. var stringMode = !!state.decoder;
  18143. var objectMode = !!state.objectMode;
  18144. var ret;
  18145. // nothing in the list, definitely empty.
  18146. if (list.length === 0)
  18147. return null;
  18148. if (length === 0)
  18149. ret = null;
  18150. else if (objectMode)
  18151. ret = list.shift();
  18152. else if (!n || n >= length) {
  18153. // read it all, truncate the array.
  18154. if (stringMode)
  18155. ret = list.join('');
  18156. else
  18157. ret = Buffer.concat(list, length);
  18158. list.length = 0;
  18159. } else {
  18160. // read just some of it.
  18161. if (n < list[0].length) {
  18162. // just take a part of the first list item.
  18163. // slice is the same for buffers and strings.
  18164. var buf = list[0];
  18165. ret = buf.slice(0, n);
  18166. list[0] = buf.slice(n);
  18167. } else if (n === list[0].length) {
  18168. // first list is a perfect match
  18169. ret = list.shift();
  18170. } else {
  18171. // complex case.
  18172. // we have enough to cover it, but it spans past the first buffer.
  18173. if (stringMode)
  18174. ret = '';
  18175. else
  18176. ret = new Buffer(n);
  18177. var c = 0;
  18178. for (var i = 0, l = list.length; i < l && c < n; i++) {
  18179. var buf = list[0];
  18180. var cpy = Math.min(n - c, buf.length);
  18181. if (stringMode)
  18182. ret += buf.slice(0, cpy);
  18183. else
  18184. buf.copy(ret, c, 0, cpy);
  18185. if (cpy < buf.length)
  18186. list[0] = buf.slice(cpy);
  18187. else
  18188. list.shift();
  18189. c += cpy;
  18190. }
  18191. }
  18192. }
  18193. return ret;
  18194. }
  18195. function endReadable(stream) {
  18196. var state = stream._readableState;
  18197. // If we get here before consuming all the bytes, then that is a
  18198. // bug in node. Should never happen.
  18199. if (state.length > 0)
  18200. throw new Error('endReadable called on non-empty stream');
  18201. if (!state.endEmitted) {
  18202. state.ended = true;
  18203. process.nextTick(function() {
  18204. // Check that we didn't get one last unshift.
  18205. if (!state.endEmitted && state.length === 0) {
  18206. state.endEmitted = true;
  18207. stream.readable = false;
  18208. stream.emit('end');
  18209. }
  18210. });
  18211. }
  18212. }
  18213. function forEach (xs, f) {
  18214. for (var i = 0, l = xs.length; i < l; i++) {
  18215. f(xs[i], i);
  18216. }
  18217. }
  18218. function indexOf (xs, x) {
  18219. for (var i = 0, l = xs.length; i < l; i++) {
  18220. if (xs[i] === x) return i;
  18221. }
  18222. return -1;
  18223. }
  18224. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(30)))
  18225. /***/ },
  18226. /* 30 */
  18227. /***/ function(module, exports) {
  18228. // shim for using process in browser
  18229. var process = module.exports = {};
  18230. var queue = [];
  18231. var draining = false;
  18232. var currentQueue;
  18233. var queueIndex = -1;
  18234. function cleanUpNextTick() {
  18235. draining = false;
  18236. if (currentQueue.length) {
  18237. queue = currentQueue.concat(queue);
  18238. } else {
  18239. queueIndex = -1;
  18240. }
  18241. if (queue.length) {
  18242. drainQueue();
  18243. }
  18244. }
  18245. function drainQueue() {
  18246. if (draining) {
  18247. return;
  18248. }
  18249. var timeout = setTimeout(cleanUpNextTick);
  18250. draining = true;
  18251. var len = queue.length;
  18252. while(len) {
  18253. currentQueue = queue;
  18254. queue = [];
  18255. while (++queueIndex < len) {
  18256. if (currentQueue) {
  18257. currentQueue[queueIndex].run();
  18258. }
  18259. }
  18260. queueIndex = -1;
  18261. len = queue.length;
  18262. }
  18263. currentQueue = null;
  18264. draining = false;
  18265. clearTimeout(timeout);
  18266. }
  18267. process.nextTick = function (fun) {
  18268. var args = new Array(arguments.length - 1);
  18269. if (arguments.length > 1) {
  18270. for (var i = 1; i < arguments.length; i++) {
  18271. args[i - 1] = arguments[i];
  18272. }
  18273. }
  18274. queue.push(new Item(fun, args));
  18275. if (queue.length === 1 && !draining) {
  18276. setTimeout(drainQueue, 0);
  18277. }
  18278. };
  18279. // v8 likes predictible objects
  18280. function Item(fun, array) {
  18281. this.fun = fun;
  18282. this.array = array;
  18283. }
  18284. Item.prototype.run = function () {
  18285. this.fun.apply(null, this.array);
  18286. };
  18287. process.title = 'browser';
  18288. process.browser = true;
  18289. process.env = {};
  18290. process.argv = [];
  18291. process.version = ''; // empty string to avoid regexp issues
  18292. process.versions = {};
  18293. function noop() {}
  18294. process.on = noop;
  18295. process.addListener = noop;
  18296. process.once = noop;
  18297. process.off = noop;
  18298. process.removeListener = noop;
  18299. process.removeAllListeners = noop;
  18300. process.emit = noop;
  18301. process.binding = function (name) {
  18302. throw new Error('process.binding is not supported');
  18303. };
  18304. process.cwd = function () { return '/' };
  18305. process.chdir = function (dir) {
  18306. throw new Error('process.chdir is not supported');
  18307. };
  18308. process.umask = function() { return 0; };
  18309. /***/ },
  18310. /* 31 */
  18311. /***/ function(module, exports) {
  18312. module.exports = Array.isArray || function (arr) {
  18313. return Object.prototype.toString.call(arr) == '[object Array]';
  18314. };
  18315. /***/ },
  18316. /* 32 */
  18317. /***/ function(module, exports, __webpack_require__) {
  18318. /* WEBPACK VAR INJECTION */(function(Buffer) {// Copyright Joyent, Inc. and other Node contributors.
  18319. //
  18320. // Permission is hereby granted, free of charge, to any person obtaining a
  18321. // copy of this software and associated documentation files (the
  18322. // "Software"), to deal in the Software without restriction, including
  18323. // without limitation the rights to use, copy, modify, merge, publish,
  18324. // distribute, sublicense, and/or sell copies of the Software, and to permit
  18325. // persons to whom the Software is furnished to do so, subject to the
  18326. // following conditions:
  18327. //
  18328. // The above copyright notice and this permission notice shall be included
  18329. // in all copies or substantial portions of the Software.
  18330. //
  18331. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  18332. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  18333. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  18334. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  18335. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  18336. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  18337. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  18338. // NOTE: These type checking functions intentionally don't use `instanceof`
  18339. // because it is fragile and can be easily faked with `Object.create()`.
  18340. function isArray(ar) {
  18341. return Array.isArray(ar);
  18342. }
  18343. exports.isArray = isArray;
  18344. function isBoolean(arg) {
  18345. return typeof arg === 'boolean';
  18346. }
  18347. exports.isBoolean = isBoolean;
  18348. function isNull(arg) {
  18349. return arg === null;
  18350. }
  18351. exports.isNull = isNull;
  18352. function isNullOrUndefined(arg) {
  18353. return arg == null;
  18354. }
  18355. exports.isNullOrUndefined = isNullOrUndefined;
  18356. function isNumber(arg) {
  18357. return typeof arg === 'number';
  18358. }
  18359. exports.isNumber = isNumber;
  18360. function isString(arg) {
  18361. return typeof arg === 'string';
  18362. }
  18363. exports.isString = isString;
  18364. function isSymbol(arg) {
  18365. return typeof arg === 'symbol';
  18366. }
  18367. exports.isSymbol = isSymbol;
  18368. function isUndefined(arg) {
  18369. return arg === void 0;
  18370. }
  18371. exports.isUndefined = isUndefined;
  18372. function isRegExp(re) {
  18373. return isObject(re) && objectToString(re) === '[object RegExp]';
  18374. }
  18375. exports.isRegExp = isRegExp;
  18376. function isObject(arg) {
  18377. return typeof arg === 'object' && arg !== null;
  18378. }
  18379. exports.isObject = isObject;
  18380. function isDate(d) {
  18381. return isObject(d) && objectToString(d) === '[object Date]';
  18382. }
  18383. exports.isDate = isDate;
  18384. function isError(e) {
  18385. return isObject(e) &&
  18386. (objectToString(e) === '[object Error]' || e instanceof Error);
  18387. }
  18388. exports.isError = isError;
  18389. function isFunction(arg) {
  18390. return typeof arg === 'function';
  18391. }
  18392. exports.isFunction = isFunction;
  18393. function isPrimitive(arg) {
  18394. return arg === null ||
  18395. typeof arg === 'boolean' ||
  18396. typeof arg === 'number' ||
  18397. typeof arg === 'string' ||
  18398. typeof arg === 'symbol' || // ES6 symbol
  18399. typeof arg === 'undefined';
  18400. }
  18401. exports.isPrimitive = isPrimitive;
  18402. function isBuffer(arg) {
  18403. return Buffer.isBuffer(arg);
  18404. }
  18405. exports.isBuffer = isBuffer;
  18406. function objectToString(o) {
  18407. return Object.prototype.toString.call(o);
  18408. }
  18409. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
  18410. /***/ },
  18411. /* 33 */
  18412. /***/ function(module, exports) {
  18413. if (typeof Object.create === 'function') {
  18414. // implementation from standard node.js 'util' module
  18415. module.exports = function inherits(ctor, superCtor) {
  18416. ctor.super_ = superCtor
  18417. ctor.prototype = Object.create(superCtor.prototype, {
  18418. constructor: {
  18419. value: ctor,
  18420. enumerable: false,
  18421. writable: true,
  18422. configurable: true
  18423. }
  18424. });
  18425. };
  18426. } else {
  18427. // old school shim for old browsers
  18428. module.exports = function inherits(ctor, superCtor) {
  18429. ctor.super_ = superCtor
  18430. var TempCtor = function () {}
  18431. TempCtor.prototype = superCtor.prototype
  18432. ctor.prototype = new TempCtor()
  18433. ctor.prototype.constructor = ctor
  18434. }
  18435. }
  18436. /***/ },
  18437. /* 34 */
  18438. /***/ function(module, exports) {
  18439. /* (ignored) */
  18440. /***/ },
  18441. /* 35 */
  18442. /***/ function(module, exports, __webpack_require__) {
  18443. /* WEBPACK VAR INJECTION */(function(process) {// Copyright Joyent, Inc. and other Node contributors.
  18444. //
  18445. // Permission is hereby granted, free of charge, to any person obtaining a
  18446. // copy of this software and associated documentation files (the
  18447. // "Software"), to deal in the Software without restriction, including
  18448. // without limitation the rights to use, copy, modify, merge, publish,
  18449. // distribute, sublicense, and/or sell copies of the Software, and to permit
  18450. // persons to whom the Software is furnished to do so, subject to the
  18451. // following conditions:
  18452. //
  18453. // The above copyright notice and this permission notice shall be included
  18454. // in all copies or substantial portions of the Software.
  18455. //
  18456. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  18457. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  18458. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  18459. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  18460. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  18461. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  18462. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  18463. // a duplex stream is just a stream that is both readable and writable.
  18464. // Since JS doesn't have multiple prototypal inheritance, this class
  18465. // prototypally inherits from Readable, and then parasitically from
  18466. // Writable.
  18467. module.exports = Duplex;
  18468. /*<replacement>*/
  18469. var objectKeys = Object.keys || function (obj) {
  18470. var keys = [];
  18471. for (var key in obj) keys.push(key);
  18472. return keys;
  18473. }
  18474. /*</replacement>*/
  18475. /*<replacement>*/
  18476. var util = __webpack_require__(32);
  18477. util.inherits = __webpack_require__(33);
  18478. /*</replacement>*/
  18479. var Readable = __webpack_require__(29);
  18480. var Writable = __webpack_require__(36);
  18481. util.inherits(Duplex, Readable);
  18482. forEach(objectKeys(Writable.prototype), function(method) {
  18483. if (!Duplex.prototype[method])
  18484. Duplex.prototype[method] = Writable.prototype[method];
  18485. });
  18486. function Duplex(options) {
  18487. if (!(this instanceof Duplex))
  18488. return new Duplex(options);
  18489. Readable.call(this, options);
  18490. Writable.call(this, options);
  18491. if (options && options.readable === false)
  18492. this.readable = false;
  18493. if (options && options.writable === false)
  18494. this.writable = false;
  18495. this.allowHalfOpen = true;
  18496. if (options && options.allowHalfOpen === false)
  18497. this.allowHalfOpen = false;
  18498. this.once('end', onend);
  18499. }
  18500. // the no-half-open enforcer
  18501. function onend() {
  18502. // if we allow half-open state, or if the writable side ended,
  18503. // then we're ok.
  18504. if (this.allowHalfOpen || this._writableState.ended)
  18505. return;
  18506. // no more data can be written.
  18507. // But allow more writes to happen in this tick.
  18508. process.nextTick(this.end.bind(this));
  18509. }
  18510. function forEach (xs, f) {
  18511. for (var i = 0, l = xs.length; i < l; i++) {
  18512. f(xs[i], i);
  18513. }
  18514. }
  18515. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(30)))
  18516. /***/ },
  18517. /* 36 */
  18518. /***/ function(module, exports, __webpack_require__) {
  18519. /* WEBPACK VAR INJECTION */(function(process) {// Copyright Joyent, Inc. and other Node contributors.
  18520. //
  18521. // Permission is hereby granted, free of charge, to any person obtaining a
  18522. // copy of this software and associated documentation files (the
  18523. // "Software"), to deal in the Software without restriction, including
  18524. // without limitation the rights to use, copy, modify, merge, publish,
  18525. // distribute, sublicense, and/or sell copies of the Software, and to permit
  18526. // persons to whom the Software is furnished to do so, subject to the
  18527. // following conditions:
  18528. //
  18529. // The above copyright notice and this permission notice shall be included
  18530. // in all copies or substantial portions of the Software.
  18531. //
  18532. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  18533. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  18534. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  18535. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  18536. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  18537. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  18538. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  18539. // A bit simpler than readable streams.
  18540. // Implement an async ._write(chunk, cb), and it'll handle all
  18541. // the drain event emission and buffering.
  18542. module.exports = Writable;
  18543. /*<replacement>*/
  18544. var Buffer = __webpack_require__(2).Buffer;
  18545. /*</replacement>*/
  18546. Writable.WritableState = WritableState;
  18547. /*<replacement>*/
  18548. var util = __webpack_require__(32);
  18549. util.inherits = __webpack_require__(33);
  18550. /*</replacement>*/
  18551. var Stream = __webpack_require__(25);
  18552. util.inherits(Writable, Stream);
  18553. function WriteReq(chunk, encoding, cb) {
  18554. this.chunk = chunk;
  18555. this.encoding = encoding;
  18556. this.callback = cb;
  18557. }
  18558. function WritableState(options, stream) {
  18559. var Duplex = __webpack_require__(35);
  18560. options = options || {};
  18561. // the point at which write() starts returning false
  18562. // Note: 0 is a valid value, means that we always return false if
  18563. // the entire buffer is not flushed immediately on write()
  18564. var hwm = options.highWaterMark;
  18565. var defaultHwm = options.objectMode ? 16 : 16 * 1024;
  18566. this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
  18567. // object stream flag to indicate whether or not this stream
  18568. // contains buffers or objects.
  18569. this.objectMode = !!options.objectMode;
  18570. if (stream instanceof Duplex)
  18571. this.objectMode = this.objectMode || !!options.writableObjectMode;
  18572. // cast to ints.
  18573. this.highWaterMark = ~~this.highWaterMark;
  18574. this.needDrain = false;
  18575. // at the start of calling end()
  18576. this.ending = false;
  18577. // when end() has been called, and returned
  18578. this.ended = false;
  18579. // when 'finish' is emitted
  18580. this.finished = false;
  18581. // should we decode strings into buffers before passing to _write?
  18582. // this is here so that some node-core streams can optimize string
  18583. // handling at a lower level.
  18584. var noDecode = options.decodeStrings === false;
  18585. this.decodeStrings = !noDecode;
  18586. // Crypto is kind of old and crusty. Historically, its default string
  18587. // encoding is 'binary' so we have to make this configurable.
  18588. // Everything else in the universe uses 'utf8', though.
  18589. this.defaultEncoding = options.defaultEncoding || 'utf8';
  18590. // not an actual buffer we keep track of, but a measurement
  18591. // of how much we're waiting to get pushed to some underlying
  18592. // socket or file.
  18593. this.length = 0;
  18594. // a flag to see when we're in the middle of a write.
  18595. this.writing = false;
  18596. // when true all writes will be buffered until .uncork() call
  18597. this.corked = 0;
  18598. // a flag to be able to tell if the onwrite cb is called immediately,
  18599. // or on a later tick. We set this to true at first, because any
  18600. // actions that shouldn't happen until "later" should generally also
  18601. // not happen before the first write call.
  18602. this.sync = true;
  18603. // a flag to know if we're processing previously buffered items, which
  18604. // may call the _write() callback in the same tick, so that we don't
  18605. // end up in an overlapped onwrite situation.
  18606. this.bufferProcessing = false;
  18607. // the callback that's passed to _write(chunk,cb)
  18608. this.onwrite = function(er) {
  18609. onwrite(stream, er);
  18610. };
  18611. // the callback that the user supplies to write(chunk,encoding,cb)
  18612. this.writecb = null;
  18613. // the amount that is being written when _write is called.
  18614. this.writelen = 0;
  18615. this.buffer = [];
  18616. // number of pending user-supplied write callbacks
  18617. // this must be 0 before 'finish' can be emitted
  18618. this.pendingcb = 0;
  18619. // emit prefinish if the only thing we're waiting for is _write cbs
  18620. // This is relevant for synchronous Transform streams
  18621. this.prefinished = false;
  18622. // True if the error was already emitted and should not be thrown again
  18623. this.errorEmitted = false;
  18624. }
  18625. function Writable(options) {
  18626. var Duplex = __webpack_require__(35);
  18627. // Writable ctor is applied to Duplexes, though they're not
  18628. // instanceof Writable, they're instanceof Readable.
  18629. if (!(this instanceof Writable) && !(this instanceof Duplex))
  18630. return new Writable(options);
  18631. this._writableState = new WritableState(options, this);
  18632. // legacy.
  18633. this.writable = true;
  18634. Stream.call(this);
  18635. }
  18636. // Otherwise people can pipe Writable streams, which is just wrong.
  18637. Writable.prototype.pipe = function() {
  18638. this.emit('error', new Error('Cannot pipe. Not readable.'));
  18639. };
  18640. function writeAfterEnd(stream, state, cb) {
  18641. var er = new Error('write after end');
  18642. // TODO: defer error events consistently everywhere, not just the cb
  18643. stream.emit('error', er);
  18644. process.nextTick(function() {
  18645. cb(er);
  18646. });
  18647. }
  18648. // If we get something that is not a buffer, string, null, or undefined,
  18649. // and we're not in objectMode, then that's an error.
  18650. // Otherwise stream chunks are all considered to be of length=1, and the
  18651. // watermarks determine how many objects to keep in the buffer, rather than
  18652. // how many bytes or characters.
  18653. function validChunk(stream, state, chunk, cb) {
  18654. var valid = true;
  18655. if (!util.isBuffer(chunk) &&
  18656. !util.isString(chunk) &&
  18657. !util.isNullOrUndefined(chunk) &&
  18658. !state.objectMode) {
  18659. var er = new TypeError('Invalid non-string/buffer chunk');
  18660. stream.emit('error', er);
  18661. process.nextTick(function() {
  18662. cb(er);
  18663. });
  18664. valid = false;
  18665. }
  18666. return valid;
  18667. }
  18668. Writable.prototype.write = function(chunk, encoding, cb) {
  18669. var state = this._writableState;
  18670. var ret = false;
  18671. if (util.isFunction(encoding)) {
  18672. cb = encoding;
  18673. encoding = null;
  18674. }
  18675. if (util.isBuffer(chunk))
  18676. encoding = 'buffer';
  18677. else if (!encoding)
  18678. encoding = state.defaultEncoding;
  18679. if (!util.isFunction(cb))
  18680. cb = function() {};
  18681. if (state.ended)
  18682. writeAfterEnd(this, state, cb);
  18683. else if (validChunk(this, state, chunk, cb)) {
  18684. state.pendingcb++;
  18685. ret = writeOrBuffer(this, state, chunk, encoding, cb);
  18686. }
  18687. return ret;
  18688. };
  18689. Writable.prototype.cork = function() {
  18690. var state = this._writableState;
  18691. state.corked++;
  18692. };
  18693. Writable.prototype.uncork = function() {
  18694. var state = this._writableState;
  18695. if (state.corked) {
  18696. state.corked--;
  18697. if (!state.writing &&
  18698. !state.corked &&
  18699. !state.finished &&
  18700. !state.bufferProcessing &&
  18701. state.buffer.length)
  18702. clearBuffer(this, state);
  18703. }
  18704. };
  18705. function decodeChunk(state, chunk, encoding) {
  18706. if (!state.objectMode &&
  18707. state.decodeStrings !== false &&
  18708. util.isString(chunk)) {
  18709. chunk = new Buffer(chunk, encoding);
  18710. }
  18711. return chunk;
  18712. }
  18713. // if we're already writing something, then just put this
  18714. // in the queue, and wait our turn. Otherwise, call _write
  18715. // If we return false, then we need a drain event, so set that flag.
  18716. function writeOrBuffer(stream, state, chunk, encoding, cb) {
  18717. chunk = decodeChunk(state, chunk, encoding);
  18718. if (util.isBuffer(chunk))
  18719. encoding = 'buffer';
  18720. var len = state.objectMode ? 1 : chunk.length;
  18721. state.length += len;
  18722. var ret = state.length < state.highWaterMark;
  18723. // we must ensure that previous needDrain will not be reset to false.
  18724. if (!ret)
  18725. state.needDrain = true;
  18726. if (state.writing || state.corked)
  18727. state.buffer.push(new WriteReq(chunk, encoding, cb));
  18728. else
  18729. doWrite(stream, state, false, len, chunk, encoding, cb);
  18730. return ret;
  18731. }
  18732. function doWrite(stream, state, writev, len, chunk, encoding, cb) {
  18733. state.writelen = len;
  18734. state.writecb = cb;
  18735. state.writing = true;
  18736. state.sync = true;
  18737. if (writev)
  18738. stream._writev(chunk, state.onwrite);
  18739. else
  18740. stream._write(chunk, encoding, state.onwrite);
  18741. state.sync = false;
  18742. }
  18743. function onwriteError(stream, state, sync, er, cb) {
  18744. if (sync)
  18745. process.nextTick(function() {
  18746. state.pendingcb--;
  18747. cb(er);
  18748. });
  18749. else {
  18750. state.pendingcb--;
  18751. cb(er);
  18752. }
  18753. stream._writableState.errorEmitted = true;
  18754. stream.emit('error', er);
  18755. }
  18756. function onwriteStateUpdate(state) {
  18757. state.writing = false;
  18758. state.writecb = null;
  18759. state.length -= state.writelen;
  18760. state.writelen = 0;
  18761. }
  18762. function onwrite(stream, er) {
  18763. var state = stream._writableState;
  18764. var sync = state.sync;
  18765. var cb = state.writecb;
  18766. onwriteStateUpdate(state);
  18767. if (er)
  18768. onwriteError(stream, state, sync, er, cb);
  18769. else {
  18770. // Check if we're actually ready to finish, but don't emit yet
  18771. var finished = needFinish(stream, state);
  18772. if (!finished &&
  18773. !state.corked &&
  18774. !state.bufferProcessing &&
  18775. state.buffer.length) {
  18776. clearBuffer(stream, state);
  18777. }
  18778. if (sync) {
  18779. process.nextTick(function() {
  18780. afterWrite(stream, state, finished, cb);
  18781. });
  18782. } else {
  18783. afterWrite(stream, state, finished, cb);
  18784. }
  18785. }
  18786. }
  18787. function afterWrite(stream, state, finished, cb) {
  18788. if (!finished)
  18789. onwriteDrain(stream, state);
  18790. state.pendingcb--;
  18791. cb();
  18792. finishMaybe(stream, state);
  18793. }
  18794. // Must force callback to be called on nextTick, so that we don't
  18795. // emit 'drain' before the write() consumer gets the 'false' return
  18796. // value, and has a chance to attach a 'drain' listener.
  18797. function onwriteDrain(stream, state) {
  18798. if (state.length === 0 && state.needDrain) {
  18799. state.needDrain = false;
  18800. stream.emit('drain');
  18801. }
  18802. }
  18803. // if there's something in the buffer waiting, then process it
  18804. function clearBuffer(stream, state) {
  18805. state.bufferProcessing = true;
  18806. if (stream._writev && state.buffer.length > 1) {
  18807. // Fast case, write everything using _writev()
  18808. var cbs = [];
  18809. for (var c = 0; c < state.buffer.length; c++)
  18810. cbs.push(state.buffer[c].callback);
  18811. // count the one we are adding, as well.
  18812. // TODO(isaacs) clean this up
  18813. state.pendingcb++;
  18814. doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
  18815. for (var i = 0; i < cbs.length; i++) {
  18816. state.pendingcb--;
  18817. cbs[i](err);
  18818. }
  18819. });
  18820. // Clear buffer
  18821. state.buffer = [];
  18822. } else {
  18823. // Slow case, write chunks one-by-one
  18824. for (var c = 0; c < state.buffer.length; c++) {
  18825. var entry = state.buffer[c];
  18826. var chunk = entry.chunk;
  18827. var encoding = entry.encoding;
  18828. var cb = entry.callback;
  18829. var len = state.objectMode ? 1 : chunk.length;
  18830. doWrite(stream, state, false, len, chunk, encoding, cb);
  18831. // if we didn't call the onwrite immediately, then
  18832. // it means that we need to wait until it does.
  18833. // also, that means that the chunk and cb are currently
  18834. // being processed, so move the buffer counter past them.
  18835. if (state.writing) {
  18836. c++;
  18837. break;
  18838. }
  18839. }
  18840. if (c < state.buffer.length)
  18841. state.buffer = state.buffer.slice(c);
  18842. else
  18843. state.buffer.length = 0;
  18844. }
  18845. state.bufferProcessing = false;
  18846. }
  18847. Writable.prototype._write = function(chunk, encoding, cb) {
  18848. cb(new Error('not implemented'));
  18849. };
  18850. Writable.prototype._writev = null;
  18851. Writable.prototype.end = function(chunk, encoding, cb) {
  18852. var state = this._writableState;
  18853. if (util.isFunction(chunk)) {
  18854. cb = chunk;
  18855. chunk = null;
  18856. encoding = null;
  18857. } else if (util.isFunction(encoding)) {
  18858. cb = encoding;
  18859. encoding = null;
  18860. }
  18861. if (!util.isNullOrUndefined(chunk))
  18862. this.write(chunk, encoding);
  18863. // .end() fully uncorks
  18864. if (state.corked) {
  18865. state.corked = 1;
  18866. this.uncork();
  18867. }
  18868. // ignore unnecessary end() calls.
  18869. if (!state.ending && !state.finished)
  18870. endWritable(this, state, cb);
  18871. };
  18872. function needFinish(stream, state) {
  18873. return (state.ending &&
  18874. state.length === 0 &&
  18875. !state.finished &&
  18876. !state.writing);
  18877. }
  18878. function prefinish(stream, state) {
  18879. if (!state.prefinished) {
  18880. state.prefinished = true;
  18881. stream.emit('prefinish');
  18882. }
  18883. }
  18884. function finishMaybe(stream, state) {
  18885. var need = needFinish(stream, state);
  18886. if (need) {
  18887. if (state.pendingcb === 0) {
  18888. prefinish(stream, state);
  18889. state.finished = true;
  18890. stream.emit('finish');
  18891. } else
  18892. prefinish(stream, state);
  18893. }
  18894. return need;
  18895. }
  18896. function endWritable(stream, state, cb) {
  18897. state.ending = true;
  18898. finishMaybe(stream, state);
  18899. if (cb) {
  18900. if (state.finished)
  18901. process.nextTick(cb);
  18902. else
  18903. stream.once('finish', cb);
  18904. }
  18905. state.ended = true;
  18906. }
  18907. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(30)))
  18908. /***/ },
  18909. /* 37 */
  18910. /***/ function(module, exports, __webpack_require__) {
  18911. // Copyright Joyent, Inc. and other Node contributors.
  18912. //
  18913. // Permission is hereby granted, free of charge, to any person obtaining a
  18914. // copy of this software and associated documentation files (the
  18915. // "Software"), to deal in the Software without restriction, including
  18916. // without limitation the rights to use, copy, modify, merge, publish,
  18917. // distribute, sublicense, and/or sell copies of the Software, and to permit
  18918. // persons to whom the Software is furnished to do so, subject to the
  18919. // following conditions:
  18920. //
  18921. // The above copyright notice and this permission notice shall be included
  18922. // in all copies or substantial portions of the Software.
  18923. //
  18924. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  18925. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  18926. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  18927. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  18928. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  18929. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  18930. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  18931. var Buffer = __webpack_require__(2).Buffer;
  18932. var isBufferEncoding = Buffer.isEncoding
  18933. || function(encoding) {
  18934. switch (encoding && encoding.toLowerCase()) {
  18935. case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true;
  18936. default: return false;
  18937. }
  18938. }
  18939. function assertEncoding(encoding) {
  18940. if (encoding && !isBufferEncoding(encoding)) {
  18941. throw new Error('Unknown encoding: ' + encoding);
  18942. }
  18943. }
  18944. // StringDecoder provides an interface for efficiently splitting a series of
  18945. // buffers into a series of JS strings without breaking apart multi-byte
  18946. // characters. CESU-8 is handled as part of the UTF-8 encoding.
  18947. //
  18948. // @TODO Handling all encodings inside a single object makes it very difficult
  18949. // to reason about this code, so it should be split up in the future.
  18950. // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
  18951. // points as used by CESU-8.
  18952. var StringDecoder = exports.StringDecoder = function(encoding) {
  18953. this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
  18954. assertEncoding(encoding);
  18955. switch (this.encoding) {
  18956. case 'utf8':
  18957. // CESU-8 represents each of Surrogate Pair by 3-bytes
  18958. this.surrogateSize = 3;
  18959. break;
  18960. case 'ucs2':
  18961. case 'utf16le':
  18962. // UTF-16 represents each of Surrogate Pair by 2-bytes
  18963. this.surrogateSize = 2;
  18964. this.detectIncompleteChar = utf16DetectIncompleteChar;
  18965. break;
  18966. case 'base64':
  18967. // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
  18968. this.surrogateSize = 3;
  18969. this.detectIncompleteChar = base64DetectIncompleteChar;
  18970. break;
  18971. default:
  18972. this.write = passThroughWrite;
  18973. return;
  18974. }
  18975. // Enough space to store all bytes of a single character. UTF-8 needs 4
  18976. // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
  18977. this.charBuffer = new Buffer(6);
  18978. // Number of bytes received for the current incomplete multi-byte character.
  18979. this.charReceived = 0;
  18980. // Number of bytes expected for the current incomplete multi-byte character.
  18981. this.charLength = 0;
  18982. };
  18983. // write decodes the given buffer and returns it as JS string that is
  18984. // guaranteed to not contain any partial multi-byte characters. Any partial
  18985. // character found at the end of the buffer is buffered up, and will be
  18986. // returned when calling write again with the remaining bytes.
  18987. //
  18988. // Note: Converting a Buffer containing an orphan surrogate to a String
  18989. // currently works, but converting a String to a Buffer (via `new Buffer`, or
  18990. // Buffer#write) will replace incomplete surrogates with the unicode
  18991. // replacement character. See https://codereview.chromium.org/121173009/ .
  18992. StringDecoder.prototype.write = function(buffer) {
  18993. var charStr = '';
  18994. // if our last write ended with an incomplete multibyte character
  18995. while (this.charLength) {
  18996. // determine how many remaining bytes this buffer has to offer for this char
  18997. var available = (buffer.length >= this.charLength - this.charReceived) ?
  18998. this.charLength - this.charReceived :
  18999. buffer.length;
  19000. // add the new bytes to the char buffer
  19001. buffer.copy(this.charBuffer, this.charReceived, 0, available);
  19002. this.charReceived += available;
  19003. if (this.charReceived < this.charLength) {
  19004. // still not enough chars in this buffer? wait for more ...
  19005. return '';
  19006. }
  19007. // remove bytes belonging to the current character from the buffer
  19008. buffer = buffer.slice(available, buffer.length);
  19009. // get the character that was split
  19010. charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
  19011. // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
  19012. var charCode = charStr.charCodeAt(charStr.length - 1);
  19013. if (charCode >= 0xD800 && charCode <= 0xDBFF) {
  19014. this.charLength += this.surrogateSize;
  19015. charStr = '';
  19016. continue;
  19017. }
  19018. this.charReceived = this.charLength = 0;
  19019. // if there are no more bytes in this buffer, just emit our char
  19020. if (buffer.length === 0) {
  19021. return charStr;
  19022. }
  19023. break;
  19024. }
  19025. // determine and set charLength / charReceived
  19026. this.detectIncompleteChar(buffer);
  19027. var end = buffer.length;
  19028. if (this.charLength) {
  19029. // buffer the incomplete character bytes we got
  19030. buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
  19031. end -= this.charReceived;
  19032. }
  19033. charStr += buffer.toString(this.encoding, 0, end);
  19034. var end = charStr.length - 1;
  19035. var charCode = charStr.charCodeAt(end);
  19036. // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
  19037. if (charCode >= 0xD800 && charCode <= 0xDBFF) {
  19038. var size = this.surrogateSize;
  19039. this.charLength += size;
  19040. this.charReceived += size;
  19041. this.charBuffer.copy(this.charBuffer, size, 0, size);
  19042. buffer.copy(this.charBuffer, 0, 0, size);
  19043. return charStr.substring(0, end);
  19044. }
  19045. // or just emit the charStr
  19046. return charStr;
  19047. };
  19048. // detectIncompleteChar determines if there is an incomplete UTF-8 character at
  19049. // the end of the given buffer. If so, it sets this.charLength to the byte
  19050. // length that character, and sets this.charReceived to the number of bytes
  19051. // that are available for this character.
  19052. StringDecoder.prototype.detectIncompleteChar = function(buffer) {
  19053. // determine how many bytes we have to check at the end of this buffer
  19054. var i = (buffer.length >= 3) ? 3 : buffer.length;
  19055. // Figure out if one of the last i bytes of our buffer announces an
  19056. // incomplete char.
  19057. for (; i > 0; i--) {
  19058. var c = buffer[buffer.length - i];
  19059. // See http://en.wikipedia.org/wiki/UTF-8#Description
  19060. // 110XXXXX
  19061. if (i == 1 && c >> 5 == 0x06) {
  19062. this.charLength = 2;
  19063. break;
  19064. }
  19065. // 1110XXXX
  19066. if (i <= 2 && c >> 4 == 0x0E) {
  19067. this.charLength = 3;
  19068. break;
  19069. }
  19070. // 11110XXX
  19071. if (i <= 3 && c >> 3 == 0x1E) {
  19072. this.charLength = 4;
  19073. break;
  19074. }
  19075. }
  19076. this.charReceived = i;
  19077. };
  19078. StringDecoder.prototype.end = function(buffer) {
  19079. var res = '';
  19080. if (buffer && buffer.length)
  19081. res = this.write(buffer);
  19082. if (this.charReceived) {
  19083. var cr = this.charReceived;
  19084. var buf = this.charBuffer;
  19085. var enc = this.encoding;
  19086. res += buf.slice(0, cr).toString(enc);
  19087. }
  19088. return res;
  19089. };
  19090. function passThroughWrite(buffer) {
  19091. return buffer.toString(this.encoding);
  19092. }
  19093. function utf16DetectIncompleteChar(buffer) {
  19094. this.charReceived = buffer.length % 2;
  19095. this.charLength = this.charReceived ? 2 : 0;
  19096. }
  19097. function base64DetectIncompleteChar(buffer) {
  19098. this.charReceived = buffer.length % 3;
  19099. this.charLength = this.charReceived ? 3 : 0;
  19100. }
  19101. /***/ },
  19102. /* 38 */
  19103. /***/ function(module, exports, __webpack_require__) {
  19104. // Copyright Joyent, Inc. and other Node contributors.
  19105. //
  19106. // Permission is hereby granted, free of charge, to any person obtaining a
  19107. // copy of this software and associated documentation files (the
  19108. // "Software"), to deal in the Software without restriction, including
  19109. // without limitation the rights to use, copy, modify, merge, publish,
  19110. // distribute, sublicense, and/or sell copies of the Software, and to permit
  19111. // persons to whom the Software is furnished to do so, subject to the
  19112. // following conditions:
  19113. //
  19114. // The above copyright notice and this permission notice shall be included
  19115. // in all copies or substantial portions of the Software.
  19116. //
  19117. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  19118. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  19119. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  19120. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  19121. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  19122. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  19123. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  19124. // a transform stream is a readable/writable stream where you do
  19125. // something with the data. Sometimes it's called a "filter",
  19126. // but that's not a great name for it, since that implies a thing where
  19127. // some bits pass through, and others are simply ignored. (That would
  19128. // be a valid example of a transform, of course.)
  19129. //
  19130. // While the output is causally related to the input, it's not a
  19131. // necessarily symmetric or synchronous transformation. For example,
  19132. // a zlib stream might take multiple plain-text writes(), and then
  19133. // emit a single compressed chunk some time in the future.
  19134. //
  19135. // Here's how this works:
  19136. //
  19137. // The Transform stream has all the aspects of the readable and writable
  19138. // stream classes. When you write(chunk), that calls _write(chunk,cb)
  19139. // internally, and returns false if there's a lot of pending writes
  19140. // buffered up. When you call read(), that calls _read(n) until
  19141. // there's enough pending readable data buffered up.
  19142. //
  19143. // In a transform stream, the written data is placed in a buffer. When
  19144. // _read(n) is called, it transforms the queued up data, calling the
  19145. // buffered _write cb's as it consumes chunks. If consuming a single
  19146. // written chunk would result in multiple output chunks, then the first
  19147. // outputted bit calls the readcb, and subsequent chunks just go into
  19148. // the read buffer, and will cause it to emit 'readable' if necessary.
  19149. //
  19150. // This way, back-pressure is actually determined by the reading side,
  19151. // since _read has to be called to start processing a new chunk. However,
  19152. // a pathological inflate type of transform can cause excessive buffering
  19153. // here. For example, imagine a stream where every byte of input is
  19154. // interpreted as an integer from 0-255, and then results in that many
  19155. // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
  19156. // 1kb of data being output. In this case, you could write a very small
  19157. // amount of input, and end up with a very large amount of output. In
  19158. // such a pathological inflating mechanism, there'd be no way to tell
  19159. // the system to stop doing the transform. A single 4MB write could
  19160. // cause the system to run out of memory.
  19161. //
  19162. // However, even in such a pathological case, only a single written chunk
  19163. // would be consumed, and then the rest would wait (un-transformed) until
  19164. // the results of the previous transformed chunk were consumed.
  19165. module.exports = Transform;
  19166. var Duplex = __webpack_require__(35);
  19167. /*<replacement>*/
  19168. var util = __webpack_require__(32);
  19169. util.inherits = __webpack_require__(33);
  19170. /*</replacement>*/
  19171. util.inherits(Transform, Duplex);
  19172. function TransformState(options, stream) {
  19173. this.afterTransform = function(er, data) {
  19174. return afterTransform(stream, er, data);
  19175. };
  19176. this.needTransform = false;
  19177. this.transforming = false;
  19178. this.writecb = null;
  19179. this.writechunk = null;
  19180. }
  19181. function afterTransform(stream, er, data) {
  19182. var ts = stream._transformState;
  19183. ts.transforming = false;
  19184. var cb = ts.writecb;
  19185. if (!cb)
  19186. return stream.emit('error', new Error('no writecb in Transform class'));
  19187. ts.writechunk = null;
  19188. ts.writecb = null;
  19189. if (!util.isNullOrUndefined(data))
  19190. stream.push(data);
  19191. if (cb)
  19192. cb(er);
  19193. var rs = stream._readableState;
  19194. rs.reading = false;
  19195. if (rs.needReadable || rs.length < rs.highWaterMark) {
  19196. stream._read(rs.highWaterMark);
  19197. }
  19198. }
  19199. function Transform(options) {
  19200. if (!(this instanceof Transform))
  19201. return new Transform(options);
  19202. Duplex.call(this, options);
  19203. this._transformState = new TransformState(options, this);
  19204. // when the writable side finishes, then flush out anything remaining.
  19205. var stream = this;
  19206. // start out asking for a readable event once data is transformed.
  19207. this._readableState.needReadable = true;
  19208. // we have implemented the _read method, and done the other things
  19209. // that Readable wants before the first _read call, so unset the
  19210. // sync guard flag.
  19211. this._readableState.sync = false;
  19212. this.once('prefinish', function() {
  19213. if (util.isFunction(this._flush))
  19214. this._flush(function(er) {
  19215. done(stream, er);
  19216. });
  19217. else
  19218. done(stream);
  19219. });
  19220. }
  19221. Transform.prototype.push = function(chunk, encoding) {
  19222. this._transformState.needTransform = false;
  19223. return Duplex.prototype.push.call(this, chunk, encoding);
  19224. };
  19225. // This is the part where you do stuff!
  19226. // override this function in implementation classes.
  19227. // 'chunk' is an input chunk.
  19228. //
  19229. // Call `push(newChunk)` to pass along transformed output
  19230. // to the readable side. You may call 'push' zero or more times.
  19231. //
  19232. // Call `cb(err)` when you are done with this chunk. If you pass
  19233. // an error, then that'll put the hurt on the whole operation. If you
  19234. // never call cb(), then you'll never get another chunk.
  19235. Transform.prototype._transform = function(chunk, encoding, cb) {
  19236. throw new Error('not implemented');
  19237. };
  19238. Transform.prototype._write = function(chunk, encoding, cb) {
  19239. var ts = this._transformState;
  19240. ts.writecb = cb;
  19241. ts.writechunk = chunk;
  19242. ts.writeencoding = encoding;
  19243. if (!ts.transforming) {
  19244. var rs = this._readableState;
  19245. if (ts.needTransform ||
  19246. rs.needReadable ||
  19247. rs.length < rs.highWaterMark)
  19248. this._read(rs.highWaterMark);
  19249. }
  19250. };
  19251. // Doesn't matter what the args are here.
  19252. // _transform does all the work.
  19253. // That we got here means that the readable side wants more data.
  19254. Transform.prototype._read = function(n) {
  19255. var ts = this._transformState;
  19256. if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
  19257. ts.transforming = true;
  19258. this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
  19259. } else {
  19260. // mark that we need a transform, so that any data that comes in
  19261. // will get processed, now that we've asked for it.
  19262. ts.needTransform = true;
  19263. }
  19264. };
  19265. function done(stream, er) {
  19266. if (er)
  19267. return stream.emit('error', er);
  19268. // if there's nothing in the write buffer, then that means
  19269. // that nothing more will ever be provided
  19270. var ws = stream._writableState;
  19271. var ts = stream._transformState;
  19272. if (ws.length)
  19273. throw new Error('calling transform done when ws.length != 0');
  19274. if (ts.transforming)
  19275. throw new Error('calling transform done when still transforming');
  19276. return stream.push(null);
  19277. }
  19278. /***/ },
  19279. /* 39 */
  19280. /***/ function(module, exports, __webpack_require__) {
  19281. // Copyright Joyent, Inc. and other Node contributors.
  19282. //
  19283. // Permission is hereby granted, free of charge, to any person obtaining a
  19284. // copy of this software and associated documentation files (the
  19285. // "Software"), to deal in the Software without restriction, including
  19286. // without limitation the rights to use, copy, modify, merge, publish,
  19287. // distribute, sublicense, and/or sell copies of the Software, and to permit
  19288. // persons to whom the Software is furnished to do so, subject to the
  19289. // following conditions:
  19290. //
  19291. // The above copyright notice and this permission notice shall be included
  19292. // in all copies or substantial portions of the Software.
  19293. //
  19294. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  19295. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  19296. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  19297. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  19298. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  19299. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  19300. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  19301. // a passthrough stream.
  19302. // basically just the most minimal sort of Transform stream.
  19303. // Every written chunk gets output as-is.
  19304. module.exports = PassThrough;
  19305. var Transform = __webpack_require__(38);
  19306. /*<replacement>*/
  19307. var util = __webpack_require__(32);
  19308. util.inherits = __webpack_require__(33);
  19309. /*</replacement>*/
  19310. util.inherits(PassThrough, Transform);
  19311. function PassThrough(options) {
  19312. if (!(this instanceof PassThrough))
  19313. return new PassThrough(options);
  19314. Transform.call(this, options);
  19315. }
  19316. PassThrough.prototype._transform = function(chunk, encoding, cb) {
  19317. cb(null, chunk);
  19318. };
  19319. /***/ },
  19320. /* 40 */
  19321. /***/ function(module, exports, __webpack_require__) {
  19322. module.exports = __webpack_require__(36)
  19323. /***/ },
  19324. /* 41 */
  19325. /***/ function(module, exports, __webpack_require__) {
  19326. module.exports = __webpack_require__(35)
  19327. /***/ },
  19328. /* 42 */
  19329. /***/ function(module, exports, __webpack_require__) {
  19330. module.exports = __webpack_require__(38)
  19331. /***/ },
  19332. /* 43 */
  19333. /***/ function(module, exports, __webpack_require__) {
  19334. module.exports = __webpack_require__(39)
  19335. /***/ },
  19336. /* 44 */
  19337. /***/ function(module, exports, __webpack_require__) {
  19338. /* WEBPACK VAR INJECTION */(function(Buffer, __dirname) {/* jslint node: true */
  19339. 'use strict';
  19340. // var b64 = require('./base64.js').base64DecToArr;
  19341. function VirtualFileSystem() {
  19342. this.fileSystem = {};
  19343. this.baseSystem = {};
  19344. }
  19345. VirtualFileSystem.prototype.readFileSync = function(filename) {
  19346. filename = fixFilename(filename);
  19347. var base64content = this.baseSystem[filename];
  19348. if (base64content) {
  19349. return new Buffer(base64content, 'base64');
  19350. }
  19351. return this.fileSystem[filename];
  19352. };
  19353. VirtualFileSystem.prototype.writeFileSync = function(filename, content) {
  19354. this.fileSystem[fixFilename(filename)] = content;
  19355. };
  19356. VirtualFileSystem.prototype.bindFS = function(data) {
  19357. this.baseSystem = data;
  19358. };
  19359. function fixFilename(filename) {
  19360. if (filename.indexOf(__dirname) === 0) {
  19361. filename = filename.substring(__dirname.length);
  19362. }
  19363. if (filename.indexOf('/') === 0) {
  19364. filename = filename.substring(1);
  19365. }
  19366. return filename;
  19367. }
  19368. module.exports = new VirtualFileSystem();
  19369. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer, "/"))
  19370. /***/ },
  19371. /* 45 */
  19372. /***/ function(module, exports, __webpack_require__) {
  19373. /* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.7.1
  19374. /*
  19375. PDFObject - converts JavaScript types into their corrisponding PDF types.
  19376. By Devon Govett
  19377. */
  19378. (function() {
  19379. var PDFObject, PDFReference;
  19380. PDFObject = (function() {
  19381. var escapable, escapableRe, pad, swapBytes;
  19382. function PDFObject() {}
  19383. pad = function(str, length) {
  19384. return (Array(length + 1).join('0') + str).slice(-length);
  19385. };
  19386. escapableRe = /[\n\r\t\b\f\(\)\\]/g;
  19387. escapable = {
  19388. '\n': '\\n',
  19389. '\r': '\\r',
  19390. '\t': '\\t',
  19391. '\b': '\\b',
  19392. '\f': '\\f',
  19393. '\\': '\\\\',
  19394. '(': '\\(',
  19395. ')': '\\)'
  19396. };
  19397. swapBytes = function(buff) {
  19398. var a, i, l, _i, _ref;
  19399. l = buff.length;
  19400. if (l & 0x01) {
  19401. throw new Error("Buffer length must be even");
  19402. } else {
  19403. for (i = _i = 0, _ref = l - 1; _i < _ref; i = _i += 2) {
  19404. a = buff[i];
  19405. buff[i] = buff[i + 1];
  19406. buff[i + 1] = a;
  19407. }
  19408. }
  19409. return buff;
  19410. };
  19411. PDFObject.convert = function(object) {
  19412. var e, i, isUnicode, items, key, out, string, val, _i, _ref;
  19413. if (typeof object === 'string') {
  19414. return '/' + object;
  19415. } else if (object instanceof String) {
  19416. string = object.replace(escapableRe, function(c) {
  19417. return escapable[c];
  19418. });
  19419. isUnicode = false;
  19420. for (i = _i = 0, _ref = string.length; _i < _ref; i = _i += 1) {
  19421. if (string.charCodeAt(i) > 0x7f) {
  19422. isUnicode = true;
  19423. break;
  19424. }
  19425. }
  19426. if (isUnicode) {
  19427. string = swapBytes(new Buffer('\ufeff' + string, 'utf16le')).toString('binary');
  19428. }
  19429. return '(' + string + ')';
  19430. } else if (Buffer.isBuffer(object)) {
  19431. return '<' + object.toString('hex') + '>';
  19432. } else if (object instanceof PDFReference) {
  19433. return object.toString();
  19434. } else if (object instanceof Date) {
  19435. return '(D:' + pad(object.getUTCFullYear(), 4) + pad(object.getUTCMonth(), 2) + pad(object.getUTCDate(), 2) + pad(object.getUTCHours(), 2) + pad(object.getUTCMinutes(), 2) + pad(object.getUTCSeconds(), 2) + 'Z)';
  19436. } else if (Array.isArray(object)) {
  19437. items = ((function() {
  19438. var _j, _len, _results;
  19439. _results = [];
  19440. for (_j = 0, _len = object.length; _j < _len; _j++) {
  19441. e = object[_j];
  19442. _results.push(PDFObject.convert(e));
  19443. }
  19444. return _results;
  19445. })()).join(' ');
  19446. return '[' + items + ']';
  19447. } else if ({}.toString.call(object) === '[object Object]') {
  19448. out = ['<<'];
  19449. for (key in object) {
  19450. val = object[key];
  19451. out.push('/' + key + ' ' + PDFObject.convert(val));
  19452. }
  19453. out.push('>>');
  19454. return out.join('\n');
  19455. } else {
  19456. return '' + object;
  19457. }
  19458. };
  19459. return PDFObject;
  19460. })();
  19461. module.exports = PDFObject;
  19462. PDFReference = __webpack_require__(46);
  19463. }).call(this);
  19464. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
  19465. /***/ },
  19466. /* 46 */
  19467. /***/ function(module, exports, __webpack_require__) {
  19468. /* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.7.1
  19469. /*
  19470. PDFReference - represents a reference to another object in the PDF object heirarchy
  19471. By Devon Govett
  19472. */
  19473. (function() {
  19474. var PDFObject, PDFReference, zlib,
  19475. __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
  19476. zlib = __webpack_require__(47);
  19477. PDFReference = (function() {
  19478. function PDFReference(document, id, data) {
  19479. this.document = document;
  19480. this.id = id;
  19481. this.data = data != null ? data : {};
  19482. this.finalize = __bind(this.finalize, this);
  19483. this.gen = 0;
  19484. this.deflate = null;
  19485. this.compress = this.document.compress && !this.data.Filter;
  19486. this.uncompressedLength = 0;
  19487. this.chunks = [];
  19488. }
  19489. PDFReference.prototype.initDeflate = function() {
  19490. this.data.Filter = 'FlateDecode';
  19491. this.deflate = zlib.createDeflate();
  19492. this.deflate.on('data', (function(_this) {
  19493. return function(chunk) {
  19494. _this.chunks.push(chunk);
  19495. return _this.data.Length += chunk.length;
  19496. };
  19497. })(this));
  19498. return this.deflate.on('end', this.finalize);
  19499. };
  19500. PDFReference.prototype.write = function(chunk) {
  19501. var _base;
  19502. if (!Buffer.isBuffer(chunk)) {
  19503. chunk = new Buffer(chunk + '\n', 'binary');
  19504. }
  19505. this.uncompressedLength += chunk.length;
  19506. if ((_base = this.data).Length == null) {
  19507. _base.Length = 0;
  19508. }
  19509. if (this.compress) {
  19510. if (!this.deflate) {
  19511. this.initDeflate();
  19512. }
  19513. return this.deflate.write(chunk);
  19514. } else {
  19515. this.chunks.push(chunk);
  19516. return this.data.Length += chunk.length;
  19517. }
  19518. };
  19519. PDFReference.prototype.end = function(chunk) {
  19520. if (typeof chunk === 'string' || Buffer.isBuffer(chunk)) {
  19521. this.write(chunk);
  19522. }
  19523. if (this.deflate) {
  19524. return this.deflate.end();
  19525. } else {
  19526. return this.finalize();
  19527. }
  19528. };
  19529. PDFReference.prototype.finalize = function() {
  19530. var chunk, _i, _len, _ref;
  19531. this.offset = this.document._offset;
  19532. this.document._write("" + this.id + " " + this.gen + " obj");
  19533. this.document._write(PDFObject.convert(this.data));
  19534. if (this.chunks.length) {
  19535. this.document._write('stream');
  19536. _ref = this.chunks;
  19537. for (_i = 0, _len = _ref.length; _i < _len; _i++) {
  19538. chunk = _ref[_i];
  19539. this.document._write(chunk);
  19540. }
  19541. this.chunks.length = 0;
  19542. this.document._write('\nendstream');
  19543. }
  19544. this.document._write('endobj');
  19545. return this.document._refEnd(this);
  19546. };
  19547. PDFReference.prototype.toString = function() {
  19548. return "" + this.id + " " + this.gen + " R";
  19549. };
  19550. return PDFReference;
  19551. })();
  19552. module.exports = PDFReference;
  19553. PDFObject = __webpack_require__(45);
  19554. }).call(this);
  19555. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
  19556. /***/ },
  19557. /* 47 */
  19558. /***/ function(module, exports, __webpack_require__) {
  19559. /* WEBPACK VAR INJECTION */(function(Buffer, process) {// Copyright Joyent, Inc. and other Node contributors.
  19560. //
  19561. // Permission is hereby granted, free of charge, to any person obtaining a
  19562. // copy of this software and associated documentation files (the
  19563. // "Software"), to deal in the Software without restriction, including
  19564. // without limitation the rights to use, copy, modify, merge, publish,
  19565. // distribute, sublicense, and/or sell copies of the Software, and to permit
  19566. // persons to whom the Software is furnished to do so, subject to the
  19567. // following conditions:
  19568. //
  19569. // The above copyright notice and this permission notice shall be included
  19570. // in all copies or substantial portions of the Software.
  19571. //
  19572. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  19573. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  19574. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  19575. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  19576. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  19577. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  19578. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  19579. var Transform = __webpack_require__(42);
  19580. var binding = __webpack_require__(48);
  19581. var util = __webpack_require__(60);
  19582. var assert = __webpack_require__(63).ok;
  19583. // zlib doesn't provide these, so kludge them in following the same
  19584. // const naming scheme zlib uses.
  19585. binding.Z_MIN_WINDOWBITS = 8;
  19586. binding.Z_MAX_WINDOWBITS = 15;
  19587. binding.Z_DEFAULT_WINDOWBITS = 15;
  19588. // fewer than 64 bytes per chunk is stupid.
  19589. // technically it could work with as few as 8, but even 64 bytes
  19590. // is absurdly low. Usually a MB or more is best.
  19591. binding.Z_MIN_CHUNK = 64;
  19592. binding.Z_MAX_CHUNK = Infinity;
  19593. binding.Z_DEFAULT_CHUNK = (16 * 1024);
  19594. binding.Z_MIN_MEMLEVEL = 1;
  19595. binding.Z_MAX_MEMLEVEL = 9;
  19596. binding.Z_DEFAULT_MEMLEVEL = 8;
  19597. binding.Z_MIN_LEVEL = -1;
  19598. binding.Z_MAX_LEVEL = 9;
  19599. binding.Z_DEFAULT_LEVEL = binding.Z_DEFAULT_COMPRESSION;
  19600. // expose all the zlib constants
  19601. Object.keys(binding).forEach(function(k) {
  19602. if (k.match(/^Z/)) exports[k] = binding[k];
  19603. });
  19604. // translation table for return codes.
  19605. exports.codes = {
  19606. Z_OK: binding.Z_OK,
  19607. Z_STREAM_END: binding.Z_STREAM_END,
  19608. Z_NEED_DICT: binding.Z_NEED_DICT,
  19609. Z_ERRNO: binding.Z_ERRNO,
  19610. Z_STREAM_ERROR: binding.Z_STREAM_ERROR,
  19611. Z_DATA_ERROR: binding.Z_DATA_ERROR,
  19612. Z_MEM_ERROR: binding.Z_MEM_ERROR,
  19613. Z_BUF_ERROR: binding.Z_BUF_ERROR,
  19614. Z_VERSION_ERROR: binding.Z_VERSION_ERROR
  19615. };
  19616. Object.keys(exports.codes).forEach(function(k) {
  19617. exports.codes[exports.codes[k]] = k;
  19618. });
  19619. exports.Deflate = Deflate;
  19620. exports.Inflate = Inflate;
  19621. exports.Gzip = Gzip;
  19622. exports.Gunzip = Gunzip;
  19623. exports.DeflateRaw = DeflateRaw;
  19624. exports.InflateRaw = InflateRaw;
  19625. exports.Unzip = Unzip;
  19626. exports.createDeflate = function(o) {
  19627. return new Deflate(o);
  19628. };
  19629. exports.createInflate = function(o) {
  19630. return new Inflate(o);
  19631. };
  19632. exports.createDeflateRaw = function(o) {
  19633. return new DeflateRaw(o);
  19634. };
  19635. exports.createInflateRaw = function(o) {
  19636. return new InflateRaw(o);
  19637. };
  19638. exports.createGzip = function(o) {
  19639. return new Gzip(o);
  19640. };
  19641. exports.createGunzip = function(o) {
  19642. return new Gunzip(o);
  19643. };
  19644. exports.createUnzip = function(o) {
  19645. return new Unzip(o);
  19646. };
  19647. // Convenience methods.
  19648. // compress/decompress a string or buffer in one step.
  19649. exports.deflate = function(buffer, opts, callback) {
  19650. if (typeof opts === 'function') {
  19651. callback = opts;
  19652. opts = {};
  19653. }
  19654. return zlibBuffer(new Deflate(opts), buffer, callback);
  19655. };
  19656. exports.deflateSync = function(buffer, opts) {
  19657. return zlibBufferSync(new Deflate(opts), buffer);
  19658. };
  19659. exports.gzip = function(buffer, opts, callback) {
  19660. if (typeof opts === 'function') {
  19661. callback = opts;
  19662. opts = {};
  19663. }
  19664. return zlibBuffer(new Gzip(opts), buffer, callback);
  19665. };
  19666. exports.gzipSync = function(buffer, opts) {
  19667. return zlibBufferSync(new Gzip(opts), buffer);
  19668. };
  19669. exports.deflateRaw = function(buffer, opts, callback) {
  19670. if (typeof opts === 'function') {
  19671. callback = opts;
  19672. opts = {};
  19673. }
  19674. return zlibBuffer(new DeflateRaw(opts), buffer, callback);
  19675. };
  19676. exports.deflateRawSync = function(buffer, opts) {
  19677. return zlibBufferSync(new DeflateRaw(opts), buffer);
  19678. };
  19679. exports.unzip = function(buffer, opts, callback) {
  19680. if (typeof opts === 'function') {
  19681. callback = opts;
  19682. opts = {};
  19683. }
  19684. return zlibBuffer(new Unzip(opts), buffer, callback);
  19685. };
  19686. exports.unzipSync = function(buffer, opts) {
  19687. return zlibBufferSync(new Unzip(opts), buffer);
  19688. };
  19689. exports.inflate = function(buffer, opts, callback) {
  19690. if (typeof opts === 'function') {
  19691. callback = opts;
  19692. opts = {};
  19693. }
  19694. return zlibBuffer(new Inflate(opts), buffer, callback);
  19695. };
  19696. exports.inflateSync = function(buffer, opts) {
  19697. return zlibBufferSync(new Inflate(opts), buffer);
  19698. };
  19699. exports.gunzip = function(buffer, opts, callback) {
  19700. if (typeof opts === 'function') {
  19701. callback = opts;
  19702. opts = {};
  19703. }
  19704. return zlibBuffer(new Gunzip(opts), buffer, callback);
  19705. };
  19706. exports.gunzipSync = function(buffer, opts) {
  19707. return zlibBufferSync(new Gunzip(opts), buffer);
  19708. };
  19709. exports.inflateRaw = function(buffer, opts, callback) {
  19710. if (typeof opts === 'function') {
  19711. callback = opts;
  19712. opts = {};
  19713. }
  19714. return zlibBuffer(new InflateRaw(opts), buffer, callback);
  19715. };
  19716. exports.inflateRawSync = function(buffer, opts) {
  19717. return zlibBufferSync(new InflateRaw(opts), buffer);
  19718. };
  19719. function zlibBuffer(engine, buffer, callback) {
  19720. var buffers = [];
  19721. var nread = 0;
  19722. engine.on('error', onError);
  19723. engine.on('end', onEnd);
  19724. engine.end(buffer);
  19725. flow();
  19726. function flow() {
  19727. var chunk;
  19728. while (null !== (chunk = engine.read())) {
  19729. buffers.push(chunk);
  19730. nread += chunk.length;
  19731. }
  19732. engine.once('readable', flow);
  19733. }
  19734. function onError(err) {
  19735. engine.removeListener('end', onEnd);
  19736. engine.removeListener('readable', flow);
  19737. callback(err);
  19738. }
  19739. function onEnd() {
  19740. var buf = Buffer.concat(buffers, nread);
  19741. buffers = [];
  19742. callback(null, buf);
  19743. engine.close();
  19744. }
  19745. }
  19746. function zlibBufferSync(engine, buffer) {
  19747. if (typeof buffer === 'string')
  19748. buffer = new Buffer(buffer);
  19749. if (!Buffer.isBuffer(buffer))
  19750. throw new TypeError('Not a string or buffer');
  19751. var flushFlag = binding.Z_FINISH;
  19752. return engine._processChunk(buffer, flushFlag);
  19753. }
  19754. // generic zlib
  19755. // minimal 2-byte header
  19756. function Deflate(opts) {
  19757. if (!(this instanceof Deflate)) return new Deflate(opts);
  19758. Zlib.call(this, opts, binding.DEFLATE);
  19759. }
  19760. function Inflate(opts) {
  19761. if (!(this instanceof Inflate)) return new Inflate(opts);
  19762. Zlib.call(this, opts, binding.INFLATE);
  19763. }
  19764. // gzip - bigger header, same deflate compression
  19765. function Gzip(opts) {
  19766. if (!(this instanceof Gzip)) return new Gzip(opts);
  19767. Zlib.call(this, opts, binding.GZIP);
  19768. }
  19769. function Gunzip(opts) {
  19770. if (!(this instanceof Gunzip)) return new Gunzip(opts);
  19771. Zlib.call(this, opts, binding.GUNZIP);
  19772. }
  19773. // raw - no header
  19774. function DeflateRaw(opts) {
  19775. if (!(this instanceof DeflateRaw)) return new DeflateRaw(opts);
  19776. Zlib.call(this, opts, binding.DEFLATERAW);
  19777. }
  19778. function InflateRaw(opts) {
  19779. if (!(this instanceof InflateRaw)) return new InflateRaw(opts);
  19780. Zlib.call(this, opts, binding.INFLATERAW);
  19781. }
  19782. // auto-detect header.
  19783. function Unzip(opts) {
  19784. if (!(this instanceof Unzip)) return new Unzip(opts);
  19785. Zlib.call(this, opts, binding.UNZIP);
  19786. }
  19787. // the Zlib class they all inherit from
  19788. // This thing manages the queue of requests, and returns
  19789. // true or false if there is anything in the queue when
  19790. // you call the .write() method.
  19791. function Zlib(opts, mode) {
  19792. this._opts = opts = opts || {};
  19793. this._chunkSize = opts.chunkSize || exports.Z_DEFAULT_CHUNK;
  19794. Transform.call(this, opts);
  19795. if (opts.flush) {
  19796. if (opts.flush !== binding.Z_NO_FLUSH &&
  19797. opts.flush !== binding.Z_PARTIAL_FLUSH &&
  19798. opts.flush !== binding.Z_SYNC_FLUSH &&
  19799. opts.flush !== binding.Z_FULL_FLUSH &&
  19800. opts.flush !== binding.Z_FINISH &&
  19801. opts.flush !== binding.Z_BLOCK) {
  19802. throw new Error('Invalid flush flag: ' + opts.flush);
  19803. }
  19804. }
  19805. this._flushFlag = opts.flush || binding.Z_NO_FLUSH;
  19806. if (opts.chunkSize) {
  19807. if (opts.chunkSize < exports.Z_MIN_CHUNK ||
  19808. opts.chunkSize > exports.Z_MAX_CHUNK) {
  19809. throw new Error('Invalid chunk size: ' + opts.chunkSize);
  19810. }
  19811. }
  19812. if (opts.windowBits) {
  19813. if (opts.windowBits < exports.Z_MIN_WINDOWBITS ||
  19814. opts.windowBits > exports.Z_MAX_WINDOWBITS) {
  19815. throw new Error('Invalid windowBits: ' + opts.windowBits);
  19816. }
  19817. }
  19818. if (opts.level) {
  19819. if (opts.level < exports.Z_MIN_LEVEL ||
  19820. opts.level > exports.Z_MAX_LEVEL) {
  19821. throw new Error('Invalid compression level: ' + opts.level);
  19822. }
  19823. }
  19824. if (opts.memLevel) {
  19825. if (opts.memLevel < exports.Z_MIN_MEMLEVEL ||
  19826. opts.memLevel > exports.Z_MAX_MEMLEVEL) {
  19827. throw new Error('Invalid memLevel: ' + opts.memLevel);
  19828. }
  19829. }
  19830. if (opts.strategy) {
  19831. if (opts.strategy != exports.Z_FILTERED &&
  19832. opts.strategy != exports.Z_HUFFMAN_ONLY &&
  19833. opts.strategy != exports.Z_RLE &&
  19834. opts.strategy != exports.Z_FIXED &&
  19835. opts.strategy != exports.Z_DEFAULT_STRATEGY) {
  19836. throw new Error('Invalid strategy: ' + opts.strategy);
  19837. }
  19838. }
  19839. if (opts.dictionary) {
  19840. if (!Buffer.isBuffer(opts.dictionary)) {
  19841. throw new Error('Invalid dictionary: it should be a Buffer instance');
  19842. }
  19843. }
  19844. this._binding = new binding.Zlib(mode);
  19845. var self = this;
  19846. this._hadError = false;
  19847. this._binding.onerror = function(message, errno) {
  19848. // there is no way to cleanly recover.
  19849. // continuing only obscures problems.
  19850. self._binding = null;
  19851. self._hadError = true;
  19852. var error = new Error(message);
  19853. error.errno = errno;
  19854. error.code = exports.codes[errno];
  19855. self.emit('error', error);
  19856. };
  19857. var level = exports.Z_DEFAULT_COMPRESSION;
  19858. if (typeof opts.level === 'number') level = opts.level;
  19859. var strategy = exports.Z_DEFAULT_STRATEGY;
  19860. if (typeof opts.strategy === 'number') strategy = opts.strategy;
  19861. this._binding.init(opts.windowBits || exports.Z_DEFAULT_WINDOWBITS,
  19862. level,
  19863. opts.memLevel || exports.Z_DEFAULT_MEMLEVEL,
  19864. strategy,
  19865. opts.dictionary);
  19866. this._buffer = new Buffer(this._chunkSize);
  19867. this._offset = 0;
  19868. this._closed = false;
  19869. this._level = level;
  19870. this._strategy = strategy;
  19871. this.once('end', this.close);
  19872. }
  19873. util.inherits(Zlib, Transform);
  19874. Zlib.prototype.params = function(level, strategy, callback) {
  19875. if (level < exports.Z_MIN_LEVEL ||
  19876. level > exports.Z_MAX_LEVEL) {
  19877. throw new RangeError('Invalid compression level: ' + level);
  19878. }
  19879. if (strategy != exports.Z_FILTERED &&
  19880. strategy != exports.Z_HUFFMAN_ONLY &&
  19881. strategy != exports.Z_RLE &&
  19882. strategy != exports.Z_FIXED &&
  19883. strategy != exports.Z_DEFAULT_STRATEGY) {
  19884. throw new TypeError('Invalid strategy: ' + strategy);
  19885. }
  19886. if (this._level !== level || this._strategy !== strategy) {
  19887. var self = this;
  19888. this.flush(binding.Z_SYNC_FLUSH, function() {
  19889. self._binding.params(level, strategy);
  19890. if (!self._hadError) {
  19891. self._level = level;
  19892. self._strategy = strategy;
  19893. if (callback) callback();
  19894. }
  19895. });
  19896. } else {
  19897. process.nextTick(callback);
  19898. }
  19899. };
  19900. Zlib.prototype.reset = function() {
  19901. return this._binding.reset();
  19902. };
  19903. // This is the _flush function called by the transform class,
  19904. // internally, when the last chunk has been written.
  19905. Zlib.prototype._flush = function(callback) {
  19906. this._transform(new Buffer(0), '', callback);
  19907. };
  19908. Zlib.prototype.flush = function(kind, callback) {
  19909. var ws = this._writableState;
  19910. if (typeof kind === 'function' || (kind === void 0 && !callback)) {
  19911. callback = kind;
  19912. kind = binding.Z_FULL_FLUSH;
  19913. }
  19914. if (ws.ended) {
  19915. if (callback)
  19916. process.nextTick(callback);
  19917. } else if (ws.ending) {
  19918. if (callback)
  19919. this.once('end', callback);
  19920. } else if (ws.needDrain) {
  19921. var self = this;
  19922. this.once('drain', function() {
  19923. self.flush(callback);
  19924. });
  19925. } else {
  19926. this._flushFlag = kind;
  19927. this.write(new Buffer(0), '', callback);
  19928. }
  19929. };
  19930. Zlib.prototype.close = function(callback) {
  19931. if (callback)
  19932. process.nextTick(callback);
  19933. if (this._closed)
  19934. return;
  19935. this._closed = true;
  19936. this._binding.close();
  19937. var self = this;
  19938. process.nextTick(function() {
  19939. self.emit('close');
  19940. });
  19941. };
  19942. Zlib.prototype._transform = function(chunk, encoding, cb) {
  19943. var flushFlag;
  19944. var ws = this._writableState;
  19945. var ending = ws.ending || ws.ended;
  19946. var last = ending && (!chunk || ws.length === chunk.length);
  19947. if (!chunk === null && !Buffer.isBuffer(chunk))
  19948. return cb(new Error('invalid input'));
  19949. // If it's the last chunk, or a final flush, we use the Z_FINISH flush flag.
  19950. // If it's explicitly flushing at some other time, then we use
  19951. // Z_FULL_FLUSH. Otherwise, use Z_NO_FLUSH for maximum compression
  19952. // goodness.
  19953. if (last)
  19954. flushFlag = binding.Z_FINISH;
  19955. else {
  19956. flushFlag = this._flushFlag;
  19957. // once we've flushed the last of the queue, stop flushing and
  19958. // go back to the normal behavior.
  19959. if (chunk.length >= ws.length) {
  19960. this._flushFlag = this._opts.flush || binding.Z_NO_FLUSH;
  19961. }
  19962. }
  19963. var self = this;
  19964. this._processChunk(chunk, flushFlag, cb);
  19965. };
  19966. Zlib.prototype._processChunk = function(chunk, flushFlag, cb) {
  19967. var availInBefore = chunk && chunk.length;
  19968. var availOutBefore = this._chunkSize - this._offset;
  19969. var inOff = 0;
  19970. var self = this;
  19971. var async = typeof cb === 'function';
  19972. if (!async) {
  19973. var buffers = [];
  19974. var nread = 0;
  19975. var error;
  19976. this.on('error', function(er) {
  19977. error = er;
  19978. });
  19979. do {
  19980. var res = this._binding.writeSync(flushFlag,
  19981. chunk, // in
  19982. inOff, // in_off
  19983. availInBefore, // in_len
  19984. this._buffer, // out
  19985. this._offset, //out_off
  19986. availOutBefore); // out_len
  19987. } while (!this._hadError && callback(res[0], res[1]));
  19988. if (this._hadError) {
  19989. throw error;
  19990. }
  19991. var buf = Buffer.concat(buffers, nread);
  19992. this.close();
  19993. return buf;
  19994. }
  19995. var req = this._binding.write(flushFlag,
  19996. chunk, // in
  19997. inOff, // in_off
  19998. availInBefore, // in_len
  19999. this._buffer, // out
  20000. this._offset, //out_off
  20001. availOutBefore); // out_len
  20002. req.buffer = chunk;
  20003. req.callback = callback;
  20004. function callback(availInAfter, availOutAfter) {
  20005. if (self._hadError)
  20006. return;
  20007. var have = availOutBefore - availOutAfter;
  20008. assert(have >= 0, 'have should not go down');
  20009. if (have > 0) {
  20010. var out = self._buffer.slice(self._offset, self._offset + have);
  20011. self._offset += have;
  20012. // serve some output to the consumer.
  20013. if (async) {
  20014. self.push(out);
  20015. } else {
  20016. buffers.push(out);
  20017. nread += out.length;
  20018. }
  20019. }
  20020. // exhausted the output buffer, or used all the input create a new one.
  20021. if (availOutAfter === 0 || self._offset >= self._chunkSize) {
  20022. availOutBefore = self._chunkSize;
  20023. self._offset = 0;
  20024. self._buffer = new Buffer(self._chunkSize);
  20025. }
  20026. if (availOutAfter === 0) {
  20027. // Not actually done. Need to reprocess.
  20028. // Also, update the availInBefore to the availInAfter value,
  20029. // so that if we have to hit it a third (fourth, etc.) time,
  20030. // it'll have the correct byte counts.
  20031. inOff += (availInBefore - availInAfter);
  20032. availInBefore = availInAfter;
  20033. if (!async)
  20034. return true;
  20035. var newReq = self._binding.write(flushFlag,
  20036. chunk,
  20037. inOff,
  20038. availInBefore,
  20039. self._buffer,
  20040. self._offset,
  20041. self._chunkSize);
  20042. newReq.callback = callback; // this same function
  20043. newReq.buffer = chunk;
  20044. return;
  20045. }
  20046. if (!async)
  20047. return false;
  20048. // finished with the chunk.
  20049. cb();
  20050. }
  20051. };
  20052. util.inherits(Deflate, Zlib);
  20053. util.inherits(Inflate, Zlib);
  20054. util.inherits(Gzip, Zlib);
  20055. util.inherits(Gunzip, Zlib);
  20056. util.inherits(DeflateRaw, Zlib);
  20057. util.inherits(InflateRaw, Zlib);
  20058. util.inherits(Unzip, Zlib);
  20059. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer, __webpack_require__(30)))
  20060. /***/ },
  20061. /* 48 */
  20062. /***/ function(module, exports, __webpack_require__) {
  20063. /* WEBPACK VAR INJECTION */(function(process, Buffer) {var msg = __webpack_require__(49);
  20064. var zstream = __webpack_require__(50);
  20065. var zlib_deflate = __webpack_require__(51);
  20066. var zlib_inflate = __webpack_require__(56);
  20067. var constants = __webpack_require__(59);
  20068. for (var key in constants) {
  20069. exports[key] = constants[key];
  20070. }
  20071. // zlib modes
  20072. exports.NONE = 0;
  20073. exports.DEFLATE = 1;
  20074. exports.INFLATE = 2;
  20075. exports.GZIP = 3;
  20076. exports.GUNZIP = 4;
  20077. exports.DEFLATERAW = 5;
  20078. exports.INFLATERAW = 6;
  20079. exports.UNZIP = 7;
  20080. /**
  20081. * Emulate Node's zlib C++ layer for use by the JS layer in index.js
  20082. */
  20083. function Zlib(mode) {
  20084. if (mode < exports.DEFLATE || mode > exports.UNZIP)
  20085. throw new TypeError("Bad argument");
  20086. this.mode = mode;
  20087. this.init_done = false;
  20088. this.write_in_progress = false;
  20089. this.pending_close = false;
  20090. this.windowBits = 0;
  20091. this.level = 0;
  20092. this.memLevel = 0;
  20093. this.strategy = 0;
  20094. this.dictionary = null;
  20095. }
  20096. Zlib.prototype.init = function(windowBits, level, memLevel, strategy, dictionary) {
  20097. this.windowBits = windowBits;
  20098. this.level = level;
  20099. this.memLevel = memLevel;
  20100. this.strategy = strategy;
  20101. // dictionary not supported.
  20102. if (this.mode === exports.GZIP || this.mode === exports.GUNZIP)
  20103. this.windowBits += 16;
  20104. if (this.mode === exports.UNZIP)
  20105. this.windowBits += 32;
  20106. if (this.mode === exports.DEFLATERAW || this.mode === exports.INFLATERAW)
  20107. this.windowBits = -this.windowBits;
  20108. this.strm = new zstream();
  20109. switch (this.mode) {
  20110. case exports.DEFLATE:
  20111. case exports.GZIP:
  20112. case exports.DEFLATERAW:
  20113. var status = zlib_deflate.deflateInit2(
  20114. this.strm,
  20115. this.level,
  20116. exports.Z_DEFLATED,
  20117. this.windowBits,
  20118. this.memLevel,
  20119. this.strategy
  20120. );
  20121. break;
  20122. case exports.INFLATE:
  20123. case exports.GUNZIP:
  20124. case exports.INFLATERAW:
  20125. case exports.UNZIP:
  20126. var status = zlib_inflate.inflateInit2(
  20127. this.strm,
  20128. this.windowBits
  20129. );
  20130. break;
  20131. default:
  20132. throw new Error("Unknown mode " + this.mode);
  20133. }
  20134. if (status !== exports.Z_OK) {
  20135. this._error(status);
  20136. return;
  20137. }
  20138. this.write_in_progress = false;
  20139. this.init_done = true;
  20140. };
  20141. Zlib.prototype.params = function() {
  20142. throw new Error("deflateParams Not supported");
  20143. };
  20144. Zlib.prototype._writeCheck = function() {
  20145. if (!this.init_done)
  20146. throw new Error("write before init");
  20147. if (this.mode === exports.NONE)
  20148. throw new Error("already finalized");
  20149. if (this.write_in_progress)
  20150. throw new Error("write already in progress");
  20151. if (this.pending_close)
  20152. throw new Error("close is pending");
  20153. };
  20154. Zlib.prototype.write = function(flush, input, in_off, in_len, out, out_off, out_len) {
  20155. this._writeCheck();
  20156. this.write_in_progress = true;
  20157. var self = this;
  20158. process.nextTick(function() {
  20159. self.write_in_progress = false;
  20160. var res = self._write(flush, input, in_off, in_len, out, out_off, out_len);
  20161. self.callback(res[0], res[1]);
  20162. if (self.pending_close)
  20163. self.close();
  20164. });
  20165. return this;
  20166. };
  20167. // set method for Node buffers, used by pako
  20168. function bufferSet(data, offset) {
  20169. for (var i = 0; i < data.length; i++) {
  20170. this[offset + i] = data[i];
  20171. }
  20172. }
  20173. Zlib.prototype.writeSync = function(flush, input, in_off, in_len, out, out_off, out_len) {
  20174. this._writeCheck();
  20175. return this._write(flush, input, in_off, in_len, out, out_off, out_len);
  20176. };
  20177. Zlib.prototype._write = function(flush, input, in_off, in_len, out, out_off, out_len) {
  20178. this.write_in_progress = true;
  20179. if (flush !== exports.Z_NO_FLUSH &&
  20180. flush !== exports.Z_PARTIAL_FLUSH &&
  20181. flush !== exports.Z_SYNC_FLUSH &&
  20182. flush !== exports.Z_FULL_FLUSH &&
  20183. flush !== exports.Z_FINISH &&
  20184. flush !== exports.Z_BLOCK) {
  20185. throw new Error("Invalid flush value");
  20186. }
  20187. if (input == null) {
  20188. input = new Buffer(0);
  20189. in_len = 0;
  20190. in_off = 0;
  20191. }
  20192. if (out._set)
  20193. out.set = out._set;
  20194. else
  20195. out.set = bufferSet;
  20196. var strm = this.strm;
  20197. strm.avail_in = in_len;
  20198. strm.input = input;
  20199. strm.next_in = in_off;
  20200. strm.avail_out = out_len;
  20201. strm.output = out;
  20202. strm.next_out = out_off;
  20203. switch (this.mode) {
  20204. case exports.DEFLATE:
  20205. case exports.GZIP:
  20206. case exports.DEFLATERAW:
  20207. var status = zlib_deflate.deflate(strm, flush);
  20208. break;
  20209. case exports.UNZIP:
  20210. case exports.INFLATE:
  20211. case exports.GUNZIP:
  20212. case exports.INFLATERAW:
  20213. var status = zlib_inflate.inflate(strm, flush);
  20214. break;
  20215. default:
  20216. throw new Error("Unknown mode " + this.mode);
  20217. }
  20218. if (status !== exports.Z_STREAM_END && status !== exports.Z_OK) {
  20219. this._error(status);
  20220. }
  20221. this.write_in_progress = false;
  20222. return [strm.avail_in, strm.avail_out];
  20223. };
  20224. Zlib.prototype.close = function() {
  20225. if (this.write_in_progress) {
  20226. this.pending_close = true;
  20227. return;
  20228. }
  20229. this.pending_close = false;
  20230. if (this.mode === exports.DEFLATE || this.mode === exports.GZIP || this.mode === exports.DEFLATERAW) {
  20231. zlib_deflate.deflateEnd(this.strm);
  20232. } else {
  20233. zlib_inflate.inflateEnd(this.strm);
  20234. }
  20235. this.mode = exports.NONE;
  20236. };
  20237. Zlib.prototype.reset = function() {
  20238. switch (this.mode) {
  20239. case exports.DEFLATE:
  20240. case exports.DEFLATERAW:
  20241. var status = zlib_deflate.deflateReset(this.strm);
  20242. break;
  20243. case exports.INFLATE:
  20244. case exports.INFLATERAW:
  20245. var status = zlib_inflate.inflateReset(this.strm);
  20246. break;
  20247. }
  20248. if (status !== exports.Z_OK) {
  20249. this._error(status);
  20250. }
  20251. };
  20252. Zlib.prototype._error = function(status) {
  20253. this.onerror(msg[status] + ': ' + this.strm.msg, status);
  20254. this.write_in_progress = false;
  20255. if (this.pending_close)
  20256. this.close();
  20257. };
  20258. exports.Zlib = Zlib;
  20259. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(30), __webpack_require__(2).Buffer))
  20260. /***/ },
  20261. /* 49 */
  20262. /***/ function(module, exports) {
  20263. 'use strict';
  20264. module.exports = {
  20265. '2': 'need dictionary', /* Z_NEED_DICT 2 */
  20266. '1': 'stream end', /* Z_STREAM_END 1 */
  20267. '0': '', /* Z_OK 0 */
  20268. '-1': 'file error', /* Z_ERRNO (-1) */
  20269. '-2': 'stream error', /* Z_STREAM_ERROR (-2) */
  20270. '-3': 'data error', /* Z_DATA_ERROR (-3) */
  20271. '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */
  20272. '-5': 'buffer error', /* Z_BUF_ERROR (-5) */
  20273. '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */
  20274. };
  20275. /***/ },
  20276. /* 50 */
  20277. /***/ function(module, exports) {
  20278. 'use strict';
  20279. function ZStream() {
  20280. /* next input byte */
  20281. this.input = null; // JS specific, because we have no pointers
  20282. this.next_in = 0;
  20283. /* number of bytes available at input */
  20284. this.avail_in = 0;
  20285. /* total number of input bytes read so far */
  20286. this.total_in = 0;
  20287. /* next output byte should be put there */
  20288. this.output = null; // JS specific, because we have no pointers
  20289. this.next_out = 0;
  20290. /* remaining free space at output */
  20291. this.avail_out = 0;
  20292. /* total number of bytes output so far */
  20293. this.total_out = 0;
  20294. /* last error message, NULL if no error */
  20295. this.msg = ''/*Z_NULL*/;
  20296. /* not visible by applications */
  20297. this.state = null;
  20298. /* best guess about the data type: binary or text */
  20299. this.data_type = 2/*Z_UNKNOWN*/;
  20300. /* adler32 value of the uncompressed data */
  20301. this.adler = 0;
  20302. }
  20303. module.exports = ZStream;
  20304. /***/ },
  20305. /* 51 */
  20306. /***/ function(module, exports, __webpack_require__) {
  20307. 'use strict';
  20308. var utils = __webpack_require__(52);
  20309. var trees = __webpack_require__(53);
  20310. var adler32 = __webpack_require__(54);
  20311. var crc32 = __webpack_require__(55);
  20312. var msg = __webpack_require__(49);
  20313. /* Public constants ==========================================================*/
  20314. /* ===========================================================================*/
  20315. /* Allowed flush values; see deflate() and inflate() below for details */
  20316. var Z_NO_FLUSH = 0;
  20317. var Z_PARTIAL_FLUSH = 1;
  20318. //var Z_SYNC_FLUSH = 2;
  20319. var Z_FULL_FLUSH = 3;
  20320. var Z_FINISH = 4;
  20321. var Z_BLOCK = 5;
  20322. //var Z_TREES = 6;
  20323. /* Return codes for the compression/decompression functions. Negative values
  20324. * are errors, positive values are used for special but normal events.
  20325. */
  20326. var Z_OK = 0;
  20327. var Z_STREAM_END = 1;
  20328. //var Z_NEED_DICT = 2;
  20329. //var Z_ERRNO = -1;
  20330. var Z_STREAM_ERROR = -2;
  20331. var Z_DATA_ERROR = -3;
  20332. //var Z_MEM_ERROR = -4;
  20333. var Z_BUF_ERROR = -5;
  20334. //var Z_VERSION_ERROR = -6;
  20335. /* compression levels */
  20336. //var Z_NO_COMPRESSION = 0;
  20337. //var Z_BEST_SPEED = 1;
  20338. //var Z_BEST_COMPRESSION = 9;
  20339. var Z_DEFAULT_COMPRESSION = -1;
  20340. var Z_FILTERED = 1;
  20341. var Z_HUFFMAN_ONLY = 2;
  20342. var Z_RLE = 3;
  20343. var Z_FIXED = 4;
  20344. var Z_DEFAULT_STRATEGY = 0;
  20345. /* Possible values of the data_type field (though see inflate()) */
  20346. //var Z_BINARY = 0;
  20347. //var Z_TEXT = 1;
  20348. //var Z_ASCII = 1; // = Z_TEXT
  20349. var Z_UNKNOWN = 2;
  20350. /* The deflate compression method */
  20351. var Z_DEFLATED = 8;
  20352. /*============================================================================*/
  20353. var MAX_MEM_LEVEL = 9;
  20354. /* Maximum value for memLevel in deflateInit2 */
  20355. var MAX_WBITS = 15;
  20356. /* 32K LZ77 window */
  20357. var DEF_MEM_LEVEL = 8;
  20358. var LENGTH_CODES = 29;
  20359. /* number of length codes, not counting the special END_BLOCK code */
  20360. var LITERALS = 256;
  20361. /* number of literal bytes 0..255 */
  20362. var L_CODES = LITERALS + 1 + LENGTH_CODES;
  20363. /* number of Literal or Length codes, including the END_BLOCK code */
  20364. var D_CODES = 30;
  20365. /* number of distance codes */
  20366. var BL_CODES = 19;
  20367. /* number of codes used to transfer the bit lengths */
  20368. var HEAP_SIZE = 2*L_CODES + 1;
  20369. /* maximum heap size */
  20370. var MAX_BITS = 15;
  20371. /* All codes must not exceed MAX_BITS bits */
  20372. var MIN_MATCH = 3;
  20373. var MAX_MATCH = 258;
  20374. var MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);
  20375. var PRESET_DICT = 0x20;
  20376. var INIT_STATE = 42;
  20377. var EXTRA_STATE = 69;
  20378. var NAME_STATE = 73;
  20379. var COMMENT_STATE = 91;
  20380. var HCRC_STATE = 103;
  20381. var BUSY_STATE = 113;
  20382. var FINISH_STATE = 666;
  20383. var BS_NEED_MORE = 1; /* block not completed, need more input or more output */
  20384. var BS_BLOCK_DONE = 2; /* block flush performed */
  20385. var BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */
  20386. var BS_FINISH_DONE = 4; /* finish done, accept no more input or output */
  20387. var OS_CODE = 0x03; // Unix :) . Don't detect, use this default.
  20388. function err(strm, errorCode) {
  20389. strm.msg = msg[errorCode];
  20390. return errorCode;
  20391. }
  20392. function rank(f) {
  20393. return ((f) << 1) - ((f) > 4 ? 9 : 0);
  20394. }
  20395. function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }
  20396. /* =========================================================================
  20397. * Flush as much pending output as possible. All deflate() output goes
  20398. * through this function so some applications may wish to modify it
  20399. * to avoid allocating a large strm->output buffer and copying into it.
  20400. * (See also read_buf()).
  20401. */
  20402. function flush_pending(strm) {
  20403. var s = strm.state;
  20404. //_tr_flush_bits(s);
  20405. var len = s.pending;
  20406. if (len > strm.avail_out) {
  20407. len = strm.avail_out;
  20408. }
  20409. if (len === 0) { return; }
  20410. utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);
  20411. strm.next_out += len;
  20412. s.pending_out += len;
  20413. strm.total_out += len;
  20414. strm.avail_out -= len;
  20415. s.pending -= len;
  20416. if (s.pending === 0) {
  20417. s.pending_out = 0;
  20418. }
  20419. }
  20420. function flush_block_only (s, last) {
  20421. trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);
  20422. s.block_start = s.strstart;
  20423. flush_pending(s.strm);
  20424. }
  20425. function put_byte(s, b) {
  20426. s.pending_buf[s.pending++] = b;
  20427. }
  20428. /* =========================================================================
  20429. * Put a short in the pending buffer. The 16-bit value is put in MSB order.
  20430. * IN assertion: the stream state is correct and there is enough room in
  20431. * pending_buf.
  20432. */
  20433. function putShortMSB(s, b) {
  20434. // put_byte(s, (Byte)(b >> 8));
  20435. // put_byte(s, (Byte)(b & 0xff));
  20436. s.pending_buf[s.pending++] = (b >>> 8) & 0xff;
  20437. s.pending_buf[s.pending++] = b & 0xff;
  20438. }
  20439. /* ===========================================================================
  20440. * Read a new buffer from the current input stream, update the adler32
  20441. * and total number of bytes read. All deflate() input goes through
  20442. * this function so some applications may wish to modify it to avoid
  20443. * allocating a large strm->input buffer and copying from it.
  20444. * (See also flush_pending()).
  20445. */
  20446. function read_buf(strm, buf, start, size) {
  20447. var len = strm.avail_in;
  20448. if (len > size) { len = size; }
  20449. if (len === 0) { return 0; }
  20450. strm.avail_in -= len;
  20451. utils.arraySet(buf, strm.input, strm.next_in, len, start);
  20452. if (strm.state.wrap === 1) {
  20453. strm.adler = adler32(strm.adler, buf, len, start);
  20454. }
  20455. else if (strm.state.wrap === 2) {
  20456. strm.adler = crc32(strm.adler, buf, len, start);
  20457. }
  20458. strm.next_in += len;
  20459. strm.total_in += len;
  20460. return len;
  20461. }
  20462. /* ===========================================================================
  20463. * Set match_start to the longest match starting at the given string and
  20464. * return its length. Matches shorter or equal to prev_length are discarded,
  20465. * in which case the result is equal to prev_length and match_start is
  20466. * garbage.
  20467. * IN assertions: cur_match is the head of the hash chain for the current
  20468. * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
  20469. * OUT assertion: the match length is not greater than s->lookahead.
  20470. */
  20471. function longest_match(s, cur_match) {
  20472. var chain_length = s.max_chain_length; /* max hash chain length */
  20473. var scan = s.strstart; /* current string */
  20474. var match; /* matched string */
  20475. var len; /* length of current match */
  20476. var best_len = s.prev_length; /* best match length so far */
  20477. var nice_match = s.nice_match; /* stop if match long enough */
  20478. var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?
  20479. s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;
  20480. var _win = s.window; // shortcut
  20481. var wmask = s.w_mask;
  20482. var prev = s.prev;
  20483. /* Stop when cur_match becomes <= limit. To simplify the code,
  20484. * we prevent matches with the string of window index 0.
  20485. */
  20486. var strend = s.strstart + MAX_MATCH;
  20487. var scan_end1 = _win[scan + best_len - 1];
  20488. var scan_end = _win[scan + best_len];
  20489. /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
  20490. * It is easy to get rid of this optimization if necessary.
  20491. */
  20492. // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
  20493. /* Do not waste too much time if we already have a good match: */
  20494. if (s.prev_length >= s.good_match) {
  20495. chain_length >>= 2;
  20496. }
  20497. /* Do not look for matches beyond the end of the input. This is necessary
  20498. * to make deflate deterministic.
  20499. */
  20500. if (nice_match > s.lookahead) { nice_match = s.lookahead; }
  20501. // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
  20502. do {
  20503. // Assert(cur_match < s->strstart, "no future");
  20504. match = cur_match;
  20505. /* Skip to next match if the match length cannot increase
  20506. * or if the match length is less than 2. Note that the checks below
  20507. * for insufficient lookahead only occur occasionally for performance
  20508. * reasons. Therefore uninitialized memory will be accessed, and
  20509. * conditional jumps will be made that depend on those values.
  20510. * However the length of the match is limited to the lookahead, so
  20511. * the output of deflate is not affected by the uninitialized values.
  20512. */
  20513. if (_win[match + best_len] !== scan_end ||
  20514. _win[match + best_len - 1] !== scan_end1 ||
  20515. _win[match] !== _win[scan] ||
  20516. _win[++match] !== _win[scan + 1]) {
  20517. continue;
  20518. }
  20519. /* The check at best_len-1 can be removed because it will be made
  20520. * again later. (This heuristic is not always a win.)
  20521. * It is not necessary to compare scan[2] and match[2] since they
  20522. * are always equal when the other bytes match, given that
  20523. * the hash keys are equal and that HASH_BITS >= 8.
  20524. */
  20525. scan += 2;
  20526. match++;
  20527. // Assert(*scan == *match, "match[2]?");
  20528. /* We check for insufficient lookahead only every 8th comparison;
  20529. * the 256th check will be made at strstart+258.
  20530. */
  20531. do {
  20532. /*jshint noempty:false*/
  20533. } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
  20534. _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
  20535. _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
  20536. _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
  20537. scan < strend);
  20538. // Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
  20539. len = MAX_MATCH - (strend - scan);
  20540. scan = strend - MAX_MATCH;
  20541. if (len > best_len) {
  20542. s.match_start = cur_match;
  20543. best_len = len;
  20544. if (len >= nice_match) {
  20545. break;
  20546. }
  20547. scan_end1 = _win[scan + best_len - 1];
  20548. scan_end = _win[scan + best_len];
  20549. }
  20550. } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);
  20551. if (best_len <= s.lookahead) {
  20552. return best_len;
  20553. }
  20554. return s.lookahead;
  20555. }
  20556. /* ===========================================================================
  20557. * Fill the window when the lookahead becomes insufficient.
  20558. * Updates strstart and lookahead.
  20559. *
  20560. * IN assertion: lookahead < MIN_LOOKAHEAD
  20561. * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
  20562. * At least one byte has been read, or avail_in == 0; reads are
  20563. * performed for at least two bytes (required for the zip translate_eol
  20564. * option -- not supported here).
  20565. */
  20566. function fill_window(s) {
  20567. var _w_size = s.w_size;
  20568. var p, n, m, more, str;
  20569. //Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead");
  20570. do {
  20571. more = s.window_size - s.lookahead - s.strstart;
  20572. // JS ints have 32 bit, block below not needed
  20573. /* Deal with !@#$% 64K limit: */
  20574. //if (sizeof(int) <= 2) {
  20575. // if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
  20576. // more = wsize;
  20577. //
  20578. // } else if (more == (unsigned)(-1)) {
  20579. // /* Very unlikely, but possible on 16 bit machine if
  20580. // * strstart == 0 && lookahead == 1 (input done a byte at time)
  20581. // */
  20582. // more--;
  20583. // }
  20584. //}
  20585. /* If the window is almost full and there is insufficient lookahead,
  20586. * move the upper half to the lower one to make room in the upper half.
  20587. */
  20588. if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {
  20589. utils.arraySet(s.window, s.window, _w_size, _w_size, 0);
  20590. s.match_start -= _w_size;
  20591. s.strstart -= _w_size;
  20592. /* we now have strstart >= MAX_DIST */
  20593. s.block_start -= _w_size;
  20594. /* Slide the hash table (could be avoided with 32 bit values
  20595. at the expense of memory usage). We slide even when level == 0
  20596. to keep the hash table consistent if we switch back to level > 0
  20597. later. (Using level 0 permanently is not an optimal usage of
  20598. zlib, so we don't care about this pathological case.)
  20599. */
  20600. n = s.hash_size;
  20601. p = n;
  20602. do {
  20603. m = s.head[--p];
  20604. s.head[p] = (m >= _w_size ? m - _w_size : 0);
  20605. } while (--n);
  20606. n = _w_size;
  20607. p = n;
  20608. do {
  20609. m = s.prev[--p];
  20610. s.prev[p] = (m >= _w_size ? m - _w_size : 0);
  20611. /* If n is not on any hash chain, prev[n] is garbage but
  20612. * its value will never be used.
  20613. */
  20614. } while (--n);
  20615. more += _w_size;
  20616. }
  20617. if (s.strm.avail_in === 0) {
  20618. break;
  20619. }
  20620. /* If there was no sliding:
  20621. * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
  20622. * more == window_size - lookahead - strstart
  20623. * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
  20624. * => more >= window_size - 2*WSIZE + 2
  20625. * In the BIG_MEM or MMAP case (not yet supported),
  20626. * window_size == input_size + MIN_LOOKAHEAD &&
  20627. * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
  20628. * Otherwise, window_size == 2*WSIZE so more >= 2.
  20629. * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
  20630. */
  20631. //Assert(more >= 2, "more < 2");
  20632. n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);
  20633. s.lookahead += n;
  20634. /* Initialize the hash value now that we have some input: */
  20635. if (s.lookahead + s.insert >= MIN_MATCH) {
  20636. str = s.strstart - s.insert;
  20637. s.ins_h = s.window[str];
  20638. /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */
  20639. s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;
  20640. //#if MIN_MATCH != 3
  20641. // Call update_hash() MIN_MATCH-3 more times
  20642. //#endif
  20643. while (s.insert) {
  20644. /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */
  20645. s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH-1]) & s.hash_mask;
  20646. s.prev[str & s.w_mask] = s.head[s.ins_h];
  20647. s.head[s.ins_h] = str;
  20648. str++;
  20649. s.insert--;
  20650. if (s.lookahead + s.insert < MIN_MATCH) {
  20651. break;
  20652. }
  20653. }
  20654. }
  20655. /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
  20656. * but this is not important since only literal bytes will be emitted.
  20657. */
  20658. } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);
  20659. /* If the WIN_INIT bytes after the end of the current data have never been
  20660. * written, then zero those bytes in order to avoid memory check reports of
  20661. * the use of uninitialized (or uninitialised as Julian writes) bytes by
  20662. * the longest match routines. Update the high water mark for the next
  20663. * time through here. WIN_INIT is set to MAX_MATCH since the longest match
  20664. * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.
  20665. */
  20666. // if (s.high_water < s.window_size) {
  20667. // var curr = s.strstart + s.lookahead;
  20668. // var init = 0;
  20669. //
  20670. // if (s.high_water < curr) {
  20671. // /* Previous high water mark below current data -- zero WIN_INIT
  20672. // * bytes or up to end of window, whichever is less.
  20673. // */
  20674. // init = s.window_size - curr;
  20675. // if (init > WIN_INIT)
  20676. // init = WIN_INIT;
  20677. // zmemzero(s->window + curr, (unsigned)init);
  20678. // s->high_water = curr + init;
  20679. // }
  20680. // else if (s->high_water < (ulg)curr + WIN_INIT) {
  20681. // /* High water mark at or above current data, but below current data
  20682. // * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up
  20683. // * to end of window, whichever is less.
  20684. // */
  20685. // init = (ulg)curr + WIN_INIT - s->high_water;
  20686. // if (init > s->window_size - s->high_water)
  20687. // init = s->window_size - s->high_water;
  20688. // zmemzero(s->window + s->high_water, (unsigned)init);
  20689. // s->high_water += init;
  20690. // }
  20691. // }
  20692. //
  20693. // Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,
  20694. // "not enough room for search");
  20695. }
  20696. /* ===========================================================================
  20697. * Copy without compression as much as possible from the input stream, return
  20698. * the current block state.
  20699. * This function does not insert new strings in the dictionary since
  20700. * uncompressible data is probably not useful. This function is used
  20701. * only for the level=0 compression option.
  20702. * NOTE: this function should be optimized to avoid extra copying from
  20703. * window to pending_buf.
  20704. */
  20705. function deflate_stored(s, flush) {
  20706. /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
  20707. * to pending_buf_size, and each stored block has a 5 byte header:
  20708. */
  20709. var max_block_size = 0xffff;
  20710. if (max_block_size > s.pending_buf_size - 5) {
  20711. max_block_size = s.pending_buf_size - 5;
  20712. }
  20713. /* Copy as much as possible from input to output: */
  20714. for (;;) {
  20715. /* Fill the window as much as possible: */
  20716. if (s.lookahead <= 1) {
  20717. //Assert(s->strstart < s->w_size+MAX_DIST(s) ||
  20718. // s->block_start >= (long)s->w_size, "slide too late");
  20719. // if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||
  20720. // s.block_start >= s.w_size)) {
  20721. // throw new Error("slide too late");
  20722. // }
  20723. fill_window(s);
  20724. if (s.lookahead === 0 && flush === Z_NO_FLUSH) {
  20725. return BS_NEED_MORE;
  20726. }
  20727. if (s.lookahead === 0) {
  20728. break;
  20729. }
  20730. /* flush the current block */
  20731. }
  20732. //Assert(s->block_start >= 0L, "block gone");
  20733. // if (s.block_start < 0) throw new Error("block gone");
  20734. s.strstart += s.lookahead;
  20735. s.lookahead = 0;
  20736. /* Emit a stored block if pending_buf will be full: */
  20737. var max_start = s.block_start + max_block_size;
  20738. if (s.strstart === 0 || s.strstart >= max_start) {
  20739. /* strstart == 0 is possible when wraparound on 16-bit machine */
  20740. s.lookahead = s.strstart - max_start;
  20741. s.strstart = max_start;
  20742. /*** FLUSH_BLOCK(s, 0); ***/
  20743. flush_block_only(s, false);
  20744. if (s.strm.avail_out === 0) {
  20745. return BS_NEED_MORE;
  20746. }
  20747. /***/
  20748. }
  20749. /* Flush if we may have to slide, otherwise block_start may become
  20750. * negative and the data will be gone:
  20751. */
  20752. if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {
  20753. /*** FLUSH_BLOCK(s, 0); ***/
  20754. flush_block_only(s, false);
  20755. if (s.strm.avail_out === 0) {
  20756. return BS_NEED_MORE;
  20757. }
  20758. /***/
  20759. }
  20760. }
  20761. s.insert = 0;
  20762. if (flush === Z_FINISH) {
  20763. /*** FLUSH_BLOCK(s, 1); ***/
  20764. flush_block_only(s, true);
  20765. if (s.strm.avail_out === 0) {
  20766. return BS_FINISH_STARTED;
  20767. }
  20768. /***/
  20769. return BS_FINISH_DONE;
  20770. }
  20771. if (s.strstart > s.block_start) {
  20772. /*** FLUSH_BLOCK(s, 0); ***/
  20773. flush_block_only(s, false);
  20774. if (s.strm.avail_out === 0) {
  20775. return BS_NEED_MORE;
  20776. }
  20777. /***/
  20778. }
  20779. return BS_NEED_MORE;
  20780. }
  20781. /* ===========================================================================
  20782. * Compress as much as possible from the input stream, return the current
  20783. * block state.
  20784. * This function does not perform lazy evaluation of matches and inserts
  20785. * new strings in the dictionary only for unmatched strings or for short
  20786. * matches. It is used only for the fast compression options.
  20787. */
  20788. function deflate_fast(s, flush) {
  20789. var hash_head; /* head of the hash chain */
  20790. var bflush; /* set if current block must be flushed */
  20791. for (;;) {
  20792. /* Make sure that we always have enough lookahead, except
  20793. * at the end of the input file. We need MAX_MATCH bytes
  20794. * for the next match, plus MIN_MATCH bytes to insert the
  20795. * string following the next match.
  20796. */
  20797. if (s.lookahead < MIN_LOOKAHEAD) {
  20798. fill_window(s);
  20799. if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {
  20800. return BS_NEED_MORE;
  20801. }
  20802. if (s.lookahead === 0) {
  20803. break; /* flush the current block */
  20804. }
  20805. }
  20806. /* Insert the string window[strstart .. strstart+2] in the
  20807. * dictionary, and set hash_head to the head of the hash chain:
  20808. */
  20809. hash_head = 0/*NIL*/;
  20810. if (s.lookahead >= MIN_MATCH) {
  20811. /*** INSERT_STRING(s, s.strstart, hash_head); ***/
  20812. s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
  20813. hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
  20814. s.head[s.ins_h] = s.strstart;
  20815. /***/
  20816. }
  20817. /* Find the longest match, discarding those <= prev_length.
  20818. * At this point we have always match_length < MIN_MATCH
  20819. */
  20820. if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {
  20821. /* To simplify the code, we prevent matches with the string
  20822. * of window index 0 (in particular we have to avoid a match
  20823. * of the string with itself at the start of the input file).
  20824. */
  20825. s.match_length = longest_match(s, hash_head);
  20826. /* longest_match() sets match_start */
  20827. }
  20828. if (s.match_length >= MIN_MATCH) {
  20829. // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only
  20830. /*** _tr_tally_dist(s, s.strstart - s.match_start,
  20831. s.match_length - MIN_MATCH, bflush); ***/
  20832. bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);
  20833. s.lookahead -= s.match_length;
  20834. /* Insert new strings in the hash table only if the match length
  20835. * is not too large. This saves time but degrades compression.
  20836. */
  20837. if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {
  20838. s.match_length--; /* string at strstart already in table */
  20839. do {
  20840. s.strstart++;
  20841. /*** INSERT_STRING(s, s.strstart, hash_head); ***/
  20842. s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
  20843. hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
  20844. s.head[s.ins_h] = s.strstart;
  20845. /***/
  20846. /* strstart never exceeds WSIZE-MAX_MATCH, so there are
  20847. * always MIN_MATCH bytes ahead.
  20848. */
  20849. } while (--s.match_length !== 0);
  20850. s.strstart++;
  20851. } else
  20852. {
  20853. s.strstart += s.match_length;
  20854. s.match_length = 0;
  20855. s.ins_h = s.window[s.strstart];
  20856. /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */
  20857. s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;
  20858. //#if MIN_MATCH != 3
  20859. // Call UPDATE_HASH() MIN_MATCH-3 more times
  20860. //#endif
  20861. /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
  20862. * matter since it will be recomputed at next deflate call.
  20863. */
  20864. }
  20865. } else {
  20866. /* No match, output a literal byte */
  20867. //Tracevv((stderr,"%c", s.window[s.strstart]));
  20868. /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
  20869. bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
  20870. s.lookahead--;
  20871. s.strstart++;
  20872. }
  20873. if (bflush) {
  20874. /*** FLUSH_BLOCK(s, 0); ***/
  20875. flush_block_only(s, false);
  20876. if (s.strm.avail_out === 0) {
  20877. return BS_NEED_MORE;
  20878. }
  20879. /***/
  20880. }
  20881. }
  20882. s.insert = ((s.strstart < (MIN_MATCH-1)) ? s.strstart : MIN_MATCH-1);
  20883. if (flush === Z_FINISH) {
  20884. /*** FLUSH_BLOCK(s, 1); ***/
  20885. flush_block_only(s, true);
  20886. if (s.strm.avail_out === 0) {
  20887. return BS_FINISH_STARTED;
  20888. }
  20889. /***/
  20890. return BS_FINISH_DONE;
  20891. }
  20892. if (s.last_lit) {
  20893. /*** FLUSH_BLOCK(s, 0); ***/
  20894. flush_block_only(s, false);
  20895. if (s.strm.avail_out === 0) {
  20896. return BS_NEED_MORE;
  20897. }
  20898. /***/
  20899. }
  20900. return BS_BLOCK_DONE;
  20901. }
  20902. /* ===========================================================================
  20903. * Same as above, but achieves better compression. We use a lazy
  20904. * evaluation for matches: a match is finally adopted only if there is
  20905. * no better match at the next window position.
  20906. */
  20907. function deflate_slow(s, flush) {
  20908. var hash_head; /* head of hash chain */
  20909. var bflush; /* set if current block must be flushed */
  20910. var max_insert;
  20911. /* Process the input block. */
  20912. for (;;) {
  20913. /* Make sure that we always have enough lookahead, except
  20914. * at the end of the input file. We need MAX_MATCH bytes
  20915. * for the next match, plus MIN_MATCH bytes to insert the
  20916. * string following the next match.
  20917. */
  20918. if (s.lookahead < MIN_LOOKAHEAD) {
  20919. fill_window(s);
  20920. if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {
  20921. return BS_NEED_MORE;
  20922. }
  20923. if (s.lookahead === 0) { break; } /* flush the current block */
  20924. }
  20925. /* Insert the string window[strstart .. strstart+2] in the
  20926. * dictionary, and set hash_head to the head of the hash chain:
  20927. */
  20928. hash_head = 0/*NIL*/;
  20929. if (s.lookahead >= MIN_MATCH) {
  20930. /*** INSERT_STRING(s, s.strstart, hash_head); ***/
  20931. s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
  20932. hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
  20933. s.head[s.ins_h] = s.strstart;
  20934. /***/
  20935. }
  20936. /* Find the longest match, discarding those <= prev_length.
  20937. */
  20938. s.prev_length = s.match_length;
  20939. s.prev_match = s.match_start;
  20940. s.match_length = MIN_MATCH-1;
  20941. if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&
  20942. s.strstart - hash_head <= (s.w_size-MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {
  20943. /* To simplify the code, we prevent matches with the string
  20944. * of window index 0 (in particular we have to avoid a match
  20945. * of the string with itself at the start of the input file).
  20946. */
  20947. s.match_length = longest_match(s, hash_head);
  20948. /* longest_match() sets match_start */
  20949. if (s.match_length <= 5 &&
  20950. (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {
  20951. /* If prev_match is also MIN_MATCH, match_start is garbage
  20952. * but we will ignore the current match anyway.
  20953. */
  20954. s.match_length = MIN_MATCH-1;
  20955. }
  20956. }
  20957. /* If there was a match at the previous step and the current
  20958. * match is not better, output the previous match:
  20959. */
  20960. if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {
  20961. max_insert = s.strstart + s.lookahead - MIN_MATCH;
  20962. /* Do not insert strings in hash table beyond this. */
  20963. //check_match(s, s.strstart-1, s.prev_match, s.prev_length);
  20964. /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,
  20965. s.prev_length - MIN_MATCH, bflush);***/
  20966. bflush = trees._tr_tally(s, s.strstart - 1- s.prev_match, s.prev_length - MIN_MATCH);
  20967. /* Insert in hash table all strings up to the end of the match.
  20968. * strstart-1 and strstart are already inserted. If there is not
  20969. * enough lookahead, the last two strings are not inserted in
  20970. * the hash table.
  20971. */
  20972. s.lookahead -= s.prev_length-1;
  20973. s.prev_length -= 2;
  20974. do {
  20975. if (++s.strstart <= max_insert) {
  20976. /*** INSERT_STRING(s, s.strstart, hash_head); ***/
  20977. s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
  20978. hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
  20979. s.head[s.ins_h] = s.strstart;
  20980. /***/
  20981. }
  20982. } while (--s.prev_length !== 0);
  20983. s.match_available = 0;
  20984. s.match_length = MIN_MATCH-1;
  20985. s.strstart++;
  20986. if (bflush) {
  20987. /*** FLUSH_BLOCK(s, 0); ***/
  20988. flush_block_only(s, false);
  20989. if (s.strm.avail_out === 0) {
  20990. return BS_NEED_MORE;
  20991. }
  20992. /***/
  20993. }
  20994. } else if (s.match_available) {
  20995. /* If there was no match at the previous position, output a
  20996. * single literal. If there was a match but the current match
  20997. * is longer, truncate the previous match to a single literal.
  20998. */
  20999. //Tracevv((stderr,"%c", s->window[s->strstart-1]));
  21000. /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/
  21001. bflush = trees._tr_tally(s, 0, s.window[s.strstart-1]);
  21002. if (bflush) {
  21003. /*** FLUSH_BLOCK_ONLY(s, 0) ***/
  21004. flush_block_only(s, false);
  21005. /***/
  21006. }
  21007. s.strstart++;
  21008. s.lookahead--;
  21009. if (s.strm.avail_out === 0) {
  21010. return BS_NEED_MORE;
  21011. }
  21012. } else {
  21013. /* There is no previous match to compare with, wait for
  21014. * the next step to decide.
  21015. */
  21016. s.match_available = 1;
  21017. s.strstart++;
  21018. s.lookahead--;
  21019. }
  21020. }
  21021. //Assert (flush != Z_NO_FLUSH, "no flush?");
  21022. if (s.match_available) {
  21023. //Tracevv((stderr,"%c", s->window[s->strstart-1]));
  21024. /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/
  21025. bflush = trees._tr_tally(s, 0, s.window[s.strstart-1]);
  21026. s.match_available = 0;
  21027. }
  21028. s.insert = s.strstart < MIN_MATCH-1 ? s.strstart : MIN_MATCH-1;
  21029. if (flush === Z_FINISH) {
  21030. /*** FLUSH_BLOCK(s, 1); ***/
  21031. flush_block_only(s, true);
  21032. if (s.strm.avail_out === 0) {
  21033. return BS_FINISH_STARTED;
  21034. }
  21035. /***/
  21036. return BS_FINISH_DONE;
  21037. }
  21038. if (s.last_lit) {
  21039. /*** FLUSH_BLOCK(s, 0); ***/
  21040. flush_block_only(s, false);
  21041. if (s.strm.avail_out === 0) {
  21042. return BS_NEED_MORE;
  21043. }
  21044. /***/
  21045. }
  21046. return BS_BLOCK_DONE;
  21047. }
  21048. /* ===========================================================================
  21049. * For Z_RLE, simply look for runs of bytes, generate matches only of distance
  21050. * one. Do not maintain a hash table. (It will be regenerated if this run of
  21051. * deflate switches away from Z_RLE.)
  21052. */
  21053. function deflate_rle(s, flush) {
  21054. var bflush; /* set if current block must be flushed */
  21055. var prev; /* byte at distance one to match */
  21056. var scan, strend; /* scan goes up to strend for length of run */
  21057. var _win = s.window;
  21058. for (;;) {
  21059. /* Make sure that we always have enough lookahead, except
  21060. * at the end of the input file. We need MAX_MATCH bytes
  21061. * for the longest run, plus one for the unrolled loop.
  21062. */
  21063. if (s.lookahead <= MAX_MATCH) {
  21064. fill_window(s);
  21065. if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {
  21066. return BS_NEED_MORE;
  21067. }
  21068. if (s.lookahead === 0) { break; } /* flush the current block */
  21069. }
  21070. /* See how many times the previous byte repeats */
  21071. s.match_length = 0;
  21072. if (s.lookahead >= MIN_MATCH && s.strstart > 0) {
  21073. scan = s.strstart - 1;
  21074. prev = _win[scan];
  21075. if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {
  21076. strend = s.strstart + MAX_MATCH;
  21077. do {
  21078. /*jshint noempty:false*/
  21079. } while (prev === _win[++scan] && prev === _win[++scan] &&
  21080. prev === _win[++scan] && prev === _win[++scan] &&
  21081. prev === _win[++scan] && prev === _win[++scan] &&
  21082. prev === _win[++scan] && prev === _win[++scan] &&
  21083. scan < strend);
  21084. s.match_length = MAX_MATCH - (strend - scan);
  21085. if (s.match_length > s.lookahead) {
  21086. s.match_length = s.lookahead;
  21087. }
  21088. }
  21089. //Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan");
  21090. }
  21091. /* Emit match if have run of MIN_MATCH or longer, else emit literal */
  21092. if (s.match_length >= MIN_MATCH) {
  21093. //check_match(s, s.strstart, s.strstart - 1, s.match_length);
  21094. /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/
  21095. bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);
  21096. s.lookahead -= s.match_length;
  21097. s.strstart += s.match_length;
  21098. s.match_length = 0;
  21099. } else {
  21100. /* No match, output a literal byte */
  21101. //Tracevv((stderr,"%c", s->window[s->strstart]));
  21102. /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
  21103. bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
  21104. s.lookahead--;
  21105. s.strstart++;
  21106. }
  21107. if (bflush) {
  21108. /*** FLUSH_BLOCK(s, 0); ***/
  21109. flush_block_only(s, false);
  21110. if (s.strm.avail_out === 0) {
  21111. return BS_NEED_MORE;
  21112. }
  21113. /***/
  21114. }
  21115. }
  21116. s.insert = 0;
  21117. if (flush === Z_FINISH) {
  21118. /*** FLUSH_BLOCK(s, 1); ***/
  21119. flush_block_only(s, true);
  21120. if (s.strm.avail_out === 0) {
  21121. return BS_FINISH_STARTED;
  21122. }
  21123. /***/
  21124. return BS_FINISH_DONE;
  21125. }
  21126. if (s.last_lit) {
  21127. /*** FLUSH_BLOCK(s, 0); ***/
  21128. flush_block_only(s, false);
  21129. if (s.strm.avail_out === 0) {
  21130. return BS_NEED_MORE;
  21131. }
  21132. /***/
  21133. }
  21134. return BS_BLOCK_DONE;
  21135. }
  21136. /* ===========================================================================
  21137. * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.
  21138. * (It will be regenerated if this run of deflate switches away from Huffman.)
  21139. */
  21140. function deflate_huff(s, flush) {
  21141. var bflush; /* set if current block must be flushed */
  21142. for (;;) {
  21143. /* Make sure that we have a literal to write. */
  21144. if (s.lookahead === 0) {
  21145. fill_window(s);
  21146. if (s.lookahead === 0) {
  21147. if (flush === Z_NO_FLUSH) {
  21148. return BS_NEED_MORE;
  21149. }
  21150. break; /* flush the current block */
  21151. }
  21152. }
  21153. /* Output a literal byte */
  21154. s.match_length = 0;
  21155. //Tracevv((stderr,"%c", s->window[s->strstart]));
  21156. /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
  21157. bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
  21158. s.lookahead--;
  21159. s.strstart++;
  21160. if (bflush) {
  21161. /*** FLUSH_BLOCK(s, 0); ***/
  21162. flush_block_only(s, false);
  21163. if (s.strm.avail_out === 0) {
  21164. return BS_NEED_MORE;
  21165. }
  21166. /***/
  21167. }
  21168. }
  21169. s.insert = 0;
  21170. if (flush === Z_FINISH) {
  21171. /*** FLUSH_BLOCK(s, 1); ***/
  21172. flush_block_only(s, true);
  21173. if (s.strm.avail_out === 0) {
  21174. return BS_FINISH_STARTED;
  21175. }
  21176. /***/
  21177. return BS_FINISH_DONE;
  21178. }
  21179. if (s.last_lit) {
  21180. /*** FLUSH_BLOCK(s, 0); ***/
  21181. flush_block_only(s, false);
  21182. if (s.strm.avail_out === 0) {
  21183. return BS_NEED_MORE;
  21184. }
  21185. /***/
  21186. }
  21187. return BS_BLOCK_DONE;
  21188. }
  21189. /* Values for max_lazy_match, good_match and max_chain_length, depending on
  21190. * the desired pack level (0..9). The values given below have been tuned to
  21191. * exclude worst case performance for pathological files. Better values may be
  21192. * found for specific files.
  21193. */
  21194. var Config = function (good_length, max_lazy, nice_length, max_chain, func) {
  21195. this.good_length = good_length;
  21196. this.max_lazy = max_lazy;
  21197. this.nice_length = nice_length;
  21198. this.max_chain = max_chain;
  21199. this.func = func;
  21200. };
  21201. var configuration_table;
  21202. configuration_table = [
  21203. /* good lazy nice chain */
  21204. new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */
  21205. new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */
  21206. new Config(4, 5, 16, 8, deflate_fast), /* 2 */
  21207. new Config(4, 6, 32, 32, deflate_fast), /* 3 */
  21208. new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */
  21209. new Config(8, 16, 32, 32, deflate_slow), /* 5 */
  21210. new Config(8, 16, 128, 128, deflate_slow), /* 6 */
  21211. new Config(8, 32, 128, 256, deflate_slow), /* 7 */
  21212. new Config(32, 128, 258, 1024, deflate_slow), /* 8 */
  21213. new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */
  21214. ];
  21215. /* ===========================================================================
  21216. * Initialize the "longest match" routines for a new zlib stream
  21217. */
  21218. function lm_init(s) {
  21219. s.window_size = 2 * s.w_size;
  21220. /*** CLEAR_HASH(s); ***/
  21221. zero(s.head); // Fill with NIL (= 0);
  21222. /* Set the default configuration parameters:
  21223. */
  21224. s.max_lazy_match = configuration_table[s.level].max_lazy;
  21225. s.good_match = configuration_table[s.level].good_length;
  21226. s.nice_match = configuration_table[s.level].nice_length;
  21227. s.max_chain_length = configuration_table[s.level].max_chain;
  21228. s.strstart = 0;
  21229. s.block_start = 0;
  21230. s.lookahead = 0;
  21231. s.insert = 0;
  21232. s.match_length = s.prev_length = MIN_MATCH - 1;
  21233. s.match_available = 0;
  21234. s.ins_h = 0;
  21235. }
  21236. function DeflateState() {
  21237. this.strm = null; /* pointer back to this zlib stream */
  21238. this.status = 0; /* as the name implies */
  21239. this.pending_buf = null; /* output still pending */
  21240. this.pending_buf_size = 0; /* size of pending_buf */
  21241. this.pending_out = 0; /* next pending byte to output to the stream */
  21242. this.pending = 0; /* nb of bytes in the pending buffer */
  21243. this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */
  21244. this.gzhead = null; /* gzip header information to write */
  21245. this.gzindex = 0; /* where in extra, name, or comment */
  21246. this.method = Z_DEFLATED; /* can only be DEFLATED */
  21247. this.last_flush = -1; /* value of flush param for previous deflate call */
  21248. this.w_size = 0; /* LZ77 window size (32K by default) */
  21249. this.w_bits = 0; /* log2(w_size) (8..16) */
  21250. this.w_mask = 0; /* w_size - 1 */
  21251. this.window = null;
  21252. /* Sliding window. Input bytes are read into the second half of the window,
  21253. * and move to the first half later to keep a dictionary of at least wSize
  21254. * bytes. With this organization, matches are limited to a distance of
  21255. * wSize-MAX_MATCH bytes, but this ensures that IO is always
  21256. * performed with a length multiple of the block size.
  21257. */
  21258. this.window_size = 0;
  21259. /* Actual size of window: 2*wSize, except when the user input buffer
  21260. * is directly used as sliding window.
  21261. */
  21262. this.prev = null;
  21263. /* Link to older string with same hash index. To limit the size of this
  21264. * array to 64K, this link is maintained only for the last 32K strings.
  21265. * An index in this array is thus a window index modulo 32K.
  21266. */
  21267. this.head = null; /* Heads of the hash chains or NIL. */
  21268. this.ins_h = 0; /* hash index of string to be inserted */
  21269. this.hash_size = 0; /* number of elements in hash table */
  21270. this.hash_bits = 0; /* log2(hash_size) */
  21271. this.hash_mask = 0; /* hash_size-1 */
  21272. this.hash_shift = 0;
  21273. /* Number of bits by which ins_h must be shifted at each input
  21274. * step. It must be such that after MIN_MATCH steps, the oldest
  21275. * byte no longer takes part in the hash key, that is:
  21276. * hash_shift * MIN_MATCH >= hash_bits
  21277. */
  21278. this.block_start = 0;
  21279. /* Window position at the beginning of the current output block. Gets
  21280. * negative when the window is moved backwards.
  21281. */
  21282. this.match_length = 0; /* length of best match */
  21283. this.prev_match = 0; /* previous match */
  21284. this.match_available = 0; /* set if previous match exists */
  21285. this.strstart = 0; /* start of string to insert */
  21286. this.match_start = 0; /* start of matching string */
  21287. this.lookahead = 0; /* number of valid bytes ahead in window */
  21288. this.prev_length = 0;
  21289. /* Length of the best match at previous step. Matches not greater than this
  21290. * are discarded. This is used in the lazy match evaluation.
  21291. */
  21292. this.max_chain_length = 0;
  21293. /* To speed up deflation, hash chains are never searched beyond this
  21294. * length. A higher limit improves compression ratio but degrades the
  21295. * speed.
  21296. */
  21297. this.max_lazy_match = 0;
  21298. /* Attempt to find a better match only when the current match is strictly
  21299. * smaller than this value. This mechanism is used only for compression
  21300. * levels >= 4.
  21301. */
  21302. // That's alias to max_lazy_match, don't use directly
  21303. //this.max_insert_length = 0;
  21304. /* Insert new strings in the hash table only if the match length is not
  21305. * greater than this length. This saves time but degrades compression.
  21306. * max_insert_length is used only for compression levels <= 3.
  21307. */
  21308. this.level = 0; /* compression level (1..9) */
  21309. this.strategy = 0; /* favor or force Huffman coding*/
  21310. this.good_match = 0;
  21311. /* Use a faster search when the previous match is longer than this */
  21312. this.nice_match = 0; /* Stop searching when current match exceeds this */
  21313. /* used by trees.c: */
  21314. /* Didn't use ct_data typedef below to suppress compiler warning */
  21315. // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */
  21316. // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
  21317. // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */
  21318. // Use flat array of DOUBLE size, with interleaved fata,
  21319. // because JS does not support effective
  21320. this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2);
  21321. this.dyn_dtree = new utils.Buf16((2*D_CODES+1) * 2);
  21322. this.bl_tree = new utils.Buf16((2*BL_CODES+1) * 2);
  21323. zero(this.dyn_ltree);
  21324. zero(this.dyn_dtree);
  21325. zero(this.bl_tree);
  21326. this.l_desc = null; /* desc. for literal tree */
  21327. this.d_desc = null; /* desc. for distance tree */
  21328. this.bl_desc = null; /* desc. for bit length tree */
  21329. //ush bl_count[MAX_BITS+1];
  21330. this.bl_count = new utils.Buf16(MAX_BITS+1);
  21331. /* number of codes at each bit length for an optimal tree */
  21332. //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */
  21333. this.heap = new utils.Buf16(2*L_CODES+1); /* heap used to build the Huffman trees */
  21334. zero(this.heap);
  21335. this.heap_len = 0; /* number of elements in the heap */
  21336. this.heap_max = 0; /* element of largest frequency */
  21337. /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
  21338. * The same heap array is used to build all trees.
  21339. */
  21340. this.depth = new utils.Buf16(2*L_CODES+1); //uch depth[2*L_CODES+1];
  21341. zero(this.depth);
  21342. /* Depth of each subtree used as tie breaker for trees of equal frequency
  21343. */
  21344. this.l_buf = 0; /* buffer index for literals or lengths */
  21345. this.lit_bufsize = 0;
  21346. /* Size of match buffer for literals/lengths. There are 4 reasons for
  21347. * limiting lit_bufsize to 64K:
  21348. * - frequencies can be kept in 16 bit counters
  21349. * - if compression is not successful for the first block, all input
  21350. * data is still in the window so we can still emit a stored block even
  21351. * when input comes from standard input. (This can also be done for
  21352. * all blocks if lit_bufsize is not greater than 32K.)
  21353. * - if compression is not successful for a file smaller than 64K, we can
  21354. * even emit a stored file instead of a stored block (saving 5 bytes).
  21355. * This is applicable only for zip (not gzip or zlib).
  21356. * - creating new Huffman trees less frequently may not provide fast
  21357. * adaptation to changes in the input data statistics. (Take for
  21358. * example a binary file with poorly compressible code followed by
  21359. * a highly compressible string table.) Smaller buffer sizes give
  21360. * fast adaptation but have of course the overhead of transmitting
  21361. * trees more frequently.
  21362. * - I can't count above 4
  21363. */
  21364. this.last_lit = 0; /* running index in l_buf */
  21365. this.d_buf = 0;
  21366. /* Buffer index for distances. To simplify the code, d_buf and l_buf have
  21367. * the same number of elements. To use different lengths, an extra flag
  21368. * array would be necessary.
  21369. */
  21370. this.opt_len = 0; /* bit length of current block with optimal trees */
  21371. this.static_len = 0; /* bit length of current block with static trees */
  21372. this.matches = 0; /* number of string matches in current block */
  21373. this.insert = 0; /* bytes at end of window left to insert */
  21374. this.bi_buf = 0;
  21375. /* Output buffer. bits are inserted starting at the bottom (least
  21376. * significant bits).
  21377. */
  21378. this.bi_valid = 0;
  21379. /* Number of valid bits in bi_buf. All bits above the last valid bit
  21380. * are always zero.
  21381. */
  21382. // Used for window memory init. We safely ignore it for JS. That makes
  21383. // sense only for pointers and memory check tools.
  21384. //this.high_water = 0;
  21385. /* High water mark offset in window for initialized bytes -- bytes above
  21386. * this are set to zero in order to avoid memory check warnings when
  21387. * longest match routines access bytes past the input. This is then
  21388. * updated to the new high water mark.
  21389. */
  21390. }
  21391. function deflateResetKeep(strm) {
  21392. var s;
  21393. if (!strm || !strm.state) {
  21394. return err(strm, Z_STREAM_ERROR);
  21395. }
  21396. strm.total_in = strm.total_out = 0;
  21397. strm.data_type = Z_UNKNOWN;
  21398. s = strm.state;
  21399. s.pending = 0;
  21400. s.pending_out = 0;
  21401. if (s.wrap < 0) {
  21402. s.wrap = -s.wrap;
  21403. /* was made negative by deflate(..., Z_FINISH); */
  21404. }
  21405. s.status = (s.wrap ? INIT_STATE : BUSY_STATE);
  21406. strm.adler = (s.wrap === 2) ?
  21407. 0 // crc32(0, Z_NULL, 0)
  21408. :
  21409. 1; // adler32(0, Z_NULL, 0)
  21410. s.last_flush = Z_NO_FLUSH;
  21411. trees._tr_init(s);
  21412. return Z_OK;
  21413. }
  21414. function deflateReset(strm) {
  21415. var ret = deflateResetKeep(strm);
  21416. if (ret === Z_OK) {
  21417. lm_init(strm.state);
  21418. }
  21419. return ret;
  21420. }
  21421. function deflateSetHeader(strm, head) {
  21422. if (!strm || !strm.state) { return Z_STREAM_ERROR; }
  21423. if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }
  21424. strm.state.gzhead = head;
  21425. return Z_OK;
  21426. }
  21427. function deflateInit2(strm, level, method, windowBits, memLevel, strategy) {
  21428. if (!strm) { // === Z_NULL
  21429. return Z_STREAM_ERROR;
  21430. }
  21431. var wrap = 1;
  21432. if (level === Z_DEFAULT_COMPRESSION) {
  21433. level = 6;
  21434. }
  21435. if (windowBits < 0) { /* suppress zlib wrapper */
  21436. wrap = 0;
  21437. windowBits = -windowBits;
  21438. }
  21439. else if (windowBits > 15) {
  21440. wrap = 2; /* write gzip wrapper instead */
  21441. windowBits -= 16;
  21442. }
  21443. if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||
  21444. windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
  21445. strategy < 0 || strategy > Z_FIXED) {
  21446. return err(strm, Z_STREAM_ERROR);
  21447. }
  21448. if (windowBits === 8) {
  21449. windowBits = 9;
  21450. }
  21451. /* until 256-byte window bug fixed */
  21452. var s = new DeflateState();
  21453. strm.state = s;
  21454. s.strm = strm;
  21455. s.wrap = wrap;
  21456. s.gzhead = null;
  21457. s.w_bits = windowBits;
  21458. s.w_size = 1 << s.w_bits;
  21459. s.w_mask = s.w_size - 1;
  21460. s.hash_bits = memLevel + 7;
  21461. s.hash_size = 1 << s.hash_bits;
  21462. s.hash_mask = s.hash_size - 1;
  21463. s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);
  21464. s.window = new utils.Buf8(s.w_size * 2);
  21465. s.head = new utils.Buf16(s.hash_size);
  21466. s.prev = new utils.Buf16(s.w_size);
  21467. // Don't need mem init magic for JS.
  21468. //s.high_water = 0; /* nothing written to s->window yet */
  21469. s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
  21470. s.pending_buf_size = s.lit_bufsize * 4;
  21471. s.pending_buf = new utils.Buf8(s.pending_buf_size);
  21472. s.d_buf = s.lit_bufsize >> 1;
  21473. s.l_buf = (1 + 2) * s.lit_bufsize;
  21474. s.level = level;
  21475. s.strategy = strategy;
  21476. s.method = method;
  21477. return deflateReset(strm);
  21478. }
  21479. function deflateInit(strm, level) {
  21480. return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);
  21481. }
  21482. function deflate(strm, flush) {
  21483. var old_flush, s;
  21484. var beg, val; // for gzip header write only
  21485. if (!strm || !strm.state ||
  21486. flush > Z_BLOCK || flush < 0) {
  21487. return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;
  21488. }
  21489. s = strm.state;
  21490. if (!strm.output ||
  21491. (!strm.input && strm.avail_in !== 0) ||
  21492. (s.status === FINISH_STATE && flush !== Z_FINISH)) {
  21493. return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);
  21494. }
  21495. s.strm = strm; /* just in case */
  21496. old_flush = s.last_flush;
  21497. s.last_flush = flush;
  21498. /* Write the header */
  21499. if (s.status === INIT_STATE) {
  21500. if (s.wrap === 2) { // GZIP header
  21501. strm.adler = 0; //crc32(0L, Z_NULL, 0);
  21502. put_byte(s, 31);
  21503. put_byte(s, 139);
  21504. put_byte(s, 8);
  21505. if (!s.gzhead) { // s->gzhead == Z_NULL
  21506. put_byte(s, 0);
  21507. put_byte(s, 0);
  21508. put_byte(s, 0);
  21509. put_byte(s, 0);
  21510. put_byte(s, 0);
  21511. put_byte(s, s.level === 9 ? 2 :
  21512. (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?
  21513. 4 : 0));
  21514. put_byte(s, OS_CODE);
  21515. s.status = BUSY_STATE;
  21516. }
  21517. else {
  21518. put_byte(s, (s.gzhead.text ? 1 : 0) +
  21519. (s.gzhead.hcrc ? 2 : 0) +
  21520. (!s.gzhead.extra ? 0 : 4) +
  21521. (!s.gzhead.name ? 0 : 8) +
  21522. (!s.gzhead.comment ? 0 : 16)
  21523. );
  21524. put_byte(s, s.gzhead.time & 0xff);
  21525. put_byte(s, (s.gzhead.time >> 8) & 0xff);
  21526. put_byte(s, (s.gzhead.time >> 16) & 0xff);
  21527. put_byte(s, (s.gzhead.time >> 24) & 0xff);
  21528. put_byte(s, s.level === 9 ? 2 :
  21529. (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?
  21530. 4 : 0));
  21531. put_byte(s, s.gzhead.os & 0xff);
  21532. if (s.gzhead.extra && s.gzhead.extra.length) {
  21533. put_byte(s, s.gzhead.extra.length & 0xff);
  21534. put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);
  21535. }
  21536. if (s.gzhead.hcrc) {
  21537. strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);
  21538. }
  21539. s.gzindex = 0;
  21540. s.status = EXTRA_STATE;
  21541. }
  21542. }
  21543. else // DEFLATE header
  21544. {
  21545. var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;
  21546. var level_flags = -1;
  21547. if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {
  21548. level_flags = 0;
  21549. } else if (s.level < 6) {
  21550. level_flags = 1;
  21551. } else if (s.level === 6) {
  21552. level_flags = 2;
  21553. } else {
  21554. level_flags = 3;
  21555. }
  21556. header |= (level_flags << 6);
  21557. if (s.strstart !== 0) { header |= PRESET_DICT; }
  21558. header += 31 - (header % 31);
  21559. s.status = BUSY_STATE;
  21560. putShortMSB(s, header);
  21561. /* Save the adler32 of the preset dictionary: */
  21562. if (s.strstart !== 0) {
  21563. putShortMSB(s, strm.adler >>> 16);
  21564. putShortMSB(s, strm.adler & 0xffff);
  21565. }
  21566. strm.adler = 1; // adler32(0L, Z_NULL, 0);
  21567. }
  21568. }
  21569. //#ifdef GZIP
  21570. if (s.status === EXTRA_STATE) {
  21571. if (s.gzhead.extra/* != Z_NULL*/) {
  21572. beg = s.pending; /* start of bytes to update crc */
  21573. while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {
  21574. if (s.pending === s.pending_buf_size) {
  21575. if (s.gzhead.hcrc && s.pending > beg) {
  21576. strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
  21577. }
  21578. flush_pending(strm);
  21579. beg = s.pending;
  21580. if (s.pending === s.pending_buf_size) {
  21581. break;
  21582. }
  21583. }
  21584. put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);
  21585. s.gzindex++;
  21586. }
  21587. if (s.gzhead.hcrc && s.pending > beg) {
  21588. strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
  21589. }
  21590. if (s.gzindex === s.gzhead.extra.length) {
  21591. s.gzindex = 0;
  21592. s.status = NAME_STATE;
  21593. }
  21594. }
  21595. else {
  21596. s.status = NAME_STATE;
  21597. }
  21598. }
  21599. if (s.status === NAME_STATE) {
  21600. if (s.gzhead.name/* != Z_NULL*/) {
  21601. beg = s.pending; /* start of bytes to update crc */
  21602. //int val;
  21603. do {
  21604. if (s.pending === s.pending_buf_size) {
  21605. if (s.gzhead.hcrc && s.pending > beg) {
  21606. strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
  21607. }
  21608. flush_pending(strm);
  21609. beg = s.pending;
  21610. if (s.pending === s.pending_buf_size) {
  21611. val = 1;
  21612. break;
  21613. }
  21614. }
  21615. // JS specific: little magic to add zero terminator to end of string
  21616. if (s.gzindex < s.gzhead.name.length) {
  21617. val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;
  21618. } else {
  21619. val = 0;
  21620. }
  21621. put_byte(s, val);
  21622. } while (val !== 0);
  21623. if (s.gzhead.hcrc && s.pending > beg) {
  21624. strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
  21625. }
  21626. if (val === 0) {
  21627. s.gzindex = 0;
  21628. s.status = COMMENT_STATE;
  21629. }
  21630. }
  21631. else {
  21632. s.status = COMMENT_STATE;
  21633. }
  21634. }
  21635. if (s.status === COMMENT_STATE) {
  21636. if (s.gzhead.comment/* != Z_NULL*/) {
  21637. beg = s.pending; /* start of bytes to update crc */
  21638. //int val;
  21639. do {
  21640. if (s.pending === s.pending_buf_size) {
  21641. if (s.gzhead.hcrc && s.pending > beg) {
  21642. strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
  21643. }
  21644. flush_pending(strm);
  21645. beg = s.pending;
  21646. if (s.pending === s.pending_buf_size) {
  21647. val = 1;
  21648. break;
  21649. }
  21650. }
  21651. // JS specific: little magic to add zero terminator to end of string
  21652. if (s.gzindex < s.gzhead.comment.length) {
  21653. val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;
  21654. } else {
  21655. val = 0;
  21656. }
  21657. put_byte(s, val);
  21658. } while (val !== 0);
  21659. if (s.gzhead.hcrc && s.pending > beg) {
  21660. strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
  21661. }
  21662. if (val === 0) {
  21663. s.status = HCRC_STATE;
  21664. }
  21665. }
  21666. else {
  21667. s.status = HCRC_STATE;
  21668. }
  21669. }
  21670. if (s.status === HCRC_STATE) {
  21671. if (s.gzhead.hcrc) {
  21672. if (s.pending + 2 > s.pending_buf_size) {
  21673. flush_pending(strm);
  21674. }
  21675. if (s.pending + 2 <= s.pending_buf_size) {
  21676. put_byte(s, strm.adler & 0xff);
  21677. put_byte(s, (strm.adler >> 8) & 0xff);
  21678. strm.adler = 0; //crc32(0L, Z_NULL, 0);
  21679. s.status = BUSY_STATE;
  21680. }
  21681. }
  21682. else {
  21683. s.status = BUSY_STATE;
  21684. }
  21685. }
  21686. //#endif
  21687. /* Flush as much pending output as possible */
  21688. if (s.pending !== 0) {
  21689. flush_pending(strm);
  21690. if (strm.avail_out === 0) {
  21691. /* Since avail_out is 0, deflate will be called again with
  21692. * more output space, but possibly with both pending and
  21693. * avail_in equal to zero. There won't be anything to do,
  21694. * but this is not an error situation so make sure we
  21695. * return OK instead of BUF_ERROR at next call of deflate:
  21696. */
  21697. s.last_flush = -1;
  21698. return Z_OK;
  21699. }
  21700. /* Make sure there is something to do and avoid duplicate consecutive
  21701. * flushes. For repeated and useless calls with Z_FINISH, we keep
  21702. * returning Z_STREAM_END instead of Z_BUF_ERROR.
  21703. */
  21704. } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&
  21705. flush !== Z_FINISH) {
  21706. return err(strm, Z_BUF_ERROR);
  21707. }
  21708. /* User must not provide more input after the first FINISH: */
  21709. if (s.status === FINISH_STATE && strm.avail_in !== 0) {
  21710. return err(strm, Z_BUF_ERROR);
  21711. }
  21712. /* Start a new block or continue the current one.
  21713. */
  21714. if (strm.avail_in !== 0 || s.lookahead !== 0 ||
  21715. (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {
  21716. var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :
  21717. (s.strategy === Z_RLE ? deflate_rle(s, flush) :
  21718. configuration_table[s.level].func(s, flush));
  21719. if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {
  21720. s.status = FINISH_STATE;
  21721. }
  21722. if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {
  21723. if (strm.avail_out === 0) {
  21724. s.last_flush = -1;
  21725. /* avoid BUF_ERROR next call, see above */
  21726. }
  21727. return Z_OK;
  21728. /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
  21729. * of deflate should use the same flush parameter to make sure
  21730. * that the flush is complete. So we don't have to output an
  21731. * empty block here, this will be done at next call. This also
  21732. * ensures that for a very small output buffer, we emit at most
  21733. * one empty block.
  21734. */
  21735. }
  21736. if (bstate === BS_BLOCK_DONE) {
  21737. if (flush === Z_PARTIAL_FLUSH) {
  21738. trees._tr_align(s);
  21739. }
  21740. else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */
  21741. trees._tr_stored_block(s, 0, 0, false);
  21742. /* For a full flush, this empty block will be recognized
  21743. * as a special marker by inflate_sync().
  21744. */
  21745. if (flush === Z_FULL_FLUSH) {
  21746. /*** CLEAR_HASH(s); ***/ /* forget history */
  21747. zero(s.head); // Fill with NIL (= 0);
  21748. if (s.lookahead === 0) {
  21749. s.strstart = 0;
  21750. s.block_start = 0;
  21751. s.insert = 0;
  21752. }
  21753. }
  21754. }
  21755. flush_pending(strm);
  21756. if (strm.avail_out === 0) {
  21757. s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */
  21758. return Z_OK;
  21759. }
  21760. }
  21761. }
  21762. //Assert(strm->avail_out > 0, "bug2");
  21763. //if (strm.avail_out <= 0) { throw new Error("bug2");}
  21764. if (flush !== Z_FINISH) { return Z_OK; }
  21765. if (s.wrap <= 0) { return Z_STREAM_END; }
  21766. /* Write the trailer */
  21767. if (s.wrap === 2) {
  21768. put_byte(s, strm.adler & 0xff);
  21769. put_byte(s, (strm.adler >> 8) & 0xff);
  21770. put_byte(s, (strm.adler >> 16) & 0xff);
  21771. put_byte(s, (strm.adler >> 24) & 0xff);
  21772. put_byte(s, strm.total_in & 0xff);
  21773. put_byte(s, (strm.total_in >> 8) & 0xff);
  21774. put_byte(s, (strm.total_in >> 16) & 0xff);
  21775. put_byte(s, (strm.total_in >> 24) & 0xff);
  21776. }
  21777. else
  21778. {
  21779. putShortMSB(s, strm.adler >>> 16);
  21780. putShortMSB(s, strm.adler & 0xffff);
  21781. }
  21782. flush_pending(strm);
  21783. /* If avail_out is zero, the application will call deflate again
  21784. * to flush the rest.
  21785. */
  21786. if (s.wrap > 0) { s.wrap = -s.wrap; }
  21787. /* write the trailer only once! */
  21788. return s.pending !== 0 ? Z_OK : Z_STREAM_END;
  21789. }
  21790. function deflateEnd(strm) {
  21791. var status;
  21792. if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {
  21793. return Z_STREAM_ERROR;
  21794. }
  21795. status = strm.state.status;
  21796. if (status !== INIT_STATE &&
  21797. status !== EXTRA_STATE &&
  21798. status !== NAME_STATE &&
  21799. status !== COMMENT_STATE &&
  21800. status !== HCRC_STATE &&
  21801. status !== BUSY_STATE &&
  21802. status !== FINISH_STATE
  21803. ) {
  21804. return err(strm, Z_STREAM_ERROR);
  21805. }
  21806. strm.state = null;
  21807. return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;
  21808. }
  21809. /* =========================================================================
  21810. * Copy the source state to the destination state
  21811. */
  21812. //function deflateCopy(dest, source) {
  21813. //
  21814. //}
  21815. exports.deflateInit = deflateInit;
  21816. exports.deflateInit2 = deflateInit2;
  21817. exports.deflateReset = deflateReset;
  21818. exports.deflateResetKeep = deflateResetKeep;
  21819. exports.deflateSetHeader = deflateSetHeader;
  21820. exports.deflate = deflate;
  21821. exports.deflateEnd = deflateEnd;
  21822. exports.deflateInfo = 'pako deflate (from Nodeca project)';
  21823. /* Not implemented
  21824. exports.deflateBound = deflateBound;
  21825. exports.deflateCopy = deflateCopy;
  21826. exports.deflateSetDictionary = deflateSetDictionary;
  21827. exports.deflateParams = deflateParams;
  21828. exports.deflatePending = deflatePending;
  21829. exports.deflatePrime = deflatePrime;
  21830. exports.deflateTune = deflateTune;
  21831. */
  21832. /***/ },
  21833. /* 52 */
  21834. /***/ function(module, exports) {
  21835. 'use strict';
  21836. var TYPED_OK = (typeof Uint8Array !== 'undefined') &&
  21837. (typeof Uint16Array !== 'undefined') &&
  21838. (typeof Int32Array !== 'undefined');
  21839. exports.assign = function (obj /*from1, from2, from3, ...*/) {
  21840. var sources = Array.prototype.slice.call(arguments, 1);
  21841. while (sources.length) {
  21842. var source = sources.shift();
  21843. if (!source) { continue; }
  21844. if (typeof source !== 'object') {
  21845. throw new TypeError(source + 'must be non-object');
  21846. }
  21847. for (var p in source) {
  21848. if (source.hasOwnProperty(p)) {
  21849. obj[p] = source[p];
  21850. }
  21851. }
  21852. }
  21853. return obj;
  21854. };
  21855. // reduce buffer size, avoiding mem copy
  21856. exports.shrinkBuf = function (buf, size) {
  21857. if (buf.length === size) { return buf; }
  21858. if (buf.subarray) { return buf.subarray(0, size); }
  21859. buf.length = size;
  21860. return buf;
  21861. };
  21862. var fnTyped = {
  21863. arraySet: function (dest, src, src_offs, len, dest_offs) {
  21864. if (src.subarray && dest.subarray) {
  21865. dest.set(src.subarray(src_offs, src_offs+len), dest_offs);
  21866. return;
  21867. }
  21868. // Fallback to ordinary array
  21869. for (var i=0; i<len; i++) {
  21870. dest[dest_offs + i] = src[src_offs + i];
  21871. }
  21872. },
  21873. // Join array of chunks to single array.
  21874. flattenChunks: function(chunks) {
  21875. var i, l, len, pos, chunk, result;
  21876. // calculate data length
  21877. len = 0;
  21878. for (i=0, l=chunks.length; i<l; i++) {
  21879. len += chunks[i].length;
  21880. }
  21881. // join chunks
  21882. result = new Uint8Array(len);
  21883. pos = 0;
  21884. for (i=0, l=chunks.length; i<l; i++) {
  21885. chunk = chunks[i];
  21886. result.set(chunk, pos);
  21887. pos += chunk.length;
  21888. }
  21889. return result;
  21890. }
  21891. };
  21892. var fnUntyped = {
  21893. arraySet: function (dest, src, src_offs, len, dest_offs) {
  21894. for (var i=0; i<len; i++) {
  21895. dest[dest_offs + i] = src[src_offs + i];
  21896. }
  21897. },
  21898. // Join array of chunks to single array.
  21899. flattenChunks: function(chunks) {
  21900. return [].concat.apply([], chunks);
  21901. }
  21902. };
  21903. // Enable/Disable typed arrays use, for testing
  21904. //
  21905. exports.setTyped = function (on) {
  21906. if (on) {
  21907. exports.Buf8 = Uint8Array;
  21908. exports.Buf16 = Uint16Array;
  21909. exports.Buf32 = Int32Array;
  21910. exports.assign(exports, fnTyped);
  21911. } else {
  21912. exports.Buf8 = Array;
  21913. exports.Buf16 = Array;
  21914. exports.Buf32 = Array;
  21915. exports.assign(exports, fnUntyped);
  21916. }
  21917. };
  21918. exports.setTyped(TYPED_OK);
  21919. /***/ },
  21920. /* 53 */
  21921. /***/ function(module, exports, __webpack_require__) {
  21922. 'use strict';
  21923. var utils = __webpack_require__(52);
  21924. /* Public constants ==========================================================*/
  21925. /* ===========================================================================*/
  21926. //var Z_FILTERED = 1;
  21927. //var Z_HUFFMAN_ONLY = 2;
  21928. //var Z_RLE = 3;
  21929. var Z_FIXED = 4;
  21930. //var Z_DEFAULT_STRATEGY = 0;
  21931. /* Possible values of the data_type field (though see inflate()) */
  21932. var Z_BINARY = 0;
  21933. var Z_TEXT = 1;
  21934. //var Z_ASCII = 1; // = Z_TEXT
  21935. var Z_UNKNOWN = 2;
  21936. /*============================================================================*/
  21937. function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }
  21938. // From zutil.h
  21939. var STORED_BLOCK = 0;
  21940. var STATIC_TREES = 1;
  21941. var DYN_TREES = 2;
  21942. /* The three kinds of block type */
  21943. var MIN_MATCH = 3;
  21944. var MAX_MATCH = 258;
  21945. /* The minimum and maximum match lengths */
  21946. // From deflate.h
  21947. /* ===========================================================================
  21948. * Internal compression state.
  21949. */
  21950. var LENGTH_CODES = 29;
  21951. /* number of length codes, not counting the special END_BLOCK code */
  21952. var LITERALS = 256;
  21953. /* number of literal bytes 0..255 */
  21954. var L_CODES = LITERALS + 1 + LENGTH_CODES;
  21955. /* number of Literal or Length codes, including the END_BLOCK code */
  21956. var D_CODES = 30;
  21957. /* number of distance codes */
  21958. var BL_CODES = 19;
  21959. /* number of codes used to transfer the bit lengths */
  21960. var HEAP_SIZE = 2*L_CODES + 1;
  21961. /* maximum heap size */
  21962. var MAX_BITS = 15;
  21963. /* All codes must not exceed MAX_BITS bits */
  21964. var Buf_size = 16;
  21965. /* size of bit buffer in bi_buf */
  21966. /* ===========================================================================
  21967. * Constants
  21968. */
  21969. var MAX_BL_BITS = 7;
  21970. /* Bit length codes must not exceed MAX_BL_BITS bits */
  21971. var END_BLOCK = 256;
  21972. /* end of block literal code */
  21973. var REP_3_6 = 16;
  21974. /* repeat previous bit length 3-6 times (2 bits of repeat count) */
  21975. var REPZ_3_10 = 17;
  21976. /* repeat a zero length 3-10 times (3 bits of repeat count) */
  21977. var REPZ_11_138 = 18;
  21978. /* repeat a zero length 11-138 times (7 bits of repeat count) */
  21979. var extra_lbits = /* extra bits for each length code */
  21980. [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];
  21981. var extra_dbits = /* extra bits for each distance code */
  21982. [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];
  21983. var extra_blbits = /* extra bits for each bit length code */
  21984. [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];
  21985. var bl_order =
  21986. [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];
  21987. /* The lengths of the bit length codes are sent in order of decreasing
  21988. * probability, to avoid transmitting the lengths for unused bit length codes.
  21989. */
  21990. /* ===========================================================================
  21991. * Local data. These are initialized only once.
  21992. */
  21993. // We pre-fill arrays with 0 to avoid uninitialized gaps
  21994. var DIST_CODE_LEN = 512; /* see definition of array dist_code below */
  21995. // !!!! Use flat array insdead of structure, Freq = i*2, Len = i*2+1
  21996. var static_ltree = new Array((L_CODES+2) * 2);
  21997. zero(static_ltree);
  21998. /* The static literal tree. Since the bit lengths are imposed, there is no
  21999. * need for the L_CODES extra codes used during heap construction. However
  22000. * The codes 286 and 287 are needed to build a canonical tree (see _tr_init
  22001. * below).
  22002. */
  22003. var static_dtree = new Array(D_CODES * 2);
  22004. zero(static_dtree);
  22005. /* The static distance tree. (Actually a trivial tree since all codes use
  22006. * 5 bits.)
  22007. */
  22008. var _dist_code = new Array(DIST_CODE_LEN);
  22009. zero(_dist_code);
  22010. /* Distance codes. The first 256 values correspond to the distances
  22011. * 3 .. 258, the last 256 values correspond to the top 8 bits of
  22012. * the 15 bit distances.
  22013. */
  22014. var _length_code = new Array(MAX_MATCH-MIN_MATCH+1);
  22015. zero(_length_code);
  22016. /* length code for each normalized match length (0 == MIN_MATCH) */
  22017. var base_length = new Array(LENGTH_CODES);
  22018. zero(base_length);
  22019. /* First normalized length for each code (0 = MIN_MATCH) */
  22020. var base_dist = new Array(D_CODES);
  22021. zero(base_dist);
  22022. /* First normalized distance for each code (0 = distance of 1) */
  22023. var StaticTreeDesc = function (static_tree, extra_bits, extra_base, elems, max_length) {
  22024. this.static_tree = static_tree; /* static tree or NULL */
  22025. this.extra_bits = extra_bits; /* extra bits for each code or NULL */
  22026. this.extra_base = extra_base; /* base index for extra_bits */
  22027. this.elems = elems; /* max number of elements in the tree */
  22028. this.max_length = max_length; /* max bit length for the codes */
  22029. // show if `static_tree` has data or dummy - needed for monomorphic objects
  22030. this.has_stree = static_tree && static_tree.length;
  22031. };
  22032. var static_l_desc;
  22033. var static_d_desc;
  22034. var static_bl_desc;
  22035. var TreeDesc = function(dyn_tree, stat_desc) {
  22036. this.dyn_tree = dyn_tree; /* the dynamic tree */
  22037. this.max_code = 0; /* largest code with non zero frequency */
  22038. this.stat_desc = stat_desc; /* the corresponding static tree */
  22039. };
  22040. function d_code(dist) {
  22041. return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];
  22042. }
  22043. /* ===========================================================================
  22044. * Output a short LSB first on the stream.
  22045. * IN assertion: there is enough room in pendingBuf.
  22046. */
  22047. function put_short (s, w) {
  22048. // put_byte(s, (uch)((w) & 0xff));
  22049. // put_byte(s, (uch)((ush)(w) >> 8));
  22050. s.pending_buf[s.pending++] = (w) & 0xff;
  22051. s.pending_buf[s.pending++] = (w >>> 8) & 0xff;
  22052. }
  22053. /* ===========================================================================
  22054. * Send a value on a given number of bits.
  22055. * IN assertion: length <= 16 and value fits in length bits.
  22056. */
  22057. function send_bits(s, value, length) {
  22058. if (s.bi_valid > (Buf_size - length)) {
  22059. s.bi_buf |= (value << s.bi_valid) & 0xffff;
  22060. put_short(s, s.bi_buf);
  22061. s.bi_buf = value >> (Buf_size - s.bi_valid);
  22062. s.bi_valid += length - Buf_size;
  22063. } else {
  22064. s.bi_buf |= (value << s.bi_valid) & 0xffff;
  22065. s.bi_valid += length;
  22066. }
  22067. }
  22068. function send_code(s, c, tree) {
  22069. send_bits(s, tree[c*2]/*.Code*/, tree[c*2 + 1]/*.Len*/);
  22070. }
  22071. /* ===========================================================================
  22072. * Reverse the first len bits of a code, using straightforward code (a faster
  22073. * method would use a table)
  22074. * IN assertion: 1 <= len <= 15
  22075. */
  22076. function bi_reverse(code, len) {
  22077. var res = 0;
  22078. do {
  22079. res |= code & 1;
  22080. code >>>= 1;
  22081. res <<= 1;
  22082. } while (--len > 0);
  22083. return res >>> 1;
  22084. }
  22085. /* ===========================================================================
  22086. * Flush the bit buffer, keeping at most 7 bits in it.
  22087. */
  22088. function bi_flush(s) {
  22089. if (s.bi_valid === 16) {
  22090. put_short(s, s.bi_buf);
  22091. s.bi_buf = 0;
  22092. s.bi_valid = 0;
  22093. } else if (s.bi_valid >= 8) {
  22094. s.pending_buf[s.pending++] = s.bi_buf & 0xff;
  22095. s.bi_buf >>= 8;
  22096. s.bi_valid -= 8;
  22097. }
  22098. }
  22099. /* ===========================================================================
  22100. * Compute the optimal bit lengths for a tree and update the total bit length
  22101. * for the current block.
  22102. * IN assertion: the fields freq and dad are set, heap[heap_max] and
  22103. * above are the tree nodes sorted by increasing frequency.
  22104. * OUT assertions: the field len is set to the optimal bit length, the
  22105. * array bl_count contains the frequencies for each bit length.
  22106. * The length opt_len is updated; static_len is also updated if stree is
  22107. * not null.
  22108. */
  22109. function gen_bitlen(s, desc)
  22110. // deflate_state *s;
  22111. // tree_desc *desc; /* the tree descriptor */
  22112. {
  22113. var tree = desc.dyn_tree;
  22114. var max_code = desc.max_code;
  22115. var stree = desc.stat_desc.static_tree;
  22116. var has_stree = desc.stat_desc.has_stree;
  22117. var extra = desc.stat_desc.extra_bits;
  22118. var base = desc.stat_desc.extra_base;
  22119. var max_length = desc.stat_desc.max_length;
  22120. var h; /* heap index */
  22121. var n, m; /* iterate over the tree elements */
  22122. var bits; /* bit length */
  22123. var xbits; /* extra bits */
  22124. var f; /* frequency */
  22125. var overflow = 0; /* number of elements with bit length too large */
  22126. for (bits = 0; bits <= MAX_BITS; bits++) {
  22127. s.bl_count[bits] = 0;
  22128. }
  22129. /* In a first pass, compute the optimal bit lengths (which may
  22130. * overflow in the case of the bit length tree).
  22131. */
  22132. tree[s.heap[s.heap_max]*2 + 1]/*.Len*/ = 0; /* root of the heap */
  22133. for (h = s.heap_max+1; h < HEAP_SIZE; h++) {
  22134. n = s.heap[h];
  22135. bits = tree[tree[n*2 +1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;
  22136. if (bits > max_length) {
  22137. bits = max_length;
  22138. overflow++;
  22139. }
  22140. tree[n*2 + 1]/*.Len*/ = bits;
  22141. /* We overwrite tree[n].Dad which is no longer needed */
  22142. if (n > max_code) { continue; } /* not a leaf node */
  22143. s.bl_count[bits]++;
  22144. xbits = 0;
  22145. if (n >= base) {
  22146. xbits = extra[n-base];
  22147. }
  22148. f = tree[n * 2]/*.Freq*/;
  22149. s.opt_len += f * (bits + xbits);
  22150. if (has_stree) {
  22151. s.static_len += f * (stree[n*2 + 1]/*.Len*/ + xbits);
  22152. }
  22153. }
  22154. if (overflow === 0) { return; }
  22155. // Trace((stderr,"\nbit length overflow\n"));
  22156. /* This happens for example on obj2 and pic of the Calgary corpus */
  22157. /* Find the first bit length which could increase: */
  22158. do {
  22159. bits = max_length-1;
  22160. while (s.bl_count[bits] === 0) { bits--; }
  22161. s.bl_count[bits]--; /* move one leaf down the tree */
  22162. s.bl_count[bits+1] += 2; /* move one overflow item as its brother */
  22163. s.bl_count[max_length]--;
  22164. /* The brother of the overflow item also moves one step up,
  22165. * but this does not affect bl_count[max_length]
  22166. */
  22167. overflow -= 2;
  22168. } while (overflow > 0);
  22169. /* Now recompute all bit lengths, scanning in increasing frequency.
  22170. * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
  22171. * lengths instead of fixing only the wrong ones. This idea is taken
  22172. * from 'ar' written by Haruhiko Okumura.)
  22173. */
  22174. for (bits = max_length; bits !== 0; bits--) {
  22175. n = s.bl_count[bits];
  22176. while (n !== 0) {
  22177. m = s.heap[--h];
  22178. if (m > max_code) { continue; }
  22179. if (tree[m*2 + 1]/*.Len*/ !== bits) {
  22180. // Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
  22181. s.opt_len += (bits - tree[m*2 + 1]/*.Len*/)*tree[m*2]/*.Freq*/;
  22182. tree[m*2 + 1]/*.Len*/ = bits;
  22183. }
  22184. n--;
  22185. }
  22186. }
  22187. }
  22188. /* ===========================================================================
  22189. * Generate the codes for a given tree and bit counts (which need not be
  22190. * optimal).
  22191. * IN assertion: the array bl_count contains the bit length statistics for
  22192. * the given tree and the field len is set for all tree elements.
  22193. * OUT assertion: the field code is set for all tree elements of non
  22194. * zero code length.
  22195. */
  22196. function gen_codes(tree, max_code, bl_count)
  22197. // ct_data *tree; /* the tree to decorate */
  22198. // int max_code; /* largest code with non zero frequency */
  22199. // ushf *bl_count; /* number of codes at each bit length */
  22200. {
  22201. var next_code = new Array(MAX_BITS+1); /* next code value for each bit length */
  22202. var code = 0; /* running code value */
  22203. var bits; /* bit index */
  22204. var n; /* code index */
  22205. /* The distribution counts are first used to generate the code values
  22206. * without bit reversal.
  22207. */
  22208. for (bits = 1; bits <= MAX_BITS; bits++) {
  22209. next_code[bits] = code = (code + bl_count[bits-1]) << 1;
  22210. }
  22211. /* Check that the bit counts in bl_count are consistent. The last code
  22212. * must be all ones.
  22213. */
  22214. //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
  22215. // "inconsistent bit counts");
  22216. //Tracev((stderr,"\ngen_codes: max_code %d ", max_code));
  22217. for (n = 0; n <= max_code; n++) {
  22218. var len = tree[n*2 + 1]/*.Len*/;
  22219. if (len === 0) { continue; }
  22220. /* Now reverse the bits */
  22221. tree[n*2]/*.Code*/ = bi_reverse(next_code[len]++, len);
  22222. //Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
  22223. // n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
  22224. }
  22225. }
  22226. /* ===========================================================================
  22227. * Initialize the various 'constant' tables.
  22228. */
  22229. function tr_static_init() {
  22230. var n; /* iterates over tree elements */
  22231. var bits; /* bit counter */
  22232. var length; /* length value */
  22233. var code; /* code value */
  22234. var dist; /* distance index */
  22235. var bl_count = new Array(MAX_BITS+1);
  22236. /* number of codes at each bit length for an optimal tree */
  22237. // do check in _tr_init()
  22238. //if (static_init_done) return;
  22239. /* For some embedded targets, global variables are not initialized: */
  22240. /*#ifdef NO_INIT_GLOBAL_POINTERS
  22241. static_l_desc.static_tree = static_ltree;
  22242. static_l_desc.extra_bits = extra_lbits;
  22243. static_d_desc.static_tree = static_dtree;
  22244. static_d_desc.extra_bits = extra_dbits;
  22245. static_bl_desc.extra_bits = extra_blbits;
  22246. #endif*/
  22247. /* Initialize the mapping length (0..255) -> length code (0..28) */
  22248. length = 0;
  22249. for (code = 0; code < LENGTH_CODES-1; code++) {
  22250. base_length[code] = length;
  22251. for (n = 0; n < (1<<extra_lbits[code]); n++) {
  22252. _length_code[length++] = code;
  22253. }
  22254. }
  22255. //Assert (length == 256, "tr_static_init: length != 256");
  22256. /* Note that the length 255 (match length 258) can be represented
  22257. * in two different ways: code 284 + 5 bits or code 285, so we
  22258. * overwrite length_code[255] to use the best encoding:
  22259. */
  22260. _length_code[length-1] = code;
  22261. /* Initialize the mapping dist (0..32K) -> dist code (0..29) */
  22262. dist = 0;
  22263. for (code = 0 ; code < 16; code++) {
  22264. base_dist[code] = dist;
  22265. for (n = 0; n < (1<<extra_dbits[code]); n++) {
  22266. _dist_code[dist++] = code;
  22267. }
  22268. }
  22269. //Assert (dist == 256, "tr_static_init: dist != 256");
  22270. dist >>= 7; /* from now on, all distances are divided by 128 */
  22271. for (; code < D_CODES; code++) {
  22272. base_dist[code] = dist << 7;
  22273. for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) {
  22274. _dist_code[256 + dist++] = code;
  22275. }
  22276. }
  22277. //Assert (dist == 256, "tr_static_init: 256+dist != 512");
  22278. /* Construct the codes of the static literal tree */
  22279. for (bits = 0; bits <= MAX_BITS; bits++) {
  22280. bl_count[bits] = 0;
  22281. }
  22282. n = 0;
  22283. while (n <= 143) {
  22284. static_ltree[n*2 + 1]/*.Len*/ = 8;
  22285. n++;
  22286. bl_count[8]++;
  22287. }
  22288. while (n <= 255) {
  22289. static_ltree[n*2 + 1]/*.Len*/ = 9;
  22290. n++;
  22291. bl_count[9]++;
  22292. }
  22293. while (n <= 279) {
  22294. static_ltree[n*2 + 1]/*.Len*/ = 7;
  22295. n++;
  22296. bl_count[7]++;
  22297. }
  22298. while (n <= 287) {
  22299. static_ltree[n*2 + 1]/*.Len*/ = 8;
  22300. n++;
  22301. bl_count[8]++;
  22302. }
  22303. /* Codes 286 and 287 do not exist, but we must include them in the
  22304. * tree construction to get a canonical Huffman tree (longest code
  22305. * all ones)
  22306. */
  22307. gen_codes(static_ltree, L_CODES+1, bl_count);
  22308. /* The static distance tree is trivial: */
  22309. for (n = 0; n < D_CODES; n++) {
  22310. static_dtree[n*2 + 1]/*.Len*/ = 5;
  22311. static_dtree[n*2]/*.Code*/ = bi_reverse(n, 5);
  22312. }
  22313. // Now data ready and we can init static trees
  22314. static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS);
  22315. static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS);
  22316. static_bl_desc =new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS);
  22317. //static_init_done = true;
  22318. }
  22319. /* ===========================================================================
  22320. * Initialize a new block.
  22321. */
  22322. function init_block(s) {
  22323. var n; /* iterates over tree elements */
  22324. /* Initialize the trees. */
  22325. for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n*2]/*.Freq*/ = 0; }
  22326. for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n*2]/*.Freq*/ = 0; }
  22327. for (n = 0; n < BL_CODES; n++) { s.bl_tree[n*2]/*.Freq*/ = 0; }
  22328. s.dyn_ltree[END_BLOCK*2]/*.Freq*/ = 1;
  22329. s.opt_len = s.static_len = 0;
  22330. s.last_lit = s.matches = 0;
  22331. }
  22332. /* ===========================================================================
  22333. * Flush the bit buffer and align the output on a byte boundary
  22334. */
  22335. function bi_windup(s)
  22336. {
  22337. if (s.bi_valid > 8) {
  22338. put_short(s, s.bi_buf);
  22339. } else if (s.bi_valid > 0) {
  22340. //put_byte(s, (Byte)s->bi_buf);
  22341. s.pending_buf[s.pending++] = s.bi_buf;
  22342. }
  22343. s.bi_buf = 0;
  22344. s.bi_valid = 0;
  22345. }
  22346. /* ===========================================================================
  22347. * Copy a stored block, storing first the length and its
  22348. * one's complement if requested.
  22349. */
  22350. function copy_block(s, buf, len, header)
  22351. //DeflateState *s;
  22352. //charf *buf; /* the input data */
  22353. //unsigned len; /* its length */
  22354. //int header; /* true if block header must be written */
  22355. {
  22356. bi_windup(s); /* align on byte boundary */
  22357. if (header) {
  22358. put_short(s, len);
  22359. put_short(s, ~len);
  22360. }
  22361. // while (len--) {
  22362. // put_byte(s, *buf++);
  22363. // }
  22364. utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);
  22365. s.pending += len;
  22366. }
  22367. /* ===========================================================================
  22368. * Compares to subtrees, using the tree depth as tie breaker when
  22369. * the subtrees have equal frequency. This minimizes the worst case length.
  22370. */
  22371. function smaller(tree, n, m, depth) {
  22372. var _n2 = n*2;
  22373. var _m2 = m*2;
  22374. return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||
  22375. (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));
  22376. }
  22377. /* ===========================================================================
  22378. * Restore the heap property by moving down the tree starting at node k,
  22379. * exchanging a node with the smallest of its two sons if necessary, stopping
  22380. * when the heap property is re-established (each father smaller than its
  22381. * two sons).
  22382. */
  22383. function pqdownheap(s, tree, k)
  22384. // deflate_state *s;
  22385. // ct_data *tree; /* the tree to restore */
  22386. // int k; /* node to move down */
  22387. {
  22388. var v = s.heap[k];
  22389. var j = k << 1; /* left son of k */
  22390. while (j <= s.heap_len) {
  22391. /* Set j to the smallest of the two sons: */
  22392. if (j < s.heap_len &&
  22393. smaller(tree, s.heap[j+1], s.heap[j], s.depth)) {
  22394. j++;
  22395. }
  22396. /* Exit if v is smaller than both sons */
  22397. if (smaller(tree, v, s.heap[j], s.depth)) { break; }
  22398. /* Exchange v with the smallest son */
  22399. s.heap[k] = s.heap[j];
  22400. k = j;
  22401. /* And continue down the tree, setting j to the left son of k */
  22402. j <<= 1;
  22403. }
  22404. s.heap[k] = v;
  22405. }
  22406. // inlined manually
  22407. // var SMALLEST = 1;
  22408. /* ===========================================================================
  22409. * Send the block data compressed using the given Huffman trees
  22410. */
  22411. function compress_block(s, ltree, dtree)
  22412. // deflate_state *s;
  22413. // const ct_data *ltree; /* literal tree */
  22414. // const ct_data *dtree; /* distance tree */
  22415. {
  22416. var dist; /* distance of matched string */
  22417. var lc; /* match length or unmatched char (if dist == 0) */
  22418. var lx = 0; /* running index in l_buf */
  22419. var code; /* the code to send */
  22420. var extra; /* number of extra bits to send */
  22421. if (s.last_lit !== 0) {
  22422. do {
  22423. dist = (s.pending_buf[s.d_buf + lx*2] << 8) | (s.pending_buf[s.d_buf + lx*2 + 1]);
  22424. lc = s.pending_buf[s.l_buf + lx];
  22425. lx++;
  22426. if (dist === 0) {
  22427. send_code(s, lc, ltree); /* send a literal byte */
  22428. //Tracecv(isgraph(lc), (stderr," '%c' ", lc));
  22429. } else {
  22430. /* Here, lc is the match length - MIN_MATCH */
  22431. code = _length_code[lc];
  22432. send_code(s, code+LITERALS+1, ltree); /* send the length code */
  22433. extra = extra_lbits[code];
  22434. if (extra !== 0) {
  22435. lc -= base_length[code];
  22436. send_bits(s, lc, extra); /* send the extra length bits */
  22437. }
  22438. dist--; /* dist is now the match distance - 1 */
  22439. code = d_code(dist);
  22440. //Assert (code < D_CODES, "bad d_code");
  22441. send_code(s, code, dtree); /* send the distance code */
  22442. extra = extra_dbits[code];
  22443. if (extra !== 0) {
  22444. dist -= base_dist[code];
  22445. send_bits(s, dist, extra); /* send the extra distance bits */
  22446. }
  22447. } /* literal or match pair ? */
  22448. /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
  22449. //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,
  22450. // "pendingBuf overflow");
  22451. } while (lx < s.last_lit);
  22452. }
  22453. send_code(s, END_BLOCK, ltree);
  22454. }
  22455. /* ===========================================================================
  22456. * Construct one Huffman tree and assigns the code bit strings and lengths.
  22457. * Update the total bit length for the current block.
  22458. * IN assertion: the field freq is set for all tree elements.
  22459. * OUT assertions: the fields len and code are set to the optimal bit length
  22460. * and corresponding code. The length opt_len is updated; static_len is
  22461. * also updated if stree is not null. The field max_code is set.
  22462. */
  22463. function build_tree(s, desc)
  22464. // deflate_state *s;
  22465. // tree_desc *desc; /* the tree descriptor */
  22466. {
  22467. var tree = desc.dyn_tree;
  22468. var stree = desc.stat_desc.static_tree;
  22469. var has_stree = desc.stat_desc.has_stree;
  22470. var elems = desc.stat_desc.elems;
  22471. var n, m; /* iterate over heap elements */
  22472. var max_code = -1; /* largest code with non zero frequency */
  22473. var node; /* new node being created */
  22474. /* Construct the initial heap, with least frequent element in
  22475. * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
  22476. * heap[0] is not used.
  22477. */
  22478. s.heap_len = 0;
  22479. s.heap_max = HEAP_SIZE;
  22480. for (n = 0; n < elems; n++) {
  22481. if (tree[n * 2]/*.Freq*/ !== 0) {
  22482. s.heap[++s.heap_len] = max_code = n;
  22483. s.depth[n] = 0;
  22484. } else {
  22485. tree[n*2 + 1]/*.Len*/ = 0;
  22486. }
  22487. }
  22488. /* The pkzip format requires that at least one distance code exists,
  22489. * and that at least one bit should be sent even if there is only one
  22490. * possible code. So to avoid special checks later on we force at least
  22491. * two codes of non zero frequency.
  22492. */
  22493. while (s.heap_len < 2) {
  22494. node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);
  22495. tree[node * 2]/*.Freq*/ = 1;
  22496. s.depth[node] = 0;
  22497. s.opt_len--;
  22498. if (has_stree) {
  22499. s.static_len -= stree[node*2 + 1]/*.Len*/;
  22500. }
  22501. /* node is 0 or 1 so it does not have extra bits */
  22502. }
  22503. desc.max_code = max_code;
  22504. /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
  22505. * establish sub-heaps of increasing lengths:
  22506. */
  22507. for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }
  22508. /* Construct the Huffman tree by repeatedly combining the least two
  22509. * frequent nodes.
  22510. */
  22511. node = elems; /* next internal node of the tree */
  22512. do {
  22513. //pqremove(s, tree, n); /* n = node of least frequency */
  22514. /*** pqremove ***/
  22515. n = s.heap[1/*SMALLEST*/];
  22516. s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];
  22517. pqdownheap(s, tree, 1/*SMALLEST*/);
  22518. /***/
  22519. m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */
  22520. s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */
  22521. s.heap[--s.heap_max] = m;
  22522. /* Create a new node father of n and m */
  22523. tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;
  22524. s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;
  22525. tree[n*2 + 1]/*.Dad*/ = tree[m*2 + 1]/*.Dad*/ = node;
  22526. /* and insert the new node in the heap */
  22527. s.heap[1/*SMALLEST*/] = node++;
  22528. pqdownheap(s, tree, 1/*SMALLEST*/);
  22529. } while (s.heap_len >= 2);
  22530. s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];
  22531. /* At this point, the fields freq and dad are set. We can now
  22532. * generate the bit lengths.
  22533. */
  22534. gen_bitlen(s, desc);
  22535. /* The field len is now set, we can generate the bit codes */
  22536. gen_codes(tree, max_code, s.bl_count);
  22537. }
  22538. /* ===========================================================================
  22539. * Scan a literal or distance tree to determine the frequencies of the codes
  22540. * in the bit length tree.
  22541. */
  22542. function scan_tree(s, tree, max_code)
  22543. // deflate_state *s;
  22544. // ct_data *tree; /* the tree to be scanned */
  22545. // int max_code; /* and its largest code of non zero frequency */
  22546. {
  22547. var n; /* iterates over all tree elements */
  22548. var prevlen = -1; /* last emitted length */
  22549. var curlen; /* length of current code */
  22550. var nextlen = tree[0*2 + 1]/*.Len*/; /* length of next code */
  22551. var count = 0; /* repeat count of the current code */
  22552. var max_count = 7; /* max repeat count */
  22553. var min_count = 4; /* min repeat count */
  22554. if (nextlen === 0) {
  22555. max_count = 138;
  22556. min_count = 3;
  22557. }
  22558. tree[(max_code+1)*2 + 1]/*.Len*/ = 0xffff; /* guard */
  22559. for (n = 0; n <= max_code; n++) {
  22560. curlen = nextlen;
  22561. nextlen = tree[(n+1)*2 + 1]/*.Len*/;
  22562. if (++count < max_count && curlen === nextlen) {
  22563. continue;
  22564. } else if (count < min_count) {
  22565. s.bl_tree[curlen * 2]/*.Freq*/ += count;
  22566. } else if (curlen !== 0) {
  22567. if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }
  22568. s.bl_tree[REP_3_6*2]/*.Freq*/++;
  22569. } else if (count <= 10) {
  22570. s.bl_tree[REPZ_3_10*2]/*.Freq*/++;
  22571. } else {
  22572. s.bl_tree[REPZ_11_138*2]/*.Freq*/++;
  22573. }
  22574. count = 0;
  22575. prevlen = curlen;
  22576. if (nextlen === 0) {
  22577. max_count = 138;
  22578. min_count = 3;
  22579. } else if (curlen === nextlen) {
  22580. max_count = 6;
  22581. min_count = 3;
  22582. } else {
  22583. max_count = 7;
  22584. min_count = 4;
  22585. }
  22586. }
  22587. }
  22588. /* ===========================================================================
  22589. * Send a literal or distance tree in compressed form, using the codes in
  22590. * bl_tree.
  22591. */
  22592. function send_tree(s, tree, max_code)
  22593. // deflate_state *s;
  22594. // ct_data *tree; /* the tree to be scanned */
  22595. // int max_code; /* and its largest code of non zero frequency */
  22596. {
  22597. var n; /* iterates over all tree elements */
  22598. var prevlen = -1; /* last emitted length */
  22599. var curlen; /* length of current code */
  22600. var nextlen = tree[0*2 + 1]/*.Len*/; /* length of next code */
  22601. var count = 0; /* repeat count of the current code */
  22602. var max_count = 7; /* max repeat count */
  22603. var min_count = 4; /* min repeat count */
  22604. /* tree[max_code+1].Len = -1; */ /* guard already set */
  22605. if (nextlen === 0) {
  22606. max_count = 138;
  22607. min_count = 3;
  22608. }
  22609. for (n = 0; n <= max_code; n++) {
  22610. curlen = nextlen;
  22611. nextlen = tree[(n+1)*2 + 1]/*.Len*/;
  22612. if (++count < max_count && curlen === nextlen) {
  22613. continue;
  22614. } else if (count < min_count) {
  22615. do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);
  22616. } else if (curlen !== 0) {
  22617. if (curlen !== prevlen) {
  22618. send_code(s, curlen, s.bl_tree);
  22619. count--;
  22620. }
  22621. //Assert(count >= 3 && count <= 6, " 3_6?");
  22622. send_code(s, REP_3_6, s.bl_tree);
  22623. send_bits(s, count-3, 2);
  22624. } else if (count <= 10) {
  22625. send_code(s, REPZ_3_10, s.bl_tree);
  22626. send_bits(s, count-3, 3);
  22627. } else {
  22628. send_code(s, REPZ_11_138, s.bl_tree);
  22629. send_bits(s, count-11, 7);
  22630. }
  22631. count = 0;
  22632. prevlen = curlen;
  22633. if (nextlen === 0) {
  22634. max_count = 138;
  22635. min_count = 3;
  22636. } else if (curlen === nextlen) {
  22637. max_count = 6;
  22638. min_count = 3;
  22639. } else {
  22640. max_count = 7;
  22641. min_count = 4;
  22642. }
  22643. }
  22644. }
  22645. /* ===========================================================================
  22646. * Construct the Huffman tree for the bit lengths and return the index in
  22647. * bl_order of the last bit length code to send.
  22648. */
  22649. function build_bl_tree(s) {
  22650. var max_blindex; /* index of last bit length code of non zero freq */
  22651. /* Determine the bit length frequencies for literal and distance trees */
  22652. scan_tree(s, s.dyn_ltree, s.l_desc.max_code);
  22653. scan_tree(s, s.dyn_dtree, s.d_desc.max_code);
  22654. /* Build the bit length tree: */
  22655. build_tree(s, s.bl_desc);
  22656. /* opt_len now includes the length of the tree representations, except
  22657. * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
  22658. */
  22659. /* Determine the number of bit length codes to send. The pkzip format
  22660. * requires that at least 4 bit length codes be sent. (appnote.txt says
  22661. * 3 but the actual value used is 4.)
  22662. */
  22663. for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) {
  22664. if (s.bl_tree[bl_order[max_blindex]*2 + 1]/*.Len*/ !== 0) {
  22665. break;
  22666. }
  22667. }
  22668. /* Update opt_len to include the bit length tree and counts */
  22669. s.opt_len += 3*(max_blindex+1) + 5+5+4;
  22670. //Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
  22671. // s->opt_len, s->static_len));
  22672. return max_blindex;
  22673. }
  22674. /* ===========================================================================
  22675. * Send the header for a block using dynamic Huffman trees: the counts, the
  22676. * lengths of the bit length codes, the literal tree and the distance tree.
  22677. * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
  22678. */
  22679. function send_all_trees(s, lcodes, dcodes, blcodes)
  22680. // deflate_state *s;
  22681. // int lcodes, dcodes, blcodes; /* number of codes for each tree */
  22682. {
  22683. var rank; /* index in bl_order */
  22684. //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
  22685. //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
  22686. // "too many codes");
  22687. //Tracev((stderr, "\nbl counts: "));
  22688. send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */
  22689. send_bits(s, dcodes-1, 5);
  22690. send_bits(s, blcodes-4, 4); /* not -3 as stated in appnote.txt */
  22691. for (rank = 0; rank < blcodes; rank++) {
  22692. //Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
  22693. send_bits(s, s.bl_tree[bl_order[rank]*2 + 1]/*.Len*/, 3);
  22694. }
  22695. //Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent));
  22696. send_tree(s, s.dyn_ltree, lcodes-1); /* literal tree */
  22697. //Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent));
  22698. send_tree(s, s.dyn_dtree, dcodes-1); /* distance tree */
  22699. //Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent));
  22700. }
  22701. /* ===========================================================================
  22702. * Check if the data type is TEXT or BINARY, using the following algorithm:
  22703. * - TEXT if the two conditions below are satisfied:
  22704. * a) There are no non-portable control characters belonging to the
  22705. * "black list" (0..6, 14..25, 28..31).
  22706. * b) There is at least one printable character belonging to the
  22707. * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).
  22708. * - BINARY otherwise.
  22709. * - The following partially-portable control characters form a
  22710. * "gray list" that is ignored in this detection algorithm:
  22711. * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).
  22712. * IN assertion: the fields Freq of dyn_ltree are set.
  22713. */
  22714. function detect_data_type(s) {
  22715. /* black_mask is the bit mask of black-listed bytes
  22716. * set bits 0..6, 14..25, and 28..31
  22717. * 0xf3ffc07f = binary 11110011111111111100000001111111
  22718. */
  22719. var black_mask = 0xf3ffc07f;
  22720. var n;
  22721. /* Check for non-textual ("black-listed") bytes. */
  22722. for (n = 0; n <= 31; n++, black_mask >>>= 1) {
  22723. if ((black_mask & 1) && (s.dyn_ltree[n*2]/*.Freq*/ !== 0)) {
  22724. return Z_BINARY;
  22725. }
  22726. }
  22727. /* Check for textual ("white-listed") bytes. */
  22728. if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||
  22729. s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {
  22730. return Z_TEXT;
  22731. }
  22732. for (n = 32; n < LITERALS; n++) {
  22733. if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {
  22734. return Z_TEXT;
  22735. }
  22736. }
  22737. /* There are no "black-listed" or "white-listed" bytes:
  22738. * this stream either is empty or has tolerated ("gray-listed") bytes only.
  22739. */
  22740. return Z_BINARY;
  22741. }
  22742. var static_init_done = false;
  22743. /* ===========================================================================
  22744. * Initialize the tree data structures for a new zlib stream.
  22745. */
  22746. function _tr_init(s)
  22747. {
  22748. if (!static_init_done) {
  22749. tr_static_init();
  22750. static_init_done = true;
  22751. }
  22752. s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);
  22753. s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);
  22754. s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);
  22755. s.bi_buf = 0;
  22756. s.bi_valid = 0;
  22757. /* Initialize the first block of the first file: */
  22758. init_block(s);
  22759. }
  22760. /* ===========================================================================
  22761. * Send a stored block
  22762. */
  22763. function _tr_stored_block(s, buf, stored_len, last)
  22764. //DeflateState *s;
  22765. //charf *buf; /* input block */
  22766. //ulg stored_len; /* length of input block */
  22767. //int last; /* one if this is the last block for a file */
  22768. {
  22769. send_bits(s, (STORED_BLOCK<<1)+(last ? 1 : 0), 3); /* send block type */
  22770. copy_block(s, buf, stored_len, true); /* with header */
  22771. }
  22772. /* ===========================================================================
  22773. * Send one empty static block to give enough lookahead for inflate.
  22774. * This takes 10 bits, of which 7 may remain in the bit buffer.
  22775. */
  22776. function _tr_align(s) {
  22777. send_bits(s, STATIC_TREES<<1, 3);
  22778. send_code(s, END_BLOCK, static_ltree);
  22779. bi_flush(s);
  22780. }
  22781. /* ===========================================================================
  22782. * Determine the best encoding for the current block: dynamic trees, static
  22783. * trees or store, and output the encoded block to the zip file.
  22784. */
  22785. function _tr_flush_block(s, buf, stored_len, last)
  22786. //DeflateState *s;
  22787. //charf *buf; /* input block, or NULL if too old */
  22788. //ulg stored_len; /* length of input block */
  22789. //int last; /* one if this is the last block for a file */
  22790. {
  22791. var opt_lenb, static_lenb; /* opt_len and static_len in bytes */
  22792. var max_blindex = 0; /* index of last bit length code of non zero freq */
  22793. /* Build the Huffman trees unless a stored block is forced */
  22794. if (s.level > 0) {
  22795. /* Check if the file is binary or text */
  22796. if (s.strm.data_type === Z_UNKNOWN) {
  22797. s.strm.data_type = detect_data_type(s);
  22798. }
  22799. /* Construct the literal and distance trees */
  22800. build_tree(s, s.l_desc);
  22801. // Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len,
  22802. // s->static_len));
  22803. build_tree(s, s.d_desc);
  22804. // Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len,
  22805. // s->static_len));
  22806. /* At this point, opt_len and static_len are the total bit lengths of
  22807. * the compressed block data, excluding the tree representations.
  22808. */
  22809. /* Build the bit length tree for the above two trees, and get the index
  22810. * in bl_order of the last bit length code to send.
  22811. */
  22812. max_blindex = build_bl_tree(s);
  22813. /* Determine the best encoding. Compute the block lengths in bytes. */
  22814. opt_lenb = (s.opt_len+3+7) >>> 3;
  22815. static_lenb = (s.static_len+3+7) >>> 3;
  22816. // Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
  22817. // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
  22818. // s->last_lit));
  22819. if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }
  22820. } else {
  22821. // Assert(buf != (char*)0, "lost buf");
  22822. opt_lenb = static_lenb = stored_len + 5; /* force a stored block */
  22823. }
  22824. if ((stored_len+4 <= opt_lenb) && (buf !== -1)) {
  22825. /* 4: two words for the lengths */
  22826. /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
  22827. * Otherwise we can't have processed more than WSIZE input bytes since
  22828. * the last block flush, because compression would have been
  22829. * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
  22830. * transform a block into a stored block.
  22831. */
  22832. _tr_stored_block(s, buf, stored_len, last);
  22833. } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {
  22834. send_bits(s, (STATIC_TREES<<1) + (last ? 1 : 0), 3);
  22835. compress_block(s, static_ltree, static_dtree);
  22836. } else {
  22837. send_bits(s, (DYN_TREES<<1) + (last ? 1 : 0), 3);
  22838. send_all_trees(s, s.l_desc.max_code+1, s.d_desc.max_code+1, max_blindex+1);
  22839. compress_block(s, s.dyn_ltree, s.dyn_dtree);
  22840. }
  22841. // Assert (s->compressed_len == s->bits_sent, "bad compressed size");
  22842. /* The above check is made mod 2^32, for files larger than 512 MB
  22843. * and uLong implemented on 32 bits.
  22844. */
  22845. init_block(s);
  22846. if (last) {
  22847. bi_windup(s);
  22848. }
  22849. // Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3,
  22850. // s->compressed_len-7*last));
  22851. }
  22852. /* ===========================================================================
  22853. * Save the match info and tally the frequency counts. Return true if
  22854. * the current block must be flushed.
  22855. */
  22856. function _tr_tally(s, dist, lc)
  22857. // deflate_state *s;
  22858. // unsigned dist; /* distance of matched string */
  22859. // unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */
  22860. {
  22861. //var out_length, in_length, dcode;
  22862. s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff;
  22863. s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;
  22864. s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;
  22865. s.last_lit++;
  22866. if (dist === 0) {
  22867. /* lc is the unmatched char */
  22868. s.dyn_ltree[lc*2]/*.Freq*/++;
  22869. } else {
  22870. s.matches++;
  22871. /* Here, lc is the match length - MIN_MATCH */
  22872. dist--; /* dist = match distance - 1 */
  22873. //Assert((ush)dist < (ush)MAX_DIST(s) &&
  22874. // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&
  22875. // (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match");
  22876. s.dyn_ltree[(_length_code[lc]+LITERALS+1) * 2]/*.Freq*/++;
  22877. s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;
  22878. }
  22879. // (!) This block is disabled in zlib defailts,
  22880. // don't enable it for binary compatibility
  22881. //#ifdef TRUNCATE_BLOCK
  22882. // /* Try to guess if it is profitable to stop the current block here */
  22883. // if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {
  22884. // /* Compute an upper bound for the compressed length */
  22885. // out_length = s.last_lit*8;
  22886. // in_length = s.strstart - s.block_start;
  22887. //
  22888. // for (dcode = 0; dcode < D_CODES; dcode++) {
  22889. // out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);
  22890. // }
  22891. // out_length >>>= 3;
  22892. // //Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
  22893. // // s->last_lit, in_length, out_length,
  22894. // // 100L - out_length*100L/in_length));
  22895. // if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {
  22896. // return true;
  22897. // }
  22898. // }
  22899. //#endif
  22900. return (s.last_lit === s.lit_bufsize-1);
  22901. /* We avoid equality with lit_bufsize because of wraparound at 64K
  22902. * on 16 bit machines and because stored blocks are restricted to
  22903. * 64K-1 bytes.
  22904. */
  22905. }
  22906. exports._tr_init = _tr_init;
  22907. exports._tr_stored_block = _tr_stored_block;
  22908. exports._tr_flush_block = _tr_flush_block;
  22909. exports._tr_tally = _tr_tally;
  22910. exports._tr_align = _tr_align;
  22911. /***/ },
  22912. /* 54 */
  22913. /***/ function(module, exports) {
  22914. 'use strict';
  22915. // Note: adler32 takes 12% for level 0 and 2% for level 6.
  22916. // It doesn't worth to make additional optimizationa as in original.
  22917. // Small size is preferable.
  22918. function adler32(adler, buf, len, pos) {
  22919. var s1 = (adler & 0xffff) |0,
  22920. s2 = ((adler >>> 16) & 0xffff) |0,
  22921. n = 0;
  22922. while (len !== 0) {
  22923. // Set limit ~ twice less than 5552, to keep
  22924. // s2 in 31-bits, because we force signed ints.
  22925. // in other case %= will fail.
  22926. n = len > 2000 ? 2000 : len;
  22927. len -= n;
  22928. do {
  22929. s1 = (s1 + buf[pos++]) |0;
  22930. s2 = (s2 + s1) |0;
  22931. } while (--n);
  22932. s1 %= 65521;
  22933. s2 %= 65521;
  22934. }
  22935. return (s1 | (s2 << 16)) |0;
  22936. }
  22937. module.exports = adler32;
  22938. /***/ },
  22939. /* 55 */
  22940. /***/ function(module, exports) {
  22941. 'use strict';
  22942. // Note: we can't get significant speed boost here.
  22943. // So write code to minimize size - no pregenerated tables
  22944. // and array tools dependencies.
  22945. // Use ordinary array, since untyped makes no boost here
  22946. function makeTable() {
  22947. var c, table = [];
  22948. for (var n =0; n < 256; n++) {
  22949. c = n;
  22950. for (var k =0; k < 8; k++) {
  22951. c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));
  22952. }
  22953. table[n] = c;
  22954. }
  22955. return table;
  22956. }
  22957. // Create table on load. Just 255 signed longs. Not a problem.
  22958. var crcTable = makeTable();
  22959. function crc32(crc, buf, len, pos) {
  22960. var t = crcTable,
  22961. end = pos + len;
  22962. crc = crc ^ (-1);
  22963. for (var i = pos; i < end; i++) {
  22964. crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];
  22965. }
  22966. return (crc ^ (-1)); // >>> 0;
  22967. }
  22968. module.exports = crc32;
  22969. /***/ },
  22970. /* 56 */
  22971. /***/ function(module, exports, __webpack_require__) {
  22972. 'use strict';
  22973. var utils = __webpack_require__(52);
  22974. var adler32 = __webpack_require__(54);
  22975. var crc32 = __webpack_require__(55);
  22976. var inflate_fast = __webpack_require__(57);
  22977. var inflate_table = __webpack_require__(58);
  22978. var CODES = 0;
  22979. var LENS = 1;
  22980. var DISTS = 2;
  22981. /* Public constants ==========================================================*/
  22982. /* ===========================================================================*/
  22983. /* Allowed flush values; see deflate() and inflate() below for details */
  22984. //var Z_NO_FLUSH = 0;
  22985. //var Z_PARTIAL_FLUSH = 1;
  22986. //var Z_SYNC_FLUSH = 2;
  22987. //var Z_FULL_FLUSH = 3;
  22988. var Z_FINISH = 4;
  22989. var Z_BLOCK = 5;
  22990. var Z_TREES = 6;
  22991. /* Return codes for the compression/decompression functions. Negative values
  22992. * are errors, positive values are used for special but normal events.
  22993. */
  22994. var Z_OK = 0;
  22995. var Z_STREAM_END = 1;
  22996. var Z_NEED_DICT = 2;
  22997. //var Z_ERRNO = -1;
  22998. var Z_STREAM_ERROR = -2;
  22999. var Z_DATA_ERROR = -3;
  23000. var Z_MEM_ERROR = -4;
  23001. var Z_BUF_ERROR = -5;
  23002. //var Z_VERSION_ERROR = -6;
  23003. /* The deflate compression method */
  23004. var Z_DEFLATED = 8;
  23005. /* STATES ====================================================================*/
  23006. /* ===========================================================================*/
  23007. var HEAD = 1; /* i: waiting for magic header */
  23008. var FLAGS = 2; /* i: waiting for method and flags (gzip) */
  23009. var TIME = 3; /* i: waiting for modification time (gzip) */
  23010. var OS = 4; /* i: waiting for extra flags and operating system (gzip) */
  23011. var EXLEN = 5; /* i: waiting for extra length (gzip) */
  23012. var EXTRA = 6; /* i: waiting for extra bytes (gzip) */
  23013. var NAME = 7; /* i: waiting for end of file name (gzip) */
  23014. var COMMENT = 8; /* i: waiting for end of comment (gzip) */
  23015. var HCRC = 9; /* i: waiting for header crc (gzip) */
  23016. var DICTID = 10; /* i: waiting for dictionary check value */
  23017. var DICT = 11; /* waiting for inflateSetDictionary() call */
  23018. var TYPE = 12; /* i: waiting for type bits, including last-flag bit */
  23019. var TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */
  23020. var STORED = 14; /* i: waiting for stored size (length and complement) */
  23021. var COPY_ = 15; /* i/o: same as COPY below, but only first time in */
  23022. var COPY = 16; /* i/o: waiting for input or output to copy stored block */
  23023. var TABLE = 17; /* i: waiting for dynamic block table lengths */
  23024. var LENLENS = 18; /* i: waiting for code length code lengths */
  23025. var CODELENS = 19; /* i: waiting for length/lit and distance code lengths */
  23026. var LEN_ = 20; /* i: same as LEN below, but only first time in */
  23027. var LEN = 21; /* i: waiting for length/lit/eob code */
  23028. var LENEXT = 22; /* i: waiting for length extra bits */
  23029. var DIST = 23; /* i: waiting for distance code */
  23030. var DISTEXT = 24; /* i: waiting for distance extra bits */
  23031. var MATCH = 25; /* o: waiting for output space to copy string */
  23032. var LIT = 26; /* o: waiting for output space to write literal */
  23033. var CHECK = 27; /* i: waiting for 32-bit check value */
  23034. var LENGTH = 28; /* i: waiting for 32-bit length (gzip) */
  23035. var DONE = 29; /* finished check, done -- remain here until reset */
  23036. var BAD = 30; /* got a data error -- remain here until reset */
  23037. var MEM = 31; /* got an inflate() memory error -- remain here until reset */
  23038. var SYNC = 32; /* looking for synchronization bytes to restart inflate() */
  23039. /* ===========================================================================*/
  23040. var ENOUGH_LENS = 852;
  23041. var ENOUGH_DISTS = 592;
  23042. //var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);
  23043. var MAX_WBITS = 15;
  23044. /* 32K LZ77 window */
  23045. var DEF_WBITS = MAX_WBITS;
  23046. function ZSWAP32(q) {
  23047. return (((q >>> 24) & 0xff) +
  23048. ((q >>> 8) & 0xff00) +
  23049. ((q & 0xff00) << 8) +
  23050. ((q & 0xff) << 24));
  23051. }
  23052. function InflateState() {
  23053. this.mode = 0; /* current inflate mode */
  23054. this.last = false; /* true if processing last block */
  23055. this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */
  23056. this.havedict = false; /* true if dictionary provided */
  23057. this.flags = 0; /* gzip header method and flags (0 if zlib) */
  23058. this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */
  23059. this.check = 0; /* protected copy of check value */
  23060. this.total = 0; /* protected copy of output count */
  23061. // TODO: may be {}
  23062. this.head = null; /* where to save gzip header information */
  23063. /* sliding window */
  23064. this.wbits = 0; /* log base 2 of requested window size */
  23065. this.wsize = 0; /* window size or zero if not using window */
  23066. this.whave = 0; /* valid bytes in the window */
  23067. this.wnext = 0; /* window write index */
  23068. this.window = null; /* allocated sliding window, if needed */
  23069. /* bit accumulator */
  23070. this.hold = 0; /* input bit accumulator */
  23071. this.bits = 0; /* number of bits in "in" */
  23072. /* for string and stored block copying */
  23073. this.length = 0; /* literal or length of data to copy */
  23074. this.offset = 0; /* distance back to copy string from */
  23075. /* for table and code decoding */
  23076. this.extra = 0; /* extra bits needed */
  23077. /* fixed and dynamic code tables */
  23078. this.lencode = null; /* starting table for length/literal codes */
  23079. this.distcode = null; /* starting table for distance codes */
  23080. this.lenbits = 0; /* index bits for lencode */
  23081. this.distbits = 0; /* index bits for distcode */
  23082. /* dynamic table building */
  23083. this.ncode = 0; /* number of code length code lengths */
  23084. this.nlen = 0; /* number of length code lengths */
  23085. this.ndist = 0; /* number of distance code lengths */
  23086. this.have = 0; /* number of code lengths in lens[] */
  23087. this.next = null; /* next available space in codes[] */
  23088. this.lens = new utils.Buf16(320); /* temporary storage for code lengths */
  23089. this.work = new utils.Buf16(288); /* work area for code table building */
  23090. /*
  23091. because we don't have pointers in js, we use lencode and distcode directly
  23092. as buffers so we don't need codes
  23093. */
  23094. //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */
  23095. this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */
  23096. this.distdyn = null; /* dynamic table for distance codes (JS specific) */
  23097. this.sane = 0; /* if false, allow invalid distance too far */
  23098. this.back = 0; /* bits back of last unprocessed length/lit */
  23099. this.was = 0; /* initial length of match */
  23100. }
  23101. function inflateResetKeep(strm) {
  23102. var state;
  23103. if (!strm || !strm.state) { return Z_STREAM_ERROR; }
  23104. state = strm.state;
  23105. strm.total_in = strm.total_out = state.total = 0;
  23106. strm.msg = ''; /*Z_NULL*/
  23107. if (state.wrap) { /* to support ill-conceived Java test suite */
  23108. strm.adler = state.wrap & 1;
  23109. }
  23110. state.mode = HEAD;
  23111. state.last = 0;
  23112. state.havedict = 0;
  23113. state.dmax = 32768;
  23114. state.head = null/*Z_NULL*/;
  23115. state.hold = 0;
  23116. state.bits = 0;
  23117. //state.lencode = state.distcode = state.next = state.codes;
  23118. state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);
  23119. state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);
  23120. state.sane = 1;
  23121. state.back = -1;
  23122. //Tracev((stderr, "inflate: reset\n"));
  23123. return Z_OK;
  23124. }
  23125. function inflateReset(strm) {
  23126. var state;
  23127. if (!strm || !strm.state) { return Z_STREAM_ERROR; }
  23128. state = strm.state;
  23129. state.wsize = 0;
  23130. state.whave = 0;
  23131. state.wnext = 0;
  23132. return inflateResetKeep(strm);
  23133. }
  23134. function inflateReset2(strm, windowBits) {
  23135. var wrap;
  23136. var state;
  23137. /* get the state */
  23138. if (!strm || !strm.state) { return Z_STREAM_ERROR; }
  23139. state = strm.state;
  23140. /* extract wrap request from windowBits parameter */
  23141. if (windowBits < 0) {
  23142. wrap = 0;
  23143. windowBits = -windowBits;
  23144. }
  23145. else {
  23146. wrap = (windowBits >> 4) + 1;
  23147. if (windowBits < 48) {
  23148. windowBits &= 15;
  23149. }
  23150. }
  23151. /* set number of window bits, free window if different */
  23152. if (windowBits && (windowBits < 8 || windowBits > 15)) {
  23153. return Z_STREAM_ERROR;
  23154. }
  23155. if (state.window !== null && state.wbits !== windowBits) {
  23156. state.window = null;
  23157. }
  23158. /* update state and reset the rest of it */
  23159. state.wrap = wrap;
  23160. state.wbits = windowBits;
  23161. return inflateReset(strm);
  23162. }
  23163. function inflateInit2(strm, windowBits) {
  23164. var ret;
  23165. var state;
  23166. if (!strm) { return Z_STREAM_ERROR; }
  23167. //strm.msg = Z_NULL; /* in case we return an error */
  23168. state = new InflateState();
  23169. //if (state === Z_NULL) return Z_MEM_ERROR;
  23170. //Tracev((stderr, "inflate: allocated\n"));
  23171. strm.state = state;
  23172. state.window = null/*Z_NULL*/;
  23173. ret = inflateReset2(strm, windowBits);
  23174. if (ret !== Z_OK) {
  23175. strm.state = null/*Z_NULL*/;
  23176. }
  23177. return ret;
  23178. }
  23179. function inflateInit(strm) {
  23180. return inflateInit2(strm, DEF_WBITS);
  23181. }
  23182. /*
  23183. Return state with length and distance decoding tables and index sizes set to
  23184. fixed code decoding. Normally this returns fixed tables from inffixed.h.
  23185. If BUILDFIXED is defined, then instead this routine builds the tables the
  23186. first time it's called, and returns those tables the first time and
  23187. thereafter. This reduces the size of the code by about 2K bytes, in
  23188. exchange for a little execution time. However, BUILDFIXED should not be
  23189. used for threaded applications, since the rewriting of the tables and virgin
  23190. may not be thread-safe.
  23191. */
  23192. var virgin = true;
  23193. var lenfix, distfix; // We have no pointers in JS, so keep tables separate
  23194. function fixedtables(state) {
  23195. /* build fixed huffman tables if first call (may not be thread safe) */
  23196. if (virgin) {
  23197. var sym;
  23198. lenfix = new utils.Buf32(512);
  23199. distfix = new utils.Buf32(32);
  23200. /* literal/length table */
  23201. sym = 0;
  23202. while (sym < 144) { state.lens[sym++] = 8; }
  23203. while (sym < 256) { state.lens[sym++] = 9; }
  23204. while (sym < 280) { state.lens[sym++] = 7; }
  23205. while (sym < 288) { state.lens[sym++] = 8; }
  23206. inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, {bits: 9});
  23207. /* distance table */
  23208. sym = 0;
  23209. while (sym < 32) { state.lens[sym++] = 5; }
  23210. inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, {bits: 5});
  23211. /* do this just once */
  23212. virgin = false;
  23213. }
  23214. state.lencode = lenfix;
  23215. state.lenbits = 9;
  23216. state.distcode = distfix;
  23217. state.distbits = 5;
  23218. }
  23219. /*
  23220. Update the window with the last wsize (normally 32K) bytes written before
  23221. returning. If window does not exist yet, create it. This is only called
  23222. when a window is already in use, or when output has been written during this
  23223. inflate call, but the end of the deflate stream has not been reached yet.
  23224. It is also called to create a window for dictionary data when a dictionary
  23225. is loaded.
  23226. Providing output buffers larger than 32K to inflate() should provide a speed
  23227. advantage, since only the last 32K of output is copied to the sliding window
  23228. upon return from inflate(), and since all distances after the first 32K of
  23229. output will fall in the output data, making match copies simpler and faster.
  23230. The advantage may be dependent on the size of the processor's data caches.
  23231. */
  23232. function updatewindow(strm, src, end, copy) {
  23233. var dist;
  23234. var state = strm.state;
  23235. /* if it hasn't been done already, allocate space for the window */
  23236. if (state.window === null) {
  23237. state.wsize = 1 << state.wbits;
  23238. state.wnext = 0;
  23239. state.whave = 0;
  23240. state.window = new utils.Buf8(state.wsize);
  23241. }
  23242. /* copy state->wsize or less output bytes into the circular window */
  23243. if (copy >= state.wsize) {
  23244. utils.arraySet(state.window,src, end - state.wsize, state.wsize, 0);
  23245. state.wnext = 0;
  23246. state.whave = state.wsize;
  23247. }
  23248. else {
  23249. dist = state.wsize - state.wnext;
  23250. if (dist > copy) {
  23251. dist = copy;
  23252. }
  23253. //zmemcpy(state->window + state->wnext, end - copy, dist);
  23254. utils.arraySet(state.window,src, end - copy, dist, state.wnext);
  23255. copy -= dist;
  23256. if (copy) {
  23257. //zmemcpy(state->window, end - copy, copy);
  23258. utils.arraySet(state.window,src, end - copy, copy, 0);
  23259. state.wnext = copy;
  23260. state.whave = state.wsize;
  23261. }
  23262. else {
  23263. state.wnext += dist;
  23264. if (state.wnext === state.wsize) { state.wnext = 0; }
  23265. if (state.whave < state.wsize) { state.whave += dist; }
  23266. }
  23267. }
  23268. return 0;
  23269. }
  23270. function inflate(strm, flush) {
  23271. var state;
  23272. var input, output; // input/output buffers
  23273. var next; /* next input INDEX */
  23274. var put; /* next output INDEX */
  23275. var have, left; /* available input and output */
  23276. var hold; /* bit buffer */
  23277. var bits; /* bits in bit buffer */
  23278. var _in, _out; /* save starting available input and output */
  23279. var copy; /* number of stored or match bytes to copy */
  23280. var from; /* where to copy match bytes from */
  23281. var from_source;
  23282. var here = 0; /* current decoding table entry */
  23283. var here_bits, here_op, here_val; // paked "here" denormalized (JS specific)
  23284. //var last; /* parent table entry */
  23285. var last_bits, last_op, last_val; // paked "last" denormalized (JS specific)
  23286. var len; /* length to copy for repeats, bits to drop */
  23287. var ret; /* return code */
  23288. var hbuf = new utils.Buf8(4); /* buffer for gzip header crc calculation */
  23289. var opts;
  23290. var n; // temporary var for NEED_BITS
  23291. var order = /* permutation of code lengths */
  23292. [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];
  23293. if (!strm || !strm.state || !strm.output ||
  23294. (!strm.input && strm.avail_in !== 0)) {
  23295. return Z_STREAM_ERROR;
  23296. }
  23297. state = strm.state;
  23298. if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */
  23299. //--- LOAD() ---
  23300. put = strm.next_out;
  23301. output = strm.output;
  23302. left = strm.avail_out;
  23303. next = strm.next_in;
  23304. input = strm.input;
  23305. have = strm.avail_in;
  23306. hold = state.hold;
  23307. bits = state.bits;
  23308. //---
  23309. _in = have;
  23310. _out = left;
  23311. ret = Z_OK;
  23312. inf_leave: // goto emulation
  23313. for (;;) {
  23314. switch (state.mode) {
  23315. case HEAD:
  23316. if (state.wrap === 0) {
  23317. state.mode = TYPEDO;
  23318. break;
  23319. }
  23320. //=== NEEDBITS(16);
  23321. while (bits < 16) {
  23322. if (have === 0) { break inf_leave; }
  23323. have--;
  23324. hold += input[next++] << bits;
  23325. bits += 8;
  23326. }
  23327. //===//
  23328. if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */
  23329. state.check = 0/*crc32(0L, Z_NULL, 0)*/;
  23330. //=== CRC2(state.check, hold);
  23331. hbuf[0] = hold & 0xff;
  23332. hbuf[1] = (hold >>> 8) & 0xff;
  23333. state.check = crc32(state.check, hbuf, 2, 0);
  23334. //===//
  23335. //=== INITBITS();
  23336. hold = 0;
  23337. bits = 0;
  23338. //===//
  23339. state.mode = FLAGS;
  23340. break;
  23341. }
  23342. state.flags = 0; /* expect zlib header */
  23343. if (state.head) {
  23344. state.head.done = false;
  23345. }
  23346. if (!(state.wrap & 1) || /* check if zlib header allowed */
  23347. (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {
  23348. strm.msg = 'incorrect header check';
  23349. state.mode = BAD;
  23350. break;
  23351. }
  23352. if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {
  23353. strm.msg = 'unknown compression method';
  23354. state.mode = BAD;
  23355. break;
  23356. }
  23357. //--- DROPBITS(4) ---//
  23358. hold >>>= 4;
  23359. bits -= 4;
  23360. //---//
  23361. len = (hold & 0x0f)/*BITS(4)*/ + 8;
  23362. if (state.wbits === 0) {
  23363. state.wbits = len;
  23364. }
  23365. else if (len > state.wbits) {
  23366. strm.msg = 'invalid window size';
  23367. state.mode = BAD;
  23368. break;
  23369. }
  23370. state.dmax = 1 << len;
  23371. //Tracev((stderr, "inflate: zlib header ok\n"));
  23372. strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;
  23373. state.mode = hold & 0x200 ? DICTID : TYPE;
  23374. //=== INITBITS();
  23375. hold = 0;
  23376. bits = 0;
  23377. //===//
  23378. break;
  23379. case FLAGS:
  23380. //=== NEEDBITS(16); */
  23381. while (bits < 16) {
  23382. if (have === 0) { break inf_leave; }
  23383. have--;
  23384. hold += input[next++] << bits;
  23385. bits += 8;
  23386. }
  23387. //===//
  23388. state.flags = hold;
  23389. if ((state.flags & 0xff) !== Z_DEFLATED) {
  23390. strm.msg = 'unknown compression method';
  23391. state.mode = BAD;
  23392. break;
  23393. }
  23394. if (state.flags & 0xe000) {
  23395. strm.msg = 'unknown header flags set';
  23396. state.mode = BAD;
  23397. break;
  23398. }
  23399. if (state.head) {
  23400. state.head.text = ((hold >> 8) & 1);
  23401. }
  23402. if (state.flags & 0x0200) {
  23403. //=== CRC2(state.check, hold);
  23404. hbuf[0] = hold & 0xff;
  23405. hbuf[1] = (hold >>> 8) & 0xff;
  23406. state.check = crc32(state.check, hbuf, 2, 0);
  23407. //===//
  23408. }
  23409. //=== INITBITS();
  23410. hold = 0;
  23411. bits = 0;
  23412. //===//
  23413. state.mode = TIME;
  23414. /* falls through */
  23415. case TIME:
  23416. //=== NEEDBITS(32); */
  23417. while (bits < 32) {
  23418. if (have === 0) { break inf_leave; }
  23419. have--;
  23420. hold += input[next++] << bits;
  23421. bits += 8;
  23422. }
  23423. //===//
  23424. if (state.head) {
  23425. state.head.time = hold;
  23426. }
  23427. if (state.flags & 0x0200) {
  23428. //=== CRC4(state.check, hold)
  23429. hbuf[0] = hold & 0xff;
  23430. hbuf[1] = (hold >>> 8) & 0xff;
  23431. hbuf[2] = (hold >>> 16) & 0xff;
  23432. hbuf[3] = (hold >>> 24) & 0xff;
  23433. state.check = crc32(state.check, hbuf, 4, 0);
  23434. //===
  23435. }
  23436. //=== INITBITS();
  23437. hold = 0;
  23438. bits = 0;
  23439. //===//
  23440. state.mode = OS;
  23441. /* falls through */
  23442. case OS:
  23443. //=== NEEDBITS(16); */
  23444. while (bits < 16) {
  23445. if (have === 0) { break inf_leave; }
  23446. have--;
  23447. hold += input[next++] << bits;
  23448. bits += 8;
  23449. }
  23450. //===//
  23451. if (state.head) {
  23452. state.head.xflags = (hold & 0xff);
  23453. state.head.os = (hold >> 8);
  23454. }
  23455. if (state.flags & 0x0200) {
  23456. //=== CRC2(state.check, hold);
  23457. hbuf[0] = hold & 0xff;
  23458. hbuf[1] = (hold >>> 8) & 0xff;
  23459. state.check = crc32(state.check, hbuf, 2, 0);
  23460. //===//
  23461. }
  23462. //=== INITBITS();
  23463. hold = 0;
  23464. bits = 0;
  23465. //===//
  23466. state.mode = EXLEN;
  23467. /* falls through */
  23468. case EXLEN:
  23469. if (state.flags & 0x0400) {
  23470. //=== NEEDBITS(16); */
  23471. while (bits < 16) {
  23472. if (have === 0) { break inf_leave; }
  23473. have--;
  23474. hold += input[next++] << bits;
  23475. bits += 8;
  23476. }
  23477. //===//
  23478. state.length = hold;
  23479. if (state.head) {
  23480. state.head.extra_len = hold;
  23481. }
  23482. if (state.flags & 0x0200) {
  23483. //=== CRC2(state.check, hold);
  23484. hbuf[0] = hold & 0xff;
  23485. hbuf[1] = (hold >>> 8) & 0xff;
  23486. state.check = crc32(state.check, hbuf, 2, 0);
  23487. //===//
  23488. }
  23489. //=== INITBITS();
  23490. hold = 0;
  23491. bits = 0;
  23492. //===//
  23493. }
  23494. else if (state.head) {
  23495. state.head.extra = null/*Z_NULL*/;
  23496. }
  23497. state.mode = EXTRA;
  23498. /* falls through */
  23499. case EXTRA:
  23500. if (state.flags & 0x0400) {
  23501. copy = state.length;
  23502. if (copy > have) { copy = have; }
  23503. if (copy) {
  23504. if (state.head) {
  23505. len = state.head.extra_len - state.length;
  23506. if (!state.head.extra) {
  23507. // Use untyped array for more conveniend processing later
  23508. state.head.extra = new Array(state.head.extra_len);
  23509. }
  23510. utils.arraySet(
  23511. state.head.extra,
  23512. input,
  23513. next,
  23514. // extra field is limited to 65536 bytes
  23515. // - no need for additional size check
  23516. copy,
  23517. /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/
  23518. len
  23519. );
  23520. //zmemcpy(state.head.extra + len, next,
  23521. // len + copy > state.head.extra_max ?
  23522. // state.head.extra_max - len : copy);
  23523. }
  23524. if (state.flags & 0x0200) {
  23525. state.check = crc32(state.check, input, copy, next);
  23526. }
  23527. have -= copy;
  23528. next += copy;
  23529. state.length -= copy;
  23530. }
  23531. if (state.length) { break inf_leave; }
  23532. }
  23533. state.length = 0;
  23534. state.mode = NAME;
  23535. /* falls through */
  23536. case NAME:
  23537. if (state.flags & 0x0800) {
  23538. if (have === 0) { break inf_leave; }
  23539. copy = 0;
  23540. do {
  23541. // TODO: 2 or 1 bytes?
  23542. len = input[next + copy++];
  23543. /* use constant limit because in js we should not preallocate memory */
  23544. if (state.head && len &&
  23545. (state.length < 65536 /*state.head.name_max*/)) {
  23546. state.head.name += String.fromCharCode(len);
  23547. }
  23548. } while (len && copy < have);
  23549. if (state.flags & 0x0200) {
  23550. state.check = crc32(state.check, input, copy, next);
  23551. }
  23552. have -= copy;
  23553. next += copy;
  23554. if (len) { break inf_leave; }
  23555. }
  23556. else if (state.head) {
  23557. state.head.name = null;
  23558. }
  23559. state.length = 0;
  23560. state.mode = COMMENT;
  23561. /* falls through */
  23562. case COMMENT:
  23563. if (state.flags & 0x1000) {
  23564. if (have === 0) { break inf_leave; }
  23565. copy = 0;
  23566. do {
  23567. len = input[next + copy++];
  23568. /* use constant limit because in js we should not preallocate memory */
  23569. if (state.head && len &&
  23570. (state.length < 65536 /*state.head.comm_max*/)) {
  23571. state.head.comment += String.fromCharCode(len);
  23572. }
  23573. } while (len && copy < have);
  23574. if (state.flags & 0x0200) {
  23575. state.check = crc32(state.check, input, copy, next);
  23576. }
  23577. have -= copy;
  23578. next += copy;
  23579. if (len) { break inf_leave; }
  23580. }
  23581. else if (state.head) {
  23582. state.head.comment = null;
  23583. }
  23584. state.mode = HCRC;
  23585. /* falls through */
  23586. case HCRC:
  23587. if (state.flags & 0x0200) {
  23588. //=== NEEDBITS(16); */
  23589. while (bits < 16) {
  23590. if (have === 0) { break inf_leave; }
  23591. have--;
  23592. hold += input[next++] << bits;
  23593. bits += 8;
  23594. }
  23595. //===//
  23596. if (hold !== (state.check & 0xffff)) {
  23597. strm.msg = 'header crc mismatch';
  23598. state.mode = BAD;
  23599. break;
  23600. }
  23601. //=== INITBITS();
  23602. hold = 0;
  23603. bits = 0;
  23604. //===//
  23605. }
  23606. if (state.head) {
  23607. state.head.hcrc = ((state.flags >> 9) & 1);
  23608. state.head.done = true;
  23609. }
  23610. strm.adler = state.check = 0 /*crc32(0L, Z_NULL, 0)*/;
  23611. state.mode = TYPE;
  23612. break;
  23613. case DICTID:
  23614. //=== NEEDBITS(32); */
  23615. while (bits < 32) {
  23616. if (have === 0) { break inf_leave; }
  23617. have--;
  23618. hold += input[next++] << bits;
  23619. bits += 8;
  23620. }
  23621. //===//
  23622. strm.adler = state.check = ZSWAP32(hold);
  23623. //=== INITBITS();
  23624. hold = 0;
  23625. bits = 0;
  23626. //===//
  23627. state.mode = DICT;
  23628. /* falls through */
  23629. case DICT:
  23630. if (state.havedict === 0) {
  23631. //--- RESTORE() ---
  23632. strm.next_out = put;
  23633. strm.avail_out = left;
  23634. strm.next_in = next;
  23635. strm.avail_in = have;
  23636. state.hold = hold;
  23637. state.bits = bits;
  23638. //---
  23639. return Z_NEED_DICT;
  23640. }
  23641. strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;
  23642. state.mode = TYPE;
  23643. /* falls through */
  23644. case TYPE:
  23645. if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }
  23646. /* falls through */
  23647. case TYPEDO:
  23648. if (state.last) {
  23649. //--- BYTEBITS() ---//
  23650. hold >>>= bits & 7;
  23651. bits -= bits & 7;
  23652. //---//
  23653. state.mode = CHECK;
  23654. break;
  23655. }
  23656. //=== NEEDBITS(3); */
  23657. while (bits < 3) {
  23658. if (have === 0) { break inf_leave; }
  23659. have--;
  23660. hold += input[next++] << bits;
  23661. bits += 8;
  23662. }
  23663. //===//
  23664. state.last = (hold & 0x01)/*BITS(1)*/;
  23665. //--- DROPBITS(1) ---//
  23666. hold >>>= 1;
  23667. bits -= 1;
  23668. //---//
  23669. switch ((hold & 0x03)/*BITS(2)*/) {
  23670. case 0: /* stored block */
  23671. //Tracev((stderr, "inflate: stored block%s\n",
  23672. // state.last ? " (last)" : ""));
  23673. state.mode = STORED;
  23674. break;
  23675. case 1: /* fixed block */
  23676. fixedtables(state);
  23677. //Tracev((stderr, "inflate: fixed codes block%s\n",
  23678. // state.last ? " (last)" : ""));
  23679. state.mode = LEN_; /* decode codes */
  23680. if (flush === Z_TREES) {
  23681. //--- DROPBITS(2) ---//
  23682. hold >>>= 2;
  23683. bits -= 2;
  23684. //---//
  23685. break inf_leave;
  23686. }
  23687. break;
  23688. case 2: /* dynamic block */
  23689. //Tracev((stderr, "inflate: dynamic codes block%s\n",
  23690. // state.last ? " (last)" : ""));
  23691. state.mode = TABLE;
  23692. break;
  23693. case 3:
  23694. strm.msg = 'invalid block type';
  23695. state.mode = BAD;
  23696. }
  23697. //--- DROPBITS(2) ---//
  23698. hold >>>= 2;
  23699. bits -= 2;
  23700. //---//
  23701. break;
  23702. case STORED:
  23703. //--- BYTEBITS() ---// /* go to byte boundary */
  23704. hold >>>= bits & 7;
  23705. bits -= bits & 7;
  23706. //---//
  23707. //=== NEEDBITS(32); */
  23708. while (bits < 32) {
  23709. if (have === 0) { break inf_leave; }
  23710. have--;
  23711. hold += input[next++] << bits;
  23712. bits += 8;
  23713. }
  23714. //===//
  23715. if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {
  23716. strm.msg = 'invalid stored block lengths';
  23717. state.mode = BAD;
  23718. break;
  23719. }
  23720. state.length = hold & 0xffff;
  23721. //Tracev((stderr, "inflate: stored length %u\n",
  23722. // state.length));
  23723. //=== INITBITS();
  23724. hold = 0;
  23725. bits = 0;
  23726. //===//
  23727. state.mode = COPY_;
  23728. if (flush === Z_TREES) { break inf_leave; }
  23729. /* falls through */
  23730. case COPY_:
  23731. state.mode = COPY;
  23732. /* falls through */
  23733. case COPY:
  23734. copy = state.length;
  23735. if (copy) {
  23736. if (copy > have) { copy = have; }
  23737. if (copy > left) { copy = left; }
  23738. if (copy === 0) { break inf_leave; }
  23739. //--- zmemcpy(put, next, copy); ---
  23740. utils.arraySet(output, input, next, copy, put);
  23741. //---//
  23742. have -= copy;
  23743. next += copy;
  23744. left -= copy;
  23745. put += copy;
  23746. state.length -= copy;
  23747. break;
  23748. }
  23749. //Tracev((stderr, "inflate: stored end\n"));
  23750. state.mode = TYPE;
  23751. break;
  23752. case TABLE:
  23753. //=== NEEDBITS(14); */
  23754. while (bits < 14) {
  23755. if (have === 0) { break inf_leave; }
  23756. have--;
  23757. hold += input[next++] << bits;
  23758. bits += 8;
  23759. }
  23760. //===//
  23761. state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;
  23762. //--- DROPBITS(5) ---//
  23763. hold >>>= 5;
  23764. bits -= 5;
  23765. //---//
  23766. state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;
  23767. //--- DROPBITS(5) ---//
  23768. hold >>>= 5;
  23769. bits -= 5;
  23770. //---//
  23771. state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;
  23772. //--- DROPBITS(4) ---//
  23773. hold >>>= 4;
  23774. bits -= 4;
  23775. //---//
  23776. //#ifndef PKZIP_BUG_WORKAROUND
  23777. if (state.nlen > 286 || state.ndist > 30) {
  23778. strm.msg = 'too many length or distance symbols';
  23779. state.mode = BAD;
  23780. break;
  23781. }
  23782. //#endif
  23783. //Tracev((stderr, "inflate: table sizes ok\n"));
  23784. state.have = 0;
  23785. state.mode = LENLENS;
  23786. /* falls through */
  23787. case LENLENS:
  23788. while (state.have < state.ncode) {
  23789. //=== NEEDBITS(3);
  23790. while (bits < 3) {
  23791. if (have === 0) { break inf_leave; }
  23792. have--;
  23793. hold += input[next++] << bits;
  23794. bits += 8;
  23795. }
  23796. //===//
  23797. state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);
  23798. //--- DROPBITS(3) ---//
  23799. hold >>>= 3;
  23800. bits -= 3;
  23801. //---//
  23802. }
  23803. while (state.have < 19) {
  23804. state.lens[order[state.have++]] = 0;
  23805. }
  23806. // We have separate tables & no pointers. 2 commented lines below not needed.
  23807. //state.next = state.codes;
  23808. //state.lencode = state.next;
  23809. // Switch to use dynamic table
  23810. state.lencode = state.lendyn;
  23811. state.lenbits = 7;
  23812. opts = {bits: state.lenbits};
  23813. ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);
  23814. state.lenbits = opts.bits;
  23815. if (ret) {
  23816. strm.msg = 'invalid code lengths set';
  23817. state.mode = BAD;
  23818. break;
  23819. }
  23820. //Tracev((stderr, "inflate: code lengths ok\n"));
  23821. state.have = 0;
  23822. state.mode = CODELENS;
  23823. /* falls through */
  23824. case CODELENS:
  23825. while (state.have < state.nlen + state.ndist) {
  23826. for (;;) {
  23827. here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/
  23828. here_bits = here >>> 24;
  23829. here_op = (here >>> 16) & 0xff;
  23830. here_val = here & 0xffff;
  23831. if ((here_bits) <= bits) { break; }
  23832. //--- PULLBYTE() ---//
  23833. if (have === 0) { break inf_leave; }
  23834. have--;
  23835. hold += input[next++] << bits;
  23836. bits += 8;
  23837. //---//
  23838. }
  23839. if (here_val < 16) {
  23840. //--- DROPBITS(here.bits) ---//
  23841. hold >>>= here_bits;
  23842. bits -= here_bits;
  23843. //---//
  23844. state.lens[state.have++] = here_val;
  23845. }
  23846. else {
  23847. if (here_val === 16) {
  23848. //=== NEEDBITS(here.bits + 2);
  23849. n = here_bits + 2;
  23850. while (bits < n) {
  23851. if (have === 0) { break inf_leave; }
  23852. have--;
  23853. hold += input[next++] << bits;
  23854. bits += 8;
  23855. }
  23856. //===//
  23857. //--- DROPBITS(here.bits) ---//
  23858. hold >>>= here_bits;
  23859. bits -= here_bits;
  23860. //---//
  23861. if (state.have === 0) {
  23862. strm.msg = 'invalid bit length repeat';
  23863. state.mode = BAD;
  23864. break;
  23865. }
  23866. len = state.lens[state.have - 1];
  23867. copy = 3 + (hold & 0x03);//BITS(2);
  23868. //--- DROPBITS(2) ---//
  23869. hold >>>= 2;
  23870. bits -= 2;
  23871. //---//
  23872. }
  23873. else if (here_val === 17) {
  23874. //=== NEEDBITS(here.bits + 3);
  23875. n = here_bits + 3;
  23876. while (bits < n) {
  23877. if (have === 0) { break inf_leave; }
  23878. have--;
  23879. hold += input[next++] << bits;
  23880. bits += 8;
  23881. }
  23882. //===//
  23883. //--- DROPBITS(here.bits) ---//
  23884. hold >>>= here_bits;
  23885. bits -= here_bits;
  23886. //---//
  23887. len = 0;
  23888. copy = 3 + (hold & 0x07);//BITS(3);
  23889. //--- DROPBITS(3) ---//
  23890. hold >>>= 3;
  23891. bits -= 3;
  23892. //---//
  23893. }
  23894. else {
  23895. //=== NEEDBITS(here.bits + 7);
  23896. n = here_bits + 7;
  23897. while (bits < n) {
  23898. if (have === 0) { break inf_leave; }
  23899. have--;
  23900. hold += input[next++] << bits;
  23901. bits += 8;
  23902. }
  23903. //===//
  23904. //--- DROPBITS(here.bits) ---//
  23905. hold >>>= here_bits;
  23906. bits -= here_bits;
  23907. //---//
  23908. len = 0;
  23909. copy = 11 + (hold & 0x7f);//BITS(7);
  23910. //--- DROPBITS(7) ---//
  23911. hold >>>= 7;
  23912. bits -= 7;
  23913. //---//
  23914. }
  23915. if (state.have + copy > state.nlen + state.ndist) {
  23916. strm.msg = 'invalid bit length repeat';
  23917. state.mode = BAD;
  23918. break;
  23919. }
  23920. while (copy--) {
  23921. state.lens[state.have++] = len;
  23922. }
  23923. }
  23924. }
  23925. /* handle error breaks in while */
  23926. if (state.mode === BAD) { break; }
  23927. /* check for end-of-block code (better have one) */
  23928. if (state.lens[256] === 0) {
  23929. strm.msg = 'invalid code -- missing end-of-block';
  23930. state.mode = BAD;
  23931. break;
  23932. }
  23933. /* build code tables -- note: do not change the lenbits or distbits
  23934. values here (9 and 6) without reading the comments in inftrees.h
  23935. concerning the ENOUGH constants, which depend on those values */
  23936. state.lenbits = 9;
  23937. opts = {bits: state.lenbits};
  23938. ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);
  23939. // We have separate tables & no pointers. 2 commented lines below not needed.
  23940. // state.next_index = opts.table_index;
  23941. state.lenbits = opts.bits;
  23942. // state.lencode = state.next;
  23943. if (ret) {
  23944. strm.msg = 'invalid literal/lengths set';
  23945. state.mode = BAD;
  23946. break;
  23947. }
  23948. state.distbits = 6;
  23949. //state.distcode.copy(state.codes);
  23950. // Switch to use dynamic table
  23951. state.distcode = state.distdyn;
  23952. opts = {bits: state.distbits};
  23953. ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);
  23954. // We have separate tables & no pointers. 2 commented lines below not needed.
  23955. // state.next_index = opts.table_index;
  23956. state.distbits = opts.bits;
  23957. // state.distcode = state.next;
  23958. if (ret) {
  23959. strm.msg = 'invalid distances set';
  23960. state.mode = BAD;
  23961. break;
  23962. }
  23963. //Tracev((stderr, 'inflate: codes ok\n'));
  23964. state.mode = LEN_;
  23965. if (flush === Z_TREES) { break inf_leave; }
  23966. /* falls through */
  23967. case LEN_:
  23968. state.mode = LEN;
  23969. /* falls through */
  23970. case LEN:
  23971. if (have >= 6 && left >= 258) {
  23972. //--- RESTORE() ---
  23973. strm.next_out = put;
  23974. strm.avail_out = left;
  23975. strm.next_in = next;
  23976. strm.avail_in = have;
  23977. state.hold = hold;
  23978. state.bits = bits;
  23979. //---
  23980. inflate_fast(strm, _out);
  23981. //--- LOAD() ---
  23982. put = strm.next_out;
  23983. output = strm.output;
  23984. left = strm.avail_out;
  23985. next = strm.next_in;
  23986. input = strm.input;
  23987. have = strm.avail_in;
  23988. hold = state.hold;
  23989. bits = state.bits;
  23990. //---
  23991. if (state.mode === TYPE) {
  23992. state.back = -1;
  23993. }
  23994. break;
  23995. }
  23996. state.back = 0;
  23997. for (;;) {
  23998. here = state.lencode[hold & ((1 << state.lenbits) -1)]; /*BITS(state.lenbits)*/
  23999. here_bits = here >>> 24;
  24000. here_op = (here >>> 16) & 0xff;
  24001. here_val = here & 0xffff;
  24002. if (here_bits <= bits) { break; }
  24003. //--- PULLBYTE() ---//
  24004. if (have === 0) { break inf_leave; }
  24005. have--;
  24006. hold += input[next++] << bits;
  24007. bits += 8;
  24008. //---//
  24009. }
  24010. if (here_op && (here_op & 0xf0) === 0) {
  24011. last_bits = here_bits;
  24012. last_op = here_op;
  24013. last_val = here_val;
  24014. for (;;) {
  24015. here = state.lencode[last_val +
  24016. ((hold & ((1 << (last_bits + last_op)) -1))/*BITS(last.bits + last.op)*/ >> last_bits)];
  24017. here_bits = here >>> 24;
  24018. here_op = (here >>> 16) & 0xff;
  24019. here_val = here & 0xffff;
  24020. if ((last_bits + here_bits) <= bits) { break; }
  24021. //--- PULLBYTE() ---//
  24022. if (have === 0) { break inf_leave; }
  24023. have--;
  24024. hold += input[next++] << bits;
  24025. bits += 8;
  24026. //---//
  24027. }
  24028. //--- DROPBITS(last.bits) ---//
  24029. hold >>>= last_bits;
  24030. bits -= last_bits;
  24031. //---//
  24032. state.back += last_bits;
  24033. }
  24034. //--- DROPBITS(here.bits) ---//
  24035. hold >>>= here_bits;
  24036. bits -= here_bits;
  24037. //---//
  24038. state.back += here_bits;
  24039. state.length = here_val;
  24040. if (here_op === 0) {
  24041. //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
  24042. // "inflate: literal '%c'\n" :
  24043. // "inflate: literal 0x%02x\n", here.val));
  24044. state.mode = LIT;
  24045. break;
  24046. }
  24047. if (here_op & 32) {
  24048. //Tracevv((stderr, "inflate: end of block\n"));
  24049. state.back = -1;
  24050. state.mode = TYPE;
  24051. break;
  24052. }
  24053. if (here_op & 64) {
  24054. strm.msg = 'invalid literal/length code';
  24055. state.mode = BAD;
  24056. break;
  24057. }
  24058. state.extra = here_op & 15;
  24059. state.mode = LENEXT;
  24060. /* falls through */
  24061. case LENEXT:
  24062. if (state.extra) {
  24063. //=== NEEDBITS(state.extra);
  24064. n = state.extra;
  24065. while (bits < n) {
  24066. if (have === 0) { break inf_leave; }
  24067. have--;
  24068. hold += input[next++] << bits;
  24069. bits += 8;
  24070. }
  24071. //===//
  24072. state.length += hold & ((1 << state.extra) -1)/*BITS(state.extra)*/;
  24073. //--- DROPBITS(state.extra) ---//
  24074. hold >>>= state.extra;
  24075. bits -= state.extra;
  24076. //---//
  24077. state.back += state.extra;
  24078. }
  24079. //Tracevv((stderr, "inflate: length %u\n", state.length));
  24080. state.was = state.length;
  24081. state.mode = DIST;
  24082. /* falls through */
  24083. case DIST:
  24084. for (;;) {
  24085. here = state.distcode[hold & ((1 << state.distbits) -1)];/*BITS(state.distbits)*/
  24086. here_bits = here >>> 24;
  24087. here_op = (here >>> 16) & 0xff;
  24088. here_val = here & 0xffff;
  24089. if ((here_bits) <= bits) { break; }
  24090. //--- PULLBYTE() ---//
  24091. if (have === 0) { break inf_leave; }
  24092. have--;
  24093. hold += input[next++] << bits;
  24094. bits += 8;
  24095. //---//
  24096. }
  24097. if ((here_op & 0xf0) === 0) {
  24098. last_bits = here_bits;
  24099. last_op = here_op;
  24100. last_val = here_val;
  24101. for (;;) {
  24102. here = state.distcode[last_val +
  24103. ((hold & ((1 << (last_bits + last_op)) -1))/*BITS(last.bits + last.op)*/ >> last_bits)];
  24104. here_bits = here >>> 24;
  24105. here_op = (here >>> 16) & 0xff;
  24106. here_val = here & 0xffff;
  24107. if ((last_bits + here_bits) <= bits) { break; }
  24108. //--- PULLBYTE() ---//
  24109. if (have === 0) { break inf_leave; }
  24110. have--;
  24111. hold += input[next++] << bits;
  24112. bits += 8;
  24113. //---//
  24114. }
  24115. //--- DROPBITS(last.bits) ---//
  24116. hold >>>= last_bits;
  24117. bits -= last_bits;
  24118. //---//
  24119. state.back += last_bits;
  24120. }
  24121. //--- DROPBITS(here.bits) ---//
  24122. hold >>>= here_bits;
  24123. bits -= here_bits;
  24124. //---//
  24125. state.back += here_bits;
  24126. if (here_op & 64) {
  24127. strm.msg = 'invalid distance code';
  24128. state.mode = BAD;
  24129. break;
  24130. }
  24131. state.offset = here_val;
  24132. state.extra = (here_op) & 15;
  24133. state.mode = DISTEXT;
  24134. /* falls through */
  24135. case DISTEXT:
  24136. if (state.extra) {
  24137. //=== NEEDBITS(state.extra);
  24138. n = state.extra;
  24139. while (bits < n) {
  24140. if (have === 0) { break inf_leave; }
  24141. have--;
  24142. hold += input[next++] << bits;
  24143. bits += 8;
  24144. }
  24145. //===//
  24146. state.offset += hold & ((1 << state.extra) -1)/*BITS(state.extra)*/;
  24147. //--- DROPBITS(state.extra) ---//
  24148. hold >>>= state.extra;
  24149. bits -= state.extra;
  24150. //---//
  24151. state.back += state.extra;
  24152. }
  24153. //#ifdef INFLATE_STRICT
  24154. if (state.offset > state.dmax) {
  24155. strm.msg = 'invalid distance too far back';
  24156. state.mode = BAD;
  24157. break;
  24158. }
  24159. //#endif
  24160. //Tracevv((stderr, "inflate: distance %u\n", state.offset));
  24161. state.mode = MATCH;
  24162. /* falls through */
  24163. case MATCH:
  24164. if (left === 0) { break inf_leave; }
  24165. copy = _out - left;
  24166. if (state.offset > copy) { /* copy from window */
  24167. copy = state.offset - copy;
  24168. if (copy > state.whave) {
  24169. if (state.sane) {
  24170. strm.msg = 'invalid distance too far back';
  24171. state.mode = BAD;
  24172. break;
  24173. }
  24174. // (!) This block is disabled in zlib defailts,
  24175. // don't enable it for binary compatibility
  24176. //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
  24177. // Trace((stderr, "inflate.c too far\n"));
  24178. // copy -= state.whave;
  24179. // if (copy > state.length) { copy = state.length; }
  24180. // if (copy > left) { copy = left; }
  24181. // left -= copy;
  24182. // state.length -= copy;
  24183. // do {
  24184. // output[put++] = 0;
  24185. // } while (--copy);
  24186. // if (state.length === 0) { state.mode = LEN; }
  24187. // break;
  24188. //#endif
  24189. }
  24190. if (copy > state.wnext) {
  24191. copy -= state.wnext;
  24192. from = state.wsize - copy;
  24193. }
  24194. else {
  24195. from = state.wnext - copy;
  24196. }
  24197. if (copy > state.length) { copy = state.length; }
  24198. from_source = state.window;
  24199. }
  24200. else { /* copy from output */
  24201. from_source = output;
  24202. from = put - state.offset;
  24203. copy = state.length;
  24204. }
  24205. if (copy > left) { copy = left; }
  24206. left -= copy;
  24207. state.length -= copy;
  24208. do {
  24209. output[put++] = from_source[from++];
  24210. } while (--copy);
  24211. if (state.length === 0) { state.mode = LEN; }
  24212. break;
  24213. case LIT:
  24214. if (left === 0) { break inf_leave; }
  24215. output[put++] = state.length;
  24216. left--;
  24217. state.mode = LEN;
  24218. break;
  24219. case CHECK:
  24220. if (state.wrap) {
  24221. //=== NEEDBITS(32);
  24222. while (bits < 32) {
  24223. if (have === 0) { break inf_leave; }
  24224. have--;
  24225. // Use '|' insdead of '+' to make sure that result is signed
  24226. hold |= input[next++] << bits;
  24227. bits += 8;
  24228. }
  24229. //===//
  24230. _out -= left;
  24231. strm.total_out += _out;
  24232. state.total += _out;
  24233. if (_out) {
  24234. strm.adler = state.check =
  24235. /*UPDATE(state.check, put - _out, _out);*/
  24236. (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));
  24237. }
  24238. _out = left;
  24239. // NB: crc32 stored as signed 32-bit int, ZSWAP32 returns signed too
  24240. if ((state.flags ? hold : ZSWAP32(hold)) !== state.check) {
  24241. strm.msg = 'incorrect data check';
  24242. state.mode = BAD;
  24243. break;
  24244. }
  24245. //=== INITBITS();
  24246. hold = 0;
  24247. bits = 0;
  24248. //===//
  24249. //Tracev((stderr, "inflate: check matches trailer\n"));
  24250. }
  24251. state.mode = LENGTH;
  24252. /* falls through */
  24253. case LENGTH:
  24254. if (state.wrap && state.flags) {
  24255. //=== NEEDBITS(32);
  24256. while (bits < 32) {
  24257. if (have === 0) { break inf_leave; }
  24258. have--;
  24259. hold += input[next++] << bits;
  24260. bits += 8;
  24261. }
  24262. //===//
  24263. if (hold !== (state.total & 0xffffffff)) {
  24264. strm.msg = 'incorrect length check';
  24265. state.mode = BAD;
  24266. break;
  24267. }
  24268. //=== INITBITS();
  24269. hold = 0;
  24270. bits = 0;
  24271. //===//
  24272. //Tracev((stderr, "inflate: length matches trailer\n"));
  24273. }
  24274. state.mode = DONE;
  24275. /* falls through */
  24276. case DONE:
  24277. ret = Z_STREAM_END;
  24278. break inf_leave;
  24279. case BAD:
  24280. ret = Z_DATA_ERROR;
  24281. break inf_leave;
  24282. case MEM:
  24283. return Z_MEM_ERROR;
  24284. case SYNC:
  24285. /* falls through */
  24286. default:
  24287. return Z_STREAM_ERROR;
  24288. }
  24289. }
  24290. // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave"
  24291. /*
  24292. Return from inflate(), updating the total counts and the check value.
  24293. If there was no progress during the inflate() call, return a buffer
  24294. error. Call updatewindow() to create and/or update the window state.
  24295. Note: a memory error from inflate() is non-recoverable.
  24296. */
  24297. //--- RESTORE() ---
  24298. strm.next_out = put;
  24299. strm.avail_out = left;
  24300. strm.next_in = next;
  24301. strm.avail_in = have;
  24302. state.hold = hold;
  24303. state.bits = bits;
  24304. //---
  24305. if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&
  24306. (state.mode < CHECK || flush !== Z_FINISH))) {
  24307. if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {
  24308. state.mode = MEM;
  24309. return Z_MEM_ERROR;
  24310. }
  24311. }
  24312. _in -= strm.avail_in;
  24313. _out -= strm.avail_out;
  24314. strm.total_in += _in;
  24315. strm.total_out += _out;
  24316. state.total += _out;
  24317. if (state.wrap && _out) {
  24318. strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/
  24319. (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));
  24320. }
  24321. strm.data_type = state.bits + (state.last ? 64 : 0) +
  24322. (state.mode === TYPE ? 128 : 0) +
  24323. (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);
  24324. if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {
  24325. ret = Z_BUF_ERROR;
  24326. }
  24327. return ret;
  24328. }
  24329. function inflateEnd(strm) {
  24330. if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {
  24331. return Z_STREAM_ERROR;
  24332. }
  24333. var state = strm.state;
  24334. if (state.window) {
  24335. state.window = null;
  24336. }
  24337. strm.state = null;
  24338. return Z_OK;
  24339. }
  24340. function inflateGetHeader(strm, head) {
  24341. var state;
  24342. /* check state */
  24343. if (!strm || !strm.state) { return Z_STREAM_ERROR; }
  24344. state = strm.state;
  24345. if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }
  24346. /* save header structure */
  24347. state.head = head;
  24348. head.done = false;
  24349. return Z_OK;
  24350. }
  24351. exports.inflateReset = inflateReset;
  24352. exports.inflateReset2 = inflateReset2;
  24353. exports.inflateResetKeep = inflateResetKeep;
  24354. exports.inflateInit = inflateInit;
  24355. exports.inflateInit2 = inflateInit2;
  24356. exports.inflate = inflate;
  24357. exports.inflateEnd = inflateEnd;
  24358. exports.inflateGetHeader = inflateGetHeader;
  24359. exports.inflateInfo = 'pako inflate (from Nodeca project)';
  24360. /* Not implemented
  24361. exports.inflateCopy = inflateCopy;
  24362. exports.inflateGetDictionary = inflateGetDictionary;
  24363. exports.inflateMark = inflateMark;
  24364. exports.inflatePrime = inflatePrime;
  24365. exports.inflateSetDictionary = inflateSetDictionary;
  24366. exports.inflateSync = inflateSync;
  24367. exports.inflateSyncPoint = inflateSyncPoint;
  24368. exports.inflateUndermine = inflateUndermine;
  24369. */
  24370. /***/ },
  24371. /* 57 */
  24372. /***/ function(module, exports) {
  24373. 'use strict';
  24374. // See state defs from inflate.js
  24375. var BAD = 30; /* got a data error -- remain here until reset */
  24376. var TYPE = 12; /* i: waiting for type bits, including last-flag bit */
  24377. /*
  24378. Decode literal, length, and distance codes and write out the resulting
  24379. literal and match bytes until either not enough input or output is
  24380. available, an end-of-block is encountered, or a data error is encountered.
  24381. When large enough input and output buffers are supplied to inflate(), for
  24382. example, a 16K input buffer and a 64K output buffer, more than 95% of the
  24383. inflate execution time is spent in this routine.
  24384. Entry assumptions:
  24385. state.mode === LEN
  24386. strm.avail_in >= 6
  24387. strm.avail_out >= 258
  24388. start >= strm.avail_out
  24389. state.bits < 8
  24390. On return, state.mode is one of:
  24391. LEN -- ran out of enough output space or enough available input
  24392. TYPE -- reached end of block code, inflate() to interpret next block
  24393. BAD -- error in block data
  24394. Notes:
  24395. - The maximum input bits used by a length/distance pair is 15 bits for the
  24396. length code, 5 bits for the length extra, 15 bits for the distance code,
  24397. and 13 bits for the distance extra. This totals 48 bits, or six bytes.
  24398. Therefore if strm.avail_in >= 6, then there is enough input to avoid
  24399. checking for available input while decoding.
  24400. - The maximum bytes that a single length/distance pair can output is 258
  24401. bytes, which is the maximum length that can be coded. inflate_fast()
  24402. requires strm.avail_out >= 258 for each loop to avoid checking for
  24403. output space.
  24404. */
  24405. module.exports = function inflate_fast(strm, start) {
  24406. var state;
  24407. var _in; /* local strm.input */
  24408. var last; /* have enough input while in < last */
  24409. var _out; /* local strm.output */
  24410. var beg; /* inflate()'s initial strm.output */
  24411. var end; /* while out < end, enough space available */
  24412. //#ifdef INFLATE_STRICT
  24413. var dmax; /* maximum distance from zlib header */
  24414. //#endif
  24415. var wsize; /* window size or zero if not using window */
  24416. var whave; /* valid bytes in the window */
  24417. var wnext; /* window write index */
  24418. // Use `s_window` instead `window`, avoid conflict with instrumentation tools
  24419. var s_window; /* allocated sliding window, if wsize != 0 */
  24420. var hold; /* local strm.hold */
  24421. var bits; /* local strm.bits */
  24422. var lcode; /* local strm.lencode */
  24423. var dcode; /* local strm.distcode */
  24424. var lmask; /* mask for first level of length codes */
  24425. var dmask; /* mask for first level of distance codes */
  24426. var here; /* retrieved table entry */
  24427. var op; /* code bits, operation, extra bits, or */
  24428. /* window position, window bytes to copy */
  24429. var len; /* match length, unused bytes */
  24430. var dist; /* match distance */
  24431. var from; /* where to copy match from */
  24432. var from_source;
  24433. var input, output; // JS specific, because we have no pointers
  24434. /* copy state to local variables */
  24435. state = strm.state;
  24436. //here = state.here;
  24437. _in = strm.next_in;
  24438. input = strm.input;
  24439. last = _in + (strm.avail_in - 5);
  24440. _out = strm.next_out;
  24441. output = strm.output;
  24442. beg = _out - (start - strm.avail_out);
  24443. end = _out + (strm.avail_out - 257);
  24444. //#ifdef INFLATE_STRICT
  24445. dmax = state.dmax;
  24446. //#endif
  24447. wsize = state.wsize;
  24448. whave = state.whave;
  24449. wnext = state.wnext;
  24450. s_window = state.window;
  24451. hold = state.hold;
  24452. bits = state.bits;
  24453. lcode = state.lencode;
  24454. dcode = state.distcode;
  24455. lmask = (1 << state.lenbits) - 1;
  24456. dmask = (1 << state.distbits) - 1;
  24457. /* decode literals and length/distances until end-of-block or not enough
  24458. input data or output space */
  24459. top:
  24460. do {
  24461. if (bits < 15) {
  24462. hold += input[_in++] << bits;
  24463. bits += 8;
  24464. hold += input[_in++] << bits;
  24465. bits += 8;
  24466. }
  24467. here = lcode[hold & lmask];
  24468. dolen:
  24469. for (;;) { // Goto emulation
  24470. op = here >>> 24/*here.bits*/;
  24471. hold >>>= op;
  24472. bits -= op;
  24473. op = (here >>> 16) & 0xff/*here.op*/;
  24474. if (op === 0) { /* literal */
  24475. //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
  24476. // "inflate: literal '%c'\n" :
  24477. // "inflate: literal 0x%02x\n", here.val));
  24478. output[_out++] = here & 0xffff/*here.val*/;
  24479. }
  24480. else if (op & 16) { /* length base */
  24481. len = here & 0xffff/*here.val*/;
  24482. op &= 15; /* number of extra bits */
  24483. if (op) {
  24484. if (bits < op) {
  24485. hold += input[_in++] << bits;
  24486. bits += 8;
  24487. }
  24488. len += hold & ((1 << op) - 1);
  24489. hold >>>= op;
  24490. bits -= op;
  24491. }
  24492. //Tracevv((stderr, "inflate: length %u\n", len));
  24493. if (bits < 15) {
  24494. hold += input[_in++] << bits;
  24495. bits += 8;
  24496. hold += input[_in++] << bits;
  24497. bits += 8;
  24498. }
  24499. here = dcode[hold & dmask];
  24500. dodist:
  24501. for (;;) { // goto emulation
  24502. op = here >>> 24/*here.bits*/;
  24503. hold >>>= op;
  24504. bits -= op;
  24505. op = (here >>> 16) & 0xff/*here.op*/;
  24506. if (op & 16) { /* distance base */
  24507. dist = here & 0xffff/*here.val*/;
  24508. op &= 15; /* number of extra bits */
  24509. if (bits < op) {
  24510. hold += input[_in++] << bits;
  24511. bits += 8;
  24512. if (bits < op) {
  24513. hold += input[_in++] << bits;
  24514. bits += 8;
  24515. }
  24516. }
  24517. dist += hold & ((1 << op) - 1);
  24518. //#ifdef INFLATE_STRICT
  24519. if (dist > dmax) {
  24520. strm.msg = 'invalid distance too far back';
  24521. state.mode = BAD;
  24522. break top;
  24523. }
  24524. //#endif
  24525. hold >>>= op;
  24526. bits -= op;
  24527. //Tracevv((stderr, "inflate: distance %u\n", dist));
  24528. op = _out - beg; /* max distance in output */
  24529. if (dist > op) { /* see if copy from window */
  24530. op = dist - op; /* distance back in window */
  24531. if (op > whave) {
  24532. if (state.sane) {
  24533. strm.msg = 'invalid distance too far back';
  24534. state.mode = BAD;
  24535. break top;
  24536. }
  24537. // (!) This block is disabled in zlib defailts,
  24538. // don't enable it for binary compatibility
  24539. //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
  24540. // if (len <= op - whave) {
  24541. // do {
  24542. // output[_out++] = 0;
  24543. // } while (--len);
  24544. // continue top;
  24545. // }
  24546. // len -= op - whave;
  24547. // do {
  24548. // output[_out++] = 0;
  24549. // } while (--op > whave);
  24550. // if (op === 0) {
  24551. // from = _out - dist;
  24552. // do {
  24553. // output[_out++] = output[from++];
  24554. // } while (--len);
  24555. // continue top;
  24556. // }
  24557. //#endif
  24558. }
  24559. from = 0; // window index
  24560. from_source = s_window;
  24561. if (wnext === 0) { /* very common case */
  24562. from += wsize - op;
  24563. if (op < len) { /* some from window */
  24564. len -= op;
  24565. do {
  24566. output[_out++] = s_window[from++];
  24567. } while (--op);
  24568. from = _out - dist; /* rest from output */
  24569. from_source = output;
  24570. }
  24571. }
  24572. else if (wnext < op) { /* wrap around window */
  24573. from += wsize + wnext - op;
  24574. op -= wnext;
  24575. if (op < len) { /* some from end of window */
  24576. len -= op;
  24577. do {
  24578. output[_out++] = s_window[from++];
  24579. } while (--op);
  24580. from = 0;
  24581. if (wnext < len) { /* some from start of window */
  24582. op = wnext;
  24583. len -= op;
  24584. do {
  24585. output[_out++] = s_window[from++];
  24586. } while (--op);
  24587. from = _out - dist; /* rest from output */
  24588. from_source = output;
  24589. }
  24590. }
  24591. }
  24592. else { /* contiguous in window */
  24593. from += wnext - op;
  24594. if (op < len) { /* some from window */
  24595. len -= op;
  24596. do {
  24597. output[_out++] = s_window[from++];
  24598. } while (--op);
  24599. from = _out - dist; /* rest from output */
  24600. from_source = output;
  24601. }
  24602. }
  24603. while (len > 2) {
  24604. output[_out++] = from_source[from++];
  24605. output[_out++] = from_source[from++];
  24606. output[_out++] = from_source[from++];
  24607. len -= 3;
  24608. }
  24609. if (len) {
  24610. output[_out++] = from_source[from++];
  24611. if (len > 1) {
  24612. output[_out++] = from_source[from++];
  24613. }
  24614. }
  24615. }
  24616. else {
  24617. from = _out - dist; /* copy direct from output */
  24618. do { /* minimum length is three */
  24619. output[_out++] = output[from++];
  24620. output[_out++] = output[from++];
  24621. output[_out++] = output[from++];
  24622. len -= 3;
  24623. } while (len > 2);
  24624. if (len) {
  24625. output[_out++] = output[from++];
  24626. if (len > 1) {
  24627. output[_out++] = output[from++];
  24628. }
  24629. }
  24630. }
  24631. }
  24632. else if ((op & 64) === 0) { /* 2nd level distance code */
  24633. here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];
  24634. continue dodist;
  24635. }
  24636. else {
  24637. strm.msg = 'invalid distance code';
  24638. state.mode = BAD;
  24639. break top;
  24640. }
  24641. break; // need to emulate goto via "continue"
  24642. }
  24643. }
  24644. else if ((op & 64) === 0) { /* 2nd level length code */
  24645. here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];
  24646. continue dolen;
  24647. }
  24648. else if (op & 32) { /* end-of-block */
  24649. //Tracevv((stderr, "inflate: end of block\n"));
  24650. state.mode = TYPE;
  24651. break top;
  24652. }
  24653. else {
  24654. strm.msg = 'invalid literal/length code';
  24655. state.mode = BAD;
  24656. break top;
  24657. }
  24658. break; // need to emulate goto via "continue"
  24659. }
  24660. } while (_in < last && _out < end);
  24661. /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
  24662. len = bits >> 3;
  24663. _in -= len;
  24664. bits -= len << 3;
  24665. hold &= (1 << bits) - 1;
  24666. /* update state and return */
  24667. strm.next_in = _in;
  24668. strm.next_out = _out;
  24669. strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));
  24670. strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));
  24671. state.hold = hold;
  24672. state.bits = bits;
  24673. return;
  24674. };
  24675. /***/ },
  24676. /* 58 */
  24677. /***/ function(module, exports, __webpack_require__) {
  24678. 'use strict';
  24679. var utils = __webpack_require__(52);
  24680. var MAXBITS = 15;
  24681. var ENOUGH_LENS = 852;
  24682. var ENOUGH_DISTS = 592;
  24683. //var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);
  24684. var CODES = 0;
  24685. var LENS = 1;
  24686. var DISTS = 2;
  24687. var lbase = [ /* Length codes 257..285 base */
  24688. 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
  24689. 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0
  24690. ];
  24691. var lext = [ /* Length codes 257..285 extra */
  24692. 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
  24693. 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78
  24694. ];
  24695. var dbase = [ /* Distance codes 0..29 base */
  24696. 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
  24697. 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
  24698. 8193, 12289, 16385, 24577, 0, 0
  24699. ];
  24700. var dext = [ /* Distance codes 0..29 extra */
  24701. 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
  24702. 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
  24703. 28, 28, 29, 29, 64, 64
  24704. ];
  24705. module.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)
  24706. {
  24707. var bits = opts.bits;
  24708. //here = opts.here; /* table entry for duplication */
  24709. var len = 0; /* a code's length in bits */
  24710. var sym = 0; /* index of code symbols */
  24711. var min = 0, max = 0; /* minimum and maximum code lengths */
  24712. var root = 0; /* number of index bits for root table */
  24713. var curr = 0; /* number of index bits for current table */
  24714. var drop = 0; /* code bits to drop for sub-table */
  24715. var left = 0; /* number of prefix codes available */
  24716. var used = 0; /* code entries in table used */
  24717. var huff = 0; /* Huffman code */
  24718. var incr; /* for incrementing code, index */
  24719. var fill; /* index for replicating entries */
  24720. var low; /* low bits for current root entry */
  24721. var mask; /* mask for low root bits */
  24722. var next; /* next available space in table */
  24723. var base = null; /* base value table to use */
  24724. var base_index = 0;
  24725. // var shoextra; /* extra bits table to use */
  24726. var end; /* use base and extra for symbol > end */
  24727. var count = new utils.Buf16(MAXBITS+1); //[MAXBITS+1]; /* number of codes of each length */
  24728. var offs = new utils.Buf16(MAXBITS+1); //[MAXBITS+1]; /* offsets in table for each length */
  24729. var extra = null;
  24730. var extra_index = 0;
  24731. var here_bits, here_op, here_val;
  24732. /*
  24733. Process a set of code lengths to create a canonical Huffman code. The
  24734. code lengths are lens[0..codes-1]. Each length corresponds to the
  24735. symbols 0..codes-1. The Huffman code is generated by first sorting the
  24736. symbols by length from short to long, and retaining the symbol order
  24737. for codes with equal lengths. Then the code starts with all zero bits
  24738. for the first code of the shortest length, and the codes are integer
  24739. increments for the same length, and zeros are appended as the length
  24740. increases. For the deflate format, these bits are stored backwards
  24741. from their more natural integer increment ordering, and so when the
  24742. decoding tables are built in the large loop below, the integer codes
  24743. are incremented backwards.
  24744. This routine assumes, but does not check, that all of the entries in
  24745. lens[] are in the range 0..MAXBITS. The caller must assure this.
  24746. 1..MAXBITS is interpreted as that code length. zero means that that
  24747. symbol does not occur in this code.
  24748. The codes are sorted by computing a count of codes for each length,
  24749. creating from that a table of starting indices for each length in the
  24750. sorted table, and then entering the symbols in order in the sorted
  24751. table. The sorted table is work[], with that space being provided by
  24752. the caller.
  24753. The length counts are used for other purposes as well, i.e. finding
  24754. the minimum and maximum length codes, determining if there are any
  24755. codes at all, checking for a valid set of lengths, and looking ahead
  24756. at length counts to determine sub-table sizes when building the
  24757. decoding tables.
  24758. */
  24759. /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
  24760. for (len = 0; len <= MAXBITS; len++) {
  24761. count[len] = 0;
  24762. }
  24763. for (sym = 0; sym < codes; sym++) {
  24764. count[lens[lens_index + sym]]++;
  24765. }
  24766. /* bound code lengths, force root to be within code lengths */
  24767. root = bits;
  24768. for (max = MAXBITS; max >= 1; max--) {
  24769. if (count[max] !== 0) { break; }
  24770. }
  24771. if (root > max) {
  24772. root = max;
  24773. }
  24774. if (max === 0) { /* no symbols to code at all */
  24775. //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */
  24776. //table.bits[opts.table_index] = 1; //here.bits = (var char)1;
  24777. //table.val[opts.table_index++] = 0; //here.val = (var short)0;
  24778. table[table_index++] = (1 << 24) | (64 << 16) | 0;
  24779. //table.op[opts.table_index] = 64;
  24780. //table.bits[opts.table_index] = 1;
  24781. //table.val[opts.table_index++] = 0;
  24782. table[table_index++] = (1 << 24) | (64 << 16) | 0;
  24783. opts.bits = 1;
  24784. return 0; /* no symbols, but wait for decoding to report error */
  24785. }
  24786. for (min = 1; min < max; min++) {
  24787. if (count[min] !== 0) { break; }
  24788. }
  24789. if (root < min) {
  24790. root = min;
  24791. }
  24792. /* check for an over-subscribed or incomplete set of lengths */
  24793. left = 1;
  24794. for (len = 1; len <= MAXBITS; len++) {
  24795. left <<= 1;
  24796. left -= count[len];
  24797. if (left < 0) {
  24798. return -1;
  24799. } /* over-subscribed */
  24800. }
  24801. if (left > 0 && (type === CODES || max !== 1)) {
  24802. return -1; /* incomplete set */
  24803. }
  24804. /* generate offsets into symbol table for each length for sorting */
  24805. offs[1] = 0;
  24806. for (len = 1; len < MAXBITS; len++) {
  24807. offs[len + 1] = offs[len] + count[len];
  24808. }
  24809. /* sort symbols by length, by symbol order within each length */
  24810. for (sym = 0; sym < codes; sym++) {
  24811. if (lens[lens_index + sym] !== 0) {
  24812. work[offs[lens[lens_index + sym]]++] = sym;
  24813. }
  24814. }
  24815. /*
  24816. Create and fill in decoding tables. In this loop, the table being
  24817. filled is at next and has curr index bits. The code being used is huff
  24818. with length len. That code is converted to an index by dropping drop
  24819. bits off of the bottom. For codes where len is less than drop + curr,
  24820. those top drop + curr - len bits are incremented through all values to
  24821. fill the table with replicated entries.
  24822. root is the number of index bits for the root table. When len exceeds
  24823. root, sub-tables are created pointed to by the root entry with an index
  24824. of the low root bits of huff. This is saved in low to check for when a
  24825. new sub-table should be started. drop is zero when the root table is
  24826. being filled, and drop is root when sub-tables are being filled.
  24827. When a new sub-table is needed, it is necessary to look ahead in the
  24828. code lengths to determine what size sub-table is needed. The length
  24829. counts are used for this, and so count[] is decremented as codes are
  24830. entered in the tables.
  24831. used keeps track of how many table entries have been allocated from the
  24832. provided *table space. It is checked for LENS and DIST tables against
  24833. the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
  24834. the initial root table size constants. See the comments in inftrees.h
  24835. for more information.
  24836. sym increments through all symbols, and the loop terminates when
  24837. all codes of length max, i.e. all codes, have been processed. This
  24838. routine permits incomplete codes, so another loop after this one fills
  24839. in the rest of the decoding tables with invalid code markers.
  24840. */
  24841. /* set up for code type */
  24842. // poor man optimization - use if-else instead of switch,
  24843. // to avoid deopts in old v8
  24844. if (type === CODES) {
  24845. base = extra = work; /* dummy value--not used */
  24846. end = 19;
  24847. } else if (type === LENS) {
  24848. base = lbase;
  24849. base_index -= 257;
  24850. extra = lext;
  24851. extra_index -= 257;
  24852. end = 256;
  24853. } else { /* DISTS */
  24854. base = dbase;
  24855. extra = dext;
  24856. end = -1;
  24857. }
  24858. /* initialize opts for loop */
  24859. huff = 0; /* starting code */
  24860. sym = 0; /* starting code symbol */
  24861. len = min; /* starting code length */
  24862. next = table_index; /* current table to fill in */
  24863. curr = root; /* current table index bits */
  24864. drop = 0; /* current bits to drop from code for index */
  24865. low = -1; /* trigger new sub-table when len > root */
  24866. used = 1 << root; /* use root table entries */
  24867. mask = used - 1; /* mask for comparing low */
  24868. /* check available table space */
  24869. if ((type === LENS && used > ENOUGH_LENS) ||
  24870. (type === DISTS && used > ENOUGH_DISTS)) {
  24871. return 1;
  24872. }
  24873. var i=0;
  24874. /* process all codes and make table entries */
  24875. for (;;) {
  24876. i++;
  24877. /* create table entry */
  24878. here_bits = len - drop;
  24879. if (work[sym] < end) {
  24880. here_op = 0;
  24881. here_val = work[sym];
  24882. }
  24883. else if (work[sym] > end) {
  24884. here_op = extra[extra_index + work[sym]];
  24885. here_val = base[base_index + work[sym]];
  24886. }
  24887. else {
  24888. here_op = 32 + 64; /* end of block */
  24889. here_val = 0;
  24890. }
  24891. /* replicate for those indices with low len bits equal to huff */
  24892. incr = 1 << (len - drop);
  24893. fill = 1 << curr;
  24894. min = fill; /* save offset to next table */
  24895. do {
  24896. fill -= incr;
  24897. table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;
  24898. } while (fill !== 0);
  24899. /* backwards increment the len-bit code huff */
  24900. incr = 1 << (len - 1);
  24901. while (huff & incr) {
  24902. incr >>= 1;
  24903. }
  24904. if (incr !== 0) {
  24905. huff &= incr - 1;
  24906. huff += incr;
  24907. } else {
  24908. huff = 0;
  24909. }
  24910. /* go to next symbol, update count, len */
  24911. sym++;
  24912. if (--count[len] === 0) {
  24913. if (len === max) { break; }
  24914. len = lens[lens_index + work[sym]];
  24915. }
  24916. /* create new sub-table if needed */
  24917. if (len > root && (huff & mask) !== low) {
  24918. /* if first time, transition to sub-tables */
  24919. if (drop === 0) {
  24920. drop = root;
  24921. }
  24922. /* increment past last table */
  24923. next += min; /* here min is 1 << curr */
  24924. /* determine length of next table */
  24925. curr = len - drop;
  24926. left = 1 << curr;
  24927. while (curr + drop < max) {
  24928. left -= count[curr + drop];
  24929. if (left <= 0) { break; }
  24930. curr++;
  24931. left <<= 1;
  24932. }
  24933. /* check for enough space */
  24934. used += 1 << curr;
  24935. if ((type === LENS && used > ENOUGH_LENS) ||
  24936. (type === DISTS && used > ENOUGH_DISTS)) {
  24937. return 1;
  24938. }
  24939. /* point entry in root table to sub-table */
  24940. low = huff & mask;
  24941. /*table.op[low] = curr;
  24942. table.bits[low] = root;
  24943. table.val[low] = next - opts.table_index;*/
  24944. table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;
  24945. }
  24946. }
  24947. /* fill in remaining table entry if code is incomplete (guaranteed to have
  24948. at most one remaining entry, since if the code is incomplete, the
  24949. maximum code length that was allowed to get this far is one bit) */
  24950. if (huff !== 0) {
  24951. //table.op[next + huff] = 64; /* invalid code marker */
  24952. //table.bits[next + huff] = len - drop;
  24953. //table.val[next + huff] = 0;
  24954. table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;
  24955. }
  24956. /* set return parameters */
  24957. //opts.table_index += used;
  24958. opts.bits = root;
  24959. return 0;
  24960. };
  24961. /***/ },
  24962. /* 59 */
  24963. /***/ function(module, exports) {
  24964. module.exports = {
  24965. /* Allowed flush values; see deflate() and inflate() below for details */
  24966. Z_NO_FLUSH: 0,
  24967. Z_PARTIAL_FLUSH: 1,
  24968. Z_SYNC_FLUSH: 2,
  24969. Z_FULL_FLUSH: 3,
  24970. Z_FINISH: 4,
  24971. Z_BLOCK: 5,
  24972. Z_TREES: 6,
  24973. /* Return codes for the compression/decompression functions. Negative values
  24974. * are errors, positive values are used for special but normal events.
  24975. */
  24976. Z_OK: 0,
  24977. Z_STREAM_END: 1,
  24978. Z_NEED_DICT: 2,
  24979. Z_ERRNO: -1,
  24980. Z_STREAM_ERROR: -2,
  24981. Z_DATA_ERROR: -3,
  24982. //Z_MEM_ERROR: -4,
  24983. Z_BUF_ERROR: -5,
  24984. //Z_VERSION_ERROR: -6,
  24985. /* compression levels */
  24986. Z_NO_COMPRESSION: 0,
  24987. Z_BEST_SPEED: 1,
  24988. Z_BEST_COMPRESSION: 9,
  24989. Z_DEFAULT_COMPRESSION: -1,
  24990. Z_FILTERED: 1,
  24991. Z_HUFFMAN_ONLY: 2,
  24992. Z_RLE: 3,
  24993. Z_FIXED: 4,
  24994. Z_DEFAULT_STRATEGY: 0,
  24995. /* Possible values of the data_type field (though see inflate()) */
  24996. Z_BINARY: 0,
  24997. Z_TEXT: 1,
  24998. //Z_ASCII: 1, // = Z_TEXT (deprecated)
  24999. Z_UNKNOWN: 2,
  25000. /* The deflate compression method */
  25001. Z_DEFLATED: 8
  25002. //Z_NULL: null // Use -1 or null inline, depending on var type
  25003. };
  25004. /***/ },
  25005. /* 60 */
  25006. /***/ function(module, exports, __webpack_require__) {
  25007. /* WEBPACK VAR INJECTION */(function(global, process) {// Copyright Joyent, Inc. and other Node contributors.
  25008. //
  25009. // Permission is hereby granted, free of charge, to any person obtaining a
  25010. // copy of this software and associated documentation files (the
  25011. // "Software"), to deal in the Software without restriction, including
  25012. // without limitation the rights to use, copy, modify, merge, publish,
  25013. // distribute, sublicense, and/or sell copies of the Software, and to permit
  25014. // persons to whom the Software is furnished to do so, subject to the
  25015. // following conditions:
  25016. //
  25017. // The above copyright notice and this permission notice shall be included
  25018. // in all copies or substantial portions of the Software.
  25019. //
  25020. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  25021. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  25022. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  25023. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  25024. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  25025. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  25026. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  25027. var formatRegExp = /%[sdj%]/g;
  25028. exports.format = function(f) {
  25029. if (!isString(f)) {
  25030. var objects = [];
  25031. for (var i = 0; i < arguments.length; i++) {
  25032. objects.push(inspect(arguments[i]));
  25033. }
  25034. return objects.join(' ');
  25035. }
  25036. var i = 1;
  25037. var args = arguments;
  25038. var len = args.length;
  25039. var str = String(f).replace(formatRegExp, function(x) {
  25040. if (x === '%%') return '%';
  25041. if (i >= len) return x;
  25042. switch (x) {
  25043. case '%s': return String(args[i++]);
  25044. case '%d': return Number(args[i++]);
  25045. case '%j':
  25046. try {
  25047. return JSON.stringify(args[i++]);
  25048. } catch (_) {
  25049. return '[Circular]';
  25050. }
  25051. default:
  25052. return x;
  25053. }
  25054. });
  25055. for (var x = args[i]; i < len; x = args[++i]) {
  25056. if (isNull(x) || !isObject(x)) {
  25057. str += ' ' + x;
  25058. } else {
  25059. str += ' ' + inspect(x);
  25060. }
  25061. }
  25062. return str;
  25063. };
  25064. // Mark that a method should not be used.
  25065. // Returns a modified function which warns once by default.
  25066. // If --no-deprecation is set, then it is a no-op.
  25067. exports.deprecate = function(fn, msg) {
  25068. // Allow for deprecating things in the process of starting up.
  25069. if (isUndefined(global.process)) {
  25070. return function() {
  25071. return exports.deprecate(fn, msg).apply(this, arguments);
  25072. };
  25073. }
  25074. if (process.noDeprecation === true) {
  25075. return fn;
  25076. }
  25077. var warned = false;
  25078. function deprecated() {
  25079. if (!warned) {
  25080. if (process.throwDeprecation) {
  25081. throw new Error(msg);
  25082. } else if (process.traceDeprecation) {
  25083. console.trace(msg);
  25084. } else {
  25085. console.error(msg);
  25086. }
  25087. warned = true;
  25088. }
  25089. return fn.apply(this, arguments);
  25090. }
  25091. return deprecated;
  25092. };
  25093. var debugs = {};
  25094. var debugEnviron;
  25095. exports.debuglog = function(set) {
  25096. if (isUndefined(debugEnviron))
  25097. debugEnviron = process.env.NODE_DEBUG || '';
  25098. set = set.toUpperCase();
  25099. if (!debugs[set]) {
  25100. if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
  25101. var pid = process.pid;
  25102. debugs[set] = function() {
  25103. var msg = exports.format.apply(exports, arguments);
  25104. console.error('%s %d: %s', set, pid, msg);
  25105. };
  25106. } else {
  25107. debugs[set] = function() {};
  25108. }
  25109. }
  25110. return debugs[set];
  25111. };
  25112. /**
  25113. * Echos the value of a value. Trys to print the value out
  25114. * in the best way possible given the different types.
  25115. *
  25116. * @param {Object} obj The object to print out.
  25117. * @param {Object} opts Optional options object that alters the output.
  25118. */
  25119. /* legacy: obj, showHidden, depth, colors*/
  25120. function inspect(obj, opts) {
  25121. // default options
  25122. var ctx = {
  25123. seen: [],
  25124. stylize: stylizeNoColor
  25125. };
  25126. // legacy...
  25127. if (arguments.length >= 3) ctx.depth = arguments[2];
  25128. if (arguments.length >= 4) ctx.colors = arguments[3];
  25129. if (isBoolean(opts)) {
  25130. // legacy...
  25131. ctx.showHidden = opts;
  25132. } else if (opts) {
  25133. // got an "options" object
  25134. exports._extend(ctx, opts);
  25135. }
  25136. // set default options
  25137. if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
  25138. if (isUndefined(ctx.depth)) ctx.depth = 2;
  25139. if (isUndefined(ctx.colors)) ctx.colors = false;
  25140. if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
  25141. if (ctx.colors) ctx.stylize = stylizeWithColor;
  25142. return formatValue(ctx, obj, ctx.depth);
  25143. }
  25144. exports.inspect = inspect;
  25145. // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
  25146. inspect.colors = {
  25147. 'bold' : [1, 22],
  25148. 'italic' : [3, 23],
  25149. 'underline' : [4, 24],
  25150. 'inverse' : [7, 27],
  25151. 'white' : [37, 39],
  25152. 'grey' : [90, 39],
  25153. 'black' : [30, 39],
  25154. 'blue' : [34, 39],
  25155. 'cyan' : [36, 39],
  25156. 'green' : [32, 39],
  25157. 'magenta' : [35, 39],
  25158. 'red' : [31, 39],
  25159. 'yellow' : [33, 39]
  25160. };
  25161. // Don't use 'blue' not visible on cmd.exe
  25162. inspect.styles = {
  25163. 'special': 'cyan',
  25164. 'number': 'yellow',
  25165. 'boolean': 'yellow',
  25166. 'undefined': 'grey',
  25167. 'null': 'bold',
  25168. 'string': 'green',
  25169. 'date': 'magenta',
  25170. // "name": intentionally not styling
  25171. 'regexp': 'red'
  25172. };
  25173. function stylizeWithColor(str, styleType) {
  25174. var style = inspect.styles[styleType];
  25175. if (style) {
  25176. return '\u001b[' + inspect.colors[style][0] + 'm' + str +
  25177. '\u001b[' + inspect.colors[style][1] + 'm';
  25178. } else {
  25179. return str;
  25180. }
  25181. }
  25182. function stylizeNoColor(str, styleType) {
  25183. return str;
  25184. }
  25185. function arrayToHash(array) {
  25186. var hash = {};
  25187. array.forEach(function(val, idx) {
  25188. hash[val] = true;
  25189. });
  25190. return hash;
  25191. }
  25192. function formatValue(ctx, value, recurseTimes) {
  25193. // Provide a hook for user-specified inspect functions.
  25194. // Check that value is an object with an inspect function on it
  25195. if (ctx.customInspect &&
  25196. value &&
  25197. isFunction(value.inspect) &&
  25198. // Filter out the util module, it's inspect function is special
  25199. value.inspect !== exports.inspect &&
  25200. // Also filter out any prototype objects using the circular check.
  25201. !(value.constructor && value.constructor.prototype === value)) {
  25202. var ret = value.inspect(recurseTimes, ctx);
  25203. if (!isString(ret)) {
  25204. ret = formatValue(ctx, ret, recurseTimes);
  25205. }
  25206. return ret;
  25207. }
  25208. // Primitive types cannot have properties
  25209. var primitive = formatPrimitive(ctx, value);
  25210. if (primitive) {
  25211. return primitive;
  25212. }
  25213. // Look up the keys of the object.
  25214. var keys = Object.keys(value);
  25215. var visibleKeys = arrayToHash(keys);
  25216. if (ctx.showHidden) {
  25217. keys = Object.getOwnPropertyNames(value);
  25218. }
  25219. // IE doesn't make error fields non-enumerable
  25220. // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
  25221. if (isError(value)
  25222. && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
  25223. return formatError(value);
  25224. }
  25225. // Some type of object without properties can be shortcutted.
  25226. if (keys.length === 0) {
  25227. if (isFunction(value)) {
  25228. var name = value.name ? ': ' + value.name : '';
  25229. return ctx.stylize('[Function' + name + ']', 'special');
  25230. }
  25231. if (isRegExp(value)) {
  25232. return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
  25233. }
  25234. if (isDate(value)) {
  25235. return ctx.stylize(Date.prototype.toString.call(value), 'date');
  25236. }
  25237. if (isError(value)) {
  25238. return formatError(value);
  25239. }
  25240. }
  25241. var base = '', array = false, braces = ['{', '}'];
  25242. // Make Array say that they are Array
  25243. if (isArray(value)) {
  25244. array = true;
  25245. braces = ['[', ']'];
  25246. }
  25247. // Make functions say that they are functions
  25248. if (isFunction(value)) {
  25249. var n = value.name ? ': ' + value.name : '';
  25250. base = ' [Function' + n + ']';
  25251. }
  25252. // Make RegExps say that they are RegExps
  25253. if (isRegExp(value)) {
  25254. base = ' ' + RegExp.prototype.toString.call(value);
  25255. }
  25256. // Make dates with properties first say the date
  25257. if (isDate(value)) {
  25258. base = ' ' + Date.prototype.toUTCString.call(value);
  25259. }
  25260. // Make error with message first say the error
  25261. if (isError(value)) {
  25262. base = ' ' + formatError(value);
  25263. }
  25264. if (keys.length === 0 && (!array || value.length == 0)) {
  25265. return braces[0] + base + braces[1];
  25266. }
  25267. if (recurseTimes < 0) {
  25268. if (isRegExp(value)) {
  25269. return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
  25270. } else {
  25271. return ctx.stylize('[Object]', 'special');
  25272. }
  25273. }
  25274. ctx.seen.push(value);
  25275. var output;
  25276. if (array) {
  25277. output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
  25278. } else {
  25279. output = keys.map(function(key) {
  25280. return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
  25281. });
  25282. }
  25283. ctx.seen.pop();
  25284. return reduceToSingleString(output, base, braces);
  25285. }
  25286. function formatPrimitive(ctx, value) {
  25287. if (isUndefined(value))
  25288. return ctx.stylize('undefined', 'undefined');
  25289. if (isString(value)) {
  25290. var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
  25291. .replace(/'/g, "\\'")
  25292. .replace(/\\"/g, '"') + '\'';
  25293. return ctx.stylize(simple, 'string');
  25294. }
  25295. if (isNumber(value))
  25296. return ctx.stylize('' + value, 'number');
  25297. if (isBoolean(value))
  25298. return ctx.stylize('' + value, 'boolean');
  25299. // For some reason typeof null is "object", so special case here.
  25300. if (isNull(value))
  25301. return ctx.stylize('null', 'null');
  25302. }
  25303. function formatError(value) {
  25304. return '[' + Error.prototype.toString.call(value) + ']';
  25305. }
  25306. function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
  25307. var output = [];
  25308. for (var i = 0, l = value.length; i < l; ++i) {
  25309. if (hasOwnProperty(value, String(i))) {
  25310. output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
  25311. String(i), true));
  25312. } else {
  25313. output.push('');
  25314. }
  25315. }
  25316. keys.forEach(function(key) {
  25317. if (!key.match(/^\d+$/)) {
  25318. output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
  25319. key, true));
  25320. }
  25321. });
  25322. return output;
  25323. }
  25324. function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
  25325. var name, str, desc;
  25326. desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
  25327. if (desc.get) {
  25328. if (desc.set) {
  25329. str = ctx.stylize('[Getter/Setter]', 'special');
  25330. } else {
  25331. str = ctx.stylize('[Getter]', 'special');
  25332. }
  25333. } else {
  25334. if (desc.set) {
  25335. str = ctx.stylize('[Setter]', 'special');
  25336. }
  25337. }
  25338. if (!hasOwnProperty(visibleKeys, key)) {
  25339. name = '[' + key + ']';
  25340. }
  25341. if (!str) {
  25342. if (ctx.seen.indexOf(desc.value) < 0) {
  25343. if (isNull(recurseTimes)) {
  25344. str = formatValue(ctx, desc.value, null);
  25345. } else {
  25346. str = formatValue(ctx, desc.value, recurseTimes - 1);
  25347. }
  25348. if (str.indexOf('\n') > -1) {
  25349. if (array) {
  25350. str = str.split('\n').map(function(line) {
  25351. return ' ' + line;
  25352. }).join('\n').substr(2);
  25353. } else {
  25354. str = '\n' + str.split('\n').map(function(line) {
  25355. return ' ' + line;
  25356. }).join('\n');
  25357. }
  25358. }
  25359. } else {
  25360. str = ctx.stylize('[Circular]', 'special');
  25361. }
  25362. }
  25363. if (isUndefined(name)) {
  25364. if (array && key.match(/^\d+$/)) {
  25365. return str;
  25366. }
  25367. name = JSON.stringify('' + key);
  25368. if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
  25369. name = name.substr(1, name.length - 2);
  25370. name = ctx.stylize(name, 'name');
  25371. } else {
  25372. name = name.replace(/'/g, "\\'")
  25373. .replace(/\\"/g, '"')
  25374. .replace(/(^"|"$)/g, "'");
  25375. name = ctx.stylize(name, 'string');
  25376. }
  25377. }
  25378. return name + ': ' + str;
  25379. }
  25380. function reduceToSingleString(output, base, braces) {
  25381. var numLinesEst = 0;
  25382. var length = output.reduce(function(prev, cur) {
  25383. numLinesEst++;
  25384. if (cur.indexOf('\n') >= 0) numLinesEst++;
  25385. return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
  25386. }, 0);
  25387. if (length > 60) {
  25388. return braces[0] +
  25389. (base === '' ? '' : base + '\n ') +
  25390. ' ' +
  25391. output.join(',\n ') +
  25392. ' ' +
  25393. braces[1];
  25394. }
  25395. return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
  25396. }
  25397. // NOTE: These type checking functions intentionally don't use `instanceof`
  25398. // because it is fragile and can be easily faked with `Object.create()`.
  25399. function isArray(ar) {
  25400. return Array.isArray(ar);
  25401. }
  25402. exports.isArray = isArray;
  25403. function isBoolean(arg) {
  25404. return typeof arg === 'boolean';
  25405. }
  25406. exports.isBoolean = isBoolean;
  25407. function isNull(arg) {
  25408. return arg === null;
  25409. }
  25410. exports.isNull = isNull;
  25411. function isNullOrUndefined(arg) {
  25412. return arg == null;
  25413. }
  25414. exports.isNullOrUndefined = isNullOrUndefined;
  25415. function isNumber(arg) {
  25416. return typeof arg === 'number';
  25417. }
  25418. exports.isNumber = isNumber;
  25419. function isString(arg) {
  25420. return typeof arg === 'string';
  25421. }
  25422. exports.isString = isString;
  25423. function isSymbol(arg) {
  25424. return typeof arg === 'symbol';
  25425. }
  25426. exports.isSymbol = isSymbol;
  25427. function isUndefined(arg) {
  25428. return arg === void 0;
  25429. }
  25430. exports.isUndefined = isUndefined;
  25431. function isRegExp(re) {
  25432. return isObject(re) && objectToString(re) === '[object RegExp]';
  25433. }
  25434. exports.isRegExp = isRegExp;
  25435. function isObject(arg) {
  25436. return typeof arg === 'object' && arg !== null;
  25437. }
  25438. exports.isObject = isObject;
  25439. function isDate(d) {
  25440. return isObject(d) && objectToString(d) === '[object Date]';
  25441. }
  25442. exports.isDate = isDate;
  25443. function isError(e) {
  25444. return isObject(e) &&
  25445. (objectToString(e) === '[object Error]' || e instanceof Error);
  25446. }
  25447. exports.isError = isError;
  25448. function isFunction(arg) {
  25449. return typeof arg === 'function';
  25450. }
  25451. exports.isFunction = isFunction;
  25452. function isPrimitive(arg) {
  25453. return arg === null ||
  25454. typeof arg === 'boolean' ||
  25455. typeof arg === 'number' ||
  25456. typeof arg === 'string' ||
  25457. typeof arg === 'symbol' || // ES6 symbol
  25458. typeof arg === 'undefined';
  25459. }
  25460. exports.isPrimitive = isPrimitive;
  25461. exports.isBuffer = __webpack_require__(61);
  25462. function objectToString(o) {
  25463. return Object.prototype.toString.call(o);
  25464. }
  25465. function pad(n) {
  25466. return n < 10 ? '0' + n.toString(10) : n.toString(10);
  25467. }
  25468. var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
  25469. 'Oct', 'Nov', 'Dec'];
  25470. // 26 Feb 16:19:34
  25471. function timestamp() {
  25472. var d = new Date();
  25473. var time = [pad(d.getHours()),
  25474. pad(d.getMinutes()),
  25475. pad(d.getSeconds())].join(':');
  25476. return [d.getDate(), months[d.getMonth()], time].join(' ');
  25477. }
  25478. // log is just a thin wrapper to console.log that prepends a timestamp
  25479. exports.log = function() {
  25480. console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
  25481. };
  25482. /**
  25483. * Inherit the prototype methods from one constructor into another.
  25484. *
  25485. * The Function.prototype.inherits from lang.js rewritten as a standalone
  25486. * function (not on Function.prototype). NOTE: If this file is to be loaded
  25487. * during bootstrapping this function needs to be rewritten using some native
  25488. * functions as prototype setup using normal JavaScript does not work as
  25489. * expected during bootstrapping (see mirror.js in r114903).
  25490. *
  25491. * @param {function} ctor Constructor function which needs to inherit the
  25492. * prototype.
  25493. * @param {function} superCtor Constructor function to inherit prototype from.
  25494. */
  25495. exports.inherits = __webpack_require__(62);
  25496. exports._extend = function(origin, add) {
  25497. // Don't do anything if add isn't an object
  25498. if (!add || !isObject(add)) return origin;
  25499. var keys = Object.keys(add);
  25500. var i = keys.length;
  25501. while (i--) {
  25502. origin[keys[i]] = add[keys[i]];
  25503. }
  25504. return origin;
  25505. };
  25506. function hasOwnProperty(obj, prop) {
  25507. return Object.prototype.hasOwnProperty.call(obj, prop);
  25508. }
  25509. /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(30)))
  25510. /***/ },
  25511. /* 61 */
  25512. /***/ function(module, exports) {
  25513. module.exports = function isBuffer(arg) {
  25514. return arg && typeof arg === 'object'
  25515. && typeof arg.copy === 'function'
  25516. && typeof arg.fill === 'function'
  25517. && typeof arg.readUInt8 === 'function';
  25518. }
  25519. /***/ },
  25520. /* 62 */
  25521. /***/ function(module, exports) {
  25522. if (typeof Object.create === 'function') {
  25523. // implementation from standard node.js 'util' module
  25524. module.exports = function inherits(ctor, superCtor) {
  25525. ctor.super_ = superCtor
  25526. ctor.prototype = Object.create(superCtor.prototype, {
  25527. constructor: {
  25528. value: ctor,
  25529. enumerable: false,
  25530. writable: true,
  25531. configurable: true
  25532. }
  25533. });
  25534. };
  25535. } else {
  25536. // old school shim for old browsers
  25537. module.exports = function inherits(ctor, superCtor) {
  25538. ctor.super_ = superCtor
  25539. var TempCtor = function () {}
  25540. TempCtor.prototype = superCtor.prototype
  25541. ctor.prototype = new TempCtor()
  25542. ctor.prototype.constructor = ctor
  25543. }
  25544. }
  25545. /***/ },
  25546. /* 63 */
  25547. /***/ function(module, exports, __webpack_require__) {
  25548. // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
  25549. //
  25550. // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
  25551. //
  25552. // Originally from narwhal.js (http://narwhaljs.org)
  25553. // Copyright (c) 2009 Thomas Robinson <280north.com>
  25554. //
  25555. // Permission is hereby granted, free of charge, to any person obtaining a copy
  25556. // of this software and associated documentation files (the 'Software'), to
  25557. // deal in the Software without restriction, including without limitation the
  25558. // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  25559. // sell copies of the Software, and to permit persons to whom the Software is
  25560. // furnished to do so, subject to the following conditions:
  25561. //
  25562. // The above copyright notice and this permission notice shall be included in
  25563. // all copies or substantial portions of the Software.
  25564. //
  25565. // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  25566. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  25567. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  25568. // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  25569. // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  25570. // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  25571. // when used in node, this will actually load the util module we depend on
  25572. // versus loading the builtin util module as happens otherwise
  25573. // this is a bug in node module loading as far as I am concerned
  25574. var util = __webpack_require__(60);
  25575. var pSlice = Array.prototype.slice;
  25576. var hasOwn = Object.prototype.hasOwnProperty;
  25577. // 1. The assert module provides functions that throw
  25578. // AssertionError's when particular conditions are not met. The
  25579. // assert module must conform to the following interface.
  25580. var assert = module.exports = ok;
  25581. // 2. The AssertionError is defined in assert.
  25582. // new assert.AssertionError({ message: message,
  25583. // actual: actual,
  25584. // expected: expected })
  25585. assert.AssertionError = function AssertionError(options) {
  25586. this.name = 'AssertionError';
  25587. this.actual = options.actual;
  25588. this.expected = options.expected;
  25589. this.operator = options.operator;
  25590. if (options.message) {
  25591. this.message = options.message;
  25592. this.generatedMessage = false;
  25593. } else {
  25594. this.message = getMessage(this);
  25595. this.generatedMessage = true;
  25596. }
  25597. var stackStartFunction = options.stackStartFunction || fail;
  25598. if (Error.captureStackTrace) {
  25599. Error.captureStackTrace(this, stackStartFunction);
  25600. }
  25601. else {
  25602. // non v8 browsers so we can have a stacktrace
  25603. var err = new Error();
  25604. if (err.stack) {
  25605. var out = err.stack;
  25606. // try to strip useless frames
  25607. var fn_name = stackStartFunction.name;
  25608. var idx = out.indexOf('\n' + fn_name);
  25609. if (idx >= 0) {
  25610. // once we have located the function frame
  25611. // we need to strip out everything before it (and its line)
  25612. var next_line = out.indexOf('\n', idx + 1);
  25613. out = out.substring(next_line + 1);
  25614. }
  25615. this.stack = out;
  25616. }
  25617. }
  25618. };
  25619. // assert.AssertionError instanceof Error
  25620. util.inherits(assert.AssertionError, Error);
  25621. function replacer(key, value) {
  25622. if (util.isUndefined(value)) {
  25623. return '' + value;
  25624. }
  25625. if (util.isNumber(value) && !isFinite(value)) {
  25626. return value.toString();
  25627. }
  25628. if (util.isFunction(value) || util.isRegExp(value)) {
  25629. return value.toString();
  25630. }
  25631. return value;
  25632. }
  25633. function truncate(s, n) {
  25634. if (util.isString(s)) {
  25635. return s.length < n ? s : s.slice(0, n);
  25636. } else {
  25637. return s;
  25638. }
  25639. }
  25640. function getMessage(self) {
  25641. return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
  25642. self.operator + ' ' +
  25643. truncate(JSON.stringify(self.expected, replacer), 128);
  25644. }
  25645. // At present only the three keys mentioned above are used and
  25646. // understood by the spec. Implementations or sub modules can pass
  25647. // other keys to the AssertionError's constructor - they will be
  25648. // ignored.
  25649. // 3. All of the following functions must throw an AssertionError
  25650. // when a corresponding condition is not met, with a message that
  25651. // may be undefined if not provided. All assertion methods provide
  25652. // both the actual and expected values to the assertion error for
  25653. // display purposes.
  25654. function fail(actual, expected, message, operator, stackStartFunction) {
  25655. throw new assert.AssertionError({
  25656. message: message,
  25657. actual: actual,
  25658. expected: expected,
  25659. operator: operator,
  25660. stackStartFunction: stackStartFunction
  25661. });
  25662. }
  25663. // EXTENSION! allows for well behaved errors defined elsewhere.
  25664. assert.fail = fail;
  25665. // 4. Pure assertion tests whether a value is truthy, as determined
  25666. // by !!guard.
  25667. // assert.ok(guard, message_opt);
  25668. // This statement is equivalent to assert.equal(true, !!guard,
  25669. // message_opt);. To test strictly for the value true, use
  25670. // assert.strictEqual(true, guard, message_opt);.
  25671. function ok(value, message) {
  25672. if (!value) fail(value, true, message, '==', assert.ok);
  25673. }
  25674. assert.ok = ok;
  25675. // 5. The equality assertion tests shallow, coercive equality with
  25676. // ==.
  25677. // assert.equal(actual, expected, message_opt);
  25678. assert.equal = function equal(actual, expected, message) {
  25679. if (actual != expected) fail(actual, expected, message, '==', assert.equal);
  25680. };
  25681. // 6. The non-equality assertion tests for whether two objects are not equal
  25682. // with != assert.notEqual(actual, expected, message_opt);
  25683. assert.notEqual = function notEqual(actual, expected, message) {
  25684. if (actual == expected) {
  25685. fail(actual, expected, message, '!=', assert.notEqual);
  25686. }
  25687. };
  25688. // 7. The equivalence assertion tests a deep equality relation.
  25689. // assert.deepEqual(actual, expected, message_opt);
  25690. assert.deepEqual = function deepEqual(actual, expected, message) {
  25691. if (!_deepEqual(actual, expected)) {
  25692. fail(actual, expected, message, 'deepEqual', assert.deepEqual);
  25693. }
  25694. };
  25695. function _deepEqual(actual, expected) {
  25696. // 7.1. All identical values are equivalent, as determined by ===.
  25697. if (actual === expected) {
  25698. return true;
  25699. } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
  25700. if (actual.length != expected.length) return false;
  25701. for (var i = 0; i < actual.length; i++) {
  25702. if (actual[i] !== expected[i]) return false;
  25703. }
  25704. return true;
  25705. // 7.2. If the expected value is a Date object, the actual value is
  25706. // equivalent if it is also a Date object that refers to the same time.
  25707. } else if (util.isDate(actual) && util.isDate(expected)) {
  25708. return actual.getTime() === expected.getTime();
  25709. // 7.3 If the expected value is a RegExp object, the actual value is
  25710. // equivalent if it is also a RegExp object with the same source and
  25711. // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
  25712. } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
  25713. return actual.source === expected.source &&
  25714. actual.global === expected.global &&
  25715. actual.multiline === expected.multiline &&
  25716. actual.lastIndex === expected.lastIndex &&
  25717. actual.ignoreCase === expected.ignoreCase;
  25718. // 7.4. Other pairs that do not both pass typeof value == 'object',
  25719. // equivalence is determined by ==.
  25720. } else if (!util.isObject(actual) && !util.isObject(expected)) {
  25721. return actual == expected;
  25722. // 7.5 For all other Object pairs, including Array objects, equivalence is
  25723. // determined by having the same number of owned properties (as verified
  25724. // with Object.prototype.hasOwnProperty.call), the same set of keys
  25725. // (although not necessarily the same order), equivalent values for every
  25726. // corresponding key, and an identical 'prototype' property. Note: this
  25727. // accounts for both named and indexed properties on Arrays.
  25728. } else {
  25729. return objEquiv(actual, expected);
  25730. }
  25731. }
  25732. function isArguments(object) {
  25733. return Object.prototype.toString.call(object) == '[object Arguments]';
  25734. }
  25735. function objEquiv(a, b) {
  25736. if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
  25737. return false;
  25738. // an identical 'prototype' property.
  25739. if (a.prototype !== b.prototype) return false;
  25740. // if one is a primitive, the other must be same
  25741. if (util.isPrimitive(a) || util.isPrimitive(b)) {
  25742. return a === b;
  25743. }
  25744. var aIsArgs = isArguments(a),
  25745. bIsArgs = isArguments(b);
  25746. if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
  25747. return false;
  25748. if (aIsArgs) {
  25749. a = pSlice.call(a);
  25750. b = pSlice.call(b);
  25751. return _deepEqual(a, b);
  25752. }
  25753. var ka = objectKeys(a),
  25754. kb = objectKeys(b),
  25755. key, i;
  25756. // having the same number of owned properties (keys incorporates
  25757. // hasOwnProperty)
  25758. if (ka.length != kb.length)
  25759. return false;
  25760. //the same set of keys (although not necessarily the same order),
  25761. ka.sort();
  25762. kb.sort();
  25763. //~~~cheap key test
  25764. for (i = ka.length - 1; i >= 0; i--) {
  25765. if (ka[i] != kb[i])
  25766. return false;
  25767. }
  25768. //equivalent values for every corresponding key, and
  25769. //~~~possibly expensive deep test
  25770. for (i = ka.length - 1; i >= 0; i--) {
  25771. key = ka[i];
  25772. if (!_deepEqual(a[key], b[key])) return false;
  25773. }
  25774. return true;
  25775. }
  25776. // 8. The non-equivalence assertion tests for any deep inequality.
  25777. // assert.notDeepEqual(actual, expected, message_opt);
  25778. assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
  25779. if (_deepEqual(actual, expected)) {
  25780. fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
  25781. }
  25782. };
  25783. // 9. The strict equality assertion tests strict equality, as determined by ===.
  25784. // assert.strictEqual(actual, expected, message_opt);
  25785. assert.strictEqual = function strictEqual(actual, expected, message) {
  25786. if (actual !== expected) {
  25787. fail(actual, expected, message, '===', assert.strictEqual);
  25788. }
  25789. };
  25790. // 10. The strict non-equality assertion tests for strict inequality, as
  25791. // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
  25792. assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
  25793. if (actual === expected) {
  25794. fail(actual, expected, message, '!==', assert.notStrictEqual);
  25795. }
  25796. };
  25797. function expectedException(actual, expected) {
  25798. if (!actual || !expected) {
  25799. return false;
  25800. }
  25801. if (Object.prototype.toString.call(expected) == '[object RegExp]') {
  25802. return expected.test(actual);
  25803. } else if (actual instanceof expected) {
  25804. return true;
  25805. } else if (expected.call({}, actual) === true) {
  25806. return true;
  25807. }
  25808. return false;
  25809. }
  25810. function _throws(shouldThrow, block, expected, message) {
  25811. var actual;
  25812. if (util.isString(expected)) {
  25813. message = expected;
  25814. expected = null;
  25815. }
  25816. try {
  25817. block();
  25818. } catch (e) {
  25819. actual = e;
  25820. }
  25821. message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
  25822. (message ? ' ' + message : '.');
  25823. if (shouldThrow && !actual) {
  25824. fail(actual, expected, 'Missing expected exception' + message);
  25825. }
  25826. if (!shouldThrow && expectedException(actual, expected)) {
  25827. fail(actual, expected, 'Got unwanted exception' + message);
  25828. }
  25829. if ((shouldThrow && actual && expected &&
  25830. !expectedException(actual, expected)) || (!shouldThrow && actual)) {
  25831. throw actual;
  25832. }
  25833. }
  25834. // 11. Expected to throw an error:
  25835. // assert.throws(block, Error_opt, message_opt);
  25836. assert.throws = function(block, /*optional*/error, /*optional*/message) {
  25837. _throws.apply(this, [true].concat(pSlice.call(arguments)));
  25838. };
  25839. // EXTENSION! This is annoying to write outside this module.
  25840. assert.doesNotThrow = function(block, /*optional*/message) {
  25841. _throws.apply(this, [false].concat(pSlice.call(arguments)));
  25842. };
  25843. assert.ifError = function(err) { if (err) {throw err;}};
  25844. var objectKeys = Object.keys || function (obj) {
  25845. var keys = [];
  25846. for (var key in obj) {
  25847. if (hasOwn.call(obj, key)) keys.push(key);
  25848. }
  25849. return keys;
  25850. };
  25851. /***/ },
  25852. /* 64 */
  25853. /***/ function(module, exports) {
  25854. // Generated by CoffeeScript 1.7.1
  25855. /*
  25856. PDFPage - represents a single page in the PDF document
  25857. By Devon Govett
  25858. */
  25859. (function() {
  25860. var PDFPage;
  25861. PDFPage = (function() {
  25862. var DEFAULT_MARGINS, SIZES;
  25863. function PDFPage(document, options) {
  25864. var dimensions;
  25865. this.document = document;
  25866. if (options == null) {
  25867. options = {};
  25868. }
  25869. this.size = options.size || 'letter';
  25870. this.layout = options.layout || 'portrait';
  25871. if (typeof options.margin === 'number') {
  25872. this.margins = {
  25873. top: options.margin,
  25874. left: options.margin,
  25875. bottom: options.margin,
  25876. right: options.margin
  25877. };
  25878. } else {
  25879. this.margins = options.margins || DEFAULT_MARGINS;
  25880. }
  25881. dimensions = Array.isArray(this.size) ? this.size : SIZES[this.size.toUpperCase()];
  25882. this.width = dimensions[this.layout === 'portrait' ? 0 : 1];
  25883. this.height = dimensions[this.layout === 'portrait' ? 1 : 0];
  25884. this.content = this.document.ref();
  25885. this.resources = this.document.ref({
  25886. ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI']
  25887. });
  25888. Object.defineProperties(this, {
  25889. fonts: {
  25890. get: (function(_this) {
  25891. return function() {
  25892. var _base;
  25893. return (_base = _this.resources.data).Font != null ? _base.Font : _base.Font = {};
  25894. };
  25895. })(this)
  25896. },
  25897. xobjects: {
  25898. get: (function(_this) {
  25899. return function() {
  25900. var _base;
  25901. return (_base = _this.resources.data).XObject != null ? _base.XObject : _base.XObject = {};
  25902. };
  25903. })(this)
  25904. },
  25905. ext_gstates: {
  25906. get: (function(_this) {
  25907. return function() {
  25908. var _base;
  25909. return (_base = _this.resources.data).ExtGState != null ? _base.ExtGState : _base.ExtGState = {};
  25910. };
  25911. })(this)
  25912. },
  25913. patterns: {
  25914. get: (function(_this) {
  25915. return function() {
  25916. var _base;
  25917. return (_base = _this.resources.data).Pattern != null ? _base.Pattern : _base.Pattern = {};
  25918. };
  25919. })(this)
  25920. },
  25921. annotations: {
  25922. get: (function(_this) {
  25923. return function() {
  25924. var _base;
  25925. return (_base = _this.dictionary.data).Annots != null ? _base.Annots : _base.Annots = [];
  25926. };
  25927. })(this)
  25928. }
  25929. });
  25930. this.dictionary = this.document.ref({
  25931. Type: 'Page',
  25932. Parent: this.document._root.data.Pages,
  25933. MediaBox: [0, 0, this.width, this.height],
  25934. Contents: this.content,
  25935. Resources: this.resources
  25936. });
  25937. }
  25938. PDFPage.prototype.maxY = function() {
  25939. return this.height - this.margins.bottom;
  25940. };
  25941. PDFPage.prototype.write = function(chunk) {
  25942. return this.content.write(chunk);
  25943. };
  25944. PDFPage.prototype.end = function() {
  25945. this.dictionary.end();
  25946. this.resources.end();
  25947. return this.content.end();
  25948. };
  25949. DEFAULT_MARGINS = {
  25950. top: 72,
  25951. left: 72,
  25952. bottom: 72,
  25953. right: 72
  25954. };
  25955. SIZES = {
  25956. '4A0': [4767.87, 6740.79],
  25957. '2A0': [3370.39, 4767.87],
  25958. A0: [2383.94, 3370.39],
  25959. A1: [1683.78, 2383.94],
  25960. A2: [1190.55, 1683.78],
  25961. A3: [841.89, 1190.55],
  25962. A4: [595.28, 841.89],
  25963. A5: [419.53, 595.28],
  25964. A6: [297.64, 419.53],
  25965. A7: [209.76, 297.64],
  25966. A8: [147.40, 209.76],
  25967. A9: [104.88, 147.40],
  25968. A10: [73.70, 104.88],
  25969. B0: [2834.65, 4008.19],
  25970. B1: [2004.09, 2834.65],
  25971. B2: [1417.32, 2004.09],
  25972. B3: [1000.63, 1417.32],
  25973. B4: [708.66, 1000.63],
  25974. B5: [498.90, 708.66],
  25975. B6: [354.33, 498.90],
  25976. B7: [249.45, 354.33],
  25977. B8: [175.75, 249.45],
  25978. B9: [124.72, 175.75],
  25979. B10: [87.87, 124.72],
  25980. C0: [2599.37, 3676.54],
  25981. C1: [1836.85, 2599.37],
  25982. C2: [1298.27, 1836.85],
  25983. C3: [918.43, 1298.27],
  25984. C4: [649.13, 918.43],
  25985. C5: [459.21, 649.13],
  25986. C6: [323.15, 459.21],
  25987. C7: [229.61, 323.15],
  25988. C8: [161.57, 229.61],
  25989. C9: [113.39, 161.57],
  25990. C10: [79.37, 113.39],
  25991. RA0: [2437.80, 3458.27],
  25992. RA1: [1729.13, 2437.80],
  25993. RA2: [1218.90, 1729.13],
  25994. RA3: [864.57, 1218.90],
  25995. RA4: [609.45, 864.57],
  25996. SRA0: [2551.18, 3628.35],
  25997. SRA1: [1814.17, 2551.18],
  25998. SRA2: [1275.59, 1814.17],
  25999. SRA3: [907.09, 1275.59],
  26000. SRA4: [637.80, 907.09],
  26001. EXECUTIVE: [521.86, 756.00],
  26002. FOLIO: [612.00, 936.00],
  26003. LEGAL: [612.00, 1008.00],
  26004. LETTER: [612.00, 792.00],
  26005. TABLOID: [792.00, 1224.00]
  26006. };
  26007. return PDFPage;
  26008. })();
  26009. module.exports = PDFPage;
  26010. }).call(this);
  26011. /***/ },
  26012. /* 65 */
  26013. /***/ function(module, exports, __webpack_require__) {
  26014. // Generated by CoffeeScript 1.7.1
  26015. (function() {
  26016. var PDFGradient, PDFLinearGradient, PDFRadialGradient, namedColors, _ref;
  26017. _ref = __webpack_require__(66), PDFGradient = _ref.PDFGradient, PDFLinearGradient = _ref.PDFLinearGradient, PDFRadialGradient = _ref.PDFRadialGradient;
  26018. module.exports = {
  26019. initColor: function() {
  26020. this._opacityRegistry = {};
  26021. this._opacityCount = 0;
  26022. return this._gradCount = 0;
  26023. },
  26024. _normalizeColor: function(color) {
  26025. var hex, part;
  26026. if (color instanceof PDFGradient) {
  26027. return color;
  26028. }
  26029. if (typeof color === 'string') {
  26030. if (color.charAt(0) === '#') {
  26031. if (color.length === 4) {
  26032. color = color.replace(/#([0-9A-F])([0-9A-F])([0-9A-F])/i, "#$1$1$2$2$3$3");
  26033. }
  26034. hex = parseInt(color.slice(1), 16);
  26035. color = [hex >> 16, hex >> 8 & 0xff, hex & 0xff];
  26036. } else if (namedColors[color]) {
  26037. color = namedColors[color];
  26038. }
  26039. }
  26040. if (Array.isArray(color)) {
  26041. if (color.length === 3) {
  26042. color = (function() {
  26043. var _i, _len, _results;
  26044. _results = [];
  26045. for (_i = 0, _len = color.length; _i < _len; _i++) {
  26046. part = color[_i];
  26047. _results.push(part / 255);
  26048. }
  26049. return _results;
  26050. })();
  26051. } else if (color.length === 4) {
  26052. color = (function() {
  26053. var _i, _len, _results;
  26054. _results = [];
  26055. for (_i = 0, _len = color.length; _i < _len; _i++) {
  26056. part = color[_i];
  26057. _results.push(part / 100);
  26058. }
  26059. return _results;
  26060. })();
  26061. }
  26062. return color;
  26063. }
  26064. return null;
  26065. },
  26066. _setColor: function(color, stroke) {
  26067. var gstate, name, op, space;
  26068. color = this._normalizeColor(color);
  26069. if (!color) {
  26070. return false;
  26071. }
  26072. if (this._sMasked) {
  26073. gstate = this.ref({
  26074. Type: 'ExtGState',
  26075. SMask: 'None'
  26076. });
  26077. gstate.end();
  26078. name = "Gs" + (++this._opacityCount);
  26079. this.page.ext_gstates[name] = gstate;
  26080. this.addContent("/" + name + " gs");
  26081. this._sMasked = false;
  26082. }
  26083. op = stroke ? 'SCN' : 'scn';
  26084. if (color instanceof PDFGradient) {
  26085. this._setColorSpace('Pattern', stroke);
  26086. color.apply(op);
  26087. } else {
  26088. space = color.length === 4 ? 'DeviceCMYK' : 'DeviceRGB';
  26089. this._setColorSpace(space, stroke);
  26090. color = color.join(' ');
  26091. this.addContent("" + color + " " + op);
  26092. }
  26093. return true;
  26094. },
  26095. _setColorSpace: function(space, stroke) {
  26096. var op;
  26097. op = stroke ? 'CS' : 'cs';
  26098. return this.addContent("/" + space + " " + op);
  26099. },
  26100. fillColor: function(color, opacity) {
  26101. var set;
  26102. if (opacity == null) {
  26103. opacity = 1;
  26104. }
  26105. set = this._setColor(color, false);
  26106. if (set) {
  26107. this.fillOpacity(opacity);
  26108. }
  26109. this._fillColor = [color, opacity];
  26110. return this;
  26111. },
  26112. strokeColor: function(color, opacity) {
  26113. var set;
  26114. if (opacity == null) {
  26115. opacity = 1;
  26116. }
  26117. set = this._setColor(color, true);
  26118. if (set) {
  26119. this.strokeOpacity(opacity);
  26120. }
  26121. return this;
  26122. },
  26123. opacity: function(opacity) {
  26124. this._doOpacity(opacity, opacity);
  26125. return this;
  26126. },
  26127. fillOpacity: function(opacity) {
  26128. this._doOpacity(opacity, null);
  26129. return this;
  26130. },
  26131. strokeOpacity: function(opacity) {
  26132. this._doOpacity(null, opacity);
  26133. return this;
  26134. },
  26135. _doOpacity: function(fillOpacity, strokeOpacity) {
  26136. var dictionary, id, key, name, _ref1;
  26137. if (!((fillOpacity != null) || (strokeOpacity != null))) {
  26138. return;
  26139. }
  26140. if (fillOpacity != null) {
  26141. fillOpacity = Math.max(0, Math.min(1, fillOpacity));
  26142. }
  26143. if (strokeOpacity != null) {
  26144. strokeOpacity = Math.max(0, Math.min(1, strokeOpacity));
  26145. }
  26146. key = "" + fillOpacity + "_" + strokeOpacity;
  26147. if (this._opacityRegistry[key]) {
  26148. _ref1 = this._opacityRegistry[key], dictionary = _ref1[0], name = _ref1[1];
  26149. } else {
  26150. dictionary = {
  26151. Type: 'ExtGState'
  26152. };
  26153. if (fillOpacity != null) {
  26154. dictionary.ca = fillOpacity;
  26155. }
  26156. if (strokeOpacity != null) {
  26157. dictionary.CA = strokeOpacity;
  26158. }
  26159. dictionary = this.ref(dictionary);
  26160. dictionary.end();
  26161. id = ++this._opacityCount;
  26162. name = "Gs" + id;
  26163. this._opacityRegistry[key] = [dictionary, name];
  26164. }
  26165. this.page.ext_gstates[name] = dictionary;
  26166. return this.addContent("/" + name + " gs");
  26167. },
  26168. linearGradient: function(x1, y1, x2, y2) {
  26169. return new PDFLinearGradient(this, x1, y1, x2, y2);
  26170. },
  26171. radialGradient: function(x1, y1, r1, x2, y2, r2) {
  26172. return new PDFRadialGradient(this, x1, y1, r1, x2, y2, r2);
  26173. }
  26174. };
  26175. namedColors = {
  26176. aliceblue: [240, 248, 255],
  26177. antiquewhite: [250, 235, 215],
  26178. aqua: [0, 255, 255],
  26179. aquamarine: [127, 255, 212],
  26180. azure: [240, 255, 255],
  26181. beige: [245, 245, 220],
  26182. bisque: [255, 228, 196],
  26183. black: [0, 0, 0],
  26184. blanchedalmond: [255, 235, 205],
  26185. blue: [0, 0, 255],
  26186. blueviolet: [138, 43, 226],
  26187. brown: [165, 42, 42],
  26188. burlywood: [222, 184, 135],
  26189. cadetblue: [95, 158, 160],
  26190. chartreuse: [127, 255, 0],
  26191. chocolate: [210, 105, 30],
  26192. coral: [255, 127, 80],
  26193. cornflowerblue: [100, 149, 237],
  26194. cornsilk: [255, 248, 220],
  26195. crimson: [220, 20, 60],
  26196. cyan: [0, 255, 255],
  26197. darkblue: [0, 0, 139],
  26198. darkcyan: [0, 139, 139],
  26199. darkgoldenrod: [184, 134, 11],
  26200. darkgray: [169, 169, 169],
  26201. darkgreen: [0, 100, 0],
  26202. darkgrey: [169, 169, 169],
  26203. darkkhaki: [189, 183, 107],
  26204. darkmagenta: [139, 0, 139],
  26205. darkolivegreen: [85, 107, 47],
  26206. darkorange: [255, 140, 0],
  26207. darkorchid: [153, 50, 204],
  26208. darkred: [139, 0, 0],
  26209. darksalmon: [233, 150, 122],
  26210. darkseagreen: [143, 188, 143],
  26211. darkslateblue: [72, 61, 139],
  26212. darkslategray: [47, 79, 79],
  26213. darkslategrey: [47, 79, 79],
  26214. darkturquoise: [0, 206, 209],
  26215. darkviolet: [148, 0, 211],
  26216. deeppink: [255, 20, 147],
  26217. deepskyblue: [0, 191, 255],
  26218. dimgray: [105, 105, 105],
  26219. dimgrey: [105, 105, 105],
  26220. dodgerblue: [30, 144, 255],
  26221. firebrick: [178, 34, 34],
  26222. floralwhite: [255, 250, 240],
  26223. forestgreen: [34, 139, 34],
  26224. fuchsia: [255, 0, 255],
  26225. gainsboro: [220, 220, 220],
  26226. ghostwhite: [248, 248, 255],
  26227. gold: [255, 215, 0],
  26228. goldenrod: [218, 165, 32],
  26229. gray: [128, 128, 128],
  26230. grey: [128, 128, 128],
  26231. green: [0, 128, 0],
  26232. greenyellow: [173, 255, 47],
  26233. honeydew: [240, 255, 240],
  26234. hotpink: [255, 105, 180],
  26235. indianred: [205, 92, 92],
  26236. indigo: [75, 0, 130],
  26237. ivory: [255, 255, 240],
  26238. khaki: [240, 230, 140],
  26239. lavender: [230, 230, 250],
  26240. lavenderblush: [255, 240, 245],
  26241. lawngreen: [124, 252, 0],
  26242. lemonchiffon: [255, 250, 205],
  26243. lightblue: [173, 216, 230],
  26244. lightcoral: [240, 128, 128],
  26245. lightcyan: [224, 255, 255],
  26246. lightgoldenrodyellow: [250, 250, 210],
  26247. lightgray: [211, 211, 211],
  26248. lightgreen: [144, 238, 144],
  26249. lightgrey: [211, 211, 211],
  26250. lightpink: [255, 182, 193],
  26251. lightsalmon: [255, 160, 122],
  26252. lightseagreen: [32, 178, 170],
  26253. lightskyblue: [135, 206, 250],
  26254. lightslategray: [119, 136, 153],
  26255. lightslategrey: [119, 136, 153],
  26256. lightsteelblue: [176, 196, 222],
  26257. lightyellow: [255, 255, 224],
  26258. lime: [0, 255, 0],
  26259. limegreen: [50, 205, 50],
  26260. linen: [250, 240, 230],
  26261. magenta: [255, 0, 255],
  26262. maroon: [128, 0, 0],
  26263. mediumaquamarine: [102, 205, 170],
  26264. mediumblue: [0, 0, 205],
  26265. mediumorchid: [186, 85, 211],
  26266. mediumpurple: [147, 112, 219],
  26267. mediumseagreen: [60, 179, 113],
  26268. mediumslateblue: [123, 104, 238],
  26269. mediumspringgreen: [0, 250, 154],
  26270. mediumturquoise: [72, 209, 204],
  26271. mediumvioletred: [199, 21, 133],
  26272. midnightblue: [25, 25, 112],
  26273. mintcream: [245, 255, 250],
  26274. mistyrose: [255, 228, 225],
  26275. moccasin: [255, 228, 181],
  26276. navajowhite: [255, 222, 173],
  26277. navy: [0, 0, 128],
  26278. oldlace: [253, 245, 230],
  26279. olive: [128, 128, 0],
  26280. olivedrab: [107, 142, 35],
  26281. orange: [255, 165, 0],
  26282. orangered: [255, 69, 0],
  26283. orchid: [218, 112, 214],
  26284. palegoldenrod: [238, 232, 170],
  26285. palegreen: [152, 251, 152],
  26286. paleturquoise: [175, 238, 238],
  26287. palevioletred: [219, 112, 147],
  26288. papayawhip: [255, 239, 213],
  26289. peachpuff: [255, 218, 185],
  26290. peru: [205, 133, 63],
  26291. pink: [255, 192, 203],
  26292. plum: [221, 160, 221],
  26293. powderblue: [176, 224, 230],
  26294. purple: [128, 0, 128],
  26295. red: [255, 0, 0],
  26296. rosybrown: [188, 143, 143],
  26297. royalblue: [65, 105, 225],
  26298. saddlebrown: [139, 69, 19],
  26299. salmon: [250, 128, 114],
  26300. sandybrown: [244, 164, 96],
  26301. seagreen: [46, 139, 87],
  26302. seashell: [255, 245, 238],
  26303. sienna: [160, 82, 45],
  26304. silver: [192, 192, 192],
  26305. skyblue: [135, 206, 235],
  26306. slateblue: [106, 90, 205],
  26307. slategray: [112, 128, 144],
  26308. slategrey: [112, 128, 144],
  26309. snow: [255, 250, 250],
  26310. springgreen: [0, 255, 127],
  26311. steelblue: [70, 130, 180],
  26312. tan: [210, 180, 140],
  26313. teal: [0, 128, 128],
  26314. thistle: [216, 191, 216],
  26315. tomato: [255, 99, 71],
  26316. turquoise: [64, 224, 208],
  26317. violet: [238, 130, 238],
  26318. wheat: [245, 222, 179],
  26319. white: [255, 255, 255],
  26320. whitesmoke: [245, 245, 245],
  26321. yellow: [255, 255, 0],
  26322. yellowgreen: [154, 205, 50]
  26323. };
  26324. }).call(this);
  26325. /***/ },
  26326. /* 66 */
  26327. /***/ function(module, exports) {
  26328. // Generated by CoffeeScript 1.7.1
  26329. (function() {
  26330. var PDFGradient, PDFLinearGradient, PDFRadialGradient,
  26331. __hasProp = {}.hasOwnProperty,
  26332. __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
  26333. PDFGradient = (function() {
  26334. function PDFGradient(doc) {
  26335. this.doc = doc;
  26336. this.stops = [];
  26337. this.embedded = false;
  26338. this.transform = [1, 0, 0, 1, 0, 0];
  26339. this._colorSpace = 'DeviceRGB';
  26340. }
  26341. PDFGradient.prototype.stop = function(pos, color, opacity) {
  26342. if (opacity == null) {
  26343. opacity = 1;
  26344. }
  26345. opacity = Math.max(0, Math.min(1, opacity));
  26346. this.stops.push([pos, this.doc._normalizeColor(color), opacity]);
  26347. return this;
  26348. };
  26349. PDFGradient.prototype.embed = function() {
  26350. var bounds, dx, dy, encode, fn, form, grad, group, gstate, i, last, m, m0, m1, m11, m12, m2, m21, m22, m3, m4, m5, name, pattern, resources, sMask, shader, stop, stops, v, _i, _j, _len, _ref, _ref1, _ref2;
  26351. if (this.embedded || this.stops.length === 0) {
  26352. return;
  26353. }
  26354. this.embedded = true;
  26355. last = this.stops[this.stops.length - 1];
  26356. if (last[0] < 1) {
  26357. this.stops.push([1, last[1], last[2]]);
  26358. }
  26359. bounds = [];
  26360. encode = [];
  26361. stops = [];
  26362. for (i = _i = 0, _ref = this.stops.length - 1; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
  26363. encode.push(0, 1);
  26364. if (i + 2 !== this.stops.length) {
  26365. bounds.push(this.stops[i + 1][0]);
  26366. }
  26367. fn = this.doc.ref({
  26368. FunctionType: 2,
  26369. Domain: [0, 1],
  26370. C0: this.stops[i + 0][1],
  26371. C1: this.stops[i + 1][1],
  26372. N: 1
  26373. });
  26374. stops.push(fn);
  26375. fn.end();
  26376. }
  26377. if (stops.length === 1) {
  26378. fn = stops[0];
  26379. } else {
  26380. fn = this.doc.ref({
  26381. FunctionType: 3,
  26382. Domain: [0, 1],
  26383. Functions: stops,
  26384. Bounds: bounds,
  26385. Encode: encode
  26386. });
  26387. fn.end();
  26388. }
  26389. this.id = 'Sh' + (++this.doc._gradCount);
  26390. m = this.doc._ctm.slice();
  26391. m0 = m[0], m1 = m[1], m2 = m[2], m3 = m[3], m4 = m[4], m5 = m[5];
  26392. _ref1 = this.transform, m11 = _ref1[0], m12 = _ref1[1], m21 = _ref1[2], m22 = _ref1[3], dx = _ref1[4], dy = _ref1[5];
  26393. m[0] = m0 * m11 + m2 * m12;
  26394. m[1] = m1 * m11 + m3 * m12;
  26395. m[2] = m0 * m21 + m2 * m22;
  26396. m[3] = m1 * m21 + m3 * m22;
  26397. m[4] = m0 * dx + m2 * dy + m4;
  26398. m[5] = m1 * dx + m3 * dy + m5;
  26399. shader = this.shader(fn);
  26400. shader.end();
  26401. pattern = this.doc.ref({
  26402. Type: 'Pattern',
  26403. PatternType: 2,
  26404. Shading: shader,
  26405. Matrix: (function() {
  26406. var _j, _len, _results;
  26407. _results = [];
  26408. for (_j = 0, _len = m.length; _j < _len; _j++) {
  26409. v = m[_j];
  26410. _results.push(+v.toFixed(5));
  26411. }
  26412. return _results;
  26413. })()
  26414. });
  26415. this.doc.page.patterns[this.id] = pattern;
  26416. pattern.end();
  26417. if (this.stops.some(function(stop) {
  26418. return stop[2] < 1;
  26419. })) {
  26420. grad = this.opacityGradient();
  26421. grad._colorSpace = 'DeviceGray';
  26422. _ref2 = this.stops;
  26423. for (_j = 0, _len = _ref2.length; _j < _len; _j++) {
  26424. stop = _ref2[_j];
  26425. grad.stop(stop[0], [stop[2]]);
  26426. }
  26427. grad = grad.embed();
  26428. group = this.doc.ref({
  26429. Type: 'Group',
  26430. S: 'Transparency',
  26431. CS: 'DeviceGray'
  26432. });
  26433. group.end();
  26434. resources = this.doc.ref({
  26435. ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],
  26436. Shading: {
  26437. Sh1: grad.data.Shading
  26438. }
  26439. });
  26440. resources.end();
  26441. form = this.doc.ref({
  26442. Type: 'XObject',
  26443. Subtype: 'Form',
  26444. FormType: 1,
  26445. BBox: [0, 0, this.doc.page.width, this.doc.page.height],
  26446. Group: group,
  26447. Resources: resources
  26448. });
  26449. form.end("/Sh1 sh");
  26450. sMask = this.doc.ref({
  26451. Type: 'Mask',
  26452. S: 'Luminosity',
  26453. G: form
  26454. });
  26455. sMask.end();
  26456. gstate = this.doc.ref({
  26457. Type: 'ExtGState',
  26458. SMask: sMask
  26459. });
  26460. this.opacity_id = ++this.doc._opacityCount;
  26461. name = "Gs" + this.opacity_id;
  26462. this.doc.page.ext_gstates[name] = gstate;
  26463. gstate.end();
  26464. }
  26465. return pattern;
  26466. };
  26467. PDFGradient.prototype.apply = function(op) {
  26468. if (!this.embedded) {
  26469. this.embed();
  26470. }
  26471. this.doc.addContent("/" + this.id + " " + op);
  26472. if (this.opacity_id) {
  26473. this.doc.addContent("/Gs" + this.opacity_id + " gs");
  26474. return this.doc._sMasked = true;
  26475. }
  26476. };
  26477. return PDFGradient;
  26478. })();
  26479. PDFLinearGradient = (function(_super) {
  26480. __extends(PDFLinearGradient, _super);
  26481. function PDFLinearGradient(doc, x1, y1, x2, y2) {
  26482. this.doc = doc;
  26483. this.x1 = x1;
  26484. this.y1 = y1;
  26485. this.x2 = x2;
  26486. this.y2 = y2;
  26487. PDFLinearGradient.__super__.constructor.apply(this, arguments);
  26488. }
  26489. PDFLinearGradient.prototype.shader = function(fn) {
  26490. return this.doc.ref({
  26491. ShadingType: 2,
  26492. ColorSpace: this._colorSpace,
  26493. Coords: [this.x1, this.y1, this.x2, this.y2],
  26494. Function: fn,
  26495. Extend: [true, true]
  26496. });
  26497. };
  26498. PDFLinearGradient.prototype.opacityGradient = function() {
  26499. return new PDFLinearGradient(this.doc, this.x1, this.y1, this.x2, this.y2);
  26500. };
  26501. return PDFLinearGradient;
  26502. })(PDFGradient);
  26503. PDFRadialGradient = (function(_super) {
  26504. __extends(PDFRadialGradient, _super);
  26505. function PDFRadialGradient(doc, x1, y1, r1, x2, y2, r2) {
  26506. this.doc = doc;
  26507. this.x1 = x1;
  26508. this.y1 = y1;
  26509. this.r1 = r1;
  26510. this.x2 = x2;
  26511. this.y2 = y2;
  26512. this.r2 = r2;
  26513. PDFRadialGradient.__super__.constructor.apply(this, arguments);
  26514. }
  26515. PDFRadialGradient.prototype.shader = function(fn) {
  26516. return this.doc.ref({
  26517. ShadingType: 3,
  26518. ColorSpace: this._colorSpace,
  26519. Coords: [this.x1, this.y1, this.r1, this.x2, this.y2, this.r2],
  26520. Function: fn,
  26521. Extend: [true, true]
  26522. });
  26523. };
  26524. PDFRadialGradient.prototype.opacityGradient = function() {
  26525. return new PDFRadialGradient(this.doc, this.x1, this.y1, this.r1, this.x2, this.y2, this.r2);
  26526. };
  26527. return PDFRadialGradient;
  26528. })(PDFGradient);
  26529. module.exports = {
  26530. PDFGradient: PDFGradient,
  26531. PDFLinearGradient: PDFLinearGradient,
  26532. PDFRadialGradient: PDFRadialGradient
  26533. };
  26534. }).call(this);
  26535. /***/ },
  26536. /* 67 */
  26537. /***/ function(module, exports, __webpack_require__) {
  26538. // Generated by CoffeeScript 1.7.1
  26539. (function() {
  26540. var KAPPA, SVGPath,
  26541. __slice = [].slice;
  26542. SVGPath = __webpack_require__(68);
  26543. KAPPA = 4.0 * ((Math.sqrt(2) - 1.0) / 3.0);
  26544. module.exports = {
  26545. initVector: function() {
  26546. this._ctm = [1, 0, 0, 1, 0, 0];
  26547. return this._ctmStack = [];
  26548. },
  26549. save: function() {
  26550. this._ctmStack.push(this._ctm.slice());
  26551. return this.addContent('q');
  26552. },
  26553. restore: function() {
  26554. this._ctm = this._ctmStack.pop() || [1, 0, 0, 1, 0, 0];
  26555. return this.addContent('Q');
  26556. },
  26557. closePath: function() {
  26558. return this.addContent('h');
  26559. },
  26560. lineWidth: function(w) {
  26561. return this.addContent("" + w + " w");
  26562. },
  26563. _CAP_STYLES: {
  26564. BUTT: 0,
  26565. ROUND: 1,
  26566. SQUARE: 2
  26567. },
  26568. lineCap: function(c) {
  26569. if (typeof c === 'string') {
  26570. c = this._CAP_STYLES[c.toUpperCase()];
  26571. }
  26572. return this.addContent("" + c + " J");
  26573. },
  26574. _JOIN_STYLES: {
  26575. MITER: 0,
  26576. ROUND: 1,
  26577. BEVEL: 2
  26578. },
  26579. lineJoin: function(j) {
  26580. if (typeof j === 'string') {
  26581. j = this._JOIN_STYLES[j.toUpperCase()];
  26582. }
  26583. return this.addContent("" + j + " j");
  26584. },
  26585. miterLimit: function(m) {
  26586. return this.addContent("" + m + " M");
  26587. },
  26588. dash: function(length, options) {
  26589. var phase, space, _ref;
  26590. if (options == null) {
  26591. options = {};
  26592. }
  26593. if (length == null) {
  26594. return this;
  26595. }
  26596. space = (_ref = options.space) != null ? _ref : length;
  26597. phase = options.phase || 0;
  26598. return this.addContent("[" + length + " " + space + "] " + phase + " d");
  26599. },
  26600. undash: function() {
  26601. return this.addContent("[] 0 d");
  26602. },
  26603. moveTo: function(x, y) {
  26604. return this.addContent("" + x + " " + y + " m");
  26605. },
  26606. lineTo: function(x, y) {
  26607. return this.addContent("" + x + " " + y + " l");
  26608. },
  26609. bezierCurveTo: function(cp1x, cp1y, cp2x, cp2y, x, y) {
  26610. return this.addContent("" + cp1x + " " + cp1y + " " + cp2x + " " + cp2y + " " + x + " " + y + " c");
  26611. },
  26612. quadraticCurveTo: function(cpx, cpy, x, y) {
  26613. return this.addContent("" + cpx + " " + cpy + " " + x + " " + y + " v");
  26614. },
  26615. rect: function(x, y, w, h) {
  26616. return this.addContent("" + x + " " + y + " " + w + " " + h + " re");
  26617. },
  26618. roundedRect: function(x, y, w, h, r) {
  26619. if (r == null) {
  26620. r = 0;
  26621. }
  26622. this.moveTo(x + r, y);
  26623. this.lineTo(x + w - r, y);
  26624. this.quadraticCurveTo(x + w, y, x + w, y + r);
  26625. this.lineTo(x + w, y + h - r);
  26626. this.quadraticCurveTo(x + w, y + h, x + w - r, y + h);
  26627. this.lineTo(x + r, y + h);
  26628. this.quadraticCurveTo(x, y + h, x, y + h - r);
  26629. this.lineTo(x, y + r);
  26630. return this.quadraticCurveTo(x, y, x + r, y);
  26631. },
  26632. ellipse: function(x, y, r1, r2) {
  26633. var ox, oy, xe, xm, ye, ym;
  26634. if (r2 == null) {
  26635. r2 = r1;
  26636. }
  26637. x -= r1;
  26638. y -= r2;
  26639. ox = r1 * KAPPA;
  26640. oy = r2 * KAPPA;
  26641. xe = x + r1 * 2;
  26642. ye = y + r2 * 2;
  26643. xm = x + r1;
  26644. ym = y + r2;
  26645. this.moveTo(x, ym);
  26646. this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);
  26647. this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);
  26648. this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);
  26649. this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);
  26650. return this.closePath();
  26651. },
  26652. circle: function(x, y, radius) {
  26653. return this.ellipse(x, y, radius);
  26654. },
  26655. polygon: function() {
  26656. var point, points, _i, _len;
  26657. points = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
  26658. this.moveTo.apply(this, points.shift());
  26659. for (_i = 0, _len = points.length; _i < _len; _i++) {
  26660. point = points[_i];
  26661. this.lineTo.apply(this, point);
  26662. }
  26663. return this.closePath();
  26664. },
  26665. path: function(path) {
  26666. SVGPath.apply(this, path);
  26667. return this;
  26668. },
  26669. _windingRule: function(rule) {
  26670. if (/even-?odd/.test(rule)) {
  26671. return '*';
  26672. }
  26673. return '';
  26674. },
  26675. fill: function(color, rule) {
  26676. if (/(even-?odd)|(non-?zero)/.test(color)) {
  26677. rule = color;
  26678. color = null;
  26679. }
  26680. if (color) {
  26681. this.fillColor(color);
  26682. }
  26683. return this.addContent('f' + this._windingRule(rule));
  26684. },
  26685. stroke: function(color) {
  26686. if (color) {
  26687. this.strokeColor(color);
  26688. }
  26689. return this.addContent('S');
  26690. },
  26691. fillAndStroke: function(fillColor, strokeColor, rule) {
  26692. var isFillRule;
  26693. if (strokeColor == null) {
  26694. strokeColor = fillColor;
  26695. }
  26696. isFillRule = /(even-?odd)|(non-?zero)/;
  26697. if (isFillRule.test(fillColor)) {
  26698. rule = fillColor;
  26699. fillColor = null;
  26700. }
  26701. if (isFillRule.test(strokeColor)) {
  26702. rule = strokeColor;
  26703. strokeColor = fillColor;
  26704. }
  26705. if (fillColor) {
  26706. this.fillColor(fillColor);
  26707. this.strokeColor(strokeColor);
  26708. }
  26709. return this.addContent('B' + this._windingRule(rule));
  26710. },
  26711. clip: function(rule) {
  26712. return this.addContent('W' + this._windingRule(rule) + ' n');
  26713. },
  26714. transform: function(m11, m12, m21, m22, dx, dy) {
  26715. var m, m0, m1, m2, m3, m4, m5, v, values;
  26716. m = this._ctm;
  26717. m0 = m[0], m1 = m[1], m2 = m[2], m3 = m[3], m4 = m[4], m5 = m[5];
  26718. m[0] = m0 * m11 + m2 * m12;
  26719. m[1] = m1 * m11 + m3 * m12;
  26720. m[2] = m0 * m21 + m2 * m22;
  26721. m[3] = m1 * m21 + m3 * m22;
  26722. m[4] = m0 * dx + m2 * dy + m4;
  26723. m[5] = m1 * dx + m3 * dy + m5;
  26724. values = ((function() {
  26725. var _i, _len, _ref, _results;
  26726. _ref = [m11, m12, m21, m22, dx, dy];
  26727. _results = [];
  26728. for (_i = 0, _len = _ref.length; _i < _len; _i++) {
  26729. v = _ref[_i];
  26730. _results.push(+v.toFixed(5));
  26731. }
  26732. return _results;
  26733. })()).join(' ');
  26734. return this.addContent("" + values + " cm");
  26735. },
  26736. translate: function(x, y) {
  26737. return this.transform(1, 0, 0, 1, x, y);
  26738. },
  26739. rotate: function(angle, options) {
  26740. var cos, rad, sin, x, x1, y, y1, _ref;
  26741. if (options == null) {
  26742. options = {};
  26743. }
  26744. rad = angle * Math.PI / 180;
  26745. cos = Math.cos(rad);
  26746. sin = Math.sin(rad);
  26747. x = y = 0;
  26748. if (options.origin != null) {
  26749. _ref = options.origin, x = _ref[0], y = _ref[1];
  26750. x1 = x * cos - y * sin;
  26751. y1 = x * sin + y * cos;
  26752. x -= x1;
  26753. y -= y1;
  26754. }
  26755. return this.transform(cos, sin, -sin, cos, x, y);
  26756. },
  26757. scale: function(xFactor, yFactor, options) {
  26758. var x, y, _ref;
  26759. if (yFactor == null) {
  26760. yFactor = xFactor;
  26761. }
  26762. if (options == null) {
  26763. options = {};
  26764. }
  26765. if (arguments.length === 2) {
  26766. yFactor = xFactor;
  26767. options = yFactor;
  26768. }
  26769. x = y = 0;
  26770. if (options.origin != null) {
  26771. _ref = options.origin, x = _ref[0], y = _ref[1];
  26772. x -= xFactor * x;
  26773. y -= yFactor * y;
  26774. }
  26775. return this.transform(xFactor, 0, 0, yFactor, x, y);
  26776. }
  26777. };
  26778. }).call(this);
  26779. /***/ },
  26780. /* 68 */
  26781. /***/ function(module, exports) {
  26782. // Generated by CoffeeScript 1.7.1
  26783. (function() {
  26784. var SVGPath;
  26785. SVGPath = (function() {
  26786. var apply, arcToSegments, cx, cy, parameters, parse, px, py, runners, segmentToBezier, solveArc, sx, sy;
  26787. function SVGPath() {}
  26788. SVGPath.apply = function(doc, path) {
  26789. var commands;
  26790. commands = parse(path);
  26791. return apply(commands, doc);
  26792. };
  26793. parameters = {
  26794. A: 7,
  26795. a: 7,
  26796. C: 6,
  26797. c: 6,
  26798. H: 1,
  26799. h: 1,
  26800. L: 2,
  26801. l: 2,
  26802. M: 2,
  26803. m: 2,
  26804. Q: 4,
  26805. q: 4,
  26806. S: 4,
  26807. s: 4,
  26808. T: 2,
  26809. t: 2,
  26810. V: 1,
  26811. v: 1,
  26812. Z: 0,
  26813. z: 0
  26814. };
  26815. parse = function(path) {
  26816. var args, c, cmd, curArg, foundDecimal, params, ret, _i, _len;
  26817. ret = [];
  26818. args = [];
  26819. curArg = "";
  26820. foundDecimal = false;
  26821. params = 0;
  26822. for (_i = 0, _len = path.length; _i < _len; _i++) {
  26823. c = path[_i];
  26824. if (parameters[c] != null) {
  26825. params = parameters[c];
  26826. if (cmd) {
  26827. if (curArg.length > 0) {
  26828. args[args.length] = +curArg;
  26829. }
  26830. ret[ret.length] = {
  26831. cmd: cmd,
  26832. args: args
  26833. };
  26834. args = [];
  26835. curArg = "";
  26836. foundDecimal = false;
  26837. }
  26838. cmd = c;
  26839. } else if ((c === " " || c === ",") || (c === "-" && curArg.length > 0 && curArg[curArg.length - 1] !== 'e') || (c === "." && foundDecimal)) {
  26840. if (curArg.length === 0) {
  26841. continue;
  26842. }
  26843. if (args.length === params) {
  26844. ret[ret.length] = {
  26845. cmd: cmd,
  26846. args: args
  26847. };
  26848. args = [+curArg];
  26849. if (cmd === "M") {
  26850. cmd = "L";
  26851. }
  26852. if (cmd === "m") {
  26853. cmd = "l";
  26854. }
  26855. } else {
  26856. args[args.length] = +curArg;
  26857. }
  26858. foundDecimal = c === ".";
  26859. curArg = c === '-' || c === '.' ? c : '';
  26860. } else {
  26861. curArg += c;
  26862. if (c === '.') {
  26863. foundDecimal = true;
  26864. }
  26865. }
  26866. }
  26867. if (curArg.length > 0) {
  26868. if (args.length === params) {
  26869. ret[ret.length] = {
  26870. cmd: cmd,
  26871. args: args
  26872. };
  26873. args = [+curArg];
  26874. if (cmd === "M") {
  26875. cmd = "L";
  26876. }
  26877. if (cmd === "m") {
  26878. cmd = "l";
  26879. }
  26880. } else {
  26881. args[args.length] = +curArg;
  26882. }
  26883. }
  26884. ret[ret.length] = {
  26885. cmd: cmd,
  26886. args: args
  26887. };
  26888. return ret;
  26889. };
  26890. cx = cy = px = py = sx = sy = 0;
  26891. apply = function(commands, doc) {
  26892. var c, i, _i, _len, _name;
  26893. cx = cy = px = py = sx = sy = 0;
  26894. for (i = _i = 0, _len = commands.length; _i < _len; i = ++_i) {
  26895. c = commands[i];
  26896. if (typeof runners[_name = c.cmd] === "function") {
  26897. runners[_name](doc, c.args);
  26898. }
  26899. }
  26900. return cx = cy = px = py = 0;
  26901. };
  26902. runners = {
  26903. M: function(doc, a) {
  26904. cx = a[0];
  26905. cy = a[1];
  26906. px = py = null;
  26907. sx = cx;
  26908. sy = cy;
  26909. return doc.moveTo(cx, cy);
  26910. },
  26911. m: function(doc, a) {
  26912. cx += a[0];
  26913. cy += a[1];
  26914. px = py = null;
  26915. sx = cx;
  26916. sy = cy;
  26917. return doc.moveTo(cx, cy);
  26918. },
  26919. C: function(doc, a) {
  26920. cx = a[4];
  26921. cy = a[5];
  26922. px = a[2];
  26923. py = a[3];
  26924. return doc.bezierCurveTo.apply(doc, a);
  26925. },
  26926. c: function(doc, a) {
  26927. doc.bezierCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy, a[4] + cx, a[5] + cy);
  26928. px = cx + a[2];
  26929. py = cy + a[3];
  26930. cx += a[4];
  26931. return cy += a[5];
  26932. },
  26933. S: function(doc, a) {
  26934. if (px === null) {
  26935. px = cx;
  26936. py = cy;
  26937. }
  26938. doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), a[0], a[1], a[2], a[3]);
  26939. px = a[0];
  26940. py = a[1];
  26941. cx = a[2];
  26942. return cy = a[3];
  26943. },
  26944. s: function(doc, a) {
  26945. if (px === null) {
  26946. px = cx;
  26947. py = cy;
  26948. }
  26949. doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), cx + a[0], cy + a[1], cx + a[2], cy + a[3]);
  26950. px = cx + a[0];
  26951. py = cy + a[1];
  26952. cx += a[2];
  26953. return cy += a[3];
  26954. },
  26955. Q: function(doc, a) {
  26956. px = a[0];
  26957. py = a[1];
  26958. cx = a[2];
  26959. cy = a[3];
  26960. return doc.quadraticCurveTo(a[0], a[1], cx, cy);
  26961. },
  26962. q: function(doc, a) {
  26963. doc.quadraticCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy);
  26964. px = cx + a[0];
  26965. py = cy + a[1];
  26966. cx += a[2];
  26967. return cy += a[3];
  26968. },
  26969. T: function(doc, a) {
  26970. if (px === null) {
  26971. px = cx;
  26972. py = cy;
  26973. } else {
  26974. px = cx - (px - cx);
  26975. py = cy - (py - cy);
  26976. }
  26977. doc.quadraticCurveTo(px, py, a[0], a[1]);
  26978. px = cx - (px - cx);
  26979. py = cy - (py - cy);
  26980. cx = a[0];
  26981. return cy = a[1];
  26982. },
  26983. t: function(doc, a) {
  26984. if (px === null) {
  26985. px = cx;
  26986. py = cy;
  26987. } else {
  26988. px = cx - (px - cx);
  26989. py = cy - (py - cy);
  26990. }
  26991. doc.quadraticCurveTo(px, py, cx + a[0], cy + a[1]);
  26992. cx += a[0];
  26993. return cy += a[1];
  26994. },
  26995. A: function(doc, a) {
  26996. solveArc(doc, cx, cy, a);
  26997. cx = a[5];
  26998. return cy = a[6];
  26999. },
  27000. a: function(doc, a) {
  27001. a[5] += cx;
  27002. a[6] += cy;
  27003. solveArc(doc, cx, cy, a);
  27004. cx = a[5];
  27005. return cy = a[6];
  27006. },
  27007. L: function(doc, a) {
  27008. cx = a[0];
  27009. cy = a[1];
  27010. px = py = null;
  27011. return doc.lineTo(cx, cy);
  27012. },
  27013. l: function(doc, a) {
  27014. cx += a[0];
  27015. cy += a[1];
  27016. px = py = null;
  27017. return doc.lineTo(cx, cy);
  27018. },
  27019. H: function(doc, a) {
  27020. cx = a[0];
  27021. px = py = null;
  27022. return doc.lineTo(cx, cy);
  27023. },
  27024. h: function(doc, a) {
  27025. cx += a[0];
  27026. px = py = null;
  27027. return doc.lineTo(cx, cy);
  27028. },
  27029. V: function(doc, a) {
  27030. cy = a[0];
  27031. px = py = null;
  27032. return doc.lineTo(cx, cy);
  27033. },
  27034. v: function(doc, a) {
  27035. cy += a[0];
  27036. px = py = null;
  27037. return doc.lineTo(cx, cy);
  27038. },
  27039. Z: function(doc) {
  27040. doc.closePath();
  27041. cx = sx;
  27042. return cy = sy;
  27043. },
  27044. z: function(doc) {
  27045. doc.closePath();
  27046. cx = sx;
  27047. return cy = sy;
  27048. }
  27049. };
  27050. solveArc = function(doc, x, y, coords) {
  27051. var bez, ex, ey, large, rot, rx, ry, seg, segs, sweep, _i, _len, _results;
  27052. rx = coords[0], ry = coords[1], rot = coords[2], large = coords[3], sweep = coords[4], ex = coords[5], ey = coords[6];
  27053. segs = arcToSegments(ex, ey, rx, ry, large, sweep, rot, x, y);
  27054. _results = [];
  27055. for (_i = 0, _len = segs.length; _i < _len; _i++) {
  27056. seg = segs[_i];
  27057. bez = segmentToBezier.apply(null, seg);
  27058. _results.push(doc.bezierCurveTo.apply(doc, bez));
  27059. }
  27060. return _results;
  27061. };
  27062. arcToSegments = function(x, y, rx, ry, large, sweep, rotateX, ox, oy) {
  27063. var a00, a01, a10, a11, cos_th, d, i, pl, result, segments, sfactor, sfactor_sq, sin_th, th, th0, th1, th2, th3, th_arc, x0, x1, xc, y0, y1, yc, _i;
  27064. th = rotateX * (Math.PI / 180);
  27065. sin_th = Math.sin(th);
  27066. cos_th = Math.cos(th);
  27067. rx = Math.abs(rx);
  27068. ry = Math.abs(ry);
  27069. px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5;
  27070. py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5;
  27071. pl = (px * px) / (rx * rx) + (py * py) / (ry * ry);
  27072. if (pl > 1) {
  27073. pl = Math.sqrt(pl);
  27074. rx *= pl;
  27075. ry *= pl;
  27076. }
  27077. a00 = cos_th / rx;
  27078. a01 = sin_th / rx;
  27079. a10 = (-sin_th) / ry;
  27080. a11 = cos_th / ry;
  27081. x0 = a00 * ox + a01 * oy;
  27082. y0 = a10 * ox + a11 * oy;
  27083. x1 = a00 * x + a01 * y;
  27084. y1 = a10 * x + a11 * y;
  27085. d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0);
  27086. sfactor_sq = 1 / d - 0.25;
  27087. if (sfactor_sq < 0) {
  27088. sfactor_sq = 0;
  27089. }
  27090. sfactor = Math.sqrt(sfactor_sq);
  27091. if (sweep === large) {
  27092. sfactor = -sfactor;
  27093. }
  27094. xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0);
  27095. yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0);
  27096. th0 = Math.atan2(y0 - yc, x0 - xc);
  27097. th1 = Math.atan2(y1 - yc, x1 - xc);
  27098. th_arc = th1 - th0;
  27099. if (th_arc < 0 && sweep === 1) {
  27100. th_arc += 2 * Math.PI;
  27101. } else if (th_arc > 0 && sweep === 0) {
  27102. th_arc -= 2 * Math.PI;
  27103. }
  27104. segments = Math.ceil(Math.abs(th_arc / (Math.PI * 0.5 + 0.001)));
  27105. result = [];
  27106. for (i = _i = 0; 0 <= segments ? _i < segments : _i > segments; i = 0 <= segments ? ++_i : --_i) {
  27107. th2 = th0 + i * th_arc / segments;
  27108. th3 = th0 + (i + 1) * th_arc / segments;
  27109. result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th];
  27110. }
  27111. return result;
  27112. };
  27113. segmentToBezier = function(cx, cy, th0, th1, rx, ry, sin_th, cos_th) {
  27114. var a00, a01, a10, a11, t, th_half, x1, x2, x3, y1, y2, y3;
  27115. a00 = cos_th * rx;
  27116. a01 = -sin_th * ry;
  27117. a10 = sin_th * rx;
  27118. a11 = cos_th * ry;
  27119. th_half = 0.5 * (th1 - th0);
  27120. t = (8 / 3) * Math.sin(th_half * 0.5) * Math.sin(th_half * 0.5) / Math.sin(th_half);
  27121. x1 = cx + Math.cos(th0) - t * Math.sin(th0);
  27122. y1 = cy + Math.sin(th0) + t * Math.cos(th0);
  27123. x3 = cx + Math.cos(th1);
  27124. y3 = cy + Math.sin(th1);
  27125. x2 = x3 + t * Math.sin(th1);
  27126. y2 = y3 - t * Math.cos(th1);
  27127. return [a00 * x1 + a01 * y1, a10 * x1 + a11 * y1, a00 * x2 + a01 * y2, a10 * x2 + a11 * y2, a00 * x3 + a01 * y3, a10 * x3 + a11 * y3];
  27128. };
  27129. return SVGPath;
  27130. })();
  27131. module.exports = SVGPath;
  27132. }).call(this);
  27133. /***/ },
  27134. /* 69 */
  27135. /***/ function(module, exports, __webpack_require__) {
  27136. // Generated by CoffeeScript 1.7.1
  27137. (function() {
  27138. var PDFFont;
  27139. PDFFont = __webpack_require__(70);
  27140. module.exports = {
  27141. initFonts: function() {
  27142. this._fontFamilies = {};
  27143. this._fontCount = 0;
  27144. this._fontSize = 12;
  27145. this._font = null;
  27146. this._registeredFonts = {};
  27147. },
  27148. font: function(src, family, size) {
  27149. var cacheKey, font, id, _ref;
  27150. if (typeof family === 'number') {
  27151. size = family;
  27152. family = null;
  27153. }
  27154. if (typeof src === 'string' && this._registeredFonts[src]) {
  27155. cacheKey = src;
  27156. _ref = this._registeredFonts[src], src = _ref.src, family = _ref.family;
  27157. } else {
  27158. cacheKey = family || src;
  27159. if (typeof cacheKey !== 'string') {
  27160. cacheKey = null;
  27161. }
  27162. }
  27163. if (size != null) {
  27164. this.fontSize(size);
  27165. }
  27166. if (font = this._fontFamilies[cacheKey]) {
  27167. this._font = font;
  27168. return this;
  27169. }
  27170. id = 'F' + (++this._fontCount);
  27171. this._font = new PDFFont(this, src, family, id);
  27172. if (font = this._fontFamilies[this._font.name]) {
  27173. this._font = font;
  27174. return this;
  27175. }
  27176. if (cacheKey) {
  27177. this._fontFamilies[cacheKey] = this._font;
  27178. }
  27179. this._fontFamilies[this._font.name] = this._font;
  27180. return this;
  27181. },
  27182. fontSize: function(_fontSize) {
  27183. this._fontSize = _fontSize;
  27184. return this;
  27185. },
  27186. currentLineHeight: function(includeGap) {
  27187. if (includeGap == null) {
  27188. includeGap = false;
  27189. }
  27190. return this._font.lineHeight(this._fontSize, includeGap);
  27191. },
  27192. registerFont: function(name, src, family) {
  27193. this._registeredFonts[name] = {
  27194. src: src,
  27195. family: family
  27196. };
  27197. return this;
  27198. }
  27199. };
  27200. }).call(this);
  27201. /***/ },
  27202. /* 70 */
  27203. /***/ function(module, exports, __webpack_require__) {
  27204. /* WEBPACK VAR INJECTION */(function(Buffer, __dirname) {// Generated by CoffeeScript 1.7.1
  27205. /*
  27206. PDFFont - embeds fonts in PDF documents
  27207. By Devon Govett
  27208. */
  27209. (function() {
  27210. var AFMFont, PDFFont, Subset, TTFFont, fs;
  27211. TTFFont = __webpack_require__(71);
  27212. AFMFont = __webpack_require__(87);
  27213. Subset = __webpack_require__(88);
  27214. fs = __webpack_require__(44);
  27215. PDFFont = (function() {
  27216. var STANDARD_FONTS, toUnicodeCmap;
  27217. function PDFFont(document, src, family, id) {
  27218. this.document = document;
  27219. this.id = id;
  27220. if (typeof src === 'string') {
  27221. if (src in STANDARD_FONTS) {
  27222. this.isAFM = true;
  27223. this.font = new AFMFont(STANDARD_FONTS[src]());
  27224. this.registerAFM(src);
  27225. return;
  27226. } else if (/\.(ttf|ttc)$/i.test(src)) {
  27227. this.font = TTFFont.open(src, family);
  27228. } else if (/\.dfont$/i.test(src)) {
  27229. this.font = TTFFont.fromDFont(src, family);
  27230. } else {
  27231. throw new Error('Not a supported font format or standard PDF font.');
  27232. }
  27233. } else if (Buffer.isBuffer(src)) {
  27234. this.font = TTFFont.fromBuffer(src, family);
  27235. } else if (src instanceof Uint8Array) {
  27236. this.font = TTFFont.fromBuffer(new Buffer(src), family);
  27237. } else if (src instanceof ArrayBuffer) {
  27238. this.font = TTFFont.fromBuffer(new Buffer(new Uint8Array(src)), family);
  27239. } else {
  27240. throw new Error('Not a supported font format or standard PDF font.');
  27241. }
  27242. this.subset = new Subset(this.font);
  27243. this.registerTTF();
  27244. }
  27245. STANDARD_FONTS = {
  27246. "Courier": function() {
  27247. return fs.readFileSync(__dirname + "/font/data/Courier.afm", 'utf8');
  27248. },
  27249. "Courier-Bold": function() {
  27250. return fs.readFileSync(__dirname + "/font/data/Courier-Bold.afm", 'utf8');
  27251. },
  27252. "Courier-Oblique": function() {
  27253. return fs.readFileSync(__dirname + "/font/data/Courier-Oblique.afm", 'utf8');
  27254. },
  27255. "Courier-BoldOblique": function() {
  27256. return fs.readFileSync(__dirname + "/font/data/Courier-BoldOblique.afm", 'utf8');
  27257. },
  27258. "Helvetica": function() {
  27259. return fs.readFileSync(__dirname + "/font/data/Helvetica.afm", 'utf8');
  27260. },
  27261. "Helvetica-Bold": function() {
  27262. return fs.readFileSync(__dirname + "/font/data/Helvetica-Bold.afm", 'utf8');
  27263. },
  27264. "Helvetica-Oblique": function() {
  27265. return fs.readFileSync(__dirname + "/font/data/Helvetica-Oblique.afm", 'utf8');
  27266. },
  27267. "Helvetica-BoldOblique": function() {
  27268. return fs.readFileSync(__dirname + "/font/data/Helvetica-BoldOblique.afm", 'utf8');
  27269. },
  27270. "Times-Roman": function() {
  27271. return fs.readFileSync(__dirname + "/font/data/Times-Roman.afm", 'utf8');
  27272. },
  27273. "Times-Bold": function() {
  27274. return fs.readFileSync(__dirname + "/font/data/Times-Bold.afm", 'utf8');
  27275. },
  27276. "Times-Italic": function() {
  27277. return fs.readFileSync(__dirname + "/font/data/Times-Italic.afm", 'utf8');
  27278. },
  27279. "Times-BoldItalic": function() {
  27280. return fs.readFileSync(__dirname + "/font/data/Times-BoldItalic.afm", 'utf8');
  27281. },
  27282. "Symbol": function() {
  27283. return fs.readFileSync(__dirname + "/font/data/Symbol.afm", 'utf8');
  27284. },
  27285. "ZapfDingbats": function() {
  27286. return fs.readFileSync(__dirname + "/font/data/ZapfDingbats.afm", 'utf8');
  27287. }
  27288. };
  27289. PDFFont.prototype.use = function(characters) {
  27290. var _ref;
  27291. return (_ref = this.subset) != null ? _ref.use(characters) : void 0;
  27292. };
  27293. PDFFont.prototype.embed = function() {
  27294. if (this.embedded || (this.dictionary == null)) {
  27295. return;
  27296. }
  27297. if (this.isAFM) {
  27298. this.embedAFM();
  27299. } else {
  27300. this.embedTTF();
  27301. }
  27302. return this.embedded = true;
  27303. };
  27304. PDFFont.prototype.encode = function(text) {
  27305. var _ref;
  27306. if (this.isAFM) {
  27307. return this.font.encodeText(text);
  27308. } else {
  27309. return ((_ref = this.subset) != null ? _ref.encodeText(text) : void 0) || text;
  27310. }
  27311. };
  27312. PDFFont.prototype.ref = function() {
  27313. return this.dictionary != null ? this.dictionary : this.dictionary = this.document.ref();
  27314. };
  27315. PDFFont.prototype.registerTTF = function() {
  27316. var e, hi, low, raw, _ref;
  27317. this.name = this.font.name.postscriptName;
  27318. this.scaleFactor = 1000.0 / this.font.head.unitsPerEm;
  27319. this.bbox = (function() {
  27320. var _i, _len, _ref, _results;
  27321. _ref = this.font.bbox;
  27322. _results = [];
  27323. for (_i = 0, _len = _ref.length; _i < _len; _i++) {
  27324. e = _ref[_i];
  27325. _results.push(Math.round(e * this.scaleFactor));
  27326. }
  27327. return _results;
  27328. }).call(this);
  27329. this.stemV = 0;
  27330. if (this.font.post.exists) {
  27331. raw = this.font.post.italic_angle;
  27332. hi = raw >> 16;
  27333. low = raw & 0xFF;
  27334. if (hi & 0x8000 !== 0) {
  27335. hi = -((hi ^ 0xFFFF) + 1);
  27336. }
  27337. this.italicAngle = +("" + hi + "." + low);
  27338. } else {
  27339. this.italicAngle = 0;
  27340. }
  27341. this.ascender = Math.round(this.font.ascender * this.scaleFactor);
  27342. this.decender = Math.round(this.font.decender * this.scaleFactor);
  27343. this.lineGap = Math.round(this.font.lineGap * this.scaleFactor);
  27344. this.capHeight = (this.font.os2.exists && this.font.os2.capHeight) || this.ascender;
  27345. this.xHeight = (this.font.os2.exists && this.font.os2.xHeight) || 0;
  27346. this.familyClass = (this.font.os2.exists && this.font.os2.familyClass || 0) >> 8;
  27347. this.isSerif = (_ref = this.familyClass) === 1 || _ref === 2 || _ref === 3 || _ref === 4 || _ref === 5 || _ref === 7;
  27348. this.isScript = this.familyClass === 10;
  27349. this.flags = 0;
  27350. if (this.font.post.isFixedPitch) {
  27351. this.flags |= 1 << 0;
  27352. }
  27353. if (this.isSerif) {
  27354. this.flags |= 1 << 1;
  27355. }
  27356. if (this.isScript) {
  27357. this.flags |= 1 << 3;
  27358. }
  27359. if (this.italicAngle !== 0) {
  27360. this.flags |= 1 << 6;
  27361. }
  27362. this.flags |= 1 << 5;
  27363. if (!this.font.cmap.unicode) {
  27364. throw new Error('No unicode cmap for font');
  27365. }
  27366. };
  27367. PDFFont.prototype.embedTTF = function() {
  27368. var charWidths, cmap, code, data, descriptor, firstChar, fontfile, glyph;
  27369. data = this.subset.encode();
  27370. fontfile = this.document.ref();
  27371. fontfile.write(data);
  27372. fontfile.data.Length1 = fontfile.uncompressedLength;
  27373. fontfile.end();
  27374. descriptor = this.document.ref({
  27375. Type: 'FontDescriptor',
  27376. FontName: this.subset.postscriptName,
  27377. FontFile2: fontfile,
  27378. FontBBox: this.bbox,
  27379. Flags: this.flags,
  27380. StemV: this.stemV,
  27381. ItalicAngle: this.italicAngle,
  27382. Ascent: this.ascender,
  27383. Descent: this.decender,
  27384. CapHeight: this.capHeight,
  27385. XHeight: this.xHeight
  27386. });
  27387. descriptor.end();
  27388. firstChar = +Object.keys(this.subset.cmap)[0];
  27389. charWidths = (function() {
  27390. var _ref, _results;
  27391. _ref = this.subset.cmap;
  27392. _results = [];
  27393. for (code in _ref) {
  27394. glyph = _ref[code];
  27395. _results.push(Math.round(this.font.widthOfGlyph(glyph)));
  27396. }
  27397. return _results;
  27398. }).call(this);
  27399. cmap = this.document.ref();
  27400. cmap.end(toUnicodeCmap(this.subset.subset));
  27401. this.dictionary.data = {
  27402. Type: 'Font',
  27403. BaseFont: this.subset.postscriptName,
  27404. Subtype: 'TrueType',
  27405. FontDescriptor: descriptor,
  27406. FirstChar: firstChar,
  27407. LastChar: firstChar + charWidths.length - 1,
  27408. Widths: charWidths,
  27409. Encoding: 'MacRomanEncoding',
  27410. ToUnicode: cmap
  27411. };
  27412. return this.dictionary.end();
  27413. };
  27414. toUnicodeCmap = function(map) {
  27415. var code, codes, range, unicode, unicodeMap, _i, _len;
  27416. unicodeMap = '/CIDInit /ProcSet findresource begin\n12 dict begin\nbegincmap\n/CIDSystemInfo <<\n /Registry (Adobe)\n /Ordering (UCS)\n /Supplement 0\n>> def\n/CMapName /Adobe-Identity-UCS def\n/CMapType 2 def\n1 begincodespacerange\n<00><ff>\nendcodespacerange';
  27417. codes = Object.keys(map).sort(function(a, b) {
  27418. return a - b;
  27419. });
  27420. range = [];
  27421. for (_i = 0, _len = codes.length; _i < _len; _i++) {
  27422. code = codes[_i];
  27423. if (range.length >= 100) {
  27424. unicodeMap += "\n" + range.length + " beginbfchar\n" + (range.join('\n')) + "\nendbfchar";
  27425. range = [];
  27426. }
  27427. unicode = ('0000' + map[code].toString(16)).slice(-4);
  27428. code = (+code).toString(16);
  27429. range.push("<" + code + "><" + unicode + ">");
  27430. }
  27431. if (range.length) {
  27432. unicodeMap += "\n" + range.length + " beginbfchar\n" + (range.join('\n')) + "\nendbfchar\n";
  27433. }
  27434. return unicodeMap += 'endcmap\nCMapName currentdict /CMap defineresource pop\nend\nend';
  27435. };
  27436. PDFFont.prototype.registerAFM = function(name) {
  27437. var _ref;
  27438. this.name = name;
  27439. return _ref = this.font, this.ascender = _ref.ascender, this.decender = _ref.decender, this.bbox = _ref.bbox, this.lineGap = _ref.lineGap, _ref;
  27440. };
  27441. PDFFont.prototype.embedAFM = function() {
  27442. this.dictionary.data = {
  27443. Type: 'Font',
  27444. BaseFont: this.name,
  27445. Subtype: 'Type1',
  27446. Encoding: 'WinAnsiEncoding'
  27447. };
  27448. return this.dictionary.end();
  27449. };
  27450. PDFFont.prototype.widthOfString = function(string, size) {
  27451. var charCode, i, scale, width, _i, _ref;
  27452. string = '' + string;
  27453. width = 0;
  27454. for (i = _i = 0, _ref = string.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
  27455. charCode = string.charCodeAt(i);
  27456. width += this.font.widthOfGlyph(this.font.characterToGlyph(charCode)) || 0;
  27457. }
  27458. scale = size / 1000;
  27459. return width * scale;
  27460. };
  27461. PDFFont.prototype.lineHeight = function(size, includeGap) {
  27462. var gap;
  27463. if (includeGap == null) {
  27464. includeGap = false;
  27465. }
  27466. gap = includeGap ? this.lineGap : 0;
  27467. return (this.ascender + gap - this.decender) / 1000 * size;
  27468. };
  27469. return PDFFont;
  27470. })();
  27471. module.exports = PDFFont;
  27472. }).call(this);
  27473. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer, "/"))
  27474. /***/ },
  27475. /* 71 */
  27476. /***/ function(module, exports, __webpack_require__) {
  27477. // Generated by CoffeeScript 1.7.1
  27478. (function() {
  27479. var CmapTable, DFont, Data, Directory, GlyfTable, HeadTable, HheaTable, HmtxTable, LocaTable, MaxpTable, NameTable, OS2Table, PostTable, TTFFont, fs;
  27480. fs = __webpack_require__(44);
  27481. Data = __webpack_require__(72);
  27482. DFont = __webpack_require__(73);
  27483. Directory = __webpack_require__(74);
  27484. NameTable = __webpack_require__(75);
  27485. HeadTable = __webpack_require__(78);
  27486. CmapTable = __webpack_require__(79);
  27487. HmtxTable = __webpack_require__(80);
  27488. HheaTable = __webpack_require__(81);
  27489. MaxpTable = __webpack_require__(82);
  27490. PostTable = __webpack_require__(83);
  27491. OS2Table = __webpack_require__(84);
  27492. LocaTable = __webpack_require__(85);
  27493. GlyfTable = __webpack_require__(86);
  27494. TTFFont = (function() {
  27495. TTFFont.open = function(filename, name) {
  27496. var contents;
  27497. contents = fs.readFileSync(filename);
  27498. return new TTFFont(contents, name);
  27499. };
  27500. TTFFont.fromDFont = function(filename, family) {
  27501. var dfont;
  27502. dfont = DFont.open(filename);
  27503. return new TTFFont(dfont.getNamedFont(family));
  27504. };
  27505. TTFFont.fromBuffer = function(buffer, family) {
  27506. var dfont, e, ttf;
  27507. try {
  27508. ttf = new TTFFont(buffer, family);
  27509. if (!(ttf.head.exists && ttf.name.exists && ttf.cmap.exists)) {
  27510. dfont = new DFont(buffer);
  27511. ttf = new TTFFont(dfont.getNamedFont(family));
  27512. if (!(ttf.head.exists && ttf.name.exists && ttf.cmap.exists)) {
  27513. throw new Error('Invalid TTF file in DFont');
  27514. }
  27515. }
  27516. return ttf;
  27517. } catch (_error) {
  27518. e = _error;
  27519. throw new Error('Unknown font format in buffer: ' + e.message);
  27520. }
  27521. };
  27522. function TTFFont(rawData, name) {
  27523. var data, i, numFonts, offset, offsets, version, _i, _j, _len;
  27524. this.rawData = rawData;
  27525. data = this.contents = new Data(this.rawData);
  27526. if (data.readString(4) === 'ttcf') {
  27527. if (!name) {
  27528. throw new Error("Must specify a font name for TTC files.");
  27529. }
  27530. version = data.readInt();
  27531. numFonts = data.readInt();
  27532. offsets = [];
  27533. for (i = _i = 0; 0 <= numFonts ? _i < numFonts : _i > numFonts; i = 0 <= numFonts ? ++_i : --_i) {
  27534. offsets[i] = data.readInt();
  27535. }
  27536. for (i = _j = 0, _len = offsets.length; _j < _len; i = ++_j) {
  27537. offset = offsets[i];
  27538. data.pos = offset;
  27539. this.parse();
  27540. if (this.name.postscriptName === name) {
  27541. return;
  27542. }
  27543. }
  27544. throw new Error("Font " + name + " not found in TTC file.");
  27545. } else {
  27546. data.pos = 0;
  27547. this.parse();
  27548. }
  27549. }
  27550. TTFFont.prototype.parse = function() {
  27551. this.directory = new Directory(this.contents);
  27552. this.head = new HeadTable(this);
  27553. this.name = new NameTable(this);
  27554. this.cmap = new CmapTable(this);
  27555. this.hhea = new HheaTable(this);
  27556. this.maxp = new MaxpTable(this);
  27557. this.hmtx = new HmtxTable(this);
  27558. this.post = new PostTable(this);
  27559. this.os2 = new OS2Table(this);
  27560. this.loca = new LocaTable(this);
  27561. this.glyf = new GlyfTable(this);
  27562. this.ascender = (this.os2.exists && this.os2.ascender) || this.hhea.ascender;
  27563. this.decender = (this.os2.exists && this.os2.decender) || this.hhea.decender;
  27564. this.lineGap = (this.os2.exists && this.os2.lineGap) || this.hhea.lineGap;
  27565. return this.bbox = [this.head.xMin, this.head.yMin, this.head.xMax, this.head.yMax];
  27566. };
  27567. TTFFont.prototype.characterToGlyph = function(character) {
  27568. var _ref;
  27569. return ((_ref = this.cmap.unicode) != null ? _ref.codeMap[character] : void 0) || 0;
  27570. };
  27571. TTFFont.prototype.widthOfGlyph = function(glyph) {
  27572. var scale;
  27573. scale = 1000.0 / this.head.unitsPerEm;
  27574. return this.hmtx.forGlyph(glyph).advance * scale;
  27575. };
  27576. return TTFFont;
  27577. })();
  27578. module.exports = TTFFont;
  27579. }).call(this);
  27580. /***/ },
  27581. /* 72 */
  27582. /***/ function(module, exports) {
  27583. // Generated by CoffeeScript 1.7.1
  27584. (function() {
  27585. var Data;
  27586. Data = (function() {
  27587. function Data(data) {
  27588. this.data = data != null ? data : [];
  27589. this.pos = 0;
  27590. this.length = this.data.length;
  27591. }
  27592. Data.prototype.readByte = function() {
  27593. return this.data[this.pos++];
  27594. };
  27595. Data.prototype.writeByte = function(byte) {
  27596. return this.data[this.pos++] = byte;
  27597. };
  27598. Data.prototype.byteAt = function(index) {
  27599. return this.data[index];
  27600. };
  27601. Data.prototype.readBool = function() {
  27602. return !!this.readByte();
  27603. };
  27604. Data.prototype.writeBool = function(val) {
  27605. return this.writeByte(val ? 1 : 0);
  27606. };
  27607. Data.prototype.readUInt32 = function() {
  27608. var b1, b2, b3, b4;
  27609. b1 = this.readByte() * 0x1000000;
  27610. b2 = this.readByte() << 16;
  27611. b3 = this.readByte() << 8;
  27612. b4 = this.readByte();
  27613. return b1 + b2 + b3 + b4;
  27614. };
  27615. Data.prototype.writeUInt32 = function(val) {
  27616. this.writeByte((val >>> 24) & 0xff);
  27617. this.writeByte((val >> 16) & 0xff);
  27618. this.writeByte((val >> 8) & 0xff);
  27619. return this.writeByte(val & 0xff);
  27620. };
  27621. Data.prototype.readInt32 = function() {
  27622. var int;
  27623. int = this.readUInt32();
  27624. if (int >= 0x80000000) {
  27625. return int - 0x100000000;
  27626. } else {
  27627. return int;
  27628. }
  27629. };
  27630. Data.prototype.writeInt32 = function(val) {
  27631. if (val < 0) {
  27632. val += 0x100000000;
  27633. }
  27634. return this.writeUInt32(val);
  27635. };
  27636. Data.prototype.readUInt16 = function() {
  27637. var b1, b2;
  27638. b1 = this.readByte() << 8;
  27639. b2 = this.readByte();
  27640. return b1 | b2;
  27641. };
  27642. Data.prototype.writeUInt16 = function(val) {
  27643. this.writeByte((val >> 8) & 0xff);
  27644. return this.writeByte(val & 0xff);
  27645. };
  27646. Data.prototype.readInt16 = function() {
  27647. var int;
  27648. int = this.readUInt16();
  27649. if (int >= 0x8000) {
  27650. return int - 0x10000;
  27651. } else {
  27652. return int;
  27653. }
  27654. };
  27655. Data.prototype.writeInt16 = function(val) {
  27656. if (val < 0) {
  27657. val += 0x10000;
  27658. }
  27659. return this.writeUInt16(val);
  27660. };
  27661. Data.prototype.readString = function(length) {
  27662. var i, ret, _i;
  27663. ret = [];
  27664. for (i = _i = 0; 0 <= length ? _i < length : _i > length; i = 0 <= length ? ++_i : --_i) {
  27665. ret[i] = String.fromCharCode(this.readByte());
  27666. }
  27667. return ret.join('');
  27668. };
  27669. Data.prototype.writeString = function(val) {
  27670. var i, _i, _ref, _results;
  27671. _results = [];
  27672. for (i = _i = 0, _ref = val.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
  27673. _results.push(this.writeByte(val.charCodeAt(i)));
  27674. }
  27675. return _results;
  27676. };
  27677. Data.prototype.stringAt = function(pos, length) {
  27678. this.pos = pos;
  27679. return this.readString(length);
  27680. };
  27681. Data.prototype.readShort = function() {
  27682. return this.readInt16();
  27683. };
  27684. Data.prototype.writeShort = function(val) {
  27685. return this.writeInt16(val);
  27686. };
  27687. Data.prototype.readLongLong = function() {
  27688. var b1, b2, b3, b4, b5, b6, b7, b8;
  27689. b1 = this.readByte();
  27690. b2 = this.readByte();
  27691. b3 = this.readByte();
  27692. b4 = this.readByte();
  27693. b5 = this.readByte();
  27694. b6 = this.readByte();
  27695. b7 = this.readByte();
  27696. b8 = this.readByte();
  27697. if (b1 & 0x80) {
  27698. return ((b1 ^ 0xff) * 0x100000000000000 + (b2 ^ 0xff) * 0x1000000000000 + (b3 ^ 0xff) * 0x10000000000 + (b4 ^ 0xff) * 0x100000000 + (b5 ^ 0xff) * 0x1000000 + (b6 ^ 0xff) * 0x10000 + (b7 ^ 0xff) * 0x100 + (b8 ^ 0xff) + 1) * -1;
  27699. }
  27700. return b1 * 0x100000000000000 + b2 * 0x1000000000000 + b3 * 0x10000000000 + b4 * 0x100000000 + b5 * 0x1000000 + b6 * 0x10000 + b7 * 0x100 + b8;
  27701. };
  27702. Data.prototype.writeLongLong = function(val) {
  27703. var high, low;
  27704. high = Math.floor(val / 0x100000000);
  27705. low = val & 0xffffffff;
  27706. this.writeByte((high >> 24) & 0xff);
  27707. this.writeByte((high >> 16) & 0xff);
  27708. this.writeByte((high >> 8) & 0xff);
  27709. this.writeByte(high & 0xff);
  27710. this.writeByte((low >> 24) & 0xff);
  27711. this.writeByte((low >> 16) & 0xff);
  27712. this.writeByte((low >> 8) & 0xff);
  27713. return this.writeByte(low & 0xff);
  27714. };
  27715. Data.prototype.readInt = function() {
  27716. return this.readInt32();
  27717. };
  27718. Data.prototype.writeInt = function(val) {
  27719. return this.writeInt32(val);
  27720. };
  27721. Data.prototype.slice = function(start, end) {
  27722. return this.data.slice(start, end);
  27723. };
  27724. Data.prototype.read = function(bytes) {
  27725. var buf, i, _i;
  27726. buf = [];
  27727. for (i = _i = 0; 0 <= bytes ? _i < bytes : _i > bytes; i = 0 <= bytes ? ++_i : --_i) {
  27728. buf.push(this.readByte());
  27729. }
  27730. return buf;
  27731. };
  27732. Data.prototype.write = function(bytes) {
  27733. var byte, _i, _len, _results;
  27734. _results = [];
  27735. for (_i = 0, _len = bytes.length; _i < _len; _i++) {
  27736. byte = bytes[_i];
  27737. _results.push(this.writeByte(byte));
  27738. }
  27739. return _results;
  27740. };
  27741. return Data;
  27742. })();
  27743. module.exports = Data;
  27744. }).call(this);
  27745. /***/ },
  27746. /* 73 */
  27747. /***/ function(module, exports, __webpack_require__) {
  27748. // Generated by CoffeeScript 1.7.1
  27749. (function() {
  27750. var DFont, Data, Directory, NameTable, fs;
  27751. fs = __webpack_require__(44);
  27752. Data = __webpack_require__(72);
  27753. Directory = __webpack_require__(74);
  27754. NameTable = __webpack_require__(75);
  27755. DFont = (function() {
  27756. DFont.open = function(filename) {
  27757. var contents;
  27758. contents = fs.readFileSync(filename);
  27759. return new DFont(contents);
  27760. };
  27761. function DFont(contents) {
  27762. this.contents = new Data(contents);
  27763. this.parse(this.contents);
  27764. }
  27765. DFont.prototype.parse = function(data) {
  27766. var attr, b2, b3, b4, dataLength, dataOffset, dataOfs, entry, font, handle, i, id, j, len, length, mapLength, mapOffset, maxIndex, maxTypeIndex, name, nameListOffset, nameOfs, p, pos, refListOffset, type, typeListOffset, _i, _j;
  27767. dataOffset = data.readInt();
  27768. mapOffset = data.readInt();
  27769. dataLength = data.readInt();
  27770. mapLength = data.readInt();
  27771. this.map = {};
  27772. data.pos = mapOffset + 24;
  27773. typeListOffset = data.readShort() + mapOffset;
  27774. nameListOffset = data.readShort() + mapOffset;
  27775. data.pos = typeListOffset;
  27776. maxIndex = data.readShort();
  27777. for (i = _i = 0; _i <= maxIndex; i = _i += 1) {
  27778. type = data.readString(4);
  27779. maxTypeIndex = data.readShort();
  27780. refListOffset = data.readShort();
  27781. this.map[type] = {
  27782. list: [],
  27783. named: {}
  27784. };
  27785. pos = data.pos;
  27786. data.pos = typeListOffset + refListOffset;
  27787. for (j = _j = 0; _j <= maxTypeIndex; j = _j += 1) {
  27788. id = data.readShort();
  27789. nameOfs = data.readShort();
  27790. attr = data.readByte();
  27791. b2 = data.readByte() << 16;
  27792. b3 = data.readByte() << 8;
  27793. b4 = data.readByte();
  27794. dataOfs = dataOffset + (0 | b2 | b3 | b4);
  27795. handle = data.readUInt32();
  27796. entry = {
  27797. id: id,
  27798. attributes: attr,
  27799. offset: dataOfs,
  27800. handle: handle
  27801. };
  27802. p = data.pos;
  27803. if (nameOfs !== -1 && (nameListOffset + nameOfs < mapOffset + mapLength)) {
  27804. data.pos = nameListOffset + nameOfs;
  27805. len = data.readByte();
  27806. entry.name = data.readString(len);
  27807. } else if (type === 'sfnt') {
  27808. data.pos = entry.offset;
  27809. length = data.readUInt32();
  27810. font = {};
  27811. font.contents = new Data(data.slice(data.pos, data.pos + length));
  27812. font.directory = new Directory(font.contents);
  27813. name = new NameTable(font);
  27814. entry.name = name.fontName[0].raw;
  27815. }
  27816. data.pos = p;
  27817. this.map[type].list.push(entry);
  27818. if (entry.name) {
  27819. this.map[type].named[entry.name] = entry;
  27820. }
  27821. }
  27822. data.pos = pos;
  27823. }
  27824. };
  27825. DFont.prototype.getNamedFont = function(name) {
  27826. var data, entry, length, pos, ret, _ref;
  27827. data = this.contents;
  27828. pos = data.pos;
  27829. entry = (_ref = this.map.sfnt) != null ? _ref.named[name] : void 0;
  27830. if (!entry) {
  27831. throw new Error("Font " + name + " not found in DFont file.");
  27832. }
  27833. data.pos = entry.offset;
  27834. length = data.readUInt32();
  27835. ret = data.slice(data.pos, data.pos + length);
  27836. data.pos = pos;
  27837. return ret;
  27838. };
  27839. return DFont;
  27840. })();
  27841. module.exports = DFont;
  27842. }).call(this);
  27843. /***/ },
  27844. /* 74 */
  27845. /***/ function(module, exports, __webpack_require__) {
  27846. /* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.7.1
  27847. (function() {
  27848. var Data, Directory,
  27849. __slice = [].slice;
  27850. Data = __webpack_require__(72);
  27851. Directory = (function() {
  27852. var checksum;
  27853. function Directory(data) {
  27854. var entry, i, _i, _ref;
  27855. this.scalarType = data.readInt();
  27856. this.tableCount = data.readShort();
  27857. this.searchRange = data.readShort();
  27858. this.entrySelector = data.readShort();
  27859. this.rangeShift = data.readShort();
  27860. this.tables = {};
  27861. for (i = _i = 0, _ref = this.tableCount; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
  27862. entry = {
  27863. tag: data.readString(4),
  27864. checksum: data.readInt(),
  27865. offset: data.readInt(),
  27866. length: data.readInt()
  27867. };
  27868. this.tables[entry.tag] = entry;
  27869. }
  27870. }
  27871. Directory.prototype.encode = function(tables) {
  27872. var adjustment, directory, directoryLength, entrySelector, headOffset, log2, offset, rangeShift, searchRange, sum, table, tableCount, tableData, tag;
  27873. tableCount = Object.keys(tables).length;
  27874. log2 = Math.log(2);
  27875. searchRange = Math.floor(Math.log(tableCount) / log2) * 16;
  27876. entrySelector = Math.floor(searchRange / log2);
  27877. rangeShift = tableCount * 16 - searchRange;
  27878. directory = new Data;
  27879. directory.writeInt(this.scalarType);
  27880. directory.writeShort(tableCount);
  27881. directory.writeShort(searchRange);
  27882. directory.writeShort(entrySelector);
  27883. directory.writeShort(rangeShift);
  27884. directoryLength = tableCount * 16;
  27885. offset = directory.pos + directoryLength;
  27886. headOffset = null;
  27887. tableData = [];
  27888. for (tag in tables) {
  27889. table = tables[tag];
  27890. directory.writeString(tag);
  27891. directory.writeInt(checksum(table));
  27892. directory.writeInt(offset);
  27893. directory.writeInt(table.length);
  27894. tableData = tableData.concat(table);
  27895. if (tag === 'head') {
  27896. headOffset = offset;
  27897. }
  27898. offset += table.length;
  27899. while (offset % 4) {
  27900. tableData.push(0);
  27901. offset++;
  27902. }
  27903. }
  27904. directory.write(tableData);
  27905. sum = checksum(directory.data);
  27906. adjustment = 0xB1B0AFBA - sum;
  27907. directory.pos = headOffset + 8;
  27908. directory.writeUInt32(adjustment);
  27909. return new Buffer(directory.data);
  27910. };
  27911. checksum = function(data) {
  27912. var i, sum, tmp, _i, _ref;
  27913. data = __slice.call(data);
  27914. while (data.length % 4) {
  27915. data.push(0);
  27916. }
  27917. tmp = new Data(data);
  27918. sum = 0;
  27919. for (i = _i = 0, _ref = data.length; _i < _ref; i = _i += 4) {
  27920. sum += tmp.readUInt32();
  27921. }
  27922. return sum & 0xFFFFFFFF;
  27923. };
  27924. return Directory;
  27925. })();
  27926. module.exports = Directory;
  27927. }).call(this);
  27928. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
  27929. /***/ },
  27930. /* 75 */
  27931. /***/ function(module, exports, __webpack_require__) {
  27932. // Generated by CoffeeScript 1.7.1
  27933. (function() {
  27934. var Data, NameEntry, NameTable, Table, utils,
  27935. __hasProp = {}.hasOwnProperty,
  27936. __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
  27937. Table = __webpack_require__(76);
  27938. Data = __webpack_require__(72);
  27939. utils = __webpack_require__(77);
  27940. NameTable = (function(_super) {
  27941. var subsetTag;
  27942. __extends(NameTable, _super);
  27943. function NameTable() {
  27944. return NameTable.__super__.constructor.apply(this, arguments);
  27945. }
  27946. NameTable.prototype.tag = 'name';
  27947. NameTable.prototype.parse = function(data) {
  27948. var count, entries, entry, format, i, name, stringOffset, strings, text, _i, _j, _len, _name;
  27949. data.pos = this.offset;
  27950. format = data.readShort();
  27951. count = data.readShort();
  27952. stringOffset = data.readShort();
  27953. entries = [];
  27954. for (i = _i = 0; 0 <= count ? _i < count : _i > count; i = 0 <= count ? ++_i : --_i) {
  27955. entries.push({
  27956. platformID: data.readShort(),
  27957. encodingID: data.readShort(),
  27958. languageID: data.readShort(),
  27959. nameID: data.readShort(),
  27960. length: data.readShort(),
  27961. offset: this.offset + stringOffset + data.readShort()
  27962. });
  27963. }
  27964. strings = {};
  27965. for (i = _j = 0, _len = entries.length; _j < _len; i = ++_j) {
  27966. entry = entries[i];
  27967. data.pos = entry.offset;
  27968. text = data.readString(entry.length);
  27969. name = new NameEntry(text, entry);
  27970. if (strings[_name = entry.nameID] == null) {
  27971. strings[_name] = [];
  27972. }
  27973. strings[entry.nameID].push(name);
  27974. }
  27975. this.strings = strings;
  27976. this.copyright = strings[0];
  27977. this.fontFamily = strings[1];
  27978. this.fontSubfamily = strings[2];
  27979. this.uniqueSubfamily = strings[3];
  27980. this.fontName = strings[4];
  27981. this.version = strings[5];
  27982. this.postscriptName = strings[6][0].raw.replace(/[\x00-\x19\x80-\xff]/g, "");
  27983. this.trademark = strings[7];
  27984. this.manufacturer = strings[8];
  27985. this.designer = strings[9];
  27986. this.description = strings[10];
  27987. this.vendorUrl = strings[11];
  27988. this.designerUrl = strings[12];
  27989. this.license = strings[13];
  27990. this.licenseUrl = strings[14];
  27991. this.preferredFamily = strings[15];
  27992. this.preferredSubfamily = strings[17];
  27993. this.compatibleFull = strings[18];
  27994. return this.sampleText = strings[19];
  27995. };
  27996. subsetTag = "AAAAAA";
  27997. NameTable.prototype.encode = function() {
  27998. var id, list, nameID, nameTable, postscriptName, strCount, strTable, string, strings, table, val, _i, _len, _ref;
  27999. strings = {};
  28000. _ref = this.strings;
  28001. for (id in _ref) {
  28002. val = _ref[id];
  28003. strings[id] = val;
  28004. }
  28005. postscriptName = new NameEntry("" + subsetTag + "+" + this.postscriptName, {
  28006. platformID: 1,
  28007. encodingID: 0,
  28008. languageID: 0
  28009. });
  28010. strings[6] = [postscriptName];
  28011. subsetTag = utils.successorOf(subsetTag);
  28012. strCount = 0;
  28013. for (id in strings) {
  28014. list = strings[id];
  28015. if (list != null) {
  28016. strCount += list.length;
  28017. }
  28018. }
  28019. table = new Data;
  28020. strTable = new Data;
  28021. table.writeShort(0);
  28022. table.writeShort(strCount);
  28023. table.writeShort(6 + 12 * strCount);
  28024. for (nameID in strings) {
  28025. list = strings[nameID];
  28026. if (list != null) {
  28027. for (_i = 0, _len = list.length; _i < _len; _i++) {
  28028. string = list[_i];
  28029. table.writeShort(string.platformID);
  28030. table.writeShort(string.encodingID);
  28031. table.writeShort(string.languageID);
  28032. table.writeShort(nameID);
  28033. table.writeShort(string.length);
  28034. table.writeShort(strTable.pos);
  28035. strTable.writeString(string.raw);
  28036. }
  28037. }
  28038. }
  28039. return nameTable = {
  28040. postscriptName: postscriptName.raw,
  28041. table: table.data.concat(strTable.data)
  28042. };
  28043. };
  28044. return NameTable;
  28045. })(Table);
  28046. module.exports = NameTable;
  28047. NameEntry = (function() {
  28048. function NameEntry(raw, entry) {
  28049. this.raw = raw;
  28050. this.length = this.raw.length;
  28051. this.platformID = entry.platformID;
  28052. this.encodingID = entry.encodingID;
  28053. this.languageID = entry.languageID;
  28054. }
  28055. return NameEntry;
  28056. })();
  28057. }).call(this);
  28058. /***/ },
  28059. /* 76 */
  28060. /***/ function(module, exports) {
  28061. // Generated by CoffeeScript 1.7.1
  28062. (function() {
  28063. var Table;
  28064. Table = (function() {
  28065. function Table(file) {
  28066. var info;
  28067. this.file = file;
  28068. info = this.file.directory.tables[this.tag];
  28069. this.exists = !!info;
  28070. if (info) {
  28071. this.offset = info.offset, this.length = info.length;
  28072. this.parse(this.file.contents);
  28073. }
  28074. }
  28075. Table.prototype.parse = function() {};
  28076. Table.prototype.encode = function() {};
  28077. Table.prototype.raw = function() {
  28078. if (!this.exists) {
  28079. return null;
  28080. }
  28081. this.file.contents.pos = this.offset;
  28082. return this.file.contents.read(this.length);
  28083. };
  28084. return Table;
  28085. })();
  28086. module.exports = Table;
  28087. }).call(this);
  28088. /***/ },
  28089. /* 77 */
  28090. /***/ function(module, exports) {
  28091. // Generated by CoffeeScript 1.7.1
  28092. /*
  28093. * An implementation of Ruby's string.succ method.
  28094. * By Devon Govett
  28095. *
  28096. * Returns the successor to str. The successor is calculated by incrementing characters starting
  28097. * from the rightmost alphanumeric (or the rightmost character if there are no alphanumerics) in the
  28098. * string. Incrementing a digit always results in another digit, and incrementing a letter results in
  28099. * another letter of the same case.
  28100. *
  28101. * If the increment generates a carry, the character to the left of it is incremented. This
  28102. * process repeats until there is no carry, adding an additional character if necessary.
  28103. *
  28104. * succ("abcd") == "abce"
  28105. * succ("THX1138") == "THX1139"
  28106. * succ("<<koala>>") == "<<koalb>>"
  28107. * succ("1999zzz") == "2000aaa"
  28108. * succ("ZZZ9999") == "AAAA0000"
  28109. */
  28110. (function() {
  28111. exports.successorOf = function(input) {
  28112. var added, alphabet, carry, i, index, isUpperCase, last, length, next, result;
  28113. alphabet = 'abcdefghijklmnopqrstuvwxyz';
  28114. length = alphabet.length;
  28115. result = input;
  28116. i = input.length;
  28117. while (i >= 0) {
  28118. last = input.charAt(--i);
  28119. if (isNaN(last)) {
  28120. index = alphabet.indexOf(last.toLowerCase());
  28121. if (index === -1) {
  28122. next = last;
  28123. carry = true;
  28124. } else {
  28125. next = alphabet.charAt((index + 1) % length);
  28126. isUpperCase = last === last.toUpperCase();
  28127. if (isUpperCase) {
  28128. next = next.toUpperCase();
  28129. }
  28130. carry = index + 1 >= length;
  28131. if (carry && i === 0) {
  28132. added = isUpperCase ? 'A' : 'a';
  28133. result = added + next + result.slice(1);
  28134. break;
  28135. }
  28136. }
  28137. } else {
  28138. next = +last + 1;
  28139. carry = next > 9;
  28140. if (carry) {
  28141. next = 0;
  28142. }
  28143. if (carry && i === 0) {
  28144. result = '1' + next + result.slice(1);
  28145. break;
  28146. }
  28147. }
  28148. result = result.slice(0, i) + next + result.slice(i + 1);
  28149. if (!carry) {
  28150. break;
  28151. }
  28152. }
  28153. return result;
  28154. };
  28155. exports.invert = function(object) {
  28156. var key, ret, val;
  28157. ret = {};
  28158. for (key in object) {
  28159. val = object[key];
  28160. ret[val] = key;
  28161. }
  28162. return ret;
  28163. };
  28164. }).call(this);
  28165. /***/ },
  28166. /* 78 */
  28167. /***/ function(module, exports, __webpack_require__) {
  28168. // Generated by CoffeeScript 1.7.1
  28169. (function() {
  28170. var Data, HeadTable, Table,
  28171. __hasProp = {}.hasOwnProperty,
  28172. __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
  28173. Table = __webpack_require__(76);
  28174. Data = __webpack_require__(72);
  28175. HeadTable = (function(_super) {
  28176. __extends(HeadTable, _super);
  28177. function HeadTable() {
  28178. return HeadTable.__super__.constructor.apply(this, arguments);
  28179. }
  28180. HeadTable.prototype.tag = 'head';
  28181. HeadTable.prototype.parse = function(data) {
  28182. data.pos = this.offset;
  28183. this.version = data.readInt();
  28184. this.revision = data.readInt();
  28185. this.checkSumAdjustment = data.readInt();
  28186. this.magicNumber = data.readInt();
  28187. this.flags = data.readShort();
  28188. this.unitsPerEm = data.readShort();
  28189. this.created = data.readLongLong();
  28190. this.modified = data.readLongLong();
  28191. this.xMin = data.readShort();
  28192. this.yMin = data.readShort();
  28193. this.xMax = data.readShort();
  28194. this.yMax = data.readShort();
  28195. this.macStyle = data.readShort();
  28196. this.lowestRecPPEM = data.readShort();
  28197. this.fontDirectionHint = data.readShort();
  28198. this.indexToLocFormat = data.readShort();
  28199. return this.glyphDataFormat = data.readShort();
  28200. };
  28201. HeadTable.prototype.encode = function(loca) {
  28202. var table;
  28203. table = new Data;
  28204. table.writeInt(this.version);
  28205. table.writeInt(this.revision);
  28206. table.writeInt(this.checkSumAdjustment);
  28207. table.writeInt(this.magicNumber);
  28208. table.writeShort(this.flags);
  28209. table.writeShort(this.unitsPerEm);
  28210. table.writeLongLong(this.created);
  28211. table.writeLongLong(this.modified);
  28212. table.writeShort(this.xMin);
  28213. table.writeShort(this.yMin);
  28214. table.writeShort(this.xMax);
  28215. table.writeShort(this.yMax);
  28216. table.writeShort(this.macStyle);
  28217. table.writeShort(this.lowestRecPPEM);
  28218. table.writeShort(this.fontDirectionHint);
  28219. table.writeShort(loca.type);
  28220. table.writeShort(this.glyphDataFormat);
  28221. return table.data;
  28222. };
  28223. return HeadTable;
  28224. })(Table);
  28225. module.exports = HeadTable;
  28226. }).call(this);
  28227. /***/ },
  28228. /* 79 */
  28229. /***/ function(module, exports, __webpack_require__) {
  28230. // Generated by CoffeeScript 1.7.1
  28231. (function() {
  28232. var CmapEntry, CmapTable, Data, Table,
  28233. __hasProp = {}.hasOwnProperty,
  28234. __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
  28235. Table = __webpack_require__(76);
  28236. Data = __webpack_require__(72);
  28237. CmapTable = (function(_super) {
  28238. __extends(CmapTable, _super);
  28239. function CmapTable() {
  28240. return CmapTable.__super__.constructor.apply(this, arguments);
  28241. }
  28242. CmapTable.prototype.tag = 'cmap';
  28243. CmapTable.prototype.parse = function(data) {
  28244. var entry, i, tableCount, _i;
  28245. data.pos = this.offset;
  28246. this.version = data.readUInt16();
  28247. tableCount = data.readUInt16();
  28248. this.tables = [];
  28249. this.unicode = null;
  28250. for (i = _i = 0; 0 <= tableCount ? _i < tableCount : _i > tableCount; i = 0 <= tableCount ? ++_i : --_i) {
  28251. entry = new CmapEntry(data, this.offset);
  28252. this.tables.push(entry);
  28253. if (entry.isUnicode) {
  28254. if (this.unicode == null) {
  28255. this.unicode = entry;
  28256. }
  28257. }
  28258. }
  28259. return true;
  28260. };
  28261. CmapTable.encode = function(charmap, encoding) {
  28262. var result, table;
  28263. if (encoding == null) {
  28264. encoding = 'macroman';
  28265. }
  28266. result = CmapEntry.encode(charmap, encoding);
  28267. table = new Data;
  28268. table.writeUInt16(0);
  28269. table.writeUInt16(1);
  28270. result.table = table.data.concat(result.subtable);
  28271. return result;
  28272. };
  28273. return CmapTable;
  28274. })(Table);
  28275. CmapEntry = (function() {
  28276. function CmapEntry(data, offset) {
  28277. var code, count, endCode, glyphId, glyphIds, i, idDelta, idRangeOffset, index, saveOffset, segCount, segCountX2, start, startCode, tail, _i, _j, _k, _len;
  28278. this.platformID = data.readUInt16();
  28279. this.encodingID = data.readShort();
  28280. this.offset = offset + data.readInt();
  28281. saveOffset = data.pos;
  28282. data.pos = this.offset;
  28283. this.format = data.readUInt16();
  28284. this.length = data.readUInt16();
  28285. this.language = data.readUInt16();
  28286. this.isUnicode = (this.platformID === 3 && this.encodingID === 1 && this.format === 4) || this.platformID === 0 && this.format === 4;
  28287. this.codeMap = {};
  28288. switch (this.format) {
  28289. case 0:
  28290. for (i = _i = 0; _i < 256; i = ++_i) {
  28291. this.codeMap[i] = data.readByte();
  28292. }
  28293. break;
  28294. case 4:
  28295. segCountX2 = data.readUInt16();
  28296. segCount = segCountX2 / 2;
  28297. data.pos += 6;
  28298. endCode = (function() {
  28299. var _j, _results;
  28300. _results = [];
  28301. for (i = _j = 0; 0 <= segCount ? _j < segCount : _j > segCount; i = 0 <= segCount ? ++_j : --_j) {
  28302. _results.push(data.readUInt16());
  28303. }
  28304. return _results;
  28305. })();
  28306. data.pos += 2;
  28307. startCode = (function() {
  28308. var _j, _results;
  28309. _results = [];
  28310. for (i = _j = 0; 0 <= segCount ? _j < segCount : _j > segCount; i = 0 <= segCount ? ++_j : --_j) {
  28311. _results.push(data.readUInt16());
  28312. }
  28313. return _results;
  28314. })();
  28315. idDelta = (function() {
  28316. var _j, _results;
  28317. _results = [];
  28318. for (i = _j = 0; 0 <= segCount ? _j < segCount : _j > segCount; i = 0 <= segCount ? ++_j : --_j) {
  28319. _results.push(data.readUInt16());
  28320. }
  28321. return _results;
  28322. })();
  28323. idRangeOffset = (function() {
  28324. var _j, _results;
  28325. _results = [];
  28326. for (i = _j = 0; 0 <= segCount ? _j < segCount : _j > segCount; i = 0 <= segCount ? ++_j : --_j) {
  28327. _results.push(data.readUInt16());
  28328. }
  28329. return _results;
  28330. })();
  28331. count = (this.length - data.pos + this.offset) / 2;
  28332. glyphIds = (function() {
  28333. var _j, _results;
  28334. _results = [];
  28335. for (i = _j = 0; 0 <= count ? _j < count : _j > count; i = 0 <= count ? ++_j : --_j) {
  28336. _results.push(data.readUInt16());
  28337. }
  28338. return _results;
  28339. })();
  28340. for (i = _j = 0, _len = endCode.length; _j < _len; i = ++_j) {
  28341. tail = endCode[i];
  28342. start = startCode[i];
  28343. for (code = _k = start; start <= tail ? _k <= tail : _k >= tail; code = start <= tail ? ++_k : --_k) {
  28344. if (idRangeOffset[i] === 0) {
  28345. glyphId = code + idDelta[i];
  28346. } else {
  28347. index = idRangeOffset[i] / 2 + (code - start) - (segCount - i);
  28348. glyphId = glyphIds[index] || 0;
  28349. if (glyphId !== 0) {
  28350. glyphId += idDelta[i];
  28351. }
  28352. }
  28353. this.codeMap[code] = glyphId & 0xFFFF;
  28354. }
  28355. }
  28356. }
  28357. data.pos = saveOffset;
  28358. }
  28359. CmapEntry.encode = function(charmap, encoding) {
  28360. var charMap, code, codeMap, codes, delta, deltas, diff, endCode, endCodes, entrySelector, glyphIDs, i, id, indexes, last, map, nextID, offset, old, rangeOffsets, rangeShift, result, searchRange, segCount, segCountX2, startCode, startCodes, startGlyph, subtable, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _len5, _len6, _len7, _m, _n, _name, _o, _p, _q;
  28361. subtable = new Data;
  28362. codes = Object.keys(charmap).sort(function(a, b) {
  28363. return a - b;
  28364. });
  28365. switch (encoding) {
  28366. case 'macroman':
  28367. id = 0;
  28368. indexes = (function() {
  28369. var _i, _results;
  28370. _results = [];
  28371. for (i = _i = 0; _i < 256; i = ++_i) {
  28372. _results.push(0);
  28373. }
  28374. return _results;
  28375. })();
  28376. map = {
  28377. 0: 0
  28378. };
  28379. codeMap = {};
  28380. for (_i = 0, _len = codes.length; _i < _len; _i++) {
  28381. code = codes[_i];
  28382. if (map[_name = charmap[code]] == null) {
  28383. map[_name] = ++id;
  28384. }
  28385. codeMap[code] = {
  28386. old: charmap[code],
  28387. "new": map[charmap[code]]
  28388. };
  28389. indexes[code] = map[charmap[code]];
  28390. }
  28391. subtable.writeUInt16(1);
  28392. subtable.writeUInt16(0);
  28393. subtable.writeUInt32(12);
  28394. subtable.writeUInt16(0);
  28395. subtable.writeUInt16(262);
  28396. subtable.writeUInt16(0);
  28397. subtable.write(indexes);
  28398. return result = {
  28399. charMap: codeMap,
  28400. subtable: subtable.data,
  28401. maxGlyphID: id + 1
  28402. };
  28403. case 'unicode':
  28404. startCodes = [];
  28405. endCodes = [];
  28406. nextID = 0;
  28407. map = {};
  28408. charMap = {};
  28409. last = diff = null;
  28410. for (_j = 0, _len1 = codes.length; _j < _len1; _j++) {
  28411. code = codes[_j];
  28412. old = charmap[code];
  28413. if (map[old] == null) {
  28414. map[old] = ++nextID;
  28415. }
  28416. charMap[code] = {
  28417. old: old,
  28418. "new": map[old]
  28419. };
  28420. delta = map[old] - code;
  28421. if ((last == null) || delta !== diff) {
  28422. if (last) {
  28423. endCodes.push(last);
  28424. }
  28425. startCodes.push(code);
  28426. diff = delta;
  28427. }
  28428. last = code;
  28429. }
  28430. if (last) {
  28431. endCodes.push(last);
  28432. }
  28433. endCodes.push(0xFFFF);
  28434. startCodes.push(0xFFFF);
  28435. segCount = startCodes.length;
  28436. segCountX2 = segCount * 2;
  28437. searchRange = 2 * Math.pow(Math.log(segCount) / Math.LN2, 2);
  28438. entrySelector = Math.log(searchRange / 2) / Math.LN2;
  28439. rangeShift = 2 * segCount - searchRange;
  28440. deltas = [];
  28441. rangeOffsets = [];
  28442. glyphIDs = [];
  28443. for (i = _k = 0, _len2 = startCodes.length; _k < _len2; i = ++_k) {
  28444. startCode = startCodes[i];
  28445. endCode = endCodes[i];
  28446. if (startCode === 0xFFFF) {
  28447. deltas.push(0);
  28448. rangeOffsets.push(0);
  28449. break;
  28450. }
  28451. startGlyph = charMap[startCode]["new"];
  28452. if (startCode - startGlyph >= 0x8000) {
  28453. deltas.push(0);
  28454. rangeOffsets.push(2 * (glyphIDs.length + segCount - i));
  28455. for (code = _l = startCode; startCode <= endCode ? _l <= endCode : _l >= endCode; code = startCode <= endCode ? ++_l : --_l) {
  28456. glyphIDs.push(charMap[code]["new"]);
  28457. }
  28458. } else {
  28459. deltas.push(startGlyph - startCode);
  28460. rangeOffsets.push(0);
  28461. }
  28462. }
  28463. subtable.writeUInt16(3);
  28464. subtable.writeUInt16(1);
  28465. subtable.writeUInt32(12);
  28466. subtable.writeUInt16(4);
  28467. subtable.writeUInt16(16 + segCount * 8 + glyphIDs.length * 2);
  28468. subtable.writeUInt16(0);
  28469. subtable.writeUInt16(segCountX2);
  28470. subtable.writeUInt16(searchRange);
  28471. subtable.writeUInt16(entrySelector);
  28472. subtable.writeUInt16(rangeShift);
  28473. for (_m = 0, _len3 = endCodes.length; _m < _len3; _m++) {
  28474. code = endCodes[_m];
  28475. subtable.writeUInt16(code);
  28476. }
  28477. subtable.writeUInt16(0);
  28478. for (_n = 0, _len4 = startCodes.length; _n < _len4; _n++) {
  28479. code = startCodes[_n];
  28480. subtable.writeUInt16(code);
  28481. }
  28482. for (_o = 0, _len5 = deltas.length; _o < _len5; _o++) {
  28483. delta = deltas[_o];
  28484. subtable.writeUInt16(delta);
  28485. }
  28486. for (_p = 0, _len6 = rangeOffsets.length; _p < _len6; _p++) {
  28487. offset = rangeOffsets[_p];
  28488. subtable.writeUInt16(offset);
  28489. }
  28490. for (_q = 0, _len7 = glyphIDs.length; _q < _len7; _q++) {
  28491. id = glyphIDs[_q];
  28492. subtable.writeUInt16(id);
  28493. }
  28494. return result = {
  28495. charMap: charMap,
  28496. subtable: subtable.data,
  28497. maxGlyphID: nextID + 1
  28498. };
  28499. }
  28500. };
  28501. return CmapEntry;
  28502. })();
  28503. module.exports = CmapTable;
  28504. }).call(this);
  28505. /***/ },
  28506. /* 80 */
  28507. /***/ function(module, exports, __webpack_require__) {
  28508. // Generated by CoffeeScript 1.7.1
  28509. (function() {
  28510. var Data, HmtxTable, Table,
  28511. __hasProp = {}.hasOwnProperty,
  28512. __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
  28513. Table = __webpack_require__(76);
  28514. Data = __webpack_require__(72);
  28515. HmtxTable = (function(_super) {
  28516. __extends(HmtxTable, _super);
  28517. function HmtxTable() {
  28518. return HmtxTable.__super__.constructor.apply(this, arguments);
  28519. }
  28520. HmtxTable.prototype.tag = 'hmtx';
  28521. HmtxTable.prototype.parse = function(data) {
  28522. var i, last, lsbCount, m, _i, _j, _ref, _results;
  28523. data.pos = this.offset;
  28524. this.metrics = [];
  28525. for (i = _i = 0, _ref = this.file.hhea.numberOfMetrics; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
  28526. this.metrics.push({
  28527. advance: data.readUInt16(),
  28528. lsb: data.readInt16()
  28529. });
  28530. }
  28531. lsbCount = this.file.maxp.numGlyphs - this.file.hhea.numberOfMetrics;
  28532. this.leftSideBearings = (function() {
  28533. var _j, _results;
  28534. _results = [];
  28535. for (i = _j = 0; 0 <= lsbCount ? _j < lsbCount : _j > lsbCount; i = 0 <= lsbCount ? ++_j : --_j) {
  28536. _results.push(data.readInt16());
  28537. }
  28538. return _results;
  28539. })();
  28540. this.widths = (function() {
  28541. var _j, _len, _ref1, _results;
  28542. _ref1 = this.metrics;
  28543. _results = [];
  28544. for (_j = 0, _len = _ref1.length; _j < _len; _j++) {
  28545. m = _ref1[_j];
  28546. _results.push(m.advance);
  28547. }
  28548. return _results;
  28549. }).call(this);
  28550. last = this.widths[this.widths.length - 1];
  28551. _results = [];
  28552. for (i = _j = 0; 0 <= lsbCount ? _j < lsbCount : _j > lsbCount; i = 0 <= lsbCount ? ++_j : --_j) {
  28553. _results.push(this.widths.push(last));
  28554. }
  28555. return _results;
  28556. };
  28557. HmtxTable.prototype.forGlyph = function(id) {
  28558. var metrics;
  28559. if (id in this.metrics) {
  28560. return this.metrics[id];
  28561. }
  28562. return metrics = {
  28563. advance: this.metrics[this.metrics.length - 1].advance,
  28564. lsb: this.leftSideBearings[id - this.metrics.length]
  28565. };
  28566. };
  28567. HmtxTable.prototype.encode = function(mapping) {
  28568. var id, metric, table, _i, _len;
  28569. table = new Data;
  28570. for (_i = 0, _len = mapping.length; _i < _len; _i++) {
  28571. id = mapping[_i];
  28572. metric = this.forGlyph(id);
  28573. table.writeUInt16(metric.advance);
  28574. table.writeUInt16(metric.lsb);
  28575. }
  28576. return table.data;
  28577. };
  28578. return HmtxTable;
  28579. })(Table);
  28580. module.exports = HmtxTable;
  28581. }).call(this);
  28582. /***/ },
  28583. /* 81 */
  28584. /***/ function(module, exports, __webpack_require__) {
  28585. // Generated by CoffeeScript 1.7.1
  28586. (function() {
  28587. var Data, HheaTable, Table,
  28588. __hasProp = {}.hasOwnProperty,
  28589. __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
  28590. Table = __webpack_require__(76);
  28591. Data = __webpack_require__(72);
  28592. HheaTable = (function(_super) {
  28593. __extends(HheaTable, _super);
  28594. function HheaTable() {
  28595. return HheaTable.__super__.constructor.apply(this, arguments);
  28596. }
  28597. HheaTable.prototype.tag = 'hhea';
  28598. HheaTable.prototype.parse = function(data) {
  28599. data.pos = this.offset;
  28600. this.version = data.readInt();
  28601. this.ascender = data.readShort();
  28602. this.decender = data.readShort();
  28603. this.lineGap = data.readShort();
  28604. this.advanceWidthMax = data.readShort();
  28605. this.minLeftSideBearing = data.readShort();
  28606. this.minRightSideBearing = data.readShort();
  28607. this.xMaxExtent = data.readShort();
  28608. this.caretSlopeRise = data.readShort();
  28609. this.caretSlopeRun = data.readShort();
  28610. this.caretOffset = data.readShort();
  28611. data.pos += 4 * 2;
  28612. this.metricDataFormat = data.readShort();
  28613. return this.numberOfMetrics = data.readUInt16();
  28614. };
  28615. HheaTable.prototype.encode = function(ids) {
  28616. var i, table, _i, _ref;
  28617. table = new Data;
  28618. table.writeInt(this.version);
  28619. table.writeShort(this.ascender);
  28620. table.writeShort(this.decender);
  28621. table.writeShort(this.lineGap);
  28622. table.writeShort(this.advanceWidthMax);
  28623. table.writeShort(this.minLeftSideBearing);
  28624. table.writeShort(this.minRightSideBearing);
  28625. table.writeShort(this.xMaxExtent);
  28626. table.writeShort(this.caretSlopeRise);
  28627. table.writeShort(this.caretSlopeRun);
  28628. table.writeShort(this.caretOffset);
  28629. for (i = _i = 0, _ref = 4 * 2; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
  28630. table.writeByte(0);
  28631. }
  28632. table.writeShort(this.metricDataFormat);
  28633. table.writeUInt16(ids.length);
  28634. return table.data;
  28635. };
  28636. return HheaTable;
  28637. })(Table);
  28638. module.exports = HheaTable;
  28639. }).call(this);
  28640. /***/ },
  28641. /* 82 */
  28642. /***/ function(module, exports, __webpack_require__) {
  28643. // Generated by CoffeeScript 1.7.1
  28644. (function() {
  28645. var Data, MaxpTable, Table,
  28646. __hasProp = {}.hasOwnProperty,
  28647. __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
  28648. Table = __webpack_require__(76);
  28649. Data = __webpack_require__(72);
  28650. MaxpTable = (function(_super) {
  28651. __extends(MaxpTable, _super);
  28652. function MaxpTable() {
  28653. return MaxpTable.__super__.constructor.apply(this, arguments);
  28654. }
  28655. MaxpTable.prototype.tag = 'maxp';
  28656. MaxpTable.prototype.parse = function(data) {
  28657. data.pos = this.offset;
  28658. this.version = data.readInt();
  28659. this.numGlyphs = data.readUInt16();
  28660. this.maxPoints = data.readUInt16();
  28661. this.maxContours = data.readUInt16();
  28662. this.maxCompositePoints = data.readUInt16();
  28663. this.maxComponentContours = data.readUInt16();
  28664. this.maxZones = data.readUInt16();
  28665. this.maxTwilightPoints = data.readUInt16();
  28666. this.maxStorage = data.readUInt16();
  28667. this.maxFunctionDefs = data.readUInt16();
  28668. this.maxInstructionDefs = data.readUInt16();
  28669. this.maxStackElements = data.readUInt16();
  28670. this.maxSizeOfInstructions = data.readUInt16();
  28671. this.maxComponentElements = data.readUInt16();
  28672. return this.maxComponentDepth = data.readUInt16();
  28673. };
  28674. MaxpTable.prototype.encode = function(ids) {
  28675. var table;
  28676. table = new Data;
  28677. table.writeInt(this.version);
  28678. table.writeUInt16(ids.length);
  28679. table.writeUInt16(this.maxPoints);
  28680. table.writeUInt16(this.maxContours);
  28681. table.writeUInt16(this.maxCompositePoints);
  28682. table.writeUInt16(this.maxComponentContours);
  28683. table.writeUInt16(this.maxZones);
  28684. table.writeUInt16(this.maxTwilightPoints);
  28685. table.writeUInt16(this.maxStorage);
  28686. table.writeUInt16(this.maxFunctionDefs);
  28687. table.writeUInt16(this.maxInstructionDefs);
  28688. table.writeUInt16(this.maxStackElements);
  28689. table.writeUInt16(this.maxSizeOfInstructions);
  28690. table.writeUInt16(this.maxComponentElements);
  28691. table.writeUInt16(this.maxComponentDepth);
  28692. return table.data;
  28693. };
  28694. return MaxpTable;
  28695. })(Table);
  28696. module.exports = MaxpTable;
  28697. }).call(this);
  28698. /***/ },
  28699. /* 83 */
  28700. /***/ function(module, exports, __webpack_require__) {
  28701. // Generated by CoffeeScript 1.7.1
  28702. (function() {
  28703. var Data, PostTable, Table,
  28704. __hasProp = {}.hasOwnProperty,
  28705. __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
  28706. Table = __webpack_require__(76);
  28707. Data = __webpack_require__(72);
  28708. PostTable = (function(_super) {
  28709. var POSTSCRIPT_GLYPHS;
  28710. __extends(PostTable, _super);
  28711. function PostTable() {
  28712. return PostTable.__super__.constructor.apply(this, arguments);
  28713. }
  28714. PostTable.prototype.tag = 'post';
  28715. PostTable.prototype.parse = function(data) {
  28716. var i, length, numberOfGlyphs, _i, _results;
  28717. data.pos = this.offset;
  28718. this.format = data.readInt();
  28719. this.italicAngle = data.readInt();
  28720. this.underlinePosition = data.readShort();
  28721. this.underlineThickness = data.readShort();
  28722. this.isFixedPitch = data.readInt();
  28723. this.minMemType42 = data.readInt();
  28724. this.maxMemType42 = data.readInt();
  28725. this.minMemType1 = data.readInt();
  28726. this.maxMemType1 = data.readInt();
  28727. switch (this.format) {
  28728. case 0x00010000:
  28729. break;
  28730. case 0x00020000:
  28731. numberOfGlyphs = data.readUInt16();
  28732. this.glyphNameIndex = [];
  28733. for (i = _i = 0; 0 <= numberOfGlyphs ? _i < numberOfGlyphs : _i > numberOfGlyphs; i = 0 <= numberOfGlyphs ? ++_i : --_i) {
  28734. this.glyphNameIndex.push(data.readUInt16());
  28735. }
  28736. this.names = [];
  28737. _results = [];
  28738. while (data.pos < this.offset + this.length) {
  28739. length = data.readByte();
  28740. _results.push(this.names.push(data.readString(length)));
  28741. }
  28742. return _results;
  28743. break;
  28744. case 0x00025000:
  28745. numberOfGlyphs = data.readUInt16();
  28746. return this.offsets = data.read(numberOfGlyphs);
  28747. case 0x00030000:
  28748. break;
  28749. case 0x00040000:
  28750. return this.map = (function() {
  28751. var _j, _ref, _results1;
  28752. _results1 = [];
  28753. for (i = _j = 0, _ref = this.file.maxp.numGlyphs; 0 <= _ref ? _j < _ref : _j > _ref; i = 0 <= _ref ? ++_j : --_j) {
  28754. _results1.push(data.readUInt32());
  28755. }
  28756. return _results1;
  28757. }).call(this);
  28758. }
  28759. };
  28760. PostTable.prototype.glyphFor = function(code) {
  28761. var index;
  28762. switch (this.format) {
  28763. case 0x00010000:
  28764. return POSTSCRIPT_GLYPHS[code] || '.notdef';
  28765. case 0x00020000:
  28766. index = this.glyphNameIndex[code];
  28767. if (index <= 257) {
  28768. return POSTSCRIPT_GLYPHS[index];
  28769. } else {
  28770. return this.names[index - 258] || '.notdef';
  28771. }
  28772. break;
  28773. case 0x00025000:
  28774. return POSTSCRIPT_GLYPHS[code + this.offsets[code]] || '.notdef';
  28775. case 0x00030000:
  28776. return '.notdef';
  28777. case 0x00040000:
  28778. return this.map[code] || 0xFFFF;
  28779. }
  28780. };
  28781. PostTable.prototype.encode = function(mapping) {
  28782. var id, index, indexes, position, post, raw, string, strings, table, _i, _j, _k, _len, _len1, _len2;
  28783. if (!this.exists) {
  28784. return null;
  28785. }
  28786. raw = this.raw();
  28787. if (this.format === 0x00030000) {
  28788. return raw;
  28789. }
  28790. table = new Data(raw.slice(0, 32));
  28791. table.writeUInt32(0x00020000);
  28792. table.pos = 32;
  28793. indexes = [];
  28794. strings = [];
  28795. for (_i = 0, _len = mapping.length; _i < _len; _i++) {
  28796. id = mapping[_i];
  28797. post = this.glyphFor(id);
  28798. position = POSTSCRIPT_GLYPHS.indexOf(post);
  28799. if (position !== -1) {
  28800. indexes.push(position);
  28801. } else {
  28802. indexes.push(257 + strings.length);
  28803. strings.push(post);
  28804. }
  28805. }
  28806. table.writeUInt16(Object.keys(mapping).length);
  28807. for (_j = 0, _len1 = indexes.length; _j < _len1; _j++) {
  28808. index = indexes[_j];
  28809. table.writeUInt16(index);
  28810. }
  28811. for (_k = 0, _len2 = strings.length; _k < _len2; _k++) {
  28812. string = strings[_k];
  28813. table.writeByte(string.length);
  28814. table.writeString(string);
  28815. }
  28816. return table.data;
  28817. };
  28818. POSTSCRIPT_GLYPHS = '.notdef .null nonmarkingreturn space exclam quotedbl numbersign dollar percent\nampersand quotesingle parenleft parenright asterisk plus comma hyphen period slash\nzero one two three four five six seven eight nine colon semicolon less equal greater\nquestion at A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\nbracketleft backslash bracketright asciicircum underscore grave\na b c d e f g h i j k l m n o p q r s t u v w x y z\nbraceleft bar braceright asciitilde Adieresis Aring Ccedilla Eacute Ntilde Odieresis\nUdieresis aacute agrave acircumflex adieresis atilde aring ccedilla eacute egrave\necircumflex edieresis iacute igrave icircumflex idieresis ntilde oacute ograve\nocircumflex odieresis otilde uacute ugrave ucircumflex udieresis dagger degree cent\nsterling section bullet paragraph germandbls registered copyright trademark acute\ndieresis notequal AE Oslash infinity plusminus lessequal greaterequal yen mu\npartialdiff summation product pi integral ordfeminine ordmasculine Omega ae oslash\nquestiondown exclamdown logicalnot radical florin approxequal Delta guillemotleft\nguillemotright ellipsis nonbreakingspace Agrave Atilde Otilde OE oe endash emdash\nquotedblleft quotedblright quoteleft quoteright divide lozenge ydieresis Ydieresis\nfraction currency guilsinglleft guilsinglright fi fl daggerdbl periodcentered\nquotesinglbase quotedblbase perthousand Acircumflex Ecircumflex Aacute Edieresis\nEgrave Iacute Icircumflex Idieresis Igrave Oacute Ocircumflex apple Ograve Uacute\nUcircumflex Ugrave dotlessi circumflex tilde macron breve dotaccent ring cedilla\nhungarumlaut ogonek caron Lslash lslash Scaron scaron Zcaron zcaron brokenbar Eth\neth Yacute yacute Thorn thorn minus multiply onesuperior twosuperior threesuperior\nonehalf onequarter threequarters franc Gbreve gbreve Idotaccent Scedilla scedilla\nCacute cacute Ccaron ccaron dcroat'.split(/\s+/g);
  28819. return PostTable;
  28820. })(Table);
  28821. module.exports = PostTable;
  28822. }).call(this);
  28823. /***/ },
  28824. /* 84 */
  28825. /***/ function(module, exports, __webpack_require__) {
  28826. // Generated by CoffeeScript 1.7.1
  28827. (function() {
  28828. var OS2Table, Table,
  28829. __hasProp = {}.hasOwnProperty,
  28830. __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
  28831. Table = __webpack_require__(76);
  28832. OS2Table = (function(_super) {
  28833. __extends(OS2Table, _super);
  28834. function OS2Table() {
  28835. return OS2Table.__super__.constructor.apply(this, arguments);
  28836. }
  28837. OS2Table.prototype.tag = 'OS/2';
  28838. OS2Table.prototype.parse = function(data) {
  28839. var i;
  28840. data.pos = this.offset;
  28841. this.version = data.readUInt16();
  28842. this.averageCharWidth = data.readShort();
  28843. this.weightClass = data.readUInt16();
  28844. this.widthClass = data.readUInt16();
  28845. this.type = data.readShort();
  28846. this.ySubscriptXSize = data.readShort();
  28847. this.ySubscriptYSize = data.readShort();
  28848. this.ySubscriptXOffset = data.readShort();
  28849. this.ySubscriptYOffset = data.readShort();
  28850. this.ySuperscriptXSize = data.readShort();
  28851. this.ySuperscriptYSize = data.readShort();
  28852. this.ySuperscriptXOffset = data.readShort();
  28853. this.ySuperscriptYOffset = data.readShort();
  28854. this.yStrikeoutSize = data.readShort();
  28855. this.yStrikeoutPosition = data.readShort();
  28856. this.familyClass = data.readShort();
  28857. this.panose = (function() {
  28858. var _i, _results;
  28859. _results = [];
  28860. for (i = _i = 0; _i < 10; i = ++_i) {
  28861. _results.push(data.readByte());
  28862. }
  28863. return _results;
  28864. })();
  28865. this.charRange = (function() {
  28866. var _i, _results;
  28867. _results = [];
  28868. for (i = _i = 0; _i < 4; i = ++_i) {
  28869. _results.push(data.readInt());
  28870. }
  28871. return _results;
  28872. })();
  28873. this.vendorID = data.readString(4);
  28874. this.selection = data.readShort();
  28875. this.firstCharIndex = data.readShort();
  28876. this.lastCharIndex = data.readShort();
  28877. if (this.version > 0) {
  28878. this.ascent = data.readShort();
  28879. this.descent = data.readShort();
  28880. this.lineGap = data.readShort();
  28881. this.winAscent = data.readShort();
  28882. this.winDescent = data.readShort();
  28883. this.codePageRange = (function() {
  28884. var _i, _results;
  28885. _results = [];
  28886. for (i = _i = 0; _i < 2; i = ++_i) {
  28887. _results.push(data.readInt());
  28888. }
  28889. return _results;
  28890. })();
  28891. if (this.version > 1) {
  28892. this.xHeight = data.readShort();
  28893. this.capHeight = data.readShort();
  28894. this.defaultChar = data.readShort();
  28895. this.breakChar = data.readShort();
  28896. return this.maxContext = data.readShort();
  28897. }
  28898. }
  28899. };
  28900. OS2Table.prototype.encode = function() {
  28901. return this.raw();
  28902. };
  28903. return OS2Table;
  28904. })(Table);
  28905. module.exports = OS2Table;
  28906. }).call(this);
  28907. /***/ },
  28908. /* 85 */
  28909. /***/ function(module, exports, __webpack_require__) {
  28910. // Generated by CoffeeScript 1.7.1
  28911. (function() {
  28912. var Data, LocaTable, Table,
  28913. __hasProp = {}.hasOwnProperty,
  28914. __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
  28915. Table = __webpack_require__(76);
  28916. Data = __webpack_require__(72);
  28917. LocaTable = (function(_super) {
  28918. __extends(LocaTable, _super);
  28919. function LocaTable() {
  28920. return LocaTable.__super__.constructor.apply(this, arguments);
  28921. }
  28922. LocaTable.prototype.tag = 'loca';
  28923. LocaTable.prototype.parse = function(data) {
  28924. var format, i;
  28925. data.pos = this.offset;
  28926. format = this.file.head.indexToLocFormat;
  28927. if (format === 0) {
  28928. return this.offsets = (function() {
  28929. var _i, _ref, _results;
  28930. _results = [];
  28931. for (i = _i = 0, _ref = this.length; _i < _ref; i = _i += 2) {
  28932. _results.push(data.readUInt16() * 2);
  28933. }
  28934. return _results;
  28935. }).call(this);
  28936. } else {
  28937. return this.offsets = (function() {
  28938. var _i, _ref, _results;
  28939. _results = [];
  28940. for (i = _i = 0, _ref = this.length; _i < _ref; i = _i += 4) {
  28941. _results.push(data.readUInt32());
  28942. }
  28943. return _results;
  28944. }).call(this);
  28945. }
  28946. };
  28947. LocaTable.prototype.indexOf = function(id) {
  28948. return this.offsets[id];
  28949. };
  28950. LocaTable.prototype.lengthOf = function(id) {
  28951. return this.offsets[id + 1] - this.offsets[id];
  28952. };
  28953. LocaTable.prototype.encode = function(offsets) {
  28954. var o, offset, ret, table, _i, _j, _k, _len, _len1, _len2, _ref;
  28955. table = new Data;
  28956. for (_i = 0, _len = offsets.length; _i < _len; _i++) {
  28957. offset = offsets[_i];
  28958. if (!(offset > 0xFFFF)) {
  28959. continue;
  28960. }
  28961. _ref = this.offsets;
  28962. for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
  28963. o = _ref[_j];
  28964. table.writeUInt32(o);
  28965. }
  28966. return ret = {
  28967. format: 1,
  28968. table: table.data
  28969. };
  28970. }
  28971. for (_k = 0, _len2 = offsets.length; _k < _len2; _k++) {
  28972. o = offsets[_k];
  28973. table.writeUInt16(o / 2);
  28974. }
  28975. return ret = {
  28976. format: 0,
  28977. table: table.data
  28978. };
  28979. };
  28980. return LocaTable;
  28981. })(Table);
  28982. module.exports = LocaTable;
  28983. }).call(this);
  28984. /***/ },
  28985. /* 86 */
  28986. /***/ function(module, exports, __webpack_require__) {
  28987. // Generated by CoffeeScript 1.7.1
  28988. (function() {
  28989. var CompoundGlyph, Data, GlyfTable, SimpleGlyph, Table,
  28990. __hasProp = {}.hasOwnProperty,
  28991. __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
  28992. __slice = [].slice;
  28993. Table = __webpack_require__(76);
  28994. Data = __webpack_require__(72);
  28995. GlyfTable = (function(_super) {
  28996. __extends(GlyfTable, _super);
  28997. function GlyfTable() {
  28998. return GlyfTable.__super__.constructor.apply(this, arguments);
  28999. }
  29000. GlyfTable.prototype.tag = 'glyf';
  29001. GlyfTable.prototype.parse = function(data) {
  29002. return this.cache = {};
  29003. };
  29004. GlyfTable.prototype.glyphFor = function(id) {
  29005. var data, index, length, loca, numberOfContours, raw, xMax, xMin, yMax, yMin;
  29006. if (id in this.cache) {
  29007. return this.cache[id];
  29008. }
  29009. loca = this.file.loca;
  29010. data = this.file.contents;
  29011. index = loca.indexOf(id);
  29012. length = loca.lengthOf(id);
  29013. if (length === 0) {
  29014. return this.cache[id] = null;
  29015. }
  29016. data.pos = this.offset + index;
  29017. raw = new Data(data.read(length));
  29018. numberOfContours = raw.readShort();
  29019. xMin = raw.readShort();
  29020. yMin = raw.readShort();
  29021. xMax = raw.readShort();
  29022. yMax = raw.readShort();
  29023. if (numberOfContours === -1) {
  29024. this.cache[id] = new CompoundGlyph(raw, xMin, yMin, xMax, yMax);
  29025. } else {
  29026. this.cache[id] = new SimpleGlyph(raw, numberOfContours, xMin, yMin, xMax, yMax);
  29027. }
  29028. return this.cache[id];
  29029. };
  29030. GlyfTable.prototype.encode = function(glyphs, mapping, old2new) {
  29031. var glyph, id, offsets, table, _i, _len;
  29032. table = [];
  29033. offsets = [];
  29034. for (_i = 0, _len = mapping.length; _i < _len; _i++) {
  29035. id = mapping[_i];
  29036. glyph = glyphs[id];
  29037. offsets.push(table.length);
  29038. if (glyph) {
  29039. table = table.concat(glyph.encode(old2new));
  29040. }
  29041. }
  29042. offsets.push(table.length);
  29043. return {
  29044. table: table,
  29045. offsets: offsets
  29046. };
  29047. };
  29048. return GlyfTable;
  29049. })(Table);
  29050. SimpleGlyph = (function() {
  29051. function SimpleGlyph(raw, numberOfContours, xMin, yMin, xMax, yMax) {
  29052. this.raw = raw;
  29053. this.numberOfContours = numberOfContours;
  29054. this.xMin = xMin;
  29055. this.yMin = yMin;
  29056. this.xMax = xMax;
  29057. this.yMax = yMax;
  29058. this.compound = false;
  29059. }
  29060. SimpleGlyph.prototype.encode = function() {
  29061. return this.raw.data;
  29062. };
  29063. return SimpleGlyph;
  29064. })();
  29065. CompoundGlyph = (function() {
  29066. var ARG_1_AND_2_ARE_WORDS, MORE_COMPONENTS, WE_HAVE_AN_X_AND_Y_SCALE, WE_HAVE_A_SCALE, WE_HAVE_A_TWO_BY_TWO, WE_HAVE_INSTRUCTIONS;
  29067. ARG_1_AND_2_ARE_WORDS = 0x0001;
  29068. WE_HAVE_A_SCALE = 0x0008;
  29069. MORE_COMPONENTS = 0x0020;
  29070. WE_HAVE_AN_X_AND_Y_SCALE = 0x0040;
  29071. WE_HAVE_A_TWO_BY_TWO = 0x0080;
  29072. WE_HAVE_INSTRUCTIONS = 0x0100;
  29073. function CompoundGlyph(raw, xMin, yMin, xMax, yMax) {
  29074. var data, flags;
  29075. this.raw = raw;
  29076. this.xMin = xMin;
  29077. this.yMin = yMin;
  29078. this.xMax = xMax;
  29079. this.yMax = yMax;
  29080. this.compound = true;
  29081. this.glyphIDs = [];
  29082. this.glyphOffsets = [];
  29083. data = this.raw;
  29084. while (true) {
  29085. flags = data.readShort();
  29086. this.glyphOffsets.push(data.pos);
  29087. this.glyphIDs.push(data.readShort());
  29088. if (!(flags & MORE_COMPONENTS)) {
  29089. break;
  29090. }
  29091. if (flags & ARG_1_AND_2_ARE_WORDS) {
  29092. data.pos += 4;
  29093. } else {
  29094. data.pos += 2;
  29095. }
  29096. if (flags & WE_HAVE_A_TWO_BY_TWO) {
  29097. data.pos += 8;
  29098. } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {
  29099. data.pos += 4;
  29100. } else if (flags & WE_HAVE_A_SCALE) {
  29101. data.pos += 2;
  29102. }
  29103. }
  29104. }
  29105. CompoundGlyph.prototype.encode = function(mapping) {
  29106. var i, id, result, _i, _len, _ref;
  29107. result = new Data(__slice.call(this.raw.data));
  29108. _ref = this.glyphIDs;
  29109. for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
  29110. id = _ref[i];
  29111. result.pos = this.glyphOffsets[i];
  29112. result.writeShort(mapping[id]);
  29113. }
  29114. return result.data;
  29115. };
  29116. return CompoundGlyph;
  29117. })();
  29118. module.exports = GlyfTable;
  29119. }).call(this);
  29120. /***/ },
  29121. /* 87 */
  29122. /***/ function(module, exports, __webpack_require__) {
  29123. // Generated by CoffeeScript 1.7.1
  29124. (function() {
  29125. var AFMFont, fs;
  29126. fs = __webpack_require__(44);
  29127. AFMFont = (function() {
  29128. var WIN_ANSI_MAP, characters;
  29129. AFMFont.open = function(filename) {
  29130. return new AFMFont(fs.readFileSync(filename, 'utf8'));
  29131. };
  29132. function AFMFont(contents) {
  29133. var e, i;
  29134. this.contents = contents;
  29135. this.attributes = {};
  29136. this.glyphWidths = {};
  29137. this.boundingBoxes = {};
  29138. this.parse();
  29139. this.charWidths = (function() {
  29140. var _i, _results;
  29141. _results = [];
  29142. for (i = _i = 0; _i <= 255; i = ++_i) {
  29143. _results.push(this.glyphWidths[characters[i]]);
  29144. }
  29145. return _results;
  29146. }).call(this);
  29147. this.bbox = (function() {
  29148. var _i, _len, _ref, _results;
  29149. _ref = this.attributes['FontBBox'].split(/\s+/);
  29150. _results = [];
  29151. for (_i = 0, _len = _ref.length; _i < _len; _i++) {
  29152. e = _ref[_i];
  29153. _results.push(+e);
  29154. }
  29155. return _results;
  29156. }).call(this);
  29157. this.ascender = +(this.attributes['Ascender'] || 0);
  29158. this.decender = +(this.attributes['Descender'] || 0);
  29159. this.lineGap = (this.bbox[3] - this.bbox[1]) - (this.ascender - this.decender);
  29160. }
  29161. AFMFont.prototype.parse = function() {
  29162. var a, key, line, match, name, section, value, _i, _len, _ref;
  29163. section = '';
  29164. _ref = this.contents.split('\n');
  29165. for (_i = 0, _len = _ref.length; _i < _len; _i++) {
  29166. line = _ref[_i];
  29167. if (match = line.match(/^Start(\w+)/)) {
  29168. section = match[1];
  29169. continue;
  29170. } else if (match = line.match(/^End(\w+)/)) {
  29171. section = '';
  29172. continue;
  29173. }
  29174. switch (section) {
  29175. case 'FontMetrics':
  29176. match = line.match(/(^\w+)\s+(.*)/);
  29177. key = match[1];
  29178. value = match[2];
  29179. if (a = this.attributes[key]) {
  29180. if (!Array.isArray(a)) {
  29181. a = this.attributes[key] = [a];
  29182. }
  29183. a.push(value);
  29184. } else {
  29185. this.attributes[key] = value;
  29186. }
  29187. break;
  29188. case 'CharMetrics':
  29189. if (!/^CH?\s/.test(line)) {
  29190. continue;
  29191. }
  29192. name = line.match(/\bN\s+(\.?\w+)\s*;/)[1];
  29193. this.glyphWidths[name] = +line.match(/\bWX\s+(\d+)\s*;/)[1];
  29194. }
  29195. }
  29196. };
  29197. WIN_ANSI_MAP = {
  29198. 402: 131,
  29199. 8211: 150,
  29200. 8212: 151,
  29201. 8216: 145,
  29202. 8217: 146,
  29203. 8218: 130,
  29204. 8220: 147,
  29205. 8221: 148,
  29206. 8222: 132,
  29207. 8224: 134,
  29208. 8225: 135,
  29209. 8226: 149,
  29210. 8230: 133,
  29211. 8364: 128,
  29212. 8240: 137,
  29213. 8249: 139,
  29214. 8250: 155,
  29215. 710: 136,
  29216. 8482: 153,
  29217. 338: 140,
  29218. 339: 156,
  29219. 732: 152,
  29220. 352: 138,
  29221. 353: 154,
  29222. 376: 159,
  29223. 381: 142,
  29224. 382: 158
  29225. };
  29226. AFMFont.prototype.encodeText = function(text) {
  29227. var char, i, string, _i, _ref;
  29228. string = '';
  29229. for (i = _i = 0, _ref = text.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
  29230. char = text.charCodeAt(i);
  29231. char = WIN_ANSI_MAP[char] || char;
  29232. string += String.fromCharCode(char);
  29233. }
  29234. return string;
  29235. };
  29236. AFMFont.prototype.characterToGlyph = function(character) {
  29237. return characters[WIN_ANSI_MAP[character] || character];
  29238. };
  29239. AFMFont.prototype.widthOfGlyph = function(glyph) {
  29240. return this.glyphWidths[glyph];
  29241. };
  29242. characters = '.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n\nspace exclam quotedbl numbersign\ndollar percent ampersand quotesingle\nparenleft parenright asterisk plus\ncomma hyphen period slash\nzero one two three\nfour five six seven\neight nine colon semicolon\nless equal greater question\n\nat A B C\nD E F G\nH I J K\nL M N O\nP Q R S\nT U V W\nX Y Z bracketleft\nbackslash bracketright asciicircum underscore\n\ngrave a b c\nd e f g\nh i j k\nl m n o\np q r s\nt u v w\nx y z braceleft\nbar braceright asciitilde .notdef\n\nEuro .notdef quotesinglbase florin\nquotedblbase ellipsis dagger daggerdbl\ncircumflex perthousand Scaron guilsinglleft\nOE .notdef Zcaron .notdef\n.notdef quoteleft quoteright quotedblleft\nquotedblright bullet endash emdash\ntilde trademark scaron guilsinglright\noe .notdef zcaron ydieresis\n\nspace exclamdown cent sterling\ncurrency yen brokenbar section\ndieresis copyright ordfeminine guillemotleft\nlogicalnot hyphen registered macron\ndegree plusminus twosuperior threesuperior\nacute mu paragraph periodcentered\ncedilla onesuperior ordmasculine guillemotright\nonequarter onehalf threequarters questiondown\n\nAgrave Aacute Acircumflex Atilde\nAdieresis Aring AE Ccedilla\nEgrave Eacute Ecircumflex Edieresis\nIgrave Iacute Icircumflex Idieresis\nEth Ntilde Ograve Oacute\nOcircumflex Otilde Odieresis multiply\nOslash Ugrave Uacute Ucircumflex\nUdieresis Yacute Thorn germandbls\n\nagrave aacute acircumflex atilde\nadieresis aring ae ccedilla\negrave eacute ecircumflex edieresis\nigrave iacute icircumflex idieresis\neth ntilde ograve oacute\nocircumflex otilde odieresis divide\noslash ugrave uacute ucircumflex\nudieresis yacute thorn ydieresis'.split(/\s+/);
  29243. return AFMFont;
  29244. })();
  29245. module.exports = AFMFont;
  29246. }).call(this);
  29247. /***/ },
  29248. /* 88 */
  29249. /***/ function(module, exports, __webpack_require__) {
  29250. // Generated by CoffeeScript 1.7.1
  29251. (function() {
  29252. var CmapTable, Subset, utils,
  29253. __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
  29254. CmapTable = __webpack_require__(79);
  29255. utils = __webpack_require__(77);
  29256. Subset = (function() {
  29257. function Subset(font) {
  29258. this.font = font;
  29259. this.subset = {};
  29260. this.unicodes = {};
  29261. this.next = 33;
  29262. }
  29263. Subset.prototype.use = function(character) {
  29264. var i, _i, _ref;
  29265. if (typeof character === 'string') {
  29266. for (i = _i = 0, _ref = character.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
  29267. this.use(character.charCodeAt(i));
  29268. }
  29269. return;
  29270. }
  29271. if (!this.unicodes[character]) {
  29272. this.subset[this.next] = character;
  29273. return this.unicodes[character] = this.next++;
  29274. }
  29275. };
  29276. Subset.prototype.encodeText = function(text) {
  29277. var char, i, string, _i, _ref;
  29278. string = '';
  29279. for (i = _i = 0, _ref = text.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
  29280. char = this.unicodes[text.charCodeAt(i)];
  29281. string += String.fromCharCode(char);
  29282. }
  29283. return string;
  29284. };
  29285. Subset.prototype.generateCmap = function() {
  29286. var mapping, roman, unicode, unicodeCmap, _ref;
  29287. unicodeCmap = this.font.cmap.tables[0].codeMap;
  29288. mapping = {};
  29289. _ref = this.subset;
  29290. for (roman in _ref) {
  29291. unicode = _ref[roman];
  29292. mapping[roman] = unicodeCmap[unicode];
  29293. }
  29294. return mapping;
  29295. };
  29296. Subset.prototype.glyphIDs = function() {
  29297. var ret, roman, unicode, unicodeCmap, val, _ref;
  29298. unicodeCmap = this.font.cmap.tables[0].codeMap;
  29299. ret = [0];
  29300. _ref = this.subset;
  29301. for (roman in _ref) {
  29302. unicode = _ref[roman];
  29303. val = unicodeCmap[unicode];
  29304. if ((val != null) && __indexOf.call(ret, val) < 0) {
  29305. ret.push(val);
  29306. }
  29307. }
  29308. return ret.sort();
  29309. };
  29310. Subset.prototype.glyphsFor = function(glyphIDs) {
  29311. var additionalIDs, glyph, glyphs, id, _i, _len, _ref;
  29312. glyphs = {};
  29313. for (_i = 0, _len = glyphIDs.length; _i < _len; _i++) {
  29314. id = glyphIDs[_i];
  29315. glyphs[id] = this.font.glyf.glyphFor(id);
  29316. }
  29317. additionalIDs = [];
  29318. for (id in glyphs) {
  29319. glyph = glyphs[id];
  29320. if (glyph != null ? glyph.compound : void 0) {
  29321. additionalIDs.push.apply(additionalIDs, glyph.glyphIDs);
  29322. }
  29323. }
  29324. if (additionalIDs.length > 0) {
  29325. _ref = this.glyphsFor(additionalIDs);
  29326. for (id in _ref) {
  29327. glyph = _ref[id];
  29328. glyphs[id] = glyph;
  29329. }
  29330. }
  29331. return glyphs;
  29332. };
  29333. Subset.prototype.encode = function() {
  29334. var cmap, code, glyf, glyphs, id, ids, loca, name, new2old, newIDs, nextGlyphID, old2new, oldID, oldIDs, tables, _ref, _ref1;
  29335. cmap = CmapTable.encode(this.generateCmap(), 'unicode');
  29336. glyphs = this.glyphsFor(this.glyphIDs());
  29337. old2new = {
  29338. 0: 0
  29339. };
  29340. _ref = cmap.charMap;
  29341. for (code in _ref) {
  29342. ids = _ref[code];
  29343. old2new[ids.old] = ids["new"];
  29344. }
  29345. nextGlyphID = cmap.maxGlyphID;
  29346. for (oldID in glyphs) {
  29347. if (!(oldID in old2new)) {
  29348. old2new[oldID] = nextGlyphID++;
  29349. }
  29350. }
  29351. new2old = utils.invert(old2new);
  29352. newIDs = Object.keys(new2old).sort(function(a, b) {
  29353. return a - b;
  29354. });
  29355. oldIDs = (function() {
  29356. var _i, _len, _results;
  29357. _results = [];
  29358. for (_i = 0, _len = newIDs.length; _i < _len; _i++) {
  29359. id = newIDs[_i];
  29360. _results.push(new2old[id]);
  29361. }
  29362. return _results;
  29363. })();
  29364. glyf = this.font.glyf.encode(glyphs, oldIDs, old2new);
  29365. loca = this.font.loca.encode(glyf.offsets);
  29366. name = this.font.name.encode();
  29367. this.postscriptName = name.postscriptName;
  29368. this.cmap = {};
  29369. _ref1 = cmap.charMap;
  29370. for (code in _ref1) {
  29371. ids = _ref1[code];
  29372. this.cmap[code] = ids.old;
  29373. }
  29374. tables = {
  29375. cmap: cmap.table,
  29376. glyf: glyf.table,
  29377. loca: loca.table,
  29378. hmtx: this.font.hmtx.encode(oldIDs),
  29379. hhea: this.font.hhea.encode(oldIDs),
  29380. maxp: this.font.maxp.encode(oldIDs),
  29381. post: this.font.post.encode(oldIDs),
  29382. name: name.table,
  29383. head: this.font.head.encode(loca)
  29384. };
  29385. if (this.font.os2.exists) {
  29386. tables['OS/2'] = this.font.os2.raw();
  29387. }
  29388. return this.font.directory.encode(tables);
  29389. };
  29390. return Subset;
  29391. })();
  29392. module.exports = Subset;
  29393. }).call(this);
  29394. /***/ },
  29395. /* 89 */
  29396. /***/ function(module, exports, __webpack_require__) {
  29397. // Generated by CoffeeScript 1.7.1
  29398. (function() {
  29399. var LineWrapper;
  29400. LineWrapper = __webpack_require__(90);
  29401. module.exports = {
  29402. initText: function() {
  29403. this.x = 0;
  29404. this.y = 0;
  29405. return this._lineGap = 0;
  29406. },
  29407. lineGap: function(_lineGap) {
  29408. this._lineGap = _lineGap;
  29409. return this;
  29410. },
  29411. moveDown: function(lines) {
  29412. if (lines == null) {
  29413. lines = 1;
  29414. }
  29415. this.y += this.currentLineHeight(true) * lines + this._lineGap;
  29416. return this;
  29417. },
  29418. moveUp: function(lines) {
  29419. if (lines == null) {
  29420. lines = 1;
  29421. }
  29422. this.y -= this.currentLineHeight(true) * lines + this._lineGap;
  29423. return this;
  29424. },
  29425. _text: function(text, x, y, options, lineCallback) {
  29426. var line, wrapper, _i, _len, _ref;
  29427. options = this._initOptions(x, y, options);
  29428. text = '' + text;
  29429. if (options.wordSpacing) {
  29430. text = text.replace(/\s{2,}/g, ' ');
  29431. }
  29432. if (options.width) {
  29433. wrapper = this._wrapper;
  29434. if (!wrapper) {
  29435. wrapper = new LineWrapper(this, options);
  29436. wrapper.on('line', lineCallback);
  29437. }
  29438. this._wrapper = options.continued ? wrapper : null;
  29439. this._textOptions = options.continued ? options : null;
  29440. wrapper.wrap(text, options);
  29441. } else {
  29442. _ref = text.split('\n');
  29443. for (_i = 0, _len = _ref.length; _i < _len; _i++) {
  29444. line = _ref[_i];
  29445. lineCallback(line, options);
  29446. }
  29447. }
  29448. return this;
  29449. },
  29450. text: function(text, x, y, options) {
  29451. return this._text(text, x, y, options, this._line.bind(this));
  29452. },
  29453. widthOfString: function(string, options) {
  29454. if (options == null) {
  29455. options = {};
  29456. }
  29457. return this._font.widthOfString(string, this._fontSize) + (options.characterSpacing || 0) * (string.length - 1);
  29458. },
  29459. heightOfString: function(text, options) {
  29460. var height, lineGap, x, y;
  29461. if (options == null) {
  29462. options = {};
  29463. }
  29464. x = this.x, y = this.y;
  29465. options = this._initOptions(options);
  29466. options.height = Infinity;
  29467. lineGap = options.lineGap || this._lineGap || 0;
  29468. this._text(text, this.x, this.y, options, (function(_this) {
  29469. return function(line, options) {
  29470. return _this.y += _this.currentLineHeight(true) + lineGap;
  29471. };
  29472. })(this));
  29473. height = this.y - y;
  29474. this.x = x;
  29475. this.y = y;
  29476. return height;
  29477. },
  29478. list: function(list, x, y, options, wrapper) {
  29479. var flatten, i, indent, itemIndent, items, level, levels, r;
  29480. options = this._initOptions(x, y, options);
  29481. r = Math.round((this._font.ascender / 1000 * this._fontSize) / 3);
  29482. indent = options.textIndent || r * 5;
  29483. itemIndent = options.bulletIndent || r * 8;
  29484. level = 1;
  29485. items = [];
  29486. levels = [];
  29487. flatten = function(list) {
  29488. var i, item, _i, _len, _results;
  29489. _results = [];
  29490. for (i = _i = 0, _len = list.length; _i < _len; i = ++_i) {
  29491. item = list[i];
  29492. if (Array.isArray(item)) {
  29493. level++;
  29494. flatten(item);
  29495. _results.push(level--);
  29496. } else {
  29497. items.push(item);
  29498. _results.push(levels.push(level));
  29499. }
  29500. }
  29501. return _results;
  29502. };
  29503. flatten(list);
  29504. wrapper = new LineWrapper(this, options);
  29505. wrapper.on('line', this._line.bind(this));
  29506. level = 1;
  29507. i = 0;
  29508. wrapper.on('firstLine', (function(_this) {
  29509. return function() {
  29510. var diff, l;
  29511. if ((l = levels[i++]) !== level) {
  29512. diff = itemIndent * (l - level);
  29513. _this.x += diff;
  29514. wrapper.lineWidth -= diff;
  29515. level = l;
  29516. }
  29517. _this.circle(_this.x - indent + r, _this.y + r + (r / 2), r);
  29518. return _this.fill();
  29519. };
  29520. })(this));
  29521. wrapper.on('sectionStart', (function(_this) {
  29522. return function() {
  29523. var pos;
  29524. pos = indent + itemIndent * (level - 1);
  29525. _this.x += pos;
  29526. return wrapper.lineWidth -= pos;
  29527. };
  29528. })(this));
  29529. wrapper.on('sectionEnd', (function(_this) {
  29530. return function() {
  29531. var pos;
  29532. pos = indent + itemIndent * (level - 1);
  29533. _this.x -= pos;
  29534. return wrapper.lineWidth += pos;
  29535. };
  29536. })(this));
  29537. wrapper.wrap(items.join('\n'), options);
  29538. return this;
  29539. },
  29540. _initOptions: function(x, y, options) {
  29541. var key, margins, val, _ref;
  29542. if (x == null) {
  29543. x = {};
  29544. }
  29545. if (options == null) {
  29546. options = {};
  29547. }
  29548. if (typeof x === 'object') {
  29549. options = x;
  29550. x = null;
  29551. }
  29552. options = (function() {
  29553. var k, opts, v;
  29554. opts = {};
  29555. for (k in options) {
  29556. v = options[k];
  29557. opts[k] = v;
  29558. }
  29559. return opts;
  29560. })();
  29561. if (this._textOptions) {
  29562. _ref = this._textOptions;
  29563. for (key in _ref) {
  29564. val = _ref[key];
  29565. if (key !== 'continued') {
  29566. if (options[key] == null) {
  29567. options[key] = val;
  29568. }
  29569. }
  29570. }
  29571. }
  29572. if (x != null) {
  29573. this.x = x;
  29574. }
  29575. if (y != null) {
  29576. this.y = y;
  29577. }
  29578. if (options.lineBreak !== false) {
  29579. margins = this.page.margins;
  29580. if (options.width == null) {
  29581. options.width = this.page.width - this.x - margins.right;
  29582. }
  29583. }
  29584. options.columns || (options.columns = 0);
  29585. if (options.columnGap == null) {
  29586. options.columnGap = 18;
  29587. }
  29588. return options;
  29589. },
  29590. _line: function(text, options, wrapper) {
  29591. var lineGap;
  29592. if (options == null) {
  29593. options = {};
  29594. }
  29595. this._fragment(text, this.x, this.y, options);
  29596. lineGap = options.lineGap || this._lineGap || 0;
  29597. if (!wrapper) {
  29598. return this.x += this.widthOfString(text);
  29599. } else {
  29600. return this.y += this.currentLineHeight(true) + lineGap;
  29601. }
  29602. },
  29603. _fragment: function(text, x, y, options) {
  29604. var align, characterSpacing, commands, d, encoded, i, lineWidth, lineY, mode, renderedWidth, spaceWidth, textWidth, word, wordSpacing, words, _base, _i, _len, _name;
  29605. text = '' + text;
  29606. if (text.length === 0) {
  29607. return;
  29608. }
  29609. align = options.align || 'left';
  29610. wordSpacing = options.wordSpacing || 0;
  29611. characterSpacing = options.characterSpacing || 0;
  29612. if (options.width) {
  29613. switch (align) {
  29614. case 'right':
  29615. textWidth = this.widthOfString(text.replace(/\s+$/, ''), options);
  29616. x += options.lineWidth - textWidth;
  29617. break;
  29618. case 'center':
  29619. x += options.lineWidth / 2 - options.textWidth / 2;
  29620. break;
  29621. case 'justify':
  29622. words = text.trim().split(/\s+/);
  29623. textWidth = this.widthOfString(text.replace(/\s+/g, ''), options);
  29624. spaceWidth = this.widthOfString(' ') + characterSpacing;
  29625. wordSpacing = Math.max(0, (options.lineWidth - textWidth) / Math.max(1, words.length - 1) - spaceWidth);
  29626. }
  29627. }
  29628. renderedWidth = options.textWidth + (wordSpacing * (options.wordCount - 1)) + (characterSpacing * (text.length - 1));
  29629. if (options.link) {
  29630. this.link(x, y, renderedWidth, this.currentLineHeight(), options.link);
  29631. }
  29632. if (options.underline || options.strike) {
  29633. this.save();
  29634. if (!options.stroke) {
  29635. this.strokeColor.apply(this, this._fillColor);
  29636. }
  29637. lineWidth = this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10);
  29638. this.lineWidth(lineWidth);
  29639. d = options.underline ? 1 : 2;
  29640. lineY = y + this.currentLineHeight() / d;
  29641. if (options.underline) {
  29642. lineY -= lineWidth;
  29643. }
  29644. this.moveTo(x, lineY);
  29645. this.lineTo(x + renderedWidth, lineY);
  29646. this.stroke();
  29647. this.restore();
  29648. }
  29649. this.save();
  29650. this.transform(1, 0, 0, -1, 0, this.page.height);
  29651. y = this.page.height - y - (this._font.ascender / 1000 * this._fontSize);
  29652. if ((_base = this.page.fonts)[_name = this._font.id] == null) {
  29653. _base[_name] = this._font.ref();
  29654. }
  29655. this._font.use(text);
  29656. this.addContent("BT");
  29657. this.addContent("" + x + " " + y + " Td");
  29658. this.addContent("/" + this._font.id + " " + this._fontSize + " Tf");
  29659. mode = options.fill && options.stroke ? 2 : options.stroke ? 1 : 0;
  29660. if (mode) {
  29661. this.addContent("" + mode + " Tr");
  29662. }
  29663. if (characterSpacing) {
  29664. this.addContent("" + characterSpacing + " Tc");
  29665. }
  29666. if (wordSpacing) {
  29667. words = text.trim().split(/\s+/);
  29668. wordSpacing += this.widthOfString(' ') + characterSpacing;
  29669. wordSpacing *= 1000 / this._fontSize;
  29670. commands = [];
  29671. for (_i = 0, _len = words.length; _i < _len; _i++) {
  29672. word = words[_i];
  29673. encoded = this._font.encode(word);
  29674. encoded = ((function() {
  29675. var _j, _ref, _results;
  29676. _results = [];
  29677. for (i = _j = 0, _ref = encoded.length; _j < _ref; i = _j += 1) {
  29678. _results.push(encoded.charCodeAt(i).toString(16));
  29679. }
  29680. return _results;
  29681. })()).join('');
  29682. commands.push("<" + encoded + "> " + (-wordSpacing));
  29683. }
  29684. this.addContent("[" + (commands.join(' ')) + "] TJ");
  29685. } else {
  29686. encoded = this._font.encode(text);
  29687. encoded = ((function() {
  29688. var _j, _ref, _results;
  29689. _results = [];
  29690. for (i = _j = 0, _ref = encoded.length; _j < _ref; i = _j += 1) {
  29691. _results.push(encoded.charCodeAt(i).toString(16));
  29692. }
  29693. return _results;
  29694. })()).join('');
  29695. this.addContent("<" + encoded + "> Tj");
  29696. }
  29697. this.addContent("ET");
  29698. return this.restore();
  29699. }
  29700. };
  29701. }).call(this);
  29702. /***/ },
  29703. /* 90 */
  29704. /***/ function(module, exports, __webpack_require__) {
  29705. // Generated by CoffeeScript 1.7.1
  29706. (function() {
  29707. var EventEmitter, LineBreaker, LineWrapper,
  29708. __hasProp = {}.hasOwnProperty,
  29709. __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
  29710. EventEmitter = __webpack_require__(26).EventEmitter;
  29711. LineBreaker = __webpack_require__(91);
  29712. LineWrapper = (function(_super) {
  29713. __extends(LineWrapper, _super);
  29714. function LineWrapper(document, options) {
  29715. var _ref;
  29716. this.document = document;
  29717. this.indent = options.indent || 0;
  29718. this.characterSpacing = options.characterSpacing || 0;
  29719. this.wordSpacing = options.wordSpacing === 0;
  29720. this.columns = options.columns || 1;
  29721. this.columnGap = (_ref = options.columnGap) != null ? _ref : 18;
  29722. this.lineWidth = (options.width - (this.columnGap * (this.columns - 1))) / this.columns;
  29723. this.spaceLeft = this.lineWidth;
  29724. this.startX = this.document.x;
  29725. this.startY = this.document.y;
  29726. this.column = 1;
  29727. this.ellipsis = options.ellipsis;
  29728. this.continuedX = 0;
  29729. if (options.height != null) {
  29730. this.height = options.height;
  29731. this.maxY = this.startY + options.height;
  29732. } else {
  29733. this.maxY = this.document.page.maxY();
  29734. }
  29735. this.on('firstLine', (function(_this) {
  29736. return function(options) {
  29737. var indent;
  29738. indent = _this.continuedX || _this.indent;
  29739. _this.document.x += indent;
  29740. _this.lineWidth -= indent;
  29741. return _this.once('line', function() {
  29742. _this.document.x -= indent;
  29743. _this.lineWidth += indent;
  29744. if (options.continued && !_this.continuedX) {
  29745. _this.continuedX = _this.indent;
  29746. }
  29747. if (!options.continued) {
  29748. return _this.continuedX = 0;
  29749. }
  29750. });
  29751. };
  29752. })(this));
  29753. this.on('lastLine', (function(_this) {
  29754. return function(options) {
  29755. var align;
  29756. align = options.align;
  29757. if (align === 'justify') {
  29758. options.align = 'left';
  29759. }
  29760. _this.lastLine = true;
  29761. return _this.once('line', function() {
  29762. _this.document.y += options.paragraphGap || 0;
  29763. options.align = align;
  29764. return _this.lastLine = false;
  29765. });
  29766. };
  29767. })(this));
  29768. }
  29769. LineWrapper.prototype.wordWidth = function(word) {
  29770. return this.document.widthOfString(word, this) + this.characterSpacing + this.wordSpacing;
  29771. };
  29772. LineWrapper.prototype.eachWord = function(text, fn) {
  29773. var bk, breaker, fbk, l, last, lbk, shouldContinue, w, word, wordWidths;
  29774. breaker = new LineBreaker(text);
  29775. last = null;
  29776. wordWidths = {};
  29777. while (bk = breaker.nextBreak()) {
  29778. word = text.slice((last != null ? last.position : void 0) || 0, bk.position);
  29779. w = wordWidths[word] != null ? wordWidths[word] : wordWidths[word] = this.wordWidth(word);
  29780. if (w > this.lineWidth + this.continuedX) {
  29781. lbk = last;
  29782. fbk = {};
  29783. while (word.length) {
  29784. l = word.length;
  29785. while (w > this.spaceLeft) {
  29786. w = this.wordWidth(word.slice(0, --l));
  29787. }
  29788. fbk.required = l < word.length;
  29789. shouldContinue = fn(word.slice(0, l), w, fbk, lbk);
  29790. lbk = {
  29791. required: false
  29792. };
  29793. word = word.slice(l);
  29794. w = this.wordWidth(word);
  29795. if (shouldContinue === false) {
  29796. break;
  29797. }
  29798. }
  29799. } else {
  29800. shouldContinue = fn(word, w, bk, last);
  29801. }
  29802. if (shouldContinue === false) {
  29803. break;
  29804. }
  29805. last = bk;
  29806. }
  29807. };
  29808. LineWrapper.prototype.wrap = function(text, options) {
  29809. var buffer, emitLine, lc, nextY, textWidth, wc, y;
  29810. if (options.indent != null) {
  29811. this.indent = options.indent;
  29812. }
  29813. if (options.characterSpacing != null) {
  29814. this.characterSpacing = options.characterSpacing;
  29815. }
  29816. if (options.wordSpacing != null) {
  29817. this.wordSpacing = options.wordSpacing;
  29818. }
  29819. if (options.ellipsis != null) {
  29820. this.ellipsis = options.ellipsis;
  29821. }
  29822. nextY = this.document.y + this.document.currentLineHeight(true);
  29823. if (this.document.y > this.maxY || nextY > this.maxY) {
  29824. this.nextSection();
  29825. }
  29826. buffer = '';
  29827. textWidth = 0;
  29828. wc = 0;
  29829. lc = 0;
  29830. y = this.document.y;
  29831. emitLine = (function(_this) {
  29832. return function() {
  29833. options.textWidth = textWidth + _this.wordSpacing * (wc - 1);
  29834. options.wordCount = wc;
  29835. options.lineWidth = _this.lineWidth;
  29836. y = _this.document.y;
  29837. _this.emit('line', buffer, options, _this);
  29838. return lc++;
  29839. };
  29840. })(this);
  29841. this.emit('sectionStart', options, this);
  29842. this.eachWord(text, (function(_this) {
  29843. return function(word, w, bk, last) {
  29844. var lh, shouldContinue;
  29845. if ((last == null) || last.required) {
  29846. _this.emit('firstLine', options, _this);
  29847. _this.spaceLeft = _this.lineWidth;
  29848. }
  29849. if (w <= _this.spaceLeft) {
  29850. buffer += word;
  29851. textWidth += w;
  29852. wc++;
  29853. }
  29854. if (bk.required || w > _this.spaceLeft) {
  29855. if (bk.required) {
  29856. _this.emit('lastLine', options, _this);
  29857. }
  29858. lh = _this.document.currentLineHeight(true);
  29859. if ((_this.height != null) && _this.ellipsis && _this.document.y + lh * 2 > _this.maxY && _this.column >= _this.columns) {
  29860. if (_this.ellipsis === true) {
  29861. _this.ellipsis = '…';
  29862. }
  29863. buffer = buffer.replace(/\s+$/, '');
  29864. textWidth = _this.wordWidth(buffer + _this.ellipsis);
  29865. while (textWidth > _this.lineWidth) {
  29866. buffer = buffer.slice(0, -1).replace(/\s+$/, '');
  29867. textWidth = _this.wordWidth(buffer + _this.ellipsis);
  29868. }
  29869. buffer = buffer + _this.ellipsis;
  29870. }
  29871. emitLine();
  29872. if (_this.document.y + lh > _this.maxY) {
  29873. shouldContinue = _this.nextSection();
  29874. if (!shouldContinue) {
  29875. wc = 0;
  29876. buffer = '';
  29877. return false;
  29878. }
  29879. }
  29880. if (bk.required) {
  29881. if (w > _this.spaceLeft) {
  29882. buffer = word;
  29883. textWidth = w;
  29884. wc = 1;
  29885. emitLine();
  29886. }
  29887. _this.spaceLeft = _this.lineWidth;
  29888. buffer = '';
  29889. textWidth = 0;
  29890. return wc = 0;
  29891. } else {
  29892. _this.spaceLeft = _this.lineWidth - w;
  29893. buffer = word;
  29894. textWidth = w;
  29895. return wc = 1;
  29896. }
  29897. } else {
  29898. return _this.spaceLeft -= w;
  29899. }
  29900. };
  29901. })(this));
  29902. if (wc > 0) {
  29903. this.emit('lastLine', options, this);
  29904. emitLine();
  29905. }
  29906. this.emit('sectionEnd', options, this);
  29907. if (options.continued === true) {
  29908. if (lc > 1) {
  29909. this.continuedX = 0;
  29910. }
  29911. this.continuedX += options.textWidth;
  29912. return this.document.y = y;
  29913. } else {
  29914. return this.document.x = this.startX;
  29915. }
  29916. };
  29917. LineWrapper.prototype.nextSection = function(options) {
  29918. var _ref;
  29919. this.emit('sectionEnd', options, this);
  29920. if (++this.column > this.columns) {
  29921. if (this.height != null) {
  29922. return false;
  29923. }
  29924. this.document.addPage();
  29925. this.column = 1;
  29926. this.startY = this.document.page.margins.top;
  29927. this.maxY = this.document.page.maxY();
  29928. this.document.x = this.startX;
  29929. if (this.document._fillColor) {
  29930. (_ref = this.document).fillColor.apply(_ref, this.document._fillColor);
  29931. }
  29932. this.emit('pageBreak', options, this);
  29933. } else {
  29934. this.document.x += this.lineWidth + this.columnGap;
  29935. this.document.y = this.startY;
  29936. this.emit('columnBreak', options, this);
  29937. }
  29938. this.emit('sectionStart', options, this);
  29939. return true;
  29940. };
  29941. return LineWrapper;
  29942. })(EventEmitter);
  29943. module.exports = LineWrapper;
  29944. }).call(this);
  29945. /***/ },
  29946. /* 91 */
  29947. /***/ function(module, exports, __webpack_require__) {
  29948. // Generated by CoffeeScript 1.7.1
  29949. (function() {
  29950. var AI, AL, BA, BK, CB, CI_BRK, CJ, CP_BRK, CR, DI_BRK, ID, IN_BRK, LF, LineBreaker, NL, NS, PR_BRK, SA, SG, SP, UnicodeTrie, WJ, XX, characterClasses, classTrie, pairTable, _ref, _ref1;
  29951. UnicodeTrie = __webpack_require__(92);
  29952. classTrie = new UnicodeTrie(__webpack_require__(93));
  29953. _ref = __webpack_require__(94), BK = _ref.BK, CR = _ref.CR, LF = _ref.LF, NL = _ref.NL, CB = _ref.CB, BA = _ref.BA, SP = _ref.SP, WJ = _ref.WJ, SP = _ref.SP, BK = _ref.BK, LF = _ref.LF, NL = _ref.NL, AI = _ref.AI, AL = _ref.AL, SA = _ref.SA, SG = _ref.SG, XX = _ref.XX, CJ = _ref.CJ, ID = _ref.ID, NS = _ref.NS, characterClasses = _ref.characterClasses;
  29954. _ref1 = __webpack_require__(95), DI_BRK = _ref1.DI_BRK, IN_BRK = _ref1.IN_BRK, CI_BRK = _ref1.CI_BRK, CP_BRK = _ref1.CP_BRK, PR_BRK = _ref1.PR_BRK, pairTable = _ref1.pairTable;
  29955. LineBreaker = (function() {
  29956. var Break, mapClass, mapFirst;
  29957. function LineBreaker(string) {
  29958. this.string = string;
  29959. this.pos = 0;
  29960. this.lastPos = 0;
  29961. this.curClass = null;
  29962. this.nextClass = null;
  29963. }
  29964. LineBreaker.prototype.nextCodePoint = function() {
  29965. var code, next;
  29966. code = this.string.charCodeAt(this.pos++);
  29967. next = this.string.charCodeAt(this.pos);
  29968. if ((0xd800 <= code && code <= 0xdbff) && (0xdc00 <= next && next <= 0xdfff)) {
  29969. this.pos++;
  29970. return ((code - 0xd800) * 0x400) + (next - 0xdc00) + 0x10000;
  29971. }
  29972. return code;
  29973. };
  29974. mapClass = function(c) {
  29975. switch (c) {
  29976. case AI:
  29977. return AL;
  29978. case SA:
  29979. case SG:
  29980. case XX:
  29981. return AL;
  29982. case CJ:
  29983. return NS;
  29984. default:
  29985. return c;
  29986. }
  29987. };
  29988. mapFirst = function(c) {
  29989. switch (c) {
  29990. case LF:
  29991. case NL:
  29992. return BK;
  29993. case CB:
  29994. return BA;
  29995. case SP:
  29996. return WJ;
  29997. default:
  29998. return c;
  29999. }
  30000. };
  30001. LineBreaker.prototype.nextCharClass = function(first) {
  30002. if (first == null) {
  30003. first = false;
  30004. }
  30005. return mapClass(classTrie.get(this.nextCodePoint()));
  30006. };
  30007. Break = (function() {
  30008. function Break(position, required) {
  30009. this.position = position;
  30010. this.required = required != null ? required : false;
  30011. }
  30012. return Break;
  30013. })();
  30014. LineBreaker.prototype.nextBreak = function() {
  30015. var cur, lastClass, shouldBreak;
  30016. if (this.curClass == null) {
  30017. this.curClass = mapFirst(this.nextCharClass());
  30018. }
  30019. while (this.pos < this.string.length) {
  30020. this.lastPos = this.pos;
  30021. lastClass = this.nextClass;
  30022. this.nextClass = this.nextCharClass();
  30023. if (this.curClass === BK || (this.curClass === CR && this.nextClass !== LF)) {
  30024. this.curClass = mapFirst(mapClass(this.nextClass));
  30025. return new Break(this.lastPos, true);
  30026. }
  30027. cur = (function() {
  30028. switch (this.nextClass) {
  30029. case SP:
  30030. return this.curClass;
  30031. case BK:
  30032. case LF:
  30033. case NL:
  30034. return BK;
  30035. case CR:
  30036. return CR;
  30037. case CB:
  30038. return BA;
  30039. }
  30040. }).call(this);
  30041. if (cur != null) {
  30042. this.curClass = cur;
  30043. if (this.nextClass === CB) {
  30044. return new Break(this.lastPos);
  30045. }
  30046. continue;
  30047. }
  30048. shouldBreak = false;
  30049. switch (pairTable[this.curClass][this.nextClass]) {
  30050. case DI_BRK:
  30051. shouldBreak = true;
  30052. break;
  30053. case IN_BRK:
  30054. shouldBreak = lastClass === SP;
  30055. break;
  30056. case CI_BRK:
  30057. shouldBreak = lastClass === SP;
  30058. if (!shouldBreak) {
  30059. continue;
  30060. }
  30061. break;
  30062. case CP_BRK:
  30063. if (lastClass !== SP) {
  30064. continue;
  30065. }
  30066. }
  30067. this.curClass = this.nextClass;
  30068. if (shouldBreak) {
  30069. return new Break(this.lastPos);
  30070. }
  30071. }
  30072. if (this.pos >= this.string.length) {
  30073. if (this.lastPos < this.string.length) {
  30074. this.lastPos = this.string.length;
  30075. return new Break(this.string.length);
  30076. } else {
  30077. return null;
  30078. }
  30079. }
  30080. };
  30081. return LineBreaker;
  30082. })();
  30083. module.exports = LineBreaker;
  30084. }).call(this);
  30085. /***/ },
  30086. /* 92 */
  30087. /***/ function(module, exports) {
  30088. // Generated by CoffeeScript 1.7.1
  30089. var UnicodeTrie,
  30090. __slice = [].slice;
  30091. UnicodeTrie = (function() {
  30092. var DATA_BLOCK_LENGTH, DATA_GRANULARITY, DATA_MASK, INDEX_1_OFFSET, INDEX_2_BLOCK_LENGTH, INDEX_2_BMP_LENGTH, INDEX_2_MASK, INDEX_SHIFT, LSCP_INDEX_2_LENGTH, LSCP_INDEX_2_OFFSET, OMITTED_BMP_INDEX_1_LENGTH, SHIFT_1, SHIFT_1_2, SHIFT_2, UTF8_2B_INDEX_2_LENGTH, UTF8_2B_INDEX_2_OFFSET;
  30093. SHIFT_1 = 6 + 5;
  30094. SHIFT_2 = 5;
  30095. SHIFT_1_2 = SHIFT_1 - SHIFT_2;
  30096. OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> SHIFT_1;
  30097. INDEX_2_BLOCK_LENGTH = 1 << SHIFT_1_2;
  30098. INDEX_2_MASK = INDEX_2_BLOCK_LENGTH - 1;
  30099. INDEX_SHIFT = 2;
  30100. DATA_BLOCK_LENGTH = 1 << SHIFT_2;
  30101. DATA_MASK = DATA_BLOCK_LENGTH - 1;
  30102. LSCP_INDEX_2_OFFSET = 0x10000 >> SHIFT_2;
  30103. LSCP_INDEX_2_LENGTH = 0x400 >> SHIFT_2;
  30104. INDEX_2_BMP_LENGTH = LSCP_INDEX_2_OFFSET + LSCP_INDEX_2_LENGTH;
  30105. UTF8_2B_INDEX_2_OFFSET = INDEX_2_BMP_LENGTH;
  30106. UTF8_2B_INDEX_2_LENGTH = 0x800 >> 6;
  30107. INDEX_1_OFFSET = UTF8_2B_INDEX_2_OFFSET + UTF8_2B_INDEX_2_LENGTH;
  30108. DATA_GRANULARITY = 1 << INDEX_SHIFT;
  30109. function UnicodeTrie(json) {
  30110. var _ref, _ref1;
  30111. if (json == null) {
  30112. json = {};
  30113. }
  30114. this.data = json.data || [];
  30115. this.highStart = (_ref = json.highStart) != null ? _ref : 0;
  30116. this.errorValue = (_ref1 = json.errorValue) != null ? _ref1 : -1;
  30117. }
  30118. UnicodeTrie.prototype.get = function(codePoint) {
  30119. var index;
  30120. if (codePoint < 0 || codePoint > 0x10ffff) {
  30121. return this.errorValue;
  30122. }
  30123. if (codePoint < 0xd800 || (codePoint > 0xdbff && codePoint <= 0xffff)) {
  30124. index = (this.data[codePoint >> SHIFT_2] << INDEX_SHIFT) + (codePoint & DATA_MASK);
  30125. return this.data[index];
  30126. }
  30127. if (codePoint <= 0xffff) {
  30128. index = (this.data[LSCP_INDEX_2_OFFSET + ((codePoint - 0xd800) >> SHIFT_2)] << INDEX_SHIFT) + (codePoint & DATA_MASK);
  30129. return this.data[index];
  30130. }
  30131. if (codePoint < this.highStart) {
  30132. index = this.data[(INDEX_1_OFFSET - OMITTED_BMP_INDEX_1_LENGTH) + (codePoint >> SHIFT_1)];
  30133. index = this.data[index + ((codePoint >> SHIFT_2) & INDEX_2_MASK)];
  30134. index = (index << INDEX_SHIFT) + (codePoint & DATA_MASK);
  30135. return this.data[index];
  30136. }
  30137. return this.data[this.data.length - DATA_GRANULARITY];
  30138. };
  30139. UnicodeTrie.prototype.toJSON = function() {
  30140. var res;
  30141. res = {
  30142. data: __slice.call(this.data),
  30143. highStart: this.highStart,
  30144. errorValue: this.errorValue
  30145. };
  30146. return res;
  30147. };
  30148. return UnicodeTrie;
  30149. })();
  30150. module.exports = UnicodeTrie;
  30151. /***/ },
  30152. /* 93 */
  30153. /***/ function(module, exports) {
  30154. module.exports = {
  30155. "data": [
  30156. 1961,
  30157. 1969,
  30158. 1977,
  30159. 1985,
  30160. 2025,
  30161. 2033,
  30162. 2041,
  30163. 2049,
  30164. 2057,
  30165. 2065,
  30166. 2073,
  30167. 2081,
  30168. 2089,
  30169. 2097,
  30170. 2105,
  30171. 2113,
  30172. 2121,
  30173. 2129,
  30174. 2137,
  30175. 2145,
  30176. 2153,
  30177. 2161,
  30178. 2169,
  30179. 2177,
  30180. 2185,
  30181. 2193,
  30182. 2201,
  30183. 2209,
  30184. 2217,
  30185. 2225,
  30186. 2233,
  30187. 2241,
  30188. 2249,
  30189. 2257,
  30190. 2265,
  30191. 2273,
  30192. 2281,
  30193. 2289,
  30194. 2297,
  30195. 2305,
  30196. 2313,
  30197. 2321,
  30198. 2329,
  30199. 2337,
  30200. 2345,
  30201. 2353,
  30202. 2361,
  30203. 2369,
  30204. 2377,
  30205. 2385,
  30206. 2393,
  30207. 2401,
  30208. 2409,
  30209. 2417,
  30210. 2425,
  30211. 2433,
  30212. 2441,
  30213. 2449,
  30214. 2457,
  30215. 2465,
  30216. 2473,
  30217. 2481,
  30218. 2489,
  30219. 2497,
  30220. 2505,
  30221. 2513,
  30222. 2521,
  30223. 2529,
  30224. 2529,
  30225. 2537,
  30226. 2009,
  30227. 2545,
  30228. 2553,
  30229. 2561,
  30230. 2569,
  30231. 2577,
  30232. 2585,
  30233. 2593,
  30234. 2601,
  30235. 2609,
  30236. 2617,
  30237. 2625,
  30238. 2633,
  30239. 2641,
  30240. 2649,
  30241. 2657,
  30242. 2665,
  30243. 2673,
  30244. 2681,
  30245. 2689,
  30246. 2697,
  30247. 2705,
  30248. 2713,
  30249. 2721,
  30250. 2729,
  30251. 2737,
  30252. 2745,
  30253. 2753,
  30254. 2761,
  30255. 2769,
  30256. 2777,
  30257. 2785,
  30258. 2793,
  30259. 2801,
  30260. 2809,
  30261. 2817,
  30262. 2825,
  30263. 2833,
  30264. 2841,
  30265. 2849,
  30266. 2857,
  30267. 2865,
  30268. 2873,
  30269. 2881,
  30270. 2889,
  30271. 2009,
  30272. 2897,
  30273. 2905,
  30274. 2913,
  30275. 2009,
  30276. 2921,
  30277. 2929,
  30278. 2937,
  30279. 2945,
  30280. 2953,
  30281. 2961,
  30282. 2969,
  30283. 2009,
  30284. 2977,
  30285. 2977,
  30286. 2985,
  30287. 2993,
  30288. 3001,
  30289. 3009,
  30290. 3009,
  30291. 3009,
  30292. 3017,
  30293. 3017,
  30294. 3017,
  30295. 3025,
  30296. 3025,
  30297. 3033,
  30298. 3041,
  30299. 3041,
  30300. 3049,
  30301. 3049,
  30302. 3049,
  30303. 3049,
  30304. 3049,
  30305. 3049,
  30306. 3049,
  30307. 3049,
  30308. 3049,
  30309. 3049,
  30310. 3057,
  30311. 3065,
  30312. 3073,
  30313. 3073,
  30314. 3073,
  30315. 3081,
  30316. 3089,
  30317. 3097,
  30318. 3097,
  30319. 3097,
  30320. 3097,
  30321. 3097,
  30322. 3097,
  30323. 3097,
  30324. 3097,
  30325. 3097,
  30326. 3097,
  30327. 3097,
  30328. 3097,
  30329. 3097,
  30330. 3097,
  30331. 3097,
  30332. 3097,
  30333. 3097,
  30334. 3097,
  30335. 3097,
  30336. 3105,
  30337. 3113,
  30338. 3113,
  30339. 3121,
  30340. 3129,
  30341. 3137,
  30342. 3145,
  30343. 3153,
  30344. 3161,
  30345. 3161,
  30346. 3169,
  30347. 3177,
  30348. 3185,
  30349. 3193,
  30350. 3193,
  30351. 3193,
  30352. 3193,
  30353. 3201,
  30354. 3209,
  30355. 3209,
  30356. 3217,
  30357. 3225,
  30358. 3233,
  30359. 3241,
  30360. 3241,
  30361. 3241,
  30362. 3249,
  30363. 3257,
  30364. 3265,
  30365. 3273,
  30366. 3273,
  30367. 3281,
  30368. 3289,
  30369. 3297,
  30370. 2009,
  30371. 2009,
  30372. 3305,
  30373. 3313,
  30374. 3321,
  30375. 3329,
  30376. 3337,
  30377. 3345,
  30378. 3353,
  30379. 3361,
  30380. 3369,
  30381. 3377,
  30382. 3385,
  30383. 3393,
  30384. 2009,
  30385. 2009,
  30386. 3401,
  30387. 3409,
  30388. 3417,
  30389. 3417,
  30390. 3417,
  30391. 3417,
  30392. 3417,
  30393. 3417,
  30394. 3425,
  30395. 3425,
  30396. 3433,
  30397. 3433,
  30398. 3433,
  30399. 3433,
  30400. 3433,
  30401. 3433,
  30402. 3433,
  30403. 3433,
  30404. 3433,
  30405. 3433,
  30406. 3433,
  30407. 3433,
  30408. 3433,
  30409. 3433,
  30410. 3433,
  30411. 3441,
  30412. 3449,
  30413. 3457,
  30414. 3465,
  30415. 3473,
  30416. 3481,
  30417. 3489,
  30418. 3497,
  30419. 3505,
  30420. 3513,
  30421. 3521,
  30422. 3529,
  30423. 3537,
  30424. 3545,
  30425. 3553,
  30426. 3561,
  30427. 3569,
  30428. 3577,
  30429. 3585,
  30430. 3593,
  30431. 3601,
  30432. 3609,
  30433. 3617,
  30434. 3625,
  30435. 3625,
  30436. 3633,
  30437. 3641,
  30438. 3649,
  30439. 3649,
  30440. 3649,
  30441. 3649,
  30442. 3649,
  30443. 3657,
  30444. 3665,
  30445. 3665,
  30446. 3673,
  30447. 3681,
  30448. 3681,
  30449. 3681,
  30450. 3681,
  30451. 3689,
  30452. 3697,
  30453. 3697,
  30454. 3705,
  30455. 3713,
  30456. 3721,
  30457. 3729,
  30458. 3737,
  30459. 3745,
  30460. 3753,
  30461. 3761,
  30462. 3769,
  30463. 3777,
  30464. 3785,
  30465. 3793,
  30466. 3801,
  30467. 3809,
  30468. 3817,
  30469. 3825,
  30470. 3833,
  30471. 3841,
  30472. 3849,
  30473. 3857,
  30474. 3865,
  30475. 3873,
  30476. 3881,
  30477. 3881,
  30478. 3881,
  30479. 3881,
  30480. 3881,
  30481. 3881,
  30482. 3881,
  30483. 3881,
  30484. 3881,
  30485. 3881,
  30486. 3881,
  30487. 3881,
  30488. 3889,
  30489. 3897,
  30490. 3905,
  30491. 3913,
  30492. 3921,
  30493. 3921,
  30494. 3921,
  30495. 3921,
  30496. 3921,
  30497. 3921,
  30498. 3921,
  30499. 3921,
  30500. 3921,
  30501. 3921,
  30502. 3929,
  30503. 2009,
  30504. 2009,
  30505. 2009,
  30506. 2009,
  30507. 2009,
  30508. 3937,
  30509. 3937,
  30510. 3937,
  30511. 3937,
  30512. 3937,
  30513. 3937,
  30514. 3937,
  30515. 3945,
  30516. 3953,
  30517. 3953,
  30518. 3953,
  30519. 3961,
  30520. 3969,
  30521. 3969,
  30522. 3977,
  30523. 3985,
  30524. 3993,
  30525. 4001,
  30526. 2009,
  30527. 2009,
  30528. 4009,
  30529. 4009,
  30530. 4009,
  30531. 4009,
  30532. 4009,
  30533. 4009,
  30534. 4009,
  30535. 4009,
  30536. 4009,
  30537. 4009,
  30538. 4009,
  30539. 4009,
  30540. 4017,
  30541. 4025,
  30542. 4033,
  30543. 4041,
  30544. 4049,
  30545. 4057,
  30546. 4065,
  30547. 4073,
  30548. 4081,
  30549. 4081,
  30550. 4081,
  30551. 4081,
  30552. 4081,
  30553. 4081,
  30554. 4081,
  30555. 4089,
  30556. 4097,
  30557. 4097,
  30558. 4105,
  30559. 4113,
  30560. 4113,
  30561. 4113,
  30562. 4113,
  30563. 4113,
  30564. 4113,
  30565. 4113,
  30566. 4113,
  30567. 4113,
  30568. 4113,
  30569. 4113,
  30570. 4113,
  30571. 4113,
  30572. 4113,
  30573. 4113,
  30574. 4113,
  30575. 4113,
  30576. 4113,
  30577. 4113,
  30578. 4113,
  30579. 4113,
  30580. 4113,
  30581. 4113,
  30582. 4113,
  30583. 4113,
  30584. 4113,
  30585. 4113,
  30586. 4113,
  30587. 4113,
  30588. 4113,
  30589. 4113,
  30590. 4113,
  30591. 4113,
  30592. 4113,
  30593. 4113,
  30594. 4113,
  30595. 4113,
  30596. 4113,
  30597. 4113,
  30598. 4113,
  30599. 4113,
  30600. 4113,
  30601. 4113,
  30602. 4113,
  30603. 4113,
  30604. 4113,
  30605. 4113,
  30606. 4113,
  30607. 4113,
  30608. 4113,
  30609. 4113,
  30610. 4113,
  30611. 4113,
  30612. 4113,
  30613. 4113,
  30614. 4113,
  30615. 4113,
  30616. 4113,
  30617. 4113,
  30618. 4113,
  30619. 4113,
  30620. 4113,
  30621. 4113,
  30622. 4113,
  30623. 4113,
  30624. 4113,
  30625. 4113,
  30626. 4113,
  30627. 4113,
  30628. 4113,
  30629. 4113,
  30630. 4113,
  30631. 4113,
  30632. 4113,
  30633. 4113,
  30634. 4113,
  30635. 4113,
  30636. 4113,
  30637. 4113,
  30638. 4113,
  30639. 4113,
  30640. 4113,
  30641. 4113,
  30642. 4113,
  30643. 4113,
  30644. 4113,
  30645. 4113,
  30646. 4113,
  30647. 4113,
  30648. 4113,
  30649. 4113,
  30650. 4113,
  30651. 4113,
  30652. 4113,
  30653. 4113,
  30654. 4113,
  30655. 4113,
  30656. 4113,
  30657. 4113,
  30658. 4113,
  30659. 4113,
  30660. 4113,
  30661. 4113,
  30662. 4113,
  30663. 4113,
  30664. 4113,
  30665. 4113,
  30666. 4113,
  30667. 4113,
  30668. 4113,
  30669. 4113,
  30670. 4113,
  30671. 4113,
  30672. 4113,
  30673. 4113,
  30674. 4113,
  30675. 4113,
  30676. 4113,
  30677. 4113,
  30678. 4113,
  30679. 4113,
  30680. 4113,
  30681. 4113,
  30682. 4113,
  30683. 4113,
  30684. 4113,
  30685. 4113,
  30686. 4113,
  30687. 4113,
  30688. 4113,
  30689. 4113,
  30690. 4113,
  30691. 4113,
  30692. 4113,
  30693. 4113,
  30694. 4113,
  30695. 4113,
  30696. 4113,
  30697. 4113,
  30698. 4113,
  30699. 4113,
  30700. 4113,
  30701. 4113,
  30702. 4113,
  30703. 4113,
  30704. 4113,
  30705. 4113,
  30706. 4113,
  30707. 4113,
  30708. 4113,
  30709. 4113,
  30710. 4113,
  30711. 4113,
  30712. 4113,
  30713. 4113,
  30714. 4113,
  30715. 4113,
  30716. 4113,
  30717. 4113,
  30718. 4113,
  30719. 4113,
  30720. 4113,
  30721. 4113,
  30722. 4113,
  30723. 4113,
  30724. 4113,
  30725. 4113,
  30726. 4113,
  30727. 4113,
  30728. 4113,
  30729. 4113,
  30730. 4113,
  30731. 4113,
  30732. 4113,
  30733. 4113,
  30734. 4113,
  30735. 4113,
  30736. 4113,
  30737. 4113,
  30738. 4113,
  30739. 4113,
  30740. 4113,
  30741. 4113,
  30742. 4113,
  30743. 4113,
  30744. 4113,
  30745. 4113,
  30746. 4113,
  30747. 4113,
  30748. 4113,
  30749. 4113,
  30750. 4113,
  30751. 4113,
  30752. 4113,
  30753. 4113,
  30754. 4113,
  30755. 4113,
  30756. 4113,
  30757. 4113,
  30758. 4113,
  30759. 4113,
  30760. 4113,
  30761. 4113,
  30762. 4113,
  30763. 4113,
  30764. 4113,
  30765. 4113,
  30766. 4113,
  30767. 4113,
  30768. 4113,
  30769. 4113,
  30770. 4113,
  30771. 4113,
  30772. 4113,
  30773. 4113,
  30774. 4113,
  30775. 4113,
  30776. 4113,
  30777. 4113,
  30778. 4121,
  30779. 4121,
  30780. 4129,
  30781. 4129,
  30782. 4129,
  30783. 4129,
  30784. 4129,
  30785. 4129,
  30786. 4129,
  30787. 4129,
  30788. 4129,
  30789. 4129,
  30790. 4129,
  30791. 4129,
  30792. 4129,
  30793. 4129,
  30794. 4129,
  30795. 4129,
  30796. 4129,
  30797. 4129,
  30798. 4129,
  30799. 4129,
  30800. 4129,
  30801. 4129,
  30802. 4129,
  30803. 4129,
  30804. 4129,
  30805. 4129,
  30806. 4129,
  30807. 4129,
  30808. 4129,
  30809. 4129,
  30810. 4129,
  30811. 4129,
  30812. 4129,
  30813. 4129,
  30814. 4129,
  30815. 4129,
  30816. 4129,
  30817. 4129,
  30818. 4129,
  30819. 4129,
  30820. 4129,
  30821. 4129,
  30822. 4129,
  30823. 4129,
  30824. 4129,
  30825. 4129,
  30826. 4129,
  30827. 4129,
  30828. 4129,
  30829. 4129,
  30830. 4129,
  30831. 4129,
  30832. 4129,
  30833. 4129,
  30834. 4129,
  30835. 4129,
  30836. 4129,
  30837. 4129,
  30838. 4129,
  30839. 4129,
  30840. 4129,
  30841. 4129,
  30842. 4129,
  30843. 4129,
  30844. 4129,
  30845. 4129,
  30846. 4129,
  30847. 4129,
  30848. 4129,
  30849. 4129,
  30850. 4129,
  30851. 4129,
  30852. 4129,
  30853. 4129,
  30854. 4129,
  30855. 4129,
  30856. 4129,
  30857. 4129,
  30858. 4129,
  30859. 4129,
  30860. 4129,
  30861. 4129,
  30862. 4129,
  30863. 4129,
  30864. 4129,
  30865. 4129,
  30866. 4129,
  30867. 4129,
  30868. 4129,
  30869. 4129,
  30870. 4129,
  30871. 4129,
  30872. 4129,
  30873. 4129,
  30874. 4129,
  30875. 4129,
  30876. 4129,
  30877. 4129,
  30878. 4129,
  30879. 4129,
  30880. 4129,
  30881. 4129,
  30882. 4129,
  30883. 4129,
  30884. 4129,
  30885. 4129,
  30886. 4129,
  30887. 4129,
  30888. 4129,
  30889. 4129,
  30890. 4129,
  30891. 4129,
  30892. 4129,
  30893. 4129,
  30894. 4129,
  30895. 4129,
  30896. 4129,
  30897. 4129,
  30898. 4129,
  30899. 4129,
  30900. 4129,
  30901. 4129,
  30902. 4129,
  30903. 4129,
  30904. 4129,
  30905. 4129,
  30906. 4129,
  30907. 4129,
  30908. 4129,
  30909. 4129,
  30910. 4129,
  30911. 4129,
  30912. 4129,
  30913. 4129,
  30914. 4129,
  30915. 4129,
  30916. 4129,
  30917. 4129,
  30918. 4129,
  30919. 4129,
  30920. 4129,
  30921. 4129,
  30922. 4129,
  30923. 4129,
  30924. 4129,
  30925. 4129,
  30926. 4129,
  30927. 4129,
  30928. 4129,
  30929. 4129,
  30930. 4129,
  30931. 4129,
  30932. 4129,
  30933. 4129,
  30934. 4129,
  30935. 4129,
  30936. 4129,
  30937. 4129,
  30938. 4129,
  30939. 4129,
  30940. 4129,
  30941. 4129,
  30942. 4129,
  30943. 4129,
  30944. 4129,
  30945. 4129,
  30946. 4129,
  30947. 4129,
  30948. 4129,
  30949. 4129,
  30950. 4129,
  30951. 4129,
  30952. 4129,
  30953. 4129,
  30954. 4129,
  30955. 4129,
  30956. 4129,
  30957. 4129,
  30958. 4129,
  30959. 4129,
  30960. 4129,
  30961. 4129,
  30962. 4129,
  30963. 4129,
  30964. 4129,
  30965. 4129,
  30966. 4129,
  30967. 4129,
  30968. 4129,
  30969. 4129,
  30970. 4129,
  30971. 4129,
  30972. 4129,
  30973. 4129,
  30974. 4129,
  30975. 4129,
  30976. 4129,
  30977. 4129,
  30978. 4129,
  30979. 4129,
  30980. 4129,
  30981. 4129,
  30982. 4129,
  30983. 4129,
  30984. 4129,
  30985. 4129,
  30986. 4129,
  30987. 4129,
  30988. 4129,
  30989. 4129,
  30990. 4129,
  30991. 4129,
  30992. 4129,
  30993. 4129,
  30994. 4129,
  30995. 4129,
  30996. 4129,
  30997. 4129,
  30998. 4129,
  30999. 4129,
  31000. 4129,
  31001. 4129,
  31002. 4129,
  31003. 4129,
  31004. 4129,
  31005. 4129,
  31006. 4129,
  31007. 4129,
  31008. 4129,
  31009. 4129,
  31010. 4129,
  31011. 4129,
  31012. 4129,
  31013. 4129,
  31014. 4129,
  31015. 4129,
  31016. 4129,
  31017. 4129,
  31018. 4129,
  31019. 4129,
  31020. 4129,
  31021. 4129,
  31022. 4129,
  31023. 4129,
  31024. 4129,
  31025. 4129,
  31026. 4129,
  31027. 4129,
  31028. 4129,
  31029. 4129,
  31030. 4129,
  31031. 4129,
  31032. 4129,
  31033. 4129,
  31034. 4129,
  31035. 4129,
  31036. 4129,
  31037. 4129,
  31038. 4129,
  31039. 4129,
  31040. 4129,
  31041. 4129,
  31042. 4129,
  31043. 4129,
  31044. 4129,
  31045. 4129,
  31046. 4129,
  31047. 4129,
  31048. 4129,
  31049. 4129,
  31050. 4129,
  31051. 4129,
  31052. 4129,
  31053. 4129,
  31054. 4129,
  31055. 4129,
  31056. 4129,
  31057. 4129,
  31058. 4129,
  31059. 4129,
  31060. 4129,
  31061. 4129,
  31062. 4129,
  31063. 4129,
  31064. 4129,
  31065. 4129,
  31066. 4129,
  31067. 4129,
  31068. 4129,
  31069. 4129,
  31070. 4129,
  31071. 4129,
  31072. 4129,
  31073. 4129,
  31074. 4129,
  31075. 4129,
  31076. 4129,
  31077. 4129,
  31078. 4129,
  31079. 4129,
  31080. 4129,
  31081. 4129,
  31082. 4129,
  31083. 4129,
  31084. 4129,
  31085. 4129,
  31086. 4129,
  31087. 4129,
  31088. 4129,
  31089. 4129,
  31090. 4129,
  31091. 4129,
  31092. 4129,
  31093. 4129,
  31094. 4129,
  31095. 4129,
  31096. 4129,
  31097. 4129,
  31098. 4129,
  31099. 4129,
  31100. 4129,
  31101. 4129,
  31102. 4129,
  31103. 4129,
  31104. 4129,
  31105. 4129,
  31106. 4129,
  31107. 4129,
  31108. 4129,
  31109. 4129,
  31110. 4129,
  31111. 4129,
  31112. 4129,
  31113. 4129,
  31114. 4129,
  31115. 4129,
  31116. 4129,
  31117. 4129,
  31118. 4129,
  31119. 4129,
  31120. 4129,
  31121. 4129,
  31122. 4129,
  31123. 4129,
  31124. 4129,
  31125. 4129,
  31126. 4129,
  31127. 4129,
  31128. 4129,
  31129. 4129,
  31130. 4129,
  31131. 4129,
  31132. 4129,
  31133. 4129,
  31134. 4129,
  31135. 4129,
  31136. 4129,
  31137. 4129,
  31138. 4129,
  31139. 4129,
  31140. 4129,
  31141. 4129,
  31142. 4129,
  31143. 4129,
  31144. 4129,
  31145. 4129,
  31146. 4129,
  31147. 4129,
  31148. 4129,
  31149. 4129,
  31150. 4129,
  31151. 4129,
  31152. 4129,
  31153. 4129,
  31154. 4129,
  31155. 4129,
  31156. 4129,
  31157. 4129,
  31158. 4129,
  31159. 4129,
  31160. 4129,
  31161. 4129,
  31162. 4129,
  31163. 4129,
  31164. 4129,
  31165. 4129,
  31166. 4129,
  31167. 4129,
  31168. 4129,
  31169. 4129,
  31170. 4129,
  31171. 4129,
  31172. 4129,
  31173. 4129,
  31174. 4129,
  31175. 4129,
  31176. 4129,
  31177. 4129,
  31178. 4129,
  31179. 4129,
  31180. 4129,
  31181. 4129,
  31182. 4129,
  31183. 4129,
  31184. 4129,
  31185. 4129,
  31186. 4129,
  31187. 4129,
  31188. 4129,
  31189. 4129,
  31190. 4129,
  31191. 4129,
  31192. 4129,
  31193. 4129,
  31194. 4129,
  31195. 4129,
  31196. 4129,
  31197. 4129,
  31198. 4129,
  31199. 4129,
  31200. 4129,
  31201. 4129,
  31202. 4129,
  31203. 4129,
  31204. 4129,
  31205. 4129,
  31206. 4129,
  31207. 4129,
  31208. 4129,
  31209. 4129,
  31210. 4129,
  31211. 4129,
  31212. 4129,
  31213. 4129,
  31214. 4129,
  31215. 4129,
  31216. 4129,
  31217. 4129,
  31218. 4129,
  31219. 4129,
  31220. 4129,
  31221. 4129,
  31222. 4129,
  31223. 4129,
  31224. 4129,
  31225. 4129,
  31226. 4129,
  31227. 4129,
  31228. 4129,
  31229. 4129,
  31230. 4129,
  31231. 4129,
  31232. 4129,
  31233. 4129,
  31234. 4129,
  31235. 4129,
  31236. 4129,
  31237. 4129,
  31238. 4129,
  31239. 4129,
  31240. 4129,
  31241. 4129,
  31242. 4129,
  31243. 4129,
  31244. 4129,
  31245. 4129,
  31246. 4129,
  31247. 4129,
  31248. 4129,
  31249. 4129,
  31250. 4129,
  31251. 4129,
  31252. 4129,
  31253. 4129,
  31254. 4129,
  31255. 4129,
  31256. 4129,
  31257. 4129,
  31258. 4129,
  31259. 4129,
  31260. 4129,
  31261. 4129,
  31262. 4129,
  31263. 4129,
  31264. 4129,
  31265. 4129,
  31266. 4129,
  31267. 4129,
  31268. 4129,
  31269. 4129,
  31270. 4129,
  31271. 4129,
  31272. 4129,
  31273. 4129,
  31274. 4129,
  31275. 4129,
  31276. 4129,
  31277. 4129,
  31278. 4129,
  31279. 4129,
  31280. 4129,
  31281. 4129,
  31282. 4129,
  31283. 4129,
  31284. 4129,
  31285. 4129,
  31286. 4129,
  31287. 4129,
  31288. 4129,
  31289. 4129,
  31290. 4129,
  31291. 4129,
  31292. 4129,
  31293. 4129,
  31294. 4129,
  31295. 4129,
  31296. 4129,
  31297. 4129,
  31298. 4129,
  31299. 4129,
  31300. 4129,
  31301. 4129,
  31302. 4129,
  31303. 4129,
  31304. 4129,
  31305. 4129,
  31306. 4129,
  31307. 4129,
  31308. 4129,
  31309. 4129,
  31310. 4129,
  31311. 4129,
  31312. 4129,
  31313. 4129,
  31314. 4129,
  31315. 4129,
  31316. 4129,
  31317. 4129,
  31318. 4129,
  31319. 4129,
  31320. 4129,
  31321. 4129,
  31322. 4129,
  31323. 4129,
  31324. 4129,
  31325. 4129,
  31326. 4129,
  31327. 4129,
  31328. 4129,
  31329. 4129,
  31330. 4129,
  31331. 4129,
  31332. 4129,
  31333. 4129,
  31334. 4129,
  31335. 4129,
  31336. 4129,
  31337. 4129,
  31338. 4129,
  31339. 4129,
  31340. 4129,
  31341. 4129,
  31342. 4129,
  31343. 4129,
  31344. 4129,
  31345. 4129,
  31346. 4129,
  31347. 4129,
  31348. 4129,
  31349. 4129,
  31350. 4129,
  31351. 4129,
  31352. 4129,
  31353. 4129,
  31354. 4129,
  31355. 4129,
  31356. 4129,
  31357. 4129,
  31358. 4129,
  31359. 4129,
  31360. 4129,
  31361. 4129,
  31362. 4129,
  31363. 4129,
  31364. 4129,
  31365. 4129,
  31366. 4129,
  31367. 4129,
  31368. 4129,
  31369. 4129,
  31370. 4129,
  31371. 4129,
  31372. 4129,
  31373. 4129,
  31374. 4129,
  31375. 4129,
  31376. 4129,
  31377. 4129,
  31378. 4129,
  31379. 4129,
  31380. 4129,
  31381. 4129,
  31382. 4129,
  31383. 4129,
  31384. 4129,
  31385. 4129,
  31386. 4129,
  31387. 4129,
  31388. 4129,
  31389. 4129,
  31390. 4129,
  31391. 4129,
  31392. 4129,
  31393. 4129,
  31394. 4129,
  31395. 4129,
  31396. 4129,
  31397. 4129,
  31398. 4129,
  31399. 4129,
  31400. 4129,
  31401. 4129,
  31402. 4129,
  31403. 4129,
  31404. 4129,
  31405. 4129,
  31406. 4129,
  31407. 4129,
  31408. 4129,
  31409. 4129,
  31410. 4129,
  31411. 4129,
  31412. 4129,
  31413. 4129,
  31414. 4129,
  31415. 4129,
  31416. 4129,
  31417. 4129,
  31418. 4129,
  31419. 4129,
  31420. 4129,
  31421. 4129,
  31422. 4129,
  31423. 4129,
  31424. 4129,
  31425. 4129,
  31426. 4129,
  31427. 4129,
  31428. 4129,
  31429. 4129,
  31430. 4129,
  31431. 4129,
  31432. 4129,
  31433. 4129,
  31434. 4129,
  31435. 4129,
  31436. 4137,
  31437. 4145,
  31438. 4145,
  31439. 4145,
  31440. 4145,
  31441. 4145,
  31442. 4145,
  31443. 4145,
  31444. 4145,
  31445. 4145,
  31446. 4145,
  31447. 4145,
  31448. 4145,
  31449. 4145,
  31450. 4145,
  31451. 4145,
  31452. 4145,
  31453. 4145,
  31454. 4145,
  31455. 4145,
  31456. 4145,
  31457. 4145,
  31458. 4145,
  31459. 4145,
  31460. 4145,
  31461. 4145,
  31462. 4145,
  31463. 4145,
  31464. 4145,
  31465. 4145,
  31466. 4145,
  31467. 4145,
  31468. 4145,
  31469. 4145,
  31470. 4145,
  31471. 4145,
  31472. 4145,
  31473. 4145,
  31474. 4153,
  31475. 4161,
  31476. 4169,
  31477. 4169,
  31478. 4169,
  31479. 4169,
  31480. 4169,
  31481. 4169,
  31482. 4169,
  31483. 4169,
  31484. 4177,
  31485. 4185,
  31486. 4193,
  31487. 4201,
  31488. 4209,
  31489. 4217,
  31490. 4217,
  31491. 4225,
  31492. 4233,
  31493. 4233,
  31494. 4233,
  31495. 4233,
  31496. 4233,
  31497. 4233,
  31498. 4233,
  31499. 4233,
  31500. 4241,
  31501. 4249,
  31502. 4257,
  31503. 4265,
  31504. 4273,
  31505. 4281,
  31506. 4289,
  31507. 4297,
  31508. 4305,
  31509. 4313,
  31510. 4321,
  31511. 4329,
  31512. 4337,
  31513. 4345,
  31514. 4353,
  31515. 4361,
  31516. 4361,
  31517. 4369,
  31518. 4377,
  31519. 4385,
  31520. 4385,
  31521. 4385,
  31522. 4385,
  31523. 4393,
  31524. 4401,
  31525. 4409,
  31526. 4409,
  31527. 4409,
  31528. 4409,
  31529. 4409,
  31530. 4409,
  31531. 4417,
  31532. 4425,
  31533. 4433,
  31534. 4441,
  31535. 4449,
  31536. 4457,
  31537. 4465,
  31538. 4473,
  31539. 4481,
  31540. 4489,
  31541. 4497,
  31542. 4505,
  31543. 4513,
  31544. 4521,
  31545. 4529,
  31546. 4537,
  31547. 4545,
  31548. 4553,
  31549. 4561,
  31550. 4569,
  31551. 4577,
  31552. 4585,
  31553. 4593,
  31554. 4601,
  31555. 4609,
  31556. 4617,
  31557. 4625,
  31558. 4633,
  31559. 4641,
  31560. 4649,
  31561. 4657,
  31562. 4665,
  31563. 4673,
  31564. 4681,
  31565. 4689,
  31566. 4697,
  31567. 4705,
  31568. 4713,
  31569. 4721,
  31570. 4729,
  31571. 4737,
  31572. 4745,
  31573. 4753,
  31574. 4761,
  31575. 4769,
  31576. 4777,
  31577. 4785,
  31578. 4793,
  31579. 4801,
  31580. 4809,
  31581. 4817,
  31582. 4825,
  31583. 4833,
  31584. 4841,
  31585. 4849,
  31586. 4857,
  31587. 4865,
  31588. 4873,
  31589. 4881,
  31590. 4889,
  31591. 4897,
  31592. 4905,
  31593. 4913,
  31594. 4921,
  31595. 4929,
  31596. 4937,
  31597. 4945,
  31598. 4953,
  31599. 4961,
  31600. 4969,
  31601. 4977,
  31602. 4985,
  31603. 4993,
  31604. 5001,
  31605. 5009,
  31606. 5017,
  31607. 5025,
  31608. 5033,
  31609. 5041,
  31610. 5049,
  31611. 5057,
  31612. 5065,
  31613. 5073,
  31614. 5081,
  31615. 5089,
  31616. 5097,
  31617. 5105,
  31618. 5113,
  31619. 5121,
  31620. 5129,
  31621. 5137,
  31622. 5145,
  31623. 5153,
  31624. 5161,
  31625. 5169,
  31626. 5177,
  31627. 5185,
  31628. 5193,
  31629. 5201,
  31630. 5209,
  31631. 5217,
  31632. 5225,
  31633. 5233,
  31634. 5241,
  31635. 5249,
  31636. 5257,
  31637. 5265,
  31638. 5273,
  31639. 5281,
  31640. 5289,
  31641. 5297,
  31642. 5305,
  31643. 5313,
  31644. 5321,
  31645. 5329,
  31646. 5337,
  31647. 5345,
  31648. 5353,
  31649. 5361,
  31650. 5369,
  31651. 5377,
  31652. 5385,
  31653. 5393,
  31654. 5401,
  31655. 5409,
  31656. 5417,
  31657. 5425,
  31658. 5433,
  31659. 5441,
  31660. 5449,
  31661. 5457,
  31662. 5465,
  31663. 5473,
  31664. 5481,
  31665. 5489,
  31666. 5497,
  31667. 5505,
  31668. 5513,
  31669. 5521,
  31670. 5529,
  31671. 5537,
  31672. 5545,
  31673. 5553,
  31674. 5561,
  31675. 5569,
  31676. 5577,
  31677. 5585,
  31678. 5593,
  31679. 5601,
  31680. 5609,
  31681. 5617,
  31682. 5625,
  31683. 5633,
  31684. 5641,
  31685. 5649,
  31686. 5657,
  31687. 5665,
  31688. 5673,
  31689. 5681,
  31690. 5689,
  31691. 5697,
  31692. 5705,
  31693. 5713,
  31694. 5721,
  31695. 5729,
  31696. 5737,
  31697. 5745,
  31698. 5753,
  31699. 5761,
  31700. 5769,
  31701. 5777,
  31702. 5785,
  31703. 5793,
  31704. 5801,
  31705. 5809,
  31706. 5817,
  31707. 5825,
  31708. 5833,
  31709. 5841,
  31710. 5849,
  31711. 5857,
  31712. 5865,
  31713. 5873,
  31714. 5881,
  31715. 5889,
  31716. 5897,
  31717. 5905,
  31718. 5913,
  31719. 5921,
  31720. 5929,
  31721. 5937,
  31722. 5945,
  31723. 5953,
  31724. 5961,
  31725. 5969,
  31726. 5977,
  31727. 5985,
  31728. 5993,
  31729. 6001,
  31730. 6009,
  31731. 6017,
  31732. 6025,
  31733. 6033,
  31734. 6041,
  31735. 6049,
  31736. 6057,
  31737. 6065,
  31738. 6073,
  31739. 6081,
  31740. 6089,
  31741. 6097,
  31742. 6105,
  31743. 6113,
  31744. 6121,
  31745. 6129,
  31746. 6137,
  31747. 6145,
  31748. 6153,
  31749. 6161,
  31750. 6169,
  31751. 6177,
  31752. 6185,
  31753. 6193,
  31754. 6201,
  31755. 6209,
  31756. 6217,
  31757. 6225,
  31758. 6233,
  31759. 6241,
  31760. 6249,
  31761. 6257,
  31762. 6265,
  31763. 6273,
  31764. 6281,
  31765. 6289,
  31766. 6297,
  31767. 6305,
  31768. 6313,
  31769. 6321,
  31770. 6329,
  31771. 6337,
  31772. 6345,
  31773. 6353,
  31774. 6361,
  31775. 6369,
  31776. 6377,
  31777. 6385,
  31778. 6393,
  31779. 6401,
  31780. 6409,
  31781. 6417,
  31782. 6425,
  31783. 6433,
  31784. 6441,
  31785. 6449,
  31786. 6457,
  31787. 6465,
  31788. 6473,
  31789. 6481,
  31790. 6489,
  31791. 6497,
  31792. 6505,
  31793. 6513,
  31794. 6521,
  31795. 6529,
  31796. 6537,
  31797. 6545,
  31798. 6553,
  31799. 6561,
  31800. 6569,
  31801. 6577,
  31802. 6585,
  31803. 6593,
  31804. 6601,
  31805. 6609,
  31806. 6617,
  31807. 6625,
  31808. 6633,
  31809. 6641,
  31810. 6649,
  31811. 6657,
  31812. 6665,
  31813. 6673,
  31814. 6681,
  31815. 6689,
  31816. 6697,
  31817. 6705,
  31818. 6713,
  31819. 6721,
  31820. 6729,
  31821. 6737,
  31822. 6745,
  31823. 6753,
  31824. 6761,
  31825. 6769,
  31826. 6777,
  31827. 6785,
  31828. 6793,
  31829. 6801,
  31830. 6809,
  31831. 6817,
  31832. 6825,
  31833. 6833,
  31834. 6841,
  31835. 6849,
  31836. 6857,
  31837. 6865,
  31838. 6873,
  31839. 6881,
  31840. 6889,
  31841. 6897,
  31842. 6905,
  31843. 6913,
  31844. 6921,
  31845. 6929,
  31846. 6937,
  31847. 6945,
  31848. 6953,
  31849. 6961,
  31850. 6969,
  31851. 6977,
  31852. 6985,
  31853. 6993,
  31854. 7001,
  31855. 7009,
  31856. 7017,
  31857. 7025,
  31858. 7033,
  31859. 7041,
  31860. 7049,
  31861. 7057,
  31862. 7065,
  31863. 7073,
  31864. 7081,
  31865. 7089,
  31866. 7097,
  31867. 7105,
  31868. 7113,
  31869. 7121,
  31870. 7129,
  31871. 7137,
  31872. 7145,
  31873. 7153,
  31874. 7161,
  31875. 7169,
  31876. 7177,
  31877. 7185,
  31878. 7193,
  31879. 7201,
  31880. 7209,
  31881. 7217,
  31882. 7225,
  31883. 7233,
  31884. 2009,
  31885. 2009,
  31886. 2009,
  31887. 2009,
  31888. 2009,
  31889. 2009,
  31890. 2009,
  31891. 2009,
  31892. 2009,
  31893. 2009,
  31894. 2009,
  31895. 2009,
  31896. 2009,
  31897. 2009,
  31898. 2009,
  31899. 2009,
  31900. 2009,
  31901. 2009,
  31902. 2009,
  31903. 2009,
  31904. 2009,
  31905. 2009,
  31906. 2009,
  31907. 2009,
  31908. 2009,
  31909. 2009,
  31910. 2009,
  31911. 2009,
  31912. 2009,
  31913. 2009,
  31914. 2009,
  31915. 2009,
  31916. 7241,
  31917. 7241,
  31918. 7241,
  31919. 7241,
  31920. 7241,
  31921. 7241,
  31922. 7241,
  31923. 7241,
  31924. 7241,
  31925. 7241,
  31926. 7241,
  31927. 7241,
  31928. 7241,
  31929. 7241,
  31930. 7241,
  31931. 7241,
  31932. 7241,
  31933. 7241,
  31934. 7241,
  31935. 7241,
  31936. 7241,
  31937. 7241,
  31938. 7241,
  31939. 7241,
  31940. 7241,
  31941. 7241,
  31942. 7241,
  31943. 7241,
  31944. 7241,
  31945. 7241,
  31946. 7241,
  31947. 7241,
  31948. 2009,
  31949. 2009,
  31950. 2009,
  31951. 2009,
  31952. 2009,
  31953. 2009,
  31954. 2009,
  31955. 2009,
  31956. 2009,
  31957. 2009,
  31958. 2009,
  31959. 2009,
  31960. 2009,
  31961. 2009,
  31962. 2009,
  31963. 2009,
  31964. 2009,
  31965. 2009,
  31966. 2009,
  31967. 2009,
  31968. 2009,
  31969. 2009,
  31970. 2009,
  31971. 2009,
  31972. 2009,
  31973. 2009,
  31974. 2009,
  31975. 2009,
  31976. 2009,
  31977. 2009,
  31978. 2009,
  31979. 2009,
  31980. 2009,
  31981. 2009,
  31982. 2009,
  31983. 2009,
  31984. 2009,
  31985. 2009,
  31986. 2009,
  31987. 2009,
  31988. 2009,
  31989. 2009,
  31990. 2009,
  31991. 2009,
  31992. 2009,
  31993. 2009,
  31994. 2009,
  31995. 2009,
  31996. 2009,
  31997. 2009,
  31998. 2009,
  31999. 2009,
  32000. 2009,
  32001. 2009,
  32002. 2009,
  32003. 2009,
  32004. 2009,
  32005. 2009,
  32006. 2009,
  32007. 2009,
  32008. 2009,
  32009. 2009,
  32010. 2009,
  32011. 2009,
  32012. 2009,
  32013. 2009,
  32014. 2009,
  32015. 2009,
  32016. 2009,
  32017. 2009,
  32018. 2009,
  32019. 2009,
  32020. 2009,
  32021. 2009,
  32022. 2009,
  32023. 2009,
  32024. 2009,
  32025. 2009,
  32026. 2009,
  32027. 2009,
  32028. 2009,
  32029. 2009,
  32030. 2009,
  32031. 2009,
  32032. 2009,
  32033. 2009,
  32034. 2009,
  32035. 2009,
  32036. 2009,
  32037. 2009,
  32038. 2009,
  32039. 2009,
  32040. 2009,
  32041. 2009,
  32042. 2009,
  32043. 2009,
  32044. 2009,
  32045. 2009,
  32046. 2009,
  32047. 2009,
  32048. 2009,
  32049. 2009,
  32050. 2009,
  32051. 2009,
  32052. 2009,
  32053. 2009,
  32054. 2009,
  32055. 2009,
  32056. 2009,
  32057. 2009,
  32058. 2009,
  32059. 2009,
  32060. 2009,
  32061. 2009,
  32062. 2009,
  32063. 2009,
  32064. 2009,
  32065. 2009,
  32066. 2009,
  32067. 2009,
  32068. 2009,
  32069. 2009,
  32070. 2009,
  32071. 2009,
  32072. 2009,
  32073. 2009,
  32074. 2009,
  32075. 2009,
  32076. 2009,
  32077. 2009,
  32078. 2009,
  32079. 2009,
  32080. 2009,
  32081. 2009,
  32082. 2009,
  32083. 2009,
  32084. 2009,
  32085. 2009,
  32086. 2009,
  32087. 2009,
  32088. 2009,
  32089. 2009,
  32090. 2009,
  32091. 2009,
  32092. 2009,
  32093. 2009,
  32094. 2009,
  32095. 2009,
  32096. 2009,
  32097. 2009,
  32098. 2009,
  32099. 2009,
  32100. 2009,
  32101. 2009,
  32102. 2009,
  32103. 2009,
  32104. 2009,
  32105. 2009,
  32106. 2009,
  32107. 2009,
  32108. 2009,
  32109. 2009,
  32110. 2009,
  32111. 2009,
  32112. 2009,
  32113. 2009,
  32114. 2009,
  32115. 2009,
  32116. 2009,
  32117. 2009,
  32118. 2009,
  32119. 2009,
  32120. 2009,
  32121. 2009,
  32122. 2009,
  32123. 2009,
  32124. 2009,
  32125. 2009,
  32126. 2009,
  32127. 2009,
  32128. 2009,
  32129. 2009,
  32130. 2009,
  32131. 2009,
  32132. 2009,
  32133. 2009,
  32134. 2009,
  32135. 2009,
  32136. 2009,
  32137. 2009,
  32138. 2009,
  32139. 2009,
  32140. 2009,
  32141. 2009,
  32142. 2009,
  32143. 2009,
  32144. 2009,
  32145. 2009,
  32146. 2009,
  32147. 2009,
  32148. 7249,
  32149. 7249,
  32150. 7249,
  32151. 7249,
  32152. 7249,
  32153. 7249,
  32154. 7249,
  32155. 7249,
  32156. 7249,
  32157. 7249,
  32158. 7249,
  32159. 7249,
  32160. 7249,
  32161. 7249,
  32162. 7249,
  32163. 7249,
  32164. 7257,
  32165. 7265,
  32166. 7273,
  32167. 7281,
  32168. 7281,
  32169. 7281,
  32170. 7281,
  32171. 7281,
  32172. 7281,
  32173. 7281,
  32174. 7281,
  32175. 7281,
  32176. 7281,
  32177. 7281,
  32178. 7281,
  32179. 7281,
  32180. 7281,
  32181. 7289,
  32182. 7297,
  32183. 7305,
  32184. 7305,
  32185. 7305,
  32186. 7305,
  32187. 7313,
  32188. 7321,
  32189. 7329,
  32190. 7337,
  32191. 7345,
  32192. 7353,
  32193. 7353,
  32194. 7353,
  32195. 7361,
  32196. 7369,
  32197. 7377,
  32198. 7385,
  32199. 7393,
  32200. 7401,
  32201. 7409,
  32202. 7417,
  32203. 7425,
  32204. 7241,
  32205. 7241,
  32206. 7241,
  32207. 7241,
  32208. 7241,
  32209. 7241,
  32210. 7241,
  32211. 7241,
  32212. 7241,
  32213. 7241,
  32214. 7241,
  32215. 7241,
  32216. 7241,
  32217. 7241,
  32218. 7241,
  32219. 7241,
  32220. 7241,
  32221. 7241,
  32222. 7241,
  32223. 7241,
  32224. 7241,
  32225. 7241,
  32226. 7241,
  32227. 7241,
  32228. 7241,
  32229. 7241,
  32230. 7241,
  32231. 7241,
  32232. 7241,
  32233. 7241,
  32234. 7241,
  32235. 7241,
  32236. 7972,
  32237. 7972,
  32238. 8100,
  32239. 8164,
  32240. 8228,
  32241. 8292,
  32242. 8356,
  32243. 8420,
  32244. 8484,
  32245. 8548,
  32246. 8612,
  32247. 8676,
  32248. 8740,
  32249. 8804,
  32250. 8868,
  32251. 8932,
  32252. 8996,
  32253. 9060,
  32254. 9124,
  32255. 9188,
  32256. 9252,
  32257. 9316,
  32258. 9380,
  32259. 9444,
  32260. 9508,
  32261. 9572,
  32262. 9636,
  32263. 9700,
  32264. 9764,
  32265. 9828,
  32266. 9892,
  32267. 9956,
  32268. 2593,
  32269. 2657,
  32270. 2721,
  32271. 2529,
  32272. 2785,
  32273. 2529,
  32274. 2849,
  32275. 2913,
  32276. 2977,
  32277. 3041,
  32278. 3105,
  32279. 3169,
  32280. 3233,
  32281. 3297,
  32282. 2529,
  32283. 2529,
  32284. 2529,
  32285. 2529,
  32286. 2529,
  32287. 2529,
  32288. 2529,
  32289. 2529,
  32290. 3361,
  32291. 2529,
  32292. 2529,
  32293. 2529,
  32294. 3425,
  32295. 2529,
  32296. 2529,
  32297. 3489,
  32298. 3553,
  32299. 2529,
  32300. 3617,
  32301. 3681,
  32302. 3745,
  32303. 3809,
  32304. 3873,
  32305. 3937,
  32306. 4001,
  32307. 4065,
  32308. 4129,
  32309. 4193,
  32310. 4257,
  32311. 4321,
  32312. 4385,
  32313. 4449,
  32314. 4513,
  32315. 4577,
  32316. 4641,
  32317. 4705,
  32318. 4769,
  32319. 4833,
  32320. 4897,
  32321. 4961,
  32322. 5025,
  32323. 5089,
  32324. 5153,
  32325. 5217,
  32326. 5281,
  32327. 5345,
  32328. 5409,
  32329. 5473,
  32330. 5537,
  32331. 5601,
  32332. 5665,
  32333. 5729,
  32334. 5793,
  32335. 5857,
  32336. 5921,
  32337. 5985,
  32338. 6049,
  32339. 6113,
  32340. 6177,
  32341. 6241,
  32342. 6305,
  32343. 6369,
  32344. 6433,
  32345. 6497,
  32346. 6561,
  32347. 6625,
  32348. 6689,
  32349. 6753,
  32350. 6817,
  32351. 6881,
  32352. 6945,
  32353. 7009,
  32354. 7073,
  32355. 7137,
  32356. 7201,
  32357. 7265,
  32358. 7329,
  32359. 7393,
  32360. 7457,
  32361. 7521,
  32362. 7585,
  32363. 7649,
  32364. 2529,
  32365. 2529,
  32366. 2529,
  32367. 2529,
  32368. 2529,
  32369. 2529,
  32370. 2529,
  32371. 2529,
  32372. 2529,
  32373. 2529,
  32374. 2529,
  32375. 2529,
  32376. 2529,
  32377. 2529,
  32378. 2529,
  32379. 2529,
  32380. 2529,
  32381. 2529,
  32382. 2529,
  32383. 2529,
  32384. 2529,
  32385. 2529,
  32386. 2529,
  32387. 2529,
  32388. 2529,
  32389. 2529,
  32390. 2529,
  32391. 2529,
  32392. 2529,
  32393. 2529,
  32394. 2529,
  32395. 2529,
  32396. 2529,
  32397. 2529,
  32398. 2529,
  32399. 2529,
  32400. 2529,
  32401. 2529,
  32402. 2529,
  32403. 2529,
  32404. 2529,
  32405. 2529,
  32406. 2529,
  32407. 2529,
  32408. 2529,
  32409. 2529,
  32410. 2529,
  32411. 2529,
  32412. 2529,
  32413. 2529,
  32414. 2529,
  32415. 2529,
  32416. 2529,
  32417. 2529,
  32418. 2529,
  32419. 2529,
  32420. 2529,
  32421. 2529,
  32422. 2529,
  32423. 2529,
  32424. 2529,
  32425. 2529,
  32426. 2529,
  32427. 2529,
  32428. 2529,
  32429. 2529,
  32430. 2529,
  32431. 2529,
  32432. 2529,
  32433. 2529,
  32434. 2529,
  32435. 2529,
  32436. 2529,
  32437. 2529,
  32438. 2529,
  32439. 2529,
  32440. 2529,
  32441. 2529,
  32442. 2529,
  32443. 2529,
  32444. 2529,
  32445. 2529,
  32446. 2529,
  32447. 2529,
  32448. 2529,
  32449. 2529,
  32450. 2529,
  32451. 2529,
  32452. 2529,
  32453. 2529,
  32454. 2529,
  32455. 2529,
  32456. 2529,
  32457. 2529,
  32458. 2529,
  32459. 2529,
  32460. 2529,
  32461. 2529,
  32462. 2529,
  32463. 2529,
  32464. 2529,
  32465. 2529,
  32466. 2529,
  32467. 2529,
  32468. 2529,
  32469. 2529,
  32470. 2529,
  32471. 2529,
  32472. 2529,
  32473. 2529,
  32474. 2529,
  32475. 2529,
  32476. 2529,
  32477. 2529,
  32478. 2529,
  32479. 2529,
  32480. 2529,
  32481. 2529,
  32482. 2529,
  32483. 2529,
  32484. 2529,
  32485. 2529,
  32486. 2529,
  32487. 2529,
  32488. 2529,
  32489. 2529,
  32490. 2529,
  32491. 2529,
  32492. 2529,
  32493. 2529,
  32494. 2529,
  32495. 2529,
  32496. 2529,
  32497. 2529,
  32498. 2529,
  32499. 2529,
  32500. 2529,
  32501. 2529,
  32502. 2529,
  32503. 2529,
  32504. 2529,
  32505. 2529,
  32506. 2529,
  32507. 2529,
  32508. 2529,
  32509. 2529,
  32510. 2529,
  32511. 2529,
  32512. 2529,
  32513. 2529,
  32514. 2529,
  32515. 2529,
  32516. 2529,
  32517. 2529,
  32518. 2529,
  32519. 2529,
  32520. 2529,
  32521. 2529,
  32522. 2529,
  32523. 2529,
  32524. 2529,
  32525. 2529,
  32526. 2529,
  32527. 2529,
  32528. 2529,
  32529. 2529,
  32530. 2529,
  32531. 2529,
  32532. 2529,
  32533. 2529,
  32534. 2529,
  32535. 2529,
  32536. 2529,
  32537. 2529,
  32538. 2529,
  32539. 2529,
  32540. 2529,
  32541. 2529,
  32542. 2529,
  32543. 2529,
  32544. 2529,
  32545. 2529,
  32546. 2529,
  32547. 2529,
  32548. 2529,
  32549. 2529,
  32550. 2529,
  32551. 2529,
  32552. 2529,
  32553. 2529,
  32554. 2529,
  32555. 2529,
  32556. 2529,
  32557. 2529,
  32558. 2529,
  32559. 2529,
  32560. 2529,
  32561. 2529,
  32562. 2529,
  32563. 2529,
  32564. 2529,
  32565. 2529,
  32566. 2529,
  32567. 2529,
  32568. 2529,
  32569. 2529,
  32570. 2529,
  32571. 2529,
  32572. 2529,
  32573. 2529,
  32574. 2529,
  32575. 2529,
  32576. 2529,
  32577. 2529,
  32578. 2529,
  32579. 2529,
  32580. 2529,
  32581. 2529,
  32582. 2529,
  32583. 2529,
  32584. 2529,
  32585. 2529,
  32586. 2529,
  32587. 2529,
  32588. 2529,
  32589. 2529,
  32590. 2529,
  32591. 2529,
  32592. 2529,
  32593. 2529,
  32594. 2529,
  32595. 2529,
  32596. 2529,
  32597. 2529,
  32598. 2529,
  32599. 2529,
  32600. 2529,
  32601. 2529,
  32602. 2529,
  32603. 2529,
  32604. 2529,
  32605. 2529,
  32606. 2529,
  32607. 2529,
  32608. 2529,
  32609. 2529,
  32610. 2529,
  32611. 2529,
  32612. 2529,
  32613. 2529,
  32614. 2529,
  32615. 2529,
  32616. 2529,
  32617. 2529,
  32618. 2529,
  32619. 2529,
  32620. 2529,
  32621. 2529,
  32622. 2529,
  32623. 2529,
  32624. 2529,
  32625. 2529,
  32626. 2529,
  32627. 2529,
  32628. 2529,
  32629. 2529,
  32630. 2529,
  32631. 2529,
  32632. 2529,
  32633. 2529,
  32634. 2529,
  32635. 2529,
  32636. 2529,
  32637. 2529,
  32638. 2529,
  32639. 2529,
  32640. 2529,
  32641. 2529,
  32642. 2529,
  32643. 2529,
  32644. 2529,
  32645. 2529,
  32646. 2529,
  32647. 2529,
  32648. 2529,
  32649. 2529,
  32650. 2529,
  32651. 2529,
  32652. 2529,
  32653. 2529,
  32654. 2529,
  32655. 2529,
  32656. 2529,
  32657. 2529,
  32658. 2529,
  32659. 2529,
  32660. 2529,
  32661. 2529,
  32662. 2529,
  32663. 2529,
  32664. 2529,
  32665. 2529,
  32666. 2529,
  32667. 2529,
  32668. 2529,
  32669. 2529,
  32670. 2529,
  32671. 2529,
  32672. 2529,
  32673. 2529,
  32674. 2529,
  32675. 2529,
  32676. 2529,
  32677. 2529,
  32678. 2529,
  32679. 2529,
  32680. 2529,
  32681. 2529,
  32682. 2529,
  32683. 2529,
  32684. 7713,
  32685. 2009,
  32686. 2009,
  32687. 2009,
  32688. 2009,
  32689. 2009,
  32690. 2009,
  32691. 2009,
  32692. 2009,
  32693. 2009,
  32694. 2009,
  32695. 2009,
  32696. 2009,
  32697. 2009,
  32698. 2009,
  32699. 2009,
  32700. 2009,
  32701. 2009,
  32702. 2009,
  32703. 2009,
  32704. 2009,
  32705. 2009,
  32706. 2009,
  32707. 2009,
  32708. 2009,
  32709. 2009,
  32710. 2009,
  32711. 2009,
  32712. 2009,
  32713. 2009,
  32714. 2009,
  32715. 2009,
  32716. 2009,
  32717. 2009,
  32718. 2009,
  32719. 2009,
  32720. 2009,
  32721. 2009,
  32722. 2009,
  32723. 2009,
  32724. 2009,
  32725. 2009,
  32726. 2009,
  32727. 2009,
  32728. 2009,
  32729. 2009,
  32730. 2009,
  32731. 2009,
  32732. 2009,
  32733. 2009,
  32734. 2009,
  32735. 2009,
  32736. 2009,
  32737. 2009,
  32738. 2009,
  32739. 2009,
  32740. 2009,
  32741. 2009,
  32742. 2009,
  32743. 2009,
  32744. 2009,
  32745. 2009,
  32746. 2009,
  32747. 2009,
  32748. 2009,
  32749. 7433,
  32750. 7433,
  32751. 7433,
  32752. 7433,
  32753. 7433,
  32754. 7433,
  32755. 7433,
  32756. 7441,
  32757. 7449,
  32758. 7457,
  32759. 7457,
  32760. 7457,
  32761. 7457,
  32762. 7457,
  32763. 7457,
  32764. 7465,
  32765. 2009,
  32766. 2009,
  32767. 2009,
  32768. 2009,
  32769. 7473,
  32770. 7473,
  32771. 7473,
  32772. 7473,
  32773. 7473,
  32774. 7473,
  32775. 7473,
  32776. 7473,
  32777. 7481,
  32778. 7489,
  32779. 7497,
  32780. 7505,
  32781. 7505,
  32782. 7505,
  32783. 7505,
  32784. 7505,
  32785. 7513,
  32786. 7521,
  32787. 2009,
  32788. 2009,
  32789. 2009,
  32790. 2009,
  32791. 2009,
  32792. 2009,
  32793. 2009,
  32794. 2009,
  32795. 2009,
  32796. 2009,
  32797. 2009,
  32798. 2009,
  32799. 2009,
  32800. 2009,
  32801. 2009,
  32802. 2009,
  32803. 2009,
  32804. 2009,
  32805. 2009,
  32806. 2009,
  32807. 2009,
  32808. 2009,
  32809. 2009,
  32810. 2009,
  32811. 2009,
  32812. 2009,
  32813. 7529,
  32814. 7529,
  32815. 7537,
  32816. 7545,
  32817. 7545,
  32818. 7545,
  32819. 7545,
  32820. 7545,
  32821. 7553,
  32822. 7561,
  32823. 7561,
  32824. 7561,
  32825. 7561,
  32826. 7561,
  32827. 7561,
  32828. 7561,
  32829. 7569,
  32830. 7577,
  32831. 7585,
  32832. 7593,
  32833. 7593,
  32834. 7593,
  32835. 7593,
  32836. 7593,
  32837. 7593,
  32838. 7601,
  32839. 7609,
  32840. 7609,
  32841. 7609,
  32842. 7609,
  32843. 7609,
  32844. 7609,
  32845. 7609,
  32846. 7609,
  32847. 7609,
  32848. 7609,
  32849. 7609,
  32850. 7609,
  32851. 7609,
  32852. 7609,
  32853. 7609,
  32854. 7609,
  32855. 7609,
  32856. 7609,
  32857. 7609,
  32858. 7609,
  32859. 7609,
  32860. 7609,
  32861. 7609,
  32862. 7609,
  32863. 7609,
  32864. 7617,
  32865. 2009,
  32866. 2009,
  32867. 2009,
  32868. 2009,
  32869. 2009,
  32870. 2009,
  32871. 2009,
  32872. 2009,
  32873. 2009,
  32874. 2009,
  32875. 2009,
  32876. 2009,
  32877. 7625,
  32878. 7633,
  32879. 7641,
  32880. 7649,
  32881. 7657,
  32882. 7665,
  32883. 7673,
  32884. 7681,
  32885. 7689,
  32886. 7697,
  32887. 7705,
  32888. 2009,
  32889. 7713,
  32890. 7721,
  32891. 7729,
  32892. 2009,
  32893. 2009,
  32894. 2009,
  32895. 2009,
  32896. 2009,
  32897. 2009,
  32898. 2009,
  32899. 2009,
  32900. 2009,
  32901. 2009,
  32902. 2009,
  32903. 2009,
  32904. 2009,
  32905. 2009,
  32906. 2009,
  32907. 2009,
  32908. 2009,
  32909. 2009,
  32910. 2009,
  32911. 2009,
  32912. 2009,
  32913. 2009,
  32914. 2009,
  32915. 2009,
  32916. 2009,
  32917. 2009,
  32918. 2009,
  32919. 2009,
  32920. 2009,
  32921. 2009,
  32922. 2009,
  32923. 2009,
  32924. 2009,
  32925. 2009,
  32926. 2009,
  32927. 2009,
  32928. 2009,
  32929. 7737,
  32930. 7745,
  32931. 7753,
  32932. 2009,
  32933. 2009,
  32934. 2009,
  32935. 2009,
  32936. 2009,
  32937. 2009,
  32938. 2009,
  32939. 2009,
  32940. 2009,
  32941. 7761,
  32942. 7761,
  32943. 7761,
  32944. 7761,
  32945. 7761,
  32946. 7761,
  32947. 7761,
  32948. 7761,
  32949. 7761,
  32950. 7761,
  32951. 7761,
  32952. 7761,
  32953. 7761,
  32954. 7761,
  32955. 7761,
  32956. 7761,
  32957. 7761,
  32958. 7761,
  32959. 7761,
  32960. 7761,
  32961. 7761,
  32962. 7761,
  32963. 7761,
  32964. 7761,
  32965. 7761,
  32966. 7761,
  32967. 7761,
  32968. 7761,
  32969. 7761,
  32970. 7761,
  32971. 7761,
  32972. 7761,
  32973. 7761,
  32974. 7761,
  32975. 7761,
  32976. 7769,
  32977. 2009,
  32978. 2009,
  32979. 2009,
  32980. 2009,
  32981. 2009,
  32982. 2009,
  32983. 2009,
  32984. 2009,
  32985. 2009,
  32986. 2009,
  32987. 2009,
  32988. 2009,
  32989. 2009,
  32990. 2009,
  32991. 2009,
  32992. 2009,
  32993. 2009,
  32994. 2009,
  32995. 2009,
  32996. 2009,
  32997. 2009,
  32998. 2009,
  32999. 2009,
  33000. 2009,
  33001. 2009,
  33002. 2009,
  33003. 2009,
  33004. 2009,
  33005. 7777,
  33006. 7777,
  33007. 7777,
  33008. 7777,
  33009. 7777,
  33010. 7777,
  33011. 7777,
  33012. 7777,
  33013. 7777,
  33014. 7777,
  33015. 7777,
  33016. 7777,
  33017. 7777,
  33018. 7777,
  33019. 7777,
  33020. 7777,
  33021. 7777,
  33022. 7777,
  33023. 7785,
  33024. 7793,
  33025. 7801,
  33026. 7809,
  33027. 7809,
  33028. 7809,
  33029. 7809,
  33030. 7809,
  33031. 7809,
  33032. 7817,
  33033. 7825,
  33034. 7825,
  33035. 7825,
  33036. 7825,
  33037. 7825,
  33038. 7825,
  33039. 7825,
  33040. 7825,
  33041. 7825,
  33042. 7825,
  33043. 7825,
  33044. 7825,
  33045. 7825,
  33046. 7825,
  33047. 7825,
  33048. 7825,
  33049. 7825,
  33050. 7825,
  33051. 7825,
  33052. 7825,
  33053. 7825,
  33054. 7825,
  33055. 7825,
  33056. 7825,
  33057. 7825,
  33058. 7825,
  33059. 7825,
  33060. 7825,
  33061. 7825,
  33062. 7825,
  33063. 7825,
  33064. 7825,
  33065. 7825,
  33066. 7825,
  33067. 7825,
  33068. 7825,
  33069. 7825,
  33070. 7825,
  33071. 7825,
  33072. 7825,
  33073. 7825,
  33074. 7825,
  33075. 7825,
  33076. 7825,
  33077. 7825,
  33078. 7825,
  33079. 7825,
  33080. 7825,
  33081. 7825,
  33082. 7825,
  33083. 7825,
  33084. 7825,
  33085. 7825,
  33086. 7825,
  33087. 7825,
  33088. 7825,
  33089. 7825,
  33090. 7825,
  33091. 7825,
  33092. 7825,
  33093. 7825,
  33094. 7825,
  33095. 7825,
  33096. 7825,
  33097. 7825,
  33098. 7825,
  33099. 7825,
  33100. 7825,
  33101. 7825,
  33102. 7825,
  33103. 7825,
  33104. 7825,
  33105. 7825,
  33106. 7825,
  33107. 7825,
  33108. 7825,
  33109. 7825,
  33110. 7825,
  33111. 7825,
  33112. 7825,
  33113. 7825,
  33114. 7825,
  33115. 7825,
  33116. 7825,
  33117. 7825,
  33118. 7825,
  33119. 7825,
  33120. 7825,
  33121. 7825,
  33122. 7825,
  33123. 7825,
  33124. 7825,
  33125. 7825,
  33126. 7825,
  33127. 7825,
  33128. 7825,
  33129. 7825,
  33130. 7825,
  33131. 7825,
  33132. 7825,
  33133. 7825,
  33134. 7825,
  33135. 7825,
  33136. 7825,
  33137. 7825,
  33138. 7825,
  33139. 7825,
  33140. 7825,
  33141. 7825,
  33142. 7825,
  33143. 7825,
  33144. 7825,
  33145. 7825,
  33146. 7825,
  33147. 7825,
  33148. 7825,
  33149. 7825,
  33150. 7825,
  33151. 7825,
  33152. 7825,
  33153. 7825,
  33154. 7825,
  33155. 7825,
  33156. 7825,
  33157. 7825,
  33158. 7825,
  33159. 7825,
  33160. 7825,
  33161. 7825,
  33162. 7825,
  33163. 7825,
  33164. 7825,
  33165. 7825,
  33166. 7825,
  33167. 7825,
  33168. 7825,
  33169. 7825,
  33170. 7825,
  33171. 7825,
  33172. 7825,
  33173. 7825,
  33174. 7825,
  33175. 7825,
  33176. 7825,
  33177. 7825,
  33178. 7825,
  33179. 7825,
  33180. 7825,
  33181. 7825,
  33182. 7825,
  33183. 7825,
  33184. 7825,
  33185. 7825,
  33186. 7825,
  33187. 7825,
  33188. 7825,
  33189. 7825,
  33190. 7825,
  33191. 7825,
  33192. 7825,
  33193. 7825,
  33194. 7825,
  33195. 7825,
  33196. 7825,
  33197. 7825,
  33198. 7825,
  33199. 7825,
  33200. 7825,
  33201. 7825,
  33202. 7825,
  33203. 7825,
  33204. 7825,
  33205. 7825,
  33206. 7825,
  33207. 7825,
  33208. 7825,
  33209. 7825,
  33210. 7825,
  33211. 7825,
  33212. 7825,
  33213. 7825,
  33214. 7825,
  33215. 7825,
  33216. 7825,
  33217. 7825,
  33218. 7825,
  33219. 7825,
  33220. 7825,
  33221. 7825,
  33222. 7825,
  33223. 7825,
  33224. 7825,
  33225. 7825,
  33226. 7825,
  33227. 7825,
  33228. 7825,
  33229. 7825,
  33230. 7825,
  33231. 7825,
  33232. 7825,
  33233. 7825,
  33234. 7825,
  33235. 7825,
  33236. 7825,
  33237. 7825,
  33238. 7825,
  33239. 7825,
  33240. 7825,
  33241. 7825,
  33242. 7825,
  33243. 7825,
  33244. 7825,
  33245. 7825,
  33246. 7825,
  33247. 7825,
  33248. 7825,
  33249. 7825,
  33250. 7825,
  33251. 7825,
  33252. 7825,
  33253. 7825,
  33254. 7825,
  33255. 7825,
  33256. 7825,
  33257. 7825,
  33258. 7825,
  33259. 7825,
  33260. 7825,
  33261. 7825,
  33262. 7825,
  33263. 7825,
  33264. 7825,
  33265. 7825,
  33266. 7825,
  33267. 7825,
  33268. 7825,
  33269. 7825,
  33270. 7825,
  33271. 7825,
  33272. 7825,
  33273. 7825,
  33274. 7825,
  33275. 7825,
  33276. 7825,
  33277. 7825,
  33278. 7825,
  33279. 7825,
  33280. 7825,
  33281. 7825,
  33282. 7825,
  33283. 7825,
  33284. 7825,
  33285. 7825,
  33286. 7825,
  33287. 7825,
  33288. 7825,
  33289. 7825,
  33290. 7825,
  33291. 7825,
  33292. 7825,
  33293. 7825,
  33294. 7825,
  33295. 7825,
  33296. 7825,
  33297. 7825,
  33298. 7825,
  33299. 7825,
  33300. 7825,
  33301. 7825,
  33302. 7825,
  33303. 7825,
  33304. 7825,
  33305. 7825,
  33306. 7825,
  33307. 7825,
  33308. 7825,
  33309. 7825,
  33310. 7825,
  33311. 7825,
  33312. 7825,
  33313. 7825,
  33314. 7825,
  33315. 7825,
  33316. 7825,
  33317. 7825,
  33318. 7825,
  33319. 7825,
  33320. 7825,
  33321. 7825,
  33322. 7825,
  33323. 7825,
  33324. 7825,
  33325. 7825,
  33326. 7825,
  33327. 7825,
  33328. 7825,
  33329. 7825,
  33330. 7825,
  33331. 7825,
  33332. 7825,
  33333. 7825,
  33334. 7825,
  33335. 7825,
  33336. 7825,
  33337. 7825,
  33338. 7825,
  33339. 7825,
  33340. 7825,
  33341. 7825,
  33342. 7825,
  33343. 7825,
  33344. 7825,
  33345. 7825,
  33346. 7825,
  33347. 7825,
  33348. 7825,
  33349. 7825,
  33350. 7825,
  33351. 7825,
  33352. 7825,
  33353. 7825,
  33354. 7825,
  33355. 7825,
  33356. 7825,
  33357. 7825,
  33358. 7825,
  33359. 7825,
  33360. 7825,
  33361. 7825,
  33362. 7825,
  33363. 7825,
  33364. 7825,
  33365. 7825,
  33366. 7825,
  33367. 7825,
  33368. 7825,
  33369. 7825,
  33370. 7825,
  33371. 7825,
  33372. 7825,
  33373. 7825,
  33374. 7825,
  33375. 7825,
  33376. 7825,
  33377. 7825,
  33378. 7825,
  33379. 7825,
  33380. 7825,
  33381. 7825,
  33382. 7825,
  33383. 7825,
  33384. 7825,
  33385. 7825,
  33386. 7825,
  33387. 7825,
  33388. 7825,
  33389. 7825,
  33390. 7825,
  33391. 7825,
  33392. 7825,
  33393. 7825,
  33394. 7825,
  33395. 7825,
  33396. 7825,
  33397. 7825,
  33398. 7825,
  33399. 7825,
  33400. 7825,
  33401. 7825,
  33402. 7825,
  33403. 7825,
  33404. 7825,
  33405. 7825,
  33406. 7825,
  33407. 7825,
  33408. 7825,
  33409. 7825,
  33410. 7825,
  33411. 7825,
  33412. 7825,
  33413. 7825,
  33414. 7825,
  33415. 7825,
  33416. 7825,
  33417. 7825,
  33418. 7825,
  33419. 7825,
  33420. 7825,
  33421. 7825,
  33422. 7825,
  33423. 7825,
  33424. 7825,
  33425. 7825,
  33426. 7825,
  33427. 7825,
  33428. 7825,
  33429. 7825,
  33430. 7825,
  33431. 7825,
  33432. 7825,
  33433. 7825,
  33434. 7825,
  33435. 7825,
  33436. 7825,
  33437. 7825,
  33438. 7825,
  33439. 7825,
  33440. 7825,
  33441. 7825,
  33442. 7825,
  33443. 7825,
  33444. 7825,
  33445. 7825,
  33446. 7825,
  33447. 7825,
  33448. 7825,
  33449. 7825,
  33450. 7825,
  33451. 7825,
  33452. 7825,
  33453. 7825,
  33454. 7825,
  33455. 7825,
  33456. 7825,
  33457. 7825,
  33458. 7825,
  33459. 7825,
  33460. 7825,
  33461. 7825,
  33462. 7825,
  33463. 7825,
  33464. 7825,
  33465. 7825,
  33466. 7825,
  33467. 7825,
  33468. 7825,
  33469. 7825,
  33470. 7825,
  33471. 7825,
  33472. 7825,
  33473. 7825,
  33474. 7825,
  33475. 7825,
  33476. 7825,
  33477. 7825,
  33478. 7825,
  33479. 7825,
  33480. 7825,
  33481. 7825,
  33482. 7825,
  33483. 7825,
  33484. 7825,
  33485. 7825,
  33486. 7825,
  33487. 7825,
  33488. 7825,
  33489. 7825,
  33490. 7825,
  33491. 7825,
  33492. 7825,
  33493. 7825,
  33494. 7825,
  33495. 7825,
  33496. 7825,
  33497. 7825,
  33498. 7825,
  33499. 7825,
  33500. 7825,
  33501. 7825,
  33502. 7825,
  33503. 7825,
  33504. 7825,
  33505. 7825,
  33506. 7825,
  33507. 7825,
  33508. 7825,
  33509. 7825,
  33510. 7825,
  33511. 7833,
  33512. 7841,
  33513. 7849,
  33514. 2009,
  33515. 2009,
  33516. 2009,
  33517. 7857,
  33518. 2009,
  33519. 2009,
  33520. 2009,
  33521. 2009,
  33522. 2009,
  33523. 2009,
  33524. 2009,
  33525. 2009,
  33526. 2009,
  33527. 2009,
  33528. 2009,
  33529. 2009,
  33530. 2009,
  33531. 2009,
  33532. 2009,
  33533. 2009,
  33534. 2009,
  33535. 2009,
  33536. 2009,
  33537. 2009,
  33538. 2009,
  33539. 2009,
  33540. 2009,
  33541. 2009,
  33542. 2009,
  33543. 2009,
  33544. 2009,
  33545. 2009,
  33546. 2009,
  33547. 2009,
  33548. 2009,
  33549. 2009,
  33550. 2009,
  33551. 2009,
  33552. 2009,
  33553. 2009,
  33554. 2009,
  33555. 2009,
  33556. 2009,
  33557. 2009,
  33558. 2009,
  33559. 2009,
  33560. 2009,
  33561. 2009,
  33562. 2009,
  33563. 2009,
  33564. 2009,
  33565. 2009,
  33566. 2009,
  33567. 2009,
  33568. 2009,
  33569. 2009,
  33570. 2009,
  33571. 2009,
  33572. 2009,
  33573. 2009,
  33574. 2009,
  33575. 2009,
  33576. 2009,
  33577. 2009,
  33578. 2009,
  33579. 2009,
  33580. 2009,
  33581. 7865,
  33582. 7865,
  33583. 7865,
  33584. 7865,
  33585. 7865,
  33586. 7865,
  33587. 7865,
  33588. 7865,
  33589. 7865,
  33590. 7865,
  33591. 7865,
  33592. 7873,
  33593. 7881,
  33594. 7889,
  33595. 7897,
  33596. 7897,
  33597. 7897,
  33598. 7897,
  33599. 7905,
  33600. 7913,
  33601. 7913,
  33602. 7913,
  33603. 7913,
  33604. 7913,
  33605. 7913,
  33606. 7913,
  33607. 7913,
  33608. 7913,
  33609. 7913,
  33610. 7913,
  33611. 7913,
  33612. 7913,
  33613. 7913,
  33614. 7913,
  33615. 7913,
  33616. 7913,
  33617. 7913,
  33618. 7913,
  33619. 7913,
  33620. 7913,
  33621. 7913,
  33622. 7913,
  33623. 7913,
  33624. 7913,
  33625. 7913,
  33626. 7913,
  33627. 7913,
  33628. 7913,
  33629. 7913,
  33630. 7913,
  33631. 7913,
  33632. 7913,
  33633. 7913,
  33634. 7913,
  33635. 7913,
  33636. 7913,
  33637. 7913,
  33638. 7913,
  33639. 7913,
  33640. 7913,
  33641. 7913,
  33642. 7913,
  33643. 7921,
  33644. 7929,
  33645. 2009,
  33646. 2009,
  33647. 2009,
  33648. 2009,
  33649. 2009,
  33650. 2009,
  33651. 2009,
  33652. 2009,
  33653. 2009,
  33654. 2009,
  33655. 2009,
  33656. 2009,
  33657. 2009,
  33658. 2009,
  33659. 2009,
  33660. 2009,
  33661. 2009,
  33662. 2009,
  33663. 2009,
  33664. 2009,
  33665. 2009,
  33666. 2009,
  33667. 2009,
  33668. 2009,
  33669. 2009,
  33670. 2009,
  33671. 2009,
  33672. 2009,
  33673. 2009,
  33674. 2009,
  33675. 2009,
  33676. 2009,
  33677. 2009,
  33678. 2009,
  33679. 2009,
  33680. 2009,
  33681. 2009,
  33682. 2009,
  33683. 2009,
  33684. 2009,
  33685. 2009,
  33686. 2009,
  33687. 2009,
  33688. 2009,
  33689. 2009,
  33690. 2009,
  33691. 2009,
  33692. 2009,
  33693. 7937,
  33694. 7937,
  33695. 7937,
  33696. 7937,
  33697. 7937,
  33698. 7937,
  33699. 7937,
  33700. 7945,
  33701. 2009,
  33702. 2009,
  33703. 2009,
  33704. 2009,
  33705. 2009,
  33706. 2009,
  33707. 2009,
  33708. 2009,
  33709. 7953,
  33710. 7953,
  33711. 7953,
  33712. 7953,
  33713. 7953,
  33714. 7953,
  33715. 7953,
  33716. 2009,
  33717. 7961,
  33718. 7969,
  33719. 7977,
  33720. 7985,
  33721. 7993,
  33722. 2009,
  33723. 2009,
  33724. 8001,
  33725. 8009,
  33726. 8009,
  33727. 8009,
  33728. 8009,
  33729. 8009,
  33730. 8009,
  33731. 8009,
  33732. 8009,
  33733. 8009,
  33734. 8009,
  33735. 8009,
  33736. 8009,
  33737. 8009,
  33738. 8017,
  33739. 8025,
  33740. 8025,
  33741. 8025,
  33742. 8025,
  33743. 8025,
  33744. 8025,
  33745. 8025,
  33746. 8033,
  33747. 8041,
  33748. 8049,
  33749. 8057,
  33750. 8065,
  33751. 8073,
  33752. 8081,
  33753. 8081,
  33754. 8081,
  33755. 8081,
  33756. 8081,
  33757. 8081,
  33758. 8081,
  33759. 8081,
  33760. 8081,
  33761. 8081,
  33762. 8081,
  33763. 8089,
  33764. 2009,
  33765. 8097,
  33766. 8097,
  33767. 8097,
  33768. 8105,
  33769. 2009,
  33770. 2009,
  33771. 2009,
  33772. 2009,
  33773. 8113,
  33774. 8113,
  33775. 8113,
  33776. 8113,
  33777. 8113,
  33778. 8113,
  33779. 8113,
  33780. 8113,
  33781. 8113,
  33782. 8113,
  33783. 8113,
  33784. 8113,
  33785. 8113,
  33786. 8113,
  33787. 8113,
  33788. 8113,
  33789. 8113,
  33790. 8113,
  33791. 8113,
  33792. 8113,
  33793. 8113,
  33794. 8113,
  33795. 8113,
  33796. 8113,
  33797. 8113,
  33798. 8113,
  33799. 8113,
  33800. 8113,
  33801. 8113,
  33802. 8113,
  33803. 8113,
  33804. 8113,
  33805. 8113,
  33806. 8113,
  33807. 8113,
  33808. 8113,
  33809. 8113,
  33810. 8113,
  33811. 8113,
  33812. 8113,
  33813. 8113,
  33814. 8113,
  33815. 8113,
  33816. 8113,
  33817. 8113,
  33818. 8113,
  33819. 8113,
  33820. 8113,
  33821. 8113,
  33822. 8113,
  33823. 8113,
  33824. 8113,
  33825. 8113,
  33826. 8113,
  33827. 8113,
  33828. 8113,
  33829. 8113,
  33830. 8113,
  33831. 8113,
  33832. 8113,
  33833. 8113,
  33834. 8113,
  33835. 8113,
  33836. 8113,
  33837. 8113,
  33838. 8113,
  33839. 8113,
  33840. 8113,
  33841. 8113,
  33842. 8113,
  33843. 8113,
  33844. 8113,
  33845. 8113,
  33846. 8113,
  33847. 8113,
  33848. 8113,
  33849. 8113,
  33850. 8113,
  33851. 8113,
  33852. 8113,
  33853. 8113,
  33854. 8113,
  33855. 8113,
  33856. 8113,
  33857. 8113,
  33858. 8113,
  33859. 8113,
  33860. 8113,
  33861. 8113,
  33862. 8113,
  33863. 8113,
  33864. 8113,
  33865. 8113,
  33866. 8113,
  33867. 8113,
  33868. 8113,
  33869. 8113,
  33870. 8113,
  33871. 8113,
  33872. 8113,
  33873. 8113,
  33874. 8113,
  33875. 8113,
  33876. 8113,
  33877. 8113,
  33878. 8113,
  33879. 8113,
  33880. 8113,
  33881. 8113,
  33882. 8113,
  33883. 8113,
  33884. 8113,
  33885. 8113,
  33886. 8113,
  33887. 8113,
  33888. 8113,
  33889. 8113,
  33890. 8113,
  33891. 8113,
  33892. 8113,
  33893. 8113,
  33894. 8113,
  33895. 8113,
  33896. 8113,
  33897. 8113,
  33898. 8113,
  33899. 8113,
  33900. 8113,
  33901. 8113,
  33902. 8113,
  33903. 8113,
  33904. 8113,
  33905. 8113,
  33906. 8113,
  33907. 8113,
  33908. 8113,
  33909. 8113,
  33910. 8113,
  33911. 8113,
  33912. 8113,
  33913. 8113,
  33914. 8113,
  33915. 8113,
  33916. 8113,
  33917. 8113,
  33918. 8113,
  33919. 8113,
  33920. 8113,
  33921. 8113,
  33922. 8113,
  33923. 8113,
  33924. 8113,
  33925. 8113,
  33926. 8113,
  33927. 8113,
  33928. 8113,
  33929. 8113,
  33930. 8113,
  33931. 8113,
  33932. 8113,
  33933. 8113,
  33934. 8113,
  33935. 8113,
  33936. 8113,
  33937. 8113,
  33938. 8113,
  33939. 8113,
  33940. 8113,
  33941. 8113,
  33942. 8113,
  33943. 8113,
  33944. 8113,
  33945. 8113,
  33946. 8113,
  33947. 8113,
  33948. 8113,
  33949. 8113,
  33950. 8113,
  33951. 8113,
  33952. 8113,
  33953. 8113,
  33954. 8113,
  33955. 8113,
  33956. 8113,
  33957. 8113,
  33958. 8113,
  33959. 8113,
  33960. 8113,
  33961. 8113,
  33962. 8113,
  33963. 8113,
  33964. 8113,
  33965. 8113,
  33966. 8113,
  33967. 8113,
  33968. 8113,
  33969. 8113,
  33970. 8113,
  33971. 8113,
  33972. 8113,
  33973. 8113,
  33974. 8113,
  33975. 8113,
  33976. 8113,
  33977. 8113,
  33978. 8113,
  33979. 8113,
  33980. 8113,
  33981. 8113,
  33982. 8113,
  33983. 8113,
  33984. 8113,
  33985. 8113,
  33986. 8113,
  33987. 8113,
  33988. 8113,
  33989. 8113,
  33990. 8113,
  33991. 8113,
  33992. 8113,
  33993. 8113,
  33994. 8113,
  33995. 8113,
  33996. 8113,
  33997. 8113,
  33998. 8113,
  33999. 8113,
  34000. 8113,
  34001. 8113,
  34002. 8113,
  34003. 8113,
  34004. 8113,
  34005. 8113,
  34006. 8113,
  34007. 8113,
  34008. 8113,
  34009. 8113,
  34010. 8113,
  34011. 8113,
  34012. 8113,
  34013. 8113,
  34014. 8113,
  34015. 8113,
  34016. 8113,
  34017. 8113,
  34018. 8113,
  34019. 8113,
  34020. 8113,
  34021. 8113,
  34022. 8113,
  34023. 8113,
  34024. 8113,
  34025. 8113,
  34026. 8113,
  34027. 8113,
  34028. 8113,
  34029. 8113,
  34030. 8113,
  34031. 8113,
  34032. 8113,
  34033. 8113,
  34034. 8113,
  34035. 8113,
  34036. 8113,
  34037. 8113,
  34038. 8113,
  34039. 8113,
  34040. 8113,
  34041. 8113,
  34042. 8113,
  34043. 8113,
  34044. 8113,
  34045. 8113,
  34046. 8113,
  34047. 8113,
  34048. 8113,
  34049. 8113,
  34050. 8113,
  34051. 8113,
  34052. 8113,
  34053. 8113,
  34054. 8113,
  34055. 8113,
  34056. 8113,
  34057. 8113,
  34058. 8113,
  34059. 8113,
  34060. 8113,
  34061. 8113,
  34062. 8113,
  34063. 8113,
  34064. 8113,
  34065. 8113,
  34066. 8113,
  34067. 8113,
  34068. 8113,
  34069. 8113,
  34070. 8113,
  34071. 8113,
  34072. 8113,
  34073. 8113,
  34074. 8113,
  34075. 8113,
  34076. 8113,
  34077. 8113,
  34078. 8113,
  34079. 8113,
  34080. 8113,
  34081. 8113,
  34082. 8113,
  34083. 8113,
  34084. 8113,
  34085. 8113,
  34086. 8113,
  34087. 8113,
  34088. 8113,
  34089. 8113,
  34090. 8113,
  34091. 8113,
  34092. 8113,
  34093. 8113,
  34094. 8113,
  34095. 8113,
  34096. 8113,
  34097. 8113,
  34098. 8113,
  34099. 8113,
  34100. 8113,
  34101. 8113,
  34102. 8113,
  34103. 8113,
  34104. 8113,
  34105. 8113,
  34106. 8113,
  34107. 8113,
  34108. 8113,
  34109. 8113,
  34110. 8113,
  34111. 8113,
  34112. 8113,
  34113. 8113,
  34114. 8113,
  34115. 8113,
  34116. 8113,
  34117. 8113,
  34118. 8113,
  34119. 8113,
  34120. 8113,
  34121. 8113,
  34122. 8113,
  34123. 8113,
  34124. 8113,
  34125. 8113,
  34126. 8113,
  34127. 8113,
  34128. 8113,
  34129. 8113,
  34130. 8113,
  34131. 8113,
  34132. 8113,
  34133. 8113,
  34134. 8113,
  34135. 8113,
  34136. 8113,
  34137. 8113,
  34138. 8113,
  34139. 8113,
  34140. 8113,
  34141. 8113,
  34142. 8113,
  34143. 8113,
  34144. 8113,
  34145. 8113,
  34146. 8113,
  34147. 8113,
  34148. 8113,
  34149. 8113,
  34150. 8113,
  34151. 8113,
  34152. 8113,
  34153. 8113,
  34154. 8113,
  34155. 8113,
  34156. 8113,
  34157. 8113,
  34158. 8113,
  34159. 8113,
  34160. 8113,
  34161. 8113,
  34162. 8113,
  34163. 8113,
  34164. 8113,
  34165. 8113,
  34166. 8113,
  34167. 8113,
  34168. 8113,
  34169. 8113,
  34170. 8113,
  34171. 8113,
  34172. 8113,
  34173. 8113,
  34174. 8113,
  34175. 8113,
  34176. 8113,
  34177. 8113,
  34178. 8113,
  34179. 8113,
  34180. 8113,
  34181. 8113,
  34182. 8113,
  34183. 8113,
  34184. 8113,
  34185. 8113,
  34186. 8113,
  34187. 8113,
  34188. 8113,
  34189. 8113,
  34190. 8113,
  34191. 8113,
  34192. 8113,
  34193. 8113,
  34194. 8113,
  34195. 8113,
  34196. 8113,
  34197. 8113,
  34198. 8113,
  34199. 8113,
  34200. 8113,
  34201. 8113,
  34202. 8113,
  34203. 8113,
  34204. 8113,
  34205. 8113,
  34206. 8113,
  34207. 8113,
  34208. 8113,
  34209. 8113,
  34210. 8113,
  34211. 8113,
  34212. 8113,
  34213. 8113,
  34214. 8113,
  34215. 8113,
  34216. 8113,
  34217. 8113,
  34218. 8113,
  34219. 8113,
  34220. 8113,
  34221. 8113,
  34222. 8113,
  34223. 8113,
  34224. 8113,
  34225. 8113,
  34226. 8113,
  34227. 8113,
  34228. 8113,
  34229. 8113,
  34230. 8113,
  34231. 8113,
  34232. 8113,
  34233. 8113,
  34234. 8113,
  34235. 8113,
  34236. 8113,
  34237. 8113,
  34238. 8113,
  34239. 8113,
  34240. 8113,
  34241. 8113,
  34242. 8113,
  34243. 8113,
  34244. 8113,
  34245. 8113,
  34246. 8113,
  34247. 8113,
  34248. 8113,
  34249. 8113,
  34250. 8113,
  34251. 8113,
  34252. 8113,
  34253. 8113,
  34254. 8113,
  34255. 8113,
  34256. 8113,
  34257. 8113,
  34258. 8113,
  34259. 8113,
  34260. 8113,
  34261. 8113,
  34262. 8113,
  34263. 8113,
  34264. 8113,
  34265. 8113,
  34266. 8113,
  34267. 8113,
  34268. 8113,
  34269. 8113,
  34270. 8113,
  34271. 8113,
  34272. 8113,
  34273. 8113,
  34274. 8113,
  34275. 8113,
  34276. 8113,
  34277. 8113,
  34278. 8113,
  34279. 8113,
  34280. 8113,
  34281. 8113,
  34282. 8113,
  34283. 8113,
  34284. 8113,
  34285. 8113,
  34286. 8113,
  34287. 8113,
  34288. 8113,
  34289. 8113,
  34290. 8113,
  34291. 8113,
  34292. 8113,
  34293. 8113,
  34294. 8113,
  34295. 8113,
  34296. 8113,
  34297. 8113,
  34298. 8113,
  34299. 8113,
  34300. 8113,
  34301. 8113,
  34302. 8113,
  34303. 8113,
  34304. 8113,
  34305. 8113,
  34306. 8113,
  34307. 8113,
  34308. 8113,
  34309. 8113,
  34310. 8113,
  34311. 8113,
  34312. 8113,
  34313. 8113,
  34314. 8113,
  34315. 8113,
  34316. 8113,
  34317. 8113,
  34318. 8113,
  34319. 8113,
  34320. 8113,
  34321. 8113,
  34322. 8113,
  34323. 8113,
  34324. 8113,
  34325. 8113,
  34326. 8113,
  34327. 8113,
  34328. 8113,
  34329. 8113,
  34330. 8113,
  34331. 8113,
  34332. 8113,
  34333. 8113,
  34334. 8113,
  34335. 8113,
  34336. 8113,
  34337. 8113,
  34338. 8113,
  34339. 8113,
  34340. 8113,
  34341. 8113,
  34342. 8113,
  34343. 8113,
  34344. 8113,
  34345. 8113,
  34346. 8113,
  34347. 8113,
  34348. 8113,
  34349. 8113,
  34350. 8113,
  34351. 8113,
  34352. 8113,
  34353. 8113,
  34354. 8113,
  34355. 8113,
  34356. 8113,
  34357. 8113,
  34358. 8113,
  34359. 8113,
  34360. 8113,
  34361. 8113,
  34362. 8113,
  34363. 8113,
  34364. 8113,
  34365. 8113,
  34366. 8113,
  34367. 8113,
  34368. 8113,
  34369. 8113,
  34370. 8113,
  34371. 8113,
  34372. 8113,
  34373. 8113,
  34374. 8113,
  34375. 8113,
  34376. 8113,
  34377. 8113,
  34378. 8113,
  34379. 8113,
  34380. 8113,
  34381. 8113,
  34382. 8113,
  34383. 8113,
  34384. 8113,
  34385. 8113,
  34386. 8113,
  34387. 8113,
  34388. 8113,
  34389. 8113,
  34390. 8113,
  34391. 8113,
  34392. 8113,
  34393. 8113,
  34394. 8113,
  34395. 8113,
  34396. 8113,
  34397. 8113,
  34398. 8113,
  34399. 8113,
  34400. 8113,
  34401. 8113,
  34402. 8113,
  34403. 8113,
  34404. 8113,
  34405. 8113,
  34406. 8113,
  34407. 8113,
  34408. 8113,
  34409. 8113,
  34410. 8113,
  34411. 8113,
  34412. 8113,
  34413. 8113,
  34414. 8113,
  34415. 8113,
  34416. 8113,
  34417. 8113,
  34418. 8113,
  34419. 8113,
  34420. 8113,
  34421. 8113,
  34422. 8113,
  34423. 8113,
  34424. 8113,
  34425. 8113,
  34426. 8113,
  34427. 8113,
  34428. 8113,
  34429. 8113,
  34430. 8113,
  34431. 8113,
  34432. 8113,
  34433. 8113,
  34434. 8113,
  34435. 8113,
  34436. 8113,
  34437. 8113,
  34438. 8113,
  34439. 8113,
  34440. 8113,
  34441. 8113,
  34442. 8113,
  34443. 8113,
  34444. 8113,
  34445. 8113,
  34446. 8113,
  34447. 8113,
  34448. 8113,
  34449. 8113,
  34450. 8113,
  34451. 8113,
  34452. 8113,
  34453. 8113,
  34454. 8113,
  34455. 8113,
  34456. 8113,
  34457. 8113,
  34458. 8113,
  34459. 8113,
  34460. 8113,
  34461. 8113,
  34462. 8113,
  34463. 8113,
  34464. 8113,
  34465. 8113,
  34466. 8113,
  34467. 8113,
  34468. 8113,
  34469. 8113,
  34470. 8113,
  34471. 8113,
  34472. 8113,
  34473. 8113,
  34474. 8113,
  34475. 8113,
  34476. 8113,
  34477. 8113,
  34478. 8113,
  34479. 8113,
  34480. 8113,
  34481. 8113,
  34482. 8113,
  34483. 8113,
  34484. 8113,
  34485. 8113,
  34486. 8113,
  34487. 8113,
  34488. 8113,
  34489. 8113,
  34490. 8113,
  34491. 8113,
  34492. 8113,
  34493. 8113,
  34494. 8113,
  34495. 8113,
  34496. 8113,
  34497. 8113,
  34498. 8113,
  34499. 8113,
  34500. 8113,
  34501. 8113,
  34502. 8113,
  34503. 8113,
  34504. 8113,
  34505. 8113,
  34506. 8113,
  34507. 8113,
  34508. 8113,
  34509. 8113,
  34510. 8113,
  34511. 8113,
  34512. 8113,
  34513. 8113,
  34514. 8113,
  34515. 8113,
  34516. 8113,
  34517. 8113,
  34518. 8113,
  34519. 8113,
  34520. 8113,
  34521. 8113,
  34522. 8113,
  34523. 8113,
  34524. 8113,
  34525. 8113,
  34526. 8113,
  34527. 8113,
  34528. 8113,
  34529. 8113,
  34530. 8113,
  34531. 8113,
  34532. 8113,
  34533. 8113,
  34534. 8113,
  34535. 8113,
  34536. 8113,
  34537. 8113,
  34538. 8113,
  34539. 8113,
  34540. 8113,
  34541. 8113,
  34542. 8113,
  34543. 8113,
  34544. 8113,
  34545. 8113,
  34546. 8113,
  34547. 8113,
  34548. 8113,
  34549. 8113,
  34550. 8113,
  34551. 8113,
  34552. 8113,
  34553. 8113,
  34554. 8113,
  34555. 8113,
  34556. 8113,
  34557. 8113,
  34558. 8113,
  34559. 8113,
  34560. 8113,
  34561. 8113,
  34562. 8113,
  34563. 8113,
  34564. 8113,
  34565. 8113,
  34566. 8113,
  34567. 8113,
  34568. 8113,
  34569. 8113,
  34570. 8113,
  34571. 8113,
  34572. 8113,
  34573. 8113,
  34574. 8113,
  34575. 8113,
  34576. 8113,
  34577. 8113,
  34578. 8113,
  34579. 8113,
  34580. 8113,
  34581. 8113,
  34582. 8113,
  34583. 8113,
  34584. 8113,
  34585. 8113,
  34586. 8113,
  34587. 8113,
  34588. 8113,
  34589. 8113,
  34590. 8113,
  34591. 8113,
  34592. 8113,
  34593. 8113,
  34594. 8113,
  34595. 8113,
  34596. 8113,
  34597. 8113,
  34598. 8113,
  34599. 8113,
  34600. 8113,
  34601. 8113,
  34602. 8113,
  34603. 8113,
  34604. 8113,
  34605. 8113,
  34606. 8113,
  34607. 8113,
  34608. 8113,
  34609. 8113,
  34610. 8113,
  34611. 8113,
  34612. 8113,
  34613. 8113,
  34614. 8113,
  34615. 8113,
  34616. 8113,
  34617. 8113,
  34618. 8113,
  34619. 8113,
  34620. 8113,
  34621. 8113,
  34622. 8113,
  34623. 8113,
  34624. 8113,
  34625. 8113,
  34626. 8113,
  34627. 8113,
  34628. 8113,
  34629. 8113,
  34630. 8113,
  34631. 8113,
  34632. 8113,
  34633. 8113,
  34634. 8113,
  34635. 8113,
  34636. 8113,
  34637. 8113,
  34638. 8113,
  34639. 8113,
  34640. 8113,
  34641. 8113,
  34642. 8113,
  34643. 8113,
  34644. 8113,
  34645. 8113,
  34646. 8113,
  34647. 8113,
  34648. 8113,
  34649. 8113,
  34650. 8113,
  34651. 8113,
  34652. 8113,
  34653. 8113,
  34654. 8113,
  34655. 8113,
  34656. 8113,
  34657. 8113,
  34658. 8113,
  34659. 8113,
  34660. 8113,
  34661. 8113,
  34662. 8113,
  34663. 8113,
  34664. 8113,
  34665. 8113,
  34666. 8113,
  34667. 8113,
  34668. 8113,
  34669. 8113,
  34670. 8113,
  34671. 8113,
  34672. 8113,
  34673. 8113,
  34674. 8113,
  34675. 8113,
  34676. 8113,
  34677. 8113,
  34678. 8113,
  34679. 8113,
  34680. 8113,
  34681. 8113,
  34682. 8113,
  34683. 8113,
  34684. 8113,
  34685. 8113,
  34686. 8113,
  34687. 8113,
  34688. 8113,
  34689. 8113,
  34690. 8113,
  34691. 8113,
  34692. 8113,
  34693. 8113,
  34694. 8113,
  34695. 8113,
  34696. 8113,
  34697. 8113,
  34698. 8113,
  34699. 8113,
  34700. 8113,
  34701. 8113,
  34702. 8113,
  34703. 8113,
  34704. 8113,
  34705. 8113,
  34706. 8113,
  34707. 8113,
  34708. 8113,
  34709. 8113,
  34710. 8113,
  34711. 8113,
  34712. 8113,
  34713. 8113,
  34714. 8113,
  34715. 8113,
  34716. 8113,
  34717. 8113,
  34718. 8113,
  34719. 8113,
  34720. 8113,
  34721. 8113,
  34722. 8113,
  34723. 8113,
  34724. 8113,
  34725. 8113,
  34726. 8113,
  34727. 8113,
  34728. 8113,
  34729. 8113,
  34730. 8113,
  34731. 8113,
  34732. 8113,
  34733. 8113,
  34734. 8113,
  34735. 8113,
  34736. 8113,
  34737. 8113,
  34738. 8113,
  34739. 8113,
  34740. 8113,
  34741. 8113,
  34742. 8113,
  34743. 8113,
  34744. 8113,
  34745. 8113,
  34746. 8113,
  34747. 8113,
  34748. 8113,
  34749. 8113,
  34750. 8113,
  34751. 8113,
  34752. 8113,
  34753. 8113,
  34754. 8113,
  34755. 8113,
  34756. 8113,
  34757. 8113,
  34758. 8113,
  34759. 8113,
  34760. 8113,
  34761. 8113,
  34762. 8113,
  34763. 8113,
  34764. 8113,
  34765. 8113,
  34766. 8113,
  34767. 8113,
  34768. 8113,
  34769. 8113,
  34770. 8113,
  34771. 8113,
  34772. 8113,
  34773. 8113,
  34774. 8113,
  34775. 8113,
  34776. 8113,
  34777. 8113,
  34778. 8113,
  34779. 8113,
  34780. 8113,
  34781. 8113,
  34782. 8113,
  34783. 8113,
  34784. 8113,
  34785. 8113,
  34786. 8113,
  34787. 8113,
  34788. 8113,
  34789. 8113,
  34790. 8113,
  34791. 8113,
  34792. 8113,
  34793. 8113,
  34794. 8113,
  34795. 8113,
  34796. 8113,
  34797. 8113,
  34798. 8113,
  34799. 8113,
  34800. 8113,
  34801. 8113,
  34802. 8113,
  34803. 8113,
  34804. 8113,
  34805. 8113,
  34806. 8113,
  34807. 8113,
  34808. 8113,
  34809. 8113,
  34810. 8113,
  34811. 8113,
  34812. 8113,
  34813. 8113,
  34814. 8113,
  34815. 8113,
  34816. 8113,
  34817. 8113,
  34818. 8113,
  34819. 8113,
  34820. 8113,
  34821. 8113,
  34822. 8113,
  34823. 8113,
  34824. 8113,
  34825. 8113,
  34826. 8113,
  34827. 8113,
  34828. 8113,
  34829. 8113,
  34830. 8113,
  34831. 8113,
  34832. 8113,
  34833. 8113,
  34834. 8113,
  34835. 8113,
  34836. 8113,
  34837. 8113,
  34838. 8113,
  34839. 8113,
  34840. 8113,
  34841. 8113,
  34842. 8113,
  34843. 8113,
  34844. 8113,
  34845. 8113,
  34846. 8113,
  34847. 8113,
  34848. 8113,
  34849. 8113,
  34850. 8113,
  34851. 8113,
  34852. 8113,
  34853. 8113,
  34854. 8113,
  34855. 8113,
  34856. 8113,
  34857. 8113,
  34858. 8113,
  34859. 8113,
  34860. 8113,
  34861. 8113,
  34862. 8113,
  34863. 8113,
  34864. 8113,
  34865. 8113,
  34866. 8113,
  34867. 8113,
  34868. 8113,
  34869. 8113,
  34870. 8113,
  34871. 8113,
  34872. 8113,
  34873. 8113,
  34874. 8113,
  34875. 8113,
  34876. 8113,
  34877. 8113,
  34878. 8113,
  34879. 8113,
  34880. 8113,
  34881. 8113,
  34882. 8113,
  34883. 8113,
  34884. 8113,
  34885. 8113,
  34886. 8113,
  34887. 8113,
  34888. 8113,
  34889. 8113,
  34890. 8113,
  34891. 8113,
  34892. 8113,
  34893. 8113,
  34894. 8113,
  34895. 8113,
  34896. 8113,
  34897. 8113,
  34898. 8113,
  34899. 8113,
  34900. 8113,
  34901. 8113,
  34902. 8113,
  34903. 8113,
  34904. 8113,
  34905. 8113,
  34906. 8113,
  34907. 8113,
  34908. 8113,
  34909. 8113,
  34910. 8113,
  34911. 8113,
  34912. 8113,
  34913. 8113,
  34914. 8113,
  34915. 8113,
  34916. 8113,
  34917. 8113,
  34918. 8113,
  34919. 8113,
  34920. 8113,
  34921. 8113,
  34922. 8113,
  34923. 8113,
  34924. 8113,
  34925. 8113,
  34926. 8113,
  34927. 8113,
  34928. 8113,
  34929. 8113,
  34930. 8113,
  34931. 8113,
  34932. 8113,
  34933. 8113,
  34934. 8113,
  34935. 8113,
  34936. 8113,
  34937. 8113,
  34938. 8113,
  34939. 8113,
  34940. 8113,
  34941. 8113,
  34942. 8113,
  34943. 8113,
  34944. 8113,
  34945. 8113,
  34946. 8113,
  34947. 8113,
  34948. 8113,
  34949. 8113,
  34950. 8113,
  34951. 8113,
  34952. 8113,
  34953. 8113,
  34954. 8113,
  34955. 8113,
  34956. 8113,
  34957. 8113,
  34958. 8113,
  34959. 8113,
  34960. 8113,
  34961. 8113,
  34962. 8113,
  34963. 8113,
  34964. 8113,
  34965. 8113,
  34966. 8113,
  34967. 8113,
  34968. 8113,
  34969. 8113,
  34970. 8113,
  34971. 8113,
  34972. 8113,
  34973. 8113,
  34974. 8113,
  34975. 8113,
  34976. 8113,
  34977. 8113,
  34978. 8113,
  34979. 8113,
  34980. 8113,
  34981. 8113,
  34982. 8113,
  34983. 8113,
  34984. 8113,
  34985. 8113,
  34986. 8113,
  34987. 8113,
  34988. 8113,
  34989. 8113,
  34990. 8113,
  34991. 8113,
  34992. 8113,
  34993. 8113,
  34994. 8113,
  34995. 8113,
  34996. 8113,
  34997. 8113,
  34998. 8113,
  34999. 8113,
  35000. 8113,
  35001. 8113,
  35002. 8113,
  35003. 8113,
  35004. 8113,
  35005. 8113,
  35006. 8113,
  35007. 8113,
  35008. 8113,
  35009. 8113,
  35010. 8113,
  35011. 8113,
  35012. 8113,
  35013. 8113,
  35014. 8113,
  35015. 8113,
  35016. 8113,
  35017. 8113,
  35018. 8113,
  35019. 8113,
  35020. 8113,
  35021. 8113,
  35022. 8113,
  35023. 8113,
  35024. 8113,
  35025. 8113,
  35026. 8113,
  35027. 8113,
  35028. 8113,
  35029. 8113,
  35030. 8113,
  35031. 8113,
  35032. 8113,
  35033. 8113,
  35034. 8113,
  35035. 8113,
  35036. 8113,
  35037. 8113,
  35038. 8113,
  35039. 8113,
  35040. 8113,
  35041. 8113,
  35042. 8113,
  35043. 8113,
  35044. 8113,
  35045. 8113,
  35046. 8113,
  35047. 8113,
  35048. 8113,
  35049. 8113,
  35050. 8113,
  35051. 8113,
  35052. 8113,
  35053. 8113,
  35054. 8113,
  35055. 8113,
  35056. 8113,
  35057. 8113,
  35058. 8113,
  35059. 8113,
  35060. 8113,
  35061. 8113,
  35062. 8113,
  35063. 8113,
  35064. 8113,
  35065. 8113,
  35066. 8113,
  35067. 8113,
  35068. 8113,
  35069. 8113,
  35070. 8113,
  35071. 8113,
  35072. 8113,
  35073. 8113,
  35074. 8113,
  35075. 8113,
  35076. 8113,
  35077. 8113,
  35078. 8113,
  35079. 8113,
  35080. 8113,
  35081. 8113,
  35082. 8113,
  35083. 8113,
  35084. 8113,
  35085. 8113,
  35086. 8113,
  35087. 8113,
  35088. 8113,
  35089. 8113,
  35090. 8113,
  35091. 8113,
  35092. 8113,
  35093. 8113,
  35094. 8113,
  35095. 8113,
  35096. 8113,
  35097. 8113,
  35098. 8113,
  35099. 8113,
  35100. 8113,
  35101. 8113,
  35102. 8113,
  35103. 8113,
  35104. 8113,
  35105. 8113,
  35106. 8113,
  35107. 8113,
  35108. 8113,
  35109. 8113,
  35110. 8113,
  35111. 8113,
  35112. 8113,
  35113. 8113,
  35114. 8113,
  35115. 8113,
  35116. 8113,
  35117. 8113,
  35118. 8113,
  35119. 8113,
  35120. 8113,
  35121. 8113,
  35122. 8113,
  35123. 8113,
  35124. 8113,
  35125. 8113,
  35126. 8113,
  35127. 8113,
  35128. 8113,
  35129. 8113,
  35130. 8113,
  35131. 8113,
  35132. 8113,
  35133. 8113,
  35134. 8113,
  35135. 8113,
  35136. 8113,
  35137. 8113,
  35138. 8113,
  35139. 8113,
  35140. 8113,
  35141. 8113,
  35142. 8113,
  35143. 8113,
  35144. 8113,
  35145. 8113,
  35146. 8113,
  35147. 8113,
  35148. 8113,
  35149. 8113,
  35150. 8113,
  35151. 8113,
  35152. 8113,
  35153. 8113,
  35154. 8113,
  35155. 8113,
  35156. 8113,
  35157. 8113,
  35158. 8113,
  35159. 8113,
  35160. 8113,
  35161. 8113,
  35162. 8113,
  35163. 8113,
  35164. 8113,
  35165. 8113,
  35166. 8113,
  35167. 8113,
  35168. 8113,
  35169. 8113,
  35170. 8113,
  35171. 8113,
  35172. 8113,
  35173. 8113,
  35174. 8113,
  35175. 8113,
  35176. 8113,
  35177. 8113,
  35178. 8113,
  35179. 8113,
  35180. 8113,
  35181. 8113,
  35182. 8113,
  35183. 8113,
  35184. 8113,
  35185. 8113,
  35186. 8113,
  35187. 8113,
  35188. 8113,
  35189. 8113,
  35190. 8113,
  35191. 8113,
  35192. 8113,
  35193. 8113,
  35194. 8113,
  35195. 8113,
  35196. 8113,
  35197. 8113,
  35198. 8113,
  35199. 8113,
  35200. 8113,
  35201. 8113,
  35202. 8113,
  35203. 8113,
  35204. 8113,
  35205. 8113,
  35206. 8113,
  35207. 8113,
  35208. 8113,
  35209. 8113,
  35210. 8113,
  35211. 8113,
  35212. 8113,
  35213. 8113,
  35214. 8113,
  35215. 8113,
  35216. 8113,
  35217. 8113,
  35218. 8113,
  35219. 8113,
  35220. 8113,
  35221. 8113,
  35222. 8113,
  35223. 8113,
  35224. 8113,
  35225. 8113,
  35226. 8113,
  35227. 8113,
  35228. 8113,
  35229. 8113,
  35230. 8113,
  35231. 8113,
  35232. 8113,
  35233. 8113,
  35234. 8113,
  35235. 8113,
  35236. 8113,
  35237. 8113,
  35238. 8113,
  35239. 8113,
  35240. 8113,
  35241. 8113,
  35242. 8113,
  35243. 8113,
  35244. 8113,
  35245. 8113,
  35246. 8113,
  35247. 8113,
  35248. 8113,
  35249. 8113,
  35250. 8113,
  35251. 8113,
  35252. 8113,
  35253. 8113,
  35254. 8113,
  35255. 8113,
  35256. 8113,
  35257. 8113,
  35258. 8113,
  35259. 8113,
  35260. 8113,
  35261. 8113,
  35262. 8113,
  35263. 8113,
  35264. 8113,
  35265. 8113,
  35266. 8113,
  35267. 8113,
  35268. 8113,
  35269. 8113,
  35270. 8113,
  35271. 8113,
  35272. 8113,
  35273. 8113,
  35274. 8113,
  35275. 8113,
  35276. 8113,
  35277. 8113,
  35278. 8113,
  35279. 8113,
  35280. 8113,
  35281. 8113,
  35282. 8113,
  35283. 8113,
  35284. 8113,
  35285. 8113,
  35286. 8113,
  35287. 8113,
  35288. 8113,
  35289. 8113,
  35290. 8113,
  35291. 8113,
  35292. 8113,
  35293. 8113,
  35294. 8113,
  35295. 8113,
  35296. 8113,
  35297. 8113,
  35298. 8113,
  35299. 8113,
  35300. 8113,
  35301. 8113,
  35302. 8113,
  35303. 8113,
  35304. 8113,
  35305. 8113,
  35306. 8113,
  35307. 8113,
  35308. 8113,
  35309. 8113,
  35310. 8113,
  35311. 8113,
  35312. 8113,
  35313. 8113,
  35314. 8113,
  35315. 8113,
  35316. 8113,
  35317. 8113,
  35318. 8113,
  35319. 8113,
  35320. 8113,
  35321. 8113,
  35322. 8113,
  35323. 8113,
  35324. 8113,
  35325. 8113,
  35326. 8113,
  35327. 8113,
  35328. 8113,
  35329. 8113,
  35330. 8113,
  35331. 8113,
  35332. 8113,
  35333. 8113,
  35334. 8113,
  35335. 8113,
  35336. 8113,
  35337. 8113,
  35338. 8113,
  35339. 8113,
  35340. 8113,
  35341. 8113,
  35342. 8113,
  35343. 8113,
  35344. 8113,
  35345. 8113,
  35346. 8113,
  35347. 8113,
  35348. 8113,
  35349. 8113,
  35350. 8113,
  35351. 8113,
  35352. 8113,
  35353. 8113,
  35354. 8113,
  35355. 8113,
  35356. 8113,
  35357. 8113,
  35358. 8113,
  35359. 8113,
  35360. 8113,
  35361. 8113,
  35362. 8113,
  35363. 8113,
  35364. 8113,
  35365. 8113,
  35366. 8113,
  35367. 8113,
  35368. 8113,
  35369. 8113,
  35370. 8113,
  35371. 8113,
  35372. 8113,
  35373. 8113,
  35374. 8113,
  35375. 8113,
  35376. 8113,
  35377. 8113,
  35378. 8113,
  35379. 8113,
  35380. 8113,
  35381. 8113,
  35382. 8113,
  35383. 8113,
  35384. 8113,
  35385. 8113,
  35386. 8113,
  35387. 8113,
  35388. 8113,
  35389. 8113,
  35390. 8113,
  35391. 8113,
  35392. 8113,
  35393. 8113,
  35394. 8113,
  35395. 8113,
  35396. 8113,
  35397. 8113,
  35398. 8113,
  35399. 8113,
  35400. 8113,
  35401. 8113,
  35402. 8113,
  35403. 8113,
  35404. 8113,
  35405. 8113,
  35406. 8113,
  35407. 8113,
  35408. 8113,
  35409. 8113,
  35410. 8113,
  35411. 8113,
  35412. 8113,
  35413. 8113,
  35414. 8113,
  35415. 8113,
  35416. 8113,
  35417. 8113,
  35418. 8113,
  35419. 8113,
  35420. 8113,
  35421. 8113,
  35422. 8113,
  35423. 8113,
  35424. 8113,
  35425. 8113,
  35426. 8113,
  35427. 8113,
  35428. 8113,
  35429. 8113,
  35430. 8113,
  35431. 8113,
  35432. 8113,
  35433. 8113,
  35434. 8113,
  35435. 8113,
  35436. 8113,
  35437. 8113,
  35438. 8113,
  35439. 8113,
  35440. 8113,
  35441. 8113,
  35442. 8113,
  35443. 8113,
  35444. 8113,
  35445. 8113,
  35446. 8113,
  35447. 8113,
  35448. 8113,
  35449. 8113,
  35450. 8113,
  35451. 8113,
  35452. 8113,
  35453. 8113,
  35454. 8113,
  35455. 8113,
  35456. 8113,
  35457. 8113,
  35458. 8113,
  35459. 8113,
  35460. 8113,
  35461. 8113,
  35462. 8113,
  35463. 8113,
  35464. 8113,
  35465. 8113,
  35466. 8113,
  35467. 8113,
  35468. 8113,
  35469. 8113,
  35470. 8113,
  35471. 8113,
  35472. 8113,
  35473. 8113,
  35474. 8113,
  35475. 8113,
  35476. 8113,
  35477. 8113,
  35478. 8113,
  35479. 8113,
  35480. 8113,
  35481. 8113,
  35482. 8113,
  35483. 8113,
  35484. 8113,
  35485. 8113,
  35486. 8113,
  35487. 8113,
  35488. 8113,
  35489. 8113,
  35490. 8113,
  35491. 8113,
  35492. 8113,
  35493. 8113,
  35494. 8113,
  35495. 8113,
  35496. 8113,
  35497. 8113,
  35498. 8113,
  35499. 8113,
  35500. 8113,
  35501. 8113,
  35502. 8113,
  35503. 8113,
  35504. 8113,
  35505. 8113,
  35506. 8113,
  35507. 8113,
  35508. 8113,
  35509. 8113,
  35510. 8113,
  35511. 8113,
  35512. 8113,
  35513. 8113,
  35514. 8113,
  35515. 8113,
  35516. 8113,
  35517. 8113,
  35518. 8113,
  35519. 8113,
  35520. 8113,
  35521. 8113,
  35522. 8113,
  35523. 8113,
  35524. 8113,
  35525. 8113,
  35526. 8113,
  35527. 8113,
  35528. 8113,
  35529. 8113,
  35530. 8113,
  35531. 8113,
  35532. 8113,
  35533. 8113,
  35534. 8113,
  35535. 8113,
  35536. 8113,
  35537. 8113,
  35538. 8113,
  35539. 8113,
  35540. 8113,
  35541. 8113,
  35542. 8113,
  35543. 8113,
  35544. 8113,
  35545. 8113,
  35546. 8113,
  35547. 8113,
  35548. 8113,
  35549. 8113,
  35550. 8113,
  35551. 8113,
  35552. 8113,
  35553. 8113,
  35554. 8113,
  35555. 8113,
  35556. 8113,
  35557. 8113,
  35558. 8113,
  35559. 8113,
  35560. 8113,
  35561. 8113,
  35562. 8113,
  35563. 8113,
  35564. 8113,
  35565. 8113,
  35566. 8113,
  35567. 8113,
  35568. 8113,
  35569. 8113,
  35570. 8113,
  35571. 8113,
  35572. 8113,
  35573. 8113,
  35574. 8113,
  35575. 8113,
  35576. 8113,
  35577. 8113,
  35578. 8113,
  35579. 8113,
  35580. 8113,
  35581. 8113,
  35582. 8113,
  35583. 8113,
  35584. 8113,
  35585. 8113,
  35586. 8113,
  35587. 8113,
  35588. 8113,
  35589. 8113,
  35590. 8113,
  35591. 8113,
  35592. 8113,
  35593. 8113,
  35594. 8113,
  35595. 8113,
  35596. 8113,
  35597. 8113,
  35598. 8113,
  35599. 8113,
  35600. 8113,
  35601. 8113,
  35602. 8113,
  35603. 8113,
  35604. 8113,
  35605. 8113,
  35606. 8113,
  35607. 8113,
  35608. 8113,
  35609. 8113,
  35610. 8113,
  35611. 8113,
  35612. 8113,
  35613. 8113,
  35614. 8113,
  35615. 8113,
  35616. 8113,
  35617. 8113,
  35618. 8113,
  35619. 8113,
  35620. 8113,
  35621. 8113,
  35622. 8113,
  35623. 8113,
  35624. 8113,
  35625. 8113,
  35626. 8113,
  35627. 8113,
  35628. 8113,
  35629. 8113,
  35630. 8113,
  35631. 8113,
  35632. 8113,
  35633. 8113,
  35634. 8113,
  35635. 8113,
  35636. 8113,
  35637. 8113,
  35638. 8113,
  35639. 8113,
  35640. 8113,
  35641. 8113,
  35642. 8113,
  35643. 8113,
  35644. 8113,
  35645. 8113,
  35646. 8113,
  35647. 8113,
  35648. 8113,
  35649. 8113,
  35650. 8113,
  35651. 8113,
  35652. 8113,
  35653. 8113,
  35654. 8113,
  35655. 8113,
  35656. 8113,
  35657. 8113,
  35658. 8113,
  35659. 8113,
  35660. 8113,
  35661. 8113,
  35662. 8113,
  35663. 8113,
  35664. 8113,
  35665. 8113,
  35666. 8113,
  35667. 8113,
  35668. 8113,
  35669. 8113,
  35670. 8113,
  35671. 8113,
  35672. 8113,
  35673. 8113,
  35674. 8113,
  35675. 8113,
  35676. 8113,
  35677. 8113,
  35678. 8113,
  35679. 8113,
  35680. 8113,
  35681. 8113,
  35682. 8113,
  35683. 8113,
  35684. 8113,
  35685. 8113,
  35686. 8113,
  35687. 8113,
  35688. 8113,
  35689. 8113,
  35690. 8113,
  35691. 8113,
  35692. 8113,
  35693. 8113,
  35694. 8113,
  35695. 8113,
  35696. 8113,
  35697. 8113,
  35698. 8113,
  35699. 8113,
  35700. 8113,
  35701. 8113,
  35702. 8113,
  35703. 8113,
  35704. 8113,
  35705. 8113,
  35706. 8113,
  35707. 8113,
  35708. 8113,
  35709. 8113,
  35710. 8113,
  35711. 8113,
  35712. 8113,
  35713. 8113,
  35714. 8113,
  35715. 8113,
  35716. 8113,
  35717. 8113,
  35718. 8113,
  35719. 8113,
  35720. 8113,
  35721. 8113,
  35722. 8113,
  35723. 8113,
  35724. 8113,
  35725. 8113,
  35726. 8113,
  35727. 8113,
  35728. 8113,
  35729. 8113,
  35730. 8113,
  35731. 8113,
  35732. 8113,
  35733. 8113,
  35734. 8113,
  35735. 8113,
  35736. 8113,
  35737. 8113,
  35738. 8113,
  35739. 8113,
  35740. 8113,
  35741. 8113,
  35742. 8113,
  35743. 8113,
  35744. 8113,
  35745. 8113,
  35746. 8113,
  35747. 8113,
  35748. 8113,
  35749. 8113,
  35750. 8113,
  35751. 8113,
  35752. 8113,
  35753. 8113,
  35754. 8113,
  35755. 8113,
  35756. 8113,
  35757. 8113,
  35758. 8113,
  35759. 8113,
  35760. 8113,
  35761. 8113,
  35762. 8113,
  35763. 8113,
  35764. 8113,
  35765. 8113,
  35766. 8113,
  35767. 8113,
  35768. 8113,
  35769. 8113,
  35770. 8113,
  35771. 8113,
  35772. 8113,
  35773. 8113,
  35774. 8113,
  35775. 8113,
  35776. 8113,
  35777. 8113,
  35778. 8113,
  35779. 8113,
  35780. 8113,
  35781. 8113,
  35782. 8113,
  35783. 8113,
  35784. 8113,
  35785. 8113,
  35786. 8113,
  35787. 8113,
  35788. 8113,
  35789. 8113,
  35790. 8113,
  35791. 8113,
  35792. 8113,
  35793. 8113,
  35794. 8113,
  35795. 8113,
  35796. 8113,
  35797. 8113,
  35798. 8113,
  35799. 8113,
  35800. 8113,
  35801. 8113,
  35802. 8113,
  35803. 8113,
  35804. 8113,
  35805. 8113,
  35806. 8113,
  35807. 8113,
  35808. 8113,
  35809. 8113,
  35810. 8113,
  35811. 8113,
  35812. 8113,
  35813. 8113,
  35814. 8113,
  35815. 8113,
  35816. 8113,
  35817. 8113,
  35818. 8113,
  35819. 8113,
  35820. 8113,
  35821. 8113,
  35822. 8113,
  35823. 8113,
  35824. 8113,
  35825. 8113,
  35826. 8113,
  35827. 8113,
  35828. 8113,
  35829. 8113,
  35830. 8113,
  35831. 8113,
  35832. 8113,
  35833. 8113,
  35834. 8113,
  35835. 8113,
  35836. 8113,
  35837. 8113,
  35838. 8113,
  35839. 8113,
  35840. 8113,
  35841. 8113,
  35842. 8113,
  35843. 8113,
  35844. 8113,
  35845. 8113,
  35846. 8113,
  35847. 8113,
  35848. 8113,
  35849. 8113,
  35850. 8113,
  35851. 8113,
  35852. 8113,
  35853. 8113,
  35854. 8113,
  35855. 8113,
  35856. 8113,
  35857. 8113,
  35858. 8113,
  35859. 8113,
  35860. 8113,
  35861. 8113,
  35862. 8113,
  35863. 8113,
  35864. 8113,
  35865. 8113,
  35866. 8113,
  35867. 8113,
  35868. 8113,
  35869. 8113,
  35870. 8113,
  35871. 8113,
  35872. 8113,
  35873. 8113,
  35874. 8113,
  35875. 8113,
  35876. 8113,
  35877. 8113,
  35878. 8113,
  35879. 8113,
  35880. 8113,
  35881. 8113,
  35882. 8113,
  35883. 8113,
  35884. 8113,
  35885. 8113,
  35886. 8113,
  35887. 8113,
  35888. 8113,
  35889. 8113,
  35890. 8113,
  35891. 8113,
  35892. 8113,
  35893. 8113,
  35894. 8113,
  35895. 8113,
  35896. 8113,
  35897. 8113,
  35898. 8113,
  35899. 8113,
  35900. 8113,
  35901. 8113,
  35902. 8113,
  35903. 8113,
  35904. 8113,
  35905. 8113,
  35906. 8113,
  35907. 8113,
  35908. 8113,
  35909. 8113,
  35910. 8113,
  35911. 8113,
  35912. 8113,
  35913. 8113,
  35914. 8113,
  35915. 8113,
  35916. 8113,
  35917. 8113,
  35918. 8113,
  35919. 8113,
  35920. 8113,
  35921. 8113,
  35922. 8113,
  35923. 8113,
  35924. 8113,
  35925. 8113,
  35926. 8113,
  35927. 8113,
  35928. 8113,
  35929. 8113,
  35930. 8113,
  35931. 8113,
  35932. 8113,
  35933. 8113,
  35934. 8113,
  35935. 8113,
  35936. 8113,
  35937. 8113,
  35938. 8113,
  35939. 8113,
  35940. 8113,
  35941. 8113,
  35942. 8113,
  35943. 8113,
  35944. 8113,
  35945. 8113,
  35946. 8113,
  35947. 8113,
  35948. 8113,
  35949. 8113,
  35950. 8113,
  35951. 8113,
  35952. 8113,
  35953. 8113,
  35954. 8113,
  35955. 8113,
  35956. 8113,
  35957. 8113,
  35958. 8113,
  35959. 8113,
  35960. 8113,
  35961. 8113,
  35962. 8113,
  35963. 8113,
  35964. 8113,
  35965. 8113,
  35966. 8113,
  35967. 8113,
  35968. 8113,
  35969. 8113,
  35970. 8113,
  35971. 8113,
  35972. 8113,
  35973. 8113,
  35974. 8113,
  35975. 8113,
  35976. 8113,
  35977. 8113,
  35978. 8113,
  35979. 8113,
  35980. 8113,
  35981. 8113,
  35982. 8113,
  35983. 8113,
  35984. 8113,
  35985. 8113,
  35986. 8113,
  35987. 8113,
  35988. 8113,
  35989. 8113,
  35990. 8113,
  35991. 8113,
  35992. 8113,
  35993. 8113,
  35994. 8113,
  35995. 8113,
  35996. 8113,
  35997. 8113,
  35998. 8113,
  35999. 8113,
  36000. 8113,
  36001. 8113,
  36002. 8113,
  36003. 8113,
  36004. 8113,
  36005. 8113,
  36006. 8113,
  36007. 8113,
  36008. 8113,
  36009. 8113,
  36010. 8113,
  36011. 8113,
  36012. 8113,
  36013. 8113,
  36014. 8113,
  36015. 8113,
  36016. 8113,
  36017. 8113,
  36018. 8113,
  36019. 8113,
  36020. 8113,
  36021. 8113,
  36022. 8113,
  36023. 8113,
  36024. 8113,
  36025. 8113,
  36026. 8113,
  36027. 8113,
  36028. 8113,
  36029. 8113,
  36030. 8113,
  36031. 8113,
  36032. 8113,
  36033. 8113,
  36034. 8113,
  36035. 8113,
  36036. 8113,
  36037. 8113,
  36038. 8113,
  36039. 8113,
  36040. 8113,
  36041. 8113,
  36042. 8113,
  36043. 8113,
  36044. 8113,
  36045. 8113,
  36046. 8113,
  36047. 8113,
  36048. 8113,
  36049. 8113,
  36050. 8113,
  36051. 8113,
  36052. 8113,
  36053. 8113,
  36054. 8113,
  36055. 8113,
  36056. 8113,
  36057. 8113,
  36058. 8113,
  36059. 8113,
  36060. 8113,
  36061. 8113,
  36062. 8113,
  36063. 8113,
  36064. 8113,
  36065. 8113,
  36066. 8113,
  36067. 8113,
  36068. 8113,
  36069. 8113,
  36070. 8113,
  36071. 8113,
  36072. 8113,
  36073. 8113,
  36074. 8113,
  36075. 8113,
  36076. 8113,
  36077. 8113,
  36078. 8113,
  36079. 8113,
  36080. 8113,
  36081. 8113,
  36082. 8113,
  36083. 8113,
  36084. 8113,
  36085. 8113,
  36086. 8113,
  36087. 8113,
  36088. 8113,
  36089. 8113,
  36090. 8113,
  36091. 8113,
  36092. 8113,
  36093. 8113,
  36094. 8113,
  36095. 8113,
  36096. 8113,
  36097. 8113,
  36098. 8113,
  36099. 8113,
  36100. 8113,
  36101. 8113,
  36102. 8113,
  36103. 8113,
  36104. 8113,
  36105. 8113,
  36106. 8113,
  36107. 8113,
  36108. 8113,
  36109. 8113,
  36110. 8113,
  36111. 8113,
  36112. 8113,
  36113. 8113,
  36114. 8113,
  36115. 8113,
  36116. 8113,
  36117. 8113,
  36118. 8113,
  36119. 8113,
  36120. 8113,
  36121. 8113,
  36122. 8113,
  36123. 8113,
  36124. 8113,
  36125. 8113,
  36126. 8113,
  36127. 8113,
  36128. 8113,
  36129. 8113,
  36130. 8113,
  36131. 8113,
  36132. 8113,
  36133. 8113,
  36134. 8113,
  36135. 8113,
  36136. 8113,
  36137. 8113,
  36138. 8113,
  36139. 8113,
  36140. 8113,
  36141. 8113,
  36142. 8113,
  36143. 8113,
  36144. 8113,
  36145. 8113,
  36146. 8113,
  36147. 8113,
  36148. 8113,
  36149. 8113,
  36150. 8113,
  36151. 8113,
  36152. 8113,
  36153. 8113,
  36154. 8113,
  36155. 8113,
  36156. 8113,
  36157. 8113,
  36158. 8113,
  36159. 8113,
  36160. 8113,
  36161. 8113,
  36162. 8113,
  36163. 8113,
  36164. 8113,
  36165. 8113,
  36166. 8113,
  36167. 8113,
  36168. 8113,
  36169. 8113,
  36170. 8113,
  36171. 8113,
  36172. 8113,
  36173. 8113,
  36174. 8113,
  36175. 8113,
  36176. 8113,
  36177. 8113,
  36178. 8113,
  36179. 8113,
  36180. 8113,
  36181. 8113,
  36182. 8113,
  36183. 8113,
  36184. 8113,
  36185. 8113,
  36186. 8113,
  36187. 8113,
  36188. 8113,
  36189. 8113,
  36190. 8113,
  36191. 8113,
  36192. 8113,
  36193. 8113,
  36194. 8113,
  36195. 8113,
  36196. 8113,
  36197. 8113,
  36198. 8113,
  36199. 8113,
  36200. 8113,
  36201. 8113,
  36202. 8113,
  36203. 8113,
  36204. 8113,
  36205. 8113,
  36206. 8113,
  36207. 8113,
  36208. 8113,
  36209. 8113,
  36210. 8113,
  36211. 8113,
  36212. 8113,
  36213. 8113,
  36214. 8113,
  36215. 8113,
  36216. 8113,
  36217. 8113,
  36218. 8113,
  36219. 8113,
  36220. 8113,
  36221. 8113,
  36222. 8113,
  36223. 8113,
  36224. 8113,
  36225. 8113,
  36226. 8113,
  36227. 8113,
  36228. 8113,
  36229. 8113,
  36230. 8113,
  36231. 8113,
  36232. 8113,
  36233. 8113,
  36234. 8113,
  36235. 8113,
  36236. 8113,
  36237. 8113,
  36238. 8113,
  36239. 8113,
  36240. 8113,
  36241. 8113,
  36242. 8113,
  36243. 8113,
  36244. 8113,
  36245. 8113,
  36246. 8113,
  36247. 8113,
  36248. 8113,
  36249. 8113,
  36250. 8113,
  36251. 8113,
  36252. 8113,
  36253. 8113,
  36254. 8113,
  36255. 8113,
  36256. 8113,
  36257. 8113,
  36258. 8113,
  36259. 8113,
  36260. 8113,
  36261. 8113,
  36262. 8113,
  36263. 8113,
  36264. 8113,
  36265. 8113,
  36266. 8113,
  36267. 8113,
  36268. 8113,
  36269. 8113,
  36270. 8113,
  36271. 8113,
  36272. 8113,
  36273. 8113,
  36274. 8113,
  36275. 8113,
  36276. 8113,
  36277. 8113,
  36278. 8113,
  36279. 8113,
  36280. 8113,
  36281. 8113,
  36282. 8113,
  36283. 8113,
  36284. 8113,
  36285. 8113,
  36286. 8113,
  36287. 8113,
  36288. 8113,
  36289. 8113,
  36290. 8113,
  36291. 8113,
  36292. 8113,
  36293. 8113,
  36294. 8113,
  36295. 8113,
  36296. 8113,
  36297. 8113,
  36298. 8113,
  36299. 8113,
  36300. 8113,
  36301. 8113,
  36302. 8113,
  36303. 8113,
  36304. 8113,
  36305. 8113,
  36306. 8113,
  36307. 8113,
  36308. 8113,
  36309. 8113,
  36310. 8113,
  36311. 8113,
  36312. 8113,
  36313. 8113,
  36314. 8113,
  36315. 8113,
  36316. 8113,
  36317. 8113,
  36318. 8113,
  36319. 8113,
  36320. 8113,
  36321. 8113,
  36322. 8113,
  36323. 8113,
  36324. 8113,
  36325. 8113,
  36326. 8113,
  36327. 8113,
  36328. 8113,
  36329. 8113,
  36330. 8113,
  36331. 8113,
  36332. 8113,
  36333. 8113,
  36334. 8113,
  36335. 8113,
  36336. 8113,
  36337. 8113,
  36338. 8113,
  36339. 8113,
  36340. 8113,
  36341. 8113,
  36342. 8113,
  36343. 8113,
  36344. 8113,
  36345. 8113,
  36346. 8113,
  36347. 8113,
  36348. 8113,
  36349. 8113,
  36350. 8113,
  36351. 8113,
  36352. 8113,
  36353. 8113,
  36354. 8113,
  36355. 8113,
  36356. 8113,
  36357. 8113,
  36358. 8113,
  36359. 8113,
  36360. 8113,
  36361. 8113,
  36362. 8113,
  36363. 8113,
  36364. 8113,
  36365. 8113,
  36366. 8113,
  36367. 8113,
  36368. 8113,
  36369. 8113,
  36370. 8113,
  36371. 8113,
  36372. 8113,
  36373. 8113,
  36374. 8113,
  36375. 8113,
  36376. 8113,
  36377. 8113,
  36378. 8113,
  36379. 8113,
  36380. 8113,
  36381. 8113,
  36382. 8113,
  36383. 8113,
  36384. 8113,
  36385. 8113,
  36386. 8113,
  36387. 8113,
  36388. 8113,
  36389. 8113,
  36390. 8113,
  36391. 8113,
  36392. 8113,
  36393. 8113,
  36394. 8113,
  36395. 8113,
  36396. 8113,
  36397. 8113,
  36398. 8113,
  36399. 8113,
  36400. 8113,
  36401. 8113,
  36402. 8113,
  36403. 8113,
  36404. 8113,
  36405. 8113,
  36406. 8113,
  36407. 8113,
  36408. 8113,
  36409. 8113,
  36410. 8113,
  36411. 8113,
  36412. 8113,
  36413. 8113,
  36414. 8113,
  36415. 8113,
  36416. 8113,
  36417. 8113,
  36418. 8113,
  36419. 8113,
  36420. 8113,
  36421. 8113,
  36422. 8113,
  36423. 8113,
  36424. 8113,
  36425. 8113,
  36426. 8113,
  36427. 8113,
  36428. 8113,
  36429. 8113,
  36430. 8113,
  36431. 8113,
  36432. 8113,
  36433. 8113,
  36434. 8113,
  36435. 8113,
  36436. 8113,
  36437. 8113,
  36438. 8113,
  36439. 8113,
  36440. 8113,
  36441. 8113,
  36442. 8113,
  36443. 8113,
  36444. 8113,
  36445. 8113,
  36446. 8113,
  36447. 8113,
  36448. 8113,
  36449. 8113,
  36450. 8113,
  36451. 8113,
  36452. 8113,
  36453. 8113,
  36454. 8113,
  36455. 8113,
  36456. 8113,
  36457. 8113,
  36458. 8113,
  36459. 8113,
  36460. 8113,
  36461. 8113,
  36462. 8113,
  36463. 8113,
  36464. 8113,
  36465. 8113,
  36466. 8113,
  36467. 8113,
  36468. 8113,
  36469. 8113,
  36470. 8113,
  36471. 8113,
  36472. 8113,
  36473. 8113,
  36474. 8113,
  36475. 8113,
  36476. 8113,
  36477. 8113,
  36478. 8113,
  36479. 8113,
  36480. 8113,
  36481. 8113,
  36482. 8113,
  36483. 8113,
  36484. 8113,
  36485. 8113,
  36486. 8113,
  36487. 8113,
  36488. 8113,
  36489. 8113,
  36490. 8113,
  36491. 8113,
  36492. 8113,
  36493. 8113,
  36494. 8113,
  36495. 8113,
  36496. 8113,
  36497. 8113,
  36498. 8113,
  36499. 8113,
  36500. 8113,
  36501. 8113,
  36502. 8113,
  36503. 8113,
  36504. 8113,
  36505. 8113,
  36506. 8113,
  36507. 8113,
  36508. 8113,
  36509. 8113,
  36510. 8113,
  36511. 8113,
  36512. 8113,
  36513. 8113,
  36514. 8113,
  36515. 8113,
  36516. 8113,
  36517. 8113,
  36518. 8113,
  36519. 8113,
  36520. 8113,
  36521. 8113,
  36522. 8113,
  36523. 8113,
  36524. 8113,
  36525. 8113,
  36526. 8113,
  36527. 8113,
  36528. 8113,
  36529. 8113,
  36530. 8113,
  36531. 8113,
  36532. 8113,
  36533. 8113,
  36534. 8113,
  36535. 8113,
  36536. 8113,
  36537. 8113,
  36538. 8113,
  36539. 8113,
  36540. 8113,
  36541. 8113,
  36542. 8113,
  36543. 8113,
  36544. 8113,
  36545. 8113,
  36546. 8113,
  36547. 8113,
  36548. 8113,
  36549. 8113,
  36550. 8113,
  36551. 8113,
  36552. 8113,
  36553. 8113,
  36554. 8113,
  36555. 8113,
  36556. 8113,
  36557. 8113,
  36558. 8113,
  36559. 8113,
  36560. 8113,
  36561. 8113,
  36562. 8113,
  36563. 8113,
  36564. 8113,
  36565. 8113,
  36566. 8113,
  36567. 8113,
  36568. 8113,
  36569. 8113,
  36570. 8113,
  36571. 8113,
  36572. 8113,
  36573. 8113,
  36574. 8113,
  36575. 8113,
  36576. 8113,
  36577. 8113,
  36578. 8113,
  36579. 8113,
  36580. 8113,
  36581. 8113,
  36582. 8113,
  36583. 8113,
  36584. 8113,
  36585. 8113,
  36586. 8113,
  36587. 8113,
  36588. 8113,
  36589. 8113,
  36590. 8113,
  36591. 8113,
  36592. 8113,
  36593. 8113,
  36594. 8113,
  36595. 8113,
  36596. 8113,
  36597. 8113,
  36598. 8113,
  36599. 8113,
  36600. 8113,
  36601. 8113,
  36602. 8113,
  36603. 8113,
  36604. 8113,
  36605. 8113,
  36606. 8113,
  36607. 8113,
  36608. 8113,
  36609. 8113,
  36610. 8113,
  36611. 8113,
  36612. 8113,
  36613. 8113,
  36614. 8113,
  36615. 8113,
  36616. 8113,
  36617. 8113,
  36618. 8113,
  36619. 8113,
  36620. 8113,
  36621. 8113,
  36622. 8113,
  36623. 8113,
  36624. 8113,
  36625. 8113,
  36626. 8113,
  36627. 8113,
  36628. 8113,
  36629. 8113,
  36630. 8113,
  36631. 8113,
  36632. 8113,
  36633. 8113,
  36634. 8113,
  36635. 8113,
  36636. 8113,
  36637. 8113,
  36638. 8113,
  36639. 8113,
  36640. 8113,
  36641. 8113,
  36642. 8113,
  36643. 8113,
  36644. 8113,
  36645. 8113,
  36646. 8113,
  36647. 8113,
  36648. 8113,
  36649. 8113,
  36650. 8113,
  36651. 8113,
  36652. 8113,
  36653. 8113,
  36654. 8113,
  36655. 8113,
  36656. 8113,
  36657. 8113,
  36658. 8113,
  36659. 8113,
  36660. 8113,
  36661. 8113,
  36662. 8113,
  36663. 8113,
  36664. 8113,
  36665. 8113,
  36666. 8113,
  36667. 8113,
  36668. 8113,
  36669. 8113,
  36670. 8113,
  36671. 8113,
  36672. 8113,
  36673. 8113,
  36674. 8113,
  36675. 8113,
  36676. 8113,
  36677. 8113,
  36678. 8113,
  36679. 8113,
  36680. 8113,
  36681. 8113,
  36682. 8113,
  36683. 8113,
  36684. 8113,
  36685. 8113,
  36686. 8113,
  36687. 8113,
  36688. 8113,
  36689. 8113,
  36690. 8113,
  36691. 8113,
  36692. 8113,
  36693. 8113,
  36694. 8113,
  36695. 8113,
  36696. 8113,
  36697. 8113,
  36698. 8113,
  36699. 8113,
  36700. 8113,
  36701. 8113,
  36702. 8113,
  36703. 8113,
  36704. 8113,
  36705. 8113,
  36706. 8113,
  36707. 8113,
  36708. 8113,
  36709. 8113,
  36710. 8113,
  36711. 8113,
  36712. 8113,
  36713. 8113,
  36714. 8113,
  36715. 8113,
  36716. 8113,
  36717. 8113,
  36718. 8113,
  36719. 8113,
  36720. 8113,
  36721. 8113,
  36722. 8113,
  36723. 8113,
  36724. 8113,
  36725. 8113,
  36726. 8113,
  36727. 8113,
  36728. 8113,
  36729. 8113,
  36730. 8113,
  36731. 8113,
  36732. 8113,
  36733. 8113,
  36734. 8113,
  36735. 8113,
  36736. 8113,
  36737. 8113,
  36738. 8113,
  36739. 8113,
  36740. 8113,
  36741. 8113,
  36742. 8113,
  36743. 8113,
  36744. 8113,
  36745. 8113,
  36746. 8113,
  36747. 8113,
  36748. 8113,
  36749. 8113,
  36750. 8113,
  36751. 8113,
  36752. 8113,
  36753. 8113,
  36754. 8113,
  36755. 8113,
  36756. 8113,
  36757. 8113,
  36758. 8113,
  36759. 8113,
  36760. 8113,
  36761. 8113,
  36762. 8113,
  36763. 8113,
  36764. 8113,
  36765. 8113,
  36766. 8113,
  36767. 8113,
  36768. 8113,
  36769. 8113,
  36770. 8113,
  36771. 8113,
  36772. 8113,
  36773. 8113,
  36774. 8113,
  36775. 8113,
  36776. 8113,
  36777. 8113,
  36778. 8113,
  36779. 8113,
  36780. 8113,
  36781. 8113,
  36782. 8113,
  36783. 8113,
  36784. 8113,
  36785. 8113,
  36786. 8113,
  36787. 8113,
  36788. 8113,
  36789. 8113,
  36790. 8113,
  36791. 8113,
  36792. 8113,
  36793. 8113,
  36794. 8113,
  36795. 8113,
  36796. 8113,
  36797. 8113,
  36798. 8113,
  36799. 8113,
  36800. 8113,
  36801. 8113,
  36802. 8113,
  36803. 8113,
  36804. 8113,
  36805. 8113,
  36806. 8113,
  36807. 8113,
  36808. 8113,
  36809. 8113,
  36810. 8113,
  36811. 8113,
  36812. 8113,
  36813. 8113,
  36814. 8113,
  36815. 8113,
  36816. 8113,
  36817. 8113,
  36818. 8113,
  36819. 8113,
  36820. 8113,
  36821. 8113,
  36822. 8113,
  36823. 8113,
  36824. 8113,
  36825. 8113,
  36826. 8113,
  36827. 8113,
  36828. 8113,
  36829. 8113,
  36830. 8113,
  36831. 8113,
  36832. 8113,
  36833. 8113,
  36834. 8113,
  36835. 8113,
  36836. 8113,
  36837. 8113,
  36838. 8113,
  36839. 8113,
  36840. 8113,
  36841. 8113,
  36842. 8113,
  36843. 8113,
  36844. 8113,
  36845. 8113,
  36846. 8113,
  36847. 8113,
  36848. 8113,
  36849. 8113,
  36850. 8113,
  36851. 8113,
  36852. 8113,
  36853. 8113,
  36854. 8113,
  36855. 8113,
  36856. 8113,
  36857. 8113,
  36858. 8113,
  36859. 8113,
  36860. 8113,
  36861. 8113,
  36862. 8113,
  36863. 8113,
  36864. 8113,
  36865. 8113,
  36866. 8113,
  36867. 8113,
  36868. 8113,
  36869. 8113,
  36870. 8113,
  36871. 8113,
  36872. 8113,
  36873. 8113,
  36874. 8113,
  36875. 8113,
  36876. 8113,
  36877. 8113,
  36878. 8113,
  36879. 8113,
  36880. 8113,
  36881. 8113,
  36882. 8113,
  36883. 8113,
  36884. 8113,
  36885. 8113,
  36886. 8113,
  36887. 8113,
  36888. 8113,
  36889. 8113,
  36890. 8113,
  36891. 8113,
  36892. 8113,
  36893. 8113,
  36894. 8113,
  36895. 8113,
  36896. 8113,
  36897. 8113,
  36898. 8113,
  36899. 8113,
  36900. 8113,
  36901. 8113,
  36902. 8113,
  36903. 8113,
  36904. 8113,
  36905. 8113,
  36906. 8113,
  36907. 8113,
  36908. 8113,
  36909. 8113,
  36910. 8113,
  36911. 8113,
  36912. 8113,
  36913. 8113,
  36914. 8113,
  36915. 8113,
  36916. 8113,
  36917. 8113,
  36918. 8113,
  36919. 8113,
  36920. 8113,
  36921. 8113,
  36922. 8113,
  36923. 8113,
  36924. 8113,
  36925. 8113,
  36926. 8113,
  36927. 8113,
  36928. 8113,
  36929. 8113,
  36930. 8113,
  36931. 8113,
  36932. 8113,
  36933. 8113,
  36934. 8113,
  36935. 8113,
  36936. 8113,
  36937. 8113,
  36938. 8113,
  36939. 8113,
  36940. 8113,
  36941. 8113,
  36942. 8113,
  36943. 8113,
  36944. 8113,
  36945. 8113,
  36946. 8113,
  36947. 8113,
  36948. 8113,
  36949. 8113,
  36950. 8113,
  36951. 8113,
  36952. 8113,
  36953. 8113,
  36954. 8113,
  36955. 8113,
  36956. 8113,
  36957. 8113,
  36958. 8113,
  36959. 8113,
  36960. 8113,
  36961. 8113,
  36962. 8113,
  36963. 8113,
  36964. 8113,
  36965. 8113,
  36966. 8113,
  36967. 8113,
  36968. 8113,
  36969. 8113,
  36970. 8113,
  36971. 8113,
  36972. 8113,
  36973. 8113,
  36974. 8113,
  36975. 8113,
  36976. 8113,
  36977. 8113,
  36978. 8113,
  36979. 8113,
  36980. 8113,
  36981. 8113,
  36982. 8113,
  36983. 8113,
  36984. 8113,
  36985. 8113,
  36986. 8113,
  36987. 8113,
  36988. 8113,
  36989. 8113,
  36990. 8113,
  36991. 8113,
  36992. 8113,
  36993. 8113,
  36994. 8113,
  36995. 8113,
  36996. 8113,
  36997. 8113,
  36998. 8113,
  36999. 8113,
  37000. 8113,
  37001. 8113,
  37002. 8113,
  37003. 8113,
  37004. 8113,
  37005. 8113,
  37006. 8113,
  37007. 8113,
  37008. 8113,
  37009. 8113,
  37010. 8113,
  37011. 8113,
  37012. 8113,
  37013. 8113,
  37014. 8113,
  37015. 8113,
  37016. 8113,
  37017. 8113,
  37018. 8113,
  37019. 8113,
  37020. 8113,
  37021. 8113,
  37022. 8113,
  37023. 8113,
  37024. 8113,
  37025. 8113,
  37026. 8113,
  37027. 8113,
  37028. 8113,
  37029. 8113,
  37030. 8113,
  37031. 8113,
  37032. 8113,
  37033. 8113,
  37034. 8113,
  37035. 8113,
  37036. 8113,
  37037. 8113,
  37038. 8113,
  37039. 8113,
  37040. 8113,
  37041. 8113,
  37042. 8113,
  37043. 8113,
  37044. 8113,
  37045. 8113,
  37046. 8113,
  37047. 8113,
  37048. 8113,
  37049. 8113,
  37050. 8113,
  37051. 8113,
  37052. 8113,
  37053. 8113,
  37054. 8113,
  37055. 8113,
  37056. 8113,
  37057. 8113,
  37058. 8113,
  37059. 8113,
  37060. 8113,
  37061. 8113,
  37062. 8113,
  37063. 8113,
  37064. 8113,
  37065. 8113,
  37066. 8113,
  37067. 8113,
  37068. 8113,
  37069. 8113,
  37070. 8113,
  37071. 8113,
  37072. 8113,
  37073. 8113,
  37074. 8113,
  37075. 8113,
  37076. 8113,
  37077. 8113,
  37078. 8113,
  37079. 8113,
  37080. 8113,
  37081. 8113,
  37082. 8113,
  37083. 8113,
  37084. 8113,
  37085. 8113,
  37086. 8113,
  37087. 8113,
  37088. 8113,
  37089. 8113,
  37090. 8113,
  37091. 8113,
  37092. 8113,
  37093. 8113,
  37094. 8113,
  37095. 8113,
  37096. 8113,
  37097. 8113,
  37098. 8113,
  37099. 8113,
  37100. 8113,
  37101. 8113,
  37102. 8113,
  37103. 8113,
  37104. 8113,
  37105. 8113,
  37106. 8113,
  37107. 8113,
  37108. 8113,
  37109. 8113,
  37110. 8113,
  37111. 8113,
  37112. 8113,
  37113. 8113,
  37114. 8113,
  37115. 8113,
  37116. 8113,
  37117. 8113,
  37118. 8113,
  37119. 8113,
  37120. 8113,
  37121. 8113,
  37122. 8113,
  37123. 8113,
  37124. 8113,
  37125. 8113,
  37126. 8113,
  37127. 8113,
  37128. 8113,
  37129. 8113,
  37130. 8113,
  37131. 8113,
  37132. 8113,
  37133. 8113,
  37134. 8113,
  37135. 8113,
  37136. 8113,
  37137. 8113,
  37138. 8113,
  37139. 8113,
  37140. 8113,
  37141. 8113,
  37142. 8113,
  37143. 8113,
  37144. 8113,
  37145. 8113,
  37146. 8113,
  37147. 8113,
  37148. 8113,
  37149. 8113,
  37150. 8113,
  37151. 8113,
  37152. 8113,
  37153. 8113,
  37154. 8113,
  37155. 8113,
  37156. 8113,
  37157. 8113,
  37158. 8113,
  37159. 8113,
  37160. 8113,
  37161. 8113,
  37162. 8113,
  37163. 8113,
  37164. 8113,
  37165. 8113,
  37166. 8113,
  37167. 8113,
  37168. 8113,
  37169. 8113,
  37170. 8113,
  37171. 8113,
  37172. 8113,
  37173. 8113,
  37174. 8113,
  37175. 8113,
  37176. 8113,
  37177. 8113,
  37178. 8113,
  37179. 8113,
  37180. 8113,
  37181. 8113,
  37182. 8113,
  37183. 8113,
  37184. 8113,
  37185. 8113,
  37186. 8113,
  37187. 8113,
  37188. 8113,
  37189. 8113,
  37190. 8113,
  37191. 8113,
  37192. 8113,
  37193. 8113,
  37194. 8113,
  37195. 8113,
  37196. 8113,
  37197. 8113,
  37198. 8113,
  37199. 8113,
  37200. 8113,
  37201. 8113,
  37202. 8113,
  37203. 8113,
  37204. 8113,
  37205. 8113,
  37206. 8113,
  37207. 8113,
  37208. 8113,
  37209. 8113,
  37210. 8113,
  37211. 8113,
  37212. 8113,
  37213. 8113,
  37214. 8113,
  37215. 8113,
  37216. 8113,
  37217. 8113,
  37218. 8113,
  37219. 8113,
  37220. 8113,
  37221. 8113,
  37222. 8113,
  37223. 8113,
  37224. 8113,
  37225. 8113,
  37226. 8113,
  37227. 8113,
  37228. 8113,
  37229. 8113,
  37230. 8113,
  37231. 8113,
  37232. 8113,
  37233. 8113,
  37234. 8113,
  37235. 8113,
  37236. 8113,
  37237. 8113,
  37238. 8113,
  37239. 8113,
  37240. 8113,
  37241. 8113,
  37242. 8113,
  37243. 8113,
  37244. 8113,
  37245. 8113,
  37246. 8113,
  37247. 8113,
  37248. 8113,
  37249. 8113,
  37250. 8113,
  37251. 8113,
  37252. 8113,
  37253. 8113,
  37254. 8113,
  37255. 8113,
  37256. 8113,
  37257. 8113,
  37258. 8113,
  37259. 8113,
  37260. 8113,
  37261. 8113,
  37262. 8113,
  37263. 8113,
  37264. 8113,
  37265. 8113,
  37266. 8113,
  37267. 8113,
  37268. 8113,
  37269. 8113,
  37270. 8113,
  37271. 8113,
  37272. 8113,
  37273. 8113,
  37274. 8113,
  37275. 8113,
  37276. 8113,
  37277. 8113,
  37278. 8113,
  37279. 8113,
  37280. 8113,
  37281. 8113,
  37282. 8113,
  37283. 8113,
  37284. 8113,
  37285. 8113,
  37286. 8113,
  37287. 8113,
  37288. 8113,
  37289. 8113,
  37290. 8113,
  37291. 8113,
  37292. 8113,
  37293. 8113,
  37294. 8113,
  37295. 8113,
  37296. 8113,
  37297. 8113,
  37298. 8113,
  37299. 8113,
  37300. 8113,
  37301. 8113,
  37302. 8113,
  37303. 8113,
  37304. 8113,
  37305. 8113,
  37306. 8113,
  37307. 8113,
  37308. 8113,
  37309. 8113,
  37310. 8113,
  37311. 8113,
  37312. 8113,
  37313. 8113,
  37314. 8113,
  37315. 8113,
  37316. 8113,
  37317. 8113,
  37318. 8113,
  37319. 8113,
  37320. 8113,
  37321. 8113,
  37322. 8113,
  37323. 8113,
  37324. 8113,
  37325. 8113,
  37326. 8113,
  37327. 8113,
  37328. 8113,
  37329. 8113,
  37330. 8113,
  37331. 8113,
  37332. 8113,
  37333. 8113,
  37334. 8113,
  37335. 8113,
  37336. 8113,
  37337. 8113,
  37338. 8113,
  37339. 8113,
  37340. 8113,
  37341. 8113,
  37342. 8113,
  37343. 8113,
  37344. 8113,
  37345. 8113,
  37346. 8113,
  37347. 8113,
  37348. 8113,
  37349. 8113,
  37350. 8113,
  37351. 8113,
  37352. 8113,
  37353. 8113,
  37354. 8113,
  37355. 8113,
  37356. 8113,
  37357. 8113,
  37358. 8113,
  37359. 8113,
  37360. 8113,
  37361. 8113,
  37362. 8113,
  37363. 8113,
  37364. 8113,
  37365. 8113,
  37366. 8113,
  37367. 8113,
  37368. 8113,
  37369. 8113,
  37370. 8113,
  37371. 8113,
  37372. 8113,
  37373. 8113,
  37374. 8113,
  37375. 8113,
  37376. 8113,
  37377. 8113,
  37378. 8113,
  37379. 8113,
  37380. 8113,
  37381. 8113,
  37382. 8113,
  37383. 8113,
  37384. 8113,
  37385. 8113,
  37386. 8113,
  37387. 8113,
  37388. 8113,
  37389. 8113,
  37390. 8113,
  37391. 8113,
  37392. 8113,
  37393. 8113,
  37394. 8113,
  37395. 8113,
  37396. 8113,
  37397. 8113,
  37398. 8113,
  37399. 8113,
  37400. 8113,
  37401. 8113,
  37402. 8113,
  37403. 8113,
  37404. 8113,
  37405. 8113,
  37406. 8113,
  37407. 8113,
  37408. 8113,
  37409. 8113,
  37410. 8113,
  37411. 8113,
  37412. 8113,
  37413. 8113,
  37414. 8113,
  37415. 8113,
  37416. 8113,
  37417. 8113,
  37418. 8113,
  37419. 8113,
  37420. 8113,
  37421. 8113,
  37422. 8113,
  37423. 8113,
  37424. 8113,
  37425. 8113,
  37426. 8113,
  37427. 8113,
  37428. 8113,
  37429. 8113,
  37430. 8113,
  37431. 8113,
  37432. 8113,
  37433. 8113,
  37434. 8113,
  37435. 8113,
  37436. 8113,
  37437. 8113,
  37438. 8113,
  37439. 8113,
  37440. 8113,
  37441. 8113,
  37442. 8113,
  37443. 8113,
  37444. 8113,
  37445. 8113,
  37446. 8113,
  37447. 8113,
  37448. 8113,
  37449. 8113,
  37450. 8113,
  37451. 8113,
  37452. 8113,
  37453. 8113,
  37454. 8113,
  37455. 8113,
  37456. 8113,
  37457. 8113,
  37458. 8113,
  37459. 8113,
  37460. 8113,
  37461. 8113,
  37462. 8113,
  37463. 8113,
  37464. 8113,
  37465. 8113,
  37466. 8113,
  37467. 8113,
  37468. 8113,
  37469. 8113,
  37470. 8113,
  37471. 8113,
  37472. 8113,
  37473. 8113,
  37474. 8113,
  37475. 8113,
  37476. 8113,
  37477. 8113,
  37478. 8113,
  37479. 8113,
  37480. 8113,
  37481. 8113,
  37482. 8113,
  37483. 8113,
  37484. 8113,
  37485. 8113,
  37486. 8113,
  37487. 8113,
  37488. 8113,
  37489. 8113,
  37490. 8113,
  37491. 8113,
  37492. 8113,
  37493. 8113,
  37494. 8113,
  37495. 8113,
  37496. 8113,
  37497. 8113,
  37498. 8113,
  37499. 8113,
  37500. 8113,
  37501. 8113,
  37502. 8113,
  37503. 8113,
  37504. 8113,
  37505. 8113,
  37506. 8113,
  37507. 8113,
  37508. 8113,
  37509. 8113,
  37510. 8113,
  37511. 8113,
  37512. 8113,
  37513. 8113,
  37514. 8113,
  37515. 8113,
  37516. 8113,
  37517. 8113,
  37518. 8113,
  37519. 8113,
  37520. 8113,
  37521. 8113,
  37522. 8113,
  37523. 8113,
  37524. 8113,
  37525. 8113,
  37526. 8113,
  37527. 8113,
  37528. 8113,
  37529. 8113,
  37530. 8113,
  37531. 8113,
  37532. 8113,
  37533. 8113,
  37534. 8113,
  37535. 8113,
  37536. 8113,
  37537. 8113,
  37538. 8113,
  37539. 8113,
  37540. 8113,
  37541. 8113,
  37542. 8113,
  37543. 8113,
  37544. 8113,
  37545. 8113,
  37546. 8113,
  37547. 8113,
  37548. 8113,
  37549. 8113,
  37550. 8113,
  37551. 8113,
  37552. 8113,
  37553. 8113,
  37554. 8113,
  37555. 8113,
  37556. 8113,
  37557. 8113,
  37558. 8113,
  37559. 8113,
  37560. 8113,
  37561. 8113,
  37562. 8113,
  37563. 8113,
  37564. 8113,
  37565. 8113,
  37566. 8113,
  37567. 8113,
  37568. 8113,
  37569. 8113,
  37570. 8113,
  37571. 8113,
  37572. 8113,
  37573. 8113,
  37574. 8113,
  37575. 8113,
  37576. 8113,
  37577. 8113,
  37578. 8113,
  37579. 8113,
  37580. 8113,
  37581. 8113,
  37582. 8113,
  37583. 8113,
  37584. 8113,
  37585. 8113,
  37586. 8113,
  37587. 8113,
  37588. 8113,
  37589. 8113,
  37590. 8113,
  37591. 8113,
  37592. 8113,
  37593. 8113,
  37594. 8113,
  37595. 8113,
  37596. 8113,
  37597. 8113,
  37598. 8113,
  37599. 8113,
  37600. 8113,
  37601. 8113,
  37602. 8113,
  37603. 8113,
  37604. 8113,
  37605. 8113,
  37606. 8113,
  37607. 8113,
  37608. 8113,
  37609. 8113,
  37610. 8113,
  37611. 8113,
  37612. 8113,
  37613. 8113,
  37614. 8113,
  37615. 8113,
  37616. 8113,
  37617. 8113,
  37618. 8113,
  37619. 8113,
  37620. 8113,
  37621. 8113,
  37622. 8113,
  37623. 8113,
  37624. 8113,
  37625. 8113,
  37626. 8113,
  37627. 8113,
  37628. 8113,
  37629. 8113,
  37630. 8113,
  37631. 8113,
  37632. 8113,
  37633. 8113,
  37634. 8113,
  37635. 8113,
  37636. 8113,
  37637. 8113,
  37638. 8113,
  37639. 8113,
  37640. 8113,
  37641. 8113,
  37642. 8113,
  37643. 8113,
  37644. 8113,
  37645. 8113,
  37646. 8113,
  37647. 8113,
  37648. 8113,
  37649. 8113,
  37650. 8113,
  37651. 8113,
  37652. 8113,
  37653. 8113,
  37654. 8113,
  37655. 8113,
  37656. 8113,
  37657. 8113,
  37658. 8113,
  37659. 8113,
  37660. 8113,
  37661. 8113,
  37662. 8113,
  37663. 8113,
  37664. 8113,
  37665. 8113,
  37666. 8113,
  37667. 8113,
  37668. 8113,
  37669. 8113,
  37670. 8113,
  37671. 8113,
  37672. 8113,
  37673. 8113,
  37674. 8113,
  37675. 8113,
  37676. 8113,
  37677. 8113,
  37678. 8113,
  37679. 8113,
  37680. 8113,
  37681. 8113,
  37682. 8113,
  37683. 8113,
  37684. 8113,
  37685. 8113,
  37686. 8113,
  37687. 8113,
  37688. 8113,
  37689. 8113,
  37690. 8113,
  37691. 8113,
  37692. 8113,
  37693. 8113,
  37694. 8113,
  37695. 8113,
  37696. 8113,
  37697. 8113,
  37698. 8113,
  37699. 8113,
  37700. 8113,
  37701. 8113,
  37702. 8113,
  37703. 8113,
  37704. 8113,
  37705. 8113,
  37706. 8113,
  37707. 8113,
  37708. 8113,
  37709. 8113,
  37710. 8113,
  37711. 8113,
  37712. 8113,
  37713. 8113,
  37714. 8113,
  37715. 8113,
  37716. 8113,
  37717. 8113,
  37718. 8113,
  37719. 8113,
  37720. 8113,
  37721. 8113,
  37722. 8113,
  37723. 8113,
  37724. 8113,
  37725. 8113,
  37726. 8113,
  37727. 8113,
  37728. 8113,
  37729. 8113,
  37730. 8113,
  37731. 8113,
  37732. 8113,
  37733. 8113,
  37734. 8113,
  37735. 8113,
  37736. 8113,
  37737. 8113,
  37738. 8113,
  37739. 8113,
  37740. 8113,
  37741. 8113,
  37742. 8113,
  37743. 8113,
  37744. 8113,
  37745. 8113,
  37746. 8113,
  37747. 8113,
  37748. 8113,
  37749. 8113,
  37750. 8113,
  37751. 8113,
  37752. 8113,
  37753. 8113,
  37754. 8113,
  37755. 8113,
  37756. 8113,
  37757. 8113,
  37758. 8113,
  37759. 8113,
  37760. 8113,
  37761. 8113,
  37762. 8113,
  37763. 8113,
  37764. 8113,
  37765. 8113,
  37766. 8113,
  37767. 8113,
  37768. 8113,
  37769. 8113,
  37770. 8113,
  37771. 8113,
  37772. 8113,
  37773. 8113,
  37774. 8113,
  37775. 8113,
  37776. 8113,
  37777. 8113,
  37778. 8113,
  37779. 8113,
  37780. 8113,
  37781. 8113,
  37782. 8113,
  37783. 8113,
  37784. 8113,
  37785. 8113,
  37786. 8113,
  37787. 8113,
  37788. 8113,
  37789. 8113,
  37790. 8113,
  37791. 8113,
  37792. 8113,
  37793. 8113,
  37794. 8113,
  37795. 8113,
  37796. 8113,
  37797. 8113,
  37798. 8113,
  37799. 8113,
  37800. 8113,
  37801. 8113,
  37802. 8113,
  37803. 8113,
  37804. 8113,
  37805. 8113,
  37806. 8113,
  37807. 8113,
  37808. 8113,
  37809. 8113,
  37810. 8113,
  37811. 8113,
  37812. 8113,
  37813. 8113,
  37814. 8113,
  37815. 8113,
  37816. 8113,
  37817. 8113,
  37818. 8113,
  37819. 8113,
  37820. 8113,
  37821. 8113,
  37822. 8113,
  37823. 8113,
  37824. 8113,
  37825. 8113,
  37826. 8113,
  37827. 8113,
  37828. 8113,
  37829. 8113,
  37830. 8113,
  37831. 8113,
  37832. 8113,
  37833. 8113,
  37834. 8113,
  37835. 8113,
  37836. 8113,
  37837. 8113,
  37838. 8113,
  37839. 8113,
  37840. 8113,
  37841. 8113,
  37842. 8113,
  37843. 8113,
  37844. 8113,
  37845. 8113,
  37846. 8113,
  37847. 8113,
  37848. 8113,
  37849. 8113,
  37850. 8113,
  37851. 8113,
  37852. 8113,
  37853. 8113,
  37854. 8113,
  37855. 8113,
  37856. 8113,
  37857. 8113,
  37858. 8113,
  37859. 8113,
  37860. 8113,
  37861. 8113,
  37862. 8113,
  37863. 8113,
  37864. 8113,
  37865. 8113,
  37866. 8113,
  37867. 8113,
  37868. 8121,
  37869. 8129,
  37870. 8137,
  37871. 8137,
  37872. 8137,
  37873. 8137,
  37874. 8137,
  37875. 8137,
  37876. 8137,
  37877. 8137,
  37878. 8137,
  37879. 8137,
  37880. 8137,
  37881. 8137,
  37882. 8137,
  37883. 8137,
  37884. 8145,
  37885. 2009,
  37886. 2009,
  37887. 2009,
  37888. 2009,
  37889. 2009,
  37890. 2009,
  37891. 2009,
  37892. 2009,
  37893. 2009,
  37894. 2009,
  37895. 2009,
  37896. 2009,
  37897. 2009,
  37898. 2009,
  37899. 2009,
  37900. 2009,
  37901. 2009,
  37902. 2009,
  37903. 2009,
  37904. 2009,
  37905. 2009,
  37906. 2009,
  37907. 2009,
  37908. 2009,
  37909. 2009,
  37910. 2009,
  37911. 2009,
  37912. 2009,
  37913. 2009,
  37914. 2009,
  37915. 2009,
  37916. 2009,
  37917. 2009,
  37918. 2009,
  37919. 2009,
  37920. 2009,
  37921. 2009,
  37922. 2009,
  37923. 2009,
  37924. 2009,
  37925. 2009,
  37926. 2009,
  37927. 2009,
  37928. 2009,
  37929. 2009,
  37930. 2009,
  37931. 2009,
  37932. 2009,
  37933. 2009,
  37934. 2009,
  37935. 2009,
  37936. 2009,
  37937. 2009,
  37938. 2009,
  37939. 2009,
  37940. 2009,
  37941. 2009,
  37942. 2009,
  37943. 2009,
  37944. 2009,
  37945. 2009,
  37946. 2009,
  37947. 2009,
  37948. 2009,
  37949. 2009,
  37950. 2009,
  37951. 2009,
  37952. 2009,
  37953. 2009,
  37954. 2009,
  37955. 2009,
  37956. 2009,
  37957. 2009,
  37958. 2009,
  37959. 2009,
  37960. 2009,
  37961. 2009,
  37962. 2009,
  37963. 2009,
  37964. 2009,
  37965. 2009,
  37966. 2009,
  37967. 2009,
  37968. 2009,
  37969. 2009,
  37970. 2009,
  37971. 2009,
  37972. 2009,
  37973. 2009,
  37974. 2009,
  37975. 2009,
  37976. 2009,
  37977. 2009,
  37978. 2009,
  37979. 2009,
  37980. 2009,
  37981. 2009,
  37982. 2009,
  37983. 2009,
  37984. 2009,
  37985. 2009,
  37986. 2009,
  37987. 2009,
  37988. 2009,
  37989. 2009,
  37990. 2009,
  37991. 2009,
  37992. 2009,
  37993. 2009,
  37994. 2009,
  37995. 2009,
  37996. 2009,
  37997. 67496,
  37998. 67496,
  37999. 67496,
  38000. 21,
  38001. 21,
  38002. 21,
  38003. 21,
  38004. 21,
  38005. 21,
  38006. 21,
  38007. 21,
  38008. 21,
  38009. 17,
  38010. 34,
  38011. 30,
  38012. 30,
  38013. 33,
  38014. 21,
  38015. 21,
  38016. 21,
  38017. 21,
  38018. 21,
  38019. 21,
  38020. 21,
  38021. 21,
  38022. 21,
  38023. 21,
  38024. 21,
  38025. 21,
  38026. 21,
  38027. 21,
  38028. 21,
  38029. 21,
  38030. 21,
  38031. 21,
  38032. 38,
  38033. 6,
  38034. 3,
  38035. 12,
  38036. 9,
  38037. 10,
  38038. 12,
  38039. 3,
  38040. 0,
  38041. 2,
  38042. 12,
  38043. 9,
  38044. 8,
  38045. 16,
  38046. 8,
  38047. 7,
  38048. 11,
  38049. 11,
  38050. 11,
  38051. 11,
  38052. 11,
  38053. 11,
  38054. 11,
  38055. 11,
  38056. 11,
  38057. 11,
  38058. 8,
  38059. 8,
  38060. 12,
  38061. 12,
  38062. 12,
  38063. 6,
  38064. 12,
  38065. 12,
  38066. 12,
  38067. 12,
  38068. 12,
  38069. 12,
  38070. 12,
  38071. 12,
  38072. 12,
  38073. 12,
  38074. 12,
  38075. 12,
  38076. 12,
  38077. 12,
  38078. 12,
  38079. 12,
  38080. 12,
  38081. 12,
  38082. 12,
  38083. 12,
  38084. 12,
  38085. 12,
  38086. 12,
  38087. 12,
  38088. 12,
  38089. 12,
  38090. 12,
  38091. 0,
  38092. 9,
  38093. 2,
  38094. 12,
  38095. 12,
  38096. 12,
  38097. 12,
  38098. 12,
  38099. 12,
  38100. 12,
  38101. 12,
  38102. 12,
  38103. 12,
  38104. 12,
  38105. 12,
  38106. 12,
  38107. 12,
  38108. 12,
  38109. 12,
  38110. 12,
  38111. 12,
  38112. 12,
  38113. 12,
  38114. 12,
  38115. 12,
  38116. 12,
  38117. 12,
  38118. 12,
  38119. 12,
  38120. 12,
  38121. 12,
  38122. 12,
  38123. 0,
  38124. 17,
  38125. 1,
  38126. 12,
  38127. 21,
  38128. 0,
  38129. 0,
  38130. 0,
  38131. 0,
  38132. 0,
  38133. 0,
  38134. 0,
  38135. 0,
  38136. 0,
  38137. 0,
  38138. 0,
  38139. 0,
  38140. 0,
  38141. 0,
  38142. 0,
  38143. 0,
  38144. 0,
  38145. 0,
  38146. 0,
  38147. 0,
  38148. 0,
  38149. 0,
  38150. 0,
  38151. 0,
  38152. 0,
  38153. 0,
  38154. 0,
  38155. 0,
  38156. 0,
  38157. 0,
  38158. 0,
  38159. 0,
  38160. 0,
  38161. 0,
  38162. 0,
  38163. 0,
  38164. 0,
  38165. 0,
  38166. 0,
  38167. 0,
  38168. 0,
  38169. 0,
  38170. 0,
  38171. 0,
  38172. 0,
  38173. 0,
  38174. 0,
  38175. 0,
  38176. 0,
  38177. 0,
  38178. 0,
  38179. 0,
  38180. 0,
  38181. 0,
  38182. 0,
  38183. 0,
  38184. 0,
  38185. 0,
  38186. 0,
  38187. 0,
  38188. 0,
  38189. 0,
  38190. 0,
  38191. 0,
  38192. 39,
  38193. 39,
  38194. 39,
  38195. 39,
  38196. 39,
  38197. 39,
  38198. 39,
  38199. 39,
  38200. 39,
  38201. 39,
  38202. 39,
  38203. 39,
  38204. 39,
  38205. 39,
  38206. 39,
  38207. 39,
  38208. 39,
  38209. 39,
  38210. 39,
  38211. 39,
  38212. 39,
  38213. 39,
  38214. 39,
  38215. 39,
  38216. 39,
  38217. 39,
  38218. 39,
  38219. 39,
  38220. 39,
  38221. 39,
  38222. 39,
  38223. 39,
  38224. 39,
  38225. 39,
  38226. 39,
  38227. 39,
  38228. 39,
  38229. 39,
  38230. 39,
  38231. 39,
  38232. 39,
  38233. 39,
  38234. 39,
  38235. 39,
  38236. 39,
  38237. 39,
  38238. 39,
  38239. 39,
  38240. 39,
  38241. 39,
  38242. 39,
  38243. 39,
  38244. 39,
  38245. 39,
  38246. 39,
  38247. 39,
  38248. 39,
  38249. 39,
  38250. 39,
  38251. 39,
  38252. 39,
  38253. 39,
  38254. 39,
  38255. 39,
  38256. 21,
  38257. 21,
  38258. 21,
  38259. 21,
  38260. 21,
  38261. 35,
  38262. 21,
  38263. 21,
  38264. 21,
  38265. 21,
  38266. 21,
  38267. 21,
  38268. 21,
  38269. 21,
  38270. 21,
  38271. 21,
  38272. 21,
  38273. 21,
  38274. 21,
  38275. 21,
  38276. 21,
  38277. 21,
  38278. 21,
  38279. 21,
  38280. 21,
  38281. 21,
  38282. 21,
  38283. 21,
  38284. 21,
  38285. 21,
  38286. 21,
  38287. 21,
  38288. 4,
  38289. 0,
  38290. 10,
  38291. 9,
  38292. 9,
  38293. 9,
  38294. 12,
  38295. 29,
  38296. 29,
  38297. 12,
  38298. 29,
  38299. 3,
  38300. 12,
  38301. 17,
  38302. 12,
  38303. 12,
  38304. 10,
  38305. 9,
  38306. 29,
  38307. 29,
  38308. 18,
  38309. 12,
  38310. 29,
  38311. 29,
  38312. 29,
  38313. 29,
  38314. 29,
  38315. 3,
  38316. 29,
  38317. 29,
  38318. 29,
  38319. 0,
  38320. 12,
  38321. 12,
  38322. 12,
  38323. 12,
  38324. 12,
  38325. 12,
  38326. 12,
  38327. 12,
  38328. 12,
  38329. 12,
  38330. 12,
  38331. 12,
  38332. 12,
  38333. 12,
  38334. 12,
  38335. 12,
  38336. 12,
  38337. 12,
  38338. 12,
  38339. 12,
  38340. 12,
  38341. 12,
  38342. 12,
  38343. 29,
  38344. 12,
  38345. 12,
  38346. 12,
  38347. 12,
  38348. 12,
  38349. 12,
  38350. 12,
  38351. 12,
  38352. 12,
  38353. 12,
  38354. 12,
  38355. 12,
  38356. 12,
  38357. 12,
  38358. 12,
  38359. 12,
  38360. 12,
  38361. 12,
  38362. 12,
  38363. 12,
  38364. 12,
  38365. 12,
  38366. 12,
  38367. 12,
  38368. 12,
  38369. 12,
  38370. 12,
  38371. 12,
  38372. 12,
  38373. 12,
  38374. 12,
  38375. 29,
  38376. 12,
  38377. 12,
  38378. 12,
  38379. 12,
  38380. 12,
  38381. 12,
  38382. 12,
  38383. 12,
  38384. 12,
  38385. 12,
  38386. 12,
  38387. 12,
  38388. 12,
  38389. 12,
  38390. 12,
  38391. 12,
  38392. 12,
  38393. 12,
  38394. 12,
  38395. 12,
  38396. 12,
  38397. 12,
  38398. 12,
  38399. 12,
  38400. 12,
  38401. 12,
  38402. 12,
  38403. 12,
  38404. 12,
  38405. 12,
  38406. 12,
  38407. 12,
  38408. 12,
  38409. 12,
  38410. 12,
  38411. 12,
  38412. 12,
  38413. 12,
  38414. 12,
  38415. 12,
  38416. 12,
  38417. 12,
  38418. 12,
  38419. 12,
  38420. 12,
  38421. 12,
  38422. 12,
  38423. 12,
  38424. 12,
  38425. 12,
  38426. 12,
  38427. 12,
  38428. 12,
  38429. 12,
  38430. 12,
  38431. 12,
  38432. 12,
  38433. 12,
  38434. 12,
  38435. 12,
  38436. 12,
  38437. 12,
  38438. 12,
  38439. 12,
  38440. 12,
  38441. 12,
  38442. 12,
  38443. 12,
  38444. 12,
  38445. 12,
  38446. 12,
  38447. 12,
  38448. 12,
  38449. 12,
  38450. 12,
  38451. 12,
  38452. 12,
  38453. 12,
  38454. 12,
  38455. 12,
  38456. 12,
  38457. 12,
  38458. 12,
  38459. 12,
  38460. 12,
  38461. 12,
  38462. 12,
  38463. 12,
  38464. 12,
  38465. 12,
  38466. 12,
  38467. 12,
  38468. 12,
  38469. 12,
  38470. 12,
  38471. 12,
  38472. 12,
  38473. 12,
  38474. 12,
  38475. 12,
  38476. 12,
  38477. 12,
  38478. 12,
  38479. 12,
  38480. 12,
  38481. 12,
  38482. 12,
  38483. 12,
  38484. 12,
  38485. 12,
  38486. 12,
  38487. 12,
  38488. 12,
  38489. 12,
  38490. 12,
  38491. 12,
  38492. 12,
  38493. 12,
  38494. 12,
  38495. 12,
  38496. 12,
  38497. 12,
  38498. 12,
  38499. 12,
  38500. 12,
  38501. 12,
  38502. 12,
  38503. 12,
  38504. 12,
  38505. 12,
  38506. 12,
  38507. 12,
  38508. 12,
  38509. 12,
  38510. 12,
  38511. 12,
  38512. 12,
  38513. 12,
  38514. 12,
  38515. 12,
  38516. 12,
  38517. 12,
  38518. 12,
  38519. 12,
  38520. 12,
  38521. 12,
  38522. 12,
  38523. 12,
  38524. 12,
  38525. 12,
  38526. 12,
  38527. 12,
  38528. 12,
  38529. 12,
  38530. 12,
  38531. 12,
  38532. 12,
  38533. 12,
  38534. 12,
  38535. 12,
  38536. 12,
  38537. 12,
  38538. 12,
  38539. 12,
  38540. 12,
  38541. 12,
  38542. 12,
  38543. 12,
  38544. 12,
  38545. 12,
  38546. 12,
  38547. 12,
  38548. 12,
  38549. 12,
  38550. 12,
  38551. 12,
  38552. 12,
  38553. 12,
  38554. 12,
  38555. 12,
  38556. 12,
  38557. 12,
  38558. 12,
  38559. 12,
  38560. 12,
  38561. 12,
  38562. 12,
  38563. 12,
  38564. 12,
  38565. 12,
  38566. 12,
  38567. 12,
  38568. 12,
  38569. 12,
  38570. 12,
  38571. 12,
  38572. 12,
  38573. 12,
  38574. 12,
  38575. 12,
  38576. 12,
  38577. 12,
  38578. 12,
  38579. 12,
  38580. 12,
  38581. 12,
  38582. 12,
  38583. 12,
  38584. 12,
  38585. 12,
  38586. 12,
  38587. 12,
  38588. 12,
  38589. 12,
  38590. 12,
  38591. 12,
  38592. 12,
  38593. 12,
  38594. 12,
  38595. 12,
  38596. 12,
  38597. 12,
  38598. 12,
  38599. 12,
  38600. 12,
  38601. 12,
  38602. 12,
  38603. 12,
  38604. 12,
  38605. 12,
  38606. 12,
  38607. 12,
  38608. 12,
  38609. 12,
  38610. 12,
  38611. 12,
  38612. 12,
  38613. 12,
  38614. 12,
  38615. 12,
  38616. 12,
  38617. 12,
  38618. 12,
  38619. 12,
  38620. 12,
  38621. 12,
  38622. 12,
  38623. 12,
  38624. 12,
  38625. 12,
  38626. 12,
  38627. 12,
  38628. 12,
  38629. 12,
  38630. 12,
  38631. 12,
  38632. 12,
  38633. 12,
  38634. 12,
  38635. 12,
  38636. 12,
  38637. 12,
  38638. 12,
  38639. 12,
  38640. 12,
  38641. 12,
  38642. 12,
  38643. 12,
  38644. 12,
  38645. 12,
  38646. 12,
  38647. 12,
  38648. 12,
  38649. 12,
  38650. 12,
  38651. 12,
  38652. 12,
  38653. 12,
  38654. 12,
  38655. 12,
  38656. 12,
  38657. 12,
  38658. 12,
  38659. 12,
  38660. 12,
  38661. 12,
  38662. 12,
  38663. 12,
  38664. 12,
  38665. 12,
  38666. 12,
  38667. 12,
  38668. 12,
  38669. 12,
  38670. 12,
  38671. 12,
  38672. 12,
  38673. 12,
  38674. 12,
  38675. 12,
  38676. 12,
  38677. 12,
  38678. 12,
  38679. 12,
  38680. 12,
  38681. 12,
  38682. 12,
  38683. 12,
  38684. 12,
  38685. 12,
  38686. 12,
  38687. 12,
  38688. 12,
  38689. 12,
  38690. 12,
  38691. 12,
  38692. 12,
  38693. 12,
  38694. 12,
  38695. 12,
  38696. 12,
  38697. 12,
  38698. 12,
  38699. 12,
  38700. 12,
  38701. 12,
  38702. 12,
  38703. 12,
  38704. 12,
  38705. 12,
  38706. 12,
  38707. 12,
  38708. 12,
  38709. 12,
  38710. 12,
  38711. 12,
  38712. 12,
  38713. 12,
  38714. 12,
  38715. 12,
  38716. 12,
  38717. 12,
  38718. 12,
  38719. 12,
  38720. 12,
  38721. 12,
  38722. 12,
  38723. 12,
  38724. 12,
  38725. 12,
  38726. 12,
  38727. 12,
  38728. 12,
  38729. 12,
  38730. 12,
  38731. 12,
  38732. 12,
  38733. 12,
  38734. 12,
  38735. 12,
  38736. 12,
  38737. 12,
  38738. 12,
  38739. 12,
  38740. 12,
  38741. 12,
  38742. 12,
  38743. 12,
  38744. 12,
  38745. 12,
  38746. 12,
  38747. 12,
  38748. 12,
  38749. 12,
  38750. 12,
  38751. 12,
  38752. 12,
  38753. 12,
  38754. 12,
  38755. 12,
  38756. 12,
  38757. 12,
  38758. 12,
  38759. 12,
  38760. 12,
  38761. 12,
  38762. 12,
  38763. 12,
  38764. 12,
  38765. 12,
  38766. 12,
  38767. 12,
  38768. 12,
  38769. 12,
  38770. 12,
  38771. 12,
  38772. 12,
  38773. 12,
  38774. 12,
  38775. 12,
  38776. 12,
  38777. 12,
  38778. 12,
  38779. 12,
  38780. 12,
  38781. 12,
  38782. 12,
  38783. 12,
  38784. 12,
  38785. 12,
  38786. 12,
  38787. 12,
  38788. 12,
  38789. 12,
  38790. 12,
  38791. 12,
  38792. 12,
  38793. 12,
  38794. 12,
  38795. 12,
  38796. 12,
  38797. 12,
  38798. 12,
  38799. 12,
  38800. 12,
  38801. 12,
  38802. 12,
  38803. 12,
  38804. 12,
  38805. 12,
  38806. 12,
  38807. 12,
  38808. 12,
  38809. 12,
  38810. 12,
  38811. 12,
  38812. 12,
  38813. 12,
  38814. 12,
  38815. 12,
  38816. 12,
  38817. 12,
  38818. 12,
  38819. 12,
  38820. 12,
  38821. 12,
  38822. 12,
  38823. 12,
  38824. 12,
  38825. 12,
  38826. 12,
  38827. 12,
  38828. 12,
  38829. 12,
  38830. 12,
  38831. 12,
  38832. 12,
  38833. 12,
  38834. 12,
  38835. 12,
  38836. 12,
  38837. 12,
  38838. 12,
  38839. 29,
  38840. 18,
  38841. 29,
  38842. 29,
  38843. 29,
  38844. 18,
  38845. 29,
  38846. 12,
  38847. 12,
  38848. 29,
  38849. 12,
  38850. 12,
  38851. 12,
  38852. 12,
  38853. 12,
  38854. 12,
  38855. 12,
  38856. 29,
  38857. 29,
  38858. 29,
  38859. 29,
  38860. 12,
  38861. 29,
  38862. 12,
  38863. 18,
  38864. 12,
  38865. 12,
  38866. 12,
  38867. 12,
  38868. 12,
  38869. 12,
  38870. 12,
  38871. 12,
  38872. 12,
  38873. 12,
  38874. 12,
  38875. 12,
  38876. 12,
  38877. 12,
  38878. 12,
  38879. 12,
  38880. 12,
  38881. 12,
  38882. 12,
  38883. 12,
  38884. 12,
  38885. 12,
  38886. 12,
  38887. 12,
  38888. 12,
  38889. 12,
  38890. 12,
  38891. 12,
  38892. 12,
  38893. 12,
  38894. 12,
  38895. 12,
  38896. 21,
  38897. 21,
  38898. 21,
  38899. 21,
  38900. 21,
  38901. 21,
  38902. 21,
  38903. 21,
  38904. 21,
  38905. 21,
  38906. 21,
  38907. 21,
  38908. 21,
  38909. 21,
  38910. 21,
  38911. 21,
  38912. 21,
  38913. 21,
  38914. 21,
  38915. 21,
  38916. 21,
  38917. 21,
  38918. 21,
  38919. 21,
  38920. 21,
  38921. 21,
  38922. 21,
  38923. 21,
  38924. 21,
  38925. 21,
  38926. 21,
  38927. 21,
  38928. 21,
  38929. 21,
  38930. 21,
  38931. 21,
  38932. 21,
  38933. 21,
  38934. 21,
  38935. 21,
  38936. 21,
  38937. 21,
  38938. 21,
  38939. 21,
  38940. 21,
  38941. 21,
  38942. 21,
  38943. 21,
  38944. 21,
  38945. 21,
  38946. 21,
  38947. 21,
  38948. 21,
  38949. 21,
  38950. 21,
  38951. 21,
  38952. 21,
  38953. 21,
  38954. 21,
  38955. 21,
  38956. 21,
  38957. 21,
  38958. 21,
  38959. 21,
  38960. 21,
  38961. 21,
  38962. 21,
  38963. 21,
  38964. 21,
  38965. 21,
  38966. 21,
  38967. 21,
  38968. 21,
  38969. 21,
  38970. 21,
  38971. 21,
  38972. 21,
  38973. 21,
  38974. 21,
  38975. 4,
  38976. 21,
  38977. 21,
  38978. 21,
  38979. 21,
  38980. 21,
  38981. 21,
  38982. 21,
  38983. 21,
  38984. 21,
  38985. 21,
  38986. 21,
  38987. 21,
  38988. 4,
  38989. 4,
  38990. 4,
  38991. 4,
  38992. 4,
  38993. 4,
  38994. 4,
  38995. 21,
  38996. 21,
  38997. 21,
  38998. 21,
  38999. 21,
  39000. 21,
  39001. 21,
  39002. 21,
  39003. 21,
  39004. 21,
  39005. 21,
  39006. 21,
  39007. 21,
  39008. 12,
  39009. 12,
  39010. 12,
  39011. 12,
  39012. 12,
  39013. 12,
  39014. 12,
  39015. 12,
  39016. 12,
  39017. 12,
  39018. 12,
  39019. 12,
  39020. 12,
  39021. 12,
  39022. 8,
  39023. 39,
  39024. 39,
  39025. 39,
  39026. 39,
  39027. 39,
  39028. 12,
  39029. 12,
  39030. 12,
  39031. 12,
  39032. 12,
  39033. 12,
  39034. 12,
  39035. 12,
  39036. 12,
  39037. 12,
  39038. 12,
  39039. 12,
  39040. 12,
  39041. 12,
  39042. 12,
  39043. 12,
  39044. 12,
  39045. 12,
  39046. 12,
  39047. 12,
  39048. 12,
  39049. 12,
  39050. 12,
  39051. 12,
  39052. 12,
  39053. 12,
  39054. 12,
  39055. 12,
  39056. 12,
  39057. 12,
  39058. 12,
  39059. 12,
  39060. 12,
  39061. 12,
  39062. 12,
  39063. 12,
  39064. 12,
  39065. 12,
  39066. 12,
  39067. 12,
  39068. 12,
  39069. 12,
  39070. 12,
  39071. 12,
  39072. 12,
  39073. 12,
  39074. 12,
  39075. 12,
  39076. 12,
  39077. 12,
  39078. 12,
  39079. 12,
  39080. 12,
  39081. 12,
  39082. 12,
  39083. 12,
  39084. 12,
  39085. 12,
  39086. 12,
  39087. 12,
  39088. 12,
  39089. 12,
  39090. 12,
  39091. 12,
  39092. 12,
  39093. 12,
  39094. 12,
  39095. 12,
  39096. 12,
  39097. 12,
  39098. 12,
  39099. 12,
  39100. 12,
  39101. 12,
  39102. 12,
  39103. 12,
  39104. 12,
  39105. 12,
  39106. 12,
  39107. 12,
  39108. 12,
  39109. 12,
  39110. 12,
  39111. 12,
  39112. 12,
  39113. 12,
  39114. 12,
  39115. 12,
  39116. 12,
  39117. 12,
  39118. 12,
  39119. 12,
  39120. 12,
  39121. 12,
  39122. 12,
  39123. 12,
  39124. 12,
  39125. 12,
  39126. 12,
  39127. 12,
  39128. 12,
  39129. 12,
  39130. 12,
  39131. 12,
  39132. 12,
  39133. 12,
  39134. 12,
  39135. 12,
  39136. 12,
  39137. 12,
  39138. 12,
  39139. 12,
  39140. 12,
  39141. 12,
  39142. 12,
  39143. 12,
  39144. 12,
  39145. 12,
  39146. 12,
  39147. 12,
  39148. 12,
  39149. 12,
  39150. 12,
  39151. 12,
  39152. 12,
  39153. 12,
  39154. 12,
  39155. 12,
  39156. 12,
  39157. 12,
  39158. 12,
  39159. 12,
  39160. 12,
  39161. 12,
  39162. 12,
  39163. 12,
  39164. 12,
  39165. 12,
  39166. 12,
  39167. 12,
  39168. 12,
  39169. 12,
  39170. 12,
  39171. 12,
  39172. 12,
  39173. 12,
  39174. 12,
  39175. 12,
  39176. 12,
  39177. 12,
  39178. 12,
  39179. 12,
  39180. 12,
  39181. 12,
  39182. 12,
  39183. 12,
  39184. 12,
  39185. 12,
  39186. 12,
  39187. 12,
  39188. 12,
  39189. 12,
  39190. 12,
  39191. 12,
  39192. 12,
  39193. 12,
  39194. 12,
  39195. 12,
  39196. 12,
  39197. 12,
  39198. 12,
  39199. 12,
  39200. 12,
  39201. 12,
  39202. 12,
  39203. 12,
  39204. 12,
  39205. 12,
  39206. 12,
  39207. 12,
  39208. 12,
  39209. 12,
  39210. 12,
  39211. 12,
  39212. 12,
  39213. 12,
  39214. 12,
  39215. 12,
  39216. 12,
  39217. 12,
  39218. 12,
  39219. 12,
  39220. 12,
  39221. 12,
  39222. 12,
  39223. 12,
  39224. 12,
  39225. 12,
  39226. 12,
  39227. 12,
  39228. 12,
  39229. 12,
  39230. 12,
  39231. 12,
  39232. 12,
  39233. 12,
  39234. 12,
  39235. 12,
  39236. 12,
  39237. 12,
  39238. 12,
  39239. 12,
  39240. 12,
  39241. 12,
  39242. 12,
  39243. 12,
  39244. 12,
  39245. 12,
  39246. 12,
  39247. 12,
  39248. 12,
  39249. 12,
  39250. 12,
  39251. 12,
  39252. 12,
  39253. 12,
  39254. 12,
  39255. 12,
  39256. 12,
  39257. 12,
  39258. 12,
  39259. 12,
  39260. 12,
  39261. 12,
  39262. 12,
  39263. 12,
  39264. 12,
  39265. 12,
  39266. 12,
  39267. 12,
  39268. 12,
  39269. 12,
  39270. 12,
  39271. 12,
  39272. 12,
  39273. 12,
  39274. 12,
  39275. 12,
  39276. 12,
  39277. 12,
  39278. 12,
  39279. 12,
  39280. 12,
  39281. 12,
  39282. 12,
  39283. 21,
  39284. 21,
  39285. 21,
  39286. 21,
  39287. 21,
  39288. 21,
  39289. 21,
  39290. 12,
  39291. 12,
  39292. 12,
  39293. 12,
  39294. 12,
  39295. 12,
  39296. 12,
  39297. 12,
  39298. 12,
  39299. 12,
  39300. 12,
  39301. 12,
  39302. 12,
  39303. 12,
  39304. 12,
  39305. 12,
  39306. 12,
  39307. 12,
  39308. 12,
  39309. 12,
  39310. 12,
  39311. 12,
  39312. 12,
  39313. 12,
  39314. 12,
  39315. 12,
  39316. 12,
  39317. 12,
  39318. 12,
  39319. 12,
  39320. 12,
  39321. 12,
  39322. 12,
  39323. 12,
  39324. 12,
  39325. 12,
  39326. 12,
  39327. 12,
  39328. 12,
  39329. 12,
  39330. 12,
  39331. 12,
  39332. 12,
  39333. 12,
  39334. 12,
  39335. 12,
  39336. 12,
  39337. 12,
  39338. 12,
  39339. 12,
  39340. 12,
  39341. 12,
  39342. 12,
  39343. 12,
  39344. 12,
  39345. 12,
  39346. 12,
  39347. 12,
  39348. 12,
  39349. 12,
  39350. 12,
  39351. 12,
  39352. 12,
  39353. 12,
  39354. 12,
  39355. 12,
  39356. 12,
  39357. 12,
  39358. 12,
  39359. 12,
  39360. 12,
  39361. 12,
  39362. 12,
  39363. 12,
  39364. 12,
  39365. 12,
  39366. 12,
  39367. 12,
  39368. 12,
  39369. 12,
  39370. 12,
  39371. 12,
  39372. 12,
  39373. 12,
  39374. 12,
  39375. 12,
  39376. 12,
  39377. 12,
  39378. 12,
  39379. 12,
  39380. 12,
  39381. 12,
  39382. 12,
  39383. 12,
  39384. 12,
  39385. 12,
  39386. 12,
  39387. 12,
  39388. 12,
  39389. 12,
  39390. 12,
  39391. 12,
  39392. 12,
  39393. 12,
  39394. 12,
  39395. 12,
  39396. 12,
  39397. 12,
  39398. 12,
  39399. 12,
  39400. 12,
  39401. 12,
  39402. 12,
  39403. 12,
  39404. 12,
  39405. 12,
  39406. 12,
  39407. 12,
  39408. 12,
  39409. 12,
  39410. 12,
  39411. 12,
  39412. 12,
  39413. 12,
  39414. 12,
  39415. 12,
  39416. 12,
  39417. 12,
  39418. 12,
  39419. 12,
  39420. 12,
  39421. 12,
  39422. 12,
  39423. 12,
  39424. 12,
  39425. 12,
  39426. 12,
  39427. 12,
  39428. 12,
  39429. 12,
  39430. 12,
  39431. 12,
  39432. 12,
  39433. 12,
  39434. 12,
  39435. 12,
  39436. 12,
  39437. 12,
  39438. 12,
  39439. 12,
  39440. 12,
  39441. 12,
  39442. 12,
  39443. 12,
  39444. 12,
  39445. 12,
  39446. 12,
  39447. 12,
  39448. 12,
  39449. 12,
  39450. 12,
  39451. 12,
  39452. 12,
  39453. 12,
  39454. 12,
  39455. 12,
  39456. 12,
  39457. 12,
  39458. 12,
  39459. 12,
  39460. 12,
  39461. 12,
  39462. 12,
  39463. 12,
  39464. 12,
  39465. 12,
  39466. 12,
  39467. 12,
  39468. 12,
  39469. 12,
  39470. 12,
  39471. 12,
  39472. 12,
  39473. 12,
  39474. 12,
  39475. 12,
  39476. 12,
  39477. 12,
  39478. 12,
  39479. 12,
  39480. 12,
  39481. 12,
  39482. 12,
  39483. 12,
  39484. 12,
  39485. 12,
  39486. 12,
  39487. 12,
  39488. 12,
  39489. 12,
  39490. 12,
  39491. 12,
  39492. 12,
  39493. 12,
  39494. 12,
  39495. 12,
  39496. 12,
  39497. 12,
  39498. 12,
  39499. 12,
  39500. 12,
  39501. 12,
  39502. 12,
  39503. 12,
  39504. 12,
  39505. 12,
  39506. 12,
  39507. 12,
  39508. 12,
  39509. 12,
  39510. 12,
  39511. 12,
  39512. 12,
  39513. 12,
  39514. 12,
  39515. 12,
  39516. 12,
  39517. 12,
  39518. 12,
  39519. 12,
  39520. 12,
  39521. 12,
  39522. 12,
  39523. 12,
  39524. 12,
  39525. 12,
  39526. 12,
  39527. 12,
  39528. 12,
  39529. 12,
  39530. 12,
  39531. 12,
  39532. 12,
  39533. 12,
  39534. 12,
  39535. 12,
  39536. 12,
  39537. 12,
  39538. 12,
  39539. 12,
  39540. 12,
  39541. 12,
  39542. 12,
  39543. 12,
  39544. 39,
  39545. 8,
  39546. 17,
  39547. 39,
  39548. 39,
  39549. 39,
  39550. 39,
  39551. 9,
  39552. 39,
  39553. 21,
  39554. 21,
  39555. 21,
  39556. 21,
  39557. 21,
  39558. 21,
  39559. 21,
  39560. 21,
  39561. 21,
  39562. 21,
  39563. 21,
  39564. 21,
  39565. 21,
  39566. 21,
  39567. 21,
  39568. 21,
  39569. 21,
  39570. 21,
  39571. 21,
  39572. 21,
  39573. 21,
  39574. 21,
  39575. 21,
  39576. 21,
  39577. 21,
  39578. 21,
  39579. 21,
  39580. 21,
  39581. 21,
  39582. 21,
  39583. 21,
  39584. 21,
  39585. 21,
  39586. 21,
  39587. 21,
  39588. 21,
  39589. 21,
  39590. 21,
  39591. 21,
  39592. 21,
  39593. 21,
  39594. 21,
  39595. 21,
  39596. 21,
  39597. 21,
  39598. 17,
  39599. 21,
  39600. 12,
  39601. 21,
  39602. 21,
  39603. 12,
  39604. 21,
  39605. 21,
  39606. 6,
  39607. 21,
  39608. 39,
  39609. 39,
  39610. 39,
  39611. 39,
  39612. 39,
  39613. 39,
  39614. 39,
  39615. 39,
  39616. 13,
  39617. 13,
  39618. 13,
  39619. 13,
  39620. 13,
  39621. 13,
  39622. 13,
  39623. 13,
  39624. 13,
  39625. 13,
  39626. 13,
  39627. 13,
  39628. 13,
  39629. 13,
  39630. 13,
  39631. 13,
  39632. 13,
  39633. 13,
  39634. 13,
  39635. 13,
  39636. 13,
  39637. 13,
  39638. 13,
  39639. 13,
  39640. 13,
  39641. 13,
  39642. 13,
  39643. 13,
  39644. 13,
  39645. 13,
  39646. 13,
  39647. 13,
  39648. 13,
  39649. 13,
  39650. 13,
  39651. 12,
  39652. 12,
  39653. 12,
  39654. 12,
  39655. 12,
  39656. 12,
  39657. 12,
  39658. 12,
  39659. 12,
  39660. 12,
  39661. 12,
  39662. 12,
  39663. 12,
  39664. 12,
  39665. 12,
  39666. 12,
  39667. 12,
  39668. 12,
  39669. 12,
  39670. 12,
  39671. 12,
  39672. 12,
  39673. 10,
  39674. 10,
  39675. 10,
  39676. 8,
  39677. 8,
  39678. 12,
  39679. 12,
  39680. 21,
  39681. 21,
  39682. 21,
  39683. 21,
  39684. 21,
  39685. 21,
  39686. 21,
  39687. 21,
  39688. 21,
  39689. 21,
  39690. 21,
  39691. 6,
  39692. 6,
  39693. 6,
  39694. 6,
  39695. 6,
  39696. 12,
  39697. 12,
  39698. 12,
  39699. 12,
  39700. 12,
  39701. 12,
  39702. 12,
  39703. 12,
  39704. 12,
  39705. 12,
  39706. 12,
  39707. 12,
  39708. 12,
  39709. 12,
  39710. 12,
  39711. 12,
  39712. 12,
  39713. 12,
  39714. 12,
  39715. 12,
  39716. 12,
  39717. 12,
  39718. 12,
  39719. 12,
  39720. 12,
  39721. 12,
  39722. 12,
  39723. 12,
  39724. 12,
  39725. 12,
  39726. 12,
  39727. 12,
  39728. 12,
  39729. 12,
  39730. 12,
  39731. 12,
  39732. 12,
  39733. 12,
  39734. 12,
  39735. 12,
  39736. 12,
  39737. 12,
  39738. 12,
  39739. 21,
  39740. 21,
  39741. 21,
  39742. 21,
  39743. 21,
  39744. 21,
  39745. 21,
  39746. 21,
  39747. 21,
  39748. 21,
  39749. 21,
  39750. 21,
  39751. 21,
  39752. 21,
  39753. 21,
  39754. 21,
  39755. 21,
  39756. 21,
  39757. 21,
  39758. 21,
  39759. 21,
  39760. 11,
  39761. 11,
  39762. 11,
  39763. 11,
  39764. 11,
  39765. 11,
  39766. 11,
  39767. 11,
  39768. 11,
  39769. 11,
  39770. 10,
  39771. 11,
  39772. 11,
  39773. 12,
  39774. 12,
  39775. 12,
  39776. 21,
  39777. 12,
  39778. 12,
  39779. 12,
  39780. 12,
  39781. 12,
  39782. 12,
  39783. 12,
  39784. 12,
  39785. 12,
  39786. 12,
  39787. 12,
  39788. 12,
  39789. 12,
  39790. 12,
  39791. 12,
  39792. 12,
  39793. 12,
  39794. 12,
  39795. 12,
  39796. 12,
  39797. 12,
  39798. 12,
  39799. 12,
  39800. 12,
  39801. 12,
  39802. 12,
  39803. 12,
  39804. 12,
  39805. 12,
  39806. 12,
  39807. 12,
  39808. 12,
  39809. 12,
  39810. 12,
  39811. 12,
  39812. 12,
  39813. 12,
  39814. 12,
  39815. 12,
  39816. 12,
  39817. 12,
  39818. 12,
  39819. 12,
  39820. 12,
  39821. 12,
  39822. 12,
  39823. 12,
  39824. 12,
  39825. 12,
  39826. 12,
  39827. 12,
  39828. 12,
  39829. 12,
  39830. 12,
  39831. 12,
  39832. 12,
  39833. 12,
  39834. 12,
  39835. 12,
  39836. 12,
  39837. 12,
  39838. 12,
  39839. 12,
  39840. 12,
  39841. 12,
  39842. 12,
  39843. 12,
  39844. 12,
  39845. 12,
  39846. 12,
  39847. 12,
  39848. 12,
  39849. 12,
  39850. 12,
  39851. 12,
  39852. 12,
  39853. 12,
  39854. 12,
  39855. 12,
  39856. 12,
  39857. 12,
  39858. 12,
  39859. 12,
  39860. 12,
  39861. 12,
  39862. 12,
  39863. 12,
  39864. 12,
  39865. 12,
  39866. 12,
  39867. 12,
  39868. 12,
  39869. 12,
  39870. 12,
  39871. 12,
  39872. 12,
  39873. 12,
  39874. 12,
  39875. 12,
  39876. 6,
  39877. 12,
  39878. 21,
  39879. 21,
  39880. 21,
  39881. 21,
  39882. 21,
  39883. 21,
  39884. 21,
  39885. 12,
  39886. 12,
  39887. 21,
  39888. 21,
  39889. 21,
  39890. 21,
  39891. 21,
  39892. 21,
  39893. 12,
  39894. 12,
  39895. 21,
  39896. 21,
  39897. 12,
  39898. 21,
  39899. 21,
  39900. 21,
  39901. 21,
  39902. 12,
  39903. 12,
  39904. 11,
  39905. 11,
  39906. 11,
  39907. 11,
  39908. 11,
  39909. 11,
  39910. 11,
  39911. 11,
  39912. 11,
  39913. 11,
  39914. 12,
  39915. 12,
  39916. 12,
  39917. 12,
  39918. 12,
  39919. 12,
  39920. 12,
  39921. 12,
  39922. 12,
  39923. 12,
  39924. 12,
  39925. 12,
  39926. 12,
  39927. 12,
  39928. 12,
  39929. 12,
  39930. 12,
  39931. 12,
  39932. 12,
  39933. 12,
  39934. 12,
  39935. 12,
  39936. 12,
  39937. 21,
  39938. 12,
  39939. 12,
  39940. 12,
  39941. 12,
  39942. 12,
  39943. 12,
  39944. 12,
  39945. 12,
  39946. 12,
  39947. 12,
  39948. 12,
  39949. 12,
  39950. 12,
  39951. 12,
  39952. 12,
  39953. 12,
  39954. 12,
  39955. 12,
  39956. 12,
  39957. 12,
  39958. 12,
  39959. 12,
  39960. 12,
  39961. 12,
  39962. 12,
  39963. 12,
  39964. 12,
  39965. 12,
  39966. 12,
  39967. 12,
  39968. 21,
  39969. 21,
  39970. 21,
  39971. 21,
  39972. 21,
  39973. 21,
  39974. 21,
  39975. 21,
  39976. 21,
  39977. 21,
  39978. 21,
  39979. 21,
  39980. 21,
  39981. 21,
  39982. 21,
  39983. 21,
  39984. 21,
  39985. 21,
  39986. 21,
  39987. 21,
  39988. 21,
  39989. 21,
  39990. 21,
  39991. 21,
  39992. 21,
  39993. 21,
  39994. 21,
  39995. 39,
  39996. 39,
  39997. 12,
  39998. 12,
  39999. 12,
  40000. 12,
  40001. 12,
  40002. 12,
  40003. 12,
  40004. 12,
  40005. 12,
  40006. 12,
  40007. 12,
  40008. 12,
  40009. 12,
  40010. 12,
  40011. 12,
  40012. 12,
  40013. 12,
  40014. 12,
  40015. 12,
  40016. 12,
  40017. 12,
  40018. 12,
  40019. 12,
  40020. 12,
  40021. 12,
  40022. 12,
  40023. 12,
  40024. 12,
  40025. 12,
  40026. 12,
  40027. 12,
  40028. 12,
  40029. 12,
  40030. 12,
  40031. 12,
  40032. 12,
  40033. 12,
  40034. 12,
  40035. 12,
  40036. 12,
  40037. 12,
  40038. 12,
  40039. 12,
  40040. 12,
  40041. 12,
  40042. 12,
  40043. 12,
  40044. 12,
  40045. 12,
  40046. 12,
  40047. 12,
  40048. 12,
  40049. 12,
  40050. 12,
  40051. 12,
  40052. 12,
  40053. 12,
  40054. 12,
  40055. 12,
  40056. 12,
  40057. 12,
  40058. 12,
  40059. 12,
  40060. 12,
  40061. 12,
  40062. 12,
  40063. 12,
  40064. 12,
  40065. 12,
  40066. 12,
  40067. 12,
  40068. 12,
  40069. 12,
  40070. 12,
  40071. 12,
  40072. 12,
  40073. 12,
  40074. 12,
  40075. 12,
  40076. 12,
  40077. 12,
  40078. 12,
  40079. 12,
  40080. 12,
  40081. 12,
  40082. 12,
  40083. 12,
  40084. 12,
  40085. 12,
  40086. 21,
  40087. 21,
  40088. 21,
  40089. 21,
  40090. 21,
  40091. 21,
  40092. 21,
  40093. 21,
  40094. 21,
  40095. 21,
  40096. 21,
  40097. 12,
  40098. 39,
  40099. 39,
  40100. 39,
  40101. 39,
  40102. 39,
  40103. 39,
  40104. 39,
  40105. 39,
  40106. 39,
  40107. 39,
  40108. 39,
  40109. 39,
  40110. 39,
  40111. 39,
  40112. 11,
  40113. 11,
  40114. 11,
  40115. 11,
  40116. 11,
  40117. 11,
  40118. 11,
  40119. 11,
  40120. 11,
  40121. 11,
  40122. 12,
  40123. 12,
  40124. 12,
  40125. 12,
  40126. 12,
  40127. 12,
  40128. 12,
  40129. 12,
  40130. 12,
  40131. 12,
  40132. 12,
  40133. 12,
  40134. 12,
  40135. 12,
  40136. 12,
  40137. 12,
  40138. 12,
  40139. 12,
  40140. 12,
  40141. 12,
  40142. 12,
  40143. 12,
  40144. 12,
  40145. 12,
  40146. 12,
  40147. 12,
  40148. 12,
  40149. 12,
  40150. 12,
  40151. 12,
  40152. 12,
  40153. 12,
  40154. 12,
  40155. 21,
  40156. 21,
  40157. 21,
  40158. 21,
  40159. 21,
  40160. 21,
  40161. 21,
  40162. 21,
  40163. 21,
  40164. 12,
  40165. 12,
  40166. 12,
  40167. 12,
  40168. 8,
  40169. 6,
  40170. 12,
  40171. 12,
  40172. 12,
  40173. 12,
  40174. 12,
  40175. 12,
  40176. 12,
  40177. 12,
  40178. 12,
  40179. 12,
  40180. 12,
  40181. 12,
  40182. 12,
  40183. 12,
  40184. 12,
  40185. 12,
  40186. 12,
  40187. 12,
  40188. 12,
  40189. 12,
  40190. 12,
  40191. 12,
  40192. 12,
  40193. 12,
  40194. 12,
  40195. 12,
  40196. 12,
  40197. 12,
  40198. 21,
  40199. 21,
  40200. 21,
  40201. 21,
  40202. 12,
  40203. 21,
  40204. 21,
  40205. 21,
  40206. 21,
  40207. 21,
  40208. 21,
  40209. 21,
  40210. 21,
  40211. 21,
  40212. 12,
  40213. 21,
  40214. 21,
  40215. 21,
  40216. 12,
  40217. 21,
  40218. 21,
  40219. 21,
  40220. 21,
  40221. 21,
  40222. 39,
  40223. 39,
  40224. 12,
  40225. 12,
  40226. 12,
  40227. 12,
  40228. 12,
  40229. 12,
  40230. 12,
  40231. 12,
  40232. 12,
  40233. 12,
  40234. 12,
  40235. 12,
  40236. 12,
  40237. 12,
  40238. 12,
  40239. 12,
  40240. 12,
  40241. 12,
  40242. 12,
  40243. 12,
  40244. 12,
  40245. 12,
  40246. 12,
  40247. 12,
  40248. 12,
  40249. 12,
  40250. 12,
  40251. 12,
  40252. 12,
  40253. 12,
  40254. 12,
  40255. 12,
  40256. 12,
  40257. 12,
  40258. 12,
  40259. 12,
  40260. 12,
  40261. 12,
  40262. 12,
  40263. 12,
  40264. 12,
  40265. 21,
  40266. 21,
  40267. 21,
  40268. 39,
  40269. 39,
  40270. 12,
  40271. 12,
  40272. 12,
  40273. 12,
  40274. 12,
  40275. 12,
  40276. 12,
  40277. 12,
  40278. 12,
  40279. 12,
  40280. 12,
  40281. 12,
  40282. 12,
  40283. 12,
  40284. 12,
  40285. 12,
  40286. 12,
  40287. 12,
  40288. 12,
  40289. 12,
  40290. 12,
  40291. 12,
  40292. 12,
  40293. 12,
  40294. 12,
  40295. 12,
  40296. 12,
  40297. 12,
  40298. 12,
  40299. 12,
  40300. 12,
  40301. 12,
  40302. 12,
  40303. 12,
  40304. 12,
  40305. 12,
  40306. 12,
  40307. 12,
  40308. 12,
  40309. 12,
  40310. 12,
  40311. 12,
  40312. 12,
  40313. 12,
  40314. 12,
  40315. 12,
  40316. 12,
  40317. 39,
  40318. 39,
  40319. 39,
  40320. 39,
  40321. 39,
  40322. 39,
  40323. 39,
  40324. 39,
  40325. 39,
  40326. 39,
  40327. 39,
  40328. 39,
  40329. 39,
  40330. 39,
  40331. 39,
  40332. 39,
  40333. 39,
  40334. 39,
  40335. 39,
  40336. 39,
  40337. 39,
  40338. 39,
  40339. 39,
  40340. 21,
  40341. 21,
  40342. 21,
  40343. 21,
  40344. 21,
  40345. 21,
  40346. 21,
  40347. 21,
  40348. 21,
  40349. 21,
  40350. 21,
  40351. 21,
  40352. 21,
  40353. 21,
  40354. 21,
  40355. 21,
  40356. 21,
  40357. 21,
  40358. 21,
  40359. 21,
  40360. 21,
  40361. 21,
  40362. 21,
  40363. 21,
  40364. 21,
  40365. 21,
  40366. 21,
  40367. 21,
  40368. 21,
  40369. 21,
  40370. 21,
  40371. 21,
  40372. 12,
  40373. 12,
  40374. 12,
  40375. 12,
  40376. 12,
  40377. 12,
  40378. 12,
  40379. 12,
  40380. 12,
  40381. 12,
  40382. 12,
  40383. 12,
  40384. 12,
  40385. 12,
  40386. 12,
  40387. 12,
  40388. 12,
  40389. 12,
  40390. 12,
  40391. 12,
  40392. 12,
  40393. 12,
  40394. 12,
  40395. 12,
  40396. 12,
  40397. 12,
  40398. 12,
  40399. 12,
  40400. 12,
  40401. 12,
  40402. 12,
  40403. 12,
  40404. 12,
  40405. 12,
  40406. 12,
  40407. 12,
  40408. 12,
  40409. 12,
  40410. 12,
  40411. 12,
  40412. 12,
  40413. 12,
  40414. 12,
  40415. 12,
  40416. 12,
  40417. 12,
  40418. 12,
  40419. 12,
  40420. 12,
  40421. 12,
  40422. 12,
  40423. 12,
  40424. 12,
  40425. 12,
  40426. 21,
  40427. 21,
  40428. 21,
  40429. 12,
  40430. 21,
  40431. 21,
  40432. 21,
  40433. 21,
  40434. 21,
  40435. 21,
  40436. 21,
  40437. 21,
  40438. 21,
  40439. 21,
  40440. 21,
  40441. 21,
  40442. 21,
  40443. 21,
  40444. 21,
  40445. 21,
  40446. 21,
  40447. 21,
  40448. 12,
  40449. 21,
  40450. 21,
  40451. 21,
  40452. 21,
  40453. 21,
  40454. 21,
  40455. 21,
  40456. 12,
  40457. 12,
  40458. 12,
  40459. 12,
  40460. 12,
  40461. 12,
  40462. 12,
  40463. 12,
  40464. 12,
  40465. 12,
  40466. 21,
  40467. 21,
  40468. 17,
  40469. 17,
  40470. 11,
  40471. 11,
  40472. 11,
  40473. 11,
  40474. 11,
  40475. 11,
  40476. 11,
  40477. 11,
  40478. 11,
  40479. 11,
  40480. 12,
  40481. 12,
  40482. 12,
  40483. 12,
  40484. 12,
  40485. 12,
  40486. 12,
  40487. 12,
  40488. 12,
  40489. 12,
  40490. 12,
  40491. 12,
  40492. 12,
  40493. 12,
  40494. 12,
  40495. 12,
  40496. 39,
  40497. 21,
  40498. 21,
  40499. 21,
  40500. 39,
  40501. 12,
  40502. 12,
  40503. 12,
  40504. 12,
  40505. 12,
  40506. 12,
  40507. 12,
  40508. 12,
  40509. 12,
  40510. 12,
  40511. 12,
  40512. 12,
  40513. 12,
  40514. 12,
  40515. 12,
  40516. 12,
  40517. 12,
  40518. 12,
  40519. 12,
  40520. 12,
  40521. 12,
  40522. 12,
  40523. 12,
  40524. 12,
  40525. 12,
  40526. 12,
  40527. 12,
  40528. 12,
  40529. 12,
  40530. 12,
  40531. 12,
  40532. 12,
  40533. 12,
  40534. 12,
  40535. 12,
  40536. 12,
  40537. 12,
  40538. 12,
  40539. 12,
  40540. 12,
  40541. 12,
  40542. 12,
  40543. 12,
  40544. 12,
  40545. 12,
  40546. 12,
  40547. 12,
  40548. 12,
  40549. 12,
  40550. 12,
  40551. 12,
  40552. 12,
  40553. 12,
  40554. 39,
  40555. 39,
  40556. 21,
  40557. 12,
  40558. 21,
  40559. 21,
  40560. 21,
  40561. 21,
  40562. 21,
  40563. 21,
  40564. 21,
  40565. 21,
  40566. 21,
  40567. 21,
  40568. 21,
  40569. 21,
  40570. 21,
  40571. 21,
  40572. 21,
  40573. 21,
  40574. 12,
  40575. 39,
  40576. 39,
  40577. 39,
  40578. 39,
  40579. 39,
  40580. 39,
  40581. 39,
  40582. 39,
  40583. 21,
  40584. 39,
  40585. 39,
  40586. 39,
  40587. 39,
  40588. 12,
  40589. 12,
  40590. 12,
  40591. 12,
  40592. 12,
  40593. 12,
  40594. 21,
  40595. 21,
  40596. 39,
  40597. 39,
  40598. 11,
  40599. 11,
  40600. 11,
  40601. 11,
  40602. 11,
  40603. 11,
  40604. 11,
  40605. 11,
  40606. 11,
  40607. 11,
  40608. 12,
  40609. 12,
  40610. 10,
  40611. 10,
  40612. 12,
  40613. 12,
  40614. 12,
  40615. 12,
  40616. 12,
  40617. 10,
  40618. 12,
  40619. 9,
  40620. 39,
  40621. 39,
  40622. 39,
  40623. 39,
  40624. 39,
  40625. 21,
  40626. 21,
  40627. 21,
  40628. 39,
  40629. 12,
  40630. 12,
  40631. 12,
  40632. 12,
  40633. 12,
  40634. 12,
  40635. 12,
  40636. 12,
  40637. 12,
  40638. 12,
  40639. 12,
  40640. 12,
  40641. 12,
  40642. 12,
  40643. 12,
  40644. 12,
  40645. 12,
  40646. 12,
  40647. 12,
  40648. 12,
  40649. 12,
  40650. 12,
  40651. 12,
  40652. 12,
  40653. 12,
  40654. 12,
  40655. 12,
  40656. 12,
  40657. 12,
  40658. 12,
  40659. 12,
  40660. 12,
  40661. 12,
  40662. 12,
  40663. 12,
  40664. 12,
  40665. 12,
  40666. 12,
  40667. 12,
  40668. 12,
  40669. 12,
  40670. 12,
  40671. 12,
  40672. 12,
  40673. 12,
  40674. 12,
  40675. 12,
  40676. 12,
  40677. 12,
  40678. 12,
  40679. 12,
  40680. 12,
  40681. 12,
  40682. 39,
  40683. 39,
  40684. 21,
  40685. 21,
  40686. 21,
  40687. 21,
  40688. 21,
  40689. 21,
  40690. 21,
  40691. 21,
  40692. 21,
  40693. 21,
  40694. 21,
  40695. 21,
  40696. 21,
  40697. 21,
  40698. 21,
  40699. 21,
  40700. 21,
  40701. 21,
  40702. 21,
  40703. 21,
  40704. 21,
  40705. 21,
  40706. 39,
  40707. 39,
  40708. 39,
  40709. 39,
  40710. 39,
  40711. 39,
  40712. 39,
  40713. 12,
  40714. 12,
  40715. 12,
  40716. 12,
  40717. 12,
  40718. 12,
  40719. 39,
  40720. 39,
  40721. 39,
  40722. 39,
  40723. 39,
  40724. 39,
  40725. 39,
  40726. 11,
  40727. 11,
  40728. 11,
  40729. 11,
  40730. 11,
  40731. 11,
  40732. 11,
  40733. 11,
  40734. 11,
  40735. 11,
  40736. 21,
  40737. 21,
  40738. 12,
  40739. 12,
  40740. 12,
  40741. 21,
  40742. 21,
  40743. 21,
  40744. 21,
  40745. 21,
  40746. 21,
  40747. 21,
  40748. 21,
  40749. 21,
  40750. 21,
  40751. 21,
  40752. 21,
  40753. 21,
  40754. 21,
  40755. 21,
  40756. 39,
  40757. 12,
  40758. 12,
  40759. 12,
  40760. 12,
  40761. 12,
  40762. 12,
  40763. 12,
  40764. 12,
  40765. 12,
  40766. 12,
  40767. 12,
  40768. 12,
  40769. 12,
  40770. 12,
  40771. 12,
  40772. 12,
  40773. 12,
  40774. 12,
  40775. 12,
  40776. 12,
  40777. 12,
  40778. 12,
  40779. 12,
  40780. 12,
  40781. 12,
  40782. 12,
  40783. 12,
  40784. 12,
  40785. 12,
  40786. 12,
  40787. 12,
  40788. 12,
  40789. 12,
  40790. 12,
  40791. 12,
  40792. 12,
  40793. 12,
  40794. 12,
  40795. 12,
  40796. 12,
  40797. 12,
  40798. 12,
  40799. 12,
  40800. 12,
  40801. 12,
  40802. 12,
  40803. 12,
  40804. 12,
  40805. 12,
  40806. 12,
  40807. 12,
  40808. 12,
  40809. 12,
  40810. 39,
  40811. 39,
  40812. 21,
  40813. 12,
  40814. 21,
  40815. 21,
  40816. 21,
  40817. 21,
  40818. 21,
  40819. 21,
  40820. 21,
  40821. 21,
  40822. 21,
  40823. 21,
  40824. 21,
  40825. 21,
  40826. 21,
  40827. 21,
  40828. 21,
  40829. 21,
  40830. 39,
  40831. 39,
  40832. 12,
  40833. 12,
  40834. 12,
  40835. 12,
  40836. 12,
  40837. 12,
  40838. 12,
  40839. 12,
  40840. 12,
  40841. 12,
  40842. 12,
  40843. 12,
  40844. 12,
  40845. 12,
  40846. 12,
  40847. 12,
  40848. 12,
  40849. 12,
  40850. 21,
  40851. 21,
  40852. 39,
  40853. 39,
  40854. 11,
  40855. 11,
  40856. 11,
  40857. 11,
  40858. 11,
  40859. 11,
  40860. 11,
  40861. 11,
  40862. 11,
  40863. 11,
  40864. 12,
  40865. 9,
  40866. 39,
  40867. 39,
  40868. 39,
  40869. 39,
  40870. 39,
  40871. 39,
  40872. 39,
  40873. 39,
  40874. 39,
  40875. 39,
  40876. 39,
  40877. 39,
  40878. 39,
  40879. 39,
  40880. 39,
  40881. 21,
  40882. 21,
  40883. 21,
  40884. 39,
  40885. 12,
  40886. 12,
  40887. 12,
  40888. 12,
  40889. 12,
  40890. 12,
  40891. 12,
  40892. 12,
  40893. 12,
  40894. 12,
  40895. 12,
  40896. 12,
  40897. 12,
  40898. 12,
  40899. 12,
  40900. 12,
  40901. 12,
  40902. 12,
  40903. 12,
  40904. 12,
  40905. 12,
  40906. 12,
  40907. 12,
  40908. 12,
  40909. 12,
  40910. 12,
  40911. 12,
  40912. 12,
  40913. 12,
  40914. 12,
  40915. 12,
  40916. 12,
  40917. 12,
  40918. 12,
  40919. 12,
  40920. 12,
  40921. 12,
  40922. 12,
  40923. 12,
  40924. 12,
  40925. 12,
  40926. 12,
  40927. 12,
  40928. 12,
  40929. 12,
  40930. 12,
  40931. 12,
  40932. 12,
  40933. 12,
  40934. 12,
  40935. 12,
  40936. 12,
  40937. 12,
  40938. 39,
  40939. 39,
  40940. 21,
  40941. 12,
  40942. 21,
  40943. 21,
  40944. 21,
  40945. 21,
  40946. 21,
  40947. 21,
  40948. 21,
  40949. 21,
  40950. 21,
  40951. 21,
  40952. 21,
  40953. 21,
  40954. 21,
  40955. 21,
  40956. 21,
  40957. 21,
  40958. 21,
  40959. 21,
  40960. 21,
  40961. 21,
  40962. 21,
  40963. 21,
  40964. 21,
  40965. 21,
  40966. 21,
  40967. 21,
  40968. 39,
  40969. 39,
  40970. 39,
  40971. 39,
  40972. 12,
  40973. 12,
  40974. 12,
  40975. 12,
  40976. 12,
  40977. 12,
  40978. 21,
  40979. 21,
  40980. 39,
  40981. 39,
  40982. 11,
  40983. 11,
  40984. 11,
  40985. 11,
  40986. 11,
  40987. 11,
  40988. 11,
  40989. 11,
  40990. 11,
  40991. 11,
  40992. 12,
  40993. 12,
  40994. 12,
  40995. 12,
  40996. 12,
  40997. 12,
  40998. 12,
  40999. 12,
  41000. 39,
  41001. 39,
  41002. 39,
  41003. 39,
  41004. 39,
  41005. 39,
  41006. 39,
  41007. 39,
  41008. 39,
  41009. 39,
  41010. 21,
  41011. 12,
  41012. 12,
  41013. 12,
  41014. 12,
  41015. 12,
  41016. 12,
  41017. 12,
  41018. 12,
  41019. 12,
  41020. 12,
  41021. 12,
  41022. 12,
  41023. 12,
  41024. 12,
  41025. 12,
  41026. 12,
  41027. 12,
  41028. 12,
  41029. 12,
  41030. 12,
  41031. 12,
  41032. 12,
  41033. 12,
  41034. 12,
  41035. 12,
  41036. 12,
  41037. 12,
  41038. 12,
  41039. 12,
  41040. 12,
  41041. 12,
  41042. 12,
  41043. 12,
  41044. 12,
  41045. 12,
  41046. 12,
  41047. 12,
  41048. 12,
  41049. 12,
  41050. 12,
  41051. 12,
  41052. 12,
  41053. 12,
  41054. 12,
  41055. 12,
  41056. 12,
  41057. 12,
  41058. 12,
  41059. 12,
  41060. 12,
  41061. 12,
  41062. 12,
  41063. 12,
  41064. 12,
  41065. 12,
  41066. 39,
  41067. 39,
  41068. 39,
  41069. 39,
  41070. 21,
  41071. 21,
  41072. 21,
  41073. 21,
  41074. 21,
  41075. 21,
  41076. 21,
  41077. 21,
  41078. 21,
  41079. 21,
  41080. 21,
  41081. 21,
  41082. 21,
  41083. 21,
  41084. 21,
  41085. 21,
  41086. 39,
  41087. 39,
  41088. 12,
  41089. 39,
  41090. 39,
  41091. 39,
  41092. 39,
  41093. 39,
  41094. 39,
  41095. 21,
  41096. 39,
  41097. 39,
  41098. 39,
  41099. 39,
  41100. 39,
  41101. 39,
  41102. 39,
  41103. 39,
  41104. 39,
  41105. 39,
  41106. 39,
  41107. 39,
  41108. 39,
  41109. 39,
  41110. 11,
  41111. 11,
  41112. 11,
  41113. 11,
  41114. 11,
  41115. 11,
  41116. 11,
  41117. 11,
  41118. 11,
  41119. 11,
  41120. 12,
  41121. 12,
  41122. 12,
  41123. 12,
  41124. 12,
  41125. 12,
  41126. 12,
  41127. 12,
  41128. 12,
  41129. 9,
  41130. 12,
  41131. 39,
  41132. 39,
  41133. 39,
  41134. 39,
  41135. 39,
  41136. 39,
  41137. 21,
  41138. 21,
  41139. 21,
  41140. 39,
  41141. 12,
  41142. 12,
  41143. 12,
  41144. 12,
  41145. 12,
  41146. 12,
  41147. 12,
  41148. 12,
  41149. 12,
  41150. 12,
  41151. 12,
  41152. 12,
  41153. 12,
  41154. 12,
  41155. 12,
  41156. 12,
  41157. 12,
  41158. 12,
  41159. 12,
  41160. 12,
  41161. 12,
  41162. 12,
  41163. 12,
  41164. 12,
  41165. 12,
  41166. 12,
  41167. 12,
  41168. 12,
  41169. 12,
  41170. 12,
  41171. 12,
  41172. 12,
  41173. 12,
  41174. 12,
  41175. 12,
  41176. 12,
  41177. 12,
  41178. 12,
  41179. 12,
  41180. 12,
  41181. 12,
  41182. 12,
  41183. 12,
  41184. 12,
  41185. 12,
  41186. 12,
  41187. 12,
  41188. 12,
  41189. 12,
  41190. 12,
  41191. 12,
  41192. 12,
  41193. 12,
  41194. 12,
  41195. 12,
  41196. 12,
  41197. 12,
  41198. 21,
  41199. 21,
  41200. 21,
  41201. 21,
  41202. 21,
  41203. 21,
  41204. 21,
  41205. 21,
  41206. 21,
  41207. 21,
  41208. 21,
  41209. 21,
  41210. 21,
  41211. 21,
  41212. 21,
  41213. 21,
  41214. 21,
  41215. 21,
  41216. 21,
  41217. 21,
  41218. 21,
  41219. 21,
  41220. 21,
  41221. 21,
  41222. 21,
  41223. 39,
  41224. 12,
  41225. 12,
  41226. 12,
  41227. 12,
  41228. 12,
  41229. 12,
  41230. 12,
  41231. 12,
  41232. 12,
  41233. 12,
  41234. 21,
  41235. 21,
  41236. 39,
  41237. 39,
  41238. 11,
  41239. 11,
  41240. 11,
  41241. 11,
  41242. 11,
  41243. 11,
  41244. 11,
  41245. 11,
  41246. 11,
  41247. 11,
  41248. 39,
  41249. 39,
  41250. 39,
  41251. 39,
  41252. 39,
  41253. 39,
  41254. 39,
  41255. 39,
  41256. 12,
  41257. 12,
  41258. 12,
  41259. 12,
  41260. 12,
  41261. 12,
  41262. 12,
  41263. 12,
  41264. 39,
  41265. 39,
  41266. 21,
  41267. 21,
  41268. 39,
  41269. 12,
  41270. 12,
  41271. 12,
  41272. 12,
  41273. 12,
  41274. 12,
  41275. 12,
  41276. 12,
  41277. 12,
  41278. 12,
  41279. 12,
  41280. 12,
  41281. 12,
  41282. 12,
  41283. 12,
  41284. 12,
  41285. 12,
  41286. 12,
  41287. 12,
  41288. 12,
  41289. 12,
  41290. 12,
  41291. 12,
  41292. 12,
  41293. 12,
  41294. 12,
  41295. 12,
  41296. 12,
  41297. 12,
  41298. 12,
  41299. 12,
  41300. 12,
  41301. 12,
  41302. 12,
  41303. 12,
  41304. 12,
  41305. 12,
  41306. 12,
  41307. 12,
  41308. 12,
  41309. 12,
  41310. 12,
  41311. 12,
  41312. 12,
  41313. 12,
  41314. 12,
  41315. 12,
  41316. 12,
  41317. 12,
  41318. 12,
  41319. 12,
  41320. 12,
  41321. 12,
  41322. 39,
  41323. 39,
  41324. 21,
  41325. 12,
  41326. 21,
  41327. 21,
  41328. 21,
  41329. 21,
  41330. 21,
  41331. 21,
  41332. 21,
  41333. 21,
  41334. 21,
  41335. 21,
  41336. 21,
  41337. 21,
  41338. 21,
  41339. 21,
  41340. 21,
  41341. 21,
  41342. 21,
  41343. 21,
  41344. 21,
  41345. 21,
  41346. 21,
  41347. 21,
  41348. 21,
  41349. 21,
  41350. 21,
  41351. 39,
  41352. 39,
  41353. 39,
  41354. 39,
  41355. 39,
  41356. 39,
  41357. 39,
  41358. 12,
  41359. 12,
  41360. 12,
  41361. 12,
  41362. 21,
  41363. 21,
  41364. 39,
  41365. 39,
  41366. 11,
  41367. 11,
  41368. 11,
  41369. 11,
  41370. 11,
  41371. 11,
  41372. 11,
  41373. 11,
  41374. 11,
  41375. 11,
  41376. 39,
  41377. 12,
  41378. 12,
  41379. 39,
  41380. 39,
  41381. 39,
  41382. 39,
  41383. 39,
  41384. 39,
  41385. 39,
  41386. 39,
  41387. 39,
  41388. 39,
  41389. 39,
  41390. 39,
  41391. 39,
  41392. 39,
  41393. 39,
  41394. 21,
  41395. 21,
  41396. 39,
  41397. 12,
  41398. 12,
  41399. 12,
  41400. 12,
  41401. 12,
  41402. 12,
  41403. 12,
  41404. 12,
  41405. 12,
  41406. 12,
  41407. 12,
  41408. 12,
  41409. 12,
  41410. 12,
  41411. 12,
  41412. 12,
  41413. 12,
  41414. 12,
  41415. 12,
  41416. 12,
  41417. 12,
  41418. 12,
  41419. 12,
  41420. 12,
  41421. 12,
  41422. 12,
  41423. 12,
  41424. 12,
  41425. 12,
  41426. 12,
  41427. 12,
  41428. 12,
  41429. 12,
  41430. 12,
  41431. 12,
  41432. 12,
  41433. 12,
  41434. 12,
  41435. 12,
  41436. 12,
  41437. 12,
  41438. 12,
  41439. 12,
  41440. 12,
  41441. 12,
  41442. 12,
  41443. 12,
  41444. 12,
  41445. 12,
  41446. 12,
  41447. 12,
  41448. 12,
  41449. 12,
  41450. 12,
  41451. 12,
  41452. 12,
  41453. 12,
  41454. 21,
  41455. 21,
  41456. 21,
  41457. 21,
  41458. 21,
  41459. 21,
  41460. 21,
  41461. 21,
  41462. 21,
  41463. 21,
  41464. 21,
  41465. 21,
  41466. 21,
  41467. 21,
  41468. 21,
  41469. 21,
  41470. 12,
  41471. 39,
  41472. 39,
  41473. 39,
  41474. 39,
  41475. 39,
  41476. 39,
  41477. 39,
  41478. 39,
  41479. 21,
  41480. 39,
  41481. 39,
  41482. 39,
  41483. 39,
  41484. 39,
  41485. 39,
  41486. 39,
  41487. 39,
  41488. 12,
  41489. 12,
  41490. 21,
  41491. 21,
  41492. 39,
  41493. 39,
  41494. 11,
  41495. 11,
  41496. 11,
  41497. 11,
  41498. 11,
  41499. 11,
  41500. 11,
  41501. 11,
  41502. 11,
  41503. 11,
  41504. 12,
  41505. 12,
  41506. 12,
  41507. 12,
  41508. 12,
  41509. 12,
  41510. 39,
  41511. 39,
  41512. 39,
  41513. 10,
  41514. 12,
  41515. 12,
  41516. 12,
  41517. 12,
  41518. 12,
  41519. 12,
  41520. 39,
  41521. 39,
  41522. 21,
  41523. 21,
  41524. 39,
  41525. 12,
  41526. 12,
  41527. 12,
  41528. 12,
  41529. 12,
  41530. 12,
  41531. 12,
  41532. 12,
  41533. 12,
  41534. 12,
  41535. 12,
  41536. 12,
  41537. 12,
  41538. 12,
  41539. 12,
  41540. 12,
  41541. 12,
  41542. 12,
  41543. 12,
  41544. 12,
  41545. 12,
  41546. 12,
  41547. 12,
  41548. 12,
  41549. 12,
  41550. 12,
  41551. 12,
  41552. 12,
  41553. 12,
  41554. 12,
  41555. 12,
  41556. 12,
  41557. 12,
  41558. 12,
  41559. 12,
  41560. 12,
  41561. 12,
  41562. 12,
  41563. 12,
  41564. 12,
  41565. 12,
  41566. 12,
  41567. 12,
  41568. 12,
  41569. 12,
  41570. 12,
  41571. 12,
  41572. 12,
  41573. 12,
  41574. 12,
  41575. 12,
  41576. 12,
  41577. 12,
  41578. 12,
  41579. 12,
  41580. 12,
  41581. 12,
  41582. 12,
  41583. 12,
  41584. 12,
  41585. 12,
  41586. 12,
  41587. 12,
  41588. 12,
  41589. 12,
  41590. 12,
  41591. 39,
  41592. 39,
  41593. 39,
  41594. 21,
  41595. 21,
  41596. 21,
  41597. 21,
  41598. 21,
  41599. 21,
  41600. 21,
  41601. 21,
  41602. 21,
  41603. 21,
  41604. 21,
  41605. 21,
  41606. 21,
  41607. 21,
  41608. 21,
  41609. 21,
  41610. 21,
  41611. 21,
  41612. 21,
  41613. 21,
  41614. 21,
  41615. 21,
  41616. 21,
  41617. 21,
  41618. 21,
  41619. 21,
  41620. 21,
  41621. 21,
  41622. 21,
  41623. 21,
  41624. 21,
  41625. 21,
  41626. 21,
  41627. 21,
  41628. 21,
  41629. 21,
  41630. 21,
  41631. 21,
  41632. 21,
  41633. 21,
  41634. 21,
  41635. 21,
  41636. 12,
  41637. 39,
  41638. 39,
  41639. 39,
  41640. 39,
  41641. 39,
  41642. 39,
  41643. 39,
  41644. 39,
  41645. 39,
  41646. 39,
  41647. 39,
  41648. 39,
  41649. 36,
  41650. 36,
  41651. 36,
  41652. 36,
  41653. 36,
  41654. 36,
  41655. 36,
  41656. 36,
  41657. 36,
  41658. 36,
  41659. 36,
  41660. 36,
  41661. 36,
  41662. 36,
  41663. 36,
  41664. 36,
  41665. 36,
  41666. 36,
  41667. 36,
  41668. 36,
  41669. 36,
  41670. 36,
  41671. 36,
  41672. 36,
  41673. 36,
  41674. 36,
  41675. 36,
  41676. 36,
  41677. 36,
  41678. 36,
  41679. 36,
  41680. 36,
  41681. 36,
  41682. 36,
  41683. 36,
  41684. 36,
  41685. 36,
  41686. 36,
  41687. 36,
  41688. 36,
  41689. 36,
  41690. 36,
  41691. 36,
  41692. 36,
  41693. 36,
  41694. 36,
  41695. 36,
  41696. 36,
  41697. 36,
  41698. 36,
  41699. 36,
  41700. 36,
  41701. 36,
  41702. 36,
  41703. 36,
  41704. 36,
  41705. 36,
  41706. 36,
  41707. 39,
  41708. 39,
  41709. 39,
  41710. 39,
  41711. 9,
  41712. 36,
  41713. 36,
  41714. 36,
  41715. 36,
  41716. 36,
  41717. 36,
  41718. 36,
  41719. 36,
  41720. 36,
  41721. 36,
  41722. 36,
  41723. 36,
  41724. 36,
  41725. 36,
  41726. 36,
  41727. 12,
  41728. 11,
  41729. 11,
  41730. 11,
  41731. 11,
  41732. 11,
  41733. 11,
  41734. 11,
  41735. 11,
  41736. 11,
  41737. 11,
  41738. 17,
  41739. 17,
  41740. 39,
  41741. 39,
  41742. 39,
  41743. 39,
  41744. 39,
  41745. 36,
  41746. 36,
  41747. 36,
  41748. 36,
  41749. 36,
  41750. 36,
  41751. 36,
  41752. 36,
  41753. 36,
  41754. 36,
  41755. 36,
  41756. 36,
  41757. 36,
  41758. 36,
  41759. 36,
  41760. 36,
  41761. 36,
  41762. 36,
  41763. 36,
  41764. 36,
  41765. 36,
  41766. 36,
  41767. 36,
  41768. 36,
  41769. 36,
  41770. 36,
  41771. 36,
  41772. 36,
  41773. 36,
  41774. 36,
  41775. 36,
  41776. 36,
  41777. 36,
  41778. 36,
  41779. 36,
  41780. 36,
  41781. 36,
  41782. 36,
  41783. 36,
  41784. 36,
  41785. 36,
  41786. 36,
  41787. 36,
  41788. 36,
  41789. 36,
  41790. 36,
  41791. 36,
  41792. 36,
  41793. 36,
  41794. 36,
  41795. 36,
  41796. 36,
  41797. 36,
  41798. 36,
  41799. 36,
  41800. 36,
  41801. 36,
  41802. 36,
  41803. 36,
  41804. 36,
  41805. 36,
  41806. 36,
  41807. 36,
  41808. 36,
  41809. 36,
  41810. 36,
  41811. 36,
  41812. 36,
  41813. 36,
  41814. 36,
  41815. 36,
  41816. 36,
  41817. 36,
  41818. 36,
  41819. 36,
  41820. 36,
  41821. 36,
  41822. 39,
  41823. 39,
  41824. 11,
  41825. 11,
  41826. 11,
  41827. 11,
  41828. 11,
  41829. 11,
  41830. 11,
  41831. 11,
  41832. 11,
  41833. 11,
  41834. 39,
  41835. 39,
  41836. 36,
  41837. 36,
  41838. 36,
  41839. 36,
  41840. 12,
  41841. 18,
  41842. 18,
  41843. 18,
  41844. 18,
  41845. 12,
  41846. 18,
  41847. 18,
  41848. 4,
  41849. 18,
  41850. 18,
  41851. 17,
  41852. 4,
  41853. 6,
  41854. 6,
  41855. 6,
  41856. 6,
  41857. 6,
  41858. 4,
  41859. 12,
  41860. 6,
  41861. 12,
  41862. 12,
  41863. 12,
  41864. 21,
  41865. 21,
  41866. 12,
  41867. 12,
  41868. 12,
  41869. 12,
  41870. 12,
  41871. 12,
  41872. 11,
  41873. 11,
  41874. 11,
  41875. 11,
  41876. 11,
  41877. 11,
  41878. 11,
  41879. 11,
  41880. 11,
  41881. 11,
  41882. 12,
  41883. 12,
  41884. 12,
  41885. 12,
  41886. 12,
  41887. 12,
  41888. 12,
  41889. 12,
  41890. 12,
  41891. 12,
  41892. 17,
  41893. 21,
  41894. 12,
  41895. 21,
  41896. 12,
  41897. 21,
  41898. 0,
  41899. 1,
  41900. 0,
  41901. 1,
  41902. 21,
  41903. 21,
  41904. 12,
  41905. 12,
  41906. 12,
  41907. 12,
  41908. 12,
  41909. 12,
  41910. 12,
  41911. 12,
  41912. 12,
  41913. 12,
  41914. 12,
  41915. 12,
  41916. 12,
  41917. 12,
  41918. 12,
  41919. 12,
  41920. 12,
  41921. 12,
  41922. 12,
  41923. 12,
  41924. 12,
  41925. 12,
  41926. 12,
  41927. 12,
  41928. 12,
  41929. 12,
  41930. 12,
  41931. 12,
  41932. 12,
  41933. 12,
  41934. 12,
  41935. 12,
  41936. 12,
  41937. 12,
  41938. 12,
  41939. 12,
  41940. 12,
  41941. 12,
  41942. 12,
  41943. 12,
  41944. 12,
  41945. 12,
  41946. 12,
  41947. 12,
  41948. 12,
  41949. 39,
  41950. 39,
  41951. 39,
  41952. 39,
  41953. 21,
  41954. 21,
  41955. 21,
  41956. 21,
  41957. 21,
  41958. 21,
  41959. 21,
  41960. 21,
  41961. 21,
  41962. 21,
  41963. 21,
  41964. 21,
  41965. 21,
  41966. 21,
  41967. 17,
  41968. 21,
  41969. 21,
  41970. 21,
  41971. 21,
  41972. 21,
  41973. 17,
  41974. 21,
  41975. 21,
  41976. 12,
  41977. 12,
  41978. 12,
  41979. 12,
  41980. 12,
  41981. 21,
  41982. 21,
  41983. 21,
  41984. 21,
  41985. 21,
  41986. 21,
  41987. 21,
  41988. 21,
  41989. 21,
  41990. 21,
  41991. 21,
  41992. 21,
  41993. 21,
  41994. 21,
  41995. 21,
  41996. 21,
  41997. 21,
  41998. 21,
  41999. 21,
  42000. 21,
  42001. 21,
  42002. 21,
  42003. 21,
  42004. 21,
  42005. 21,
  42006. 21,
  42007. 21,
  42008. 21,
  42009. 21,
  42010. 21,
  42011. 21,
  42012. 21,
  42013. 21,
  42014. 21,
  42015. 21,
  42016. 21,
  42017. 21,
  42018. 21,
  42019. 21,
  42020. 21,
  42021. 21,
  42022. 21,
  42023. 21,
  42024. 21,
  42025. 21,
  42026. 21,
  42027. 21,
  42028. 21,
  42029. 39,
  42030. 17,
  42031. 17,
  42032. 12,
  42033. 12,
  42034. 12,
  42035. 12,
  42036. 12,
  42037. 12,
  42038. 21,
  42039. 12,
  42040. 12,
  42041. 12,
  42042. 12,
  42043. 12,
  42044. 12,
  42045. 12,
  42046. 12,
  42047. 12,
  42048. 18,
  42049. 18,
  42050. 17,
  42051. 18,
  42052. 12,
  42053. 12,
  42054. 12,
  42055. 12,
  42056. 12,
  42057. 4,
  42058. 4,
  42059. 39,
  42060. 39,
  42061. 39,
  42062. 39,
  42063. 39,
  42064. 36,
  42065. 36,
  42066. 36,
  42067. 36,
  42068. 36,
  42069. 36,
  42070. 36,
  42071. 36,
  42072. 36,
  42073. 36,
  42074. 36,
  42075. 36,
  42076. 36,
  42077. 36,
  42078. 36,
  42079. 36,
  42080. 36,
  42081. 36,
  42082. 36,
  42083. 36,
  42084. 36,
  42085. 36,
  42086. 36,
  42087. 36,
  42088. 36,
  42089. 36,
  42090. 36,
  42091. 36,
  42092. 36,
  42093. 36,
  42094. 36,
  42095. 36,
  42096. 11,
  42097. 11,
  42098. 11,
  42099. 11,
  42100. 11,
  42101. 11,
  42102. 11,
  42103. 11,
  42104. 11,
  42105. 11,
  42106. 17,
  42107. 17,
  42108. 12,
  42109. 12,
  42110. 12,
  42111. 12,
  42112. 36,
  42113. 36,
  42114. 36,
  42115. 36,
  42116. 36,
  42117. 36,
  42118. 36,
  42119. 36,
  42120. 36,
  42121. 36,
  42122. 36,
  42123. 36,
  42124. 36,
  42125. 36,
  42126. 36,
  42127. 36,
  42128. 36,
  42129. 36,
  42130. 36,
  42131. 36,
  42132. 36,
  42133. 36,
  42134. 36,
  42135. 36,
  42136. 36,
  42137. 36,
  42138. 36,
  42139. 36,
  42140. 36,
  42141. 36,
  42142. 36,
  42143. 36,
  42144. 36,
  42145. 36,
  42146. 36,
  42147. 36,
  42148. 36,
  42149. 36,
  42150. 36,
  42151. 36,
  42152. 36,
  42153. 36,
  42154. 36,
  42155. 36,
  42156. 36,
  42157. 36,
  42158. 36,
  42159. 36,
  42160. 36,
  42161. 36,
  42162. 36,
  42163. 36,
  42164. 36,
  42165. 36,
  42166. 36,
  42167. 36,
  42168. 36,
  42169. 36,
  42170. 36,
  42171. 36,
  42172. 36,
  42173. 36,
  42174. 36,
  42175. 36,
  42176. 11,
  42177. 11,
  42178. 11,
  42179. 11,
  42180. 11,
  42181. 11,
  42182. 11,
  42183. 11,
  42184. 11,
  42185. 11,
  42186. 36,
  42187. 36,
  42188. 36,
  42189. 36,
  42190. 36,
  42191. 36,
  42192. 12,
  42193. 12,
  42194. 12,
  42195. 12,
  42196. 12,
  42197. 12,
  42198. 12,
  42199. 12,
  42200. 12,
  42201. 12,
  42202. 12,
  42203. 12,
  42204. 12,
  42205. 12,
  42206. 12,
  42207. 12,
  42208. 12,
  42209. 12,
  42210. 12,
  42211. 12,
  42212. 12,
  42213. 12,
  42214. 12,
  42215. 12,
  42216. 12,
  42217. 12,
  42218. 12,
  42219. 12,
  42220. 12,
  42221. 12,
  42222. 12,
  42223. 12,
  42224. 25,
  42225. 25,
  42226. 25,
  42227. 25,
  42228. 25,
  42229. 25,
  42230. 25,
  42231. 25,
  42232. 25,
  42233. 25,
  42234. 25,
  42235. 25,
  42236. 25,
  42237. 25,
  42238. 25,
  42239. 25,
  42240. 25,
  42241. 25,
  42242. 25,
  42243. 25,
  42244. 25,
  42245. 25,
  42246. 25,
  42247. 25,
  42248. 25,
  42249. 25,
  42250. 25,
  42251. 25,
  42252. 25,
  42253. 25,
  42254. 25,
  42255. 25,
  42256. 26,
  42257. 26,
  42258. 26,
  42259. 26,
  42260. 26,
  42261. 26,
  42262. 26,
  42263. 26,
  42264. 26,
  42265. 26,
  42266. 26,
  42267. 26,
  42268. 26,
  42269. 26,
  42270. 26,
  42271. 26,
  42272. 26,
  42273. 26,
  42274. 26,
  42275. 26,
  42276. 26,
  42277. 26,
  42278. 26,
  42279. 26,
  42280. 26,
  42281. 26,
  42282. 26,
  42283. 26,
  42284. 26,
  42285. 26,
  42286. 26,
  42287. 26,
  42288. 26,
  42289. 26,
  42290. 26,
  42291. 26,
  42292. 26,
  42293. 26,
  42294. 26,
  42295. 26,
  42296. 27,
  42297. 27,
  42298. 27,
  42299. 27,
  42300. 27,
  42301. 27,
  42302. 27,
  42303. 27,
  42304. 27,
  42305. 27,
  42306. 27,
  42307. 27,
  42308. 27,
  42309. 27,
  42310. 27,
  42311. 27,
  42312. 27,
  42313. 27,
  42314. 27,
  42315. 27,
  42316. 27,
  42317. 27,
  42318. 27,
  42319. 27,
  42320. 27,
  42321. 27,
  42322. 27,
  42323. 27,
  42324. 27,
  42325. 27,
  42326. 27,
  42327. 27,
  42328. 27,
  42329. 27,
  42330. 27,
  42331. 27,
  42332. 27,
  42333. 27,
  42334. 27,
  42335. 27,
  42336. 27,
  42337. 27,
  42338. 27,
  42339. 27,
  42340. 27,
  42341. 27,
  42342. 27,
  42343. 27,
  42344. 27,
  42345. 27,
  42346. 27,
  42347. 27,
  42348. 27,
  42349. 27,
  42350. 27,
  42351. 27,
  42352. 12,
  42353. 12,
  42354. 12,
  42355. 12,
  42356. 12,
  42357. 12,
  42358. 12,
  42359. 12,
  42360. 12,
  42361. 12,
  42362. 12,
  42363. 12,
  42364. 12,
  42365. 12,
  42366. 12,
  42367. 12,
  42368. 12,
  42369. 12,
  42370. 12,
  42371. 12,
  42372. 12,
  42373. 12,
  42374. 12,
  42375. 12,
  42376. 12,
  42377. 12,
  42378. 12,
  42379. 12,
  42380. 12,
  42381. 12,
  42382. 12,
  42383. 12,
  42384. 12,
  42385. 12,
  42386. 12,
  42387. 12,
  42388. 12,
  42389. 12,
  42390. 12,
  42391. 12,
  42392. 12,
  42393. 12,
  42394. 12,
  42395. 12,
  42396. 12,
  42397. 12,
  42398. 12,
  42399. 12,
  42400. 12,
  42401. 12,
  42402. 12,
  42403. 12,
  42404. 12,
  42405. 12,
  42406. 12,
  42407. 12,
  42408. 12,
  42409. 12,
  42410. 12,
  42411. 39,
  42412. 39,
  42413. 21,
  42414. 21,
  42415. 21,
  42416. 12,
  42417. 17,
  42418. 12,
  42419. 12,
  42420. 12,
  42421. 12,
  42422. 12,
  42423. 12,
  42424. 12,
  42425. 12,
  42426. 12,
  42427. 12,
  42428. 12,
  42429. 12,
  42430. 12,
  42431. 12,
  42432. 12,
  42433. 12,
  42434. 12,
  42435. 12,
  42436. 12,
  42437. 12,
  42438. 12,
  42439. 12,
  42440. 12,
  42441. 12,
  42442. 12,
  42443. 12,
  42444. 12,
  42445. 12,
  42446. 12,
  42447. 12,
  42448. 12,
  42449. 12,
  42450. 12,
  42451. 12,
  42452. 12,
  42453. 12,
  42454. 12,
  42455. 12,
  42456. 12,
  42457. 12,
  42458. 12,
  42459. 12,
  42460. 12,
  42461. 12,
  42462. 12,
  42463. 12,
  42464. 12,
  42465. 12,
  42466. 12,
  42467. 12,
  42468. 12,
  42469. 12,
  42470. 12,
  42471. 12,
  42472. 12,
  42473. 12,
  42474. 12,
  42475. 12,
  42476. 12,
  42477. 12,
  42478. 12,
  42479. 12,
  42480. 12,
  42481. 12,
  42482. 12,
  42483. 12,
  42484. 12,
  42485. 12,
  42486. 12,
  42487. 12,
  42488. 12,
  42489. 12,
  42490. 12,
  42491. 12,
  42492. 12,
  42493. 12,
  42494. 12,
  42495. 12,
  42496. 12,
  42497. 12,
  42498. 12,
  42499. 12,
  42500. 12,
  42501. 39,
  42502. 39,
  42503. 39,
  42504. 39,
  42505. 39,
  42506. 39,
  42507. 39,
  42508. 39,
  42509. 39,
  42510. 39,
  42511. 39,
  42512. 17,
  42513. 12,
  42514. 12,
  42515. 12,
  42516. 12,
  42517. 12,
  42518. 12,
  42519. 12,
  42520. 12,
  42521. 12,
  42522. 12,
  42523. 12,
  42524. 12,
  42525. 12,
  42526. 12,
  42527. 12,
  42528. 12,
  42529. 12,
  42530. 12,
  42531. 12,
  42532. 12,
  42533. 12,
  42534. 12,
  42535. 12,
  42536. 12,
  42537. 12,
  42538. 12,
  42539. 12,
  42540. 12,
  42541. 12,
  42542. 12,
  42543. 12,
  42544. 12,
  42545. 12,
  42546. 12,
  42547. 12,
  42548. 12,
  42549. 12,
  42550. 12,
  42551. 12,
  42552. 12,
  42553. 12,
  42554. 12,
  42555. 12,
  42556. 12,
  42557. 12,
  42558. 12,
  42559. 12,
  42560. 12,
  42561. 12,
  42562. 12,
  42563. 12,
  42564. 12,
  42565. 12,
  42566. 12,
  42567. 12,
  42568. 12,
  42569. 12,
  42570. 12,
  42571. 12,
  42572. 12,
  42573. 12,
  42574. 12,
  42575. 12,
  42576. 17,
  42577. 12,
  42578. 12,
  42579. 12,
  42580. 12,
  42581. 12,
  42582. 12,
  42583. 12,
  42584. 12,
  42585. 12,
  42586. 12,
  42587. 12,
  42588. 12,
  42589. 12,
  42590. 12,
  42591. 12,
  42592. 12,
  42593. 12,
  42594. 12,
  42595. 12,
  42596. 12,
  42597. 12,
  42598. 12,
  42599. 12,
  42600. 12,
  42601. 12,
  42602. 12,
  42603. 0,
  42604. 1,
  42605. 39,
  42606. 39,
  42607. 39,
  42608. 12,
  42609. 12,
  42610. 12,
  42611. 12,
  42612. 12,
  42613. 12,
  42614. 12,
  42615. 12,
  42616. 12,
  42617. 12,
  42618. 12,
  42619. 12,
  42620. 12,
  42621. 12,
  42622. 12,
  42623. 12,
  42624. 12,
  42625. 12,
  42626. 12,
  42627. 12,
  42628. 12,
  42629. 12,
  42630. 12,
  42631. 12,
  42632. 12,
  42633. 12,
  42634. 12,
  42635. 12,
  42636. 12,
  42637. 12,
  42638. 12,
  42639. 12,
  42640. 12,
  42641. 12,
  42642. 12,
  42643. 12,
  42644. 12,
  42645. 12,
  42646. 12,
  42647. 12,
  42648. 12,
  42649. 12,
  42650. 12,
  42651. 17,
  42652. 17,
  42653. 17,
  42654. 12,
  42655. 12,
  42656. 12,
  42657. 12,
  42658. 12,
  42659. 12,
  42660. 12,
  42661. 12,
  42662. 12,
  42663. 12,
  42664. 12,
  42665. 12,
  42666. 12,
  42667. 12,
  42668. 12,
  42669. 12,
  42670. 12,
  42671. 12,
  42672. 12,
  42673. 12,
  42674. 12,
  42675. 12,
  42676. 12,
  42677. 12,
  42678. 12,
  42679. 12,
  42680. 12,
  42681. 12,
  42682. 12,
  42683. 12,
  42684. 12,
  42685. 12,
  42686. 12,
  42687. 12,
  42688. 12,
  42689. 12,
  42690. 21,
  42691. 21,
  42692. 21,
  42693. 39,
  42694. 39,
  42695. 39,
  42696. 39,
  42697. 39,
  42698. 39,
  42699. 39,
  42700. 39,
  42701. 39,
  42702. 39,
  42703. 39,
  42704. 12,
  42705. 12,
  42706. 12,
  42707. 12,
  42708. 12,
  42709. 12,
  42710. 12,
  42711. 12,
  42712. 12,
  42713. 12,
  42714. 12,
  42715. 12,
  42716. 12,
  42717. 12,
  42718. 12,
  42719. 12,
  42720. 12,
  42721. 12,
  42722. 21,
  42723. 21,
  42724. 21,
  42725. 17,
  42726. 17,
  42727. 39,
  42728. 39,
  42729. 39,
  42730. 39,
  42731. 39,
  42732. 39,
  42733. 39,
  42734. 39,
  42735. 39,
  42736. 12,
  42737. 12,
  42738. 12,
  42739. 12,
  42740. 12,
  42741. 12,
  42742. 12,
  42743. 12,
  42744. 12,
  42745. 12,
  42746. 12,
  42747. 12,
  42748. 12,
  42749. 12,
  42750. 12,
  42751. 12,
  42752. 12,
  42753. 12,
  42754. 21,
  42755. 21,
  42756. 39,
  42757. 39,
  42758. 39,
  42759. 39,
  42760. 39,
  42761. 39,
  42762. 39,
  42763. 39,
  42764. 39,
  42765. 39,
  42766. 39,
  42767. 39,
  42768. 12,
  42769. 12,
  42770. 12,
  42771. 12,
  42772. 12,
  42773. 12,
  42774. 12,
  42775. 12,
  42776. 12,
  42777. 12,
  42778. 12,
  42779. 12,
  42780. 12,
  42781. 12,
  42782. 12,
  42783. 12,
  42784. 12,
  42785. 39,
  42786. 21,
  42787. 21,
  42788. 39,
  42789. 39,
  42790. 39,
  42791. 39,
  42792. 39,
  42793. 39,
  42794. 39,
  42795. 39,
  42796. 39,
  42797. 39,
  42798. 39,
  42799. 39,
  42800. 36,
  42801. 36,
  42802. 36,
  42803. 36,
  42804. 36,
  42805. 36,
  42806. 36,
  42807. 36,
  42808. 36,
  42809. 36,
  42810. 36,
  42811. 36,
  42812. 36,
  42813. 36,
  42814. 36,
  42815. 36,
  42816. 36,
  42817. 36,
  42818. 36,
  42819. 36,
  42820. 36,
  42821. 36,
  42822. 36,
  42823. 36,
  42824. 36,
  42825. 36,
  42826. 36,
  42827. 36,
  42828. 36,
  42829. 36,
  42830. 36,
  42831. 36,
  42832. 36,
  42833. 36,
  42834. 36,
  42835. 36,
  42836. 36,
  42837. 36,
  42838. 36,
  42839. 36,
  42840. 36,
  42841. 36,
  42842. 36,
  42843. 36,
  42844. 36,
  42845. 36,
  42846. 36,
  42847. 36,
  42848. 36,
  42849. 36,
  42850. 36,
  42851. 36,
  42852. 17,
  42853. 17,
  42854. 5,
  42855. 36,
  42856. 17,
  42857. 12,
  42858. 17,
  42859. 9,
  42860. 36,
  42861. 36,
  42862. 39,
  42863. 39,
  42864. 11,
  42865. 11,
  42866. 11,
  42867. 11,
  42868. 11,
  42869. 11,
  42870. 11,
  42871. 11,
  42872. 11,
  42873. 11,
  42874. 39,
  42875. 39,
  42876. 39,
  42877. 39,
  42878. 39,
  42879. 39,
  42880. 12,
  42881. 12,
  42882. 12,
  42883. 12,
  42884. 12,
  42885. 12,
  42886. 12,
  42887. 12,
  42888. 12,
  42889. 12,
  42890. 12,
  42891. 12,
  42892. 12,
  42893. 12,
  42894. 12,
  42895. 12,
  42896. 12,
  42897. 12,
  42898. 6,
  42899. 6,
  42900. 17,
  42901. 17,
  42902. 18,
  42903. 12,
  42904. 6,
  42905. 6,
  42906. 12,
  42907. 21,
  42908. 21,
  42909. 21,
  42910. 4,
  42911. 39,
  42912. 11,
  42913. 11,
  42914. 11,
  42915. 11,
  42916. 11,
  42917. 11,
  42918. 11,
  42919. 11,
  42920. 11,
  42921. 11,
  42922. 39,
  42923. 39,
  42924. 39,
  42925. 39,
  42926. 39,
  42927. 39,
  42928. 12,
  42929. 12,
  42930. 12,
  42931. 12,
  42932. 12,
  42933. 12,
  42934. 12,
  42935. 12,
  42936. 12,
  42937. 12,
  42938. 12,
  42939. 12,
  42940. 12,
  42941. 12,
  42942. 12,
  42943. 12,
  42944. 12,
  42945. 12,
  42946. 12,
  42947. 12,
  42948. 12,
  42949. 12,
  42950. 12,
  42951. 12,
  42952. 12,
  42953. 12,
  42954. 12,
  42955. 12,
  42956. 12,
  42957. 12,
  42958. 12,
  42959. 12,
  42960. 12,
  42961. 12,
  42962. 12,
  42963. 12,
  42964. 12,
  42965. 12,
  42966. 12,
  42967. 12,
  42968. 12,
  42969. 21,
  42970. 12,
  42971. 12,
  42972. 12,
  42973. 12,
  42974. 12,
  42975. 12,
  42976. 12,
  42977. 12,
  42978. 12,
  42979. 12,
  42980. 12,
  42981. 12,
  42982. 12,
  42983. 12,
  42984. 12,
  42985. 12,
  42986. 12,
  42987. 12,
  42988. 12,
  42989. 12,
  42990. 12,
  42991. 12,
  42992. 12,
  42993. 12,
  42994. 12,
  42995. 12,
  42996. 12,
  42997. 12,
  42998. 12,
  42999. 12,
  43000. 12,
  43001. 12,
  43002. 12,
  43003. 12,
  43004. 12,
  43005. 12,
  43006. 12,
  43007. 12,
  43008. 12,
  43009. 12,
  43010. 12,
  43011. 12,
  43012. 12,
  43013. 12,
  43014. 12,
  43015. 12,
  43016. 12,
  43017. 12,
  43018. 12,
  43019. 12,
  43020. 12,
  43021. 12,
  43022. 12,
  43023. 12,
  43024. 12,
  43025. 12,
  43026. 12,
  43027. 12,
  43028. 12,
  43029. 12,
  43030. 12,
  43031. 12,
  43032. 12,
  43033. 12,
  43034. 12,
  43035. 12,
  43036. 12,
  43037. 12,
  43038. 12,
  43039. 12,
  43040. 12,
  43041. 12,
  43042. 12,
  43043. 12,
  43044. 12,
  43045. 12,
  43046. 12,
  43047. 12,
  43048. 12,
  43049. 12,
  43050. 12,
  43051. 12,
  43052. 12,
  43053. 39,
  43054. 39,
  43055. 39,
  43056. 21,
  43057. 21,
  43058. 21,
  43059. 21,
  43060. 21,
  43061. 21,
  43062. 21,
  43063. 21,
  43064. 21,
  43065. 21,
  43066. 21,
  43067. 21,
  43068. 21,
  43069. 21,
  43070. 21,
  43071. 21,
  43072. 21,
  43073. 21,
  43074. 21,
  43075. 21,
  43076. 21,
  43077. 21,
  43078. 21,
  43079. 21,
  43080. 21,
  43081. 21,
  43082. 21,
  43083. 21,
  43084. 39,
  43085. 39,
  43086. 39,
  43087. 39,
  43088. 12,
  43089. 39,
  43090. 39,
  43091. 39,
  43092. 6,
  43093. 6,
  43094. 11,
  43095. 11,
  43096. 11,
  43097. 11,
  43098. 11,
  43099. 11,
  43100. 11,
  43101. 11,
  43102. 11,
  43103. 11,
  43104. 36,
  43105. 36,
  43106. 36,
  43107. 36,
  43108. 36,
  43109. 36,
  43110. 36,
  43111. 36,
  43112. 36,
  43113. 36,
  43114. 36,
  43115. 36,
  43116. 36,
  43117. 36,
  43118. 36,
  43119. 36,
  43120. 36,
  43121. 36,
  43122. 36,
  43123. 36,
  43124. 36,
  43125. 36,
  43126. 36,
  43127. 36,
  43128. 36,
  43129. 36,
  43130. 36,
  43131. 36,
  43132. 36,
  43133. 36,
  43134. 36,
  43135. 36,
  43136. 36,
  43137. 36,
  43138. 36,
  43139. 36,
  43140. 36,
  43141. 36,
  43142. 36,
  43143. 36,
  43144. 36,
  43145. 36,
  43146. 36,
  43147. 36,
  43148. 36,
  43149. 36,
  43150. 36,
  43151. 36,
  43152. 36,
  43153. 36,
  43154. 36,
  43155. 36,
  43156. 36,
  43157. 36,
  43158. 36,
  43159. 36,
  43160. 36,
  43161. 36,
  43162. 39,
  43163. 39,
  43164. 39,
  43165. 39,
  43166. 39,
  43167. 39,
  43168. 11,
  43169. 11,
  43170. 11,
  43171. 11,
  43172. 11,
  43173. 11,
  43174. 11,
  43175. 11,
  43176. 11,
  43177. 11,
  43178. 36,
  43179. 36,
  43180. 36,
  43181. 36,
  43182. 36,
  43183. 36,
  43184. 12,
  43185. 12,
  43186. 12,
  43187. 12,
  43188. 12,
  43189. 12,
  43190. 12,
  43191. 12,
  43192. 12,
  43193. 12,
  43194. 12,
  43195. 12,
  43196. 12,
  43197. 12,
  43198. 12,
  43199. 12,
  43200. 12,
  43201. 12,
  43202. 12,
  43203. 12,
  43204. 12,
  43205. 12,
  43206. 12,
  43207. 12,
  43208. 12,
  43209. 12,
  43210. 12,
  43211. 12,
  43212. 12,
  43213. 12,
  43214. 12,
  43215. 12,
  43216. 12,
  43217. 12,
  43218. 12,
  43219. 12,
  43220. 12,
  43221. 12,
  43222. 12,
  43223. 12,
  43224. 12,
  43225. 12,
  43226. 12,
  43227. 12,
  43228. 12,
  43229. 12,
  43230. 12,
  43231. 12,
  43232. 12,
  43233. 12,
  43234. 12,
  43235. 12,
  43236. 12,
  43237. 12,
  43238. 12,
  43239. 21,
  43240. 21,
  43241. 21,
  43242. 21,
  43243. 21,
  43244. 39,
  43245. 39,
  43246. 12,
  43247. 12,
  43248. 36,
  43249. 36,
  43250. 36,
  43251. 36,
  43252. 36,
  43253. 36,
  43254. 36,
  43255. 36,
  43256. 36,
  43257. 36,
  43258. 36,
  43259. 36,
  43260. 36,
  43261. 36,
  43262. 36,
  43263. 36,
  43264. 36,
  43265. 36,
  43266. 36,
  43267. 36,
  43268. 36,
  43269. 36,
  43270. 36,
  43271. 36,
  43272. 36,
  43273. 36,
  43274. 36,
  43275. 36,
  43276. 36,
  43277. 36,
  43278. 36,
  43279. 36,
  43280. 36,
  43281. 36,
  43282. 36,
  43283. 36,
  43284. 36,
  43285. 36,
  43286. 36,
  43287. 36,
  43288. 36,
  43289. 36,
  43290. 36,
  43291. 36,
  43292. 36,
  43293. 36,
  43294. 36,
  43295. 36,
  43296. 36,
  43297. 36,
  43298. 36,
  43299. 36,
  43300. 36,
  43301. 36,
  43302. 36,
  43303. 36,
  43304. 36,
  43305. 36,
  43306. 36,
  43307. 36,
  43308. 36,
  43309. 39,
  43310. 39,
  43311. 21,
  43312. 11,
  43313. 11,
  43314. 11,
  43315. 11,
  43316. 11,
  43317. 11,
  43318. 11,
  43319. 11,
  43320. 11,
  43321. 11,
  43322. 11,
  43323. 11,
  43324. 11,
  43325. 11,
  43326. 11,
  43327. 11,
  43328. 11,
  43329. 11,
  43330. 11,
  43331. 11,
  43332. 11,
  43333. 11,
  43334. 11,
  43335. 11,
  43336. 11,
  43337. 11,
  43338. 39,
  43339. 39,
  43340. 39,
  43341. 39,
  43342. 39,
  43343. 39,
  43344. 36,
  43345. 36,
  43346. 36,
  43347. 36,
  43348. 36,
  43349. 36,
  43350. 36,
  43351. 36,
  43352. 36,
  43353. 36,
  43354. 36,
  43355. 36,
  43356. 36,
  43357. 36,
  43358. 39,
  43359. 39,
  43360. 39,
  43361. 39,
  43362. 39,
  43363. 39,
  43364. 39,
  43365. 39,
  43366. 39,
  43367. 39,
  43368. 39,
  43369. 39,
  43370. 39,
  43371. 39,
  43372. 39,
  43373. 39,
  43374. 39,
  43375. 39,
  43376. 21,
  43377. 21,
  43378. 21,
  43379. 21,
  43380. 21,
  43381. 12,
  43382. 12,
  43383. 12,
  43384. 12,
  43385. 12,
  43386. 12,
  43387. 12,
  43388. 12,
  43389. 12,
  43390. 12,
  43391. 12,
  43392. 12,
  43393. 12,
  43394. 12,
  43395. 12,
  43396. 12,
  43397. 12,
  43398. 12,
  43399. 12,
  43400. 12,
  43401. 12,
  43402. 12,
  43403. 12,
  43404. 12,
  43405. 12,
  43406. 12,
  43407. 12,
  43408. 12,
  43409. 12,
  43410. 12,
  43411. 12,
  43412. 12,
  43413. 12,
  43414. 12,
  43415. 12,
  43416. 12,
  43417. 12,
  43418. 12,
  43419. 12,
  43420. 12,
  43421. 12,
  43422. 12,
  43423. 12,
  43424. 12,
  43425. 12,
  43426. 12,
  43427. 12,
  43428. 21,
  43429. 21,
  43430. 21,
  43431. 21,
  43432. 21,
  43433. 21,
  43434. 21,
  43435. 21,
  43436. 21,
  43437. 21,
  43438. 21,
  43439. 21,
  43440. 21,
  43441. 21,
  43442. 21,
  43443. 21,
  43444. 21,
  43445. 12,
  43446. 12,
  43447. 12,
  43448. 12,
  43449. 12,
  43450. 12,
  43451. 12,
  43452. 39,
  43453. 39,
  43454. 39,
  43455. 39,
  43456. 11,
  43457. 11,
  43458. 11,
  43459. 11,
  43460. 11,
  43461. 11,
  43462. 11,
  43463. 11,
  43464. 11,
  43465. 11,
  43466. 17,
  43467. 17,
  43468. 12,
  43469. 17,
  43470. 17,
  43471. 17,
  43472. 17,
  43473. 12,
  43474. 12,
  43475. 12,
  43476. 12,
  43477. 12,
  43478. 12,
  43479. 12,
  43480. 12,
  43481. 12,
  43482. 12,
  43483. 21,
  43484. 21,
  43485. 21,
  43486. 21,
  43487. 21,
  43488. 21,
  43489. 21,
  43490. 21,
  43491. 21,
  43492. 12,
  43493. 12,
  43494. 12,
  43495. 12,
  43496. 12,
  43497. 12,
  43498. 12,
  43499. 12,
  43500. 12,
  43501. 39,
  43502. 39,
  43503. 39,
  43504. 21,
  43505. 21,
  43506. 21,
  43507. 12,
  43508. 12,
  43509. 12,
  43510. 12,
  43511. 12,
  43512. 12,
  43513. 12,
  43514. 12,
  43515. 12,
  43516. 12,
  43517. 12,
  43518. 12,
  43519. 12,
  43520. 12,
  43521. 12,
  43522. 12,
  43523. 12,
  43524. 12,
  43525. 12,
  43526. 12,
  43527. 12,
  43528. 12,
  43529. 12,
  43530. 12,
  43531. 12,
  43532. 12,
  43533. 12,
  43534. 12,
  43535. 12,
  43536. 12,
  43537. 21,
  43538. 21,
  43539. 21,
  43540. 21,
  43541. 21,
  43542. 21,
  43543. 21,
  43544. 21,
  43545. 21,
  43546. 21,
  43547. 21,
  43548. 21,
  43549. 21,
  43550. 12,
  43551. 12,
  43552. 11,
  43553. 11,
  43554. 11,
  43555. 11,
  43556. 11,
  43557. 11,
  43558. 11,
  43559. 11,
  43560. 11,
  43561. 11,
  43562. 12,
  43563. 12,
  43564. 12,
  43565. 12,
  43566. 12,
  43567. 12,
  43568. 12,
  43569. 12,
  43570. 12,
  43571. 12,
  43572. 12,
  43573. 12,
  43574. 12,
  43575. 12,
  43576. 12,
  43577. 12,
  43578. 12,
  43579. 12,
  43580. 12,
  43581. 12,
  43582. 12,
  43583. 12,
  43584. 12,
  43585. 12,
  43586. 12,
  43587. 12,
  43588. 12,
  43589. 12,
  43590. 12,
  43591. 12,
  43592. 12,
  43593. 12,
  43594. 12,
  43595. 12,
  43596. 12,
  43597. 12,
  43598. 12,
  43599. 12,
  43600. 12,
  43601. 12,
  43602. 12,
  43603. 12,
  43604. 12,
  43605. 12,
  43606. 21,
  43607. 21,
  43608. 21,
  43609. 21,
  43610. 21,
  43611. 21,
  43612. 21,
  43613. 21,
  43614. 21,
  43615. 21,
  43616. 21,
  43617. 21,
  43618. 21,
  43619. 21,
  43620. 39,
  43621. 39,
  43622. 39,
  43623. 39,
  43624. 39,
  43625. 39,
  43626. 39,
  43627. 39,
  43628. 12,
  43629. 12,
  43630. 12,
  43631. 12,
  43632. 12,
  43633. 12,
  43634. 12,
  43635. 12,
  43636. 12,
  43637. 12,
  43638. 12,
  43639. 12,
  43640. 12,
  43641. 12,
  43642. 12,
  43643. 12,
  43644. 12,
  43645. 12,
  43646. 12,
  43647. 12,
  43648. 12,
  43649. 12,
  43650. 12,
  43651. 12,
  43652. 12,
  43653. 12,
  43654. 12,
  43655. 12,
  43656. 12,
  43657. 12,
  43658. 12,
  43659. 12,
  43660. 12,
  43661. 12,
  43662. 12,
  43663. 12,
  43664. 12,
  43665. 12,
  43666. 12,
  43667. 12,
  43668. 21,
  43669. 21,
  43670. 21,
  43671. 21,
  43672. 21,
  43673. 21,
  43674. 21,
  43675. 21,
  43676. 21,
  43677. 21,
  43678. 21,
  43679. 21,
  43680. 21,
  43681. 21,
  43682. 21,
  43683. 21,
  43684. 21,
  43685. 21,
  43686. 21,
  43687. 21,
  43688. 39,
  43689. 39,
  43690. 39,
  43691. 17,
  43692. 17,
  43693. 17,
  43694. 17,
  43695. 17,
  43696. 11,
  43697. 11,
  43698. 11,
  43699. 11,
  43700. 11,
  43701. 11,
  43702. 11,
  43703. 11,
  43704. 11,
  43705. 11,
  43706. 39,
  43707. 39,
  43708. 39,
  43709. 12,
  43710. 12,
  43711. 12,
  43712. 11,
  43713. 11,
  43714. 11,
  43715. 11,
  43716. 11,
  43717. 11,
  43718. 11,
  43719. 11,
  43720. 11,
  43721. 11,
  43722. 12,
  43723. 12,
  43724. 12,
  43725. 12,
  43726. 12,
  43727. 12,
  43728. 12,
  43729. 12,
  43730. 12,
  43731. 12,
  43732. 12,
  43733. 12,
  43734. 12,
  43735. 12,
  43736. 12,
  43737. 12,
  43738. 12,
  43739. 12,
  43740. 12,
  43741. 12,
  43742. 12,
  43743. 12,
  43744. 12,
  43745. 12,
  43746. 12,
  43747. 12,
  43748. 12,
  43749. 12,
  43750. 12,
  43751. 12,
  43752. 12,
  43753. 12,
  43754. 12,
  43755. 12,
  43756. 12,
  43757. 12,
  43758. 17,
  43759. 17,
  43760. 12,
  43761. 12,
  43762. 12,
  43763. 12,
  43764. 12,
  43765. 12,
  43766. 12,
  43767. 12,
  43768. 39,
  43769. 39,
  43770. 39,
  43771. 39,
  43772. 39,
  43773. 39,
  43774. 39,
  43775. 39,
  43776. 21,
  43777. 21,
  43778. 21,
  43779. 12,
  43780. 21,
  43781. 21,
  43782. 21,
  43783. 21,
  43784. 21,
  43785. 21,
  43786. 21,
  43787. 21,
  43788. 21,
  43789. 21,
  43790. 21,
  43791. 21,
  43792. 21,
  43793. 21,
  43794. 21,
  43795. 21,
  43796. 21,
  43797. 21,
  43798. 21,
  43799. 21,
  43800. 21,
  43801. 12,
  43802. 12,
  43803. 12,
  43804. 12,
  43805. 21,
  43806. 12,
  43807. 12,
  43808. 12,
  43809. 12,
  43810. 21,
  43811. 21,
  43812. 21,
  43813. 12,
  43814. 12,
  43815. 12,
  43816. 12,
  43817. 12,
  43818. 12,
  43819. 12,
  43820. 12,
  43821. 12,
  43822. 12,
  43823. 12,
  43824. 12,
  43825. 12,
  43826. 12,
  43827. 12,
  43828. 12,
  43829. 12,
  43830. 12,
  43831. 12,
  43832. 12,
  43833. 12,
  43834. 12,
  43835. 12,
  43836. 12,
  43837. 12,
  43838. 12,
  43839. 12,
  43840. 12,
  43841. 12,
  43842. 12,
  43843. 12,
  43844. 12,
  43845. 12,
  43846. 12,
  43847. 12,
  43848. 12,
  43849. 12,
  43850. 12,
  43851. 12,
  43852. 12,
  43853. 12,
  43854. 12,
  43855. 12,
  43856. 21,
  43857. 21,
  43858. 21,
  43859. 21,
  43860. 21,
  43861. 21,
  43862. 21,
  43863. 21,
  43864. 21,
  43865. 21,
  43866. 21,
  43867. 21,
  43868. 21,
  43869. 21,
  43870. 21,
  43871. 21,
  43872. 21,
  43873. 21,
  43874. 21,
  43875. 21,
  43876. 21,
  43877. 21,
  43878. 21,
  43879. 21,
  43880. 21,
  43881. 21,
  43882. 21,
  43883. 21,
  43884. 21,
  43885. 21,
  43886. 21,
  43887. 21,
  43888. 12,
  43889. 12,
  43890. 12,
  43891. 12,
  43892. 12,
  43893. 12,
  43894. 12,
  43895. 12,
  43896. 12,
  43897. 12,
  43898. 12,
  43899. 12,
  43900. 12,
  43901. 12,
  43902. 12,
  43903. 12,
  43904. 12,
  43905. 12,
  43906. 12,
  43907. 12,
  43908. 12,
  43909. 12,
  43910. 12,
  43911. 12,
  43912. 12,
  43913. 12,
  43914. 12,
  43915. 12,
  43916. 12,
  43917. 12,
  43918. 12,
  43919. 12,
  43920. 12,
  43921. 12,
  43922. 12,
  43923. 12,
  43924. 12,
  43925. 12,
  43926. 12,
  43927. 12,
  43928. 12,
  43929. 12,
  43930. 12,
  43931. 12,
  43932. 12,
  43933. 12,
  43934. 12,
  43935. 12,
  43936. 12,
  43937. 12,
  43938. 12,
  43939. 12,
  43940. 12,
  43941. 12,
  43942. 12,
  43943. 12,
  43944. 12,
  43945. 12,
  43946. 12,
  43947. 12,
  43948. 12,
  43949. 18,
  43950. 12,
  43951. 39,
  43952. 17,
  43953. 17,
  43954. 17,
  43955. 17,
  43956. 17,
  43957. 17,
  43958. 17,
  43959. 4,
  43960. 17,
  43961. 17,
  43962. 17,
  43963. 20,
  43964. 21,
  43965. 21,
  43966. 21,
  43967. 21,
  43968. 17,
  43969. 4,
  43970. 17,
  43971. 17,
  43972. 19,
  43973. 29,
  43974. 29,
  43975. 12,
  43976. 3,
  43977. 3,
  43978. 0,
  43979. 3,
  43980. 3,
  43981. 3,
  43982. 0,
  43983. 3,
  43984. 29,
  43985. 29,
  43986. 12,
  43987. 12,
  43988. 15,
  43989. 15,
  43990. 15,
  43991. 17,
  43992. 30,
  43993. 30,
  43994. 21,
  43995. 21,
  43996. 21,
  43997. 21,
  43998. 21,
  43999. 4,
  44000. 10,
  44001. 10,
  44002. 10,
  44003. 10,
  44004. 10,
  44005. 10,
  44006. 10,
  44007. 10,
  44008. 12,
  44009. 3,
  44010. 3,
  44011. 29,
  44012. 5,
  44013. 5,
  44014. 12,
  44015. 12,
  44016. 12,
  44017. 12,
  44018. 12,
  44019. 12,
  44020. 8,
  44021. 0,
  44022. 1,
  44023. 5,
  44024. 5,
  44025. 5,
  44026. 12,
  44027. 12,
  44028. 12,
  44029. 12,
  44030. 12,
  44031. 12,
  44032. 12,
  44033. 12,
  44034. 12,
  44035. 12,
  44036. 12,
  44037. 12,
  44038. 17,
  44039. 12,
  44040. 17,
  44041. 17,
  44042. 17,
  44043. 17,
  44044. 12,
  44045. 17,
  44046. 17,
  44047. 17,
  44048. 22,
  44049. 12,
  44050. 12,
  44051. 12,
  44052. 12,
  44053. 39,
  44054. 39,
  44055. 39,
  44056. 39,
  44057. 39,
  44058. 21,
  44059. 21,
  44060. 21,
  44061. 21,
  44062. 21,
  44063. 21,
  44064. 12,
  44065. 12,
  44066. 39,
  44067. 39,
  44068. 29,
  44069. 12,
  44070. 12,
  44071. 12,
  44072. 12,
  44073. 12,
  44074. 12,
  44075. 12,
  44076. 12,
  44077. 0,
  44078. 1,
  44079. 29,
  44080. 12,
  44081. 29,
  44082. 29,
  44083. 29,
  44084. 29,
  44085. 12,
  44086. 12,
  44087. 12,
  44088. 12,
  44089. 12,
  44090. 12,
  44091. 12,
  44092. 12,
  44093. 0,
  44094. 1,
  44095. 39,
  44096. 12,
  44097. 12,
  44098. 12,
  44099. 12,
  44100. 12,
  44101. 12,
  44102. 12,
  44103. 12,
  44104. 12,
  44105. 12,
  44106. 12,
  44107. 12,
  44108. 12,
  44109. 39,
  44110. 39,
  44111. 39,
  44112. 9,
  44113. 9,
  44114. 9,
  44115. 9,
  44116. 9,
  44117. 9,
  44118. 9,
  44119. 10,
  44120. 9,
  44121. 9,
  44122. 9,
  44123. 9,
  44124. 9,
  44125. 9,
  44126. 9,
  44127. 9,
  44128. 9,
  44129. 9,
  44130. 9,
  44131. 9,
  44132. 9,
  44133. 9,
  44134. 10,
  44135. 9,
  44136. 9,
  44137. 9,
  44138. 9,
  44139. 39,
  44140. 39,
  44141. 39,
  44142. 39,
  44143. 39,
  44144. 39,
  44145. 39,
  44146. 39,
  44147. 39,
  44148. 39,
  44149. 39,
  44150. 39,
  44151. 39,
  44152. 39,
  44153. 39,
  44154. 39,
  44155. 39,
  44156. 39,
  44157. 39,
  44158. 39,
  44159. 39,
  44160. 21,
  44161. 21,
  44162. 21,
  44163. 21,
  44164. 21,
  44165. 21,
  44166. 21,
  44167. 21,
  44168. 21,
  44169. 21,
  44170. 21,
  44171. 21,
  44172. 21,
  44173. 21,
  44174. 21,
  44175. 21,
  44176. 21,
  44177. 21,
  44178. 21,
  44179. 21,
  44180. 21,
  44181. 21,
  44182. 21,
  44183. 21,
  44184. 21,
  44185. 21,
  44186. 21,
  44187. 21,
  44188. 21,
  44189. 21,
  44190. 21,
  44191. 21,
  44192. 21,
  44193. 39,
  44194. 39,
  44195. 39,
  44196. 39,
  44197. 39,
  44198. 39,
  44199. 39,
  44200. 39,
  44201. 39,
  44202. 39,
  44203. 39,
  44204. 39,
  44205. 39,
  44206. 39,
  44207. 39,
  44208. 12,
  44209. 12,
  44210. 12,
  44211. 10,
  44212. 12,
  44213. 29,
  44214. 12,
  44215. 12,
  44216. 12,
  44217. 10,
  44218. 12,
  44219. 12,
  44220. 12,
  44221. 12,
  44222. 12,
  44223. 12,
  44224. 12,
  44225. 12,
  44226. 12,
  44227. 29,
  44228. 12,
  44229. 12,
  44230. 9,
  44231. 12,
  44232. 12,
  44233. 12,
  44234. 12,
  44235. 12,
  44236. 12,
  44237. 12,
  44238. 12,
  44239. 12,
  44240. 12,
  44241. 29,
  44242. 29,
  44243. 12,
  44244. 12,
  44245. 12,
  44246. 12,
  44247. 12,
  44248. 12,
  44249. 12,
  44250. 12,
  44251. 29,
  44252. 12,
  44253. 12,
  44254. 12,
  44255. 12,
  44256. 12,
  44257. 12,
  44258. 12,
  44259. 12,
  44260. 12,
  44261. 12,
  44262. 12,
  44263. 12,
  44264. 12,
  44265. 12,
  44266. 12,
  44267. 12,
  44268. 12,
  44269. 12,
  44270. 12,
  44271. 12,
  44272. 12,
  44273. 12,
  44274. 12,
  44275. 12,
  44276. 12,
  44277. 12,
  44278. 12,
  44279. 12,
  44280. 12,
  44281. 12,
  44282. 12,
  44283. 12,
  44284. 12,
  44285. 12,
  44286. 12,
  44287. 12,
  44288. 12,
  44289. 12,
  44290. 12,
  44291. 12,
  44292. 29,
  44293. 29,
  44294. 12,
  44295. 12,
  44296. 12,
  44297. 12,
  44298. 12,
  44299. 29,
  44300. 12,
  44301. 12,
  44302. 29,
  44303. 12,
  44304. 29,
  44305. 29,
  44306. 29,
  44307. 29,
  44308. 29,
  44309. 29,
  44310. 29,
  44311. 29,
  44312. 29,
  44313. 29,
  44314. 29,
  44315. 29,
  44316. 12,
  44317. 12,
  44318. 12,
  44319. 12,
  44320. 29,
  44321. 29,
  44322. 29,
  44323. 29,
  44324. 29,
  44325. 29,
  44326. 29,
  44327. 29,
  44328. 29,
  44329. 29,
  44330. 12,
  44331. 12,
  44332. 12,
  44333. 12,
  44334. 12,
  44335. 12,
  44336. 12,
  44337. 12,
  44338. 12,
  44339. 12,
  44340. 12,
  44341. 12,
  44342. 12,
  44343. 12,
  44344. 12,
  44345. 29,
  44346. 29,
  44347. 29,
  44348. 29,
  44349. 29,
  44350. 29,
  44351. 29,
  44352. 29,
  44353. 29,
  44354. 29,
  44355. 29,
  44356. 29,
  44357. 29,
  44358. 29,
  44359. 29,
  44360. 29,
  44361. 29,
  44362. 12,
  44363. 12,
  44364. 12,
  44365. 12,
  44366. 12,
  44367. 12,
  44368. 12,
  44369. 12,
  44370. 12,
  44371. 12,
  44372. 12,
  44373. 12,
  44374. 12,
  44375. 12,
  44376. 12,
  44377. 12,
  44378. 12,
  44379. 12,
  44380. 12,
  44381. 12,
  44382. 12,
  44383. 12,
  44384. 12,
  44385. 12,
  44386. 12,
  44387. 12,
  44388. 12,
  44389. 12,
  44390. 12,
  44391. 12,
  44392. 12,
  44393. 12,
  44394. 12,
  44395. 12,
  44396. 12,
  44397. 12,
  44398. 12,
  44399. 12,
  44400. 12,
  44401. 12,
  44402. 12,
  44403. 12,
  44404. 12,
  44405. 12,
  44406. 12,
  44407. 12,
  44408. 12,
  44409. 12,
  44410. 12,
  44411. 12,
  44412. 12,
  44413. 12,
  44414. 12,
  44415. 12,
  44416. 12,
  44417. 12,
  44418. 29,
  44419. 12,
  44420. 29,
  44421. 12,
  44422. 12,
  44423. 12,
  44424. 12,
  44425. 12,
  44426. 12,
  44427. 12,
  44428. 12,
  44429. 12,
  44430. 12,
  44431. 12,
  44432. 12,
  44433. 12,
  44434. 12,
  44435. 12,
  44436. 12,
  44437. 12,
  44438. 12,
  44439. 12,
  44440. 12,
  44441. 12,
  44442. 12,
  44443. 12,
  44444. 12,
  44445. 12,
  44446. 12,
  44447. 12,
  44448. 12,
  44449. 12,
  44450. 12,
  44451. 12,
  44452. 12,
  44453. 12,
  44454. 12,
  44455. 12,
  44456. 12,
  44457. 12,
  44458. 12,
  44459. 12,
  44460. 12,
  44461. 12,
  44462. 12,
  44463. 12,
  44464. 29,
  44465. 12,
  44466. 29,
  44467. 29,
  44468. 12,
  44469. 12,
  44470. 12,
  44471. 29,
  44472. 29,
  44473. 12,
  44474. 12,
  44475. 29,
  44476. 12,
  44477. 12,
  44478. 12,
  44479. 29,
  44480. 12,
  44481. 29,
  44482. 9,
  44483. 9,
  44484. 12,
  44485. 29,
  44486. 12,
  44487. 12,
  44488. 12,
  44489. 12,
  44490. 29,
  44491. 12,
  44492. 12,
  44493. 29,
  44494. 29,
  44495. 29,
  44496. 29,
  44497. 12,
  44498. 12,
  44499. 29,
  44500. 12,
  44501. 29,
  44502. 12,
  44503. 29,
  44504. 29,
  44505. 29,
  44506. 29,
  44507. 29,
  44508. 29,
  44509. 12,
  44510. 29,
  44511. 12,
  44512. 12,
  44513. 12,
  44514. 12,
  44515. 12,
  44516. 29,
  44517. 29,
  44518. 29,
  44519. 29,
  44520. 12,
  44521. 12,
  44522. 12,
  44523. 12,
  44524. 29,
  44525. 29,
  44526. 12,
  44527. 12,
  44528. 12,
  44529. 12,
  44530. 12,
  44531. 12,
  44532. 12,
  44533. 12,
  44534. 12,
  44535. 12,
  44536. 29,
  44537. 12,
  44538. 12,
  44539. 12,
  44540. 29,
  44541. 12,
  44542. 12,
  44543. 12,
  44544. 12,
  44545. 12,
  44546. 29,
  44547. 12,
  44548. 12,
  44549. 12,
  44550. 12,
  44551. 12,
  44552. 12,
  44553. 12,
  44554. 12,
  44555. 12,
  44556. 12,
  44557. 12,
  44558. 12,
  44559. 12,
  44560. 29,
  44561. 29,
  44562. 12,
  44563. 12,
  44564. 29,
  44565. 29,
  44566. 29,
  44567. 29,
  44568. 12,
  44569. 12,
  44570. 29,
  44571. 29,
  44572. 12,
  44573. 12,
  44574. 29,
  44575. 29,
  44576. 12,
  44577. 12,
  44578. 12,
  44579. 12,
  44580. 12,
  44581. 12,
  44582. 12,
  44583. 12,
  44584. 12,
  44585. 12,
  44586. 12,
  44587. 12,
  44588. 12,
  44589. 12,
  44590. 12,
  44591. 12,
  44592. 12,
  44593. 12,
  44594. 29,
  44595. 29,
  44596. 12,
  44597. 12,
  44598. 29,
  44599. 29,
  44600. 12,
  44601. 12,
  44602. 12,
  44603. 12,
  44604. 12,
  44605. 12,
  44606. 12,
  44607. 12,
  44608. 12,
  44609. 12,
  44610. 12,
  44611. 12,
  44612. 12,
  44613. 29,
  44614. 12,
  44615. 12,
  44616. 12,
  44617. 29,
  44618. 12,
  44619. 12,
  44620. 12,
  44621. 12,
  44622. 12,
  44623. 12,
  44624. 12,
  44625. 12,
  44626. 12,
  44627. 12,
  44628. 12,
  44629. 29,
  44630. 12,
  44631. 12,
  44632. 12,
  44633. 12,
  44634. 12,
  44635. 12,
  44636. 12,
  44637. 12,
  44638. 12,
  44639. 12,
  44640. 12,
  44641. 12,
  44642. 12,
  44643. 12,
  44644. 12,
  44645. 12,
  44646. 12,
  44647. 12,
  44648. 12,
  44649. 12,
  44650. 12,
  44651. 12,
  44652. 12,
  44653. 12,
  44654. 12,
  44655. 29,
  44656. 12,
  44657. 12,
  44658. 12,
  44659. 12,
  44660. 12,
  44661. 12,
  44662. 12,
  44663. 12,
  44664. 12,
  44665. 12,
  44666. 12,
  44667. 12,
  44668. 12,
  44669. 12,
  44670. 12,
  44671. 12,
  44672. 12,
  44673. 12,
  44674. 12,
  44675. 12,
  44676. 12,
  44677. 12,
  44678. 12,
  44679. 12,
  44680. 12,
  44681. 12,
  44682. 12,
  44683. 12,
  44684. 12,
  44685. 12,
  44686. 12,
  44687. 12,
  44688. 12,
  44689. 12,
  44690. 12,
  44691. 12,
  44692. 12,
  44693. 12,
  44694. 12,
  44695. 12,
  44696. 12,
  44697. 12,
  44698. 12,
  44699. 12,
  44700. 12,
  44701. 12,
  44702. 12,
  44703. 12,
  44704. 12,
  44705. 12,
  44706. 29,
  44707. 12,
  44708. 12,
  44709. 12,
  44710. 12,
  44711. 12,
  44712. 12,
  44713. 12,
  44714. 14,
  44715. 14,
  44716. 12,
  44717. 12,
  44718. 12,
  44719. 12,
  44720. 12,
  44721. 12,
  44722. 12,
  44723. 12,
  44724. 12,
  44725. 12,
  44726. 12,
  44727. 12,
  44728. 12,
  44729. 0,
  44730. 1,
  44731. 12,
  44732. 12,
  44733. 12,
  44734. 12,
  44735. 12,
  44736. 12,
  44737. 12,
  44738. 12,
  44739. 12,
  44740. 12,
  44741. 12,
  44742. 12,
  44743. 12,
  44744. 12,
  44745. 12,
  44746. 12,
  44747. 12,
  44748. 12,
  44749. 12,
  44750. 12,
  44751. 12,
  44752. 12,
  44753. 12,
  44754. 12,
  44755. 12,
  44756. 12,
  44757. 12,
  44758. 12,
  44759. 12,
  44760. 12,
  44761. 12,
  44762. 12,
  44763. 12,
  44764. 12,
  44765. 12,
  44766. 12,
  44767. 12,
  44768. 12,
  44769. 12,
  44770. 12,
  44771. 12,
  44772. 12,
  44773. 12,
  44774. 12,
  44775. 12,
  44776. 12,
  44777. 12,
  44778. 12,
  44779. 12,
  44780. 12,
  44781. 12,
  44782. 12,
  44783. 12,
  44784. 12,
  44785. 12,
  44786. 12,
  44787. 12,
  44788. 12,
  44789. 12,
  44790. 12,
  44791. 12,
  44792. 12,
  44793. 12,
  44794. 12,
  44795. 12,
  44796. 12,
  44797. 12,
  44798. 12,
  44799. 12,
  44800. 14,
  44801. 14,
  44802. 14,
  44803. 14,
  44804. 39,
  44805. 39,
  44806. 39,
  44807. 39,
  44808. 39,
  44809. 39,
  44810. 39,
  44811. 39,
  44812. 39,
  44813. 39,
  44814. 39,
  44815. 39,
  44816. 12,
  44817. 12,
  44818. 12,
  44819. 12,
  44820. 12,
  44821. 12,
  44822. 12,
  44823. 12,
  44824. 12,
  44825. 12,
  44826. 12,
  44827. 12,
  44828. 12,
  44829. 12,
  44830. 12,
  44831. 12,
  44832. 12,
  44833. 12,
  44834. 12,
  44835. 12,
  44836. 12,
  44837. 12,
  44838. 12,
  44839. 12,
  44840. 12,
  44841. 12,
  44842. 12,
  44843. 12,
  44844. 12,
  44845. 12,
  44846. 12,
  44847. 12,
  44848. 12,
  44849. 12,
  44850. 12,
  44851. 12,
  44852. 12,
  44853. 12,
  44854. 12,
  44855. 12,
  44856. 12,
  44857. 12,
  44858. 12,
  44859. 39,
  44860. 39,
  44861. 39,
  44862. 39,
  44863. 39,
  44864. 39,
  44865. 39,
  44866. 39,
  44867. 39,
  44868. 39,
  44869. 39,
  44870. 39,
  44871. 39,
  44872. 39,
  44873. 39,
  44874. 39,
  44875. 39,
  44876. 39,
  44877. 39,
  44878. 39,
  44879. 39,
  44880. 29,
  44881. 29,
  44882. 29,
  44883. 29,
  44884. 29,
  44885. 29,
  44886. 29,
  44887. 29,
  44888. 29,
  44889. 29,
  44890. 29,
  44891. 29,
  44892. 29,
  44893. 29,
  44894. 29,
  44895. 29,
  44896. 29,
  44897. 29,
  44898. 29,
  44899. 29,
  44900. 29,
  44901. 29,
  44902. 29,
  44903. 29,
  44904. 29,
  44905. 29,
  44906. 29,
  44907. 29,
  44908. 29,
  44909. 29,
  44910. 29,
  44911. 29,
  44912. 29,
  44913. 29,
  44914. 29,
  44915. 29,
  44916. 29,
  44917. 29,
  44918. 29,
  44919. 29,
  44920. 29,
  44921. 29,
  44922. 29,
  44923. 29,
  44924. 29,
  44925. 29,
  44926. 29,
  44927. 29,
  44928. 29,
  44929. 29,
  44930. 29,
  44931. 29,
  44932. 29,
  44933. 29,
  44934. 29,
  44935. 29,
  44936. 29,
  44937. 29,
  44938. 29,
  44939. 29,
  44940. 29,
  44941. 29,
  44942. 29,
  44943. 12,
  44944. 29,
  44945. 29,
  44946. 29,
  44947. 29,
  44948. 29,
  44949. 29,
  44950. 29,
  44951. 29,
  44952. 29,
  44953. 29,
  44954. 29,
  44955. 29,
  44956. 29,
  44957. 29,
  44958. 29,
  44959. 29,
  44960. 29,
  44961. 29,
  44962. 29,
  44963. 29,
  44964. 29,
  44965. 29,
  44966. 29,
  44967. 29,
  44968. 29,
  44969. 29,
  44970. 29,
  44971. 29,
  44972. 29,
  44973. 29,
  44974. 29,
  44975. 29,
  44976. 29,
  44977. 29,
  44978. 29,
  44979. 29,
  44980. 29,
  44981. 29,
  44982. 29,
  44983. 29,
  44984. 29,
  44985. 29,
  44986. 29,
  44987. 29,
  44988. 12,
  44989. 12,
  44990. 12,
  44991. 12,
  44992. 29,
  44993. 29,
  44994. 29,
  44995. 29,
  44996. 29,
  44997. 29,
  44998. 29,
  44999. 29,
  45000. 29,
  45001. 29,
  45002. 29,
  45003. 29,
  45004. 29,
  45005. 29,
  45006. 29,
  45007. 29,
  45008. 29,
  45009. 29,
  45010. 29,
  45011. 29,
  45012. 29,
  45013. 29,
  45014. 29,
  45015. 29,
  45016. 29,
  45017. 29,
  45018. 29,
  45019. 29,
  45020. 29,
  45021. 29,
  45022. 29,
  45023. 29,
  45024. 29,
  45025. 29,
  45026. 29,
  45027. 29,
  45028. 29,
  45029. 12,
  45030. 12,
  45031. 12,
  45032. 12,
  45033. 12,
  45034. 12,
  45035. 12,
  45036. 12,
  45037. 12,
  45038. 12,
  45039. 12,
  45040. 29,
  45041. 29,
  45042. 29,
  45043. 29,
  45044. 29,
  45045. 29,
  45046. 29,
  45047. 29,
  45048. 29,
  45049. 29,
  45050. 29,
  45051. 29,
  45052. 29,
  45053. 29,
  45054. 29,
  45055. 29,
  45056. 12,
  45057. 12,
  45058. 29,
  45059. 29,
  45060. 29,
  45061. 29,
  45062. 12,
  45063. 12,
  45064. 12,
  45065. 12,
  45066. 12,
  45067. 12,
  45068. 12,
  45069. 12,
  45070. 12,
  45071. 12,
  45072. 29,
  45073. 29,
  45074. 12,
  45075. 29,
  45076. 29,
  45077. 29,
  45078. 29,
  45079. 29,
  45080. 29,
  45081. 29,
  45082. 12,
  45083. 12,
  45084. 12,
  45085. 12,
  45086. 12,
  45087. 12,
  45088. 12,
  45089. 12,
  45090. 29,
  45091. 29,
  45092. 12,
  45093. 12,
  45094. 29,
  45095. 29,
  45096. 12,
  45097. 12,
  45098. 12,
  45099. 12,
  45100. 29,
  45101. 29,
  45102. 12,
  45103. 12,
  45104. 29,
  45105. 29,
  45106. 12,
  45107. 12,
  45108. 12,
  45109. 12,
  45110. 29,
  45111. 29,
  45112. 29,
  45113. 12,
  45114. 12,
  45115. 29,
  45116. 12,
  45117. 12,
  45118. 29,
  45119. 29,
  45120. 29,
  45121. 29,
  45122. 12,
  45123. 12,
  45124. 12,
  45125. 12,
  45126. 12,
  45127. 12,
  45128. 12,
  45129. 12,
  45130. 12,
  45131. 12,
  45132. 12,
  45133. 12,
  45134. 12,
  45135. 12,
  45136. 12,
  45137. 12,
  45138. 29,
  45139. 29,
  45140. 29,
  45141. 29,
  45142. 12,
  45143. 12,
  45144. 12,
  45145. 12,
  45146. 12,
  45147. 12,
  45148. 12,
  45149. 12,
  45150. 12,
  45151. 29,
  45152. 12,
  45153. 12,
  45154. 12,
  45155. 12,
  45156. 12,
  45157. 12,
  45158. 12,
  45159. 12,
  45160. 12,
  45161. 12,
  45162. 12,
  45163. 12,
  45164. 12,
  45165. 12,
  45166. 12,
  45167. 12,
  45168. 14,
  45169. 14,
  45170. 14,
  45171. 14,
  45172. 12,
  45173. 29,
  45174. 29,
  45175. 12,
  45176. 12,
  45177. 29,
  45178. 12,
  45179. 12,
  45180. 12,
  45181. 12,
  45182. 29,
  45183. 29,
  45184. 12,
  45185. 12,
  45186. 12,
  45187. 12,
  45188. 14,
  45189. 14,
  45190. 29,
  45191. 29,
  45192. 14,
  45193. 12,
  45194. 14,
  45195. 14,
  45196. 14,
  45197. 14,
  45198. 14,
  45199. 14,
  45200. 12,
  45201. 12,
  45202. 12,
  45203. 12,
  45204. 12,
  45205. 12,
  45206. 12,
  45207. 12,
  45208. 12,
  45209. 12,
  45210. 12,
  45211. 12,
  45212. 12,
  45213. 12,
  45214. 12,
  45215. 12,
  45216. 12,
  45217. 12,
  45218. 12,
  45219. 12,
  45220. 12,
  45221. 12,
  45222. 12,
  45223. 12,
  45224. 12,
  45225. 14,
  45226. 14,
  45227. 14,
  45228. 12,
  45229. 12,
  45230. 12,
  45231. 12,
  45232. 29,
  45233. 12,
  45234. 29,
  45235. 12,
  45236. 12,
  45237. 12,
  45238. 12,
  45239. 12,
  45240. 12,
  45241. 12,
  45242. 12,
  45243. 12,
  45244. 12,
  45245. 12,
  45246. 12,
  45247. 12,
  45248. 12,
  45249. 12,
  45250. 12,
  45251. 12,
  45252. 12,
  45253. 12,
  45254. 12,
  45255. 12,
  45256. 12,
  45257. 12,
  45258. 12,
  45259. 12,
  45260. 12,
  45261. 12,
  45262. 12,
  45263. 12,
  45264. 29,
  45265. 29,
  45266. 12,
  45267. 29,
  45268. 29,
  45269. 29,
  45270. 12,
  45271. 29,
  45272. 14,
  45273. 29,
  45274. 29,
  45275. 12,
  45276. 29,
  45277. 29,
  45278. 12,
  45279. 29,
  45280. 12,
  45281. 12,
  45282. 12,
  45283. 12,
  45284. 12,
  45285. 12,
  45286. 12,
  45287. 12,
  45288. 12,
  45289. 12,
  45290. 12,
  45291. 12,
  45292. 12,
  45293. 12,
  45294. 12,
  45295. 14,
  45296. 12,
  45297. 12,
  45298. 12,
  45299. 12,
  45300. 12,
  45301. 12,
  45302. 12,
  45303. 12,
  45304. 12,
  45305. 12,
  45306. 12,
  45307. 12,
  45308. 12,
  45309. 12,
  45310. 12,
  45311. 12,
  45312. 12,
  45313. 12,
  45314. 12,
  45315. 12,
  45316. 12,
  45317. 12,
  45318. 12,
  45319. 12,
  45320. 12,
  45321. 12,
  45322. 12,
  45323. 12,
  45324. 12,
  45325. 12,
  45326. 29,
  45327. 29,
  45328. 12,
  45329. 12,
  45330. 12,
  45331. 12,
  45332. 12,
  45333. 12,
  45334. 12,
  45335. 12,
  45336. 12,
  45337. 12,
  45338. 12,
  45339. 12,
  45340. 12,
  45341. 12,
  45342. 12,
  45343. 12,
  45344. 12,
  45345. 12,
  45346. 12,
  45347. 12,
  45348. 12,
  45349. 12,
  45350. 12,
  45351. 12,
  45352. 12,
  45353. 12,
  45354. 12,
  45355. 12,
  45356. 12,
  45357. 14,
  45358. 14,
  45359. 14,
  45360. 14,
  45361. 14,
  45362. 14,
  45363. 14,
  45364. 14,
  45365. 14,
  45366. 14,
  45367. 14,
  45368. 14,
  45369. 29,
  45370. 29,
  45371. 29,
  45372. 29,
  45373. 14,
  45374. 12,
  45375. 14,
  45376. 14,
  45377. 14,
  45378. 29,
  45379. 14,
  45380. 14,
  45381. 29,
  45382. 29,
  45383. 29,
  45384. 14,
  45385. 14,
  45386. 29,
  45387. 29,
  45388. 14,
  45389. 29,
  45390. 29,
  45391. 14,
  45392. 14,
  45393. 14,
  45394. 12,
  45395. 29,
  45396. 12,
  45397. 12,
  45398. 12,
  45399. 12,
  45400. 29,
  45401. 29,
  45402. 14,
  45403. 29,
  45404. 29,
  45405. 29,
  45406. 29,
  45407. 29,
  45408. 29,
  45409. 14,
  45410. 14,
  45411. 14,
  45412. 14,
  45413. 14,
  45414. 29,
  45415. 14,
  45416. 14,
  45417. 14,
  45418. 14,
  45419. 29,
  45420. 29,
  45421. 14,
  45422. 14,
  45423. 14,
  45424. 14,
  45425. 14,
  45426. 14,
  45427. 14,
  45428. 14,
  45429. 12,
  45430. 12,
  45431. 12,
  45432. 14,
  45433. 14,
  45434. 14,
  45435. 14,
  45436. 14,
  45437. 14,
  45438. 12,
  45439. 12,
  45440. 12,
  45441. 12,
  45442. 12,
  45443. 12,
  45444. 12,
  45445. 12,
  45446. 12,
  45447. 12,
  45448. 12,
  45449. 12,
  45450. 12,
  45451. 12,
  45452. 12,
  45453. 12,
  45454. 12,
  45455. 12,
  45456. 12,
  45457. 12,
  45458. 12,
  45459. 12,
  45460. 12,
  45461. 12,
  45462. 12,
  45463. 12,
  45464. 12,
  45465. 12,
  45466. 12,
  45467. 12,
  45468. 12,
  45469. 12,
  45470. 12,
  45471. 12,
  45472. 12,
  45473. 12,
  45474. 12,
  45475. 12,
  45476. 12,
  45477. 12,
  45478. 12,
  45479. 12,
  45480. 12,
  45481. 12,
  45482. 12,
  45483. 12,
  45484. 12,
  45485. 12,
  45486. 12,
  45487. 12,
  45488. 12,
  45489. 12,
  45490. 12,
  45491. 12,
  45492. 12,
  45493. 12,
  45494. 12,
  45495. 12,
  45496. 12,
  45497. 12,
  45498. 12,
  45499. 12,
  45500. 12,
  45501. 12,
  45502. 12,
  45503. 12,
  45504. 12,
  45505. 12,
  45506. 12,
  45507. 12,
  45508. 12,
  45509. 12,
  45510. 12,
  45511. 29,
  45512. 12,
  45513. 12,
  45514. 12,
  45515. 3,
  45516. 3,
  45517. 3,
  45518. 3,
  45519. 12,
  45520. 12,
  45521. 12,
  45522. 6,
  45523. 6,
  45524. 12,
  45525. 12,
  45526. 12,
  45527. 12,
  45528. 0,
  45529. 1,
  45530. 0,
  45531. 1,
  45532. 0,
  45533. 1,
  45534. 0,
  45535. 1,
  45536. 0,
  45537. 1,
  45538. 0,
  45539. 1,
  45540. 0,
  45541. 1,
  45542. 29,
  45543. 29,
  45544. 29,
  45545. 29,
  45546. 29,
  45547. 29,
  45548. 29,
  45549. 29,
  45550. 29,
  45551. 29,
  45552. 29,
  45553. 29,
  45554. 29,
  45555. 29,
  45556. 29,
  45557. 29,
  45558. 29,
  45559. 29,
  45560. 29,
  45561. 29,
  45562. 29,
  45563. 29,
  45564. 29,
  45565. 29,
  45566. 29,
  45567. 29,
  45568. 29,
  45569. 29,
  45570. 29,
  45571. 29,
  45572. 12,
  45573. 12,
  45574. 12,
  45575. 12,
  45576. 12,
  45577. 12,
  45578. 12,
  45579. 12,
  45580. 12,
  45581. 12,
  45582. 12,
  45583. 12,
  45584. 12,
  45585. 12,
  45586. 12,
  45587. 12,
  45588. 12,
  45589. 12,
  45590. 12,
  45591. 12,
  45592. 12,
  45593. 12,
  45594. 12,
  45595. 12,
  45596. 12,
  45597. 12,
  45598. 12,
  45599. 12,
  45600. 12,
  45601. 12,
  45602. 12,
  45603. 12,
  45604. 12,
  45605. 12,
  45606. 12,
  45607. 12,
  45608. 12,
  45609. 12,
  45610. 12,
  45611. 12,
  45612. 12,
  45613. 12,
  45614. 12,
  45615. 12,
  45616. 12,
  45617. 12,
  45618. 12,
  45619. 12,
  45620. 12,
  45621. 0,
  45622. 1,
  45623. 12,
  45624. 12,
  45625. 12,
  45626. 12,
  45627. 12,
  45628. 12,
  45629. 12,
  45630. 12,
  45631. 12,
  45632. 12,
  45633. 12,
  45634. 12,
  45635. 12,
  45636. 12,
  45637. 12,
  45638. 12,
  45639. 12,
  45640. 12,
  45641. 12,
  45642. 12,
  45643. 12,
  45644. 12,
  45645. 12,
  45646. 12,
  45647. 12,
  45648. 12,
  45649. 12,
  45650. 12,
  45651. 12,
  45652. 12,
  45653. 12,
  45654. 0,
  45655. 1,
  45656. 0,
  45657. 1,
  45658. 0,
  45659. 1,
  45660. 0,
  45661. 1,
  45662. 0,
  45663. 1,
  45664. 12,
  45665. 12,
  45666. 12,
  45667. 12,
  45668. 12,
  45669. 12,
  45670. 12,
  45671. 12,
  45672. 12,
  45673. 12,
  45674. 12,
  45675. 12,
  45676. 12,
  45677. 12,
  45678. 12,
  45679. 12,
  45680. 12,
  45681. 12,
  45682. 12,
  45683. 12,
  45684. 12,
  45685. 12,
  45686. 12,
  45687. 12,
  45688. 12,
  45689. 12,
  45690. 12,
  45691. 12,
  45692. 12,
  45693. 12,
  45694. 12,
  45695. 12,
  45696. 12,
  45697. 12,
  45698. 12,
  45699. 12,
  45700. 12,
  45701. 12,
  45702. 12,
  45703. 12,
  45704. 12,
  45705. 12,
  45706. 12,
  45707. 12,
  45708. 12,
  45709. 12,
  45710. 12,
  45711. 12,
  45712. 12,
  45713. 12,
  45714. 12,
  45715. 0,
  45716. 1,
  45717. 0,
  45718. 1,
  45719. 0,
  45720. 1,
  45721. 0,
  45722. 1,
  45723. 0,
  45724. 1,
  45725. 0,
  45726. 1,
  45727. 0,
  45728. 1,
  45729. 0,
  45730. 1,
  45731. 0,
  45732. 1,
  45733. 0,
  45734. 1,
  45735. 0,
  45736. 1,
  45737. 12,
  45738. 12,
  45739. 12,
  45740. 12,
  45741. 12,
  45742. 12,
  45743. 12,
  45744. 12,
  45745. 12,
  45746. 12,
  45747. 12,
  45748. 12,
  45749. 12,
  45750. 12,
  45751. 12,
  45752. 12,
  45753. 12,
  45754. 12,
  45755. 12,
  45756. 12,
  45757. 12,
  45758. 12,
  45759. 12,
  45760. 12,
  45761. 12,
  45762. 12,
  45763. 12,
  45764. 12,
  45765. 12,
  45766. 12,
  45767. 12,
  45768. 12,
  45769. 12,
  45770. 12,
  45771. 12,
  45772. 12,
  45773. 12,
  45774. 12,
  45775. 12,
  45776. 12,
  45777. 12,
  45778. 12,
  45779. 12,
  45780. 12,
  45781. 12,
  45782. 12,
  45783. 12,
  45784. 12,
  45785. 12,
  45786. 12,
  45787. 12,
  45788. 12,
  45789. 12,
  45790. 12,
  45791. 12,
  45792. 12,
  45793. 12,
  45794. 12,
  45795. 12,
  45796. 12,
  45797. 12,
  45798. 12,
  45799. 12,
  45800. 0,
  45801. 1,
  45802. 0,
  45803. 1,
  45804. 12,
  45805. 12,
  45806. 12,
  45807. 12,
  45808. 12,
  45809. 12,
  45810. 12,
  45811. 12,
  45812. 12,
  45813. 12,
  45814. 12,
  45815. 12,
  45816. 12,
  45817. 12,
  45818. 12,
  45819. 12,
  45820. 12,
  45821. 12,
  45822. 12,
  45823. 12,
  45824. 12,
  45825. 12,
  45826. 12,
  45827. 12,
  45828. 12,
  45829. 12,
  45830. 12,
  45831. 12,
  45832. 12,
  45833. 12,
  45834. 12,
  45835. 12,
  45836. 0,
  45837. 1,
  45838. 12,
  45839. 12,
  45840. 12,
  45841. 12,
  45842. 12,
  45843. 12,
  45844. 12,
  45845. 12,
  45846. 12,
  45847. 12,
  45848. 12,
  45849. 12,
  45850. 12,
  45851. 12,
  45852. 12,
  45853. 12,
  45854. 12,
  45855. 12,
  45856. 12,
  45857. 12,
  45858. 12,
  45859. 12,
  45860. 12,
  45861. 12,
  45862. 12,
  45863. 12,
  45864. 12,
  45865. 12,
  45866. 12,
  45867. 12,
  45868. 12,
  45869. 12,
  45870. 12,
  45871. 12,
  45872. 12,
  45873. 12,
  45874. 12,
  45875. 12,
  45876. 12,
  45877. 12,
  45878. 12,
  45879. 12,
  45880. 12,
  45881. 12,
  45882. 12,
  45883. 12,
  45884. 12,
  45885. 12,
  45886. 12,
  45887. 12,
  45888. 12,
  45889. 12,
  45890. 12,
  45891. 12,
  45892. 12,
  45893. 29,
  45894. 29,
  45895. 29,
  45896. 29,
  45897. 29,
  45898. 39,
  45899. 39,
  45900. 39,
  45901. 39,
  45902. 39,
  45903. 39,
  45904. 12,
  45905. 12,
  45906. 12,
  45907. 12,
  45908. 12,
  45909. 12,
  45910. 12,
  45911. 12,
  45912. 12,
  45913. 12,
  45914. 12,
  45915. 12,
  45916. 12,
  45917. 12,
  45918. 12,
  45919. 12,
  45920. 12,
  45921. 12,
  45922. 12,
  45923. 12,
  45924. 12,
  45925. 12,
  45926. 12,
  45927. 12,
  45928. 12,
  45929. 12,
  45930. 12,
  45931. 12,
  45932. 12,
  45933. 12,
  45934. 12,
  45935. 12,
  45936. 12,
  45937. 12,
  45938. 12,
  45939. 12,
  45940. 12,
  45941. 12,
  45942. 12,
  45943. 12,
  45944. 12,
  45945. 12,
  45946. 12,
  45947. 12,
  45948. 12,
  45949. 12,
  45950. 12,
  45951. 21,
  45952. 21,
  45953. 21,
  45954. 12,
  45955. 12,
  45956. 39,
  45957. 39,
  45958. 39,
  45959. 39,
  45960. 39,
  45961. 6,
  45962. 17,
  45963. 17,
  45964. 17,
  45965. 12,
  45966. 6,
  45967. 17,
  45968. 12,
  45969. 12,
  45970. 12,
  45971. 12,
  45972. 12,
  45973. 12,
  45974. 12,
  45975. 12,
  45976. 12,
  45977. 12,
  45978. 12,
  45979. 12,
  45980. 12,
  45981. 12,
  45982. 12,
  45983. 12,
  45984. 12,
  45985. 12,
  45986. 12,
  45987. 12,
  45988. 12,
  45989. 12,
  45990. 12,
  45991. 12,
  45992. 12,
  45993. 12,
  45994. 12,
  45995. 12,
  45996. 12,
  45997. 12,
  45998. 12,
  45999. 12,
  46000. 12,
  46001. 12,
  46002. 12,
  46003. 12,
  46004. 12,
  46005. 12,
  46006. 12,
  46007. 12,
  46008. 12,
  46009. 12,
  46010. 12,
  46011. 12,
  46012. 12,
  46013. 12,
  46014. 12,
  46015. 12,
  46016. 17,
  46017. 39,
  46018. 39,
  46019. 39,
  46020. 39,
  46021. 39,
  46022. 39,
  46023. 39,
  46024. 39,
  46025. 39,
  46026. 39,
  46027. 39,
  46028. 39,
  46029. 39,
  46030. 39,
  46031. 21,
  46032. 12,
  46033. 12,
  46034. 12,
  46035. 12,
  46036. 12,
  46037. 12,
  46038. 12,
  46039. 12,
  46040. 12,
  46041. 12,
  46042. 12,
  46043. 12,
  46044. 12,
  46045. 12,
  46046. 12,
  46047. 12,
  46048. 12,
  46049. 12,
  46050. 12,
  46051. 12,
  46052. 12,
  46053. 12,
  46054. 12,
  46055. 12,
  46056. 12,
  46057. 12,
  46058. 12,
  46059. 12,
  46060. 12,
  46061. 12,
  46062. 12,
  46063. 12,
  46064. 12,
  46065. 12,
  46066. 12,
  46067. 12,
  46068. 12,
  46069. 12,
  46070. 12,
  46071. 12,
  46072. 12,
  46073. 12,
  46074. 12,
  46075. 12,
  46076. 12,
  46077. 12,
  46078. 12,
  46079. 12,
  46080. 12,
  46081. 12,
  46082. 12,
  46083. 12,
  46084. 12,
  46085. 12,
  46086. 12,
  46087. 12,
  46088. 12,
  46089. 12,
  46090. 12,
  46091. 12,
  46092. 12,
  46093. 12,
  46094. 12,
  46095. 39,
  46096. 21,
  46097. 21,
  46098. 21,
  46099. 21,
  46100. 21,
  46101. 21,
  46102. 21,
  46103. 21,
  46104. 21,
  46105. 21,
  46106. 21,
  46107. 21,
  46108. 21,
  46109. 21,
  46110. 21,
  46111. 21,
  46112. 21,
  46113. 21,
  46114. 21,
  46115. 21,
  46116. 21,
  46117. 21,
  46118. 21,
  46119. 21,
  46120. 21,
  46121. 21,
  46122. 21,
  46123. 21,
  46124. 21,
  46125. 21,
  46126. 21,
  46127. 21,
  46128. 3,
  46129. 3,
  46130. 3,
  46131. 3,
  46132. 3,
  46133. 3,
  46134. 3,
  46135. 3,
  46136. 3,
  46137. 3,
  46138. 3,
  46139. 3,
  46140. 3,
  46141. 3,
  46142. 17,
  46143. 17,
  46144. 17,
  46145. 17,
  46146. 17,
  46147. 17,
  46148. 17,
  46149. 17,
  46150. 12,
  46151. 17,
  46152. 0,
  46153. 17,
  46154. 12,
  46155. 12,
  46156. 3,
  46157. 3,
  46158. 12,
  46159. 12,
  46160. 3,
  46161. 3,
  46162. 0,
  46163. 1,
  46164. 0,
  46165. 1,
  46166. 0,
  46167. 1,
  46168. 0,
  46169. 1,
  46170. 17,
  46171. 17,
  46172. 17,
  46173. 17,
  46174. 6,
  46175. 12,
  46176. 17,
  46177. 17,
  46178. 12,
  46179. 17,
  46180. 17,
  46181. 12,
  46182. 12,
  46183. 12,
  46184. 12,
  46185. 12,
  46186. 19,
  46187. 19,
  46188. 39,
  46189. 39,
  46190. 39,
  46191. 39,
  46192. 14,
  46193. 14,
  46194. 14,
  46195. 14,
  46196. 14,
  46197. 14,
  46198. 14,
  46199. 14,
  46200. 14,
  46201. 14,
  46202. 14,
  46203. 14,
  46204. 14,
  46205. 14,
  46206. 14,
  46207. 14,
  46208. 14,
  46209. 14,
  46210. 14,
  46211. 14,
  46212. 14,
  46213. 14,
  46214. 14,
  46215. 14,
  46216. 14,
  46217. 14,
  46218. 14,
  46219. 14,
  46220. 14,
  46221. 14,
  46222. 14,
  46223. 14,
  46224. 14,
  46225. 1,
  46226. 1,
  46227. 14,
  46228. 14,
  46229. 5,
  46230. 14,
  46231. 14,
  46232. 0,
  46233. 1,
  46234. 0,
  46235. 1,
  46236. 0,
  46237. 1,
  46238. 0,
  46239. 1,
  46240. 0,
  46241. 1,
  46242. 14,
  46243. 14,
  46244. 0,
  46245. 1,
  46246. 0,
  46247. 1,
  46248. 0,
  46249. 1,
  46250. 0,
  46251. 1,
  46252. 5,
  46253. 0,
  46254. 1,
  46255. 1,
  46256. 14,
  46257. 14,
  46258. 14,
  46259. 14,
  46260. 14,
  46261. 14,
  46262. 14,
  46263. 14,
  46264. 14,
  46265. 14,
  46266. 21,
  46267. 21,
  46268. 21,
  46269. 21,
  46270. 21,
  46271. 21,
  46272. 14,
  46273. 14,
  46274. 14,
  46275. 14,
  46276. 14,
  46277. 14,
  46278. 14,
  46279. 14,
  46280. 14,
  46281. 14,
  46282. 14,
  46283. 5,
  46284. 5,
  46285. 14,
  46286. 14,
  46287. 14,
  46288. 39,
  46289. 32,
  46290. 14,
  46291. 32,
  46292. 14,
  46293. 32,
  46294. 14,
  46295. 32,
  46296. 14,
  46297. 32,
  46298. 14,
  46299. 14,
  46300. 14,
  46301. 14,
  46302. 14,
  46303. 14,
  46304. 14,
  46305. 14,
  46306. 14,
  46307. 14,
  46308. 14,
  46309. 14,
  46310. 14,
  46311. 14,
  46312. 14,
  46313. 14,
  46314. 14,
  46315. 14,
  46316. 14,
  46317. 14,
  46318. 14,
  46319. 14,
  46320. 14,
  46321. 14,
  46322. 14,
  46323. 32,
  46324. 14,
  46325. 14,
  46326. 14,
  46327. 14,
  46328. 14,
  46329. 14,
  46330. 14,
  46331. 14,
  46332. 14,
  46333. 14,
  46334. 14,
  46335. 14,
  46336. 14,
  46337. 14,
  46338. 14,
  46339. 14,
  46340. 14,
  46341. 14,
  46342. 14,
  46343. 14,
  46344. 14,
  46345. 14,
  46346. 14,
  46347. 14,
  46348. 14,
  46349. 14,
  46350. 14,
  46351. 14,
  46352. 14,
  46353. 14,
  46354. 14,
  46355. 32,
  46356. 14,
  46357. 32,
  46358. 14,
  46359. 32,
  46360. 14,
  46361. 14,
  46362. 14,
  46363. 14,
  46364. 14,
  46365. 14,
  46366. 32,
  46367. 14,
  46368. 14,
  46369. 14,
  46370. 14,
  46371. 14,
  46372. 14,
  46373. 32,
  46374. 32,
  46375. 39,
  46376. 39,
  46377. 21,
  46378. 21,
  46379. 5,
  46380. 5,
  46381. 5,
  46382. 5,
  46383. 14,
  46384. 5,
  46385. 32,
  46386. 14,
  46387. 32,
  46388. 14,
  46389. 32,
  46390. 14,
  46391. 32,
  46392. 14,
  46393. 32,
  46394. 14,
  46395. 14,
  46396. 14,
  46397. 14,
  46398. 14,
  46399. 14,
  46400. 14,
  46401. 14,
  46402. 14,
  46403. 14,
  46404. 14,
  46405. 14,
  46406. 14,
  46407. 14,
  46408. 14,
  46409. 14,
  46410. 14,
  46411. 14,
  46412. 14,
  46413. 14,
  46414. 14,
  46415. 14,
  46416. 14,
  46417. 14,
  46418. 14,
  46419. 32,
  46420. 14,
  46421. 14,
  46422. 14,
  46423. 14,
  46424. 14,
  46425. 14,
  46426. 14,
  46427. 14,
  46428. 14,
  46429. 14,
  46430. 14,
  46431. 14,
  46432. 14,
  46433. 14,
  46434. 14,
  46435. 14,
  46436. 14,
  46437. 14,
  46438. 14,
  46439. 14,
  46440. 14,
  46441. 14,
  46442. 14,
  46443. 14,
  46444. 14,
  46445. 14,
  46446. 14,
  46447. 14,
  46448. 14,
  46449. 14,
  46450. 14,
  46451. 32,
  46452. 14,
  46453. 32,
  46454. 14,
  46455. 32,
  46456. 14,
  46457. 14,
  46458. 14,
  46459. 14,
  46460. 14,
  46461. 14,
  46462. 32,
  46463. 14,
  46464. 14,
  46465. 14,
  46466. 14,
  46467. 14,
  46468. 14,
  46469. 32,
  46470. 32,
  46471. 14,
  46472. 14,
  46473. 14,
  46474. 14,
  46475. 5,
  46476. 32,
  46477. 5,
  46478. 5,
  46479. 14,
  46480. 14,
  46481. 14,
  46482. 14,
  46483. 14,
  46484. 14,
  46485. 14,
  46486. 14,
  46487. 14,
  46488. 14,
  46489. 14,
  46490. 14,
  46491. 14,
  46492. 14,
  46493. 14,
  46494. 14,
  46495. 14,
  46496. 14,
  46497. 14,
  46498. 14,
  46499. 14,
  46500. 14,
  46501. 14,
  46502. 14,
  46503. 14,
  46504. 14,
  46505. 14,
  46506. 14,
  46507. 14,
  46508. 14,
  46509. 14,
  46510. 14,
  46511. 14,
  46512. 14,
  46513. 14,
  46514. 14,
  46515. 14,
  46516. 39,
  46517. 39,
  46518. 39,
  46519. 39,
  46520. 39,
  46521. 39,
  46522. 39,
  46523. 39,
  46524. 39,
  46525. 39,
  46526. 39,
  46527. 39,
  46528. 32,
  46529. 32,
  46530. 32,
  46531. 32,
  46532. 32,
  46533. 32,
  46534. 32,
  46535. 32,
  46536. 32,
  46537. 32,
  46538. 32,
  46539. 32,
  46540. 32,
  46541. 32,
  46542. 32,
  46543. 32,
  46544. 14,
  46545. 14,
  46546. 14,
  46547. 14,
  46548. 14,
  46549. 14,
  46550. 14,
  46551. 14,
  46552. 14,
  46553. 14,
  46554. 14,
  46555. 14,
  46556. 14,
  46557. 14,
  46558. 14,
  46559. 14,
  46560. 14,
  46561. 14,
  46562. 14,
  46563. 14,
  46564. 14,
  46565. 14,
  46566. 14,
  46567. 14,
  46568. 14,
  46569. 14,
  46570. 14,
  46571. 14,
  46572. 14,
  46573. 14,
  46574. 14,
  46575. 14,
  46576. 14,
  46577. 14,
  46578. 14,
  46579. 14,
  46580. 14,
  46581. 14,
  46582. 14,
  46583. 14,
  46584. 29,
  46585. 29,
  46586. 29,
  46587. 29,
  46588. 29,
  46589. 29,
  46590. 29,
  46591. 29,
  46592. 14,
  46593. 14,
  46594. 14,
  46595. 14,
  46596. 14,
  46597. 14,
  46598. 14,
  46599. 14,
  46600. 14,
  46601. 14,
  46602. 14,
  46603. 14,
  46604. 14,
  46605. 14,
  46606. 14,
  46607. 14,
  46608. 14,
  46609. 14,
  46610. 14,
  46611. 14,
  46612. 14,
  46613. 14,
  46614. 14,
  46615. 14,
  46616. 14,
  46617. 14,
  46618. 14,
  46619. 14,
  46620. 14,
  46621. 14,
  46622. 14,
  46623. 14,
  46624. 14,
  46625. 14,
  46626. 14,
  46627. 14,
  46628. 14,
  46629. 14,
  46630. 14,
  46631. 14,
  46632. 14,
  46633. 14,
  46634. 14,
  46635. 14,
  46636. 14,
  46637. 14,
  46638. 14,
  46639. 14,
  46640. 12,
  46641. 12,
  46642. 12,
  46643. 12,
  46644. 12,
  46645. 12,
  46646. 12,
  46647. 12,
  46648. 12,
  46649. 12,
  46650. 12,
  46651. 12,
  46652. 12,
  46653. 12,
  46654. 12,
  46655. 12,
  46656. 12,
  46657. 12,
  46658. 12,
  46659. 12,
  46660. 12,
  46661. 12,
  46662. 12,
  46663. 12,
  46664. 12,
  46665. 12,
  46666. 12,
  46667. 12,
  46668. 12,
  46669. 12,
  46670. 12,
  46671. 12,
  46672. 14,
  46673. 14,
  46674. 14,
  46675. 14,
  46676. 14,
  46677. 14,
  46678. 14,
  46679. 14,
  46680. 14,
  46681. 14,
  46682. 14,
  46683. 14,
  46684. 14,
  46685. 14,
  46686. 14,
  46687. 14,
  46688. 14,
  46689. 14,
  46690. 14,
  46691. 14,
  46692. 14,
  46693. 14,
  46694. 14,
  46695. 14,
  46696. 14,
  46697. 14,
  46698. 14,
  46699. 14,
  46700. 14,
  46701. 14,
  46702. 14,
  46703. 14,
  46704. 14,
  46705. 14,
  46706. 14,
  46707. 14,
  46708. 14,
  46709. 14,
  46710. 14,
  46711. 14,
  46712. 14,
  46713. 14,
  46714. 14,
  46715. 14,
  46716. 14,
  46717. 14,
  46718. 14,
  46719. 14,
  46720. 14,
  46721. 14,
  46722. 14,
  46723. 14,
  46724. 14,
  46725. 5,
  46726. 14,
  46727. 14,
  46728. 14,
  46729. 14,
  46730. 14,
  46731. 14,
  46732. 14,
  46733. 14,
  46734. 14,
  46735. 14,
  46736. 14,
  46737. 14,
  46738. 14,
  46739. 14,
  46740. 14,
  46741. 14,
  46742. 14,
  46743. 14,
  46744. 14,
  46745. 14,
  46746. 14,
  46747. 14,
  46748. 14,
  46749. 14,
  46750. 14,
  46751. 14,
  46752. 14,
  46753. 14,
  46754. 14,
  46755. 14,
  46756. 14,
  46757. 14,
  46758. 14,
  46759. 14,
  46760. 14,
  46761. 14,
  46762. 14,
  46763. 14,
  46764. 14,
  46765. 14,
  46766. 14,
  46767. 14,
  46768. 14,
  46769. 14,
  46770. 14,
  46771. 14,
  46772. 14,
  46773. 14,
  46774. 14,
  46775. 39,
  46776. 39,
  46777. 39,
  46778. 39,
  46779. 39,
  46780. 39,
  46781. 39,
  46782. 39,
  46783. 39,
  46784. 12,
  46785. 12,
  46786. 12,
  46787. 12,
  46788. 12,
  46789. 12,
  46790. 12,
  46791. 12,
  46792. 12,
  46793. 12,
  46794. 12,
  46795. 12,
  46796. 12,
  46797. 12,
  46798. 12,
  46799. 12,
  46800. 12,
  46801. 12,
  46802. 12,
  46803. 12,
  46804. 12,
  46805. 12,
  46806. 12,
  46807. 12,
  46808. 12,
  46809. 12,
  46810. 12,
  46811. 12,
  46812. 12,
  46813. 12,
  46814. 12,
  46815. 12,
  46816. 12,
  46817. 12,
  46818. 12,
  46819. 12,
  46820. 12,
  46821. 12,
  46822. 12,
  46823. 12,
  46824. 12,
  46825. 12,
  46826. 12,
  46827. 12,
  46828. 12,
  46829. 12,
  46830. 17,
  46831. 17,
  46832. 12,
  46833. 12,
  46834. 12,
  46835. 12,
  46836. 12,
  46837. 12,
  46838. 12,
  46839. 12,
  46840. 12,
  46841. 12,
  46842. 12,
  46843. 12,
  46844. 12,
  46845. 12,
  46846. 12,
  46847. 12,
  46848. 12,
  46849. 12,
  46850. 12,
  46851. 12,
  46852. 12,
  46853. 12,
  46854. 12,
  46855. 12,
  46856. 12,
  46857. 12,
  46858. 12,
  46859. 12,
  46860. 12,
  46861. 12,
  46862. 12,
  46863. 12,
  46864. 12,
  46865. 12,
  46866. 12,
  46867. 12,
  46868. 12,
  46869. 12,
  46870. 12,
  46871. 12,
  46872. 12,
  46873. 12,
  46874. 12,
  46875. 12,
  46876. 12,
  46877. 17,
  46878. 6,
  46879. 17,
  46880. 12,
  46881. 12,
  46882. 12,
  46883. 12,
  46884. 12,
  46885. 12,
  46886. 12,
  46887. 12,
  46888. 12,
  46889. 12,
  46890. 12,
  46891. 12,
  46892. 12,
  46893. 12,
  46894. 12,
  46895. 12,
  46896. 11,
  46897. 11,
  46898. 11,
  46899. 11,
  46900. 11,
  46901. 11,
  46902. 11,
  46903. 11,
  46904. 11,
  46905. 11,
  46906. 12,
  46907. 12,
  46908. 12,
  46909. 12,
  46910. 12,
  46911. 12,
  46912. 12,
  46913. 12,
  46914. 12,
  46915. 12,
  46916. 12,
  46917. 12,
  46918. 12,
  46919. 12,
  46920. 12,
  46921. 12,
  46922. 12,
  46923. 12,
  46924. 12,
  46925. 12,
  46926. 12,
  46927. 12,
  46928. 12,
  46929. 12,
  46930. 12,
  46931. 12,
  46932. 12,
  46933. 12,
  46934. 12,
  46935. 12,
  46936. 12,
  46937. 12,
  46938. 12,
  46939. 12,
  46940. 12,
  46941. 12,
  46942. 12,
  46943. 12,
  46944. 12,
  46945. 12,
  46946. 12,
  46947. 12,
  46948. 12,
  46949. 12,
  46950. 12,
  46951. 12,
  46952. 12,
  46953. 12,
  46954. 12,
  46955. 12,
  46956. 12,
  46957. 12,
  46958. 12,
  46959. 12,
  46960. 12,
  46961. 12,
  46962. 12,
  46963. 12,
  46964. 12,
  46965. 12,
  46966. 12,
  46967. 12,
  46968. 12,
  46969. 12,
  46970. 12,
  46971. 12,
  46972. 12,
  46973. 12,
  46974. 12,
  46975. 21,
  46976. 21,
  46977. 21,
  46978. 21,
  46979. 12,
  46980. 21,
  46981. 21,
  46982. 21,
  46983. 21,
  46984. 21,
  46985. 21,
  46986. 21,
  46987. 21,
  46988. 21,
  46989. 21,
  46990. 12,
  46991. 12,
  46992. 12,
  46993. 12,
  46994. 12,
  46995. 12,
  46996. 12,
  46997. 12,
  46998. 12,
  46999. 12,
  47000. 12,
  47001. 12,
  47002. 12,
  47003. 12,
  47004. 12,
  47005. 12,
  47006. 12,
  47007. 12,
  47008. 12,
  47009. 12,
  47010. 12,
  47011. 12,
  47012. 12,
  47013. 12,
  47014. 12,
  47015. 12,
  47016. 39,
  47017. 39,
  47018. 39,
  47019. 39,
  47020. 39,
  47021. 39,
  47022. 39,
  47023. 21,
  47024. 12,
  47025. 12,
  47026. 12,
  47027. 12,
  47028. 12,
  47029. 12,
  47030. 12,
  47031. 12,
  47032. 12,
  47033. 12,
  47034. 12,
  47035. 12,
  47036. 12,
  47037. 12,
  47038. 12,
  47039. 12,
  47040. 12,
  47041. 12,
  47042. 12,
  47043. 12,
  47044. 12,
  47045. 12,
  47046. 12,
  47047. 12,
  47048. 12,
  47049. 12,
  47050. 12,
  47051. 12,
  47052. 12,
  47053. 12,
  47054. 12,
  47055. 12,
  47056. 12,
  47057. 12,
  47058. 12,
  47059. 12,
  47060. 12,
  47061. 12,
  47062. 12,
  47063. 12,
  47064. 12,
  47065. 12,
  47066. 12,
  47067. 12,
  47068. 12,
  47069. 12,
  47070. 12,
  47071. 12,
  47072. 21,
  47073. 21,
  47074. 12,
  47075. 17,
  47076. 17,
  47077. 17,
  47078. 17,
  47079. 17,
  47080. 39,
  47081. 39,
  47082. 39,
  47083. 39,
  47084. 39,
  47085. 39,
  47086. 39,
  47087. 39,
  47088. 12,
  47089. 12,
  47090. 12,
  47091. 12,
  47092. 12,
  47093. 12,
  47094. 12,
  47095. 12,
  47096. 12,
  47097. 12,
  47098. 12,
  47099. 12,
  47100. 12,
  47101. 12,
  47102. 12,
  47103. 12,
  47104. 12,
  47105. 12,
  47106. 12,
  47107. 12,
  47108. 12,
  47109. 12,
  47110. 12,
  47111. 12,
  47112. 12,
  47113. 12,
  47114. 12,
  47115. 12,
  47116. 12,
  47117. 12,
  47118. 12,
  47119. 12,
  47120. 12,
  47121. 12,
  47122. 21,
  47123. 12,
  47124. 12,
  47125. 12,
  47126. 21,
  47127. 12,
  47128. 12,
  47129. 12,
  47130. 12,
  47131. 21,
  47132. 12,
  47133. 12,
  47134. 12,
  47135. 12,
  47136. 12,
  47137. 12,
  47138. 12,
  47139. 12,
  47140. 12,
  47141. 12,
  47142. 12,
  47143. 12,
  47144. 12,
  47145. 12,
  47146. 12,
  47147. 12,
  47148. 12,
  47149. 12,
  47150. 12,
  47151. 12,
  47152. 12,
  47153. 12,
  47154. 12,
  47155. 21,
  47156. 21,
  47157. 21,
  47158. 21,
  47159. 21,
  47160. 12,
  47161. 12,
  47162. 12,
  47163. 12,
  47164. 12,
  47165. 12,
  47166. 12,
  47167. 12,
  47168. 12,
  47169. 12,
  47170. 12,
  47171. 12,
  47172. 12,
  47173. 12,
  47174. 12,
  47175. 12,
  47176. 10,
  47177. 12,
  47178. 12,
  47179. 12,
  47180. 12,
  47181. 12,
  47182. 12,
  47183. 12,
  47184. 12,
  47185. 12,
  47186. 12,
  47187. 12,
  47188. 12,
  47189. 12,
  47190. 12,
  47191. 12,
  47192. 12,
  47193. 12,
  47194. 12,
  47195. 12,
  47196. 12,
  47197. 12,
  47198. 12,
  47199. 12,
  47200. 12,
  47201. 12,
  47202. 12,
  47203. 12,
  47204. 12,
  47205. 12,
  47206. 12,
  47207. 12,
  47208. 12,
  47209. 12,
  47210. 12,
  47211. 12,
  47212. 12,
  47213. 12,
  47214. 12,
  47215. 12,
  47216. 12,
  47217. 12,
  47218. 12,
  47219. 12,
  47220. 12,
  47221. 12,
  47222. 12,
  47223. 12,
  47224. 12,
  47225. 12,
  47226. 12,
  47227. 12,
  47228. 12,
  47229. 12,
  47230. 12,
  47231. 12,
  47232. 12,
  47233. 12,
  47234. 12,
  47235. 12,
  47236. 18,
  47237. 18,
  47238. 6,
  47239. 6,
  47240. 39,
  47241. 39,
  47242. 39,
  47243. 39,
  47244. 39,
  47245. 39,
  47246. 39,
  47247. 39,
  47248. 21,
  47249. 21,
  47250. 12,
  47251. 12,
  47252. 12,
  47253. 12,
  47254. 12,
  47255. 12,
  47256. 12,
  47257. 12,
  47258. 12,
  47259. 12,
  47260. 12,
  47261. 12,
  47262. 12,
  47263. 12,
  47264. 12,
  47265. 12,
  47266. 12,
  47267. 12,
  47268. 12,
  47269. 12,
  47270. 12,
  47271. 12,
  47272. 12,
  47273. 12,
  47274. 12,
  47275. 12,
  47276. 12,
  47277. 12,
  47278. 12,
  47279. 12,
  47280. 12,
  47281. 12,
  47282. 12,
  47283. 12,
  47284. 12,
  47285. 12,
  47286. 12,
  47287. 12,
  47288. 12,
  47289. 12,
  47290. 12,
  47291. 12,
  47292. 12,
  47293. 12,
  47294. 12,
  47295. 12,
  47296. 12,
  47297. 12,
  47298. 12,
  47299. 12,
  47300. 21,
  47301. 21,
  47302. 21,
  47303. 21,
  47304. 21,
  47305. 21,
  47306. 21,
  47307. 21,
  47308. 21,
  47309. 21,
  47310. 21,
  47311. 21,
  47312. 21,
  47313. 21,
  47314. 21,
  47315. 21,
  47316. 21,
  47317. 39,
  47318. 39,
  47319. 39,
  47320. 39,
  47321. 39,
  47322. 39,
  47323. 39,
  47324. 39,
  47325. 39,
  47326. 17,
  47327. 17,
  47328. 11,
  47329. 11,
  47330. 11,
  47331. 11,
  47332. 11,
  47333. 11,
  47334. 11,
  47335. 11,
  47336. 11,
  47337. 11,
  47338. 39,
  47339. 39,
  47340. 39,
  47341. 39,
  47342. 39,
  47343. 39,
  47344. 21,
  47345. 21,
  47346. 21,
  47347. 21,
  47348. 21,
  47349. 21,
  47350. 21,
  47351. 21,
  47352. 21,
  47353. 21,
  47354. 21,
  47355. 21,
  47356. 21,
  47357. 21,
  47358. 21,
  47359. 21,
  47360. 21,
  47361. 21,
  47362. 12,
  47363. 12,
  47364. 12,
  47365. 12,
  47366. 12,
  47367. 12,
  47368. 12,
  47369. 12,
  47370. 12,
  47371. 12,
  47372. 39,
  47373. 39,
  47374. 39,
  47375. 39,
  47376. 11,
  47377. 11,
  47378. 11,
  47379. 11,
  47380. 11,
  47381. 11,
  47382. 11,
  47383. 11,
  47384. 11,
  47385. 11,
  47386. 12,
  47387. 12,
  47388. 12,
  47389. 12,
  47390. 12,
  47391. 12,
  47392. 12,
  47393. 12,
  47394. 12,
  47395. 12,
  47396. 12,
  47397. 12,
  47398. 12,
  47399. 12,
  47400. 12,
  47401. 12,
  47402. 12,
  47403. 12,
  47404. 12,
  47405. 12,
  47406. 12,
  47407. 12,
  47408. 12,
  47409. 12,
  47410. 12,
  47411. 12,
  47412. 12,
  47413. 12,
  47414. 21,
  47415. 21,
  47416. 21,
  47417. 21,
  47418. 21,
  47419. 21,
  47420. 21,
  47421. 21,
  47422. 17,
  47423. 17,
  47424. 12,
  47425. 12,
  47426. 12,
  47427. 12,
  47428. 12,
  47429. 12,
  47430. 12,
  47431. 12,
  47432. 12,
  47433. 12,
  47434. 12,
  47435. 12,
  47436. 12,
  47437. 12,
  47438. 12,
  47439. 12,
  47440. 12,
  47441. 12,
  47442. 12,
  47443. 12,
  47444. 12,
  47445. 12,
  47446. 12,
  47447. 21,
  47448. 21,
  47449. 21,
  47450. 21,
  47451. 21,
  47452. 21,
  47453. 21,
  47454. 21,
  47455. 21,
  47456. 21,
  47457. 21,
  47458. 21,
  47459. 21,
  47460. 39,
  47461. 39,
  47462. 39,
  47463. 39,
  47464. 39,
  47465. 39,
  47466. 39,
  47467. 39,
  47468. 39,
  47469. 39,
  47470. 39,
  47471. 12,
  47472. 25,
  47473. 25,
  47474. 25,
  47475. 25,
  47476. 25,
  47477. 25,
  47478. 25,
  47479. 25,
  47480. 25,
  47481. 25,
  47482. 25,
  47483. 25,
  47484. 25,
  47485. 25,
  47486. 25,
  47487. 25,
  47488. 25,
  47489. 25,
  47490. 25,
  47491. 25,
  47492. 25,
  47493. 25,
  47494. 25,
  47495. 25,
  47496. 25,
  47497. 25,
  47498. 25,
  47499. 25,
  47500. 25,
  47501. 39,
  47502. 39,
  47503. 39,
  47504. 21,
  47505. 21,
  47506. 21,
  47507. 21,
  47508. 12,
  47509. 12,
  47510. 12,
  47511. 12,
  47512. 12,
  47513. 12,
  47514. 12,
  47515. 12,
  47516. 12,
  47517. 12,
  47518. 12,
  47519. 12,
  47520. 12,
  47521. 12,
  47522. 12,
  47523. 12,
  47524. 12,
  47525. 12,
  47526. 12,
  47527. 12,
  47528. 12,
  47529. 12,
  47530. 12,
  47531. 12,
  47532. 12,
  47533. 12,
  47534. 12,
  47535. 12,
  47536. 12,
  47537. 12,
  47538. 12,
  47539. 12,
  47540. 12,
  47541. 12,
  47542. 12,
  47543. 12,
  47544. 12,
  47545. 12,
  47546. 12,
  47547. 12,
  47548. 12,
  47549. 12,
  47550. 12,
  47551. 12,
  47552. 12,
  47553. 12,
  47554. 12,
  47555. 21,
  47556. 21,
  47557. 21,
  47558. 21,
  47559. 21,
  47560. 21,
  47561. 21,
  47562. 21,
  47563. 21,
  47564. 21,
  47565. 21,
  47566. 21,
  47567. 21,
  47568. 21,
  47569. 12,
  47570. 12,
  47571. 12,
  47572. 12,
  47573. 12,
  47574. 12,
  47575. 17,
  47576. 17,
  47577. 17,
  47578. 12,
  47579. 12,
  47580. 12,
  47581. 12,
  47582. 12,
  47583. 12,
  47584. 11,
  47585. 11,
  47586. 11,
  47587. 11,
  47588. 11,
  47589. 11,
  47590. 11,
  47591. 11,
  47592. 11,
  47593. 11,
  47594. 39,
  47595. 39,
  47596. 39,
  47597. 39,
  47598. 12,
  47599. 12,
  47600. 12,
  47601. 12,
  47602. 12,
  47603. 12,
  47604. 12,
  47605. 12,
  47606. 12,
  47607. 12,
  47608. 12,
  47609. 12,
  47610. 12,
  47611. 12,
  47612. 12,
  47613. 12,
  47614. 12,
  47615. 12,
  47616. 12,
  47617. 12,
  47618. 12,
  47619. 12,
  47620. 12,
  47621. 12,
  47622. 12,
  47623. 12,
  47624. 12,
  47625. 12,
  47626. 12,
  47627. 12,
  47628. 12,
  47629. 12,
  47630. 12,
  47631. 12,
  47632. 12,
  47633. 12,
  47634. 12,
  47635. 12,
  47636. 12,
  47637. 12,
  47638. 12,
  47639. 12,
  47640. 12,
  47641. 21,
  47642. 21,
  47643. 21,
  47644. 21,
  47645. 21,
  47646. 21,
  47647. 21,
  47648. 21,
  47649. 21,
  47650. 21,
  47651. 21,
  47652. 21,
  47653. 21,
  47654. 21,
  47655. 39,
  47656. 39,
  47657. 39,
  47658. 39,
  47659. 39,
  47660. 39,
  47661. 39,
  47662. 39,
  47663. 39,
  47664. 12,
  47665. 12,
  47666. 12,
  47667. 21,
  47668. 12,
  47669. 12,
  47670. 12,
  47671. 12,
  47672. 12,
  47673. 12,
  47674. 12,
  47675. 12,
  47676. 21,
  47677. 21,
  47678. 39,
  47679. 39,
  47680. 11,
  47681. 11,
  47682. 11,
  47683. 11,
  47684. 11,
  47685. 11,
  47686. 11,
  47687. 11,
  47688. 11,
  47689. 11,
  47690. 39,
  47691. 39,
  47692. 12,
  47693. 17,
  47694. 17,
  47695. 17,
  47696. 36,
  47697. 36,
  47698. 36,
  47699. 36,
  47700. 36,
  47701. 36,
  47702. 36,
  47703. 36,
  47704. 36,
  47705. 36,
  47706. 36,
  47707. 36,
  47708. 36,
  47709. 36,
  47710. 36,
  47711. 36,
  47712. 36,
  47713. 36,
  47714. 36,
  47715. 36,
  47716. 36,
  47717. 36,
  47718. 36,
  47719. 36,
  47720. 36,
  47721. 36,
  47722. 36,
  47723. 36,
  47724. 36,
  47725. 36,
  47726. 36,
  47727. 36,
  47728. 12,
  47729. 12,
  47730. 12,
  47731. 12,
  47732. 12,
  47733. 12,
  47734. 12,
  47735. 12,
  47736. 12,
  47737. 12,
  47738. 12,
  47739. 21,
  47740. 21,
  47741. 21,
  47742. 21,
  47743. 21,
  47744. 17,
  47745. 17,
  47746. 12,
  47747. 12,
  47748. 12,
  47749. 21,
  47750. 21,
  47751. 39,
  47752. 39,
  47753. 39,
  47754. 39,
  47755. 39,
  47756. 39,
  47757. 39,
  47758. 39,
  47759. 39,
  47760. 39,
  47761. 12,
  47762. 12,
  47763. 12,
  47764. 12,
  47765. 12,
  47766. 12,
  47767. 12,
  47768. 12,
  47769. 12,
  47770. 12,
  47771. 12,
  47772. 12,
  47773. 12,
  47774. 12,
  47775. 12,
  47776. 12,
  47777. 12,
  47778. 12,
  47779. 12,
  47780. 12,
  47781. 12,
  47782. 12,
  47783. 12,
  47784. 12,
  47785. 12,
  47786. 12,
  47787. 12,
  47788. 12,
  47789. 12,
  47790. 12,
  47791. 12,
  47792. 12,
  47793. 12,
  47794. 12,
  47795. 12,
  47796. 12,
  47797. 12,
  47798. 12,
  47799. 12,
  47800. 12,
  47801. 12,
  47802. 12,
  47803. 12,
  47804. 12,
  47805. 12,
  47806. 12,
  47807. 12,
  47808. 12,
  47809. 12,
  47810. 12,
  47811. 12,
  47812. 12,
  47813. 12,
  47814. 12,
  47815. 12,
  47816. 12,
  47817. 12,
  47818. 12,
  47819. 12,
  47820. 12,
  47821. 12,
  47822. 12,
  47823. 12,
  47824. 12,
  47825. 12,
  47826. 12,
  47827. 21,
  47828. 21,
  47829. 21,
  47830. 21,
  47831. 21,
  47832. 21,
  47833. 21,
  47834. 21,
  47835. 17,
  47836. 21,
  47837. 21,
  47838. 39,
  47839. 39,
  47840. 11,
  47841. 11,
  47842. 11,
  47843. 11,
  47844. 11,
  47845. 11,
  47846. 11,
  47847. 11,
  47848. 11,
  47849. 11,
  47850. 39,
  47851. 39,
  47852. 39,
  47853. 39,
  47854. 39,
  47855. 39,
  47856. 23,
  47857. 24,
  47858. 24,
  47859. 24,
  47860. 24,
  47861. 24,
  47862. 24,
  47863. 24,
  47864. 24,
  47865. 24,
  47866. 24,
  47867. 24,
  47868. 24,
  47869. 24,
  47870. 24,
  47871. 24,
  47872. 24,
  47873. 24,
  47874. 24,
  47875. 24,
  47876. 24,
  47877. 24,
  47878. 24,
  47879. 24,
  47880. 24,
  47881. 24,
  47882. 24,
  47883. 24,
  47884. 23,
  47885. 24,
  47886. 24,
  47887. 24,
  47888. 24,
  47889. 24,
  47890. 24,
  47891. 24,
  47892. 24,
  47893. 24,
  47894. 24,
  47895. 24,
  47896. 24,
  47897. 24,
  47898. 24,
  47899. 24,
  47900. 24,
  47901. 24,
  47902. 24,
  47903. 24,
  47904. 24,
  47905. 24,
  47906. 24,
  47907. 24,
  47908. 24,
  47909. 24,
  47910. 24,
  47911. 24,
  47912. 23,
  47913. 24,
  47914. 24,
  47915. 24,
  47916. 24,
  47917. 24,
  47918. 24,
  47919. 24,
  47920. 24,
  47921. 24,
  47922. 24,
  47923. 24,
  47924. 24,
  47925. 24,
  47926. 24,
  47927. 24,
  47928. 24,
  47929. 24,
  47930. 24,
  47931. 24,
  47932. 24,
  47933. 24,
  47934. 24,
  47935. 24,
  47936. 24,
  47937. 24,
  47938. 24,
  47939. 24,
  47940. 23,
  47941. 24,
  47942. 24,
  47943. 24,
  47944. 24,
  47945. 24,
  47946. 24,
  47947. 24,
  47948. 24,
  47949. 24,
  47950. 24,
  47951. 24,
  47952. 24,
  47953. 24,
  47954. 24,
  47955. 24,
  47956. 24,
  47957. 24,
  47958. 24,
  47959. 24,
  47960. 24,
  47961. 24,
  47962. 24,
  47963. 24,
  47964. 24,
  47965. 24,
  47966. 24,
  47967. 24,
  47968. 23,
  47969. 24,
  47970. 24,
  47971. 24,
  47972. 24,
  47973. 24,
  47974. 24,
  47975. 24,
  47976. 24,
  47977. 24,
  47978. 24,
  47979. 24,
  47980. 24,
  47981. 24,
  47982. 24,
  47983. 24,
  47984. 24,
  47985. 24,
  47986. 24,
  47987. 24,
  47988. 24,
  47989. 24,
  47990. 24,
  47991. 24,
  47992. 24,
  47993. 24,
  47994. 24,
  47995. 24,
  47996. 23,
  47997. 24,
  47998. 24,
  47999. 24,
  48000. 24,
  48001. 24,
  48002. 24,
  48003. 24,
  48004. 24,
  48005. 24,
  48006. 24,
  48007. 24,
  48008. 24,
  48009. 24,
  48010. 24,
  48011. 24,
  48012. 24,
  48013. 24,
  48014. 24,
  48015. 24,
  48016. 24,
  48017. 24,
  48018. 24,
  48019. 24,
  48020. 24,
  48021. 24,
  48022. 24,
  48023. 24,
  48024. 23,
  48025. 24,
  48026. 24,
  48027. 24,
  48028. 24,
  48029. 24,
  48030. 24,
  48031. 24,
  48032. 24,
  48033. 24,
  48034. 24,
  48035. 24,
  48036. 24,
  48037. 24,
  48038. 24,
  48039. 24,
  48040. 24,
  48041. 24,
  48042. 24,
  48043. 24,
  48044. 24,
  48045. 24,
  48046. 24,
  48047. 24,
  48048. 24,
  48049. 24,
  48050. 24,
  48051. 24,
  48052. 23,
  48053. 24,
  48054. 24,
  48055. 24,
  48056. 24,
  48057. 24,
  48058. 24,
  48059. 24,
  48060. 24,
  48061. 24,
  48062. 24,
  48063. 24,
  48064. 24,
  48065. 24,
  48066. 24,
  48067. 24,
  48068. 24,
  48069. 24,
  48070. 24,
  48071. 24,
  48072. 24,
  48073. 24,
  48074. 24,
  48075. 24,
  48076. 24,
  48077. 24,
  48078. 24,
  48079. 24,
  48080. 23,
  48081. 24,
  48082. 24,
  48083. 24,
  48084. 24,
  48085. 24,
  48086. 24,
  48087. 24,
  48088. 24,
  48089. 24,
  48090. 24,
  48091. 24,
  48092. 24,
  48093. 24,
  48094. 24,
  48095. 24,
  48096. 24,
  48097. 24,
  48098. 24,
  48099. 24,
  48100. 24,
  48101. 24,
  48102. 24,
  48103. 24,
  48104. 24,
  48105. 24,
  48106. 24,
  48107. 24,
  48108. 23,
  48109. 24,
  48110. 24,
  48111. 24,
  48112. 24,
  48113. 24,
  48114. 24,
  48115. 24,
  48116. 24,
  48117. 24,
  48118. 24,
  48119. 24,
  48120. 24,
  48121. 24,
  48122. 24,
  48123. 24,
  48124. 24,
  48125. 24,
  48126. 24,
  48127. 24,
  48128. 24,
  48129. 24,
  48130. 24,
  48131. 24,
  48132. 24,
  48133. 24,
  48134. 24,
  48135. 24,
  48136. 23,
  48137. 24,
  48138. 24,
  48139. 24,
  48140. 24,
  48141. 24,
  48142. 24,
  48143. 24,
  48144. 24,
  48145. 24,
  48146. 24,
  48147. 24,
  48148. 24,
  48149. 24,
  48150. 24,
  48151. 24,
  48152. 24,
  48153. 24,
  48154. 24,
  48155. 24,
  48156. 24,
  48157. 24,
  48158. 24,
  48159. 24,
  48160. 24,
  48161. 24,
  48162. 24,
  48163. 24,
  48164. 23,
  48165. 24,
  48166. 24,
  48167. 24,
  48168. 24,
  48169. 24,
  48170. 24,
  48171. 24,
  48172. 24,
  48173. 24,
  48174. 24,
  48175. 24,
  48176. 24,
  48177. 24,
  48178. 24,
  48179. 24,
  48180. 24,
  48181. 24,
  48182. 24,
  48183. 24,
  48184. 24,
  48185. 24,
  48186. 24,
  48187. 24,
  48188. 24,
  48189. 24,
  48190. 24,
  48191. 24,
  48192. 23,
  48193. 24,
  48194. 24,
  48195. 24,
  48196. 24,
  48197. 24,
  48198. 24,
  48199. 24,
  48200. 24,
  48201. 24,
  48202. 24,
  48203. 24,
  48204. 24,
  48205. 24,
  48206. 24,
  48207. 24,
  48208. 24,
  48209. 24,
  48210. 24,
  48211. 24,
  48212. 24,
  48213. 24,
  48214. 24,
  48215. 24,
  48216. 24,
  48217. 24,
  48218. 24,
  48219. 24,
  48220. 23,
  48221. 24,
  48222. 24,
  48223. 24,
  48224. 24,
  48225. 24,
  48226. 24,
  48227. 24,
  48228. 24,
  48229. 24,
  48230. 24,
  48231. 24,
  48232. 24,
  48233. 24,
  48234. 24,
  48235. 24,
  48236. 24,
  48237. 24,
  48238. 24,
  48239. 24,
  48240. 24,
  48241. 24,
  48242. 24,
  48243. 24,
  48244. 24,
  48245. 24,
  48246. 24,
  48247. 24,
  48248. 23,
  48249. 24,
  48250. 24,
  48251. 24,
  48252. 24,
  48253. 24,
  48254. 24,
  48255. 24,
  48256. 24,
  48257. 24,
  48258. 24,
  48259. 24,
  48260. 24,
  48261. 24,
  48262. 24,
  48263. 24,
  48264. 24,
  48265. 24,
  48266. 24,
  48267. 24,
  48268. 24,
  48269. 24,
  48270. 24,
  48271. 24,
  48272. 24,
  48273. 24,
  48274. 24,
  48275. 24,
  48276. 23,
  48277. 24,
  48278. 24,
  48279. 24,
  48280. 24,
  48281. 24,
  48282. 24,
  48283. 24,
  48284. 24,
  48285. 24,
  48286. 24,
  48287. 24,
  48288. 24,
  48289. 24,
  48290. 24,
  48291. 24,
  48292. 24,
  48293. 24,
  48294. 24,
  48295. 24,
  48296. 24,
  48297. 24,
  48298. 24,
  48299. 24,
  48300. 24,
  48301. 24,
  48302. 24,
  48303. 24,
  48304. 23,
  48305. 24,
  48306. 24,
  48307. 24,
  48308. 24,
  48309. 24,
  48310. 24,
  48311. 24,
  48312. 24,
  48313. 24,
  48314. 24,
  48315. 24,
  48316. 24,
  48317. 24,
  48318. 24,
  48319. 24,
  48320. 24,
  48321. 24,
  48322. 24,
  48323. 24,
  48324. 24,
  48325. 24,
  48326. 24,
  48327. 24,
  48328. 24,
  48329. 24,
  48330. 24,
  48331. 24,
  48332. 23,
  48333. 24,
  48334. 24,
  48335. 24,
  48336. 24,
  48337. 24,
  48338. 24,
  48339. 24,
  48340. 24,
  48341. 24,
  48342. 24,
  48343. 24,
  48344. 24,
  48345. 24,
  48346. 24,
  48347. 24,
  48348. 24,
  48349. 24,
  48350. 24,
  48351. 24,
  48352. 24,
  48353. 24,
  48354. 24,
  48355. 24,
  48356. 24,
  48357. 24,
  48358. 24,
  48359. 24,
  48360. 23,
  48361. 24,
  48362. 24,
  48363. 24,
  48364. 24,
  48365. 24,
  48366. 24,
  48367. 24,
  48368. 24,
  48369. 24,
  48370. 24,
  48371. 24,
  48372. 24,
  48373. 24,
  48374. 24,
  48375. 24,
  48376. 24,
  48377. 24,
  48378. 24,
  48379. 24,
  48380. 24,
  48381. 24,
  48382. 24,
  48383. 24,
  48384. 24,
  48385. 24,
  48386. 24,
  48387. 24,
  48388. 23,
  48389. 24,
  48390. 24,
  48391. 24,
  48392. 24,
  48393. 24,
  48394. 24,
  48395. 24,
  48396. 24,
  48397. 24,
  48398. 24,
  48399. 24,
  48400. 24,
  48401. 24,
  48402. 24,
  48403. 24,
  48404. 24,
  48405. 24,
  48406. 24,
  48407. 24,
  48408. 24,
  48409. 24,
  48410. 24,
  48411. 24,
  48412. 24,
  48413. 24,
  48414. 24,
  48415. 24,
  48416. 23,
  48417. 24,
  48418. 24,
  48419. 24,
  48420. 24,
  48421. 24,
  48422. 24,
  48423. 24,
  48424. 24,
  48425. 24,
  48426. 24,
  48427. 24,
  48428. 24,
  48429. 24,
  48430. 24,
  48431. 24,
  48432. 24,
  48433. 24,
  48434. 24,
  48435. 24,
  48436. 24,
  48437. 24,
  48438. 24,
  48439. 24,
  48440. 24,
  48441. 24,
  48442. 24,
  48443. 24,
  48444. 23,
  48445. 24,
  48446. 24,
  48447. 24,
  48448. 24,
  48449. 24,
  48450. 24,
  48451. 24,
  48452. 24,
  48453. 24,
  48454. 24,
  48455. 24,
  48456. 24,
  48457. 24,
  48458. 24,
  48459. 24,
  48460. 24,
  48461. 24,
  48462. 24,
  48463. 24,
  48464. 24,
  48465. 24,
  48466. 24,
  48467. 24,
  48468. 24,
  48469. 24,
  48470. 24,
  48471. 24,
  48472. 23,
  48473. 24,
  48474. 24,
  48475. 24,
  48476. 24,
  48477. 24,
  48478. 24,
  48479. 24,
  48480. 24,
  48481. 24,
  48482. 24,
  48483. 24,
  48484. 24,
  48485. 24,
  48486. 24,
  48487. 24,
  48488. 24,
  48489. 24,
  48490. 24,
  48491. 24,
  48492. 24,
  48493. 24,
  48494. 24,
  48495. 24,
  48496. 24,
  48497. 24,
  48498. 24,
  48499. 24,
  48500. 23,
  48501. 24,
  48502. 24,
  48503. 24,
  48504. 24,
  48505. 24,
  48506. 24,
  48507. 24,
  48508. 24,
  48509. 24,
  48510. 24,
  48511. 24,
  48512. 24,
  48513. 24,
  48514. 24,
  48515. 24,
  48516. 24,
  48517. 24,
  48518. 24,
  48519. 24,
  48520. 24,
  48521. 24,
  48522. 24,
  48523. 24,
  48524. 24,
  48525. 24,
  48526. 24,
  48527. 24,
  48528. 23,
  48529. 24,
  48530. 24,
  48531. 24,
  48532. 24,
  48533. 24,
  48534. 24,
  48535. 24,
  48536. 24,
  48537. 24,
  48538. 24,
  48539. 24,
  48540. 24,
  48541. 24,
  48542. 24,
  48543. 24,
  48544. 24,
  48545. 24,
  48546. 24,
  48547. 24,
  48548. 24,
  48549. 24,
  48550. 24,
  48551. 24,
  48552. 24,
  48553. 24,
  48554. 24,
  48555. 24,
  48556. 23,
  48557. 24,
  48558. 24,
  48559. 24,
  48560. 24,
  48561. 24,
  48562. 24,
  48563. 24,
  48564. 24,
  48565. 24,
  48566. 24,
  48567. 24,
  48568. 24,
  48569. 24,
  48570. 24,
  48571. 24,
  48572. 24,
  48573. 24,
  48574. 24,
  48575. 24,
  48576. 24,
  48577. 24,
  48578. 24,
  48579. 24,
  48580. 24,
  48581. 24,
  48582. 24,
  48583. 24,
  48584. 23,
  48585. 24,
  48586. 24,
  48587. 24,
  48588. 24,
  48589. 24,
  48590. 24,
  48591. 24,
  48592. 24,
  48593. 24,
  48594. 24,
  48595. 24,
  48596. 24,
  48597. 24,
  48598. 24,
  48599. 24,
  48600. 24,
  48601. 24,
  48602. 24,
  48603. 24,
  48604. 24,
  48605. 24,
  48606. 24,
  48607. 24,
  48608. 24,
  48609. 24,
  48610. 24,
  48611. 24,
  48612. 23,
  48613. 24,
  48614. 24,
  48615. 24,
  48616. 24,
  48617. 24,
  48618. 24,
  48619. 24,
  48620. 24,
  48621. 24,
  48622. 24,
  48623. 24,
  48624. 24,
  48625. 24,
  48626. 24,
  48627. 24,
  48628. 24,
  48629. 24,
  48630. 24,
  48631. 24,
  48632. 24,
  48633. 24,
  48634. 24,
  48635. 24,
  48636. 24,
  48637. 24,
  48638. 24,
  48639. 24,
  48640. 23,
  48641. 24,
  48642. 24,
  48643. 24,
  48644. 24,
  48645. 24,
  48646. 24,
  48647. 24,
  48648. 24,
  48649. 24,
  48650. 24,
  48651. 24,
  48652. 24,
  48653. 24,
  48654. 24,
  48655. 24,
  48656. 24,
  48657. 24,
  48658. 24,
  48659. 24,
  48660. 24,
  48661. 24,
  48662. 24,
  48663. 24,
  48664. 24,
  48665. 24,
  48666. 24,
  48667. 24,
  48668. 23,
  48669. 24,
  48670. 24,
  48671. 24,
  48672. 24,
  48673. 24,
  48674. 24,
  48675. 24,
  48676. 24,
  48677. 24,
  48678. 24,
  48679. 24,
  48680. 24,
  48681. 24,
  48682. 24,
  48683. 24,
  48684. 24,
  48685. 24,
  48686. 24,
  48687. 24,
  48688. 24,
  48689. 24,
  48690. 24,
  48691. 24,
  48692. 24,
  48693. 24,
  48694. 24,
  48695. 24,
  48696. 23,
  48697. 24,
  48698. 24,
  48699. 24,
  48700. 24,
  48701. 24,
  48702. 24,
  48703. 24,
  48704. 24,
  48705. 24,
  48706. 24,
  48707. 24,
  48708. 24,
  48709. 24,
  48710. 24,
  48711. 24,
  48712. 24,
  48713. 24,
  48714. 24,
  48715. 24,
  48716. 24,
  48717. 24,
  48718. 24,
  48719. 24,
  48720. 24,
  48721. 24,
  48722. 24,
  48723. 24,
  48724. 23,
  48725. 24,
  48726. 24,
  48727. 24,
  48728. 24,
  48729. 24,
  48730. 24,
  48731. 24,
  48732. 24,
  48733. 24,
  48734. 24,
  48735. 24,
  48736. 24,
  48737. 24,
  48738. 24,
  48739. 24,
  48740. 24,
  48741. 24,
  48742. 24,
  48743. 24,
  48744. 24,
  48745. 24,
  48746. 24,
  48747. 24,
  48748. 24,
  48749. 24,
  48750. 24,
  48751. 24,
  48752. 23,
  48753. 24,
  48754. 24,
  48755. 24,
  48756. 24,
  48757. 24,
  48758. 24,
  48759. 24,
  48760. 24,
  48761. 24,
  48762. 24,
  48763. 24,
  48764. 24,
  48765. 24,
  48766. 24,
  48767. 24,
  48768. 24,
  48769. 24,
  48770. 24,
  48771. 24,
  48772. 24,
  48773. 24,
  48774. 24,
  48775. 24,
  48776. 24,
  48777. 24,
  48778. 24,
  48779. 24,
  48780. 23,
  48781. 24,
  48782. 24,
  48783. 24,
  48784. 24,
  48785. 24,
  48786. 24,
  48787. 24,
  48788. 24,
  48789. 24,
  48790. 24,
  48791. 24,
  48792. 24,
  48793. 24,
  48794. 24,
  48795. 24,
  48796. 24,
  48797. 24,
  48798. 24,
  48799. 24,
  48800. 24,
  48801. 24,
  48802. 24,
  48803. 24,
  48804. 24,
  48805. 24,
  48806. 24,
  48807. 24,
  48808. 23,
  48809. 24,
  48810. 24,
  48811. 24,
  48812. 24,
  48813. 24,
  48814. 24,
  48815. 24,
  48816. 24,
  48817. 24,
  48818. 24,
  48819. 24,
  48820. 24,
  48821. 24,
  48822. 24,
  48823. 24,
  48824. 24,
  48825. 24,
  48826. 24,
  48827. 24,
  48828. 24,
  48829. 24,
  48830. 24,
  48831. 24,
  48832. 24,
  48833. 24,
  48834. 24,
  48835. 24,
  48836. 23,
  48837. 24,
  48838. 24,
  48839. 24,
  48840. 24,
  48841. 24,
  48842. 24,
  48843. 24,
  48844. 24,
  48845. 24,
  48846. 24,
  48847. 24,
  48848. 24,
  48849. 24,
  48850. 24,
  48851. 24,
  48852. 24,
  48853. 24,
  48854. 24,
  48855. 24,
  48856. 24,
  48857. 24,
  48858. 24,
  48859. 24,
  48860. 24,
  48861. 24,
  48862. 24,
  48863. 24,
  48864. 23,
  48865. 24,
  48866. 24,
  48867. 24,
  48868. 24,
  48869. 24,
  48870. 24,
  48871. 24,
  48872. 24,
  48873. 24,
  48874. 24,
  48875. 24,
  48876. 24,
  48877. 24,
  48878. 24,
  48879. 24,
  48880. 24,
  48881. 24,
  48882. 24,
  48883. 24,
  48884. 24,
  48885. 24,
  48886. 24,
  48887. 24,
  48888. 24,
  48889. 24,
  48890. 24,
  48891. 24,
  48892. 23,
  48893. 24,
  48894. 24,
  48895. 24,
  48896. 24,
  48897. 24,
  48898. 24,
  48899. 24,
  48900. 24,
  48901. 24,
  48902. 24,
  48903. 24,
  48904. 24,
  48905. 24,
  48906. 24,
  48907. 24,
  48908. 24,
  48909. 24,
  48910. 24,
  48911. 24,
  48912. 24,
  48913. 24,
  48914. 24,
  48915. 24,
  48916. 24,
  48917. 24,
  48918. 24,
  48919. 24,
  48920. 23,
  48921. 24,
  48922. 24,
  48923. 24,
  48924. 24,
  48925. 24,
  48926. 24,
  48927. 24,
  48928. 24,
  48929. 24,
  48930. 24,
  48931. 24,
  48932. 24,
  48933. 24,
  48934. 24,
  48935. 24,
  48936. 24,
  48937. 24,
  48938. 24,
  48939. 24,
  48940. 24,
  48941. 24,
  48942. 24,
  48943. 24,
  48944. 24,
  48945. 24,
  48946. 24,
  48947. 24,
  48948. 23,
  48949. 24,
  48950. 24,
  48951. 24,
  48952. 24,
  48953. 24,
  48954. 24,
  48955. 24,
  48956. 24,
  48957. 24,
  48958. 24,
  48959. 24,
  48960. 24,
  48961. 24,
  48962. 24,
  48963. 24,
  48964. 24,
  48965. 24,
  48966. 24,
  48967. 24,
  48968. 24,
  48969. 24,
  48970. 24,
  48971. 24,
  48972. 24,
  48973. 24,
  48974. 24,
  48975. 24,
  48976. 23,
  48977. 24,
  48978. 24,
  48979. 24,
  48980. 24,
  48981. 24,
  48982. 24,
  48983. 24,
  48984. 24,
  48985. 24,
  48986. 24,
  48987. 24,
  48988. 24,
  48989. 24,
  48990. 24,
  48991. 24,
  48992. 24,
  48993. 24,
  48994. 24,
  48995. 24,
  48996. 24,
  48997. 24,
  48998. 24,
  48999. 24,
  49000. 24,
  49001. 24,
  49002. 24,
  49003. 24,
  49004. 23,
  49005. 24,
  49006. 24,
  49007. 24,
  49008. 24,
  49009. 24,
  49010. 24,
  49011. 24,
  49012. 24,
  49013. 24,
  49014. 24,
  49015. 24,
  49016. 24,
  49017. 24,
  49018. 24,
  49019. 24,
  49020. 24,
  49021. 24,
  49022. 24,
  49023. 24,
  49024. 24,
  49025. 24,
  49026. 24,
  49027. 24,
  49028. 24,
  49029. 24,
  49030. 24,
  49031. 24,
  49032. 23,
  49033. 24,
  49034. 24,
  49035. 24,
  49036. 24,
  49037. 24,
  49038. 24,
  49039. 24,
  49040. 24,
  49041. 24,
  49042. 24,
  49043. 24,
  49044. 24,
  49045. 24,
  49046. 24,
  49047. 24,
  49048. 24,
  49049. 24,
  49050. 24,
  49051. 24,
  49052. 24,
  49053. 24,
  49054. 24,
  49055. 24,
  49056. 24,
  49057. 24,
  49058. 24,
  49059. 24,
  49060. 23,
  49061. 24,
  49062. 24,
  49063. 24,
  49064. 24,
  49065. 24,
  49066. 24,
  49067. 24,
  49068. 24,
  49069. 24,
  49070. 24,
  49071. 24,
  49072. 24,
  49073. 24,
  49074. 24,
  49075. 24,
  49076. 24,
  49077. 24,
  49078. 24,
  49079. 24,
  49080. 24,
  49081. 24,
  49082. 24,
  49083. 24,
  49084. 24,
  49085. 24,
  49086. 24,
  49087. 24,
  49088. 23,
  49089. 24,
  49090. 24,
  49091. 24,
  49092. 24,
  49093. 24,
  49094. 24,
  49095. 24,
  49096. 24,
  49097. 24,
  49098. 24,
  49099. 24,
  49100. 24,
  49101. 24,
  49102. 24,
  49103. 24,
  49104. 24,
  49105. 24,
  49106. 24,
  49107. 24,
  49108. 24,
  49109. 24,
  49110. 24,
  49111. 24,
  49112. 24,
  49113. 24,
  49114. 24,
  49115. 24,
  49116. 23,
  49117. 24,
  49118. 24,
  49119. 24,
  49120. 24,
  49121. 24,
  49122. 24,
  49123. 24,
  49124. 24,
  49125. 24,
  49126. 24,
  49127. 24,
  49128. 24,
  49129. 24,
  49130. 24,
  49131. 24,
  49132. 24,
  49133. 24,
  49134. 24,
  49135. 24,
  49136. 24,
  49137. 24,
  49138. 24,
  49139. 24,
  49140. 24,
  49141. 24,
  49142. 24,
  49143. 24,
  49144. 23,
  49145. 24,
  49146. 24,
  49147. 24,
  49148. 24,
  49149. 24,
  49150. 24,
  49151. 24,
  49152. 24,
  49153. 24,
  49154. 24,
  49155. 24,
  49156. 24,
  49157. 24,
  49158. 24,
  49159. 24,
  49160. 24,
  49161. 24,
  49162. 24,
  49163. 24,
  49164. 24,
  49165. 24,
  49166. 24,
  49167. 24,
  49168. 24,
  49169. 24,
  49170. 24,
  49171. 24,
  49172. 23,
  49173. 24,
  49174. 24,
  49175. 24,
  49176. 24,
  49177. 24,
  49178. 24,
  49179. 24,
  49180. 24,
  49181. 24,
  49182. 24,
  49183. 24,
  49184. 24,
  49185. 24,
  49186. 24,
  49187. 24,
  49188. 24,
  49189. 24,
  49190. 24,
  49191. 24,
  49192. 24,
  49193. 24,
  49194. 24,
  49195. 24,
  49196. 24,
  49197. 24,
  49198. 24,
  49199. 24,
  49200. 23,
  49201. 24,
  49202. 24,
  49203. 24,
  49204. 24,
  49205. 24,
  49206. 24,
  49207. 24,
  49208. 24,
  49209. 24,
  49210. 24,
  49211. 24,
  49212. 24,
  49213. 24,
  49214. 24,
  49215. 24,
  49216. 24,
  49217. 24,
  49218. 24,
  49219. 24,
  49220. 24,
  49221. 24,
  49222. 24,
  49223. 24,
  49224. 24,
  49225. 24,
  49226. 24,
  49227. 24,
  49228. 23,
  49229. 24,
  49230. 24,
  49231. 24,
  49232. 24,
  49233. 24,
  49234. 24,
  49235. 24,
  49236. 24,
  49237. 24,
  49238. 24,
  49239. 24,
  49240. 24,
  49241. 24,
  49242. 24,
  49243. 24,
  49244. 24,
  49245. 24,
  49246. 24,
  49247. 24,
  49248. 24,
  49249. 24,
  49250. 24,
  49251. 24,
  49252. 24,
  49253. 24,
  49254. 24,
  49255. 24,
  49256. 23,
  49257. 24,
  49258. 24,
  49259. 24,
  49260. 24,
  49261. 24,
  49262. 24,
  49263. 24,
  49264. 24,
  49265. 24,
  49266. 24,
  49267. 24,
  49268. 24,
  49269. 24,
  49270. 24,
  49271. 24,
  49272. 24,
  49273. 24,
  49274. 24,
  49275. 24,
  49276. 24,
  49277. 24,
  49278. 24,
  49279. 24,
  49280. 24,
  49281. 24,
  49282. 24,
  49283. 24,
  49284. 23,
  49285. 24,
  49286. 24,
  49287. 24,
  49288. 24,
  49289. 24,
  49290. 24,
  49291. 24,
  49292. 24,
  49293. 24,
  49294. 24,
  49295. 24,
  49296. 24,
  49297. 24,
  49298. 24,
  49299. 24,
  49300. 24,
  49301. 24,
  49302. 24,
  49303. 24,
  49304. 24,
  49305. 24,
  49306. 24,
  49307. 24,
  49308. 24,
  49309. 24,
  49310. 24,
  49311. 24,
  49312. 23,
  49313. 24,
  49314. 24,
  49315. 24,
  49316. 24,
  49317. 24,
  49318. 24,
  49319. 24,
  49320. 24,
  49321. 24,
  49322. 24,
  49323. 24,
  49324. 24,
  49325. 24,
  49326. 24,
  49327. 24,
  49328. 24,
  49329. 24,
  49330. 24,
  49331. 24,
  49332. 24,
  49333. 24,
  49334. 24,
  49335. 24,
  49336. 24,
  49337. 24,
  49338. 24,
  49339. 24,
  49340. 23,
  49341. 24,
  49342. 24,
  49343. 24,
  49344. 24,
  49345. 24,
  49346. 24,
  49347. 24,
  49348. 24,
  49349. 24,
  49350. 24,
  49351. 24,
  49352. 24,
  49353. 24,
  49354. 24,
  49355. 24,
  49356. 24,
  49357. 24,
  49358. 24,
  49359. 24,
  49360. 24,
  49361. 24,
  49362. 24,
  49363. 24,
  49364. 24,
  49365. 24,
  49366. 24,
  49367. 24,
  49368. 23,
  49369. 24,
  49370. 24,
  49371. 24,
  49372. 24,
  49373. 24,
  49374. 24,
  49375. 24,
  49376. 24,
  49377. 24,
  49378. 24,
  49379. 24,
  49380. 24,
  49381. 24,
  49382. 24,
  49383. 24,
  49384. 24,
  49385. 24,
  49386. 24,
  49387. 24,
  49388. 24,
  49389. 24,
  49390. 24,
  49391. 24,
  49392. 24,
  49393. 24,
  49394. 24,
  49395. 24,
  49396. 23,
  49397. 24,
  49398. 24,
  49399. 24,
  49400. 24,
  49401. 24,
  49402. 24,
  49403. 24,
  49404. 24,
  49405. 24,
  49406. 24,
  49407. 24,
  49408. 24,
  49409. 24,
  49410. 24,
  49411. 24,
  49412. 24,
  49413. 24,
  49414. 24,
  49415. 24,
  49416. 24,
  49417. 24,
  49418. 24,
  49419. 24,
  49420. 24,
  49421. 24,
  49422. 24,
  49423. 24,
  49424. 23,
  49425. 24,
  49426. 24,
  49427. 24,
  49428. 24,
  49429. 24,
  49430. 24,
  49431. 24,
  49432. 24,
  49433. 24,
  49434. 24,
  49435. 24,
  49436. 24,
  49437. 24,
  49438. 24,
  49439. 24,
  49440. 24,
  49441. 24,
  49442. 24,
  49443. 24,
  49444. 24,
  49445. 24,
  49446. 24,
  49447. 24,
  49448. 24,
  49449. 24,
  49450. 24,
  49451. 24,
  49452. 23,
  49453. 24,
  49454. 24,
  49455. 24,
  49456. 24,
  49457. 24,
  49458. 24,
  49459. 24,
  49460. 24,
  49461. 24,
  49462. 24,
  49463. 24,
  49464. 24,
  49465. 24,
  49466. 24,
  49467. 24,
  49468. 24,
  49469. 24,
  49470. 24,
  49471. 24,
  49472. 24,
  49473. 24,
  49474. 24,
  49475. 24,
  49476. 24,
  49477. 24,
  49478. 24,
  49479. 24,
  49480. 23,
  49481. 24,
  49482. 24,
  49483. 24,
  49484. 24,
  49485. 24,
  49486. 24,
  49487. 24,
  49488. 24,
  49489. 24,
  49490. 24,
  49491. 24,
  49492. 24,
  49493. 24,
  49494. 24,
  49495. 24,
  49496. 24,
  49497. 24,
  49498. 24,
  49499. 24,
  49500. 24,
  49501. 24,
  49502. 24,
  49503. 24,
  49504. 24,
  49505. 24,
  49506. 24,
  49507. 24,
  49508. 23,
  49509. 24,
  49510. 24,
  49511. 24,
  49512. 24,
  49513. 24,
  49514. 24,
  49515. 24,
  49516. 24,
  49517. 24,
  49518. 24,
  49519. 24,
  49520. 24,
  49521. 24,
  49522. 24,
  49523. 24,
  49524. 24,
  49525. 24,
  49526. 24,
  49527. 24,
  49528. 24,
  49529. 24,
  49530. 24,
  49531. 24,
  49532. 24,
  49533. 24,
  49534. 24,
  49535. 24,
  49536. 23,
  49537. 24,
  49538. 24,
  49539. 24,
  49540. 24,
  49541. 24,
  49542. 24,
  49543. 24,
  49544. 24,
  49545. 24,
  49546. 24,
  49547. 24,
  49548. 24,
  49549. 24,
  49550. 24,
  49551. 24,
  49552. 24,
  49553. 24,
  49554. 24,
  49555. 24,
  49556. 24,
  49557. 24,
  49558. 24,
  49559. 24,
  49560. 24,
  49561. 24,
  49562. 24,
  49563. 24,
  49564. 23,
  49565. 24,
  49566. 24,
  49567. 24,
  49568. 24,
  49569. 24,
  49570. 24,
  49571. 24,
  49572. 24,
  49573. 24,
  49574. 24,
  49575. 24,
  49576. 24,
  49577. 24,
  49578. 24,
  49579. 24,
  49580. 24,
  49581. 24,
  49582. 24,
  49583. 24,
  49584. 24,
  49585. 24,
  49586. 24,
  49587. 24,
  49588. 24,
  49589. 24,
  49590. 24,
  49591. 24,
  49592. 23,
  49593. 24,
  49594. 24,
  49595. 24,
  49596. 24,
  49597. 24,
  49598. 24,
  49599. 24,
  49600. 24,
  49601. 24,
  49602. 24,
  49603. 24,
  49604. 24,
  49605. 24,
  49606. 24,
  49607. 24,
  49608. 24,
  49609. 24,
  49610. 24,
  49611. 24,
  49612. 24,
  49613. 24,
  49614. 24,
  49615. 24,
  49616. 24,
  49617. 24,
  49618. 24,
  49619. 24,
  49620. 23,
  49621. 24,
  49622. 24,
  49623. 24,
  49624. 24,
  49625. 24,
  49626. 24,
  49627. 24,
  49628. 24,
  49629. 24,
  49630. 24,
  49631. 24,
  49632. 24,
  49633. 24,
  49634. 24,
  49635. 24,
  49636. 24,
  49637. 24,
  49638. 24,
  49639. 24,
  49640. 24,
  49641. 24,
  49642. 24,
  49643. 24,
  49644. 24,
  49645. 24,
  49646. 24,
  49647. 24,
  49648. 23,
  49649. 24,
  49650. 24,
  49651. 24,
  49652. 24,
  49653. 24,
  49654. 24,
  49655. 24,
  49656. 24,
  49657. 24,
  49658. 24,
  49659. 24,
  49660. 24,
  49661. 24,
  49662. 24,
  49663. 24,
  49664. 24,
  49665. 24,
  49666. 24,
  49667. 24,
  49668. 24,
  49669. 24,
  49670. 24,
  49671. 24,
  49672. 24,
  49673. 24,
  49674. 24,
  49675. 24,
  49676. 23,
  49677. 24,
  49678. 24,
  49679. 24,
  49680. 24,
  49681. 24,
  49682. 24,
  49683. 24,
  49684. 24,
  49685. 24,
  49686. 24,
  49687. 24,
  49688. 24,
  49689. 24,
  49690. 24,
  49691. 24,
  49692. 24,
  49693. 24,
  49694. 24,
  49695. 24,
  49696. 24,
  49697. 24,
  49698. 24,
  49699. 24,
  49700. 24,
  49701. 24,
  49702. 24,
  49703. 24,
  49704. 23,
  49705. 24,
  49706. 24,
  49707. 24,
  49708. 24,
  49709. 24,
  49710. 24,
  49711. 24,
  49712. 24,
  49713. 24,
  49714. 24,
  49715. 24,
  49716. 24,
  49717. 24,
  49718. 24,
  49719. 24,
  49720. 24,
  49721. 24,
  49722. 24,
  49723. 24,
  49724. 24,
  49725. 24,
  49726. 24,
  49727. 24,
  49728. 24,
  49729. 24,
  49730. 24,
  49731. 24,
  49732. 23,
  49733. 24,
  49734. 24,
  49735. 24,
  49736. 24,
  49737. 24,
  49738. 24,
  49739. 24,
  49740. 24,
  49741. 24,
  49742. 24,
  49743. 24,
  49744. 24,
  49745. 24,
  49746. 24,
  49747. 24,
  49748. 24,
  49749. 24,
  49750. 24,
  49751. 24,
  49752. 24,
  49753. 24,
  49754. 24,
  49755. 24,
  49756. 24,
  49757. 24,
  49758. 24,
  49759. 24,
  49760. 23,
  49761. 24,
  49762. 24,
  49763. 24,
  49764. 24,
  49765. 24,
  49766. 24,
  49767. 24,
  49768. 24,
  49769. 24,
  49770. 24,
  49771. 24,
  49772. 24,
  49773. 24,
  49774. 24,
  49775. 24,
  49776. 24,
  49777. 24,
  49778. 24,
  49779. 24,
  49780. 24,
  49781. 24,
  49782. 24,
  49783. 24,
  49784. 24,
  49785. 24,
  49786. 24,
  49787. 24,
  49788. 23,
  49789. 24,
  49790. 24,
  49791. 24,
  49792. 24,
  49793. 24,
  49794. 24,
  49795. 24,
  49796. 24,
  49797. 24,
  49798. 24,
  49799. 24,
  49800. 24,
  49801. 24,
  49802. 24,
  49803. 24,
  49804. 24,
  49805. 24,
  49806. 24,
  49807. 24,
  49808. 24,
  49809. 24,
  49810. 24,
  49811. 24,
  49812. 24,
  49813. 24,
  49814. 24,
  49815. 24,
  49816. 23,
  49817. 24,
  49818. 24,
  49819. 24,
  49820. 24,
  49821. 24,
  49822. 24,
  49823. 24,
  49824. 24,
  49825. 24,
  49826. 24,
  49827. 24,
  49828. 24,
  49829. 24,
  49830. 24,
  49831. 24,
  49832. 24,
  49833. 24,
  49834. 24,
  49835. 24,
  49836. 24,
  49837. 24,
  49838. 24,
  49839. 24,
  49840. 24,
  49841. 24,
  49842. 24,
  49843. 24,
  49844. 23,
  49845. 24,
  49846. 24,
  49847. 24,
  49848. 24,
  49849. 24,
  49850. 24,
  49851. 24,
  49852. 24,
  49853. 24,
  49854. 24,
  49855. 24,
  49856. 24,
  49857. 24,
  49858. 24,
  49859. 24,
  49860. 24,
  49861. 24,
  49862. 24,
  49863. 24,
  49864. 24,
  49865. 24,
  49866. 24,
  49867. 24,
  49868. 24,
  49869. 24,
  49870. 24,
  49871. 24,
  49872. 23,
  49873. 24,
  49874. 24,
  49875. 24,
  49876. 24,
  49877. 24,
  49878. 24,
  49879. 24,
  49880. 24,
  49881. 24,
  49882. 24,
  49883. 24,
  49884. 24,
  49885. 24,
  49886. 24,
  49887. 24,
  49888. 24,
  49889. 24,
  49890. 24,
  49891. 24,
  49892. 24,
  49893. 24,
  49894. 24,
  49895. 24,
  49896. 24,
  49897. 24,
  49898. 24,
  49899. 24,
  49900. 23,
  49901. 24,
  49902. 24,
  49903. 24,
  49904. 24,
  49905. 24,
  49906. 24,
  49907. 24,
  49908. 24,
  49909. 24,
  49910. 24,
  49911. 24,
  49912. 24,
  49913. 24,
  49914. 24,
  49915. 24,
  49916. 24,
  49917. 24,
  49918. 24,
  49919. 24,
  49920. 24,
  49921. 24,
  49922. 24,
  49923. 24,
  49924. 24,
  49925. 24,
  49926. 24,
  49927. 24,
  49928. 23,
  49929. 24,
  49930. 24,
  49931. 24,
  49932. 24,
  49933. 24,
  49934. 24,
  49935. 24,
  49936. 24,
  49937. 24,
  49938. 24,
  49939. 24,
  49940. 24,
  49941. 24,
  49942. 24,
  49943. 24,
  49944. 24,
  49945. 24,
  49946. 24,
  49947. 24,
  49948. 24,
  49949. 24,
  49950. 24,
  49951. 24,
  49952. 24,
  49953. 24,
  49954. 24,
  49955. 24,
  49956. 23,
  49957. 24,
  49958. 24,
  49959. 24,
  49960. 24,
  49961. 24,
  49962. 24,
  49963. 24,
  49964. 24,
  49965. 24,
  49966. 24,
  49967. 24,
  49968. 24,
  49969. 24,
  49970. 24,
  49971. 24,
  49972. 24,
  49973. 24,
  49974. 24,
  49975. 24,
  49976. 24,
  49977. 24,
  49978. 24,
  49979. 24,
  49980. 24,
  49981. 24,
  49982. 24,
  49983. 24,
  49984. 23,
  49985. 24,
  49986. 24,
  49987. 24,
  49988. 24,
  49989. 24,
  49990. 24,
  49991. 24,
  49992. 24,
  49993. 24,
  49994. 24,
  49995. 24,
  49996. 24,
  49997. 24,
  49998. 24,
  49999. 24,
  50000. 24,
  50001. 24,
  50002. 24,
  50003. 24,
  50004. 24,
  50005. 24,
  50006. 24,
  50007. 24,
  50008. 24,
  50009. 24,
  50010. 24,
  50011. 24,
  50012. 23,
  50013. 24,
  50014. 24,
  50015. 24,
  50016. 24,
  50017. 24,
  50018. 24,
  50019. 24,
  50020. 24,
  50021. 24,
  50022. 24,
  50023. 24,
  50024. 24,
  50025. 24,
  50026. 24,
  50027. 24,
  50028. 24,
  50029. 24,
  50030. 24,
  50031. 24,
  50032. 24,
  50033. 24,
  50034. 24,
  50035. 24,
  50036. 24,
  50037. 24,
  50038. 24,
  50039. 24,
  50040. 23,
  50041. 24,
  50042. 24,
  50043. 24,
  50044. 24,
  50045. 24,
  50046. 24,
  50047. 24,
  50048. 24,
  50049. 24,
  50050. 24,
  50051. 24,
  50052. 24,
  50053. 24,
  50054. 24,
  50055. 24,
  50056. 24,
  50057. 24,
  50058. 24,
  50059. 24,
  50060. 24,
  50061. 24,
  50062. 24,
  50063. 24,
  50064. 24,
  50065. 24,
  50066. 24,
  50067. 24,
  50068. 23,
  50069. 24,
  50070. 24,
  50071. 24,
  50072. 24,
  50073. 24,
  50074. 24,
  50075. 24,
  50076. 24,
  50077. 24,
  50078. 24,
  50079. 24,
  50080. 24,
  50081. 24,
  50082. 24,
  50083. 24,
  50084. 24,
  50085. 24,
  50086. 24,
  50087. 24,
  50088. 24,
  50089. 24,
  50090. 24,
  50091. 24,
  50092. 24,
  50093. 24,
  50094. 24,
  50095. 24,
  50096. 23,
  50097. 24,
  50098. 24,
  50099. 24,
  50100. 24,
  50101. 24,
  50102. 24,
  50103. 24,
  50104. 24,
  50105. 24,
  50106. 24,
  50107. 24,
  50108. 24,
  50109. 24,
  50110. 24,
  50111. 24,
  50112. 24,
  50113. 24,
  50114. 24,
  50115. 24,
  50116. 24,
  50117. 24,
  50118. 24,
  50119. 24,
  50120. 24,
  50121. 24,
  50122. 24,
  50123. 24,
  50124. 23,
  50125. 24,
  50126. 24,
  50127. 24,
  50128. 24,
  50129. 24,
  50130. 24,
  50131. 24,
  50132. 24,
  50133. 24,
  50134. 24,
  50135. 24,
  50136. 24,
  50137. 24,
  50138. 24,
  50139. 24,
  50140. 24,
  50141. 24,
  50142. 24,
  50143. 24,
  50144. 24,
  50145. 24,
  50146. 24,
  50147. 24,
  50148. 24,
  50149. 24,
  50150. 24,
  50151. 24,
  50152. 23,
  50153. 24,
  50154. 24,
  50155. 24,
  50156. 24,
  50157. 24,
  50158. 24,
  50159. 24,
  50160. 24,
  50161. 24,
  50162. 24,
  50163. 24,
  50164. 24,
  50165. 24,
  50166. 24,
  50167. 24,
  50168. 24,
  50169. 24,
  50170. 24,
  50171. 24,
  50172. 24,
  50173. 24,
  50174. 24,
  50175. 24,
  50176. 24,
  50177. 24,
  50178. 24,
  50179. 24,
  50180. 23,
  50181. 24,
  50182. 24,
  50183. 24,
  50184. 24,
  50185. 24,
  50186. 24,
  50187. 24,
  50188. 24,
  50189. 24,
  50190. 24,
  50191. 24,
  50192. 24,
  50193. 24,
  50194. 24,
  50195. 24,
  50196. 24,
  50197. 24,
  50198. 24,
  50199. 24,
  50200. 24,
  50201. 24,
  50202. 24,
  50203. 24,
  50204. 24,
  50205. 24,
  50206. 24,
  50207. 24,
  50208. 23,
  50209. 24,
  50210. 24,
  50211. 24,
  50212. 24,
  50213. 24,
  50214. 24,
  50215. 24,
  50216. 24,
  50217. 24,
  50218. 24,
  50219. 24,
  50220. 24,
  50221. 24,
  50222. 24,
  50223. 24,
  50224. 24,
  50225. 24,
  50226. 24,
  50227. 24,
  50228. 24,
  50229. 24,
  50230. 24,
  50231. 24,
  50232. 24,
  50233. 24,
  50234. 24,
  50235. 24,
  50236. 23,
  50237. 24,
  50238. 24,
  50239. 24,
  50240. 24,
  50241. 24,
  50242. 24,
  50243. 24,
  50244. 24,
  50245. 24,
  50246. 24,
  50247. 24,
  50248. 24,
  50249. 24,
  50250. 24,
  50251. 24,
  50252. 24,
  50253. 24,
  50254. 24,
  50255. 24,
  50256. 24,
  50257. 24,
  50258. 24,
  50259. 24,
  50260. 24,
  50261. 24,
  50262. 24,
  50263. 24,
  50264. 23,
  50265. 24,
  50266. 24,
  50267. 24,
  50268. 24,
  50269. 24,
  50270. 24,
  50271. 24,
  50272. 24,
  50273. 24,
  50274. 24,
  50275. 24,
  50276. 24,
  50277. 24,
  50278. 24,
  50279. 24,
  50280. 24,
  50281. 24,
  50282. 24,
  50283. 24,
  50284. 24,
  50285. 24,
  50286. 24,
  50287. 24,
  50288. 24,
  50289. 24,
  50290. 24,
  50291. 24,
  50292. 23,
  50293. 24,
  50294. 24,
  50295. 24,
  50296. 24,
  50297. 24,
  50298. 24,
  50299. 24,
  50300. 24,
  50301. 24,
  50302. 24,
  50303. 24,
  50304. 24,
  50305. 24,
  50306. 24,
  50307. 24,
  50308. 24,
  50309. 24,
  50310. 24,
  50311. 24,
  50312. 24,
  50313. 24,
  50314. 24,
  50315. 24,
  50316. 24,
  50317. 24,
  50318. 24,
  50319. 24,
  50320. 23,
  50321. 24,
  50322. 24,
  50323. 24,
  50324. 24,
  50325. 24,
  50326. 24,
  50327. 24,
  50328. 24,
  50329. 24,
  50330. 24,
  50331. 24,
  50332. 24,
  50333. 24,
  50334. 24,
  50335. 24,
  50336. 24,
  50337. 24,
  50338. 24,
  50339. 24,
  50340. 24,
  50341. 24,
  50342. 24,
  50343. 24,
  50344. 24,
  50345. 24,
  50346. 24,
  50347. 24,
  50348. 23,
  50349. 24,
  50350. 24,
  50351. 24,
  50352. 24,
  50353. 24,
  50354. 24,
  50355. 24,
  50356. 24,
  50357. 24,
  50358. 24,
  50359. 24,
  50360. 24,
  50361. 24,
  50362. 24,
  50363. 24,
  50364. 24,
  50365. 24,
  50366. 24,
  50367. 24,
  50368. 24,
  50369. 24,
  50370. 24,
  50371. 24,
  50372. 24,
  50373. 24,
  50374. 24,
  50375. 24,
  50376. 23,
  50377. 24,
  50378. 24,
  50379. 24,
  50380. 24,
  50381. 24,
  50382. 24,
  50383. 24,
  50384. 24,
  50385. 24,
  50386. 24,
  50387. 24,
  50388. 24,
  50389. 24,
  50390. 24,
  50391. 24,
  50392. 24,
  50393. 24,
  50394. 24,
  50395. 24,
  50396. 24,
  50397. 24,
  50398. 24,
  50399. 24,
  50400. 24,
  50401. 24,
  50402. 24,
  50403. 24,
  50404. 23,
  50405. 24,
  50406. 24,
  50407. 24,
  50408. 24,
  50409. 24,
  50410. 24,
  50411. 24,
  50412. 24,
  50413. 24,
  50414. 24,
  50415. 24,
  50416. 24,
  50417. 24,
  50418. 24,
  50419. 24,
  50420. 24,
  50421. 24,
  50422. 24,
  50423. 24,
  50424. 24,
  50425. 24,
  50426. 24,
  50427. 24,
  50428. 24,
  50429. 24,
  50430. 24,
  50431. 24,
  50432. 23,
  50433. 24,
  50434. 24,
  50435. 24,
  50436. 24,
  50437. 24,
  50438. 24,
  50439. 24,
  50440. 24,
  50441. 24,
  50442. 24,
  50443. 24,
  50444. 24,
  50445. 24,
  50446. 24,
  50447. 24,
  50448. 24,
  50449. 24,
  50450. 24,
  50451. 24,
  50452. 24,
  50453. 24,
  50454. 24,
  50455. 24,
  50456. 24,
  50457. 24,
  50458. 24,
  50459. 24,
  50460. 23,
  50461. 24,
  50462. 24,
  50463. 24,
  50464. 24,
  50465. 24,
  50466. 24,
  50467. 24,
  50468. 24,
  50469. 24,
  50470. 24,
  50471. 24,
  50472. 24,
  50473. 24,
  50474. 24,
  50475. 24,
  50476. 24,
  50477. 24,
  50478. 24,
  50479. 24,
  50480. 24,
  50481. 24,
  50482. 24,
  50483. 24,
  50484. 24,
  50485. 24,
  50486. 24,
  50487. 24,
  50488. 23,
  50489. 24,
  50490. 24,
  50491. 24,
  50492. 24,
  50493. 24,
  50494. 24,
  50495. 24,
  50496. 24,
  50497. 24,
  50498. 24,
  50499. 24,
  50500. 24,
  50501. 24,
  50502. 24,
  50503. 24,
  50504. 24,
  50505. 24,
  50506. 24,
  50507. 24,
  50508. 24,
  50509. 24,
  50510. 24,
  50511. 24,
  50512. 24,
  50513. 24,
  50514. 24,
  50515. 24,
  50516. 23,
  50517. 24,
  50518. 24,
  50519. 24,
  50520. 24,
  50521. 24,
  50522. 24,
  50523. 24,
  50524. 24,
  50525. 24,
  50526. 24,
  50527. 24,
  50528. 24,
  50529. 24,
  50530. 24,
  50531. 24,
  50532. 24,
  50533. 24,
  50534. 24,
  50535. 24,
  50536. 24,
  50537. 24,
  50538. 24,
  50539. 24,
  50540. 24,
  50541. 24,
  50542. 24,
  50543. 24,
  50544. 23,
  50545. 24,
  50546. 24,
  50547. 24,
  50548. 24,
  50549. 24,
  50550. 24,
  50551. 24,
  50552. 24,
  50553. 24,
  50554. 24,
  50555. 24,
  50556. 24,
  50557. 24,
  50558. 24,
  50559. 24,
  50560. 24,
  50561. 24,
  50562. 24,
  50563. 24,
  50564. 24,
  50565. 24,
  50566. 24,
  50567. 24,
  50568. 24,
  50569. 24,
  50570. 24,
  50571. 24,
  50572. 23,
  50573. 24,
  50574. 24,
  50575. 24,
  50576. 24,
  50577. 24,
  50578. 24,
  50579. 24,
  50580. 24,
  50581. 24,
  50582. 24,
  50583. 24,
  50584. 24,
  50585. 24,
  50586. 24,
  50587. 24,
  50588. 24,
  50589. 24,
  50590. 24,
  50591. 24,
  50592. 24,
  50593. 24,
  50594. 24,
  50595. 24,
  50596. 24,
  50597. 24,
  50598. 24,
  50599. 24,
  50600. 23,
  50601. 24,
  50602. 24,
  50603. 24,
  50604. 24,
  50605. 24,
  50606. 24,
  50607. 24,
  50608. 24,
  50609. 24,
  50610. 24,
  50611. 24,
  50612. 24,
  50613. 24,
  50614. 24,
  50615. 24,
  50616. 24,
  50617. 24,
  50618. 24,
  50619. 24,
  50620. 24,
  50621. 24,
  50622. 24,
  50623. 24,
  50624. 24,
  50625. 24,
  50626. 24,
  50627. 24,
  50628. 23,
  50629. 24,
  50630. 24,
  50631. 24,
  50632. 24,
  50633. 24,
  50634. 24,
  50635. 24,
  50636. 24,
  50637. 24,
  50638. 24,
  50639. 24,
  50640. 24,
  50641. 24,
  50642. 24,
  50643. 24,
  50644. 24,
  50645. 24,
  50646. 24,
  50647. 24,
  50648. 24,
  50649. 24,
  50650. 24,
  50651. 24,
  50652. 24,
  50653. 24,
  50654. 24,
  50655. 24,
  50656. 23,
  50657. 24,
  50658. 24,
  50659. 24,
  50660. 24,
  50661. 24,
  50662. 24,
  50663. 24,
  50664. 24,
  50665. 24,
  50666. 24,
  50667. 24,
  50668. 24,
  50669. 24,
  50670. 24,
  50671. 24,
  50672. 24,
  50673. 24,
  50674. 24,
  50675. 24,
  50676. 24,
  50677. 24,
  50678. 24,
  50679. 24,
  50680. 24,
  50681. 24,
  50682. 24,
  50683. 24,
  50684. 23,
  50685. 24,
  50686. 24,
  50687. 24,
  50688. 24,
  50689. 24,
  50690. 24,
  50691. 24,
  50692. 24,
  50693. 24,
  50694. 24,
  50695. 24,
  50696. 24,
  50697. 24,
  50698. 24,
  50699. 24,
  50700. 24,
  50701. 24,
  50702. 24,
  50703. 24,
  50704. 24,
  50705. 24,
  50706. 24,
  50707. 24,
  50708. 24,
  50709. 24,
  50710. 24,
  50711. 24,
  50712. 23,
  50713. 24,
  50714. 24,
  50715. 24,
  50716. 24,
  50717. 24,
  50718. 24,
  50719. 24,
  50720. 24,
  50721. 24,
  50722. 24,
  50723. 24,
  50724. 24,
  50725. 24,
  50726. 24,
  50727. 24,
  50728. 24,
  50729. 24,
  50730. 24,
  50731. 24,
  50732. 24,
  50733. 24,
  50734. 24,
  50735. 24,
  50736. 24,
  50737. 24,
  50738. 24,
  50739. 24,
  50740. 23,
  50741. 24,
  50742. 24,
  50743. 24,
  50744. 24,
  50745. 24,
  50746. 24,
  50747. 24,
  50748. 24,
  50749. 24,
  50750. 24,
  50751. 24,
  50752. 24,
  50753. 24,
  50754. 24,
  50755. 24,
  50756. 24,
  50757. 24,
  50758. 24,
  50759. 24,
  50760. 24,
  50761. 24,
  50762. 24,
  50763. 24,
  50764. 24,
  50765. 24,
  50766. 24,
  50767. 24,
  50768. 23,
  50769. 24,
  50770. 24,
  50771. 24,
  50772. 24,
  50773. 24,
  50774. 24,
  50775. 24,
  50776. 24,
  50777. 24,
  50778. 24,
  50779. 24,
  50780. 24,
  50781. 24,
  50782. 24,
  50783. 24,
  50784. 24,
  50785. 24,
  50786. 24,
  50787. 24,
  50788. 24,
  50789. 24,
  50790. 24,
  50791. 24,
  50792. 24,
  50793. 24,
  50794. 24,
  50795. 24,
  50796. 23,
  50797. 24,
  50798. 24,
  50799. 24,
  50800. 24,
  50801. 24,
  50802. 24,
  50803. 24,
  50804. 24,
  50805. 24,
  50806. 24,
  50807. 24,
  50808. 24,
  50809. 24,
  50810. 24,
  50811. 24,
  50812. 24,
  50813. 24,
  50814. 24,
  50815. 24,
  50816. 24,
  50817. 24,
  50818. 24,
  50819. 24,
  50820. 24,
  50821. 24,
  50822. 24,
  50823. 24,
  50824. 23,
  50825. 24,
  50826. 24,
  50827. 24,
  50828. 24,
  50829. 24,
  50830. 24,
  50831. 24,
  50832. 24,
  50833. 24,
  50834. 24,
  50835. 24,
  50836. 24,
  50837. 24,
  50838. 24,
  50839. 24,
  50840. 24,
  50841. 24,
  50842. 24,
  50843. 24,
  50844. 24,
  50845. 24,
  50846. 24,
  50847. 24,
  50848. 24,
  50849. 24,
  50850. 24,
  50851. 24,
  50852. 23,
  50853. 24,
  50854. 24,
  50855. 24,
  50856. 24,
  50857. 24,
  50858. 24,
  50859. 24,
  50860. 24,
  50861. 24,
  50862. 24,
  50863. 24,
  50864. 24,
  50865. 24,
  50866. 24,
  50867. 24,
  50868. 24,
  50869. 24,
  50870. 24,
  50871. 24,
  50872. 24,
  50873. 24,
  50874. 24,
  50875. 24,
  50876. 24,
  50877. 24,
  50878. 24,
  50879. 24,
  50880. 23,
  50881. 24,
  50882. 24,
  50883. 24,
  50884. 24,
  50885. 24,
  50886. 24,
  50887. 24,
  50888. 24,
  50889. 24,
  50890. 24,
  50891. 24,
  50892. 24,
  50893. 24,
  50894. 24,
  50895. 24,
  50896. 24,
  50897. 24,
  50898. 24,
  50899. 24,
  50900. 24,
  50901. 24,
  50902. 24,
  50903. 24,
  50904. 24,
  50905. 24,
  50906. 24,
  50907. 24,
  50908. 23,
  50909. 24,
  50910. 24,
  50911. 24,
  50912. 24,
  50913. 24,
  50914. 24,
  50915. 24,
  50916. 24,
  50917. 24,
  50918. 24,
  50919. 24,
  50920. 24,
  50921. 24,
  50922. 24,
  50923. 24,
  50924. 24,
  50925. 24,
  50926. 24,
  50927. 24,
  50928. 24,
  50929. 24,
  50930. 24,
  50931. 24,
  50932. 24,
  50933. 24,
  50934. 24,
  50935. 24,
  50936. 23,
  50937. 24,
  50938. 24,
  50939. 24,
  50940. 24,
  50941. 24,
  50942. 24,
  50943. 24,
  50944. 24,
  50945. 24,
  50946. 24,
  50947. 24,
  50948. 24,
  50949. 24,
  50950. 24,
  50951. 24,
  50952. 24,
  50953. 24,
  50954. 24,
  50955. 24,
  50956. 24,
  50957. 24,
  50958. 24,
  50959. 24,
  50960. 24,
  50961. 24,
  50962. 24,
  50963. 24,
  50964. 23,
  50965. 24,
  50966. 24,
  50967. 24,
  50968. 24,
  50969. 24,
  50970. 24,
  50971. 24,
  50972. 24,
  50973. 24,
  50974. 24,
  50975. 24,
  50976. 24,
  50977. 24,
  50978. 24,
  50979. 24,
  50980. 24,
  50981. 24,
  50982. 24,
  50983. 24,
  50984. 24,
  50985. 24,
  50986. 24,
  50987. 24,
  50988. 24,
  50989. 24,
  50990. 24,
  50991. 24,
  50992. 23,
  50993. 24,
  50994. 24,
  50995. 24,
  50996. 24,
  50997. 24,
  50998. 24,
  50999. 24,
  51000. 24,
  51001. 24,
  51002. 24,
  51003. 24,
  51004. 24,
  51005. 24,
  51006. 24,
  51007. 24,
  51008. 24,
  51009. 24,
  51010. 24,
  51011. 24,
  51012. 24,
  51013. 24,
  51014. 24,
  51015. 24,
  51016. 24,
  51017. 24,
  51018. 24,
  51019. 24,
  51020. 23,
  51021. 24,
  51022. 24,
  51023. 24,
  51024. 24,
  51025. 24,
  51026. 24,
  51027. 24,
  51028. 24,
  51029. 24,
  51030. 24,
  51031. 24,
  51032. 24,
  51033. 24,
  51034. 24,
  51035. 24,
  51036. 24,
  51037. 24,
  51038. 24,
  51039. 24,
  51040. 24,
  51041. 24,
  51042. 24,
  51043. 24,
  51044. 24,
  51045. 24,
  51046. 24,
  51047. 24,
  51048. 23,
  51049. 24,
  51050. 24,
  51051. 24,
  51052. 24,
  51053. 24,
  51054. 24,
  51055. 24,
  51056. 24,
  51057. 24,
  51058. 24,
  51059. 24,
  51060. 24,
  51061. 24,
  51062. 24,
  51063. 24,
  51064. 24,
  51065. 24,
  51066. 24,
  51067. 24,
  51068. 24,
  51069. 24,
  51070. 24,
  51071. 24,
  51072. 24,
  51073. 24,
  51074. 24,
  51075. 24,
  51076. 23,
  51077. 24,
  51078. 24,
  51079. 24,
  51080. 24,
  51081. 24,
  51082. 24,
  51083. 24,
  51084. 24,
  51085. 24,
  51086. 24,
  51087. 24,
  51088. 24,
  51089. 24,
  51090. 24,
  51091. 24,
  51092. 24,
  51093. 24,
  51094. 24,
  51095. 24,
  51096. 24,
  51097. 24,
  51098. 24,
  51099. 24,
  51100. 24,
  51101. 24,
  51102. 24,
  51103. 24,
  51104. 23,
  51105. 24,
  51106. 24,
  51107. 24,
  51108. 24,
  51109. 24,
  51110. 24,
  51111. 24,
  51112. 24,
  51113. 24,
  51114. 24,
  51115. 24,
  51116. 24,
  51117. 24,
  51118. 24,
  51119. 24,
  51120. 24,
  51121. 24,
  51122. 24,
  51123. 24,
  51124. 24,
  51125. 24,
  51126. 24,
  51127. 24,
  51128. 24,
  51129. 24,
  51130. 24,
  51131. 24,
  51132. 23,
  51133. 24,
  51134. 24,
  51135. 24,
  51136. 24,
  51137. 24,
  51138. 24,
  51139. 24,
  51140. 24,
  51141. 24,
  51142. 24,
  51143. 24,
  51144. 24,
  51145. 24,
  51146. 24,
  51147. 24,
  51148. 24,
  51149. 24,
  51150. 24,
  51151. 24,
  51152. 24,
  51153. 24,
  51154. 24,
  51155. 24,
  51156. 24,
  51157. 24,
  51158. 24,
  51159. 24,
  51160. 23,
  51161. 24,
  51162. 24,
  51163. 24,
  51164. 24,
  51165. 24,
  51166. 24,
  51167. 24,
  51168. 24,
  51169. 24,
  51170. 24,
  51171. 24,
  51172. 24,
  51173. 24,
  51174. 24,
  51175. 24,
  51176. 24,
  51177. 24,
  51178. 24,
  51179. 24,
  51180. 24,
  51181. 24,
  51182. 24,
  51183. 24,
  51184. 24,
  51185. 24,
  51186. 24,
  51187. 24,
  51188. 23,
  51189. 24,
  51190. 24,
  51191. 24,
  51192. 24,
  51193. 24,
  51194. 24,
  51195. 24,
  51196. 24,
  51197. 24,
  51198. 24,
  51199. 24,
  51200. 24,
  51201. 24,
  51202. 24,
  51203. 24,
  51204. 24,
  51205. 24,
  51206. 24,
  51207. 24,
  51208. 24,
  51209. 24,
  51210. 24,
  51211. 24,
  51212. 24,
  51213. 24,
  51214. 24,
  51215. 24,
  51216. 23,
  51217. 24,
  51218. 24,
  51219. 24,
  51220. 24,
  51221. 24,
  51222. 24,
  51223. 24,
  51224. 24,
  51225. 24,
  51226. 24,
  51227. 24,
  51228. 24,
  51229. 24,
  51230. 24,
  51231. 24,
  51232. 24,
  51233. 24,
  51234. 24,
  51235. 24,
  51236. 24,
  51237. 24,
  51238. 24,
  51239. 24,
  51240. 24,
  51241. 24,
  51242. 24,
  51243. 24,
  51244. 23,
  51245. 24,
  51246. 24,
  51247. 24,
  51248. 24,
  51249. 24,
  51250. 24,
  51251. 24,
  51252. 24,
  51253. 24,
  51254. 24,
  51255. 24,
  51256. 24,
  51257. 24,
  51258. 24,
  51259. 24,
  51260. 24,
  51261. 24,
  51262. 24,
  51263. 24,
  51264. 24,
  51265. 24,
  51266. 24,
  51267. 24,
  51268. 24,
  51269. 24,
  51270. 24,
  51271. 24,
  51272. 23,
  51273. 24,
  51274. 24,
  51275. 24,
  51276. 24,
  51277. 24,
  51278. 24,
  51279. 24,
  51280. 24,
  51281. 24,
  51282. 24,
  51283. 24,
  51284. 24,
  51285. 24,
  51286. 24,
  51287. 24,
  51288. 24,
  51289. 24,
  51290. 24,
  51291. 24,
  51292. 24,
  51293. 24,
  51294. 24,
  51295. 24,
  51296. 24,
  51297. 24,
  51298. 24,
  51299. 24,
  51300. 23,
  51301. 24,
  51302. 24,
  51303. 24,
  51304. 24,
  51305. 24,
  51306. 24,
  51307. 24,
  51308. 24,
  51309. 24,
  51310. 24,
  51311. 24,
  51312. 24,
  51313. 24,
  51314. 24,
  51315. 24,
  51316. 24,
  51317. 24,
  51318. 24,
  51319. 24,
  51320. 24,
  51321. 24,
  51322. 24,
  51323. 24,
  51324. 24,
  51325. 24,
  51326. 24,
  51327. 24,
  51328. 23,
  51329. 24,
  51330. 24,
  51331. 24,
  51332. 24,
  51333. 24,
  51334. 24,
  51335. 24,
  51336. 24,
  51337. 24,
  51338. 24,
  51339. 24,
  51340. 24,
  51341. 24,
  51342. 24,
  51343. 24,
  51344. 24,
  51345. 24,
  51346. 24,
  51347. 24,
  51348. 24,
  51349. 24,
  51350. 24,
  51351. 24,
  51352. 24,
  51353. 24,
  51354. 24,
  51355. 24,
  51356. 23,
  51357. 24,
  51358. 24,
  51359. 24,
  51360. 24,
  51361. 24,
  51362. 24,
  51363. 24,
  51364. 24,
  51365. 24,
  51366. 24,
  51367. 24,
  51368. 24,
  51369. 24,
  51370. 24,
  51371. 24,
  51372. 24,
  51373. 24,
  51374. 24,
  51375. 24,
  51376. 24,
  51377. 24,
  51378. 24,
  51379. 24,
  51380. 24,
  51381. 24,
  51382. 24,
  51383. 24,
  51384. 23,
  51385. 24,
  51386. 24,
  51387. 24,
  51388. 24,
  51389. 24,
  51390. 24,
  51391. 24,
  51392. 24,
  51393. 24,
  51394. 24,
  51395. 24,
  51396. 24,
  51397. 24,
  51398. 24,
  51399. 24,
  51400. 24,
  51401. 24,
  51402. 24,
  51403. 24,
  51404. 24,
  51405. 24,
  51406. 24,
  51407. 24,
  51408. 24,
  51409. 24,
  51410. 24,
  51411. 24,
  51412. 23,
  51413. 24,
  51414. 24,
  51415. 24,
  51416. 24,
  51417. 24,
  51418. 24,
  51419. 24,
  51420. 24,
  51421. 24,
  51422. 24,
  51423. 24,
  51424. 24,
  51425. 24,
  51426. 24,
  51427. 24,
  51428. 24,
  51429. 24,
  51430. 24,
  51431. 24,
  51432. 24,
  51433. 24,
  51434. 24,
  51435. 24,
  51436. 24,
  51437. 24,
  51438. 24,
  51439. 24,
  51440. 23,
  51441. 24,
  51442. 24,
  51443. 24,
  51444. 24,
  51445. 24,
  51446. 24,
  51447. 24,
  51448. 24,
  51449. 24,
  51450. 24,
  51451. 24,
  51452. 24,
  51453. 24,
  51454. 24,
  51455. 24,
  51456. 24,
  51457. 24,
  51458. 24,
  51459. 24,
  51460. 24,
  51461. 24,
  51462. 24,
  51463. 24,
  51464. 24,
  51465. 24,
  51466. 24,
  51467. 24,
  51468. 23,
  51469. 24,
  51470. 24,
  51471. 24,
  51472. 24,
  51473. 24,
  51474. 24,
  51475. 24,
  51476. 24,
  51477. 24,
  51478. 24,
  51479. 24,
  51480. 24,
  51481. 24,
  51482. 24,
  51483. 24,
  51484. 24,
  51485. 24,
  51486. 24,
  51487. 24,
  51488. 24,
  51489. 24,
  51490. 24,
  51491. 24,
  51492. 24,
  51493. 24,
  51494. 24,
  51495. 24,
  51496. 23,
  51497. 24,
  51498. 24,
  51499. 24,
  51500. 24,
  51501. 24,
  51502. 24,
  51503. 24,
  51504. 24,
  51505. 24,
  51506. 24,
  51507. 24,
  51508. 24,
  51509. 24,
  51510. 24,
  51511. 24,
  51512. 24,
  51513. 24,
  51514. 24,
  51515. 24,
  51516. 24,
  51517. 24,
  51518. 24,
  51519. 24,
  51520. 24,
  51521. 24,
  51522. 24,
  51523. 24,
  51524. 23,
  51525. 24,
  51526. 24,
  51527. 24,
  51528. 24,
  51529. 24,
  51530. 24,
  51531. 24,
  51532. 24,
  51533. 24,
  51534. 24,
  51535. 24,
  51536. 24,
  51537. 24,
  51538. 24,
  51539. 24,
  51540. 24,
  51541. 24,
  51542. 24,
  51543. 24,
  51544. 24,
  51545. 24,
  51546. 24,
  51547. 24,
  51548. 24,
  51549. 24,
  51550. 24,
  51551. 24,
  51552. 23,
  51553. 24,
  51554. 24,
  51555. 24,
  51556. 24,
  51557. 24,
  51558. 24,
  51559. 24,
  51560. 24,
  51561. 24,
  51562. 24,
  51563. 24,
  51564. 24,
  51565. 24,
  51566. 24,
  51567. 24,
  51568. 24,
  51569. 24,
  51570. 24,
  51571. 24,
  51572. 24,
  51573. 24,
  51574. 24,
  51575. 24,
  51576. 24,
  51577. 24,
  51578. 24,
  51579. 24,
  51580. 23,
  51581. 24,
  51582. 24,
  51583. 24,
  51584. 24,
  51585. 24,
  51586. 24,
  51587. 24,
  51588. 24,
  51589. 24,
  51590. 24,
  51591. 24,
  51592. 24,
  51593. 24,
  51594. 24,
  51595. 24,
  51596. 24,
  51597. 24,
  51598. 24,
  51599. 24,
  51600. 24,
  51601. 24,
  51602. 24,
  51603. 24,
  51604. 24,
  51605. 24,
  51606. 24,
  51607. 24,
  51608. 23,
  51609. 24,
  51610. 24,
  51611. 24,
  51612. 24,
  51613. 24,
  51614. 24,
  51615. 24,
  51616. 24,
  51617. 24,
  51618. 24,
  51619. 24,
  51620. 24,
  51621. 24,
  51622. 24,
  51623. 24,
  51624. 24,
  51625. 24,
  51626. 24,
  51627. 24,
  51628. 24,
  51629. 24,
  51630. 24,
  51631. 24,
  51632. 24,
  51633. 24,
  51634. 24,
  51635. 24,
  51636. 23,
  51637. 24,
  51638. 24,
  51639. 24,
  51640. 24,
  51641. 24,
  51642. 24,
  51643. 24,
  51644. 24,
  51645. 24,
  51646. 24,
  51647. 24,
  51648. 24,
  51649. 24,
  51650. 24,
  51651. 24,
  51652. 24,
  51653. 24,
  51654. 24,
  51655. 24,
  51656. 24,
  51657. 24,
  51658. 24,
  51659. 24,
  51660. 24,
  51661. 24,
  51662. 24,
  51663. 24,
  51664. 23,
  51665. 24,
  51666. 24,
  51667. 24,
  51668. 24,
  51669. 24,
  51670. 24,
  51671. 24,
  51672. 24,
  51673. 24,
  51674. 24,
  51675. 24,
  51676. 24,
  51677. 24,
  51678. 24,
  51679. 24,
  51680. 24,
  51681. 24,
  51682. 24,
  51683. 24,
  51684. 24,
  51685. 24,
  51686. 24,
  51687. 24,
  51688. 24,
  51689. 24,
  51690. 24,
  51691. 24,
  51692. 23,
  51693. 24,
  51694. 24,
  51695. 24,
  51696. 24,
  51697. 24,
  51698. 24,
  51699. 24,
  51700. 24,
  51701. 24,
  51702. 24,
  51703. 24,
  51704. 24,
  51705. 24,
  51706. 24,
  51707. 24,
  51708. 24,
  51709. 24,
  51710. 24,
  51711. 24,
  51712. 24,
  51713. 24,
  51714. 24,
  51715. 24,
  51716. 24,
  51717. 24,
  51718. 24,
  51719. 24,
  51720. 23,
  51721. 24,
  51722. 24,
  51723. 24,
  51724. 24,
  51725. 24,
  51726. 24,
  51727. 24,
  51728. 24,
  51729. 24,
  51730. 24,
  51731. 24,
  51732. 24,
  51733. 24,
  51734. 24,
  51735. 24,
  51736. 24,
  51737. 24,
  51738. 24,
  51739. 24,
  51740. 24,
  51741. 24,
  51742. 24,
  51743. 24,
  51744. 24,
  51745. 24,
  51746. 24,
  51747. 24,
  51748. 23,
  51749. 24,
  51750. 24,
  51751. 24,
  51752. 24,
  51753. 24,
  51754. 24,
  51755. 24,
  51756. 24,
  51757. 24,
  51758. 24,
  51759. 24,
  51760. 24,
  51761. 24,
  51762. 24,
  51763. 24,
  51764. 24,
  51765. 24,
  51766. 24,
  51767. 24,
  51768. 24,
  51769. 24,
  51770. 24,
  51771. 24,
  51772. 24,
  51773. 24,
  51774. 24,
  51775. 24,
  51776. 23,
  51777. 24,
  51778. 24,
  51779. 24,
  51780. 24,
  51781. 24,
  51782. 24,
  51783. 24,
  51784. 24,
  51785. 24,
  51786. 24,
  51787. 24,
  51788. 24,
  51789. 24,
  51790. 24,
  51791. 24,
  51792. 24,
  51793. 24,
  51794. 24,
  51795. 24,
  51796. 24,
  51797. 24,
  51798. 24,
  51799. 24,
  51800. 24,
  51801. 24,
  51802. 24,
  51803. 24,
  51804. 23,
  51805. 24,
  51806. 24,
  51807. 24,
  51808. 24,
  51809. 24,
  51810. 24,
  51811. 24,
  51812. 24,
  51813. 24,
  51814. 24,
  51815. 24,
  51816. 24,
  51817. 24,
  51818. 24,
  51819. 24,
  51820. 24,
  51821. 24,
  51822. 24,
  51823. 24,
  51824. 24,
  51825. 24,
  51826. 24,
  51827. 24,
  51828. 24,
  51829. 24,
  51830. 24,
  51831. 24,
  51832. 23,
  51833. 24,
  51834. 24,
  51835. 24,
  51836. 24,
  51837. 24,
  51838. 24,
  51839. 24,
  51840. 24,
  51841. 24,
  51842. 24,
  51843. 24,
  51844. 24,
  51845. 24,
  51846. 24,
  51847. 24,
  51848. 24,
  51849. 24,
  51850. 24,
  51851. 24,
  51852. 24,
  51853. 24,
  51854. 24,
  51855. 24,
  51856. 24,
  51857. 24,
  51858. 24,
  51859. 24,
  51860. 23,
  51861. 24,
  51862. 24,
  51863. 24,
  51864. 24,
  51865. 24,
  51866. 24,
  51867. 24,
  51868. 24,
  51869. 24,
  51870. 24,
  51871. 24,
  51872. 24,
  51873. 24,
  51874. 24,
  51875. 24,
  51876. 24,
  51877. 24,
  51878. 24,
  51879. 24,
  51880. 24,
  51881. 24,
  51882. 24,
  51883. 24,
  51884. 24,
  51885. 24,
  51886. 24,
  51887. 24,
  51888. 23,
  51889. 24,
  51890. 24,
  51891. 24,
  51892. 24,
  51893. 24,
  51894. 24,
  51895. 24,
  51896. 24,
  51897. 24,
  51898. 24,
  51899. 24,
  51900. 24,
  51901. 24,
  51902. 24,
  51903. 24,
  51904. 24,
  51905. 24,
  51906. 24,
  51907. 24,
  51908. 24,
  51909. 24,
  51910. 24,
  51911. 24,
  51912. 24,
  51913. 24,
  51914. 24,
  51915. 24,
  51916. 23,
  51917. 24,
  51918. 24,
  51919. 24,
  51920. 24,
  51921. 24,
  51922. 24,
  51923. 24,
  51924. 24,
  51925. 24,
  51926. 24,
  51927. 24,
  51928. 24,
  51929. 24,
  51930. 24,
  51931. 24,
  51932. 24,
  51933. 24,
  51934. 24,
  51935. 24,
  51936. 24,
  51937. 24,
  51938. 24,
  51939. 24,
  51940. 24,
  51941. 24,
  51942. 24,
  51943. 24,
  51944. 23,
  51945. 24,
  51946. 24,
  51947. 24,
  51948. 24,
  51949. 24,
  51950. 24,
  51951. 24,
  51952. 24,
  51953. 24,
  51954. 24,
  51955. 24,
  51956. 24,
  51957. 24,
  51958. 24,
  51959. 24,
  51960. 24,
  51961. 24,
  51962. 24,
  51963. 24,
  51964. 24,
  51965. 24,
  51966. 24,
  51967. 24,
  51968. 24,
  51969. 24,
  51970. 24,
  51971. 24,
  51972. 23,
  51973. 24,
  51974. 24,
  51975. 24,
  51976. 24,
  51977. 24,
  51978. 24,
  51979. 24,
  51980. 24,
  51981. 24,
  51982. 24,
  51983. 24,
  51984. 24,
  51985. 24,
  51986. 24,
  51987. 24,
  51988. 24,
  51989. 24,
  51990. 24,
  51991. 24,
  51992. 24,
  51993. 24,
  51994. 24,
  51995. 24,
  51996. 24,
  51997. 24,
  51998. 24,
  51999. 24,
  52000. 23,
  52001. 24,
  52002. 24,
  52003. 24,
  52004. 24,
  52005. 24,
  52006. 24,
  52007. 24,
  52008. 24,
  52009. 24,
  52010. 24,
  52011. 24,
  52012. 24,
  52013. 24,
  52014. 24,
  52015. 24,
  52016. 24,
  52017. 24,
  52018. 24,
  52019. 24,
  52020. 24,
  52021. 24,
  52022. 24,
  52023. 24,
  52024. 24,
  52025. 24,
  52026. 24,
  52027. 24,
  52028. 23,
  52029. 24,
  52030. 24,
  52031. 24,
  52032. 24,
  52033. 24,
  52034. 24,
  52035. 24,
  52036. 24,
  52037. 24,
  52038. 24,
  52039. 24,
  52040. 24,
  52041. 24,
  52042. 24,
  52043. 24,
  52044. 24,
  52045. 24,
  52046. 24,
  52047. 24,
  52048. 24,
  52049. 24,
  52050. 24,
  52051. 24,
  52052. 24,
  52053. 24,
  52054. 24,
  52055. 24,
  52056. 23,
  52057. 24,
  52058. 24,
  52059. 24,
  52060. 24,
  52061. 24,
  52062. 24,
  52063. 24,
  52064. 24,
  52065. 24,
  52066. 24,
  52067. 24,
  52068. 24,
  52069. 24,
  52070. 24,
  52071. 24,
  52072. 24,
  52073. 24,
  52074. 24,
  52075. 24,
  52076. 24,
  52077. 24,
  52078. 24,
  52079. 24,
  52080. 24,
  52081. 24,
  52082. 24,
  52083. 24,
  52084. 23,
  52085. 24,
  52086. 24,
  52087. 24,
  52088. 24,
  52089. 24,
  52090. 24,
  52091. 24,
  52092. 24,
  52093. 24,
  52094. 24,
  52095. 24,
  52096. 24,
  52097. 24,
  52098. 24,
  52099. 24,
  52100. 24,
  52101. 24,
  52102. 24,
  52103. 24,
  52104. 24,
  52105. 24,
  52106. 24,
  52107. 24,
  52108. 24,
  52109. 24,
  52110. 24,
  52111. 24,
  52112. 23,
  52113. 24,
  52114. 24,
  52115. 24,
  52116. 24,
  52117. 24,
  52118. 24,
  52119. 24,
  52120. 24,
  52121. 24,
  52122. 24,
  52123. 24,
  52124. 24,
  52125. 24,
  52126. 24,
  52127. 24,
  52128. 24,
  52129. 24,
  52130. 24,
  52131. 24,
  52132. 24,
  52133. 24,
  52134. 24,
  52135. 24,
  52136. 24,
  52137. 24,
  52138. 24,
  52139. 24,
  52140. 23,
  52141. 24,
  52142. 24,
  52143. 24,
  52144. 24,
  52145. 24,
  52146. 24,
  52147. 24,
  52148. 24,
  52149. 24,
  52150. 24,
  52151. 24,
  52152. 24,
  52153. 24,
  52154. 24,
  52155. 24,
  52156. 24,
  52157. 24,
  52158. 24,
  52159. 24,
  52160. 24,
  52161. 24,
  52162. 24,
  52163. 24,
  52164. 24,
  52165. 24,
  52166. 24,
  52167. 24,
  52168. 23,
  52169. 24,
  52170. 24,
  52171. 24,
  52172. 24,
  52173. 24,
  52174. 24,
  52175. 24,
  52176. 24,
  52177. 24,
  52178. 24,
  52179. 24,
  52180. 24,
  52181. 24,
  52182. 24,
  52183. 24,
  52184. 24,
  52185. 24,
  52186. 24,
  52187. 24,
  52188. 24,
  52189. 24,
  52190. 24,
  52191. 24,
  52192. 24,
  52193. 24,
  52194. 24,
  52195. 24,
  52196. 23,
  52197. 24,
  52198. 24,
  52199. 24,
  52200. 24,
  52201. 24,
  52202. 24,
  52203. 24,
  52204. 24,
  52205. 24,
  52206. 24,
  52207. 24,
  52208. 24,
  52209. 24,
  52210. 24,
  52211. 24,
  52212. 24,
  52213. 24,
  52214. 24,
  52215. 24,
  52216. 24,
  52217. 24,
  52218. 24,
  52219. 24,
  52220. 24,
  52221. 24,
  52222. 24,
  52223. 24,
  52224. 23,
  52225. 24,
  52226. 24,
  52227. 24,
  52228. 24,
  52229. 24,
  52230. 24,
  52231. 24,
  52232. 24,
  52233. 24,
  52234. 24,
  52235. 24,
  52236. 24,
  52237. 24,
  52238. 24,
  52239. 24,
  52240. 24,
  52241. 24,
  52242. 24,
  52243. 24,
  52244. 24,
  52245. 24,
  52246. 24,
  52247. 24,
  52248. 24,
  52249. 24,
  52250. 24,
  52251. 24,
  52252. 23,
  52253. 24,
  52254. 24,
  52255. 24,
  52256. 24,
  52257. 24,
  52258. 24,
  52259. 24,
  52260. 24,
  52261. 24,
  52262. 24,
  52263. 24,
  52264. 24,
  52265. 24,
  52266. 24,
  52267. 24,
  52268. 24,
  52269. 24,
  52270. 24,
  52271. 24,
  52272. 24,
  52273. 24,
  52274. 24,
  52275. 24,
  52276. 24,
  52277. 24,
  52278. 24,
  52279. 24,
  52280. 23,
  52281. 24,
  52282. 24,
  52283. 24,
  52284. 24,
  52285. 24,
  52286. 24,
  52287. 24,
  52288. 24,
  52289. 24,
  52290. 24,
  52291. 24,
  52292. 24,
  52293. 24,
  52294. 24,
  52295. 24,
  52296. 24,
  52297. 24,
  52298. 24,
  52299. 24,
  52300. 24,
  52301. 24,
  52302. 24,
  52303. 24,
  52304. 24,
  52305. 24,
  52306. 24,
  52307. 24,
  52308. 23,
  52309. 24,
  52310. 24,
  52311. 24,
  52312. 24,
  52313. 24,
  52314. 24,
  52315. 24,
  52316. 24,
  52317. 24,
  52318. 24,
  52319. 24,
  52320. 24,
  52321. 24,
  52322. 24,
  52323. 24,
  52324. 24,
  52325. 24,
  52326. 24,
  52327. 24,
  52328. 24,
  52329. 24,
  52330. 24,
  52331. 24,
  52332. 24,
  52333. 24,
  52334. 24,
  52335. 24,
  52336. 23,
  52337. 24,
  52338. 24,
  52339. 24,
  52340. 24,
  52341. 24,
  52342. 24,
  52343. 24,
  52344. 24,
  52345. 24,
  52346. 24,
  52347. 24,
  52348. 24,
  52349. 24,
  52350. 24,
  52351. 24,
  52352. 24,
  52353. 24,
  52354. 24,
  52355. 24,
  52356. 24,
  52357. 24,
  52358. 24,
  52359. 24,
  52360. 24,
  52361. 24,
  52362. 24,
  52363. 24,
  52364. 23,
  52365. 24,
  52366. 24,
  52367. 24,
  52368. 24,
  52369. 24,
  52370. 24,
  52371. 24,
  52372. 24,
  52373. 24,
  52374. 24,
  52375. 24,
  52376. 24,
  52377. 24,
  52378. 24,
  52379. 24,
  52380. 24,
  52381. 24,
  52382. 24,
  52383. 24,
  52384. 24,
  52385. 24,
  52386. 24,
  52387. 24,
  52388. 24,
  52389. 24,
  52390. 24,
  52391. 24,
  52392. 23,
  52393. 24,
  52394. 24,
  52395. 24,
  52396. 24,
  52397. 24,
  52398. 24,
  52399. 24,
  52400. 24,
  52401. 24,
  52402. 24,
  52403. 24,
  52404. 24,
  52405. 24,
  52406. 24,
  52407. 24,
  52408. 24,
  52409. 24,
  52410. 24,
  52411. 24,
  52412. 24,
  52413. 24,
  52414. 24,
  52415. 24,
  52416. 24,
  52417. 24,
  52418. 24,
  52419. 24,
  52420. 23,
  52421. 24,
  52422. 24,
  52423. 24,
  52424. 24,
  52425. 24,
  52426. 24,
  52427. 24,
  52428. 24,
  52429. 24,
  52430. 24,
  52431. 24,
  52432. 24,
  52433. 24,
  52434. 24,
  52435. 24,
  52436. 24,
  52437. 24,
  52438. 24,
  52439. 24,
  52440. 24,
  52441. 24,
  52442. 24,
  52443. 24,
  52444. 24,
  52445. 24,
  52446. 24,
  52447. 24,
  52448. 23,
  52449. 24,
  52450. 24,
  52451. 24,
  52452. 24,
  52453. 24,
  52454. 24,
  52455. 24,
  52456. 24,
  52457. 24,
  52458. 24,
  52459. 24,
  52460. 24,
  52461. 24,
  52462. 24,
  52463. 24,
  52464. 24,
  52465. 24,
  52466. 24,
  52467. 24,
  52468. 24,
  52469. 24,
  52470. 24,
  52471. 24,
  52472. 24,
  52473. 24,
  52474. 24,
  52475. 24,
  52476. 23,
  52477. 24,
  52478. 24,
  52479. 24,
  52480. 24,
  52481. 24,
  52482. 24,
  52483. 24,
  52484. 24,
  52485. 24,
  52486. 24,
  52487. 24,
  52488. 24,
  52489. 24,
  52490. 24,
  52491. 24,
  52492. 24,
  52493. 24,
  52494. 24,
  52495. 24,
  52496. 24,
  52497. 24,
  52498. 24,
  52499. 24,
  52500. 24,
  52501. 24,
  52502. 24,
  52503. 24,
  52504. 23,
  52505. 24,
  52506. 24,
  52507. 24,
  52508. 24,
  52509. 24,
  52510. 24,
  52511. 24,
  52512. 24,
  52513. 24,
  52514. 24,
  52515. 24,
  52516. 24,
  52517. 24,
  52518. 24,
  52519. 24,
  52520. 24,
  52521. 24,
  52522. 24,
  52523. 24,
  52524. 24,
  52525. 24,
  52526. 24,
  52527. 24,
  52528. 24,
  52529. 24,
  52530. 24,
  52531. 24,
  52532. 23,
  52533. 24,
  52534. 24,
  52535. 24,
  52536. 24,
  52537. 24,
  52538. 24,
  52539. 24,
  52540. 24,
  52541. 24,
  52542. 24,
  52543. 24,
  52544. 24,
  52545. 24,
  52546. 24,
  52547. 24,
  52548. 24,
  52549. 24,
  52550. 24,
  52551. 24,
  52552. 24,
  52553. 24,
  52554. 24,
  52555. 24,
  52556. 24,
  52557. 24,
  52558. 24,
  52559. 24,
  52560. 23,
  52561. 24,
  52562. 24,
  52563. 24,
  52564. 24,
  52565. 24,
  52566. 24,
  52567. 24,
  52568. 24,
  52569. 24,
  52570. 24,
  52571. 24,
  52572. 24,
  52573. 24,
  52574. 24,
  52575. 24,
  52576. 24,
  52577. 24,
  52578. 24,
  52579. 24,
  52580. 24,
  52581. 24,
  52582. 24,
  52583. 24,
  52584. 24,
  52585. 24,
  52586. 24,
  52587. 24,
  52588. 23,
  52589. 24,
  52590. 24,
  52591. 24,
  52592. 24,
  52593. 24,
  52594. 24,
  52595. 24,
  52596. 24,
  52597. 24,
  52598. 24,
  52599. 24,
  52600. 24,
  52601. 24,
  52602. 24,
  52603. 24,
  52604. 24,
  52605. 24,
  52606. 24,
  52607. 24,
  52608. 24,
  52609. 24,
  52610. 24,
  52611. 24,
  52612. 24,
  52613. 24,
  52614. 24,
  52615. 24,
  52616. 23,
  52617. 24,
  52618. 24,
  52619. 24,
  52620. 24,
  52621. 24,
  52622. 24,
  52623. 24,
  52624. 24,
  52625. 24,
  52626. 24,
  52627. 24,
  52628. 24,
  52629. 24,
  52630. 24,
  52631. 24,
  52632. 24,
  52633. 24,
  52634. 24,
  52635. 24,
  52636. 24,
  52637. 24,
  52638. 24,
  52639. 24,
  52640. 24,
  52641. 24,
  52642. 24,
  52643. 24,
  52644. 23,
  52645. 24,
  52646. 24,
  52647. 24,
  52648. 24,
  52649. 24,
  52650. 24,
  52651. 24,
  52652. 24,
  52653. 24,
  52654. 24,
  52655. 24,
  52656. 24,
  52657. 24,
  52658. 24,
  52659. 24,
  52660. 24,
  52661. 24,
  52662. 24,
  52663. 24,
  52664. 24,
  52665. 24,
  52666. 24,
  52667. 24,
  52668. 24,
  52669. 24,
  52670. 24,
  52671. 24,
  52672. 23,
  52673. 24,
  52674. 24,
  52675. 24,
  52676. 24,
  52677. 24,
  52678. 24,
  52679. 24,
  52680. 24,
  52681. 24,
  52682. 24,
  52683. 24,
  52684. 24,
  52685. 24,
  52686. 24,
  52687. 24,
  52688. 24,
  52689. 24,
  52690. 24,
  52691. 24,
  52692. 24,
  52693. 24,
  52694. 24,
  52695. 24,
  52696. 24,
  52697. 24,
  52698. 24,
  52699. 24,
  52700. 23,
  52701. 24,
  52702. 24,
  52703. 24,
  52704. 24,
  52705. 24,
  52706. 24,
  52707. 24,
  52708. 24,
  52709. 24,
  52710. 24,
  52711. 24,
  52712. 24,
  52713. 24,
  52714. 24,
  52715. 24,
  52716. 24,
  52717. 24,
  52718. 24,
  52719. 24,
  52720. 24,
  52721. 24,
  52722. 24,
  52723. 24,
  52724. 24,
  52725. 24,
  52726. 24,
  52727. 24,
  52728. 23,
  52729. 24,
  52730. 24,
  52731. 24,
  52732. 24,
  52733. 24,
  52734. 24,
  52735. 24,
  52736. 24,
  52737. 24,
  52738. 24,
  52739. 24,
  52740. 24,
  52741. 24,
  52742. 24,
  52743. 24,
  52744. 24,
  52745. 24,
  52746. 24,
  52747. 24,
  52748. 24,
  52749. 24,
  52750. 24,
  52751. 24,
  52752. 24,
  52753. 24,
  52754. 24,
  52755. 24,
  52756. 23,
  52757. 24,
  52758. 24,
  52759. 24,
  52760. 24,
  52761. 24,
  52762. 24,
  52763. 24,
  52764. 24,
  52765. 24,
  52766. 24,
  52767. 24,
  52768. 24,
  52769. 24,
  52770. 24,
  52771. 24,
  52772. 24,
  52773. 24,
  52774. 24,
  52775. 24,
  52776. 24,
  52777. 24,
  52778. 24,
  52779. 24,
  52780. 24,
  52781. 24,
  52782. 24,
  52783. 24,
  52784. 23,
  52785. 24,
  52786. 24,
  52787. 24,
  52788. 24,
  52789. 24,
  52790. 24,
  52791. 24,
  52792. 24,
  52793. 24,
  52794. 24,
  52795. 24,
  52796. 24,
  52797. 24,
  52798. 24,
  52799. 24,
  52800. 24,
  52801. 24,
  52802. 24,
  52803. 24,
  52804. 24,
  52805. 24,
  52806. 24,
  52807. 24,
  52808. 24,
  52809. 24,
  52810. 24,
  52811. 24,
  52812. 23,
  52813. 24,
  52814. 24,
  52815. 24,
  52816. 24,
  52817. 24,
  52818. 24,
  52819. 24,
  52820. 24,
  52821. 24,
  52822. 24,
  52823. 24,
  52824. 24,
  52825. 24,
  52826. 24,
  52827. 24,
  52828. 24,
  52829. 24,
  52830. 24,
  52831. 24,
  52832. 24,
  52833. 24,
  52834. 24,
  52835. 24,
  52836. 24,
  52837. 24,
  52838. 24,
  52839. 24,
  52840. 23,
  52841. 24,
  52842. 24,
  52843. 24,
  52844. 24,
  52845. 24,
  52846. 24,
  52847. 24,
  52848. 24,
  52849. 24,
  52850. 24,
  52851. 24,
  52852. 24,
  52853. 24,
  52854. 24,
  52855. 24,
  52856. 24,
  52857. 24,
  52858. 24,
  52859. 24,
  52860. 24,
  52861. 24,
  52862. 24,
  52863. 24,
  52864. 24,
  52865. 24,
  52866. 24,
  52867. 24,
  52868. 23,
  52869. 24,
  52870. 24,
  52871. 24,
  52872. 24,
  52873. 24,
  52874. 24,
  52875. 24,
  52876. 24,
  52877. 24,
  52878. 24,
  52879. 24,
  52880. 24,
  52881. 24,
  52882. 24,
  52883. 24,
  52884. 24,
  52885. 24,
  52886. 24,
  52887. 24,
  52888. 24,
  52889. 24,
  52890. 24,
  52891. 24,
  52892. 24,
  52893. 24,
  52894. 24,
  52895. 24,
  52896. 23,
  52897. 24,
  52898. 24,
  52899. 24,
  52900. 24,
  52901. 24,
  52902. 24,
  52903. 24,
  52904. 24,
  52905. 24,
  52906. 24,
  52907. 24,
  52908. 24,
  52909. 24,
  52910. 24,
  52911. 24,
  52912. 24,
  52913. 24,
  52914. 24,
  52915. 24,
  52916. 24,
  52917. 24,
  52918. 24,
  52919. 24,
  52920. 24,
  52921. 24,
  52922. 24,
  52923. 24,
  52924. 23,
  52925. 24,
  52926. 24,
  52927. 24,
  52928. 24,
  52929. 24,
  52930. 24,
  52931. 24,
  52932. 24,
  52933. 24,
  52934. 24,
  52935. 24,
  52936. 24,
  52937. 24,
  52938. 24,
  52939. 24,
  52940. 24,
  52941. 24,
  52942. 24,
  52943. 24,
  52944. 24,
  52945. 24,
  52946. 24,
  52947. 24,
  52948. 24,
  52949. 24,
  52950. 24,
  52951. 24,
  52952. 23,
  52953. 24,
  52954. 24,
  52955. 24,
  52956. 24,
  52957. 24,
  52958. 24,
  52959. 24,
  52960. 24,
  52961. 24,
  52962. 24,
  52963. 24,
  52964. 24,
  52965. 24,
  52966. 24,
  52967. 24,
  52968. 24,
  52969. 24,
  52970. 24,
  52971. 24,
  52972. 24,
  52973. 24,
  52974. 24,
  52975. 24,
  52976. 24,
  52977. 24,
  52978. 24,
  52979. 24,
  52980. 23,
  52981. 24,
  52982. 24,
  52983. 24,
  52984. 24,
  52985. 24,
  52986. 24,
  52987. 24,
  52988. 24,
  52989. 24,
  52990. 24,
  52991. 24,
  52992. 24,
  52993. 24,
  52994. 24,
  52995. 24,
  52996. 24,
  52997. 24,
  52998. 24,
  52999. 24,
  53000. 24,
  53001. 24,
  53002. 24,
  53003. 24,
  53004. 24,
  53005. 24,
  53006. 24,
  53007. 24,
  53008. 23,
  53009. 24,
  53010. 24,
  53011. 24,
  53012. 24,
  53013. 24,
  53014. 24,
  53015. 24,
  53016. 24,
  53017. 24,
  53018. 24,
  53019. 24,
  53020. 24,
  53021. 24,
  53022. 24,
  53023. 24,
  53024. 24,
  53025. 24,
  53026. 24,
  53027. 24,
  53028. 24,
  53029. 24,
  53030. 24,
  53031. 24,
  53032. 24,
  53033. 24,
  53034. 24,
  53035. 24,
  53036. 23,
  53037. 24,
  53038. 24,
  53039. 24,
  53040. 24,
  53041. 24,
  53042. 24,
  53043. 24,
  53044. 24,
  53045. 24,
  53046. 24,
  53047. 24,
  53048. 24,
  53049. 24,
  53050. 24,
  53051. 24,
  53052. 24,
  53053. 24,
  53054. 24,
  53055. 24,
  53056. 24,
  53057. 24,
  53058. 24,
  53059. 24,
  53060. 24,
  53061. 24,
  53062. 24,
  53063. 24,
  53064. 23,
  53065. 24,
  53066. 24,
  53067. 24,
  53068. 24,
  53069. 24,
  53070. 24,
  53071. 24,
  53072. 24,
  53073. 24,
  53074. 24,
  53075. 24,
  53076. 24,
  53077. 24,
  53078. 24,
  53079. 24,
  53080. 24,
  53081. 24,
  53082. 24,
  53083. 24,
  53084. 24,
  53085. 24,
  53086. 24,
  53087. 24,
  53088. 24,
  53089. 24,
  53090. 24,
  53091. 24,
  53092. 23,
  53093. 24,
  53094. 24,
  53095. 24,
  53096. 24,
  53097. 24,
  53098. 24,
  53099. 24,
  53100. 24,
  53101. 24,
  53102. 24,
  53103. 24,
  53104. 24,
  53105. 24,
  53106. 24,
  53107. 24,
  53108. 24,
  53109. 24,
  53110. 24,
  53111. 24,
  53112. 24,
  53113. 24,
  53114. 24,
  53115. 24,
  53116. 24,
  53117. 24,
  53118. 24,
  53119. 24,
  53120. 23,
  53121. 24,
  53122. 24,
  53123. 24,
  53124. 24,
  53125. 24,
  53126. 24,
  53127. 24,
  53128. 24,
  53129. 24,
  53130. 24,
  53131. 24,
  53132. 24,
  53133. 24,
  53134. 24,
  53135. 24,
  53136. 24,
  53137. 24,
  53138. 24,
  53139. 24,
  53140. 24,
  53141. 24,
  53142. 24,
  53143. 24,
  53144. 24,
  53145. 24,
  53146. 24,
  53147. 24,
  53148. 23,
  53149. 24,
  53150. 24,
  53151. 24,
  53152. 24,
  53153. 24,
  53154. 24,
  53155. 24,
  53156. 24,
  53157. 24,
  53158. 24,
  53159. 24,
  53160. 24,
  53161. 24,
  53162. 24,
  53163. 24,
  53164. 24,
  53165. 24,
  53166. 24,
  53167. 24,
  53168. 24,
  53169. 24,
  53170. 24,
  53171. 24,
  53172. 24,
  53173. 24,
  53174. 24,
  53175. 24,
  53176. 23,
  53177. 24,
  53178. 24,
  53179. 24,
  53180. 24,
  53181. 24,
  53182. 24,
  53183. 24,
  53184. 24,
  53185. 24,
  53186. 24,
  53187. 24,
  53188. 24,
  53189. 24,
  53190. 24,
  53191. 24,
  53192. 24,
  53193. 24,
  53194. 24,
  53195. 24,
  53196. 24,
  53197. 24,
  53198. 24,
  53199. 24,
  53200. 24,
  53201. 24,
  53202. 24,
  53203. 24,
  53204. 23,
  53205. 24,
  53206. 24,
  53207. 24,
  53208. 24,
  53209. 24,
  53210. 24,
  53211. 24,
  53212. 24,
  53213. 24,
  53214. 24,
  53215. 24,
  53216. 24,
  53217. 24,
  53218. 24,
  53219. 24,
  53220. 24,
  53221. 24,
  53222. 24,
  53223. 24,
  53224. 24,
  53225. 24,
  53226. 24,
  53227. 24,
  53228. 24,
  53229. 24,
  53230. 24,
  53231. 24,
  53232. 23,
  53233. 24,
  53234. 24,
  53235. 24,
  53236. 24,
  53237. 24,
  53238. 24,
  53239. 24,
  53240. 24,
  53241. 24,
  53242. 24,
  53243. 24,
  53244. 24,
  53245. 24,
  53246. 24,
  53247. 24,
  53248. 24,
  53249. 24,
  53250. 24,
  53251. 24,
  53252. 24,
  53253. 24,
  53254. 24,
  53255. 24,
  53256. 24,
  53257. 24,
  53258. 24,
  53259. 24,
  53260. 23,
  53261. 24,
  53262. 24,
  53263. 24,
  53264. 24,
  53265. 24,
  53266. 24,
  53267. 24,
  53268. 24,
  53269. 24,
  53270. 24,
  53271. 24,
  53272. 24,
  53273. 24,
  53274. 24,
  53275. 24,
  53276. 24,
  53277. 24,
  53278. 24,
  53279. 24,
  53280. 24,
  53281. 24,
  53282. 24,
  53283. 24,
  53284. 24,
  53285. 24,
  53286. 24,
  53287. 24,
  53288. 23,
  53289. 24,
  53290. 24,
  53291. 24,
  53292. 24,
  53293. 24,
  53294. 24,
  53295. 24,
  53296. 24,
  53297. 24,
  53298. 24,
  53299. 24,
  53300. 24,
  53301. 24,
  53302. 24,
  53303. 24,
  53304. 24,
  53305. 24,
  53306. 24,
  53307. 24,
  53308. 24,
  53309. 24,
  53310. 24,
  53311. 24,
  53312. 24,
  53313. 24,
  53314. 24,
  53315. 24,
  53316. 23,
  53317. 24,
  53318. 24,
  53319. 24,
  53320. 24,
  53321. 24,
  53322. 24,
  53323. 24,
  53324. 24,
  53325. 24,
  53326. 24,
  53327. 24,
  53328. 24,
  53329. 24,
  53330. 24,
  53331. 24,
  53332. 24,
  53333. 24,
  53334. 24,
  53335. 24,
  53336. 24,
  53337. 24,
  53338. 24,
  53339. 24,
  53340. 24,
  53341. 24,
  53342. 24,
  53343. 24,
  53344. 23,
  53345. 24,
  53346. 24,
  53347. 24,
  53348. 24,
  53349. 24,
  53350. 24,
  53351. 24,
  53352. 24,
  53353. 24,
  53354. 24,
  53355. 24,
  53356. 24,
  53357. 24,
  53358. 24,
  53359. 24,
  53360. 24,
  53361. 24,
  53362. 24,
  53363. 24,
  53364. 24,
  53365. 24,
  53366. 24,
  53367. 24,
  53368. 24,
  53369. 24,
  53370. 24,
  53371. 24,
  53372. 23,
  53373. 24,
  53374. 24,
  53375. 24,
  53376. 24,
  53377. 24,
  53378. 24,
  53379. 24,
  53380. 24,
  53381. 24,
  53382. 24,
  53383. 24,
  53384. 24,
  53385. 24,
  53386. 24,
  53387. 24,
  53388. 24,
  53389. 24,
  53390. 24,
  53391. 24,
  53392. 24,
  53393. 24,
  53394. 24,
  53395. 24,
  53396. 24,
  53397. 24,
  53398. 24,
  53399. 24,
  53400. 23,
  53401. 24,
  53402. 24,
  53403. 24,
  53404. 24,
  53405. 24,
  53406. 24,
  53407. 24,
  53408. 24,
  53409. 24,
  53410. 24,
  53411. 24,
  53412. 24,
  53413. 24,
  53414. 24,
  53415. 24,
  53416. 24,
  53417. 24,
  53418. 24,
  53419. 24,
  53420. 24,
  53421. 24,
  53422. 24,
  53423. 24,
  53424. 24,
  53425. 24,
  53426. 24,
  53427. 24,
  53428. 23,
  53429. 24,
  53430. 24,
  53431. 24,
  53432. 24,
  53433. 24,
  53434. 24,
  53435. 24,
  53436. 24,
  53437. 24,
  53438. 24,
  53439. 24,
  53440. 24,
  53441. 24,
  53442. 24,
  53443. 24,
  53444. 24,
  53445. 24,
  53446. 24,
  53447. 24,
  53448. 24,
  53449. 24,
  53450. 24,
  53451. 24,
  53452. 24,
  53453. 24,
  53454. 24,
  53455. 24,
  53456. 23,
  53457. 24,
  53458. 24,
  53459. 24,
  53460. 24,
  53461. 24,
  53462. 24,
  53463. 24,
  53464. 24,
  53465. 24,
  53466. 24,
  53467. 24,
  53468. 24,
  53469. 24,
  53470. 24,
  53471. 24,
  53472. 24,
  53473. 24,
  53474. 24,
  53475. 24,
  53476. 24,
  53477. 24,
  53478. 24,
  53479. 24,
  53480. 24,
  53481. 24,
  53482. 24,
  53483. 24,
  53484. 23,
  53485. 24,
  53486. 24,
  53487. 24,
  53488. 24,
  53489. 24,
  53490. 24,
  53491. 24,
  53492. 24,
  53493. 24,
  53494. 24,
  53495. 24,
  53496. 24,
  53497. 24,
  53498. 24,
  53499. 24,
  53500. 24,
  53501. 24,
  53502. 24,
  53503. 24,
  53504. 24,
  53505. 24,
  53506. 24,
  53507. 24,
  53508. 24,
  53509. 24,
  53510. 24,
  53511. 24,
  53512. 23,
  53513. 24,
  53514. 24,
  53515. 24,
  53516. 24,
  53517. 24,
  53518. 24,
  53519. 24,
  53520. 24,
  53521. 24,
  53522. 24,
  53523. 24,
  53524. 24,
  53525. 24,
  53526. 24,
  53527. 24,
  53528. 24,
  53529. 24,
  53530. 24,
  53531. 24,
  53532. 24,
  53533. 24,
  53534. 24,
  53535. 24,
  53536. 24,
  53537. 24,
  53538. 24,
  53539. 24,
  53540. 23,
  53541. 24,
  53542. 24,
  53543. 24,
  53544. 24,
  53545. 24,
  53546. 24,
  53547. 24,
  53548. 24,
  53549. 24,
  53550. 24,
  53551. 24,
  53552. 24,
  53553. 24,
  53554. 24,
  53555. 24,
  53556. 24,
  53557. 24,
  53558. 24,
  53559. 24,
  53560. 24,
  53561. 24,
  53562. 24,
  53563. 24,
  53564. 24,
  53565. 24,
  53566. 24,
  53567. 24,
  53568. 23,
  53569. 24,
  53570. 24,
  53571. 24,
  53572. 24,
  53573. 24,
  53574. 24,
  53575. 24,
  53576. 24,
  53577. 24,
  53578. 24,
  53579. 24,
  53580. 24,
  53581. 24,
  53582. 24,
  53583. 24,
  53584. 24,
  53585. 24,
  53586. 24,
  53587. 24,
  53588. 24,
  53589. 24,
  53590. 24,
  53591. 24,
  53592. 24,
  53593. 24,
  53594. 24,
  53595. 24,
  53596. 23,
  53597. 24,
  53598. 24,
  53599. 24,
  53600. 24,
  53601. 24,
  53602. 24,
  53603. 24,
  53604. 24,
  53605. 24,
  53606. 24,
  53607. 24,
  53608. 24,
  53609. 24,
  53610. 24,
  53611. 24,
  53612. 24,
  53613. 24,
  53614. 24,
  53615. 24,
  53616. 24,
  53617. 24,
  53618. 24,
  53619. 24,
  53620. 24,
  53621. 24,
  53622. 24,
  53623. 24,
  53624. 23,
  53625. 24,
  53626. 24,
  53627. 24,
  53628. 24,
  53629. 24,
  53630. 24,
  53631. 24,
  53632. 24,
  53633. 24,
  53634. 24,
  53635. 24,
  53636. 24,
  53637. 24,
  53638. 24,
  53639. 24,
  53640. 24,
  53641. 24,
  53642. 24,
  53643. 24,
  53644. 24,
  53645. 24,
  53646. 24,
  53647. 24,
  53648. 24,
  53649. 24,
  53650. 24,
  53651. 24,
  53652. 23,
  53653. 24,
  53654. 24,
  53655. 24,
  53656. 24,
  53657. 24,
  53658. 24,
  53659. 24,
  53660. 24,
  53661. 24,
  53662. 24,
  53663. 24,
  53664. 24,
  53665. 24,
  53666. 24,
  53667. 24,
  53668. 24,
  53669. 24,
  53670. 24,
  53671. 24,
  53672. 24,
  53673. 24,
  53674. 24,
  53675. 24,
  53676. 24,
  53677. 24,
  53678. 24,
  53679. 24,
  53680. 23,
  53681. 24,
  53682. 24,
  53683. 24,
  53684. 24,
  53685. 24,
  53686. 24,
  53687. 24,
  53688. 24,
  53689. 24,
  53690. 24,
  53691. 24,
  53692. 24,
  53693. 24,
  53694. 24,
  53695. 24,
  53696. 24,
  53697. 24,
  53698. 24,
  53699. 24,
  53700. 24,
  53701. 24,
  53702. 24,
  53703. 24,
  53704. 24,
  53705. 24,
  53706. 24,
  53707. 24,
  53708. 23,
  53709. 24,
  53710. 24,
  53711. 24,
  53712. 24,
  53713. 24,
  53714. 24,
  53715. 24,
  53716. 24,
  53717. 24,
  53718. 24,
  53719. 24,
  53720. 24,
  53721. 24,
  53722. 24,
  53723. 24,
  53724. 24,
  53725. 24,
  53726. 24,
  53727. 24,
  53728. 24,
  53729. 24,
  53730. 24,
  53731. 24,
  53732. 24,
  53733. 24,
  53734. 24,
  53735. 24,
  53736. 23,
  53737. 24,
  53738. 24,
  53739. 24,
  53740. 24,
  53741. 24,
  53742. 24,
  53743. 24,
  53744. 24,
  53745. 24,
  53746. 24,
  53747. 24,
  53748. 24,
  53749. 24,
  53750. 24,
  53751. 24,
  53752. 24,
  53753. 24,
  53754. 24,
  53755. 24,
  53756. 24,
  53757. 24,
  53758. 24,
  53759. 24,
  53760. 24,
  53761. 24,
  53762. 24,
  53763. 24,
  53764. 23,
  53765. 24,
  53766. 24,
  53767. 24,
  53768. 24,
  53769. 24,
  53770. 24,
  53771. 24,
  53772. 24,
  53773. 24,
  53774. 24,
  53775. 24,
  53776. 24,
  53777. 24,
  53778. 24,
  53779. 24,
  53780. 24,
  53781. 24,
  53782. 24,
  53783. 24,
  53784. 24,
  53785. 24,
  53786. 24,
  53787. 24,
  53788. 24,
  53789. 24,
  53790. 24,
  53791. 24,
  53792. 23,
  53793. 24,
  53794. 24,
  53795. 24,
  53796. 24,
  53797. 24,
  53798. 24,
  53799. 24,
  53800. 24,
  53801. 24,
  53802. 24,
  53803. 24,
  53804. 24,
  53805. 24,
  53806. 24,
  53807. 24,
  53808. 24,
  53809. 24,
  53810. 24,
  53811. 24,
  53812. 24,
  53813. 24,
  53814. 24,
  53815. 24,
  53816. 24,
  53817. 24,
  53818. 24,
  53819. 24,
  53820. 23,
  53821. 24,
  53822. 24,
  53823. 24,
  53824. 24,
  53825. 24,
  53826. 24,
  53827. 24,
  53828. 24,
  53829. 24,
  53830. 24,
  53831. 24,
  53832. 24,
  53833. 24,
  53834. 24,
  53835. 24,
  53836. 24,
  53837. 24,
  53838. 24,
  53839. 24,
  53840. 24,
  53841. 24,
  53842. 24,
  53843. 24,
  53844. 24,
  53845. 24,
  53846. 24,
  53847. 24,
  53848. 23,
  53849. 24,
  53850. 24,
  53851. 24,
  53852. 24,
  53853. 24,
  53854. 24,
  53855. 24,
  53856. 24,
  53857. 24,
  53858. 24,
  53859. 24,
  53860. 24,
  53861. 24,
  53862. 24,
  53863. 24,
  53864. 24,
  53865. 24,
  53866. 24,
  53867. 24,
  53868. 24,
  53869. 24,
  53870. 24,
  53871. 24,
  53872. 24,
  53873. 24,
  53874. 24,
  53875. 24,
  53876. 23,
  53877. 24,
  53878. 24,
  53879. 24,
  53880. 24,
  53881. 24,
  53882. 24,
  53883. 24,
  53884. 24,
  53885. 24,
  53886. 24,
  53887. 24,
  53888. 24,
  53889. 24,
  53890. 24,
  53891. 24,
  53892. 24,
  53893. 24,
  53894. 24,
  53895. 24,
  53896. 24,
  53897. 24,
  53898. 24,
  53899. 24,
  53900. 24,
  53901. 24,
  53902. 24,
  53903. 24,
  53904. 23,
  53905. 24,
  53906. 24,
  53907. 24,
  53908. 24,
  53909. 24,
  53910. 24,
  53911. 24,
  53912. 24,
  53913. 24,
  53914. 24,
  53915. 24,
  53916. 24,
  53917. 24,
  53918. 24,
  53919. 24,
  53920. 24,
  53921. 24,
  53922. 24,
  53923. 24,
  53924. 24,
  53925. 24,
  53926. 24,
  53927. 24,
  53928. 24,
  53929. 24,
  53930. 24,
  53931. 24,
  53932. 23,
  53933. 24,
  53934. 24,
  53935. 24,
  53936. 24,
  53937. 24,
  53938. 24,
  53939. 24,
  53940. 24,
  53941. 24,
  53942. 24,
  53943. 24,
  53944. 24,
  53945. 24,
  53946. 24,
  53947. 24,
  53948. 24,
  53949. 24,
  53950. 24,
  53951. 24,
  53952. 24,
  53953. 24,
  53954. 24,
  53955. 24,
  53956. 24,
  53957. 24,
  53958. 24,
  53959. 24,
  53960. 23,
  53961. 24,
  53962. 24,
  53963. 24,
  53964. 24,
  53965. 24,
  53966. 24,
  53967. 24,
  53968. 24,
  53969. 24,
  53970. 24,
  53971. 24,
  53972. 24,
  53973. 24,
  53974. 24,
  53975. 24,
  53976. 24,
  53977. 24,
  53978. 24,
  53979. 24,
  53980. 24,
  53981. 24,
  53982. 24,
  53983. 24,
  53984. 24,
  53985. 24,
  53986. 24,
  53987. 24,
  53988. 23,
  53989. 24,
  53990. 24,
  53991. 24,
  53992. 24,
  53993. 24,
  53994. 24,
  53995. 24,
  53996. 24,
  53997. 24,
  53998. 24,
  53999. 24,
  54000. 24,
  54001. 24,
  54002. 24,
  54003. 24,
  54004. 24,
  54005. 24,
  54006. 24,
  54007. 24,
  54008. 24,
  54009. 24,
  54010. 24,
  54011. 24,
  54012. 24,
  54013. 24,
  54014. 24,
  54015. 24,
  54016. 23,
  54017. 24,
  54018. 24,
  54019. 24,
  54020. 24,
  54021. 24,
  54022. 24,
  54023. 24,
  54024. 24,
  54025. 24,
  54026. 24,
  54027. 24,
  54028. 24,
  54029. 24,
  54030. 24,
  54031. 24,
  54032. 24,
  54033. 24,
  54034. 24,
  54035. 24,
  54036. 24,
  54037. 24,
  54038. 24,
  54039. 24,
  54040. 24,
  54041. 24,
  54042. 24,
  54043. 24,
  54044. 23,
  54045. 24,
  54046. 24,
  54047. 24,
  54048. 24,
  54049. 24,
  54050. 24,
  54051. 24,
  54052. 24,
  54053. 24,
  54054. 24,
  54055. 24,
  54056. 24,
  54057. 24,
  54058. 24,
  54059. 24,
  54060. 24,
  54061. 24,
  54062. 24,
  54063. 24,
  54064. 24,
  54065. 24,
  54066. 24,
  54067. 24,
  54068. 24,
  54069. 24,
  54070. 24,
  54071. 24,
  54072. 23,
  54073. 24,
  54074. 24,
  54075. 24,
  54076. 24,
  54077. 24,
  54078. 24,
  54079. 24,
  54080. 24,
  54081. 24,
  54082. 24,
  54083. 24,
  54084. 24,
  54085. 24,
  54086. 24,
  54087. 24,
  54088. 24,
  54089. 24,
  54090. 24,
  54091. 24,
  54092. 24,
  54093. 24,
  54094. 24,
  54095. 24,
  54096. 24,
  54097. 24,
  54098. 24,
  54099. 24,
  54100. 23,
  54101. 24,
  54102. 24,
  54103. 24,
  54104. 24,
  54105. 24,
  54106. 24,
  54107. 24,
  54108. 24,
  54109. 24,
  54110. 24,
  54111. 24,
  54112. 24,
  54113. 24,
  54114. 24,
  54115. 24,
  54116. 24,
  54117. 24,
  54118. 24,
  54119. 24,
  54120. 24,
  54121. 24,
  54122. 24,
  54123. 24,
  54124. 24,
  54125. 24,
  54126. 24,
  54127. 24,
  54128. 23,
  54129. 24,
  54130. 24,
  54131. 24,
  54132. 24,
  54133. 24,
  54134. 24,
  54135. 24,
  54136. 24,
  54137. 24,
  54138. 24,
  54139. 24,
  54140. 24,
  54141. 24,
  54142. 24,
  54143. 24,
  54144. 24,
  54145. 24,
  54146. 24,
  54147. 24,
  54148. 24,
  54149. 24,
  54150. 24,
  54151. 24,
  54152. 24,
  54153. 24,
  54154. 24,
  54155. 24,
  54156. 23,
  54157. 24,
  54158. 24,
  54159. 24,
  54160. 24,
  54161. 24,
  54162. 24,
  54163. 24,
  54164. 24,
  54165. 24,
  54166. 24,
  54167. 24,
  54168. 24,
  54169. 24,
  54170. 24,
  54171. 24,
  54172. 24,
  54173. 24,
  54174. 24,
  54175. 24,
  54176. 24,
  54177. 24,
  54178. 24,
  54179. 24,
  54180. 24,
  54181. 24,
  54182. 24,
  54183. 24,
  54184. 23,
  54185. 24,
  54186. 24,
  54187. 24,
  54188. 24,
  54189. 24,
  54190. 24,
  54191. 24,
  54192. 24,
  54193. 24,
  54194. 24,
  54195. 24,
  54196. 24,
  54197. 24,
  54198. 24,
  54199. 24,
  54200. 24,
  54201. 24,
  54202. 24,
  54203. 24,
  54204. 24,
  54205. 24,
  54206. 24,
  54207. 24,
  54208. 24,
  54209. 24,
  54210. 24,
  54211. 24,
  54212. 23,
  54213. 24,
  54214. 24,
  54215. 24,
  54216. 24,
  54217. 24,
  54218. 24,
  54219. 24,
  54220. 24,
  54221. 24,
  54222. 24,
  54223. 24,
  54224. 24,
  54225. 24,
  54226. 24,
  54227. 24,
  54228. 24,
  54229. 24,
  54230. 24,
  54231. 24,
  54232. 24,
  54233. 24,
  54234. 24,
  54235. 24,
  54236. 24,
  54237. 24,
  54238. 24,
  54239. 24,
  54240. 23,
  54241. 24,
  54242. 24,
  54243. 24,
  54244. 24,
  54245. 24,
  54246. 24,
  54247. 24,
  54248. 24,
  54249. 24,
  54250. 24,
  54251. 24,
  54252. 24,
  54253. 24,
  54254. 24,
  54255. 24,
  54256. 24,
  54257. 24,
  54258. 24,
  54259. 24,
  54260. 24,
  54261. 24,
  54262. 24,
  54263. 24,
  54264. 24,
  54265. 24,
  54266. 24,
  54267. 24,
  54268. 23,
  54269. 24,
  54270. 24,
  54271. 24,
  54272. 24,
  54273. 24,
  54274. 24,
  54275. 24,
  54276. 24,
  54277. 24,
  54278. 24,
  54279. 24,
  54280. 24,
  54281. 24,
  54282. 24,
  54283. 24,
  54284. 24,
  54285. 24,
  54286. 24,
  54287. 24,
  54288. 24,
  54289. 24,
  54290. 24,
  54291. 24,
  54292. 24,
  54293. 24,
  54294. 24,
  54295. 24,
  54296. 23,
  54297. 24,
  54298. 24,
  54299. 24,
  54300. 24,
  54301. 24,
  54302. 24,
  54303. 24,
  54304. 24,
  54305. 24,
  54306. 24,
  54307. 24,
  54308. 24,
  54309. 24,
  54310. 24,
  54311. 24,
  54312. 24,
  54313. 24,
  54314. 24,
  54315. 24,
  54316. 24,
  54317. 24,
  54318. 24,
  54319. 24,
  54320. 24,
  54321. 24,
  54322. 24,
  54323. 24,
  54324. 23,
  54325. 24,
  54326. 24,
  54327. 24,
  54328. 24,
  54329. 24,
  54330. 24,
  54331. 24,
  54332. 24,
  54333. 24,
  54334. 24,
  54335. 24,
  54336. 24,
  54337. 24,
  54338. 24,
  54339. 24,
  54340. 24,
  54341. 24,
  54342. 24,
  54343. 24,
  54344. 24,
  54345. 24,
  54346. 24,
  54347. 24,
  54348. 24,
  54349. 24,
  54350. 24,
  54351. 24,
  54352. 23,
  54353. 24,
  54354. 24,
  54355. 24,
  54356. 24,
  54357. 24,
  54358. 24,
  54359. 24,
  54360. 24,
  54361. 24,
  54362. 24,
  54363. 24,
  54364. 24,
  54365. 24,
  54366. 24,
  54367. 24,
  54368. 24,
  54369. 24,
  54370. 24,
  54371. 24,
  54372. 24,
  54373. 24,
  54374. 24,
  54375. 24,
  54376. 24,
  54377. 24,
  54378. 24,
  54379. 24,
  54380. 23,
  54381. 24,
  54382. 24,
  54383. 24,
  54384. 24,
  54385. 24,
  54386. 24,
  54387. 24,
  54388. 24,
  54389. 24,
  54390. 24,
  54391. 24,
  54392. 24,
  54393. 24,
  54394. 24,
  54395. 24,
  54396. 24,
  54397. 24,
  54398. 24,
  54399. 24,
  54400. 24,
  54401. 24,
  54402. 24,
  54403. 24,
  54404. 24,
  54405. 24,
  54406. 24,
  54407. 24,
  54408. 23,
  54409. 24,
  54410. 24,
  54411. 24,
  54412. 24,
  54413. 24,
  54414. 24,
  54415. 24,
  54416. 24,
  54417. 24,
  54418. 24,
  54419. 24,
  54420. 24,
  54421. 24,
  54422. 24,
  54423. 24,
  54424. 24,
  54425. 24,
  54426. 24,
  54427. 24,
  54428. 24,
  54429. 24,
  54430. 24,
  54431. 24,
  54432. 24,
  54433. 24,
  54434. 24,
  54435. 24,
  54436. 23,
  54437. 24,
  54438. 24,
  54439. 24,
  54440. 24,
  54441. 24,
  54442. 24,
  54443. 24,
  54444. 24,
  54445. 24,
  54446. 24,
  54447. 24,
  54448. 24,
  54449. 24,
  54450. 24,
  54451. 24,
  54452. 24,
  54453. 24,
  54454. 24,
  54455. 24,
  54456. 24,
  54457. 24,
  54458. 24,
  54459. 24,
  54460. 24,
  54461. 24,
  54462. 24,
  54463. 24,
  54464. 23,
  54465. 24,
  54466. 24,
  54467. 24,
  54468. 24,
  54469. 24,
  54470. 24,
  54471. 24,
  54472. 24,
  54473. 24,
  54474. 24,
  54475. 24,
  54476. 24,
  54477. 24,
  54478. 24,
  54479. 24,
  54480. 24,
  54481. 24,
  54482. 24,
  54483. 24,
  54484. 24,
  54485. 24,
  54486. 24,
  54487. 24,
  54488. 24,
  54489. 24,
  54490. 24,
  54491. 24,
  54492. 23,
  54493. 24,
  54494. 24,
  54495. 24,
  54496. 24,
  54497. 24,
  54498. 24,
  54499. 24,
  54500. 24,
  54501. 24,
  54502. 24,
  54503. 24,
  54504. 24,
  54505. 24,
  54506. 24,
  54507. 24,
  54508. 24,
  54509. 24,
  54510. 24,
  54511. 24,
  54512. 24,
  54513. 24,
  54514. 24,
  54515. 24,
  54516. 24,
  54517. 24,
  54518. 24,
  54519. 24,
  54520. 23,
  54521. 24,
  54522. 24,
  54523. 24,
  54524. 24,
  54525. 24,
  54526. 24,
  54527. 24,
  54528. 24,
  54529. 24,
  54530. 24,
  54531. 24,
  54532. 24,
  54533. 24,
  54534. 24,
  54535. 24,
  54536. 24,
  54537. 24,
  54538. 24,
  54539. 24,
  54540. 24,
  54541. 24,
  54542. 24,
  54543. 24,
  54544. 24,
  54545. 24,
  54546. 24,
  54547. 24,
  54548. 23,
  54549. 24,
  54550. 24,
  54551. 24,
  54552. 24,
  54553. 24,
  54554. 24,
  54555. 24,
  54556. 24,
  54557. 24,
  54558. 24,
  54559. 24,
  54560. 24,
  54561. 24,
  54562. 24,
  54563. 24,
  54564. 24,
  54565. 24,
  54566. 24,
  54567. 24,
  54568. 24,
  54569. 24,
  54570. 24,
  54571. 24,
  54572. 24,
  54573. 24,
  54574. 24,
  54575. 24,
  54576. 23,
  54577. 24,
  54578. 24,
  54579. 24,
  54580. 24,
  54581. 24,
  54582. 24,
  54583. 24,
  54584. 24,
  54585. 24,
  54586. 24,
  54587. 24,
  54588. 24,
  54589. 24,
  54590. 24,
  54591. 24,
  54592. 24,
  54593. 24,
  54594. 24,
  54595. 24,
  54596. 24,
  54597. 24,
  54598. 24,
  54599. 24,
  54600. 24,
  54601. 24,
  54602. 24,
  54603. 24,
  54604. 23,
  54605. 24,
  54606. 24,
  54607. 24,
  54608. 24,
  54609. 24,
  54610. 24,
  54611. 24,
  54612. 24,
  54613. 24,
  54614. 24,
  54615. 24,
  54616. 24,
  54617. 24,
  54618. 24,
  54619. 24,
  54620. 24,
  54621. 24,
  54622. 24,
  54623. 24,
  54624. 24,
  54625. 24,
  54626. 24,
  54627. 24,
  54628. 24,
  54629. 24,
  54630. 24,
  54631. 24,
  54632. 23,
  54633. 24,
  54634. 24,
  54635. 24,
  54636. 24,
  54637. 24,
  54638. 24,
  54639. 24,
  54640. 24,
  54641. 24,
  54642. 24,
  54643. 24,
  54644. 24,
  54645. 24,
  54646. 24,
  54647. 24,
  54648. 24,
  54649. 24,
  54650. 24,
  54651. 24,
  54652. 24,
  54653. 24,
  54654. 24,
  54655. 24,
  54656. 24,
  54657. 24,
  54658. 24,
  54659. 24,
  54660. 23,
  54661. 24,
  54662. 24,
  54663. 24,
  54664. 24,
  54665. 24,
  54666. 24,
  54667. 24,
  54668. 24,
  54669. 24,
  54670. 24,
  54671. 24,
  54672. 24,
  54673. 24,
  54674. 24,
  54675. 24,
  54676. 24,
  54677. 24,
  54678. 24,
  54679. 24,
  54680. 24,
  54681. 24,
  54682. 24,
  54683. 24,
  54684. 24,
  54685. 24,
  54686. 24,
  54687. 24,
  54688. 23,
  54689. 24,
  54690. 24,
  54691. 24,
  54692. 24,
  54693. 24,
  54694. 24,
  54695. 24,
  54696. 24,
  54697. 24,
  54698. 24,
  54699. 24,
  54700. 24,
  54701. 24,
  54702. 24,
  54703. 24,
  54704. 24,
  54705. 24,
  54706. 24,
  54707. 24,
  54708. 24,
  54709. 24,
  54710. 24,
  54711. 24,
  54712. 24,
  54713. 24,
  54714. 24,
  54715. 24,
  54716. 23,
  54717. 24,
  54718. 24,
  54719. 24,
  54720. 24,
  54721. 24,
  54722. 24,
  54723. 24,
  54724. 24,
  54725. 24,
  54726. 24,
  54727. 24,
  54728. 24,
  54729. 24,
  54730. 24,
  54731. 24,
  54732. 24,
  54733. 24,
  54734. 24,
  54735. 24,
  54736. 24,
  54737. 24,
  54738. 24,
  54739. 24,
  54740. 24,
  54741. 24,
  54742. 24,
  54743. 24,
  54744. 23,
  54745. 24,
  54746. 24,
  54747. 24,
  54748. 24,
  54749. 24,
  54750. 24,
  54751. 24,
  54752. 24,
  54753. 24,
  54754. 24,
  54755. 24,
  54756. 24,
  54757. 24,
  54758. 24,
  54759. 24,
  54760. 24,
  54761. 24,
  54762. 24,
  54763. 24,
  54764. 24,
  54765. 24,
  54766. 24,
  54767. 24,
  54768. 24,
  54769. 24,
  54770. 24,
  54771. 24,
  54772. 23,
  54773. 24,
  54774. 24,
  54775. 24,
  54776. 24,
  54777. 24,
  54778. 24,
  54779. 24,
  54780. 24,
  54781. 24,
  54782. 24,
  54783. 24,
  54784. 24,
  54785. 24,
  54786. 24,
  54787. 24,
  54788. 24,
  54789. 24,
  54790. 24,
  54791. 24,
  54792. 24,
  54793. 24,
  54794. 24,
  54795. 24,
  54796. 24,
  54797. 24,
  54798. 24,
  54799. 24,
  54800. 23,
  54801. 24,
  54802. 24,
  54803. 24,
  54804. 24,
  54805. 24,
  54806. 24,
  54807. 24,
  54808. 24,
  54809. 24,
  54810. 24,
  54811. 24,
  54812. 24,
  54813. 24,
  54814. 24,
  54815. 24,
  54816. 24,
  54817. 24,
  54818. 24,
  54819. 24,
  54820. 24,
  54821. 24,
  54822. 24,
  54823. 24,
  54824. 24,
  54825. 24,
  54826. 24,
  54827. 24,
  54828. 23,
  54829. 24,
  54830. 24,
  54831. 24,
  54832. 24,
  54833. 24,
  54834. 24,
  54835. 24,
  54836. 24,
  54837. 24,
  54838. 24,
  54839. 24,
  54840. 24,
  54841. 24,
  54842. 24,
  54843. 24,
  54844. 24,
  54845. 24,
  54846. 24,
  54847. 24,
  54848. 24,
  54849. 24,
  54850. 24,
  54851. 24,
  54852. 24,
  54853. 24,
  54854. 24,
  54855. 24,
  54856. 23,
  54857. 24,
  54858. 24,
  54859. 24,
  54860. 24,
  54861. 24,
  54862. 24,
  54863. 24,
  54864. 24,
  54865. 24,
  54866. 24,
  54867. 24,
  54868. 24,
  54869. 24,
  54870. 24,
  54871. 24,
  54872. 24,
  54873. 24,
  54874. 24,
  54875. 24,
  54876. 24,
  54877. 24,
  54878. 24,
  54879. 24,
  54880. 24,
  54881. 24,
  54882. 24,
  54883. 24,
  54884. 23,
  54885. 24,
  54886. 24,
  54887. 24,
  54888. 24,
  54889. 24,
  54890. 24,
  54891. 24,
  54892. 24,
  54893. 24,
  54894. 24,
  54895. 24,
  54896. 24,
  54897. 24,
  54898. 24,
  54899. 24,
  54900. 24,
  54901. 24,
  54902. 24,
  54903. 24,
  54904. 24,
  54905. 24,
  54906. 24,
  54907. 24,
  54908. 24,
  54909. 24,
  54910. 24,
  54911. 24,
  54912. 23,
  54913. 24,
  54914. 24,
  54915. 24,
  54916. 24,
  54917. 24,
  54918. 24,
  54919. 24,
  54920. 24,
  54921. 24,
  54922. 24,
  54923. 24,
  54924. 24,
  54925. 24,
  54926. 24,
  54927. 24,
  54928. 24,
  54929. 24,
  54930. 24,
  54931. 24,
  54932. 24,
  54933. 24,
  54934. 24,
  54935. 24,
  54936. 24,
  54937. 24,
  54938. 24,
  54939. 24,
  54940. 23,
  54941. 24,
  54942. 24,
  54943. 24,
  54944. 24,
  54945. 24,
  54946. 24,
  54947. 24,
  54948. 24,
  54949. 24,
  54950. 24,
  54951. 24,
  54952. 24,
  54953. 24,
  54954. 24,
  54955. 24,
  54956. 24,
  54957. 24,
  54958. 24,
  54959. 24,
  54960. 24,
  54961. 24,
  54962. 24,
  54963. 24,
  54964. 24,
  54965. 24,
  54966. 24,
  54967. 24,
  54968. 23,
  54969. 24,
  54970. 24,
  54971. 24,
  54972. 24,
  54973. 24,
  54974. 24,
  54975. 24,
  54976. 24,
  54977. 24,
  54978. 24,
  54979. 24,
  54980. 24,
  54981. 24,
  54982. 24,
  54983. 24,
  54984. 24,
  54985. 24,
  54986. 24,
  54987. 24,
  54988. 24,
  54989. 24,
  54990. 24,
  54991. 24,
  54992. 24,
  54993. 24,
  54994. 24,
  54995. 24,
  54996. 23,
  54997. 24,
  54998. 24,
  54999. 24,
  55000. 24,
  55001. 24,
  55002. 24,
  55003. 24,
  55004. 24,
  55005. 24,
  55006. 24,
  55007. 24,
  55008. 24,
  55009. 24,
  55010. 24,
  55011. 24,
  55012. 24,
  55013. 24,
  55014. 24,
  55015. 24,
  55016. 24,
  55017. 24,
  55018. 24,
  55019. 24,
  55020. 24,
  55021. 24,
  55022. 24,
  55023. 24,
  55024. 23,
  55025. 24,
  55026. 24,
  55027. 24,
  55028. 24,
  55029. 24,
  55030. 24,
  55031. 24,
  55032. 24,
  55033. 24,
  55034. 24,
  55035. 24,
  55036. 24,
  55037. 24,
  55038. 24,
  55039. 24,
  55040. 24,
  55041. 24,
  55042. 24,
  55043. 24,
  55044. 24,
  55045. 24,
  55046. 24,
  55047. 24,
  55048. 24,
  55049. 24,
  55050. 24,
  55051. 24,
  55052. 23,
  55053. 24,
  55054. 24,
  55055. 24,
  55056. 24,
  55057. 24,
  55058. 24,
  55059. 24,
  55060. 24,
  55061. 24,
  55062. 24,
  55063. 24,
  55064. 24,
  55065. 24,
  55066. 24,
  55067. 24,
  55068. 24,
  55069. 24,
  55070. 24,
  55071. 24,
  55072. 24,
  55073. 24,
  55074. 24,
  55075. 24,
  55076. 24,
  55077. 24,
  55078. 24,
  55079. 24,
  55080. 23,
  55081. 24,
  55082. 24,
  55083. 24,
  55084. 24,
  55085. 24,
  55086. 24,
  55087. 24,
  55088. 24,
  55089. 24,
  55090. 24,
  55091. 24,
  55092. 24,
  55093. 24,
  55094. 24,
  55095. 24,
  55096. 24,
  55097. 24,
  55098. 24,
  55099. 24,
  55100. 24,
  55101. 24,
  55102. 24,
  55103. 24,
  55104. 24,
  55105. 24,
  55106. 24,
  55107. 24,
  55108. 23,
  55109. 24,
  55110. 24,
  55111. 24,
  55112. 24,
  55113. 24,
  55114. 24,
  55115. 24,
  55116. 24,
  55117. 24,
  55118. 24,
  55119. 24,
  55120. 24,
  55121. 24,
  55122. 24,
  55123. 24,
  55124. 24,
  55125. 24,
  55126. 24,
  55127. 24,
  55128. 24,
  55129. 24,
  55130. 24,
  55131. 24,
  55132. 24,
  55133. 24,
  55134. 24,
  55135. 24,
  55136. 23,
  55137. 24,
  55138. 24,
  55139. 24,
  55140. 24,
  55141. 24,
  55142. 24,
  55143. 24,
  55144. 24,
  55145. 24,
  55146. 24,
  55147. 24,
  55148. 24,
  55149. 24,
  55150. 24,
  55151. 24,
  55152. 24,
  55153. 24,
  55154. 24,
  55155. 24,
  55156. 24,
  55157. 24,
  55158. 24,
  55159. 24,
  55160. 24,
  55161. 24,
  55162. 24,
  55163. 24,
  55164. 23,
  55165. 24,
  55166. 24,
  55167. 24,
  55168. 24,
  55169. 24,
  55170. 24,
  55171. 24,
  55172. 24,
  55173. 24,
  55174. 24,
  55175. 24,
  55176. 24,
  55177. 24,
  55178. 24,
  55179. 24,
  55180. 24,
  55181. 24,
  55182. 24,
  55183. 24,
  55184. 24,
  55185. 24,
  55186. 24,
  55187. 24,
  55188. 24,
  55189. 24,
  55190. 24,
  55191. 24,
  55192. 23,
  55193. 24,
  55194. 24,
  55195. 24,
  55196. 24,
  55197. 24,
  55198. 24,
  55199. 24,
  55200. 24,
  55201. 24,
  55202. 24,
  55203. 24,
  55204. 24,
  55205. 24,
  55206. 24,
  55207. 24,
  55208. 24,
  55209. 24,
  55210. 24,
  55211. 24,
  55212. 24,
  55213. 24,
  55214. 24,
  55215. 24,
  55216. 24,
  55217. 24,
  55218. 24,
  55219. 24,
  55220. 23,
  55221. 24,
  55222. 24,
  55223. 24,
  55224. 24,
  55225. 24,
  55226. 24,
  55227. 24,
  55228. 24,
  55229. 24,
  55230. 24,
  55231. 24,
  55232. 24,
  55233. 24,
  55234. 24,
  55235. 24,
  55236. 24,
  55237. 24,
  55238. 24,
  55239. 24,
  55240. 24,
  55241. 24,
  55242. 24,
  55243. 24,
  55244. 24,
  55245. 24,
  55246. 24,
  55247. 24,
  55248. 23,
  55249. 24,
  55250. 24,
  55251. 24,
  55252. 24,
  55253. 24,
  55254. 24,
  55255. 24,
  55256. 24,
  55257. 24,
  55258. 24,
  55259. 24,
  55260. 24,
  55261. 24,
  55262. 24,
  55263. 24,
  55264. 24,
  55265. 24,
  55266. 24,
  55267. 24,
  55268. 24,
  55269. 24,
  55270. 24,
  55271. 24,
  55272. 24,
  55273. 24,
  55274. 24,
  55275. 24,
  55276. 23,
  55277. 24,
  55278. 24,
  55279. 24,
  55280. 24,
  55281. 24,
  55282. 24,
  55283. 24,
  55284. 24,
  55285. 24,
  55286. 24,
  55287. 24,
  55288. 24,
  55289. 24,
  55290. 24,
  55291. 24,
  55292. 24,
  55293. 24,
  55294. 24,
  55295. 24,
  55296. 24,
  55297. 24,
  55298. 24,
  55299. 24,
  55300. 24,
  55301. 24,
  55302. 24,
  55303. 24,
  55304. 23,
  55305. 24,
  55306. 24,
  55307. 24,
  55308. 24,
  55309. 24,
  55310. 24,
  55311. 24,
  55312. 24,
  55313. 24,
  55314. 24,
  55315. 24,
  55316. 24,
  55317. 24,
  55318. 24,
  55319. 24,
  55320. 24,
  55321. 24,
  55322. 24,
  55323. 24,
  55324. 24,
  55325. 24,
  55326. 24,
  55327. 24,
  55328. 24,
  55329. 24,
  55330. 24,
  55331. 24,
  55332. 23,
  55333. 24,
  55334. 24,
  55335. 24,
  55336. 24,
  55337. 24,
  55338. 24,
  55339. 24,
  55340. 24,
  55341. 24,
  55342. 24,
  55343. 24,
  55344. 24,
  55345. 24,
  55346. 24,
  55347. 24,
  55348. 24,
  55349. 24,
  55350. 24,
  55351. 24,
  55352. 24,
  55353. 24,
  55354. 24,
  55355. 24,
  55356. 24,
  55357. 24,
  55358. 24,
  55359. 24,
  55360. 23,
  55361. 24,
  55362. 24,
  55363. 24,
  55364. 24,
  55365. 24,
  55366. 24,
  55367. 24,
  55368. 24,
  55369. 24,
  55370. 24,
  55371. 24,
  55372. 24,
  55373. 24,
  55374. 24,
  55375. 24,
  55376. 24,
  55377. 24,
  55378. 24,
  55379. 24,
  55380. 24,
  55381. 24,
  55382. 24,
  55383. 24,
  55384. 24,
  55385. 24,
  55386. 24,
  55387. 24,
  55388. 23,
  55389. 24,
  55390. 24,
  55391. 24,
  55392. 24,
  55393. 24,
  55394. 24,
  55395. 24,
  55396. 24,
  55397. 24,
  55398. 24,
  55399. 24,
  55400. 24,
  55401. 24,
  55402. 24,
  55403. 24,
  55404. 24,
  55405. 24,
  55406. 24,
  55407. 24,
  55408. 24,
  55409. 24,
  55410. 24,
  55411. 24,
  55412. 24,
  55413. 24,
  55414. 24,
  55415. 24,
  55416. 23,
  55417. 24,
  55418. 24,
  55419. 24,
  55420. 24,
  55421. 24,
  55422. 24,
  55423. 24,
  55424. 24,
  55425. 24,
  55426. 24,
  55427. 24,
  55428. 24,
  55429. 24,
  55430. 24,
  55431. 24,
  55432. 24,
  55433. 24,
  55434. 24,
  55435. 24,
  55436. 24,
  55437. 24,
  55438. 24,
  55439. 24,
  55440. 24,
  55441. 24,
  55442. 24,
  55443. 24,
  55444. 23,
  55445. 24,
  55446. 24,
  55447. 24,
  55448. 24,
  55449. 24,
  55450. 24,
  55451. 24,
  55452. 24,
  55453. 24,
  55454. 24,
  55455. 24,
  55456. 24,
  55457. 24,
  55458. 24,
  55459. 24,
  55460. 24,
  55461. 24,
  55462. 24,
  55463. 24,
  55464. 24,
  55465. 24,
  55466. 24,
  55467. 24,
  55468. 24,
  55469. 24,
  55470. 24,
  55471. 24,
  55472. 23,
  55473. 24,
  55474. 24,
  55475. 24,
  55476. 24,
  55477. 24,
  55478. 24,
  55479. 24,
  55480. 24,
  55481. 24,
  55482. 24,
  55483. 24,
  55484. 24,
  55485. 24,
  55486. 24,
  55487. 24,
  55488. 24,
  55489. 24,
  55490. 24,
  55491. 24,
  55492. 24,
  55493. 24,
  55494. 24,
  55495. 24,
  55496. 24,
  55497. 24,
  55498. 24,
  55499. 24,
  55500. 23,
  55501. 24,
  55502. 24,
  55503. 24,
  55504. 24,
  55505. 24,
  55506. 24,
  55507. 24,
  55508. 24,
  55509. 24,
  55510. 24,
  55511. 24,
  55512. 24,
  55513. 24,
  55514. 24,
  55515. 24,
  55516. 24,
  55517. 24,
  55518. 24,
  55519. 24,
  55520. 24,
  55521. 24,
  55522. 24,
  55523. 24,
  55524. 24,
  55525. 24,
  55526. 24,
  55527. 24,
  55528. 23,
  55529. 24,
  55530. 24,
  55531. 24,
  55532. 24,
  55533. 24,
  55534. 24,
  55535. 24,
  55536. 24,
  55537. 24,
  55538. 24,
  55539. 24,
  55540. 24,
  55541. 24,
  55542. 24,
  55543. 24,
  55544. 24,
  55545. 24,
  55546. 24,
  55547. 24,
  55548. 24,
  55549. 24,
  55550. 24,
  55551. 24,
  55552. 24,
  55553. 24,
  55554. 24,
  55555. 24,
  55556. 23,
  55557. 24,
  55558. 24,
  55559. 24,
  55560. 24,
  55561. 24,
  55562. 24,
  55563. 24,
  55564. 24,
  55565. 24,
  55566. 24,
  55567. 24,
  55568. 24,
  55569. 24,
  55570. 24,
  55571. 24,
  55572. 24,
  55573. 24,
  55574. 24,
  55575. 24,
  55576. 24,
  55577. 24,
  55578. 24,
  55579. 24,
  55580. 24,
  55581. 24,
  55582. 24,
  55583. 24,
  55584. 23,
  55585. 24,
  55586. 24,
  55587. 24,
  55588. 24,
  55589. 24,
  55590. 24,
  55591. 24,
  55592. 24,
  55593. 24,
  55594. 24,
  55595. 24,
  55596. 24,
  55597. 24,
  55598. 24,
  55599. 24,
  55600. 24,
  55601. 24,
  55602. 24,
  55603. 24,
  55604. 24,
  55605. 24,
  55606. 24,
  55607. 24,
  55608. 24,
  55609. 24,
  55610. 24,
  55611. 24,
  55612. 23,
  55613. 24,
  55614. 24,
  55615. 24,
  55616. 24,
  55617. 24,
  55618. 24,
  55619. 24,
  55620. 24,
  55621. 24,
  55622. 24,
  55623. 24,
  55624. 24,
  55625. 24,
  55626. 24,
  55627. 24,
  55628. 24,
  55629. 24,
  55630. 24,
  55631. 24,
  55632. 24,
  55633. 24,
  55634. 24,
  55635. 24,
  55636. 24,
  55637. 24,
  55638. 24,
  55639. 24,
  55640. 23,
  55641. 24,
  55642. 24,
  55643. 24,
  55644. 24,
  55645. 24,
  55646. 24,
  55647. 24,
  55648. 24,
  55649. 24,
  55650. 24,
  55651. 24,
  55652. 24,
  55653. 24,
  55654. 24,
  55655. 24,
  55656. 24,
  55657. 24,
  55658. 24,
  55659. 24,
  55660. 24,
  55661. 24,
  55662. 24,
  55663. 24,
  55664. 24,
  55665. 24,
  55666. 24,
  55667. 24,
  55668. 23,
  55669. 24,
  55670. 24,
  55671. 24,
  55672. 24,
  55673. 24,
  55674. 24,
  55675. 24,
  55676. 24,
  55677. 24,
  55678. 24,
  55679. 24,
  55680. 24,
  55681. 24,
  55682. 24,
  55683. 24,
  55684. 24,
  55685. 24,
  55686. 24,
  55687. 24,
  55688. 24,
  55689. 24,
  55690. 24,
  55691. 24,
  55692. 24,
  55693. 24,
  55694. 24,
  55695. 24,
  55696. 23,
  55697. 24,
  55698. 24,
  55699. 24,
  55700. 24,
  55701. 24,
  55702. 24,
  55703. 24,
  55704. 24,
  55705. 24,
  55706. 24,
  55707. 24,
  55708. 24,
  55709. 24,
  55710. 24,
  55711. 24,
  55712. 24,
  55713. 24,
  55714. 24,
  55715. 24,
  55716. 24,
  55717. 24,
  55718. 24,
  55719. 24,
  55720. 24,
  55721. 24,
  55722. 24,
  55723. 24,
  55724. 23,
  55725. 24,
  55726. 24,
  55727. 24,
  55728. 24,
  55729. 24,
  55730. 24,
  55731. 24,
  55732. 24,
  55733. 24,
  55734. 24,
  55735. 24,
  55736. 24,
  55737. 24,
  55738. 24,
  55739. 24,
  55740. 24,
  55741. 24,
  55742. 24,
  55743. 24,
  55744. 24,
  55745. 24,
  55746. 24,
  55747. 24,
  55748. 24,
  55749. 24,
  55750. 24,
  55751. 24,
  55752. 23,
  55753. 24,
  55754. 24,
  55755. 24,
  55756. 24,
  55757. 24,
  55758. 24,
  55759. 24,
  55760. 24,
  55761. 24,
  55762. 24,
  55763. 24,
  55764. 24,
  55765. 24,
  55766. 24,
  55767. 24,
  55768. 24,
  55769. 24,
  55770. 24,
  55771. 24,
  55772. 24,
  55773. 24,
  55774. 24,
  55775. 24,
  55776. 24,
  55777. 24,
  55778. 24,
  55779. 24,
  55780. 23,
  55781. 24,
  55782. 24,
  55783. 24,
  55784. 24,
  55785. 24,
  55786. 24,
  55787. 24,
  55788. 24,
  55789. 24,
  55790. 24,
  55791. 24,
  55792. 24,
  55793. 24,
  55794. 24,
  55795. 24,
  55796. 24,
  55797. 24,
  55798. 24,
  55799. 24,
  55800. 24,
  55801. 24,
  55802. 24,
  55803. 24,
  55804. 24,
  55805. 24,
  55806. 24,
  55807. 24,
  55808. 23,
  55809. 24,
  55810. 24,
  55811. 24,
  55812. 24,
  55813. 24,
  55814. 24,
  55815. 24,
  55816. 24,
  55817. 24,
  55818. 24,
  55819. 24,
  55820. 24,
  55821. 24,
  55822. 24,
  55823. 24,
  55824. 24,
  55825. 24,
  55826. 24,
  55827. 24,
  55828. 24,
  55829. 24,
  55830. 24,
  55831. 24,
  55832. 24,
  55833. 24,
  55834. 24,
  55835. 24,
  55836. 23,
  55837. 24,
  55838. 24,
  55839. 24,
  55840. 24,
  55841. 24,
  55842. 24,
  55843. 24,
  55844. 24,
  55845. 24,
  55846. 24,
  55847. 24,
  55848. 24,
  55849. 24,
  55850. 24,
  55851. 24,
  55852. 24,
  55853. 24,
  55854. 24,
  55855. 24,
  55856. 24,
  55857. 24,
  55858. 24,
  55859. 24,
  55860. 24,
  55861. 24,
  55862. 24,
  55863. 24,
  55864. 23,
  55865. 24,
  55866. 24,
  55867. 24,
  55868. 24,
  55869. 24,
  55870. 24,
  55871. 24,
  55872. 24,
  55873. 24,
  55874. 24,
  55875. 24,
  55876. 24,
  55877. 24,
  55878. 24,
  55879. 24,
  55880. 24,
  55881. 24,
  55882. 24,
  55883. 24,
  55884. 24,
  55885. 24,
  55886. 24,
  55887. 24,
  55888. 24,
  55889. 24,
  55890. 24,
  55891. 24,
  55892. 23,
  55893. 24,
  55894. 24,
  55895. 24,
  55896. 24,
  55897. 24,
  55898. 24,
  55899. 24,
  55900. 24,
  55901. 24,
  55902. 24,
  55903. 24,
  55904. 24,
  55905. 24,
  55906. 24,
  55907. 24,
  55908. 24,
  55909. 24,
  55910. 24,
  55911. 24,
  55912. 24,
  55913. 24,
  55914. 24,
  55915. 24,
  55916. 24,
  55917. 24,
  55918. 24,
  55919. 24,
  55920. 23,
  55921. 24,
  55922. 24,
  55923. 24,
  55924. 24,
  55925. 24,
  55926. 24,
  55927. 24,
  55928. 24,
  55929. 24,
  55930. 24,
  55931. 24,
  55932. 24,
  55933. 24,
  55934. 24,
  55935. 24,
  55936. 24,
  55937. 24,
  55938. 24,
  55939. 24,
  55940. 24,
  55941. 24,
  55942. 24,
  55943. 24,
  55944. 24,
  55945. 24,
  55946. 24,
  55947. 24,
  55948. 23,
  55949. 24,
  55950. 24,
  55951. 24,
  55952. 24,
  55953. 24,
  55954. 24,
  55955. 24,
  55956. 24,
  55957. 24,
  55958. 24,
  55959. 24,
  55960. 24,
  55961. 24,
  55962. 24,
  55963. 24,
  55964. 24,
  55965. 24,
  55966. 24,
  55967. 24,
  55968. 24,
  55969. 24,
  55970. 24,
  55971. 24,
  55972. 24,
  55973. 24,
  55974. 24,
  55975. 24,
  55976. 23,
  55977. 24,
  55978. 24,
  55979. 24,
  55980. 24,
  55981. 24,
  55982. 24,
  55983. 24,
  55984. 24,
  55985. 24,
  55986. 24,
  55987. 24,
  55988. 24,
  55989. 24,
  55990. 24,
  55991. 24,
  55992. 24,
  55993. 24,
  55994. 24,
  55995. 24,
  55996. 24,
  55997. 24,
  55998. 24,
  55999. 24,
  56000. 24,
  56001. 24,
  56002. 24,
  56003. 24,
  56004. 23,
  56005. 24,
  56006. 24,
  56007. 24,
  56008. 24,
  56009. 24,
  56010. 24,
  56011. 24,
  56012. 24,
  56013. 24,
  56014. 24,
  56015. 24,
  56016. 24,
  56017. 24,
  56018. 24,
  56019. 24,
  56020. 24,
  56021. 24,
  56022. 24,
  56023. 24,
  56024. 24,
  56025. 24,
  56026. 24,
  56027. 24,
  56028. 24,
  56029. 24,
  56030. 24,
  56031. 24,
  56032. 23,
  56033. 24,
  56034. 24,
  56035. 24,
  56036. 24,
  56037. 24,
  56038. 24,
  56039. 24,
  56040. 24,
  56041. 24,
  56042. 24,
  56043. 24,
  56044. 24,
  56045. 24,
  56046. 24,
  56047. 24,
  56048. 24,
  56049. 24,
  56050. 24,
  56051. 24,
  56052. 24,
  56053. 24,
  56054. 24,
  56055. 24,
  56056. 24,
  56057. 24,
  56058. 24,
  56059. 24,
  56060. 23,
  56061. 24,
  56062. 24,
  56063. 24,
  56064. 24,
  56065. 24,
  56066. 24,
  56067. 24,
  56068. 24,
  56069. 24,
  56070. 24,
  56071. 24,
  56072. 24,
  56073. 24,
  56074. 24,
  56075. 24,
  56076. 24,
  56077. 24,
  56078. 24,
  56079. 24,
  56080. 24,
  56081. 24,
  56082. 24,
  56083. 24,
  56084. 24,
  56085. 24,
  56086. 24,
  56087. 24,
  56088. 23,
  56089. 24,
  56090. 24,
  56091. 24,
  56092. 24,
  56093. 24,
  56094. 24,
  56095. 24,
  56096. 24,
  56097. 24,
  56098. 24,
  56099. 24,
  56100. 24,
  56101. 24,
  56102. 24,
  56103. 24,
  56104. 24,
  56105. 24,
  56106. 24,
  56107. 24,
  56108. 24,
  56109. 24,
  56110. 24,
  56111. 24,
  56112. 24,
  56113. 24,
  56114. 24,
  56115. 24,
  56116. 23,
  56117. 24,
  56118. 24,
  56119. 24,
  56120. 24,
  56121. 24,
  56122. 24,
  56123. 24,
  56124. 24,
  56125. 24,
  56126. 24,
  56127. 24,
  56128. 24,
  56129. 24,
  56130. 24,
  56131. 24,
  56132. 24,
  56133. 24,
  56134. 24,
  56135. 24,
  56136. 24,
  56137. 24,
  56138. 24,
  56139. 24,
  56140. 24,
  56141. 24,
  56142. 24,
  56143. 24,
  56144. 23,
  56145. 24,
  56146. 24,
  56147. 24,
  56148. 24,
  56149. 24,
  56150. 24,
  56151. 24,
  56152. 24,
  56153. 24,
  56154. 24,
  56155. 24,
  56156. 24,
  56157. 24,
  56158. 24,
  56159. 24,
  56160. 24,
  56161. 24,
  56162. 24,
  56163. 24,
  56164. 24,
  56165. 24,
  56166. 24,
  56167. 24,
  56168. 24,
  56169. 24,
  56170. 24,
  56171. 24,
  56172. 23,
  56173. 24,
  56174. 24,
  56175. 24,
  56176. 24,
  56177. 24,
  56178. 24,
  56179. 24,
  56180. 24,
  56181. 24,
  56182. 24,
  56183. 24,
  56184. 24,
  56185. 24,
  56186. 24,
  56187. 24,
  56188. 24,
  56189. 24,
  56190. 24,
  56191. 24,
  56192. 24,
  56193. 24,
  56194. 24,
  56195. 24,
  56196. 24,
  56197. 24,
  56198. 24,
  56199. 24,
  56200. 23,
  56201. 24,
  56202. 24,
  56203. 24,
  56204. 24,
  56205. 24,
  56206. 24,
  56207. 24,
  56208. 24,
  56209. 24,
  56210. 24,
  56211. 24,
  56212. 24,
  56213. 24,
  56214. 24,
  56215. 24,
  56216. 24,
  56217. 24,
  56218. 24,
  56219. 24,
  56220. 24,
  56221. 24,
  56222. 24,
  56223. 24,
  56224. 24,
  56225. 24,
  56226. 24,
  56227. 24,
  56228. 23,
  56229. 24,
  56230. 24,
  56231. 24,
  56232. 24,
  56233. 24,
  56234. 24,
  56235. 24,
  56236. 24,
  56237. 24,
  56238. 24,
  56239. 24,
  56240. 24,
  56241. 24,
  56242. 24,
  56243. 24,
  56244. 24,
  56245. 24,
  56246. 24,
  56247. 24,
  56248. 24,
  56249. 24,
  56250. 24,
  56251. 24,
  56252. 24,
  56253. 24,
  56254. 24,
  56255. 24,
  56256. 23,
  56257. 24,
  56258. 24,
  56259. 24,
  56260. 24,
  56261. 24,
  56262. 24,
  56263. 24,
  56264. 24,
  56265. 24,
  56266. 24,
  56267. 24,
  56268. 24,
  56269. 24,
  56270. 24,
  56271. 24,
  56272. 24,
  56273. 24,
  56274. 24,
  56275. 24,
  56276. 24,
  56277. 24,
  56278. 24,
  56279. 24,
  56280. 24,
  56281. 24,
  56282. 24,
  56283. 24,
  56284. 23,
  56285. 24,
  56286. 24,
  56287. 24,
  56288. 24,
  56289. 24,
  56290. 24,
  56291. 24,
  56292. 24,
  56293. 24,
  56294. 24,
  56295. 24,
  56296. 24,
  56297. 24,
  56298. 24,
  56299. 24,
  56300. 24,
  56301. 24,
  56302. 24,
  56303. 24,
  56304. 24,
  56305. 24,
  56306. 24,
  56307. 24,
  56308. 24,
  56309. 24,
  56310. 24,
  56311. 24,
  56312. 23,
  56313. 24,
  56314. 24,
  56315. 24,
  56316. 24,
  56317. 24,
  56318. 24,
  56319. 24,
  56320. 24,
  56321. 24,
  56322. 24,
  56323. 24,
  56324. 24,
  56325. 24,
  56326. 24,
  56327. 24,
  56328. 24,
  56329. 24,
  56330. 24,
  56331. 24,
  56332. 24,
  56333. 24,
  56334. 24,
  56335. 24,
  56336. 24,
  56337. 24,
  56338. 24,
  56339. 24,
  56340. 23,
  56341. 24,
  56342. 24,
  56343. 24,
  56344. 24,
  56345. 24,
  56346. 24,
  56347. 24,
  56348. 24,
  56349. 24,
  56350. 24,
  56351. 24,
  56352. 24,
  56353. 24,
  56354. 24,
  56355. 24,
  56356. 24,
  56357. 24,
  56358. 24,
  56359. 24,
  56360. 24,
  56361. 24,
  56362. 24,
  56363. 24,
  56364. 24,
  56365. 24,
  56366. 24,
  56367. 24,
  56368. 23,
  56369. 24,
  56370. 24,
  56371. 24,
  56372. 24,
  56373. 24,
  56374. 24,
  56375. 24,
  56376. 24,
  56377. 24,
  56378. 24,
  56379. 24,
  56380. 24,
  56381. 24,
  56382. 24,
  56383. 24,
  56384. 24,
  56385. 24,
  56386. 24,
  56387. 24,
  56388. 24,
  56389. 24,
  56390. 24,
  56391. 24,
  56392. 24,
  56393. 24,
  56394. 24,
  56395. 24,
  56396. 23,
  56397. 24,
  56398. 24,
  56399. 24,
  56400. 24,
  56401. 24,
  56402. 24,
  56403. 24,
  56404. 24,
  56405. 24,
  56406. 24,
  56407. 24,
  56408. 24,
  56409. 24,
  56410. 24,
  56411. 24,
  56412. 24,
  56413. 24,
  56414. 24,
  56415. 24,
  56416. 24,
  56417. 24,
  56418. 24,
  56419. 24,
  56420. 24,
  56421. 24,
  56422. 24,
  56423. 24,
  56424. 23,
  56425. 24,
  56426. 24,
  56427. 24,
  56428. 24,
  56429. 24,
  56430. 24,
  56431. 24,
  56432. 24,
  56433. 24,
  56434. 24,
  56435. 24,
  56436. 24,
  56437. 24,
  56438. 24,
  56439. 24,
  56440. 24,
  56441. 24,
  56442. 24,
  56443. 24,
  56444. 24,
  56445. 24,
  56446. 24,
  56447. 24,
  56448. 24,
  56449. 24,
  56450. 24,
  56451. 24,
  56452. 23,
  56453. 24,
  56454. 24,
  56455. 24,
  56456. 24,
  56457. 24,
  56458. 24,
  56459. 24,
  56460. 24,
  56461. 24,
  56462. 24,
  56463. 24,
  56464. 24,
  56465. 24,
  56466. 24,
  56467. 24,
  56468. 24,
  56469. 24,
  56470. 24,
  56471. 24,
  56472. 24,
  56473. 24,
  56474. 24,
  56475. 24,
  56476. 24,
  56477. 24,
  56478. 24,
  56479. 24,
  56480. 23,
  56481. 24,
  56482. 24,
  56483. 24,
  56484. 24,
  56485. 24,
  56486. 24,
  56487. 24,
  56488. 24,
  56489. 24,
  56490. 24,
  56491. 24,
  56492. 24,
  56493. 24,
  56494. 24,
  56495. 24,
  56496. 24,
  56497. 24,
  56498. 24,
  56499. 24,
  56500. 24,
  56501. 24,
  56502. 24,
  56503. 24,
  56504. 24,
  56505. 24,
  56506. 24,
  56507. 24,
  56508. 23,
  56509. 24,
  56510. 24,
  56511. 24,
  56512. 24,
  56513. 24,
  56514. 24,
  56515. 24,
  56516. 24,
  56517. 24,
  56518. 24,
  56519. 24,
  56520. 24,
  56521. 24,
  56522. 24,
  56523. 24,
  56524. 24,
  56525. 24,
  56526. 24,
  56527. 24,
  56528. 24,
  56529. 24,
  56530. 24,
  56531. 24,
  56532. 24,
  56533. 24,
  56534. 24,
  56535. 24,
  56536. 23,
  56537. 24,
  56538. 24,
  56539. 24,
  56540. 24,
  56541. 24,
  56542. 24,
  56543. 24,
  56544. 24,
  56545. 24,
  56546. 24,
  56547. 24,
  56548. 24,
  56549. 24,
  56550. 24,
  56551. 24,
  56552. 24,
  56553. 24,
  56554. 24,
  56555. 24,
  56556. 24,
  56557. 24,
  56558. 24,
  56559. 24,
  56560. 24,
  56561. 24,
  56562. 24,
  56563. 24,
  56564. 23,
  56565. 24,
  56566. 24,
  56567. 24,
  56568. 24,
  56569. 24,
  56570. 24,
  56571. 24,
  56572. 24,
  56573. 24,
  56574. 24,
  56575. 24,
  56576. 24,
  56577. 24,
  56578. 24,
  56579. 24,
  56580. 24,
  56581. 24,
  56582. 24,
  56583. 24,
  56584. 24,
  56585. 24,
  56586. 24,
  56587. 24,
  56588. 24,
  56589. 24,
  56590. 24,
  56591. 24,
  56592. 23,
  56593. 24,
  56594. 24,
  56595. 24,
  56596. 24,
  56597. 24,
  56598. 24,
  56599. 24,
  56600. 24,
  56601. 24,
  56602. 24,
  56603. 24,
  56604. 24,
  56605. 24,
  56606. 24,
  56607. 24,
  56608. 24,
  56609. 24,
  56610. 24,
  56611. 24,
  56612. 24,
  56613. 24,
  56614. 24,
  56615. 24,
  56616. 24,
  56617. 24,
  56618. 24,
  56619. 24,
  56620. 23,
  56621. 24,
  56622. 24,
  56623. 24,
  56624. 24,
  56625. 24,
  56626. 24,
  56627. 24,
  56628. 24,
  56629. 24,
  56630. 24,
  56631. 24,
  56632. 24,
  56633. 24,
  56634. 24,
  56635. 24,
  56636. 24,
  56637. 24,
  56638. 24,
  56639. 24,
  56640. 24,
  56641. 24,
  56642. 24,
  56643. 24,
  56644. 24,
  56645. 24,
  56646. 24,
  56647. 24,
  56648. 23,
  56649. 24,
  56650. 24,
  56651. 24,
  56652. 24,
  56653. 24,
  56654. 24,
  56655. 24,
  56656. 24,
  56657. 24,
  56658. 24,
  56659. 24,
  56660. 24,
  56661. 24,
  56662. 24,
  56663. 24,
  56664. 24,
  56665. 24,
  56666. 24,
  56667. 24,
  56668. 24,
  56669. 24,
  56670. 24,
  56671. 24,
  56672. 24,
  56673. 24,
  56674. 24,
  56675. 24,
  56676. 23,
  56677. 24,
  56678. 24,
  56679. 24,
  56680. 24,
  56681. 24,
  56682. 24,
  56683. 24,
  56684. 24,
  56685. 24,
  56686. 24,
  56687. 24,
  56688. 24,
  56689. 24,
  56690. 24,
  56691. 24,
  56692. 24,
  56693. 24,
  56694. 24,
  56695. 24,
  56696. 24,
  56697. 24,
  56698. 24,
  56699. 24,
  56700. 24,
  56701. 24,
  56702. 24,
  56703. 24,
  56704. 23,
  56705. 24,
  56706. 24,
  56707. 24,
  56708. 24,
  56709. 24,
  56710. 24,
  56711. 24,
  56712. 24,
  56713. 24,
  56714. 24,
  56715. 24,
  56716. 24,
  56717. 24,
  56718. 24,
  56719. 24,
  56720. 24,
  56721. 24,
  56722. 24,
  56723. 24,
  56724. 24,
  56725. 24,
  56726. 24,
  56727. 24,
  56728. 24,
  56729. 24,
  56730. 24,
  56731. 24,
  56732. 23,
  56733. 24,
  56734. 24,
  56735. 24,
  56736. 24,
  56737. 24,
  56738. 24,
  56739. 24,
  56740. 24,
  56741. 24,
  56742. 24,
  56743. 24,
  56744. 24,
  56745. 24,
  56746. 24,
  56747. 24,
  56748. 24,
  56749. 24,
  56750. 24,
  56751. 24,
  56752. 24,
  56753. 24,
  56754. 24,
  56755. 24,
  56756. 24,
  56757. 24,
  56758. 24,
  56759. 24,
  56760. 23,
  56761. 24,
  56762. 24,
  56763. 24,
  56764. 24,
  56765. 24,
  56766. 24,
  56767. 24,
  56768. 24,
  56769. 24,
  56770. 24,
  56771. 24,
  56772. 24,
  56773. 24,
  56774. 24,
  56775. 24,
  56776. 24,
  56777. 24,
  56778. 24,
  56779. 24,
  56780. 24,
  56781. 24,
  56782. 24,
  56783. 24,
  56784. 24,
  56785. 24,
  56786. 24,
  56787. 24,
  56788. 23,
  56789. 24,
  56790. 24,
  56791. 24,
  56792. 24,
  56793. 24,
  56794. 24,
  56795. 24,
  56796. 24,
  56797. 24,
  56798. 24,
  56799. 24,
  56800. 24,
  56801. 24,
  56802. 24,
  56803. 24,
  56804. 24,
  56805. 24,
  56806. 24,
  56807. 24,
  56808. 24,
  56809. 24,
  56810. 24,
  56811. 24,
  56812. 24,
  56813. 24,
  56814. 24,
  56815. 24,
  56816. 23,
  56817. 24,
  56818. 24,
  56819. 24,
  56820. 24,
  56821. 24,
  56822. 24,
  56823. 24,
  56824. 24,
  56825. 24,
  56826. 24,
  56827. 24,
  56828. 24,
  56829. 24,
  56830. 24,
  56831. 24,
  56832. 24,
  56833. 24,
  56834. 24,
  56835. 24,
  56836. 24,
  56837. 24,
  56838. 24,
  56839. 24,
  56840. 24,
  56841. 24,
  56842. 24,
  56843. 24,
  56844. 23,
  56845. 24,
  56846. 24,
  56847. 24,
  56848. 24,
  56849. 24,
  56850. 24,
  56851. 24,
  56852. 24,
  56853. 24,
  56854. 24,
  56855. 24,
  56856. 24,
  56857. 24,
  56858. 24,
  56859. 24,
  56860. 24,
  56861. 24,
  56862. 24,
  56863. 24,
  56864. 24,
  56865. 24,
  56866. 24,
  56867. 24,
  56868. 24,
  56869. 24,
  56870. 24,
  56871. 24,
  56872. 23,
  56873. 24,
  56874. 24,
  56875. 24,
  56876. 24,
  56877. 24,
  56878. 24,
  56879. 24,
  56880. 24,
  56881. 24,
  56882. 24,
  56883. 24,
  56884. 24,
  56885. 24,
  56886. 24,
  56887. 24,
  56888. 24,
  56889. 24,
  56890. 24,
  56891. 24,
  56892. 24,
  56893. 24,
  56894. 24,
  56895. 24,
  56896. 24,
  56897. 24,
  56898. 24,
  56899. 24,
  56900. 23,
  56901. 24,
  56902. 24,
  56903. 24,
  56904. 24,
  56905. 24,
  56906. 24,
  56907. 24,
  56908. 24,
  56909. 24,
  56910. 24,
  56911. 24,
  56912. 24,
  56913. 24,
  56914. 24,
  56915. 24,
  56916. 24,
  56917. 24,
  56918. 24,
  56919. 24,
  56920. 24,
  56921. 24,
  56922. 24,
  56923. 24,
  56924. 24,
  56925. 24,
  56926. 24,
  56927. 24,
  56928. 23,
  56929. 24,
  56930. 24,
  56931. 24,
  56932. 24,
  56933. 24,
  56934. 24,
  56935. 24,
  56936. 24,
  56937. 24,
  56938. 24,
  56939. 24,
  56940. 24,
  56941. 24,
  56942. 24,
  56943. 24,
  56944. 24,
  56945. 24,
  56946. 24,
  56947. 24,
  56948. 24,
  56949. 24,
  56950. 24,
  56951. 24,
  56952. 24,
  56953. 24,
  56954. 24,
  56955. 24,
  56956. 23,
  56957. 24,
  56958. 24,
  56959. 24,
  56960. 24,
  56961. 24,
  56962. 24,
  56963. 24,
  56964. 24,
  56965. 24,
  56966. 24,
  56967. 24,
  56968. 24,
  56969. 24,
  56970. 24,
  56971. 24,
  56972. 24,
  56973. 24,
  56974. 24,
  56975. 24,
  56976. 24,
  56977. 24,
  56978. 24,
  56979. 24,
  56980. 24,
  56981. 24,
  56982. 24,
  56983. 24,
  56984. 23,
  56985. 24,
  56986. 24,
  56987. 24,
  56988. 24,
  56989. 24,
  56990. 24,
  56991. 24,
  56992. 24,
  56993. 24,
  56994. 24,
  56995. 24,
  56996. 24,
  56997. 24,
  56998. 24,
  56999. 24,
  57000. 24,
  57001. 24,
  57002. 24,
  57003. 24,
  57004. 24,
  57005. 24,
  57006. 24,
  57007. 24,
  57008. 24,
  57009. 24,
  57010. 24,
  57011. 24,
  57012. 23,
  57013. 24,
  57014. 24,
  57015. 24,
  57016. 24,
  57017. 24,
  57018. 24,
  57019. 24,
  57020. 24,
  57021. 24,
  57022. 24,
  57023. 24,
  57024. 24,
  57025. 24,
  57026. 24,
  57027. 24,
  57028. 24,
  57029. 24,
  57030. 24,
  57031. 24,
  57032. 24,
  57033. 24,
  57034. 24,
  57035. 24,
  57036. 24,
  57037. 24,
  57038. 24,
  57039. 24,
  57040. 23,
  57041. 24,
  57042. 24,
  57043. 24,
  57044. 24,
  57045. 24,
  57046. 24,
  57047. 24,
  57048. 24,
  57049. 24,
  57050. 24,
  57051. 24,
  57052. 24,
  57053. 24,
  57054. 24,
  57055. 24,
  57056. 24,
  57057. 24,
  57058. 24,
  57059. 24,
  57060. 24,
  57061. 24,
  57062. 24,
  57063. 24,
  57064. 24,
  57065. 24,
  57066. 24,
  57067. 24,
  57068. 23,
  57069. 24,
  57070. 24,
  57071. 24,
  57072. 24,
  57073. 24,
  57074. 24,
  57075. 24,
  57076. 24,
  57077. 24,
  57078. 24,
  57079. 24,
  57080. 24,
  57081. 24,
  57082. 24,
  57083. 24,
  57084. 24,
  57085. 24,
  57086. 24,
  57087. 24,
  57088. 24,
  57089. 24,
  57090. 24,
  57091. 24,
  57092. 24,
  57093. 24,
  57094. 24,
  57095. 24,
  57096. 23,
  57097. 24,
  57098. 24,
  57099. 24,
  57100. 24,
  57101. 24,
  57102. 24,
  57103. 24,
  57104. 24,
  57105. 24,
  57106. 24,
  57107. 24,
  57108. 24,
  57109. 24,
  57110. 24,
  57111. 24,
  57112. 24,
  57113. 24,
  57114. 24,
  57115. 24,
  57116. 24,
  57117. 24,
  57118. 24,
  57119. 24,
  57120. 24,
  57121. 24,
  57122. 24,
  57123. 24,
  57124. 23,
  57125. 24,
  57126. 24,
  57127. 24,
  57128. 24,
  57129. 24,
  57130. 24,
  57131. 24,
  57132. 24,
  57133. 24,
  57134. 24,
  57135. 24,
  57136. 24,
  57137. 24,
  57138. 24,
  57139. 24,
  57140. 24,
  57141. 24,
  57142. 24,
  57143. 24,
  57144. 24,
  57145. 24,
  57146. 24,
  57147. 24,
  57148. 24,
  57149. 24,
  57150. 24,
  57151. 24,
  57152. 23,
  57153. 24,
  57154. 24,
  57155. 24,
  57156. 24,
  57157. 24,
  57158. 24,
  57159. 24,
  57160. 24,
  57161. 24,
  57162. 24,
  57163. 24,
  57164. 24,
  57165. 24,
  57166. 24,
  57167. 24,
  57168. 24,
  57169. 24,
  57170. 24,
  57171. 24,
  57172. 24,
  57173. 24,
  57174. 24,
  57175. 24,
  57176. 24,
  57177. 24,
  57178. 24,
  57179. 24,
  57180. 23,
  57181. 24,
  57182. 24,
  57183. 24,
  57184. 24,
  57185. 24,
  57186. 24,
  57187. 24,
  57188. 24,
  57189. 24,
  57190. 24,
  57191. 24,
  57192. 24,
  57193. 24,
  57194. 24,
  57195. 24,
  57196. 24,
  57197. 24,
  57198. 24,
  57199. 24,
  57200. 24,
  57201. 24,
  57202. 24,
  57203. 24,
  57204. 24,
  57205. 24,
  57206. 24,
  57207. 24,
  57208. 23,
  57209. 24,
  57210. 24,
  57211. 24,
  57212. 24,
  57213. 24,
  57214. 24,
  57215. 24,
  57216. 24,
  57217. 24,
  57218. 24,
  57219. 24,
  57220. 24,
  57221. 24,
  57222. 24,
  57223. 24,
  57224. 24,
  57225. 24,
  57226. 24,
  57227. 24,
  57228. 24,
  57229. 24,
  57230. 24,
  57231. 24,
  57232. 24,
  57233. 24,
  57234. 24,
  57235. 24,
  57236. 23,
  57237. 24,
  57238. 24,
  57239. 24,
  57240. 24,
  57241. 24,
  57242. 24,
  57243. 24,
  57244. 24,
  57245. 24,
  57246. 24,
  57247. 24,
  57248. 24,
  57249. 24,
  57250. 24,
  57251. 24,
  57252. 24,
  57253. 24,
  57254. 24,
  57255. 24,
  57256. 24,
  57257. 24,
  57258. 24,
  57259. 24,
  57260. 24,
  57261. 24,
  57262. 24,
  57263. 24,
  57264. 23,
  57265. 24,
  57266. 24,
  57267. 24,
  57268. 24,
  57269. 24,
  57270. 24,
  57271. 24,
  57272. 24,
  57273. 24,
  57274. 24,
  57275. 24,
  57276. 24,
  57277. 24,
  57278. 24,
  57279. 24,
  57280. 24,
  57281. 24,
  57282. 24,
  57283. 24,
  57284. 24,
  57285. 24,
  57286. 24,
  57287. 24,
  57288. 24,
  57289. 24,
  57290. 24,
  57291. 24,
  57292. 23,
  57293. 24,
  57294. 24,
  57295. 24,
  57296. 24,
  57297. 24,
  57298. 24,
  57299. 24,
  57300. 24,
  57301. 24,
  57302. 24,
  57303. 24,
  57304. 24,
  57305. 24,
  57306. 24,
  57307. 24,
  57308. 24,
  57309. 24,
  57310. 24,
  57311. 24,
  57312. 24,
  57313. 24,
  57314. 24,
  57315. 24,
  57316. 24,
  57317. 24,
  57318. 24,
  57319. 24,
  57320. 23,
  57321. 24,
  57322. 24,
  57323. 24,
  57324. 24,
  57325. 24,
  57326. 24,
  57327. 24,
  57328. 24,
  57329. 24,
  57330. 24,
  57331. 24,
  57332. 24,
  57333. 24,
  57334. 24,
  57335. 24,
  57336. 24,
  57337. 24,
  57338. 24,
  57339. 24,
  57340. 24,
  57341. 24,
  57342. 24,
  57343. 24,
  57344. 24,
  57345. 24,
  57346. 24,
  57347. 24,
  57348. 23,
  57349. 24,
  57350. 24,
  57351. 24,
  57352. 24,
  57353. 24,
  57354. 24,
  57355. 24,
  57356. 24,
  57357. 24,
  57358. 24,
  57359. 24,
  57360. 24,
  57361. 24,
  57362. 24,
  57363. 24,
  57364. 24,
  57365. 24,
  57366. 24,
  57367. 24,
  57368. 24,
  57369. 24,
  57370. 24,
  57371. 24,
  57372. 24,
  57373. 24,
  57374. 24,
  57375. 24,
  57376. 23,
  57377. 24,
  57378. 24,
  57379. 24,
  57380. 24,
  57381. 24,
  57382. 24,
  57383. 24,
  57384. 24,
  57385. 24,
  57386. 24,
  57387. 24,
  57388. 24,
  57389. 24,
  57390. 24,
  57391. 24,
  57392. 24,
  57393. 24,
  57394. 24,
  57395. 24,
  57396. 24,
  57397. 24,
  57398. 24,
  57399. 24,
  57400. 24,
  57401. 24,
  57402. 24,
  57403. 24,
  57404. 23,
  57405. 24,
  57406. 24,
  57407. 24,
  57408. 24,
  57409. 24,
  57410. 24,
  57411. 24,
  57412. 24,
  57413. 24,
  57414. 24,
  57415. 24,
  57416. 24,
  57417. 24,
  57418. 24,
  57419. 24,
  57420. 24,
  57421. 24,
  57422. 24,
  57423. 24,
  57424. 24,
  57425. 24,
  57426. 24,
  57427. 24,
  57428. 24,
  57429. 24,
  57430. 24,
  57431. 24,
  57432. 23,
  57433. 24,
  57434. 24,
  57435. 24,
  57436. 24,
  57437. 24,
  57438. 24,
  57439. 24,
  57440. 24,
  57441. 24,
  57442. 24,
  57443. 24,
  57444. 24,
  57445. 24,
  57446. 24,
  57447. 24,
  57448. 24,
  57449. 24,
  57450. 24,
  57451. 24,
  57452. 24,
  57453. 24,
  57454. 24,
  57455. 24,
  57456. 24,
  57457. 24,
  57458. 24,
  57459. 24,
  57460. 23,
  57461. 24,
  57462. 24,
  57463. 24,
  57464. 24,
  57465. 24,
  57466. 24,
  57467. 24,
  57468. 24,
  57469. 24,
  57470. 24,
  57471. 24,
  57472. 24,
  57473. 24,
  57474. 24,
  57475. 24,
  57476. 24,
  57477. 24,
  57478. 24,
  57479. 24,
  57480. 24,
  57481. 24,
  57482. 24,
  57483. 24,
  57484. 24,
  57485. 24,
  57486. 24,
  57487. 24,
  57488. 23,
  57489. 24,
  57490. 24,
  57491. 24,
  57492. 24,
  57493. 24,
  57494. 24,
  57495. 24,
  57496. 24,
  57497. 24,
  57498. 24,
  57499. 24,
  57500. 24,
  57501. 24,
  57502. 24,
  57503. 24,
  57504. 24,
  57505. 24,
  57506. 24,
  57507. 24,
  57508. 24,
  57509. 24,
  57510. 24,
  57511. 24,
  57512. 24,
  57513. 24,
  57514. 24,
  57515. 24,
  57516. 23,
  57517. 24,
  57518. 24,
  57519. 24,
  57520. 24,
  57521. 24,
  57522. 24,
  57523. 24,
  57524. 24,
  57525. 24,
  57526. 24,
  57527. 24,
  57528. 24,
  57529. 24,
  57530. 24,
  57531. 24,
  57532. 24,
  57533. 24,
  57534. 24,
  57535. 24,
  57536. 24,
  57537. 24,
  57538. 24,
  57539. 24,
  57540. 24,
  57541. 24,
  57542. 24,
  57543. 24,
  57544. 23,
  57545. 24,
  57546. 24,
  57547. 24,
  57548. 24,
  57549. 24,
  57550. 24,
  57551. 24,
  57552. 24,
  57553. 24,
  57554. 24,
  57555. 24,
  57556. 24,
  57557. 24,
  57558. 24,
  57559. 24,
  57560. 24,
  57561. 24,
  57562. 24,
  57563. 24,
  57564. 24,
  57565. 24,
  57566. 24,
  57567. 24,
  57568. 24,
  57569. 24,
  57570. 24,
  57571. 24,
  57572. 23,
  57573. 24,
  57574. 24,
  57575. 24,
  57576. 24,
  57577. 24,
  57578. 24,
  57579. 24,
  57580. 24,
  57581. 24,
  57582. 24,
  57583. 24,
  57584. 24,
  57585. 24,
  57586. 24,
  57587. 24,
  57588. 24,
  57589. 24,
  57590. 24,
  57591. 24,
  57592. 24,
  57593. 24,
  57594. 24,
  57595. 24,
  57596. 24,
  57597. 24,
  57598. 24,
  57599. 24,
  57600. 23,
  57601. 24,
  57602. 24,
  57603. 24,
  57604. 24,
  57605. 24,
  57606. 24,
  57607. 24,
  57608. 24,
  57609. 24,
  57610. 24,
  57611. 24,
  57612. 24,
  57613. 24,
  57614. 24,
  57615. 24,
  57616. 24,
  57617. 24,
  57618. 24,
  57619. 24,
  57620. 24,
  57621. 24,
  57622. 24,
  57623. 24,
  57624. 24,
  57625. 24,
  57626. 24,
  57627. 24,
  57628. 23,
  57629. 24,
  57630. 24,
  57631. 24,
  57632. 24,
  57633. 24,
  57634. 24,
  57635. 24,
  57636. 24,
  57637. 24,
  57638. 24,
  57639. 24,
  57640. 24,
  57641. 24,
  57642. 24,
  57643. 24,
  57644. 24,
  57645. 24,
  57646. 24,
  57647. 24,
  57648. 24,
  57649. 24,
  57650. 24,
  57651. 24,
  57652. 24,
  57653. 24,
  57654. 24,
  57655. 24,
  57656. 23,
  57657. 24,
  57658. 24,
  57659. 24,
  57660. 24,
  57661. 24,
  57662. 24,
  57663. 24,
  57664. 24,
  57665. 24,
  57666. 24,
  57667. 24,
  57668. 24,
  57669. 24,
  57670. 24,
  57671. 24,
  57672. 24,
  57673. 24,
  57674. 24,
  57675. 24,
  57676. 24,
  57677. 24,
  57678. 24,
  57679. 24,
  57680. 24,
  57681. 24,
  57682. 24,
  57683. 24,
  57684. 23,
  57685. 24,
  57686. 24,
  57687. 24,
  57688. 24,
  57689. 24,
  57690. 24,
  57691. 24,
  57692. 24,
  57693. 24,
  57694. 24,
  57695. 24,
  57696. 24,
  57697. 24,
  57698. 24,
  57699. 24,
  57700. 24,
  57701. 24,
  57702. 24,
  57703. 24,
  57704. 24,
  57705. 24,
  57706. 24,
  57707. 24,
  57708. 24,
  57709. 24,
  57710. 24,
  57711. 24,
  57712. 23,
  57713. 24,
  57714. 24,
  57715. 24,
  57716. 24,
  57717. 24,
  57718. 24,
  57719. 24,
  57720. 24,
  57721. 24,
  57722. 24,
  57723. 24,
  57724. 24,
  57725. 24,
  57726. 24,
  57727. 24,
  57728. 24,
  57729. 24,
  57730. 24,
  57731. 24,
  57732. 24,
  57733. 24,
  57734. 24,
  57735. 24,
  57736. 24,
  57737. 24,
  57738. 24,
  57739. 24,
  57740. 23,
  57741. 24,
  57742. 24,
  57743. 24,
  57744. 24,
  57745. 24,
  57746. 24,
  57747. 24,
  57748. 24,
  57749. 24,
  57750. 24,
  57751. 24,
  57752. 24,
  57753. 24,
  57754. 24,
  57755. 24,
  57756. 24,
  57757. 24,
  57758. 24,
  57759. 24,
  57760. 24,
  57761. 24,
  57762. 24,
  57763. 24,
  57764. 24,
  57765. 24,
  57766. 24,
  57767. 24,
  57768. 23,
  57769. 24,
  57770. 24,
  57771. 24,
  57772. 24,
  57773. 24,
  57774. 24,
  57775. 24,
  57776. 24,
  57777. 24,
  57778. 24,
  57779. 24,
  57780. 24,
  57781. 24,
  57782. 24,
  57783. 24,
  57784. 24,
  57785. 24,
  57786. 24,
  57787. 24,
  57788. 24,
  57789. 24,
  57790. 24,
  57791. 24,
  57792. 24,
  57793. 24,
  57794. 24,
  57795. 24,
  57796. 23,
  57797. 24,
  57798. 24,
  57799. 24,
  57800. 24,
  57801. 24,
  57802. 24,
  57803. 24,
  57804. 24,
  57805. 24,
  57806. 24,
  57807. 24,
  57808. 24,
  57809. 24,
  57810. 24,
  57811. 24,
  57812. 24,
  57813. 24,
  57814. 24,
  57815. 24,
  57816. 24,
  57817. 24,
  57818. 24,
  57819. 24,
  57820. 24,
  57821. 24,
  57822. 24,
  57823. 24,
  57824. 23,
  57825. 24,
  57826. 24,
  57827. 24,
  57828. 24,
  57829. 24,
  57830. 24,
  57831. 24,
  57832. 24,
  57833. 24,
  57834. 24,
  57835. 24,
  57836. 24,
  57837. 24,
  57838. 24,
  57839. 24,
  57840. 24,
  57841. 24,
  57842. 24,
  57843. 24,
  57844. 24,
  57845. 24,
  57846. 24,
  57847. 24,
  57848. 24,
  57849. 24,
  57850. 24,
  57851. 24,
  57852. 23,
  57853. 24,
  57854. 24,
  57855. 24,
  57856. 24,
  57857. 24,
  57858. 24,
  57859. 24,
  57860. 24,
  57861. 24,
  57862. 24,
  57863. 24,
  57864. 24,
  57865. 24,
  57866. 24,
  57867. 24,
  57868. 24,
  57869. 24,
  57870. 24,
  57871. 24,
  57872. 24,
  57873. 24,
  57874. 24,
  57875. 24,
  57876. 24,
  57877. 24,
  57878. 24,
  57879. 24,
  57880. 23,
  57881. 24,
  57882. 24,
  57883. 24,
  57884. 24,
  57885. 24,
  57886. 24,
  57887. 24,
  57888. 24,
  57889. 24,
  57890. 24,
  57891. 24,
  57892. 24,
  57893. 24,
  57894. 24,
  57895. 24,
  57896. 24,
  57897. 24,
  57898. 24,
  57899. 24,
  57900. 24,
  57901. 24,
  57902. 24,
  57903. 24,
  57904. 24,
  57905. 24,
  57906. 24,
  57907. 24,
  57908. 23,
  57909. 24,
  57910. 24,
  57911. 24,
  57912. 24,
  57913. 24,
  57914. 24,
  57915. 24,
  57916. 24,
  57917. 24,
  57918. 24,
  57919. 24,
  57920. 24,
  57921. 24,
  57922. 24,
  57923. 24,
  57924. 24,
  57925. 24,
  57926. 24,
  57927. 24,
  57928. 24,
  57929. 24,
  57930. 24,
  57931. 24,
  57932. 24,
  57933. 24,
  57934. 24,
  57935. 24,
  57936. 23,
  57937. 24,
  57938. 24,
  57939. 24,
  57940. 24,
  57941. 24,
  57942. 24,
  57943. 24,
  57944. 24,
  57945. 24,
  57946. 24,
  57947. 24,
  57948. 24,
  57949. 24,
  57950. 24,
  57951. 24,
  57952. 24,
  57953. 24,
  57954. 24,
  57955. 24,
  57956. 24,
  57957. 24,
  57958. 24,
  57959. 24,
  57960. 24,
  57961. 24,
  57962. 24,
  57963. 24,
  57964. 23,
  57965. 24,
  57966. 24,
  57967. 24,
  57968. 24,
  57969. 24,
  57970. 24,
  57971. 24,
  57972. 24,
  57973. 24,
  57974. 24,
  57975. 24,
  57976. 24,
  57977. 24,
  57978. 24,
  57979. 24,
  57980. 24,
  57981. 24,
  57982. 24,
  57983. 24,
  57984. 24,
  57985. 24,
  57986. 24,
  57987. 24,
  57988. 24,
  57989. 24,
  57990. 24,
  57991. 24,
  57992. 23,
  57993. 24,
  57994. 24,
  57995. 24,
  57996. 24,
  57997. 24,
  57998. 24,
  57999. 24,
  58000. 24,
  58001. 24,
  58002. 24,
  58003. 24,
  58004. 24,
  58005. 24,
  58006. 24,
  58007. 24,
  58008. 24,
  58009. 24,
  58010. 24,
  58011. 24,
  58012. 24,
  58013. 24,
  58014. 24,
  58015. 24,
  58016. 24,
  58017. 24,
  58018. 24,
  58019. 24,
  58020. 23,
  58021. 24,
  58022. 24,
  58023. 24,
  58024. 24,
  58025. 24,
  58026. 24,
  58027. 24,
  58028. 24,
  58029. 24,
  58030. 24,
  58031. 24,
  58032. 24,
  58033. 24,
  58034. 24,
  58035. 24,
  58036. 24,
  58037. 24,
  58038. 24,
  58039. 24,
  58040. 24,
  58041. 24,
  58042. 24,
  58043. 24,
  58044. 24,
  58045. 24,
  58046. 24,
  58047. 24,
  58048. 23,
  58049. 24,
  58050. 24,
  58051. 24,
  58052. 24,
  58053. 24,
  58054. 24,
  58055. 24,
  58056. 24,
  58057. 24,
  58058. 24,
  58059. 24,
  58060. 24,
  58061. 24,
  58062. 24,
  58063. 24,
  58064. 24,
  58065. 24,
  58066. 24,
  58067. 24,
  58068. 24,
  58069. 24,
  58070. 24,
  58071. 24,
  58072. 24,
  58073. 24,
  58074. 24,
  58075. 24,
  58076. 23,
  58077. 24,
  58078. 24,
  58079. 24,
  58080. 24,
  58081. 24,
  58082. 24,
  58083. 24,
  58084. 24,
  58085. 24,
  58086. 24,
  58087. 24,
  58088. 24,
  58089. 24,
  58090. 24,
  58091. 24,
  58092. 24,
  58093. 24,
  58094. 24,
  58095. 24,
  58096. 24,
  58097. 24,
  58098. 24,
  58099. 24,
  58100. 24,
  58101. 24,
  58102. 24,
  58103. 24,
  58104. 23,
  58105. 24,
  58106. 24,
  58107. 24,
  58108. 24,
  58109. 24,
  58110. 24,
  58111. 24,
  58112. 24,
  58113. 24,
  58114. 24,
  58115. 24,
  58116. 24,
  58117. 24,
  58118. 24,
  58119. 24,
  58120. 24,
  58121. 24,
  58122. 24,
  58123. 24,
  58124. 24,
  58125. 24,
  58126. 24,
  58127. 24,
  58128. 24,
  58129. 24,
  58130. 24,
  58131. 24,
  58132. 23,
  58133. 24,
  58134. 24,
  58135. 24,
  58136. 24,
  58137. 24,
  58138. 24,
  58139. 24,
  58140. 24,
  58141. 24,
  58142. 24,
  58143. 24,
  58144. 24,
  58145. 24,
  58146. 24,
  58147. 24,
  58148. 24,
  58149. 24,
  58150. 24,
  58151. 24,
  58152. 24,
  58153. 24,
  58154. 24,
  58155. 24,
  58156. 24,
  58157. 24,
  58158. 24,
  58159. 24,
  58160. 23,
  58161. 24,
  58162. 24,
  58163. 24,
  58164. 24,
  58165. 24,
  58166. 24,
  58167. 24,
  58168. 24,
  58169. 24,
  58170. 24,
  58171. 24,
  58172. 24,
  58173. 24,
  58174. 24,
  58175. 24,
  58176. 24,
  58177. 24,
  58178. 24,
  58179. 24,
  58180. 24,
  58181. 24,
  58182. 24,
  58183. 24,
  58184. 24,
  58185. 24,
  58186. 24,
  58187. 24,
  58188. 23,
  58189. 24,
  58190. 24,
  58191. 24,
  58192. 24,
  58193. 24,
  58194. 24,
  58195. 24,
  58196. 24,
  58197. 24,
  58198. 24,
  58199. 24,
  58200. 24,
  58201. 24,
  58202. 24,
  58203. 24,
  58204. 24,
  58205. 24,
  58206. 24,
  58207. 24,
  58208. 24,
  58209. 24,
  58210. 24,
  58211. 24,
  58212. 24,
  58213. 24,
  58214. 24,
  58215. 24,
  58216. 23,
  58217. 24,
  58218. 24,
  58219. 24,
  58220. 24,
  58221. 24,
  58222. 24,
  58223. 24,
  58224. 24,
  58225. 24,
  58226. 24,
  58227. 24,
  58228. 24,
  58229. 24,
  58230. 24,
  58231. 24,
  58232. 24,
  58233. 24,
  58234. 24,
  58235. 24,
  58236. 24,
  58237. 24,
  58238. 24,
  58239. 24,
  58240. 24,
  58241. 24,
  58242. 24,
  58243. 24,
  58244. 23,
  58245. 24,
  58246. 24,
  58247. 24,
  58248. 24,
  58249. 24,
  58250. 24,
  58251. 24,
  58252. 24,
  58253. 24,
  58254. 24,
  58255. 24,
  58256. 24,
  58257. 24,
  58258. 24,
  58259. 24,
  58260. 24,
  58261. 24,
  58262. 24,
  58263. 24,
  58264. 24,
  58265. 24,
  58266. 24,
  58267. 24,
  58268. 24,
  58269. 24,
  58270. 24,
  58271. 24,
  58272. 23,
  58273. 24,
  58274. 24,
  58275. 24,
  58276. 24,
  58277. 24,
  58278. 24,
  58279. 24,
  58280. 24,
  58281. 24,
  58282. 24,
  58283. 24,
  58284. 24,
  58285. 24,
  58286. 24,
  58287. 24,
  58288. 24,
  58289. 24,
  58290. 24,
  58291. 24,
  58292. 24,
  58293. 24,
  58294. 24,
  58295. 24,
  58296. 24,
  58297. 24,
  58298. 24,
  58299. 24,
  58300. 23,
  58301. 24,
  58302. 24,
  58303. 24,
  58304. 24,
  58305. 24,
  58306. 24,
  58307. 24,
  58308. 24,
  58309. 24,
  58310. 24,
  58311. 24,
  58312. 24,
  58313. 24,
  58314. 24,
  58315. 24,
  58316. 24,
  58317. 24,
  58318. 24,
  58319. 24,
  58320. 24,
  58321. 24,
  58322. 24,
  58323. 24,
  58324. 24,
  58325. 24,
  58326. 24,
  58327. 24,
  58328. 23,
  58329. 24,
  58330. 24,
  58331. 24,
  58332. 24,
  58333. 24,
  58334. 24,
  58335. 24,
  58336. 24,
  58337. 24,
  58338. 24,
  58339. 24,
  58340. 24,
  58341. 24,
  58342. 24,
  58343. 24,
  58344. 24,
  58345. 24,
  58346. 24,
  58347. 24,
  58348. 24,
  58349. 24,
  58350. 24,
  58351. 24,
  58352. 24,
  58353. 24,
  58354. 24,
  58355. 24,
  58356. 23,
  58357. 24,
  58358. 24,
  58359. 24,
  58360. 24,
  58361. 24,
  58362. 24,
  58363. 24,
  58364. 24,
  58365. 24,
  58366. 24,
  58367. 24,
  58368. 24,
  58369. 24,
  58370. 24,
  58371. 24,
  58372. 24,
  58373. 24,
  58374. 24,
  58375. 24,
  58376. 24,
  58377. 24,
  58378. 24,
  58379. 24,
  58380. 24,
  58381. 24,
  58382. 24,
  58383. 24,
  58384. 23,
  58385. 24,
  58386. 24,
  58387. 24,
  58388. 24,
  58389. 24,
  58390. 24,
  58391. 24,
  58392. 24,
  58393. 24,
  58394. 24,
  58395. 24,
  58396. 24,
  58397. 24,
  58398. 24,
  58399. 24,
  58400. 24,
  58401. 24,
  58402. 24,
  58403. 24,
  58404. 24,
  58405. 24,
  58406. 24,
  58407. 24,
  58408. 24,
  58409. 24,
  58410. 24,
  58411. 24,
  58412. 23,
  58413. 24,
  58414. 24,
  58415. 24,
  58416. 24,
  58417. 24,
  58418. 24,
  58419. 24,
  58420. 24,
  58421. 24,
  58422. 24,
  58423. 24,
  58424. 24,
  58425. 24,
  58426. 24,
  58427. 24,
  58428. 24,
  58429. 24,
  58430. 24,
  58431. 24,
  58432. 24,
  58433. 24,
  58434. 24,
  58435. 24,
  58436. 24,
  58437. 24,
  58438. 24,
  58439. 24,
  58440. 23,
  58441. 24,
  58442. 24,
  58443. 24,
  58444. 24,
  58445. 24,
  58446. 24,
  58447. 24,
  58448. 24,
  58449. 24,
  58450. 24,
  58451. 24,
  58452. 24,
  58453. 24,
  58454. 24,
  58455. 24,
  58456. 24,
  58457. 24,
  58458. 24,
  58459. 24,
  58460. 24,
  58461. 24,
  58462. 24,
  58463. 24,
  58464. 24,
  58465. 24,
  58466. 24,
  58467. 24,
  58468. 23,
  58469. 24,
  58470. 24,
  58471. 24,
  58472. 24,
  58473. 24,
  58474. 24,
  58475. 24,
  58476. 24,
  58477. 24,
  58478. 24,
  58479. 24,
  58480. 24,
  58481. 24,
  58482. 24,
  58483. 24,
  58484. 24,
  58485. 24,
  58486. 24,
  58487. 24,
  58488. 24,
  58489. 24,
  58490. 24,
  58491. 24,
  58492. 24,
  58493. 24,
  58494. 24,
  58495. 24,
  58496. 23,
  58497. 24,
  58498. 24,
  58499. 24,
  58500. 24,
  58501. 24,
  58502. 24,
  58503. 24,
  58504. 24,
  58505. 24,
  58506. 24,
  58507. 24,
  58508. 24,
  58509. 24,
  58510. 24,
  58511. 24,
  58512. 24,
  58513. 24,
  58514. 24,
  58515. 24,
  58516. 24,
  58517. 24,
  58518. 24,
  58519. 24,
  58520. 24,
  58521. 24,
  58522. 24,
  58523. 24,
  58524. 23,
  58525. 24,
  58526. 24,
  58527. 24,
  58528. 24,
  58529. 24,
  58530. 24,
  58531. 24,
  58532. 24,
  58533. 24,
  58534. 24,
  58535. 24,
  58536. 24,
  58537. 24,
  58538. 24,
  58539. 24,
  58540. 24,
  58541. 24,
  58542. 24,
  58543. 24,
  58544. 24,
  58545. 24,
  58546. 24,
  58547. 24,
  58548. 24,
  58549. 24,
  58550. 24,
  58551. 24,
  58552. 23,
  58553. 24,
  58554. 24,
  58555. 24,
  58556. 24,
  58557. 24,
  58558. 24,
  58559. 24,
  58560. 24,
  58561. 24,
  58562. 24,
  58563. 24,
  58564. 24,
  58565. 24,
  58566. 24,
  58567. 24,
  58568. 24,
  58569. 24,
  58570. 24,
  58571. 24,
  58572. 24,
  58573. 24,
  58574. 24,
  58575. 24,
  58576. 24,
  58577. 24,
  58578. 24,
  58579. 24,
  58580. 23,
  58581. 24,
  58582. 24,
  58583. 24,
  58584. 24,
  58585. 24,
  58586. 24,
  58587. 24,
  58588. 24,
  58589. 24,
  58590. 24,
  58591. 24,
  58592. 24,
  58593. 24,
  58594. 24,
  58595. 24,
  58596. 24,
  58597. 24,
  58598. 24,
  58599. 24,
  58600. 24,
  58601. 24,
  58602. 24,
  58603. 24,
  58604. 24,
  58605. 24,
  58606. 24,
  58607. 24,
  58608. 23,
  58609. 24,
  58610. 24,
  58611. 24,
  58612. 24,
  58613. 24,
  58614. 24,
  58615. 24,
  58616. 24,
  58617. 24,
  58618. 24,
  58619. 24,
  58620. 24,
  58621. 24,
  58622. 24,
  58623. 24,
  58624. 24,
  58625. 24,
  58626. 24,
  58627. 24,
  58628. 24,
  58629. 24,
  58630. 24,
  58631. 24,
  58632. 24,
  58633. 24,
  58634. 24,
  58635. 24,
  58636. 23,
  58637. 24,
  58638. 24,
  58639. 24,
  58640. 24,
  58641. 24,
  58642. 24,
  58643. 24,
  58644. 24,
  58645. 24,
  58646. 24,
  58647. 24,
  58648. 24,
  58649. 24,
  58650. 24,
  58651. 24,
  58652. 24,
  58653. 24,
  58654. 24,
  58655. 24,
  58656. 24,
  58657. 24,
  58658. 24,
  58659. 24,
  58660. 24,
  58661. 24,
  58662. 24,
  58663. 24,
  58664. 23,
  58665. 24,
  58666. 24,
  58667. 24,
  58668. 24,
  58669. 24,
  58670. 24,
  58671. 24,
  58672. 24,
  58673. 24,
  58674. 24,
  58675. 24,
  58676. 24,
  58677. 24,
  58678. 24,
  58679. 24,
  58680. 24,
  58681. 24,
  58682. 24,
  58683. 24,
  58684. 24,
  58685. 24,
  58686. 24,
  58687. 24,
  58688. 24,
  58689. 24,
  58690. 24,
  58691. 24,
  58692. 23,
  58693. 24,
  58694. 24,
  58695. 24,
  58696. 24,
  58697. 24,
  58698. 24,
  58699. 24,
  58700. 24,
  58701. 24,
  58702. 24,
  58703. 24,
  58704. 24,
  58705. 24,
  58706. 24,
  58707. 24,
  58708. 24,
  58709. 24,
  58710. 24,
  58711. 24,
  58712. 24,
  58713. 24,
  58714. 24,
  58715. 24,
  58716. 24,
  58717. 24,
  58718. 24,
  58719. 24,
  58720. 23,
  58721. 24,
  58722. 24,
  58723. 24,
  58724. 24,
  58725. 24,
  58726. 24,
  58727. 24,
  58728. 24,
  58729. 24,
  58730. 24,
  58731. 24,
  58732. 24,
  58733. 24,
  58734. 24,
  58735. 24,
  58736. 24,
  58737. 24,
  58738. 24,
  58739. 24,
  58740. 24,
  58741. 24,
  58742. 24,
  58743. 24,
  58744. 24,
  58745. 24,
  58746. 24,
  58747. 24,
  58748. 23,
  58749. 24,
  58750. 24,
  58751. 24,
  58752. 24,
  58753. 24,
  58754. 24,
  58755. 24,
  58756. 24,
  58757. 24,
  58758. 24,
  58759. 24,
  58760. 24,
  58761. 24,
  58762. 24,
  58763. 24,
  58764. 24,
  58765. 24,
  58766. 24,
  58767. 24,
  58768. 24,
  58769. 24,
  58770. 24,
  58771. 24,
  58772. 24,
  58773. 24,
  58774. 24,
  58775. 24,
  58776. 23,
  58777. 24,
  58778. 24,
  58779. 24,
  58780. 24,
  58781. 24,
  58782. 24,
  58783. 24,
  58784. 24,
  58785. 24,
  58786. 24,
  58787. 24,
  58788. 24,
  58789. 24,
  58790. 24,
  58791. 24,
  58792. 24,
  58793. 24,
  58794. 24,
  58795. 24,
  58796. 24,
  58797. 24,
  58798. 24,
  58799. 24,
  58800. 24,
  58801. 24,
  58802. 24,
  58803. 24,
  58804. 23,
  58805. 24,
  58806. 24,
  58807. 24,
  58808. 24,
  58809. 24,
  58810. 24,
  58811. 24,
  58812. 24,
  58813. 24,
  58814. 24,
  58815. 24,
  58816. 24,
  58817. 24,
  58818. 24,
  58819. 24,
  58820. 24,
  58821. 24,
  58822. 24,
  58823. 24,
  58824. 24,
  58825. 24,
  58826. 24,
  58827. 24,
  58828. 24,
  58829. 24,
  58830. 24,
  58831. 24,
  58832. 23,
  58833. 24,
  58834. 24,
  58835. 24,
  58836. 24,
  58837. 24,
  58838. 24,
  58839. 24,
  58840. 24,
  58841. 24,
  58842. 24,
  58843. 24,
  58844. 24,
  58845. 24,
  58846. 24,
  58847. 24,
  58848. 24,
  58849. 24,
  58850. 24,
  58851. 24,
  58852. 24,
  58853. 24,
  58854. 24,
  58855. 24,
  58856. 24,
  58857. 24,
  58858. 24,
  58859. 24,
  58860. 23,
  58861. 24,
  58862. 24,
  58863. 24,
  58864. 24,
  58865. 24,
  58866. 24,
  58867. 24,
  58868. 24,
  58869. 24,
  58870. 24,
  58871. 24,
  58872. 24,
  58873. 24,
  58874. 24,
  58875. 24,
  58876. 24,
  58877. 24,
  58878. 24,
  58879. 24,
  58880. 24,
  58881. 24,
  58882. 24,
  58883. 24,
  58884. 24,
  58885. 24,
  58886. 24,
  58887. 24,
  58888. 23,
  58889. 24,
  58890. 24,
  58891. 24,
  58892. 24,
  58893. 24,
  58894. 24,
  58895. 24,
  58896. 24,
  58897. 24,
  58898. 24,
  58899. 24,
  58900. 24,
  58901. 24,
  58902. 24,
  58903. 24,
  58904. 24,
  58905. 24,
  58906. 24,
  58907. 24,
  58908. 24,
  58909. 24,
  58910. 24,
  58911. 24,
  58912. 24,
  58913. 24,
  58914. 24,
  58915. 24,
  58916. 23,
  58917. 24,
  58918. 24,
  58919. 24,
  58920. 24,
  58921. 24,
  58922. 24,
  58923. 24,
  58924. 24,
  58925. 24,
  58926. 24,
  58927. 24,
  58928. 24,
  58929. 24,
  58930. 24,
  58931. 24,
  58932. 24,
  58933. 24,
  58934. 24,
  58935. 24,
  58936. 24,
  58937. 24,
  58938. 24,
  58939. 24,
  58940. 24,
  58941. 24,
  58942. 24,
  58943. 24,
  58944. 23,
  58945. 24,
  58946. 24,
  58947. 24,
  58948. 24,
  58949. 24,
  58950. 24,
  58951. 24,
  58952. 24,
  58953. 24,
  58954. 24,
  58955. 24,
  58956. 24,
  58957. 24,
  58958. 24,
  58959. 24,
  58960. 24,
  58961. 24,
  58962. 24,
  58963. 24,
  58964. 24,
  58965. 24,
  58966. 24,
  58967. 24,
  58968. 24,
  58969. 24,
  58970. 24,
  58971. 24,
  58972. 23,
  58973. 24,
  58974. 24,
  58975. 24,
  58976. 24,
  58977. 24,
  58978. 24,
  58979. 24,
  58980. 24,
  58981. 24,
  58982. 24,
  58983. 24,
  58984. 24,
  58985. 24,
  58986. 24,
  58987. 24,
  58988. 24,
  58989. 24,
  58990. 24,
  58991. 24,
  58992. 24,
  58993. 24,
  58994. 24,
  58995. 24,
  58996. 24,
  58997. 24,
  58998. 24,
  58999. 24,
  59000. 23,
  59001. 24,
  59002. 24,
  59003. 24,
  59004. 24,
  59005. 24,
  59006. 24,
  59007. 24,
  59008. 24,
  59009. 24,
  59010. 24,
  59011. 24,
  59012. 24,
  59013. 24,
  59014. 24,
  59015. 24,
  59016. 24,
  59017. 24,
  59018. 24,
  59019. 24,
  59020. 24,
  59021. 24,
  59022. 24,
  59023. 24,
  59024. 24,
  59025. 24,
  59026. 24,
  59027. 24,
  59028. 39,
  59029. 39,
  59030. 39,
  59031. 39,
  59032. 39,
  59033. 39,
  59034. 39,
  59035. 39,
  59036. 39,
  59037. 39,
  59038. 39,
  59039. 39,
  59040. 26,
  59041. 26,
  59042. 26,
  59043. 26,
  59044. 26,
  59045. 26,
  59046. 26,
  59047. 26,
  59048. 26,
  59049. 26,
  59050. 26,
  59051. 26,
  59052. 26,
  59053. 26,
  59054. 26,
  59055. 26,
  59056. 26,
  59057. 26,
  59058. 26,
  59059. 26,
  59060. 26,
  59061. 26,
  59062. 26,
  59063. 39,
  59064. 39,
  59065. 39,
  59066. 39,
  59067. 27,
  59068. 27,
  59069. 27,
  59070. 27,
  59071. 27,
  59072. 27,
  59073. 27,
  59074. 27,
  59075. 27,
  59076. 27,
  59077. 27,
  59078. 27,
  59079. 27,
  59080. 27,
  59081. 27,
  59082. 27,
  59083. 27,
  59084. 27,
  59085. 27,
  59086. 27,
  59087. 27,
  59088. 27,
  59089. 27,
  59090. 27,
  59091. 27,
  59092. 27,
  59093. 27,
  59094. 27,
  59095. 27,
  59096. 27,
  59097. 27,
  59098. 27,
  59099. 27,
  59100. 27,
  59101. 27,
  59102. 27,
  59103. 27,
  59104. 27,
  59105. 27,
  59106. 27,
  59107. 27,
  59108. 27,
  59109. 27,
  59110. 27,
  59111. 27,
  59112. 27,
  59113. 27,
  59114. 27,
  59115. 27,
  59116. 39,
  59117. 39,
  59118. 39,
  59119. 39,
  59120. 37,
  59121. 37,
  59122. 37,
  59123. 37,
  59124. 37,
  59125. 37,
  59126. 37,
  59127. 37,
  59128. 37,
  59129. 37,
  59130. 37,
  59131. 37,
  59132. 37,
  59133. 37,
  59134. 37,
  59135. 37,
  59136. 37,
  59137. 37,
  59138. 37,
  59139. 37,
  59140. 37,
  59141. 37,
  59142. 37,
  59143. 37,
  59144. 37,
  59145. 37,
  59146. 37,
  59147. 37,
  59148. 37,
  59149. 37,
  59150. 37,
  59151. 37,
  59152. 14,
  59153. 14,
  59154. 14,
  59155. 14,
  59156. 14,
  59157. 14,
  59158. 14,
  59159. 14,
  59160. 14,
  59161. 14,
  59162. 14,
  59163. 14,
  59164. 14,
  59165. 14,
  59166. 14,
  59167. 14,
  59168. 14,
  59169. 14,
  59170. 14,
  59171. 14,
  59172. 14,
  59173. 14,
  59174. 14,
  59175. 14,
  59176. 14,
  59177. 14,
  59178. 14,
  59179. 14,
  59180. 14,
  59181. 14,
  59182. 14,
  59183. 14,
  59184. 12,
  59185. 12,
  59186. 12,
  59187. 12,
  59188. 12,
  59189. 12,
  59190. 12,
  59191. 12,
  59192. 12,
  59193. 12,
  59194. 12,
  59195. 12,
  59196. 12,
  59197. 12,
  59198. 12,
  59199. 12,
  59200. 12,
  59201. 12,
  59202. 12,
  59203. 12,
  59204. 12,
  59205. 12,
  59206. 12,
  59207. 12,
  59208. 39,
  59209. 39,
  59210. 39,
  59211. 39,
  59212. 39,
  59213. 13,
  59214. 21,
  59215. 13,
  59216. 13,
  59217. 13,
  59218. 13,
  59219. 13,
  59220. 13,
  59221. 13,
  59222. 13,
  59223. 13,
  59224. 13,
  59225. 12,
  59226. 13,
  59227. 13,
  59228. 13,
  59229. 13,
  59230. 13,
  59231. 13,
  59232. 13,
  59233. 13,
  59234. 13,
  59235. 13,
  59236. 13,
  59237. 13,
  59238. 13,
  59239. 13,
  59240. 13,
  59241. 13,
  59242. 13,
  59243. 13,
  59244. 13,
  59245. 13,
  59246. 13,
  59247. 13,
  59248. 13,
  59249. 13,
  59250. 13,
  59251. 13,
  59252. 13,
  59253. 13,
  59254. 13,
  59255. 13,
  59256. 13,
  59257. 13,
  59258. 13,
  59259. 13,
  59260. 13,
  59261. 13,
  59262. 13,
  59263. 13,
  59264. 12,
  59265. 12,
  59266. 12,
  59267. 12,
  59268. 12,
  59269. 12,
  59270. 12,
  59271. 12,
  59272. 12,
  59273. 12,
  59274. 12,
  59275. 12,
  59276. 12,
  59277. 12,
  59278. 12,
  59279. 12,
  59280. 12,
  59281. 12,
  59282. 12,
  59283. 12,
  59284. 12,
  59285. 12,
  59286. 12,
  59287. 12,
  59288. 12,
  59289. 12,
  59290. 12,
  59291. 12,
  59292. 12,
  59293. 12,
  59294. 12,
  59295. 12,
  59296. 12,
  59297. 12,
  59298. 12,
  59299. 12,
  59300. 12,
  59301. 12,
  59302. 12,
  59303. 12,
  59304. 12,
  59305. 12,
  59306. 12,
  59307. 12,
  59308. 12,
  59309. 12,
  59310. 12,
  59311. 12,
  59312. 12,
  59313. 12,
  59314. 12,
  59315. 12,
  59316. 12,
  59317. 12,
  59318. 12,
  59319. 12,
  59320. 12,
  59321. 12,
  59322. 12,
  59323. 12,
  59324. 12,
  59325. 12,
  59326. 12,
  59327. 12,
  59328. 12,
  59329. 12,
  59330. 12,
  59331. 12,
  59332. 12,
  59333. 12,
  59334. 12,
  59335. 12,
  59336. 12,
  59337. 12,
  59338. 12,
  59339. 12,
  59340. 12,
  59341. 12,
  59342. 0,
  59343. 1,
  59344. 39,
  59345. 39,
  59346. 39,
  59347. 39,
  59348. 39,
  59349. 39,
  59350. 39,
  59351. 39,
  59352. 39,
  59353. 39,
  59354. 39,
  59355. 39,
  59356. 39,
  59357. 39,
  59358. 39,
  59359. 39,
  59360. 12,
  59361. 12,
  59362. 12,
  59363. 12,
  59364. 12,
  59365. 12,
  59366. 12,
  59367. 12,
  59368. 12,
  59369. 12,
  59370. 12,
  59371. 12,
  59372. 12,
  59373. 12,
  59374. 12,
  59375. 12,
  59376. 12,
  59377. 12,
  59378. 12,
  59379. 12,
  59380. 12,
  59381. 12,
  59382. 12,
  59383. 12,
  59384. 12,
  59385. 12,
  59386. 12,
  59387. 12,
  59388. 12,
  59389. 12,
  59390. 12,
  59391. 12,
  59392. 12,
  59393. 12,
  59394. 12,
  59395. 12,
  59396. 12,
  59397. 12,
  59398. 12,
  59399. 12,
  59400. 12,
  59401. 12,
  59402. 12,
  59403. 12,
  59404. 12,
  59405. 12,
  59406. 12,
  59407. 12,
  59408. 12,
  59409. 12,
  59410. 12,
  59411. 12,
  59412. 12,
  59413. 12,
  59414. 12,
  59415. 12,
  59416. 12,
  59417. 12,
  59418. 12,
  59419. 12,
  59420. 12,
  59421. 12,
  59422. 12,
  59423. 12,
  59424. 12,
  59425. 12,
  59426. 12,
  59427. 12,
  59428. 12,
  59429. 12,
  59430. 12,
  59431. 12,
  59432. 12,
  59433. 12,
  59434. 12,
  59435. 12,
  59436. 10,
  59437. 12,
  59438. 39,
  59439. 39,
  59440. 21,
  59441. 21,
  59442. 21,
  59443. 21,
  59444. 21,
  59445. 21,
  59446. 21,
  59447. 21,
  59448. 21,
  59449. 21,
  59450. 21,
  59451. 21,
  59452. 21,
  59453. 21,
  59454. 21,
  59455. 21,
  59456. 8,
  59457. 1,
  59458. 1,
  59459. 8,
  59460. 8,
  59461. 6,
  59462. 6,
  59463. 0,
  59464. 1,
  59465. 15,
  59466. 39,
  59467. 39,
  59468. 39,
  59469. 39,
  59470. 39,
  59471. 39,
  59472. 21,
  59473. 21,
  59474. 21,
  59475. 21,
  59476. 21,
  59477. 21,
  59478. 21,
  59479. 39,
  59480. 39,
  59481. 39,
  59482. 39,
  59483. 39,
  59484. 39,
  59485. 39,
  59486. 39,
  59487. 39,
  59488. 14,
  59489. 14,
  59490. 14,
  59491. 14,
  59492. 14,
  59493. 0,
  59494. 1,
  59495. 0,
  59496. 1,
  59497. 0,
  59498. 1,
  59499. 0,
  59500. 1,
  59501. 0,
  59502. 1,
  59503. 0,
  59504. 1,
  59505. 0,
  59506. 1,
  59507. 0,
  59508. 1,
  59509. 14,
  59510. 14,
  59511. 0,
  59512. 1,
  59513. 14,
  59514. 14,
  59515. 14,
  59516. 14,
  59517. 14,
  59518. 14,
  59519. 14,
  59520. 1,
  59521. 14,
  59522. 1,
  59523. 39,
  59524. 5,
  59525. 5,
  59526. 6,
  59527. 6,
  59528. 14,
  59529. 0,
  59530. 1,
  59531. 0,
  59532. 1,
  59533. 0,
  59534. 1,
  59535. 14,
  59536. 14,
  59537. 14,
  59538. 14,
  59539. 14,
  59540. 14,
  59541. 14,
  59542. 14,
  59543. 14,
  59544. 14,
  59545. 9,
  59546. 10,
  59547. 14,
  59548. 39,
  59549. 39,
  59550. 39,
  59551. 39,
  59552. 12,
  59553. 12,
  59554. 12,
  59555. 12,
  59556. 12,
  59557. 12,
  59558. 12,
  59559. 12,
  59560. 12,
  59561. 12,
  59562. 12,
  59563. 12,
  59564. 12,
  59565. 12,
  59566. 12,
  59567. 12,
  59568. 12,
  59569. 12,
  59570. 12,
  59571. 12,
  59572. 12,
  59573. 12,
  59574. 12,
  59575. 12,
  59576. 12,
  59577. 12,
  59578. 12,
  59579. 12,
  59580. 12,
  59581. 12,
  59582. 12,
  59583. 12,
  59584. 12,
  59585. 12,
  59586. 12,
  59587. 12,
  59588. 12,
  59589. 12,
  59590. 12,
  59591. 12,
  59592. 12,
  59593. 12,
  59594. 12,
  59595. 12,
  59596. 12,
  59597. 12,
  59598. 12,
  59599. 12,
  59600. 12,
  59601. 12,
  59602. 12,
  59603. 12,
  59604. 12,
  59605. 12,
  59606. 12,
  59607. 12,
  59608. 12,
  59609. 12,
  59610. 12,
  59611. 12,
  59612. 12,
  59613. 12,
  59614. 12,
  59615. 12,
  59616. 12,
  59617. 12,
  59618. 12,
  59619. 12,
  59620. 12,
  59621. 12,
  59622. 12,
  59623. 12,
  59624. 12,
  59625. 12,
  59626. 12,
  59627. 12,
  59628. 12,
  59629. 39,
  59630. 39,
  59631. 22,
  59632. 39,
  59633. 6,
  59634. 14,
  59635. 14,
  59636. 9,
  59637. 10,
  59638. 14,
  59639. 14,
  59640. 0,
  59641. 1,
  59642. 14,
  59643. 14,
  59644. 1,
  59645. 14,
  59646. 1,
  59647. 14,
  59648. 14,
  59649. 14,
  59650. 14,
  59651. 14,
  59652. 14,
  59653. 14,
  59654. 14,
  59655. 14,
  59656. 14,
  59657. 14,
  59658. 5,
  59659. 5,
  59660. 14,
  59661. 14,
  59662. 14,
  59663. 6,
  59664. 14,
  59665. 14,
  59666. 14,
  59667. 14,
  59668. 14,
  59669. 14,
  59670. 14,
  59671. 14,
  59672. 14,
  59673. 14,
  59674. 14,
  59675. 14,
  59676. 14,
  59677. 14,
  59678. 14,
  59679. 14,
  59680. 14,
  59681. 14,
  59682. 14,
  59683. 14,
  59684. 14,
  59685. 14,
  59686. 14,
  59687. 14,
  59688. 14,
  59689. 14,
  59690. 14,
  59691. 0,
  59692. 14,
  59693. 1,
  59694. 14,
  59695. 14,
  59696. 14,
  59697. 14,
  59698. 14,
  59699. 14,
  59700. 14,
  59701. 14,
  59702. 14,
  59703. 14,
  59704. 14,
  59705. 14,
  59706. 14,
  59707. 14,
  59708. 14,
  59709. 14,
  59710. 14,
  59711. 14,
  59712. 14,
  59713. 14,
  59714. 14,
  59715. 14,
  59716. 14,
  59717. 14,
  59718. 14,
  59719. 14,
  59720. 14,
  59721. 14,
  59722. 14,
  59723. 0,
  59724. 14,
  59725. 1,
  59726. 14,
  59727. 0,
  59728. 1,
  59729. 1,
  59730. 0,
  59731. 1,
  59732. 1,
  59733. 5,
  59734. 12,
  59735. 32,
  59736. 32,
  59737. 32,
  59738. 32,
  59739. 32,
  59740. 32,
  59741. 32,
  59742. 32,
  59743. 32,
  59744. 32,
  59745. 12,
  59746. 12,
  59747. 12,
  59748. 12,
  59749. 12,
  59750. 12,
  59751. 12,
  59752. 12,
  59753. 12,
  59754. 12,
  59755. 12,
  59756. 12,
  59757. 12,
  59758. 12,
  59759. 12,
  59760. 12,
  59761. 12,
  59762. 12,
  59763. 12,
  59764. 12,
  59765. 12,
  59766. 12,
  59767. 12,
  59768. 12,
  59769. 12,
  59770. 12,
  59771. 12,
  59772. 12,
  59773. 12,
  59774. 12,
  59775. 12,
  59776. 12,
  59777. 12,
  59778. 12,
  59779. 12,
  59780. 12,
  59781. 12,
  59782. 12,
  59783. 12,
  59784. 12,
  59785. 12,
  59786. 12,
  59787. 12,
  59788. 12,
  59789. 12,
  59790. 5,
  59791. 5,
  59792. 12,
  59793. 12,
  59794. 12,
  59795. 12,
  59796. 12,
  59797. 12,
  59798. 12,
  59799. 12,
  59800. 12,
  59801. 12,
  59802. 12,
  59803. 12,
  59804. 12,
  59805. 12,
  59806. 12,
  59807. 12,
  59808. 12,
  59809. 12,
  59810. 12,
  59811. 12,
  59812. 12,
  59813. 12,
  59814. 12,
  59815. 12,
  59816. 12,
  59817. 12,
  59818. 12,
  59819. 12,
  59820. 12,
  59821. 12,
  59822. 12,
  59823. 12,
  59824. 12,
  59825. 12,
  59826. 12,
  59827. 12,
  59828. 12,
  59829. 12,
  59830. 12,
  59831. 12,
  59832. 12,
  59833. 12,
  59834. 12,
  59835. 12,
  59836. 12,
  59837. 12,
  59838. 12,
  59839. 12,
  59840. 12,
  59841. 12,
  59842. 12,
  59843. 12,
  59844. 12,
  59845. 12,
  59846. 12,
  59847. 12,
  59848. 12,
  59849. 12,
  59850. 12,
  59851. 12,
  59852. 12,
  59853. 39,
  59854. 39,
  59855. 39,
  59856. 10,
  59857. 9,
  59858. 14,
  59859. 14,
  59860. 14,
  59861. 9,
  59862. 9,
  59863. 39,
  59864. 12,
  59865. 12,
  59866. 12,
  59867. 12,
  59868. 12,
  59869. 12,
  59870. 12,
  59871. 39,
  59872. 39,
  59873. 39,
  59874. 39,
  59875. 39,
  59876. 39,
  59877. 39,
  59878. 39,
  59879. 39,
  59880. 39,
  59881. 21,
  59882. 21,
  59883. 21,
  59884. 31,
  59885. 29,
  59886. 39,
  59887. 39,
  59888. 12,
  59889. 12,
  59890. 12,
  59891. 12,
  59892. 12,
  59893. 12,
  59894. 12,
  59895. 12,
  59896. 12,
  59897. 12,
  59898. 12,
  59899. 12,
  59900. 12,
  59901. 12,
  59902. 12,
  59903. 12,
  59904. 12,
  59905. 12,
  59906. 12,
  59907. 12,
  59908. 12,
  59909. 12,
  59910. 12,
  59911. 12,
  59912. 12,
  59913. 12,
  59914. 12,
  59915. 12,
  59916. 12,
  59917. 12,
  59918. 12,
  59919. 12,
  59920. 12,
  59921. 12,
  59922. 12,
  59923. 12,
  59924. 12,
  59925. 12,
  59926. 12,
  59927. 12,
  59928. 12,
  59929. 12,
  59930. 12,
  59931. 12,
  59932. 12,
  59933. 12,
  59934. 12,
  59935. 12,
  59936. 12,
  59937. 12,
  59938. 12,
  59939. 12,
  59940. 12,
  59941. 12,
  59942. 12,
  59943. 12,
  59944. 12,
  59945. 12,
  59946. 12,
  59947. 39,
  59948. 39,
  59949. 39,
  59950. 39,
  59951. 39,
  59952. 17,
  59953. 17,
  59954. 17,
  59955. 39,
  59956. 39,
  59957. 39,
  59958. 39,
  59959. 12,
  59960. 12,
  59961. 12,
  59962. 12,
  59963. 12,
  59964. 12,
  59965. 12,
  59966. 12,
  59967. 12,
  59968. 12,
  59969. 12,
  59970. 12,
  59971. 12,
  59972. 12,
  59973. 12,
  59974. 12,
  59975. 12,
  59976. 12,
  59977. 12,
  59978. 12,
  59979. 12,
  59980. 12,
  59981. 12,
  59982. 12,
  59983. 12,
  59984. 12,
  59985. 12,
  59986. 12,
  59987. 12,
  59988. 12,
  59989. 12,
  59990. 12,
  59991. 12,
  59992. 12,
  59993. 12,
  59994. 12,
  59995. 12,
  59996. 12,
  59997. 12,
  59998. 12,
  59999. 12,
  60000. 12,
  60001. 12,
  60002. 12,
  60003. 12,
  60004. 12,
  60005. 12,
  60006. 12,
  60007. 12,
  60008. 12,
  60009. 12,
  60010. 12,
  60011. 12,
  60012. 12,
  60013. 12,
  60014. 12,
  60015. 12,
  60016. 12,
  60017. 12,
  60018. 12,
  60019. 12,
  60020. 12,
  60021. 12,
  60022. 12,
  60023. 12,
  60024. 12,
  60025. 12,
  60026. 12,
  60027. 12,
  60028. 12,
  60029. 12,
  60030. 12,
  60031. 12,
  60032. 12,
  60033. 12,
  60034. 12,
  60035. 12,
  60036. 12,
  60037. 12,
  60038. 12,
  60039. 12,
  60040. 12,
  60041. 12,
  60042. 12,
  60043. 12,
  60044. 12,
  60045. 21,
  60046. 39,
  60047. 39,
  60048. 12,
  60049. 12,
  60050. 12,
  60051. 12,
  60052. 12,
  60053. 12,
  60054. 12,
  60055. 12,
  60056. 12,
  60057. 12,
  60058. 12,
  60059. 12,
  60060. 12,
  60061. 12,
  60062. 12,
  60063. 12,
  60064. 12,
  60065. 12,
  60066. 12,
  60067. 12,
  60068. 12,
  60069. 12,
  60070. 12,
  60071. 12,
  60072. 12,
  60073. 12,
  60074. 12,
  60075. 12,
  60076. 12,
  60077. 12,
  60078. 12,
  60079. 12,
  60080. 12,
  60081. 12,
  60082. 12,
  60083. 12,
  60084. 12,
  60085. 12,
  60086. 12,
  60087. 12,
  60088. 12,
  60089. 12,
  60090. 12,
  60091. 12,
  60092. 12,
  60093. 12,
  60094. 12,
  60095. 12,
  60096. 12,
  60097. 12,
  60098. 12,
  60099. 12,
  60100. 12,
  60101. 12,
  60102. 12,
  60103. 12,
  60104. 12,
  60105. 12,
  60106. 12,
  60107. 12,
  60108. 12,
  60109. 12,
  60110. 39,
  60111. 17,
  60112. 12,
  60113. 12,
  60114. 12,
  60115. 12,
  60116. 12,
  60117. 12,
  60118. 12,
  60119. 12,
  60120. 12,
  60121. 12,
  60122. 12,
  60123. 12,
  60124. 12,
  60125. 12,
  60126. 12,
  60127. 12,
  60128. 12,
  60129. 12,
  60130. 12,
  60131. 12,
  60132. 12,
  60133. 12,
  60134. 12,
  60135. 12,
  60136. 12,
  60137. 12,
  60138. 12,
  60139. 12,
  60140. 12,
  60141. 12,
  60142. 12,
  60143. 12,
  60144. 12,
  60145. 12,
  60146. 12,
  60147. 12,
  60148. 12,
  60149. 12,
  60150. 12,
  60151. 12,
  60152. 12,
  60153. 12,
  60154. 12,
  60155. 12,
  60156. 12,
  60157. 12,
  60158. 12,
  60159. 12,
  60160. 17,
  60161. 12,
  60162. 12,
  60163. 12,
  60164. 12,
  60165. 12,
  60166. 12,
  60167. 12,
  60168. 12,
  60169. 12,
  60170. 12,
  60171. 12,
  60172. 12,
  60173. 12,
  60174. 12,
  60175. 12,
  60176. 12,
  60177. 12,
  60178. 12,
  60179. 12,
  60180. 12,
  60181. 12,
  60182. 12,
  60183. 12,
  60184. 12,
  60185. 12,
  60186. 12,
  60187. 12,
  60188. 12,
  60189. 12,
  60190. 12,
  60191. 12,
  60192. 12,
  60193. 12,
  60194. 12,
  60195. 12,
  60196. 12,
  60197. 12,
  60198. 12,
  60199. 12,
  60200. 12,
  60201. 12,
  60202. 12,
  60203. 12,
  60204. 12,
  60205. 12,
  60206. 12,
  60207. 12,
  60208. 12,
  60209. 12,
  60210. 12,
  60211. 12,
  60212. 12,
  60213. 12,
  60214. 12,
  60215. 12,
  60216. 12,
  60217. 12,
  60218. 12,
  60219. 12,
  60220. 12,
  60221. 12,
  60222. 12,
  60223. 12,
  60224. 12,
  60225. 12,
  60226. 12,
  60227. 12,
  60228. 12,
  60229. 12,
  60230. 12,
  60231. 12,
  60232. 12,
  60233. 12,
  60234. 12,
  60235. 12,
  60236. 12,
  60237. 12,
  60238. 39,
  60239. 39,
  60240. 11,
  60241. 11,
  60242. 11,
  60243. 11,
  60244. 11,
  60245. 11,
  60246. 11,
  60247. 11,
  60248. 11,
  60249. 11,
  60250. 39,
  60251. 39,
  60252. 39,
  60253. 39,
  60254. 39,
  60255. 39,
  60256. 39,
  60257. 39,
  60258. 39,
  60259. 39,
  60260. 39,
  60261. 39,
  60262. 39,
  60263. 39,
  60264. 39,
  60265. 39,
  60266. 39,
  60267. 39,
  60268. 39,
  60269. 39,
  60270. 39,
  60271. 39,
  60272. 12,
  60273. 12,
  60274. 12,
  60275. 12,
  60276. 12,
  60277. 12,
  60278. 12,
  60279. 12,
  60280. 12,
  60281. 12,
  60282. 12,
  60283. 12,
  60284. 12,
  60285. 12,
  60286. 12,
  60287. 12,
  60288. 12,
  60289. 12,
  60290. 12,
  60291. 12,
  60292. 12,
  60293. 12,
  60294. 12,
  60295. 12,
  60296. 12,
  60297. 12,
  60298. 12,
  60299. 12,
  60300. 12,
  60301. 12,
  60302. 12,
  60303. 12,
  60304. 12,
  60305. 12,
  60306. 12,
  60307. 12,
  60308. 12,
  60309. 12,
  60310. 12,
  60311. 12,
  60312. 12,
  60313. 12,
  60314. 12,
  60315. 12,
  60316. 12,
  60317. 12,
  60318. 12,
  60319. 12,
  60320. 12,
  60321. 12,
  60322. 12,
  60323. 12,
  60324. 12,
  60325. 12,
  60326. 39,
  60327. 17,
  60328. 12,
  60329. 12,
  60330. 12,
  60331. 12,
  60332. 12,
  60333. 12,
  60334. 12,
  60335. 12,
  60336. 12,
  60337. 12,
  60338. 12,
  60339. 12,
  60340. 12,
  60341. 12,
  60342. 12,
  60343. 12,
  60344. 12,
  60345. 12,
  60346. 12,
  60347. 12,
  60348. 12,
  60349. 12,
  60350. 12,
  60351. 12,
  60352. 12,
  60353. 12,
  60354. 12,
  60355. 12,
  60356. 12,
  60357. 12,
  60358. 12,
  60359. 12,
  60360. 12,
  60361. 12,
  60362. 12,
  60363. 12,
  60364. 12,
  60365. 12,
  60366. 12,
  60367. 12,
  60368. 12,
  60369. 12,
  60370. 12,
  60371. 12,
  60372. 12,
  60373. 12,
  60374. 12,
  60375. 12,
  60376. 12,
  60377. 12,
  60378. 12,
  60379. 12,
  60380. 12,
  60381. 12,
  60382. 12,
  60383. 12,
  60384. 12,
  60385. 12,
  60386. 12,
  60387. 12,
  60388. 12,
  60389. 12,
  60390. 12,
  60391. 12,
  60392. 12,
  60393. 12,
  60394. 12,
  60395. 12,
  60396. 39,
  60397. 39,
  60398. 39,
  60399. 17,
  60400. 12,
  60401. 12,
  60402. 12,
  60403. 12,
  60404. 12,
  60405. 12,
  60406. 12,
  60407. 12,
  60408. 12,
  60409. 12,
  60410. 12,
  60411. 12,
  60412. 12,
  60413. 12,
  60414. 12,
  60415. 12,
  60416. 12,
  60417. 12,
  60418. 12,
  60419. 12,
  60420. 12,
  60421. 12,
  60422. 12,
  60423. 12,
  60424. 12,
  60425. 12,
  60426. 12,
  60427. 12,
  60428. 12,
  60429. 12,
  60430. 12,
  60431. 12,
  60432. 12,
  60433. 21,
  60434. 21,
  60435. 21,
  60436. 21,
  60437. 21,
  60438. 21,
  60439. 21,
  60440. 21,
  60441. 21,
  60442. 21,
  60443. 21,
  60444. 21,
  60445. 21,
  60446. 21,
  60447. 21,
  60448. 12,
  60449. 12,
  60450. 12,
  60451. 12,
  60452. 12,
  60453. 12,
  60454. 12,
  60455. 12,
  60456. 12,
  60457. 12,
  60458. 12,
  60459. 12,
  60460. 12,
  60461. 12,
  60462. 12,
  60463. 12,
  60464. 12,
  60465. 12,
  60466. 12,
  60467. 12,
  60468. 12,
  60469. 12,
  60470. 12,
  60471. 12,
  60472. 12,
  60473. 12,
  60474. 12,
  60475. 12,
  60476. 12,
  60477. 12,
  60478. 12,
  60479. 12,
  60480. 12,
  60481. 12,
  60482. 12,
  60483. 12,
  60484. 39,
  60485. 39,
  60486. 39,
  60487. 39,
  60488. 21,
  60489. 21,
  60490. 21,
  60491. 21,
  60492. 21,
  60493. 21,
  60494. 21,
  60495. 21,
  60496. 12,
  60497. 12,
  60498. 12,
  60499. 12,
  60500. 12,
  60501. 12,
  60502. 12,
  60503. 12,
  60504. 39,
  60505. 39,
  60506. 39,
  60507. 39,
  60508. 39,
  60509. 39,
  60510. 39,
  60511. 39,
  60512. 17,
  60513. 17,
  60514. 17,
  60515. 17,
  60516. 17,
  60517. 17,
  60518. 17,
  60519. 17,
  60520. 12,
  60521. 12,
  60522. 12,
  60523. 12,
  60524. 12,
  60525. 12,
  60526. 12,
  60527. 12,
  60528. 12,
  60529. 12,
  60530. 12,
  60531. 12,
  60532. 12,
  60533. 12,
  60534. 12,
  60535. 12,
  60536. 12,
  60537. 12,
  60538. 12,
  60539. 12,
  60540. 12,
  60541. 12,
  60542. 12,
  60543. 12,
  60544. 12,
  60545. 12,
  60546. 12,
  60547. 12,
  60548. 12,
  60549. 12,
  60550. 12,
  60551. 12,
  60552. 12,
  60553. 12,
  60554. 12,
  60555. 12,
  60556. 12,
  60557. 12,
  60558. 12,
  60559. 12,
  60560. 12,
  60561. 12,
  60562. 12,
  60563. 12,
  60564. 12,
  60565. 12,
  60566. 12,
  60567. 12,
  60568. 12,
  60569. 12,
  60570. 12,
  60571. 12,
  60572. 12,
  60573. 12,
  60574. 12,
  60575. 12,
  60576. 12,
  60577. 12,
  60578. 12,
  60579. 12,
  60580. 12,
  60581. 12,
  60582. 39,
  60583. 39,
  60584. 39,
  60585. 17,
  60586. 17,
  60587. 17,
  60588. 17,
  60589. 17,
  60590. 17,
  60591. 17,
  60592. 12,
  60593. 12,
  60594. 12,
  60595. 12,
  60596. 12,
  60597. 12,
  60598. 12,
  60599. 12,
  60600. 12,
  60601. 12,
  60602. 12,
  60603. 12,
  60604. 12,
  60605. 12,
  60606. 12,
  60607. 12,
  60608. 12,
  60609. 12,
  60610. 12,
  60611. 12,
  60612. 12,
  60613. 12,
  60614. 12,
  60615. 12,
  60616. 12,
  60617. 12,
  60618. 12,
  60619. 12,
  60620. 12,
  60621. 12,
  60622. 12,
  60623. 12,
  60624. 12,
  60625. 12,
  60626. 12,
  60627. 12,
  60628. 12,
  60629. 12,
  60630. 12,
  60631. 12,
  60632. 12,
  60633. 12,
  60634. 12,
  60635. 12,
  60636. 12,
  60637. 12,
  60638. 12,
  60639. 12,
  60640. 12,
  60641. 12,
  60642. 12,
  60643. 12,
  60644. 12,
  60645. 12,
  60646. 12,
  60647. 12,
  60648. 12,
  60649. 12,
  60650. 12,
  60651. 12,
  60652. 12,
  60653. 12,
  60654. 12,
  60655. 39,
  60656. 21,
  60657. 21,
  60658. 21,
  60659. 12,
  60660. 12,
  60661. 12,
  60662. 12,
  60663. 12,
  60664. 12,
  60665. 12,
  60666. 12,
  60667. 12,
  60668. 12,
  60669. 12,
  60670. 12,
  60671. 12,
  60672. 12,
  60673. 12,
  60674. 12,
  60675. 12,
  60676. 12,
  60677. 12,
  60678. 12,
  60679. 12,
  60680. 12,
  60681. 12,
  60682. 12,
  60683. 12,
  60684. 12,
  60685. 12,
  60686. 12,
  60687. 12,
  60688. 12,
  60689. 12,
  60690. 12,
  60691. 12,
  60692. 12,
  60693. 12,
  60694. 12,
  60695. 12,
  60696. 12,
  60697. 12,
  60698. 12,
  60699. 12,
  60700. 12,
  60701. 12,
  60702. 12,
  60703. 12,
  60704. 12,
  60705. 12,
  60706. 12,
  60707. 12,
  60708. 12,
  60709. 12,
  60710. 12,
  60711. 12,
  60712. 21,
  60713. 21,
  60714. 21,
  60715. 21,
  60716. 21,
  60717. 21,
  60718. 21,
  60719. 21,
  60720. 21,
  60721. 21,
  60722. 21,
  60723. 21,
  60724. 21,
  60725. 21,
  60726. 21,
  60727. 17,
  60728. 17,
  60729. 12,
  60730. 12,
  60731. 12,
  60732. 12,
  60733. 12,
  60734. 12,
  60735. 12,
  60736. 12,
  60737. 12,
  60738. 12,
  60739. 12,
  60740. 12,
  60741. 12,
  60742. 12,
  60743. 12,
  60744. 12,
  60745. 12,
  60746. 12,
  60747. 12,
  60748. 12,
  60749. 12,
  60750. 12,
  60751. 12,
  60752. 12,
  60753. 12,
  60754. 12,
  60755. 12,
  60756. 12,
  60757. 12,
  60758. 11,
  60759. 11,
  60760. 11,
  60761. 11,
  60762. 11,
  60763. 11,
  60764. 11,
  60765. 11,
  60766. 11,
  60767. 11,
  60768. 39,
  60769. 39,
  60770. 39,
  60771. 39,
  60772. 39,
  60773. 39,
  60774. 39,
  60775. 39,
  60776. 39,
  60777. 39,
  60778. 39,
  60779. 39,
  60780. 39,
  60781. 39,
  60782. 39,
  60783. 39,
  60784. 21,
  60785. 21,
  60786. 21,
  60787. 12,
  60788. 12,
  60789. 12,
  60790. 12,
  60791. 12,
  60792. 12,
  60793. 12,
  60794. 12,
  60795. 12,
  60796. 12,
  60797. 12,
  60798. 12,
  60799. 12,
  60800. 12,
  60801. 12,
  60802. 12,
  60803. 12,
  60804. 12,
  60805. 12,
  60806. 12,
  60807. 12,
  60808. 12,
  60809. 12,
  60810. 12,
  60811. 12,
  60812. 12,
  60813. 12,
  60814. 12,
  60815. 12,
  60816. 12,
  60817. 12,
  60818. 12,
  60819. 12,
  60820. 12,
  60821. 12,
  60822. 12,
  60823. 12,
  60824. 12,
  60825. 12,
  60826. 12,
  60827. 12,
  60828. 12,
  60829. 12,
  60830. 12,
  60831. 12,
  60832. 21,
  60833. 21,
  60834. 21,
  60835. 21,
  60836. 21,
  60837. 21,
  60838. 21,
  60839. 21,
  60840. 21,
  60841. 21,
  60842. 21,
  60843. 12,
  60844. 12,
  60845. 12,
  60846. 17,
  60847. 17,
  60848. 17,
  60849. 17,
  60850. 39,
  60851. 39,
  60852. 39,
  60853. 39,
  60854. 39,
  60855. 39,
  60856. 39,
  60857. 39,
  60858. 39,
  60859. 39,
  60860. 39,
  60861. 39,
  60862. 39,
  60863. 39,
  60864. 12,
  60865. 12,
  60866. 12,
  60867. 12,
  60868. 12,
  60869. 12,
  60870. 12,
  60871. 12,
  60872. 12,
  60873. 12,
  60874. 12,
  60875. 12,
  60876. 12,
  60877. 12,
  60878. 12,
  60879. 12,
  60880. 12,
  60881. 12,
  60882. 12,
  60883. 12,
  60884. 12,
  60885. 12,
  60886. 12,
  60887. 12,
  60888. 12,
  60889. 39,
  60890. 39,
  60891. 39,
  60892. 39,
  60893. 39,
  60894. 39,
  60895. 39,
  60896. 11,
  60897. 11,
  60898. 11,
  60899. 11,
  60900. 11,
  60901. 11,
  60902. 11,
  60903. 11,
  60904. 11,
  60905. 11,
  60906. 39,
  60907. 39,
  60908. 39,
  60909. 39,
  60910. 39,
  60911. 39,
  60912. 21,
  60913. 21,
  60914. 21,
  60915. 12,
  60916. 12,
  60917. 12,
  60918. 12,
  60919. 12,
  60920. 12,
  60921. 12,
  60922. 12,
  60923. 12,
  60924. 12,
  60925. 12,
  60926. 12,
  60927. 12,
  60928. 12,
  60929. 12,
  60930. 12,
  60931. 12,
  60932. 12,
  60933. 12,
  60934. 12,
  60935. 12,
  60936. 12,
  60937. 12,
  60938. 12,
  60939. 12,
  60940. 12,
  60941. 12,
  60942. 12,
  60943. 12,
  60944. 12,
  60945. 12,
  60946. 12,
  60947. 12,
  60948. 12,
  60949. 12,
  60950. 12,
  60951. 21,
  60952. 21,
  60953. 21,
  60954. 21,
  60955. 21,
  60956. 21,
  60957. 21,
  60958. 21,
  60959. 21,
  60960. 21,
  60961. 21,
  60962. 21,
  60963. 21,
  60964. 21,
  60965. 39,
  60966. 11,
  60967. 11,
  60968. 11,
  60969. 11,
  60970. 11,
  60971. 11,
  60972. 11,
  60973. 11,
  60974. 11,
  60975. 11,
  60976. 17,
  60977. 17,
  60978. 17,
  60979. 17,
  60980. 39,
  60981. 39,
  60982. 39,
  60983. 39,
  60984. 39,
  60985. 39,
  60986. 39,
  60987. 39,
  60988. 39,
  60989. 39,
  60990. 39,
  60991. 39,
  60992. 39,
  60993. 39,
  60994. 39,
  60995. 39,
  60996. 39,
  60997. 39,
  60998. 39,
  60999. 39,
  61000. 39,
  61001. 39,
  61002. 39,
  61003. 39,
  61004. 39,
  61005. 39,
  61006. 39,
  61007. 39,
  61008. 21,
  61009. 21,
  61010. 21,
  61011. 12,
  61012. 12,
  61013. 12,
  61014. 12,
  61015. 12,
  61016. 12,
  61017. 12,
  61018. 12,
  61019. 12,
  61020. 12,
  61021. 12,
  61022. 12,
  61023. 12,
  61024. 12,
  61025. 12,
  61026. 12,
  61027. 12,
  61028. 12,
  61029. 12,
  61030. 12,
  61031. 12,
  61032. 12,
  61033. 12,
  61034. 12,
  61035. 12,
  61036. 12,
  61037. 12,
  61038. 12,
  61039. 12,
  61040. 12,
  61041. 12,
  61042. 12,
  61043. 12,
  61044. 12,
  61045. 12,
  61046. 12,
  61047. 12,
  61048. 12,
  61049. 12,
  61050. 12,
  61051. 12,
  61052. 12,
  61053. 12,
  61054. 12,
  61055. 12,
  61056. 12,
  61057. 12,
  61058. 12,
  61059. 21,
  61060. 21,
  61061. 21,
  61062. 21,
  61063. 21,
  61064. 21,
  61065. 21,
  61066. 21,
  61067. 21,
  61068. 21,
  61069. 21,
  61070. 21,
  61071. 21,
  61072. 21,
  61073. 12,
  61074. 12,
  61075. 12,
  61076. 12,
  61077. 17,
  61078. 17,
  61079. 12,
  61080. 17,
  61081. 39,
  61082. 39,
  61083. 39,
  61084. 39,
  61085. 39,
  61086. 39,
  61087. 39,
  61088. 11,
  61089. 11,
  61090. 11,
  61091. 11,
  61092. 11,
  61093. 11,
  61094. 11,
  61095. 11,
  61096. 11,
  61097. 11,
  61098. 39,
  61099. 39,
  61100. 39,
  61101. 39,
  61102. 39,
  61103. 39,
  61104. 12,
  61105. 12,
  61106. 12,
  61107. 12,
  61108. 12,
  61109. 12,
  61110. 12,
  61111. 12,
  61112. 12,
  61113. 12,
  61114. 12,
  61115. 12,
  61116. 12,
  61117. 12,
  61118. 12,
  61119. 12,
  61120. 12,
  61121. 12,
  61122. 12,
  61123. 12,
  61124. 12,
  61125. 12,
  61126. 12,
  61127. 12,
  61128. 12,
  61129. 12,
  61130. 12,
  61131. 12,
  61132. 12,
  61133. 12,
  61134. 12,
  61135. 12,
  61136. 12,
  61137. 12,
  61138. 12,
  61139. 12,
  61140. 12,
  61141. 12,
  61142. 12,
  61143. 12,
  61144. 12,
  61145. 12,
  61146. 12,
  61147. 21,
  61148. 21,
  61149. 21,
  61150. 21,
  61151. 21,
  61152. 21,
  61153. 21,
  61154. 21,
  61155. 21,
  61156. 21,
  61157. 21,
  61158. 21,
  61159. 21,
  61160. 39,
  61161. 39,
  61162. 39,
  61163. 39,
  61164. 39,
  61165. 39,
  61166. 39,
  61167. 39,
  61168. 11,
  61169. 11,
  61170. 11,
  61171. 11,
  61172. 11,
  61173. 11,
  61174. 11,
  61175. 11,
  61176. 11,
  61177. 11,
  61178. 39,
  61179. 39,
  61180. 39,
  61181. 39,
  61182. 39,
  61183. 39,
  61184. 39,
  61185. 39,
  61186. 39,
  61187. 39,
  61188. 39,
  61189. 39,
  61190. 39,
  61191. 39,
  61192. 39,
  61193. 39,
  61194. 39,
  61195. 39,
  61196. 39,
  61197. 39,
  61198. 39,
  61199. 39,
  61200. 12,
  61201. 12,
  61202. 12,
  61203. 12,
  61204. 12,
  61205. 12,
  61206. 12,
  61207. 12,
  61208. 12,
  61209. 12,
  61210. 12,
  61211. 12,
  61212. 12,
  61213. 12,
  61214. 12,
  61215. 12,
  61216. 12,
  61217. 12,
  61218. 12,
  61219. 12,
  61220. 12,
  61221. 12,
  61222. 12,
  61223. 12,
  61224. 12,
  61225. 12,
  61226. 12,
  61227. 12,
  61228. 12,
  61229. 12,
  61230. 12,
  61231. 12,
  61232. 12,
  61233. 12,
  61234. 12,
  61235. 39,
  61236. 39,
  61237. 39,
  61238. 39,
  61239. 39,
  61240. 39,
  61241. 39,
  61242. 39,
  61243. 39,
  61244. 39,
  61245. 39,
  61246. 39,
  61247. 39,
  61248. 17,
  61249. 17,
  61250. 17,
  61251. 17,
  61252. 39,
  61253. 39,
  61254. 39,
  61255. 39,
  61256. 39,
  61257. 39,
  61258. 39,
  61259. 39,
  61260. 39,
  61261. 39,
  61262. 39,
  61263. 39,
  61264. 12,
  61265. 12,
  61266. 12,
  61267. 12,
  61268. 12,
  61269. 12,
  61270. 12,
  61271. 12,
  61272. 12,
  61273. 12,
  61274. 12,
  61275. 12,
  61276. 12,
  61277. 12,
  61278. 12,
  61279. 12,
  61280. 12,
  61281. 12,
  61282. 12,
  61283. 12,
  61284. 12,
  61285. 12,
  61286. 12,
  61287. 12,
  61288. 12,
  61289. 12,
  61290. 12,
  61291. 12,
  61292. 12,
  61293. 12,
  61294. 12,
  61295. 12,
  61296. 12,
  61297. 12,
  61298. 12,
  61299. 12,
  61300. 12,
  61301. 12,
  61302. 12,
  61303. 12,
  61304. 12,
  61305. 12,
  61306. 12,
  61307. 12,
  61308. 12,
  61309. 12,
  61310. 12,
  61311. 12,
  61312. 12,
  61313. 12,
  61314. 12,
  61315. 12,
  61316. 12,
  61317. 12,
  61318. 12,
  61319. 12,
  61320. 0,
  61321. 0,
  61322. 0,
  61323. 1,
  61324. 1,
  61325. 1,
  61326. 12,
  61327. 12,
  61328. 12,
  61329. 12,
  61330. 12,
  61331. 12,
  61332. 12,
  61333. 12,
  61334. 12,
  61335. 12,
  61336. 12,
  61337. 12,
  61338. 12,
  61339. 12,
  61340. 12,
  61341. 12,
  61342. 12,
  61343. 12,
  61344. 12,
  61345. 12,
  61346. 12,
  61347. 12,
  61348. 12,
  61349. 12,
  61350. 12,
  61351. 12,
  61352. 12,
  61353. 12,
  61354. 12,
  61355. 12,
  61356. 12,
  61357. 12,
  61358. 12,
  61359. 12,
  61360. 12,
  61361. 12,
  61362. 1,
  61363. 12,
  61364. 12,
  61365. 12,
  61366. 0,
  61367. 1,
  61368. 0,
  61369. 1,
  61370. 12,
  61371. 12,
  61372. 12,
  61373. 12,
  61374. 12,
  61375. 12,
  61376. 12,
  61377. 12,
  61378. 12,
  61379. 12,
  61380. 12,
  61381. 12,
  61382. 12,
  61383. 12,
  61384. 12,
  61385. 12,
  61386. 12,
  61387. 12,
  61388. 12,
  61389. 12,
  61390. 12,
  61391. 12,
  61392. 12,
  61393. 12,
  61394. 12,
  61395. 12,
  61396. 12,
  61397. 12,
  61398. 12,
  61399. 12,
  61400. 12,
  61401. 12,
  61402. 12,
  61403. 12,
  61404. 12,
  61405. 12,
  61406. 12,
  61407. 12,
  61408. 12,
  61409. 12,
  61410. 12,
  61411. 12,
  61412. 12,
  61413. 12,
  61414. 12,
  61415. 12,
  61416. 12,
  61417. 12,
  61418. 12,
  61419. 12,
  61420. 12,
  61421. 12,
  61422. 12,
  61423. 12,
  61424. 12,
  61425. 12,
  61426. 12,
  61427. 12,
  61428. 12,
  61429. 12,
  61430. 12,
  61431. 12,
  61432. 12,
  61433. 12,
  61434. 12,
  61435. 12,
  61436. 12,
  61437. 12,
  61438. 12,
  61439. 12,
  61440. 12,
  61441. 12,
  61442. 12,
  61443. 12,
  61444. 12,
  61445. 12,
  61446. 12,
  61447. 12,
  61448. 12,
  61449. 0,
  61450. 1,
  61451. 1,
  61452. 12,
  61453. 12,
  61454. 12,
  61455. 12,
  61456. 12,
  61457. 12,
  61458. 12,
  61459. 12,
  61460. 12,
  61461. 12,
  61462. 12,
  61463. 12,
  61464. 12,
  61465. 12,
  61466. 12,
  61467. 12,
  61468. 12,
  61469. 12,
  61470. 12,
  61471. 12,
  61472. 12,
  61473. 12,
  61474. 12,
  61475. 12,
  61476. 12,
  61477. 12,
  61478. 12,
  61479. 12,
  61480. 12,
  61481. 12,
  61482. 12,
  61483. 12,
  61484. 12,
  61485. 12,
  61486. 12,
  61487. 12,
  61488. 12,
  61489. 12,
  61490. 12,
  61491. 12,
  61492. 12,
  61493. 12,
  61494. 12,
  61495. 12,
  61496. 12,
  61497. 12,
  61498. 12,
  61499. 12,
  61500. 12,
  61501. 12,
  61502. 12,
  61503. 12,
  61504. 12,
  61505. 21,
  61506. 21,
  61507. 21,
  61508. 21,
  61509. 21,
  61510. 21,
  61511. 21,
  61512. 21,
  61513. 21,
  61514. 21,
  61515. 21,
  61516. 21,
  61517. 21,
  61518. 21,
  61519. 21,
  61520. 21,
  61521. 21,
  61522. 21,
  61523. 21,
  61524. 21,
  61525. 21,
  61526. 21,
  61527. 21,
  61528. 21,
  61529. 21,
  61530. 21,
  61531. 21,
  61532. 21,
  61533. 21,
  61534. 21,
  61535. 21,
  61536. 21,
  61537. 21,
  61538. 21,
  61539. 21,
  61540. 21,
  61541. 21,
  61542. 21,
  61543. 21,
  61544. 21,
  61545. 21,
  61546. 21,
  61547. 21,
  61548. 21,
  61549. 21,
  61550. 21,
  61551. 21,
  61552. 21,
  61553. 21,
  61554. 21,
  61555. 21,
  61556. 21,
  61557. 21,
  61558. 21,
  61559. 21,
  61560. 21,
  61561. 21,
  61562. 21,
  61563. 21,
  61564. 21,
  61565. 21,
  61566. 21,
  61567. 21,
  61568. 21,
  61569. 21,
  61570. 21,
  61571. 12,
  61572. 12,
  61573. 12,
  61574. 12,
  61575. 12,
  61576. 12,
  61577. 12,
  61578. 12,
  61579. 12,
  61580. 12,
  61581. 12,
  61582. 12,
  61583. 12,
  61584. 14,
  61585. 14,
  61586. 39,
  61587. 39,
  61588. 39,
  61589. 39,
  61590. 39,
  61591. 39,
  61592. 39,
  61593. 39,
  61594. 39,
  61595. 39,
  61596. 39,
  61597. 39,
  61598. 39,
  61599. 39,
  61600. 39,
  61601. 39,
  61602. 39,
  61603. 39,
  61604. 39,
  61605. 39,
  61606. 39,
  61607. 39,
  61608. 39,
  61609. 39,
  61610. 39,
  61611. 39,
  61612. 39,
  61613. 39,
  61614. 39,
  61615. 39,
  61616. 12,
  61617. 12,
  61618. 12,
  61619. 12,
  61620. 12,
  61621. 12,
  61622. 12,
  61623. 12,
  61624. 12,
  61625. 12,
  61626. 12,
  61627. 12,
  61628. 12,
  61629. 12,
  61630. 12,
  61631. 12,
  61632. 12,
  61633. 12,
  61634. 12,
  61635. 12,
  61636. 12,
  61637. 12,
  61638. 12,
  61639. 12,
  61640. 12,
  61641. 12,
  61642. 12,
  61643. 12,
  61644. 12,
  61645. 12,
  61646. 12,
  61647. 12,
  61648. 12,
  61649. 12,
  61650. 12,
  61651. 12,
  61652. 12,
  61653. 21,
  61654. 21,
  61655. 21,
  61656. 21,
  61657. 21,
  61658. 12,
  61659. 12,
  61660. 12,
  61661. 21,
  61662. 21,
  61663. 21,
  61664. 21,
  61665. 21,
  61666. 21,
  61667. 21,
  61668. 21,
  61669. 21,
  61670. 21,
  61671. 21,
  61672. 21,
  61673. 21,
  61674. 21,
  61675. 21,
  61676. 21,
  61677. 21,
  61678. 21,
  61679. 21,
  61680. 21,
  61681. 21,
  61682. 21,
  61683. 12,
  61684. 12,
  61685. 21,
  61686. 21,
  61687. 21,
  61688. 21,
  61689. 21,
  61690. 21,
  61691. 21,
  61692. 12,
  61693. 12,
  61694. 12,
  61695. 12,
  61696. 12,
  61697. 12,
  61698. 12,
  61699. 12,
  61700. 12,
  61701. 12,
  61702. 12,
  61703. 12,
  61704. 12,
  61705. 12,
  61706. 12,
  61707. 12,
  61708. 12,
  61709. 12,
  61710. 12,
  61711. 12,
  61712. 12,
  61713. 12,
  61714. 12,
  61715. 12,
  61716. 12,
  61717. 12,
  61718. 12,
  61719. 12,
  61720. 12,
  61721. 12,
  61722. 21,
  61723. 21,
  61724. 21,
  61725. 21,
  61726. 12,
  61727. 12,
  61728. 12,
  61729. 12,
  61730. 12,
  61731. 12,
  61732. 12,
  61733. 12,
  61734. 12,
  61735. 12,
  61736. 12,
  61737. 12,
  61738. 12,
  61739. 12,
  61740. 12,
  61741. 12,
  61742. 12,
  61743. 12,
  61744. 12,
  61745. 12,
  61746. 12,
  61747. 12,
  61748. 12,
  61749. 12,
  61750. 12,
  61751. 12,
  61752. 12,
  61753. 12,
  61754. 12,
  61755. 12,
  61756. 12,
  61757. 12,
  61758. 12,
  61759. 12,
  61760. 12,
  61761. 12,
  61762. 12,
  61763. 12,
  61764. 12,
  61765. 12,
  61766. 12,
  61767. 12,
  61768. 12,
  61769. 12,
  61770. 12,
  61771. 12,
  61772. 12,
  61773. 12,
  61774. 12,
  61775. 12,
  61776. 12,
  61777. 12,
  61778. 21,
  61779. 21,
  61780. 21,
  61781. 12,
  61782. 12,
  61783. 12,
  61784. 12,
  61785. 12,
  61786. 12,
  61787. 12,
  61788. 12,
  61789. 12,
  61790. 12,
  61791. 12,
  61792. 12,
  61793. 12,
  61794. 12,
  61795. 12,
  61796. 12,
  61797. 12,
  61798. 12,
  61799. 12,
  61800. 12,
  61801. 12,
  61802. 12,
  61803. 12,
  61804. 12,
  61805. 12,
  61806. 12,
  61807. 12,
  61808. 12,
  61809. 12,
  61810. 12,
  61811. 12,
  61812. 12,
  61813. 12,
  61814. 12,
  61815. 12,
  61816. 12,
  61817. 12,
  61818. 12,
  61819. 12,
  61820. 12,
  61821. 12,
  61822. 12,
  61823. 12,
  61824. 12,
  61825. 12,
  61826. 12,
  61827. 12,
  61828. 12,
  61829. 12,
  61830. 12,
  61831. 12,
  61832. 12,
  61833. 12,
  61834. 12,
  61835. 12,
  61836. 12,
  61837. 12,
  61838. 12,
  61839. 12,
  61840. 12,
  61841. 12,
  61842. 12,
  61843. 12,
  61844. 12,
  61845. 12,
  61846. 12,
  61847. 12,
  61848. 12,
  61849. 12,
  61850. 12,
  61851. 12,
  61852. 39,
  61853. 39,
  61854. 11,
  61855. 11,
  61856. 11,
  61857. 11,
  61858. 11,
  61859. 11,
  61860. 11,
  61861. 11,
  61862. 11,
  61863. 11,
  61864. 11,
  61865. 11,
  61866. 11,
  61867. 11,
  61868. 11,
  61869. 11,
  61870. 11,
  61871. 11,
  61872. 11,
  61873. 11,
  61874. 11,
  61875. 11,
  61876. 11,
  61877. 11,
  61878. 11,
  61879. 11,
  61880. 11,
  61881. 11,
  61882. 11,
  61883. 11,
  61884. 11,
  61885. 11,
  61886. 11,
  61887. 11,
  61888. 11,
  61889. 11,
  61890. 11,
  61891. 11,
  61892. 11,
  61893. 11,
  61894. 11,
  61895. 11,
  61896. 11,
  61897. 11,
  61898. 11,
  61899. 11,
  61900. 11,
  61901. 11,
  61902. 11,
  61903. 11,
  61904. 12,
  61905. 12,
  61906. 12,
  61907. 12,
  61908. 12,
  61909. 12,
  61910. 12,
  61911. 12,
  61912. 12,
  61913. 12,
  61914. 12,
  61915. 12,
  61916. 12,
  61917. 12,
  61918. 12,
  61919. 12,
  61920. 12,
  61921. 12,
  61922. 12,
  61923. 12,
  61924. 12,
  61925. 12,
  61926. 12,
  61927. 12,
  61928. 12,
  61929. 12,
  61930. 12,
  61931. 12,
  61932. 12,
  61933. 12,
  61934. 12,
  61935. 12,
  61936. 12,
  61937. 12,
  61938. 12,
  61939. 12,
  61940. 12,
  61941. 12,
  61942. 12,
  61943. 12,
  61944. 12,
  61945. 12,
  61946. 12,
  61947. 12,
  61948. 12,
  61949. 12,
  61950. 12,
  61951. 12,
  61952. 12,
  61953. 12,
  61954. 39,
  61955. 39,
  61956. 39,
  61957. 39,
  61958. 39,
  61959. 39,
  61960. 39,
  61961. 39,
  61962. 39,
  61963. 39,
  61964. 39,
  61965. 39,
  61966. 39,
  61967. 39,
  61968. 14,
  61969. 14,
  61970. 14,
  61971. 14,
  61972. 14,
  61973. 14,
  61974. 14,
  61975. 14,
  61976. 14,
  61977. 14,
  61978. 14,
  61979. 14,
  61980. 14,
  61981. 14,
  61982. 14,
  61983. 14,
  61984. 14,
  61985. 14,
  61986. 14,
  61987. 14,
  61988. 14,
  61989. 14,
  61990. 14,
  61991. 14,
  61992. 14,
  61993. 14,
  61994. 14,
  61995. 14,
  61996. 14,
  61997. 14,
  61998. 14,
  61999. 14,
  62000. 29,
  62001. 29,
  62002. 29,
  62003. 29,
  62004. 29,
  62005. 29,
  62006. 29,
  62007. 29,
  62008. 29,
  62009. 29,
  62010. 29,
  62011. 29,
  62012. 29,
  62013. 29,
  62014. 29,
  62015. 29,
  62016. 29,
  62017. 29,
  62018. 29,
  62019. 29,
  62020. 29,
  62021. 29,
  62022. 29,
  62023. 29,
  62024. 29,
  62025. 29,
  62026. 29,
  62027. 29,
  62028. 29,
  62029. 29,
  62030. 29,
  62031. 29,
  62032. 29,
  62033. 29,
  62034. 29,
  62035. 29,
  62036. 29,
  62037. 29,
  62038. 29,
  62039. 29,
  62040. 29,
  62041. 29,
  62042. 29,
  62043. 29,
  62044. 29,
  62045. 29,
  62046. 12,
  62047. 39,
  62048. 29,
  62049. 29,
  62050. 29,
  62051. 29,
  62052. 29,
  62053. 29,
  62054. 29,
  62055. 29,
  62056. 29,
  62057. 29,
  62058. 29,
  62059. 29,
  62060. 29,
  62061. 29,
  62062. 29,
  62063. 29,
  62064. 29,
  62065. 29,
  62066. 29,
  62067. 29,
  62068. 29,
  62069. 29,
  62070. 29,
  62071. 29,
  62072. 29,
  62073. 29,
  62074. 29,
  62075. 29,
  62076. 29,
  62077. 29,
  62078. 29,
  62079. 29,
  62080. 29,
  62081. 29,
  62082. 29,
  62083. 29,
  62084. 29,
  62085. 29,
  62086. 29,
  62087. 29,
  62088. 29,
  62089. 29,
  62090. 29,
  62091. 29,
  62092. 29,
  62093. 29,
  62094. 29,
  62095. 29,
  62096. 29,
  62097. 29,
  62098. 29,
  62099. 29,
  62100. 29,
  62101. 29,
  62102. 29,
  62103. 29,
  62104. 29,
  62105. 29,
  62106. 12,
  62107. 12,
  62108. 39,
  62109. 39,
  62110. 39,
  62111. 39,
  62112. 29,
  62113. 29,
  62114. 29,
  62115. 29,
  62116. 29,
  62117. 29,
  62118. 29,
  62119. 29,
  62120. 29,
  62121. 29,
  62122. 29,
  62123. 29,
  62124. 29,
  62125. 29,
  62126. 29,
  62127. 29,
  62128. 29,
  62129. 29,
  62130. 29,
  62131. 29,
  62132. 29,
  62133. 29,
  62134. 29,
  62135. 29,
  62136. 29,
  62137. 29,
  62138. 29,
  62139. 29,
  62140. 29,
  62141. 29,
  62142. 29,
  62143. 29,
  62144. 29,
  62145. 29,
  62146. 29,
  62147. 29,
  62148. 29,
  62149. 29,
  62150. 29,
  62151. 29,
  62152. 29,
  62153. 29,
  62154. 29,
  62155. 39,
  62156. 39,
  62157. 39,
  62158. 39,
  62159. 39,
  62160. 39,
  62161. 39,
  62162. 39,
  62163. 39,
  62164. 39,
  62165. 39,
  62166. 28,
  62167. 28,
  62168. 28,
  62169. 28,
  62170. 28,
  62171. 28,
  62172. 28,
  62173. 28,
  62174. 28,
  62175. 28,
  62176. 28,
  62177. 28,
  62178. 28,
  62179. 28,
  62180. 28,
  62181. 28,
  62182. 28,
  62183. 28,
  62184. 28,
  62185. 28,
  62186. 28,
  62187. 28,
  62188. 28,
  62189. 28,
  62190. 28,
  62191. 28,
  62192. 14,
  62193. 14,
  62194. 14,
  62195. 14,
  62196. 14,
  62197. 14,
  62198. 14,
  62199. 14,
  62200. 14,
  62201. 14,
  62202. 14,
  62203. 14,
  62204. 14,
  62205. 14,
  62206. 14,
  62207. 14,
  62208. 14,
  62209. 14,
  62210. 14,
  62211. 14,
  62212. 14,
  62213. 14,
  62214. 14,
  62215. 14,
  62216. 14,
  62217. 14,
  62218. 14,
  62219. 14,
  62220. 14,
  62221. 14,
  62222. 14,
  62223. 14,
  62224. 14,
  62225. 14,
  62226. 14,
  62227. 14,
  62228. 14,
  62229. 14,
  62230. 14,
  62231. 14,
  62232. 14,
  62233. 14,
  62234. 14,
  62235. 14,
  62236. 14,
  62237. 14,
  62238. 14,
  62239. 14,
  62240. 14,
  62241. 14,
  62242. 14,
  62243. 14,
  62244. 14,
  62245. 12,
  62246. 12,
  62247. 14,
  62248. 14,
  62249. 14,
  62250. 14,
  62251. 14,
  62252. 12,
  62253. 14,
  62254. 14,
  62255. 14,
  62256. 14,
  62257. 14,
  62258. 14,
  62259. 14,
  62260. 14,
  62261. 14,
  62262. 14,
  62263. 14,
  62264. 14,
  62265. 14,
  62266. 14,
  62267. 14,
  62268. 14,
  62269. 14,
  62270. 14,
  62271. 14,
  62272. 14,
  62273. 14,
  62274. 14,
  62275. 14,
  62276. 14,
  62277. 14,
  62278. 14,
  62279. 14,
  62280. 14,
  62281. 14,
  62282. 14,
  62283. 14,
  62284. 14,
  62285. 14,
  62286. 14,
  62287. 14,
  62288. 12,
  62289. 14,
  62290. 12,
  62291. 14,
  62292. 12,
  62293. 14,
  62294. 14,
  62295. 14,
  62296. 14,
  62297. 14,
  62298. 14,
  62299. 14,
  62300. 14,
  62301. 14,
  62302. 14,
  62303. 12,
  62304. 14,
  62305. 12,
  62306. 12,
  62307. 14,
  62308. 14,
  62309. 14,
  62310. 14,
  62311. 14,
  62312. 14,
  62313. 14,
  62314. 14,
  62315. 14,
  62316. 14,
  62317. 14,
  62318. 14,
  62319. 14,
  62320. 14,
  62321. 14,
  62322. 14,
  62323. 14,
  62324. 14,
  62325. 14,
  62326. 14,
  62327. 14,
  62328. 14,
  62329. 14,
  62330. 14,
  62331. 14,
  62332. 14,
  62333. 14,
  62334. 14,
  62335. 14,
  62336. 14,
  62337. 14,
  62338. 14,
  62339. 14,
  62340. 14,
  62341. 14,
  62342. 14,
  62343. 14,
  62344. 14,
  62345. 14,
  62346. 14,
  62347. 14,
  62348. 14,
  62349. 14,
  62350. 14,
  62351. 14,
  62352. 14,
  62353. 14,
  62354. 14,
  62355. 14,
  62356. 14,
  62357. 14,
  62358. 14,
  62359. 14,
  62360. 14,
  62361. 14,
  62362. 14,
  62363. 14,
  62364. 14,
  62365. 14,
  62366. 14,
  62367. 14,
  62368. 14,
  62369. 14,
  62370. 14,
  62371. 14,
  62372. 14,
  62373. 14,
  62374. 14,
  62375. 14,
  62376. 14,
  62377. 14,
  62378. 14,
  62379. 14,
  62380. 14,
  62381. 39,
  62382. 39,
  62383. 39,
  62384. 12,
  62385. 12,
  62386. 12,
  62387. 12,
  62388. 12,
  62389. 12,
  62390. 12,
  62391. 14,
  62392. 14,
  62393. 14,
  62394. 14,
  62395. 14,
  62396. 14,
  62397. 14,
  62398. 14,
  62399. 14,
  62400. 14,
  62401. 14,
  62402. 14,
  62403. 14,
  62404. 14,
  62405. 14,
  62406. 14,
  62407. 12,
  62408. 12,
  62409. 12,
  62410. 12,
  62411. 12,
  62412. 12,
  62413. 12,
  62414. 12,
  62415. 12,
  62416. 12,
  62417. 12,
  62418. 12,
  62419. 12,
  62420. 12,
  62421. 14,
  62422. 14,
  62423. 14,
  62424. 14,
  62425. 14,
  62426. 14,
  62427. 14,
  62428. 14,
  62429. 14,
  62430. 14,
  62431. 14,
  62432. 14,
  62433. 14,
  62434. 12,
  62435. 12,
  62436. 12,
  62437. 12,
  62438. 12,
  62439. 12,
  62440. 12,
  62441. 12,
  62442. 12,
  62443. 12,
  62444. 12,
  62445. 12,
  62446. 12,
  62447. 12,
  62448. 12,
  62449. 12,
  62450. 12,
  62451. 12,
  62452. 39,
  62453. 39,
  62454. 39,
  62455. 39,
  62456. 39,
  62457. 39,
  62458. 39,
  62459. 39,
  62460. 39,
  62461. 39,
  62462. 39,
  62463. 39,
  62464. 14,
  62465. 14,
  62466. 14,
  62467. 14,
  62468. 14,
  62469. 14,
  62470. 14,
  62471. 14,
  62472. 14,
  62473. 14,
  62474. 14,
  62475. 14,
  62476. 14,
  62477. 14,
  62478. 14,
  62479. 14,
  62480. 14,
  62481. 14,
  62482. 14,
  62483. 14,
  62484. 14,
  62485. 14,
  62486. 14,
  62487. 14,
  62488. 14,
  62489. 14,
  62490. 14,
  62491. 14,
  62492. 14,
  62493. 14,
  62494. 14,
  62495. 14,
  62496. 14,
  62497. 14,
  62498. 14,
  62499. 14,
  62500. 14,
  62501. 14,
  62502. 14,
  62503. 14,
  62504. 14,
  62505. 14,
  62506. 14,
  62507. 14,
  62508. 14,
  62509. 14,
  62510. 14,
  62511. 14,
  62512. 14,
  62513. 14,
  62514. 14,
  62515. 14,
  62516. 14,
  62517. 14,
  62518. 39,
  62519. 39,
  62520. 39,
  62521. 39,
  62522. 39,
  62523. 39,
  62524. 39,
  62525. 39,
  62526. 39,
  62527. 39,
  62528. 39,
  62529. 39,
  62530. 39,
  62531. 39,
  62532. 39,
  62533. 39,
  62534. 39,
  62535. 39,
  62536. 39,
  62537. 39,
  62538. 39,
  62539. 39,
  62540. 39,
  62541. 39,
  62542. 39,
  62543. 39,
  62544. 12,
  62545. 12,
  62546. 12,
  62547. 12,
  62548. 12,
  62549. 12,
  62550. 12,
  62551. 12,
  62552. 12,
  62553. 12,
  62554. 12,
  62555. 12,
  62556. 12,
  62557. 12,
  62558. 12,
  62559. 12,
  62560. 12,
  62561. 12,
  62562. 12,
  62563. 12,
  62564. 12,
  62565. 12,
  62566. 12,
  62567. 12,
  62568. 12,
  62569. 12,
  62570. 12,
  62571. 12,
  62572. 12,
  62573. 12,
  62574. 12,
  62575. 12,
  62576. 12,
  62577. 12,
  62578. 12,
  62579. 12,
  62580. 12,
  62581. 12,
  62582. 12,
  62583. 12,
  62584. 12,
  62585. 12,
  62586. 12,
  62587. 12,
  62588. 12,
  62589. 12,
  62590. 12,
  62591. 12,
  62592. 12,
  62593. 12,
  62594. 12,
  62595. 12,
  62596. 39,
  62597. 39,
  62598. 39,
  62599. 39,
  62600. 39,
  62601. 39,
  62602. 39,
  62603. 39,
  62604. 39,
  62605. 39,
  62606. 39,
  62607. 39,
  62608. 14,
  62609. 14,
  62610. 14,
  62611. 14,
  62612. 14,
  62613. 14,
  62614. 14,
  62615. 14,
  62616. 14,
  62617. 14,
  62618. 14,
  62619. 14,
  62620. 14,
  62621. 14,
  62622. 14,
  62623. 14,
  62624. 14,
  62625. 14,
  62626. 14,
  62627. 14,
  62628. 14,
  62629. 14,
  62630. 14,
  62631. 14,
  62632. 14,
  62633. 14,
  62634. 14,
  62635. 14,
  62636. 14,
  62637. 14,
  62638. 14,
  62639. 14,
  62640. 14,
  62641. 14,
  62642. 14,
  62643. 14,
  62644. 14,
  62645. 14,
  62646. 14,
  62647. 14,
  62648. 14,
  62649. 14,
  62650. 14,
  62651. 14,
  62652. 14,
  62653. 14,
  62654. 14,
  62655. 14,
  62656. 14,
  62657. 14,
  62658. 14,
  62659. 14,
  62660. 14,
  62661. 14,
  62662. 14,
  62663. 14,
  62664. 14,
  62665. 14,
  62666. 14,
  62667. 14,
  62668. 14,
  62669. 14,
  62670. 39,
  62671. 39,
  62672. 39,
  62673. 21,
  62674. 21,
  62675. 21,
  62676. 21,
  62677. 21,
  62678. 21,
  62679. 21,
  62680. 21,
  62681. 21,
  62682. 21,
  62683. 21,
  62684. 21,
  62685. 21,
  62686. 21,
  62687. 21,
  62688. 21,
  62689. 21,
  62690. 21,
  62691. 21,
  62692. 21,
  62693. 21,
  62694. 21,
  62695. 21,
  62696. 21,
  62697. 21,
  62698. 21,
  62699. 21,
  62700. 21,
  62701. 21,
  62702. 21,
  62703. 21,
  62704. 21,
  62705. 21,
  62706. 21,
  62707. 21,
  62708. 21,
  62709. 21,
  62710. 21,
  62711. 21,
  62712. 21,
  62713. 21,
  62714. 21,
  62715. 21,
  62716. 21,
  62717. 21,
  62718. 21,
  62719. 21,
  62720. 21,
  62721. 21,
  62722. 21,
  62723. 21,
  62724. 21,
  62725. 21,
  62726. 21,
  62727. 21,
  62728. 21,
  62729. 21,
  62730. 21,
  62731. 21,
  62732. 21,
  62733. 21,
  62734. 21,
  62735. 21,
  62736. 21,
  62737. 21,
  62738. 21,
  62739. 21,
  62740. 21,
  62741. 21,
  62742. 21,
  62743. 21,
  62744. 21,
  62745. 21,
  62746. 21,
  62747. 21,
  62748. 21,
  62749. 21,
  62750. 21,
  62751. 21,
  62752. 39,
  62753. 39,
  62754. 39,
  62755. 39,
  62756. 39,
  62757. 39,
  62758. 39,
  62759. 39,
  62760. 39,
  62761. 39,
  62762. 39,
  62763. 39,
  62764. 39,
  62765. 39,
  62766. 39,
  62767. 39,
  62768. 39,
  62769. 39,
  62770. 39,
  62771. 39
  62772. ],
  62773. "highStart": 919552,
  62774. "errorValue": 0
  62775. };
  62776. /***/ },
  62777. /* 94 */
  62778. /***/ function(module, exports) {
  62779. // Generated by CoffeeScript 1.7.1
  62780. (function() {
  62781. var AI, AL, B2, BA, BB, BK, CB, CJ, CL, CM, CP, CR, EX, GL, H2, H3, HL, HY, ID, IN, IS, JL, JT, JV, LF, NL, NS, NU, OP, PO, PR, QU, RI, SA, SG, SP, SY, WJ, XX, ZW;
  62782. exports.OP = OP = 0;
  62783. exports.CL = CL = 1;
  62784. exports.CP = CP = 2;
  62785. exports.QU = QU = 3;
  62786. exports.GL = GL = 4;
  62787. exports.NS = NS = 5;
  62788. exports.EX = EX = 6;
  62789. exports.SY = SY = 7;
  62790. exports.IS = IS = 8;
  62791. exports.PR = PR = 9;
  62792. exports.PO = PO = 10;
  62793. exports.NU = NU = 11;
  62794. exports.AL = AL = 12;
  62795. exports.HL = HL = 13;
  62796. exports.ID = ID = 14;
  62797. exports.IN = IN = 15;
  62798. exports.HY = HY = 16;
  62799. exports.BA = BA = 17;
  62800. exports.BB = BB = 18;
  62801. exports.B2 = B2 = 19;
  62802. exports.ZW = ZW = 20;
  62803. exports.CM = CM = 21;
  62804. exports.WJ = WJ = 22;
  62805. exports.H2 = H2 = 23;
  62806. exports.H3 = H3 = 24;
  62807. exports.JL = JL = 25;
  62808. exports.JV = JV = 26;
  62809. exports.JT = JT = 27;
  62810. exports.RI = RI = 28;
  62811. exports.AI = AI = 29;
  62812. exports.BK = BK = 30;
  62813. exports.CB = CB = 31;
  62814. exports.CJ = CJ = 32;
  62815. exports.CR = CR = 33;
  62816. exports.LF = LF = 34;
  62817. exports.NL = NL = 35;
  62818. exports.SA = SA = 36;
  62819. exports.SG = SG = 37;
  62820. exports.SP = SP = 38;
  62821. exports.XX = XX = 39;
  62822. }).call(this);
  62823. /***/ },
  62824. /* 95 */
  62825. /***/ function(module, exports) {
  62826. // Generated by CoffeeScript 1.7.1
  62827. (function() {
  62828. var CI_BRK, CP_BRK, DI_BRK, IN_BRK, PR_BRK;
  62829. exports.DI_BRK = DI_BRK = 0;
  62830. exports.IN_BRK = IN_BRK = 1;
  62831. exports.CI_BRK = CI_BRK = 2;
  62832. exports.CP_BRK = CP_BRK = 3;
  62833. exports.PR_BRK = PR_BRK = 4;
  62834. exports.pairTable = [[PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, CP_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, DI_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, DI_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, PR_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK]];
  62835. }).call(this);
  62836. /***/ },
  62837. /* 96 */
  62838. /***/ function(module, exports, __webpack_require__) {
  62839. /* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.7.1
  62840. (function() {
  62841. var PDFImage;
  62842. PDFImage = __webpack_require__(97);
  62843. module.exports = {
  62844. initImages: function() {
  62845. this._imageRegistry = {};
  62846. return this._imageCount = 0;
  62847. },
  62848. image: function(src, x, y, options) {
  62849. var bh, bp, bw, h, hp, image, ip, w, wp, _base, _name, _ref, _ref1, _ref2;
  62850. if (options == null) {
  62851. options = {};
  62852. }
  62853. if (typeof x === 'object') {
  62854. options = x;
  62855. x = null;
  62856. }
  62857. x = (_ref = x != null ? x : options.x) != null ? _ref : this.x;
  62858. y = (_ref1 = y != null ? y : options.y) != null ? _ref1 : this.y;
  62859. if (!Buffer.isBuffer(src)) {
  62860. image = this._imageRegistry[src];
  62861. }
  62862. if (!image) {
  62863. image = PDFImage.open(src, 'I' + (++this._imageCount));
  62864. image.embed(this);
  62865. if (!Buffer.isBuffer(src)) {
  62866. this._imageRegistry[src] = image;
  62867. }
  62868. }
  62869. if ((_base = this.page.xobjects)[_name = image.label] == null) {
  62870. _base[_name] = image.obj;
  62871. }
  62872. w = options.width || image.width;
  62873. h = options.height || image.height;
  62874. if (options.width && !options.height) {
  62875. wp = w / image.width;
  62876. w = image.width * wp;
  62877. h = image.height * wp;
  62878. } else if (options.height && !options.width) {
  62879. hp = h / image.height;
  62880. w = image.width * hp;
  62881. h = image.height * hp;
  62882. } else if (options.scale) {
  62883. w = image.width * options.scale;
  62884. h = image.height * options.scale;
  62885. } else if (options.fit) {
  62886. _ref2 = options.fit, bw = _ref2[0], bh = _ref2[1];
  62887. bp = bw / bh;
  62888. ip = image.width / image.height;
  62889. if (ip > bp) {
  62890. w = bw;
  62891. h = bw / ip;
  62892. } else {
  62893. h = bh;
  62894. w = bh * ip;
  62895. }
  62896. if (options.align === 'center') {
  62897. x = x + bw / 2 - w / 2;
  62898. } else if (options.align === 'right') {
  62899. x = x + bw - w;
  62900. }
  62901. if (options.valign === 'center') {
  62902. y = y + bh / 2 - h / 2;
  62903. } else if (options.valign === 'bottom') {
  62904. y = y + bh - h;
  62905. }
  62906. }
  62907. if (this.y === y) {
  62908. this.y += h;
  62909. }
  62910. this.save();
  62911. this.transform(w, 0, 0, -h, x, y + h);
  62912. this.addContent("/" + image.label + " Do");
  62913. this.restore();
  62914. return this;
  62915. }
  62916. };
  62917. }).call(this);
  62918. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
  62919. /***/ },
  62920. /* 97 */
  62921. /***/ function(module, exports, __webpack_require__) {
  62922. /* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.7.1
  62923. /*
  62924. PDFImage - embeds images in PDF documents
  62925. By Devon Govett
  62926. */
  62927. (function() {
  62928. var Data, JPEG, PDFImage, PNG, fs;
  62929. fs = __webpack_require__(44);
  62930. Data = __webpack_require__(72);
  62931. JPEG = __webpack_require__(98);
  62932. PNG = __webpack_require__(99);
  62933. PDFImage = (function() {
  62934. function PDFImage() {}
  62935. PDFImage.open = function(src, label) {
  62936. var data, match;
  62937. if (Buffer.isBuffer(src)) {
  62938. data = src;
  62939. } else {
  62940. if (match = /^data:.+;base64,(.*)$/.exec(src)) {
  62941. data = new Buffer(match[1], 'base64');
  62942. } else {
  62943. data = fs.readFileSync(src);
  62944. if (!data) {
  62945. return;
  62946. }
  62947. }
  62948. }
  62949. if (data[0] === 0xff && data[1] === 0xd8) {
  62950. return new JPEG(data, label);
  62951. } else if (data[0] === 0x89 && data.toString('ascii', 1, 4) === 'PNG') {
  62952. return new PNG(data, label);
  62953. } else {
  62954. throw new Error('Unknown image format.');
  62955. }
  62956. };
  62957. return PDFImage;
  62958. })();
  62959. module.exports = PDFImage;
  62960. }).call(this);
  62961. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
  62962. /***/ },
  62963. /* 98 */
  62964. /***/ function(module, exports, __webpack_require__) {
  62965. // Generated by CoffeeScript 1.7.1
  62966. (function() {
  62967. var JPEG, fs,
  62968. __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
  62969. fs = __webpack_require__(44);
  62970. JPEG = (function() {
  62971. var MARKERS;
  62972. MARKERS = [0xFFC0, 0xFFC1, 0xFFC2, 0xFFC3, 0xFFC5, 0xFFC6, 0xFFC7, 0xFFC8, 0xFFC9, 0xFFCA, 0xFFCB, 0xFFCC, 0xFFCD, 0xFFCE, 0xFFCF];
  62973. function JPEG(data, label) {
  62974. var channels, marker, pos;
  62975. this.data = data;
  62976. this.label = label;
  62977. if (this.data.readUInt16BE(0) !== 0xFFD8) {
  62978. throw "SOI not found in JPEG";
  62979. }
  62980. pos = 2;
  62981. while (pos < this.data.length) {
  62982. marker = this.data.readUInt16BE(pos);
  62983. pos += 2;
  62984. if (__indexOf.call(MARKERS, marker) >= 0) {
  62985. break;
  62986. }
  62987. pos += this.data.readUInt16BE(pos);
  62988. }
  62989. if (__indexOf.call(MARKERS, marker) < 0) {
  62990. throw "Invalid JPEG.";
  62991. }
  62992. pos += 2;
  62993. this.bits = this.data[pos++];
  62994. this.height = this.data.readUInt16BE(pos);
  62995. pos += 2;
  62996. this.width = this.data.readUInt16BE(pos);
  62997. pos += 2;
  62998. channels = this.data[pos++];
  62999. this.colorSpace = (function() {
  63000. switch (channels) {
  63001. case 1:
  63002. return 'DeviceGray';
  63003. case 3:
  63004. return 'DeviceRGB';
  63005. case 4:
  63006. return 'DeviceCMYK';
  63007. }
  63008. })();
  63009. this.obj = null;
  63010. }
  63011. JPEG.prototype.embed = function(document) {
  63012. if (this.obj) {
  63013. return;
  63014. }
  63015. this.obj = document.ref({
  63016. Type: 'XObject',
  63017. Subtype: 'Image',
  63018. BitsPerComponent: this.bits,
  63019. Width: this.width,
  63020. Height: this.height,
  63021. ColorSpace: this.colorSpace,
  63022. Filter: 'DCTDecode'
  63023. });
  63024. if (this.colorSpace === 'DeviceCMYK') {
  63025. this.obj.data['Decode'] = [1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0];
  63026. }
  63027. this.obj.end(this.data);
  63028. return this.data = null;
  63029. };
  63030. return JPEG;
  63031. })();
  63032. module.exports = JPEG;
  63033. }).call(this);
  63034. /***/ },
  63035. /* 99 */
  63036. /***/ function(module, exports, __webpack_require__) {
  63037. /* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.7.1
  63038. (function() {
  63039. var PNG, PNGImage, zlib;
  63040. zlib = __webpack_require__(47);
  63041. PNG = __webpack_require__(100);
  63042. PNGImage = (function() {
  63043. function PNGImage(data, label) {
  63044. this.label = label;
  63045. this.image = new PNG(data);
  63046. this.width = this.image.width;
  63047. this.height = this.image.height;
  63048. this.imgData = this.image.imgData;
  63049. this.obj = null;
  63050. }
  63051. PNGImage.prototype.embed = function(document) {
  63052. var mask, palette, params, rgb, val, x, _i, _len;
  63053. this.document = document;
  63054. if (this.obj) {
  63055. return;
  63056. }
  63057. this.obj = document.ref({
  63058. Type: 'XObject',
  63059. Subtype: 'Image',
  63060. BitsPerComponent: this.image.bits,
  63061. Width: this.width,
  63062. Height: this.height,
  63063. Filter: 'FlateDecode'
  63064. });
  63065. if (!this.image.hasAlphaChannel) {
  63066. params = document.ref({
  63067. Predictor: 15,
  63068. Colors: this.image.colors,
  63069. BitsPerComponent: this.image.bits,
  63070. Columns: this.width
  63071. });
  63072. this.obj.data['DecodeParms'] = params;
  63073. params.end();
  63074. }
  63075. if (this.image.palette.length === 0) {
  63076. this.obj.data['ColorSpace'] = this.image.colorSpace;
  63077. } else {
  63078. palette = document.ref();
  63079. palette.end(new Buffer(this.image.palette));
  63080. this.obj.data['ColorSpace'] = ['Indexed', 'DeviceRGB', (this.image.palette.length / 3) - 1, palette];
  63081. }
  63082. if (this.image.transparency.grayscale) {
  63083. val = this.image.transparency.greyscale;
  63084. return this.obj.data['Mask'] = [val, val];
  63085. } else if (this.image.transparency.rgb) {
  63086. rgb = this.image.transparency.rgb;
  63087. mask = [];
  63088. for (_i = 0, _len = rgb.length; _i < _len; _i++) {
  63089. x = rgb[_i];
  63090. mask.push(x, x);
  63091. }
  63092. return this.obj.data['Mask'] = mask;
  63093. } else if (this.image.transparency.indexed) {
  63094. return this.loadIndexedAlphaChannel();
  63095. } else if (this.image.hasAlphaChannel) {
  63096. return this.splitAlphaChannel();
  63097. } else {
  63098. return this.finalize();
  63099. }
  63100. };
  63101. PNGImage.prototype.finalize = function() {
  63102. var sMask;
  63103. if (this.alphaChannel) {
  63104. sMask = this.document.ref({
  63105. Type: 'XObject',
  63106. Subtype: 'Image',
  63107. Height: this.height,
  63108. Width: this.width,
  63109. BitsPerComponent: 8,
  63110. Filter: 'FlateDecode',
  63111. ColorSpace: 'DeviceGray',
  63112. Decode: [0, 1]
  63113. });
  63114. sMask.end(this.alphaChannel);
  63115. this.obj.data['SMask'] = sMask;
  63116. }
  63117. this.obj.end(this.imgData);
  63118. this.image = null;
  63119. return this.imgData = null;
  63120. };
  63121. PNGImage.prototype.splitAlphaChannel = function() {
  63122. return this.image.decodePixels((function(_this) {
  63123. return function(pixels) {
  63124. var a, alphaChannel, colorByteSize, done, i, imgData, len, p, pixelCount;
  63125. colorByteSize = _this.image.colors * _this.image.bits / 8;
  63126. pixelCount = _this.width * _this.height;
  63127. imgData = new Buffer(pixelCount * colorByteSize);
  63128. alphaChannel = new Buffer(pixelCount);
  63129. i = p = a = 0;
  63130. len = pixels.length;
  63131. while (i < len) {
  63132. imgData[p++] = pixels[i++];
  63133. imgData[p++] = pixels[i++];
  63134. imgData[p++] = pixels[i++];
  63135. alphaChannel[a++] = pixels[i++];
  63136. }
  63137. done = 0;
  63138. zlib.deflate(imgData, function(err, imgData) {
  63139. _this.imgData = imgData;
  63140. if (err) {
  63141. throw err;
  63142. }
  63143. if (++done === 2) {
  63144. return _this.finalize();
  63145. }
  63146. });
  63147. return zlib.deflate(alphaChannel, function(err, alphaChannel) {
  63148. _this.alphaChannel = alphaChannel;
  63149. if (err) {
  63150. throw err;
  63151. }
  63152. if (++done === 2) {
  63153. return _this.finalize();
  63154. }
  63155. });
  63156. };
  63157. })(this));
  63158. };
  63159. PNGImage.prototype.loadIndexedAlphaChannel = function(fn) {
  63160. var transparency;
  63161. transparency = this.image.transparency.indexed;
  63162. return this.image.decodePixels((function(_this) {
  63163. return function(pixels) {
  63164. var alphaChannel, i, j, _i, _ref;
  63165. alphaChannel = new Buffer(_this.width * _this.height);
  63166. i = 0;
  63167. for (j = _i = 0, _ref = pixels.length; _i < _ref; j = _i += 1) {
  63168. alphaChannel[i++] = transparency[pixels[j]];
  63169. }
  63170. return zlib.deflate(alphaChannel, function(err, alphaChannel) {
  63171. _this.alphaChannel = alphaChannel;
  63172. if (err) {
  63173. throw err;
  63174. }
  63175. return _this.finalize();
  63176. });
  63177. };
  63178. })(this));
  63179. };
  63180. return PNGImage;
  63181. })();
  63182. module.exports = PNGImage;
  63183. }).call(this);
  63184. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
  63185. /***/ },
  63186. /* 100 */
  63187. /***/ function(module, exports, __webpack_require__) {
  63188. /* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.4.0
  63189. /*
  63190. # MIT LICENSE
  63191. # Copyright (c) 2011 Devon Govett
  63192. #
  63193. # Permission is hereby granted, free of charge, to any person obtaining a copy of this
  63194. # software and associated documentation files (the "Software"), to deal in the Software
  63195. # without restriction, including without limitation the rights to use, copy, modify, merge,
  63196. # publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
  63197. # to whom the Software is furnished to do so, subject to the following conditions:
  63198. #
  63199. # The above copyright notice and this permission notice shall be included in all copies or
  63200. # substantial portions of the Software.
  63201. #
  63202. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
  63203. # BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  63204. # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  63205. # DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  63206. # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  63207. */
  63208. (function() {
  63209. var PNG, fs, zlib;
  63210. fs = __webpack_require__(44);
  63211. zlib = __webpack_require__(47);
  63212. module.exports = PNG = (function() {
  63213. PNG.decode = function(path, fn) {
  63214. return fs.readFile(path, function(err, file) {
  63215. var png;
  63216. png = new PNG(file);
  63217. return png.decode(function(pixels) {
  63218. return fn(pixels);
  63219. });
  63220. });
  63221. };
  63222. PNG.load = function(path) {
  63223. var file;
  63224. file = fs.readFileSync(path);
  63225. return new PNG(file);
  63226. };
  63227. function PNG(data) {
  63228. var chunkSize, colors, i, index, key, section, short, text, _i, _j, _ref;
  63229. this.data = data;
  63230. this.pos = 8;
  63231. this.palette = [];
  63232. this.imgData = [];
  63233. this.transparency = {};
  63234. this.text = {};
  63235. while (true) {
  63236. chunkSize = this.readUInt32();
  63237. section = ((function() {
  63238. var _i, _results;
  63239. _results = [];
  63240. for (i = _i = 0; _i < 4; i = ++_i) {
  63241. _results.push(String.fromCharCode(this.data[this.pos++]));
  63242. }
  63243. return _results;
  63244. }).call(this)).join('');
  63245. switch (section) {
  63246. case 'IHDR':
  63247. this.width = this.readUInt32();
  63248. this.height = this.readUInt32();
  63249. this.bits = this.data[this.pos++];
  63250. this.colorType = this.data[this.pos++];
  63251. this.compressionMethod = this.data[this.pos++];
  63252. this.filterMethod = this.data[this.pos++];
  63253. this.interlaceMethod = this.data[this.pos++];
  63254. break;
  63255. case 'PLTE':
  63256. this.palette = this.read(chunkSize);
  63257. break;
  63258. case 'IDAT':
  63259. for (i = _i = 0; _i < chunkSize; i = _i += 1) {
  63260. this.imgData.push(this.data[this.pos++]);
  63261. }
  63262. break;
  63263. case 'tRNS':
  63264. this.transparency = {};
  63265. switch (this.colorType) {
  63266. case 3:
  63267. this.transparency.indexed = this.read(chunkSize);
  63268. short = 255 - this.transparency.indexed.length;
  63269. if (short > 0) {
  63270. for (i = _j = 0; 0 <= short ? _j < short : _j > short; i = 0 <= short ? ++_j : --_j) {
  63271. this.transparency.indexed.push(255);
  63272. }
  63273. }
  63274. break;
  63275. case 0:
  63276. this.transparency.grayscale = this.read(chunkSize)[0];
  63277. break;
  63278. case 2:
  63279. this.transparency.rgb = this.read(chunkSize);
  63280. }
  63281. break;
  63282. case 'tEXt':
  63283. text = this.read(chunkSize);
  63284. index = text.indexOf(0);
  63285. key = String.fromCharCode.apply(String, text.slice(0, index));
  63286. this.text[key] = String.fromCharCode.apply(String, text.slice(index + 1));
  63287. break;
  63288. case 'IEND':
  63289. this.colors = (function() {
  63290. switch (this.colorType) {
  63291. case 0:
  63292. case 3:
  63293. case 4:
  63294. return 1;
  63295. case 2:
  63296. case 6:
  63297. return 3;
  63298. }
  63299. }).call(this);
  63300. this.hasAlphaChannel = (_ref = this.colorType) === 4 || _ref === 6;
  63301. colors = this.colors + (this.hasAlphaChannel ? 1 : 0);
  63302. this.pixelBitlength = this.bits * colors;
  63303. this.colorSpace = (function() {
  63304. switch (this.colors) {
  63305. case 1:
  63306. return 'DeviceGray';
  63307. case 3:
  63308. return 'DeviceRGB';
  63309. }
  63310. }).call(this);
  63311. this.imgData = new Buffer(this.imgData);
  63312. return;
  63313. default:
  63314. this.pos += chunkSize;
  63315. }
  63316. this.pos += 4;
  63317. if (this.pos > this.data.length) {
  63318. throw new Error("Incomplete or corrupt PNG file");
  63319. }
  63320. }
  63321. return;
  63322. }
  63323. PNG.prototype.read = function(bytes) {
  63324. var i, _i, _results;
  63325. _results = [];
  63326. for (i = _i = 0; 0 <= bytes ? _i < bytes : _i > bytes; i = 0 <= bytes ? ++_i : --_i) {
  63327. _results.push(this.data[this.pos++]);
  63328. }
  63329. return _results;
  63330. };
  63331. PNG.prototype.readUInt32 = function() {
  63332. var b1, b2, b3, b4;
  63333. b1 = this.data[this.pos++] << 24;
  63334. b2 = this.data[this.pos++] << 16;
  63335. b3 = this.data[this.pos++] << 8;
  63336. b4 = this.data[this.pos++];
  63337. return b1 | b2 | b3 | b4;
  63338. };
  63339. PNG.prototype.readUInt16 = function() {
  63340. var b1, b2;
  63341. b1 = this.data[this.pos++] << 8;
  63342. b2 = this.data[this.pos++];
  63343. return b1 | b2;
  63344. };
  63345. PNG.prototype.decodePixels = function(fn) {
  63346. var _this = this;
  63347. return zlib.inflate(this.imgData, function(err, data) {
  63348. var byte, c, col, i, left, length, p, pa, paeth, pb, pc, pixelBytes, pixels, pos, row, scanlineLength, upper, upperLeft, _i, _j, _k, _l, _m;
  63349. if (err) {
  63350. throw err;
  63351. }
  63352. pixelBytes = _this.pixelBitlength / 8;
  63353. scanlineLength = pixelBytes * _this.width;
  63354. pixels = new Buffer(scanlineLength * _this.height);
  63355. length = data.length;
  63356. row = 0;
  63357. pos = 0;
  63358. c = 0;
  63359. while (pos < length) {
  63360. switch (data[pos++]) {
  63361. case 0:
  63362. for (i = _i = 0; _i < scanlineLength; i = _i += 1) {
  63363. pixels[c++] = data[pos++];
  63364. }
  63365. break;
  63366. case 1:
  63367. for (i = _j = 0; _j < scanlineLength; i = _j += 1) {
  63368. byte = data[pos++];
  63369. left = i < pixelBytes ? 0 : pixels[c - pixelBytes];
  63370. pixels[c++] = (byte + left) % 256;
  63371. }
  63372. break;
  63373. case 2:
  63374. for (i = _k = 0; _k < scanlineLength; i = _k += 1) {
  63375. byte = data[pos++];
  63376. col = (i - (i % pixelBytes)) / pixelBytes;
  63377. upper = row && pixels[(row - 1) * scanlineLength + col * pixelBytes + (i % pixelBytes)];
  63378. pixels[c++] = (upper + byte) % 256;
  63379. }
  63380. break;
  63381. case 3:
  63382. for (i = _l = 0; _l < scanlineLength; i = _l += 1) {
  63383. byte = data[pos++];
  63384. col = (i - (i % pixelBytes)) / pixelBytes;
  63385. left = i < pixelBytes ? 0 : pixels[c - pixelBytes];
  63386. upper = row && pixels[(row - 1) * scanlineLength + col * pixelBytes + (i % pixelBytes)];
  63387. pixels[c++] = (byte + Math.floor((left + upper) / 2)) % 256;
  63388. }
  63389. break;
  63390. case 4:
  63391. for (i = _m = 0; _m < scanlineLength; i = _m += 1) {
  63392. byte = data[pos++];
  63393. col = (i - (i % pixelBytes)) / pixelBytes;
  63394. left = i < pixelBytes ? 0 : pixels[c - pixelBytes];
  63395. if (row === 0) {
  63396. upper = upperLeft = 0;
  63397. } else {
  63398. upper = pixels[(row - 1) * scanlineLength + col * pixelBytes + (i % pixelBytes)];
  63399. upperLeft = col && pixels[(row - 1) * scanlineLength + (col - 1) * pixelBytes + (i % pixelBytes)];
  63400. }
  63401. p = left + upper - upperLeft;
  63402. pa = Math.abs(p - left);
  63403. pb = Math.abs(p - upper);
  63404. pc = Math.abs(p - upperLeft);
  63405. if (pa <= pb && pa <= pc) {
  63406. paeth = left;
  63407. } else if (pb <= pc) {
  63408. paeth = upper;
  63409. } else {
  63410. paeth = upperLeft;
  63411. }
  63412. pixels[c++] = (byte + paeth) % 256;
  63413. }
  63414. break;
  63415. default:
  63416. throw new Error("Invalid filter algorithm: " + data[pos - 1]);
  63417. }
  63418. row++;
  63419. }
  63420. return fn(pixels);
  63421. });
  63422. };
  63423. PNG.prototype.decodePalette = function() {
  63424. var c, i, length, palette, pos, ret, transparency, _i, _ref, _ref1;
  63425. palette = this.palette;
  63426. transparency = this.transparency.indexed || [];
  63427. ret = new Buffer(transparency.length + palette.length);
  63428. pos = 0;
  63429. length = palette.length;
  63430. c = 0;
  63431. for (i = _i = 0, _ref = palette.length; _i < _ref; i = _i += 3) {
  63432. ret[pos++] = palette[i];
  63433. ret[pos++] = palette[i + 1];
  63434. ret[pos++] = palette[i + 2];
  63435. ret[pos++] = (_ref1 = transparency[c++]) != null ? _ref1 : 255;
  63436. }
  63437. return ret;
  63438. };
  63439. PNG.prototype.copyToImageData = function(imageData, pixels) {
  63440. var alpha, colors, data, i, input, j, k, length, palette, v, _ref;
  63441. colors = this.colors;
  63442. palette = null;
  63443. alpha = this.hasAlphaChannel;
  63444. if (this.palette.length) {
  63445. palette = (_ref = this._decodedPalette) != null ? _ref : this._decodedPalette = this.decodePalette();
  63446. colors = 4;
  63447. alpha = true;
  63448. }
  63449. data = (imageData != null ? imageData.data : void 0) || imageData;
  63450. length = data.length;
  63451. input = palette || pixels;
  63452. i = j = 0;
  63453. if (colors === 1) {
  63454. while (i < length) {
  63455. k = palette ? pixels[i / 4] * 4 : j;
  63456. v = input[k++];
  63457. data[i++] = v;
  63458. data[i++] = v;
  63459. data[i++] = v;
  63460. data[i++] = alpha ? input[k++] : 255;
  63461. j = k;
  63462. }
  63463. } else {
  63464. while (i < length) {
  63465. k = palette ? pixels[i / 4] * 4 : j;
  63466. data[i++] = input[k++];
  63467. data[i++] = input[k++];
  63468. data[i++] = input[k++];
  63469. data[i++] = alpha ? input[k++] : 255;
  63470. j = k;
  63471. }
  63472. }
  63473. };
  63474. PNG.prototype.decode = function(fn) {
  63475. var ret,
  63476. _this = this;
  63477. ret = new Buffer(this.width * this.height * 4);
  63478. return this.decodePixels(function(pixels) {
  63479. _this.copyToImageData(ret, pixels);
  63480. return fn(ret);
  63481. });
  63482. };
  63483. return PNG;
  63484. })();
  63485. }).call(this);
  63486. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
  63487. /***/ },
  63488. /* 101 */
  63489. /***/ function(module, exports) {
  63490. // Generated by CoffeeScript 1.7.1
  63491. (function() {
  63492. module.exports = {
  63493. annotate: function(x, y, w, h, options) {
  63494. var key, ref, val;
  63495. options.Type = 'Annot';
  63496. options.Rect = this._convertRect(x, y, w, h);
  63497. options.Border = [0, 0, 0];
  63498. if (options.Subtype !== 'Link') {
  63499. if (options.C == null) {
  63500. options.C = this._normalizeColor(options.color || [0, 0, 0]);
  63501. }
  63502. }
  63503. delete options.color;
  63504. if (typeof options.Dest === 'string') {
  63505. options.Dest = new String(options.Dest);
  63506. }
  63507. for (key in options) {
  63508. val = options[key];
  63509. options[key[0].toUpperCase() + key.slice(1)] = val;
  63510. }
  63511. ref = this.ref(options);
  63512. this.page.annotations.push(ref);
  63513. ref.end();
  63514. return this;
  63515. },
  63516. note: function(x, y, w, h, contents, options) {
  63517. if (options == null) {
  63518. options = {};
  63519. }
  63520. options.Subtype = 'Text';
  63521. options.Contents = new String(contents);
  63522. options.Name = 'Comment';
  63523. if (options.color == null) {
  63524. options.color = [243, 223, 92];
  63525. }
  63526. return this.annotate(x, y, w, h, options);
  63527. },
  63528. link: function(x, y, w, h, url, options) {
  63529. if (options == null) {
  63530. options = {};
  63531. }
  63532. options.Subtype = 'Link';
  63533. options.A = this.ref({
  63534. S: 'URI',
  63535. URI: new String(url)
  63536. });
  63537. options.A.end();
  63538. return this.annotate(x, y, w, h, options);
  63539. },
  63540. _markup: function(x, y, w, h, options) {
  63541. var x1, x2, y1, y2, _ref;
  63542. if (options == null) {
  63543. options = {};
  63544. }
  63545. _ref = this._convertRect(x, y, w, h), x1 = _ref[0], y1 = _ref[1], x2 = _ref[2], y2 = _ref[3];
  63546. options.QuadPoints = [x1, y2, x2, y2, x1, y1, x2, y1];
  63547. options.Contents = new String;
  63548. return this.annotate(x, y, w, h, options);
  63549. },
  63550. highlight: function(x, y, w, h, options) {
  63551. if (options == null) {
  63552. options = {};
  63553. }
  63554. options.Subtype = 'Highlight';
  63555. if (options.color == null) {
  63556. options.color = [241, 238, 148];
  63557. }
  63558. return this._markup(x, y, w, h, options);
  63559. },
  63560. underline: function(x, y, w, h, options) {
  63561. if (options == null) {
  63562. options = {};
  63563. }
  63564. options.Subtype = 'Underline';
  63565. return this._markup(x, y, w, h, options);
  63566. },
  63567. strike: function(x, y, w, h, options) {
  63568. if (options == null) {
  63569. options = {};
  63570. }
  63571. options.Subtype = 'StrikeOut';
  63572. return this._markup(x, y, w, h, options);
  63573. },
  63574. lineAnnotation: function(x1, y1, x2, y2, options) {
  63575. if (options == null) {
  63576. options = {};
  63577. }
  63578. options.Subtype = 'Line';
  63579. options.Contents = new String;
  63580. options.L = [x1, this.page.height - y1, x2, this.page.height - y2];
  63581. return this.annotate(x1, y1, x2, y2, options);
  63582. },
  63583. rectAnnotation: function(x, y, w, h, options) {
  63584. if (options == null) {
  63585. options = {};
  63586. }
  63587. options.Subtype = 'Square';
  63588. options.Contents = new String;
  63589. return this.annotate(x, y, w, h, options);
  63590. },
  63591. ellipseAnnotation: function(x, y, w, h, options) {
  63592. if (options == null) {
  63593. options = {};
  63594. }
  63595. options.Subtype = 'Circle';
  63596. options.Contents = new String;
  63597. return this.annotate(x, y, w, h, options);
  63598. },
  63599. textAnnotation: function(x, y, w, h, text, options) {
  63600. if (options == null) {
  63601. options = {};
  63602. }
  63603. options.Subtype = 'FreeText';
  63604. options.Contents = new String(text);
  63605. options.DA = new String;
  63606. return this.annotate(x, y, w, h, options);
  63607. },
  63608. _convertRect: function(x1, y1, w, h) {
  63609. var m0, m1, m2, m3, m4, m5, x2, y2, _ref;
  63610. y2 = y1;
  63611. y1 += h;
  63612. x2 = x1 + w;
  63613. _ref = this._ctm, m0 = _ref[0], m1 = _ref[1], m2 = _ref[2], m3 = _ref[3], m4 = _ref[4], m5 = _ref[5];
  63614. x1 = m0 * x1 + m2 * y1 + m4;
  63615. y1 = m1 * x1 + m3 * y1 + m5;
  63616. x2 = m0 * x2 + m2 * y2 + m4;
  63617. y2 = m1 * x2 + m3 * y2 + m5;
  63618. return [x1, y1, x2, y2];
  63619. }
  63620. };
  63621. }).call(this);
  63622. /***/ },
  63623. /* 102 */
  63624. /***/ function(module, exports) {
  63625. module.exports = {
  63626. '4A0': [4767.87, 6740.79],
  63627. '2A0': [3370.39, 4767.87],
  63628. A0: [2383.94, 3370.39],
  63629. A1: [1683.78, 2383.94],
  63630. A2: [1190.55, 1683.78],
  63631. A3: [841.89, 1190.55],
  63632. A4: [595.28, 841.89],
  63633. A5: [419.53, 595.28],
  63634. A6: [297.64, 419.53],
  63635. A7: [209.76, 297.64],
  63636. A8: [147.40, 209.76],
  63637. A9: [104.88, 147.40],
  63638. A10: [73.70, 104.88],
  63639. B0: [2834.65, 4008.19],
  63640. B1: [2004.09, 2834.65],
  63641. B2: [1417.32, 2004.09],
  63642. B3: [1000.63, 1417.32],
  63643. B4: [708.66, 1000.63],
  63644. B5: [498.90, 708.66],
  63645. B6: [354.33, 498.90],
  63646. B7: [249.45, 354.33],
  63647. B8: [175.75, 249.45],
  63648. B9: [124.72, 175.75],
  63649. B10: [87.87, 124.72],
  63650. C0: [2599.37, 3676.54],
  63651. C1: [1836.85, 2599.37],
  63652. C2: [1298.27, 1836.85],
  63653. C3: [918.43, 1298.27],
  63654. C4: [649.13, 918.43],
  63655. C5: [459.21, 649.13],
  63656. C6: [323.15, 459.21],
  63657. C7: [229.61, 323.15],
  63658. C8: [161.57, 229.61],
  63659. C9: [113.39, 161.57],
  63660. C10: [79.37, 113.39],
  63661. RA0: [2437.80, 3458.27],
  63662. RA1: [1729.13, 2437.80],
  63663. RA2: [1218.90, 1729.13],
  63664. RA3: [864.57, 1218.90],
  63665. RA4: [609.45, 864.57],
  63666. SRA0: [2551.18, 3628.35],
  63667. SRA1: [1814.17, 2551.18],
  63668. SRA2: [1275.59, 1814.17],
  63669. SRA3: [907.09, 1275.59],
  63670. SRA4: [637.80, 907.09],
  63671. EXECUTIVE: [521.86, 756.00],
  63672. FOLIO: [612.00, 936.00],
  63673. LEGAL: [612.00, 1008.00],
  63674. LETTER: [612.00, 792.00],
  63675. TABLOID: [792.00, 1224.00]
  63676. };
  63677. /***/ },
  63678. /* 103 */
  63679. /***/ function(module, exports, __webpack_require__) {
  63680. /* WEBPACK VAR INJECTION */(function(Buffer) {/* jslint node: true */
  63681. 'use strict';
  63682. var pdfKit = __webpack_require__(24);
  63683. var PDFImage = __webpack_require__(97);
  63684. function ImageMeasure(pdfDoc, imageDictionary) {
  63685. this.pdfDoc = pdfDoc;
  63686. this.imageDictionary = imageDictionary || {};
  63687. }
  63688. ImageMeasure.prototype.measureImage = function(src) {
  63689. var image, label;
  63690. var that = this;
  63691. if (!this.pdfDoc._imageRegistry[src]) {
  63692. label = 'I' + (++this.pdfDoc._imageCount);
  63693. image = PDFImage.open(realImageSrc(src), label);
  63694. image.embed(this.pdfDoc);
  63695. this.pdfDoc._imageRegistry[src] = image;
  63696. } else {
  63697. image = this.pdfDoc._imageRegistry[src];
  63698. }
  63699. return { width: image.width, height: image.height };
  63700. function realImageSrc(src) {
  63701. var img = that.imageDictionary[src];
  63702. if (!img) return src;
  63703. var index = img.indexOf('base64,');
  63704. if (index < 0) {
  63705. throw 'invalid image format, images dictionary should contain dataURL entries';
  63706. }
  63707. return new Buffer(img.substring(index + 7), 'base64');
  63708. }
  63709. };
  63710. module.exports = ImageMeasure;
  63711. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
  63712. /***/ },
  63713. /* 104 */
  63714. /***/ function(module, exports) {
  63715. /* jslint node: true */
  63716. 'use strict';
  63717. function groupDecorations(line) {
  63718. var groups = [], curGroup = null;
  63719. for(var i = 0, l = line.inlines.length; i < l; i++) {
  63720. var inline = line.inlines[i];
  63721. var decoration = inline.decoration;
  63722. if(!decoration) {
  63723. curGroup = null;
  63724. continue;
  63725. }
  63726. var color = inline.decorationColor || inline.color || 'black';
  63727. var style = inline.decorationStyle || 'solid';
  63728. decoration = Array.isArray(decoration) ? decoration : [ decoration ];
  63729. for(var ii = 0, ll = decoration.length; ii < ll; ii++) {
  63730. var deco = decoration[ii];
  63731. if(!curGroup || deco !== curGroup.decoration ||
  63732. style !== curGroup.decorationStyle || color !== curGroup.decorationColor ||
  63733. deco === 'lineThrough') {
  63734. curGroup = {
  63735. line: line,
  63736. decoration: deco,
  63737. decorationColor: color,
  63738. decorationStyle: style,
  63739. inlines: [ inline ]
  63740. };
  63741. groups.push(curGroup);
  63742. } else {
  63743. curGroup.inlines.push(inline);
  63744. }
  63745. }
  63746. }
  63747. return groups;
  63748. }
  63749. function drawDecoration(group, x, y, pdfKitDoc) {
  63750. function maxInline() {
  63751. var max = 0;
  63752. for (var i = 0, l = group.inlines.length; i < l; i++) {
  63753. var inl = group.inlines[i];
  63754. max = inl.fontSize > max ? i : max;
  63755. }
  63756. return group.inlines[max];
  63757. }
  63758. function width() {
  63759. var sum = 0;
  63760. for (var i = 0, l = group.inlines.length; i < l; i++) {
  63761. sum += group.inlines[i].width;
  63762. }
  63763. return sum;
  63764. }
  63765. var firstInline = group.inlines[0],
  63766. biggerInline = maxInline(),
  63767. totalWidth = width(),
  63768. lineAscent = group.line.getAscenderHeight(),
  63769. ascent = biggerInline.font.ascender / 1000 * biggerInline.fontSize,
  63770. height = biggerInline.height,
  63771. descent = height - ascent;
  63772. var lw = 0.5 + Math.floor(Math.max(biggerInline.fontSize - 8, 0) / 2) * 0.12;
  63773. switch (group.decoration) {
  63774. case 'underline':
  63775. y += lineAscent + descent * 0.45;
  63776. break;
  63777. case 'overline':
  63778. y += lineAscent - (ascent * 0.85);
  63779. break;
  63780. case 'lineThrough':
  63781. y += lineAscent - (ascent * 0.25);
  63782. break;
  63783. default:
  63784. throw 'Unkown decoration : ' + group.decoration;
  63785. }
  63786. pdfKitDoc.save();
  63787. if(group.decorationStyle === 'double') {
  63788. var gap = Math.max(0.5, lw*2);
  63789. pdfKitDoc .fillColor(group.decorationColor)
  63790. .rect(x + firstInline.x, y-lw/2, totalWidth, lw/2).fill()
  63791. .rect(x + firstInline.x, y+gap-lw/2, totalWidth, lw/2).fill();
  63792. } else if(group.decorationStyle === 'dashed') {
  63793. var nbDashes = Math.ceil(totalWidth / (3.96+2.84));
  63794. var rdx = x + firstInline.x;
  63795. pdfKitDoc.rect(rdx, y, totalWidth, lw).clip();
  63796. pdfKitDoc.fillColor(group.decorationColor);
  63797. for (var i = 0; i < nbDashes; i++) {
  63798. pdfKitDoc.rect(rdx, y-lw/2, 3.96, lw).fill();
  63799. rdx += 3.96 + 2.84;
  63800. }
  63801. } else if(group.decorationStyle === 'dotted') {
  63802. var nbDots = Math.ceil(totalWidth / (lw*3));
  63803. var rx = x + firstInline.x;
  63804. pdfKitDoc.rect(rx, y, totalWidth, lw).clip();
  63805. pdfKitDoc.fillColor(group.decorationColor);
  63806. for (var ii = 0; ii < nbDots; ii++) {
  63807. pdfKitDoc.rect(rx, y-lw/2, lw, lw).fill();
  63808. rx += (lw*3);
  63809. }
  63810. } else if(group.decorationStyle === 'wavy') {
  63811. var sh = 0.7, sv = 1;
  63812. var nbWaves = Math.ceil(totalWidth / (sh*2))+1;
  63813. var rwx = x + firstInline.x - 1;
  63814. pdfKitDoc.rect(x + firstInline.x, y-sv, totalWidth, y+sv).clip();
  63815. pdfKitDoc.lineWidth(0.24);
  63816. pdfKitDoc.moveTo(rwx, y);
  63817. for(var iii = 0; iii < nbWaves; iii++) {
  63818. pdfKitDoc .bezierCurveTo(rwx+sh, y-sv, rwx+sh*2, y-sv, rwx+sh*3, y)
  63819. .bezierCurveTo(rwx+sh*4, y+sv, rwx+sh*5, y+sv, rwx+sh*6, y);
  63820. rwx += sh*6;
  63821. }
  63822. pdfKitDoc.stroke(group.decorationColor);
  63823. } else {
  63824. pdfKitDoc .fillColor(group.decorationColor)
  63825. .rect(x + firstInline.x, y-lw/2, totalWidth, lw)
  63826. .fill();
  63827. }
  63828. pdfKitDoc.restore();
  63829. }
  63830. function drawDecorations(line, x, y, pdfKitDoc) {
  63831. var groups = groupDecorations(line);
  63832. for (var i = 0, l = groups.length; i < l; i++) {
  63833. drawDecoration(groups[i], x, y, pdfKitDoc);
  63834. }
  63835. }
  63836. function drawBackground(line, x, y, pdfKitDoc) {
  63837. var height = line.getHeight();
  63838. for(var i = 0, l = line.inlines.length; i < l; i++) {
  63839. var inline = line.inlines[i];
  63840. if(inline.background) {
  63841. pdfKitDoc .fillColor(inline.background)
  63842. .rect(x + inline.x, y, inline.width, height)
  63843. .fill();
  63844. }
  63845. }
  63846. }
  63847. module.exports = {
  63848. drawBackground: drawBackground,
  63849. drawDecorations: drawDecorations
  63850. };
  63851. /***/ },
  63852. /* 105 */
  63853. /***/ function(module, exports, __webpack_require__) {
  63854. var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* FileSaver.js
  63855. * A saveAs() FileSaver implementation.
  63856. * 1.1.20150716
  63857. *
  63858. * By Eli Grey, http://eligrey.com
  63859. * License: X11/MIT
  63860. * See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md
  63861. */
  63862. /*global self */
  63863. /*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */
  63864. /*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */
  63865. var saveAs = saveAs || (function(view) {
  63866. "use strict";
  63867. // IE <10 is explicitly unsupported
  63868. if (typeof navigator !== "undefined" && /MSIE [1-9]\./.test(navigator.userAgent)) {
  63869. return;
  63870. }
  63871. var
  63872. doc = view.document
  63873. // only get URL when necessary in case Blob.js hasn't overridden it yet
  63874. , get_URL = function() {
  63875. return view.URL || view.webkitURL || view;
  63876. }
  63877. , save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a")
  63878. , can_use_save_link = "download" in save_link
  63879. , click = function(node) {
  63880. var event = new MouseEvent("click");
  63881. node.dispatchEvent(event);
  63882. }
  63883. , webkit_req_fs = view.webkitRequestFileSystem
  63884. , req_fs = view.requestFileSystem || webkit_req_fs || view.mozRequestFileSystem
  63885. , throw_outside = function(ex) {
  63886. (view.setImmediate || view.setTimeout)(function() {
  63887. throw ex;
  63888. }, 0);
  63889. }
  63890. , force_saveable_type = "application/octet-stream"
  63891. , fs_min_size = 0
  63892. // See https://code.google.com/p/chromium/issues/detail?id=375297#c7 and
  63893. // https://github.com/eligrey/FileSaver.js/commit/485930a#commitcomment-8768047
  63894. // for the reasoning behind the timeout and revocation flow
  63895. , arbitrary_revoke_timeout = 500 // in ms
  63896. , revoke = function(file) {
  63897. var revoker = function() {
  63898. if (typeof file === "string") { // file is an object URL
  63899. get_URL().revokeObjectURL(file);
  63900. } else { // file is a File
  63901. file.remove();
  63902. }
  63903. };
  63904. if (view.chrome) {
  63905. revoker();
  63906. } else {
  63907. setTimeout(revoker, arbitrary_revoke_timeout);
  63908. }
  63909. }
  63910. , dispatch = function(filesaver, event_types, event) {
  63911. event_types = [].concat(event_types);
  63912. var i = event_types.length;
  63913. while (i--) {
  63914. var listener = filesaver["on" + event_types[i]];
  63915. if (typeof listener === "function") {
  63916. try {
  63917. listener.call(filesaver, event || filesaver);
  63918. } catch (ex) {
  63919. throw_outside(ex);
  63920. }
  63921. }
  63922. }
  63923. }
  63924. , auto_bom = function(blob) {
  63925. // prepend BOM for UTF-8 XML and text/* types (including HTML)
  63926. if (/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) {
  63927. return new Blob(["\ufeff", blob], {type: blob.type});
  63928. }
  63929. return blob;
  63930. }
  63931. , FileSaver = function(blob, name, no_auto_bom) {
  63932. if (!no_auto_bom) {
  63933. blob = auto_bom(blob);
  63934. }
  63935. // First try a.download, then web filesystem, then object URLs
  63936. var
  63937. filesaver = this
  63938. , type = blob.type
  63939. , blob_changed = false
  63940. , object_url
  63941. , target_view
  63942. , dispatch_all = function() {
  63943. dispatch(filesaver, "writestart progress write writeend".split(" "));
  63944. }
  63945. // on any filesys errors revert to saving with object URLs
  63946. , fs_error = function() {
  63947. // don't create more object URLs than needed
  63948. if (blob_changed || !object_url) {
  63949. object_url = get_URL().createObjectURL(blob);
  63950. }
  63951. if (target_view) {
  63952. target_view.location.href = object_url;
  63953. } else {
  63954. var new_tab = view.open(object_url, "_blank");
  63955. if (new_tab == undefined && typeof safari !== "undefined") {
  63956. //Apple do not allow window.open, see http://bit.ly/1kZffRI
  63957. view.location.href = object_url
  63958. }
  63959. }
  63960. filesaver.readyState = filesaver.DONE;
  63961. dispatch_all();
  63962. revoke(object_url);
  63963. }
  63964. , abortable = function(func) {
  63965. return function() {
  63966. if (filesaver.readyState !== filesaver.DONE) {
  63967. return func.apply(this, arguments);
  63968. }
  63969. };
  63970. }
  63971. , create_if_not_found = {create: true, exclusive: false}
  63972. , slice
  63973. ;
  63974. filesaver.readyState = filesaver.INIT;
  63975. if (!name) {
  63976. name = "download";
  63977. }
  63978. if (can_use_save_link) {
  63979. object_url = get_URL().createObjectURL(blob);
  63980. save_link.href = object_url;
  63981. save_link.download = name;
  63982. setTimeout(function() {
  63983. click(save_link);
  63984. dispatch_all();
  63985. revoke(object_url);
  63986. filesaver.readyState = filesaver.DONE;
  63987. });
  63988. return;
  63989. }
  63990. // Object and web filesystem URLs have a problem saving in Google Chrome when
  63991. // viewed in a tab, so I force save with application/octet-stream
  63992. // http://code.google.com/p/chromium/issues/detail?id=91158
  63993. // Update: Google errantly closed 91158, I submitted it again:
  63994. // https://code.google.com/p/chromium/issues/detail?id=389642
  63995. if (view.chrome && type && type !== force_saveable_type) {
  63996. slice = blob.slice || blob.webkitSlice;
  63997. blob = slice.call(blob, 0, blob.size, force_saveable_type);
  63998. blob_changed = true;
  63999. }
  64000. // Since I can't be sure that the guessed media type will trigger a download
  64001. // in WebKit, I append .download to the filename.
  64002. // https://bugs.webkit.org/show_bug.cgi?id=65440
  64003. if (webkit_req_fs && name !== "download") {
  64004. name += ".download";
  64005. }
  64006. if (type === force_saveable_type || webkit_req_fs) {
  64007. target_view = view;
  64008. }
  64009. if (!req_fs) {
  64010. fs_error();
  64011. return;
  64012. }
  64013. fs_min_size += blob.size;
  64014. req_fs(view.TEMPORARY, fs_min_size, abortable(function(fs) {
  64015. fs.root.getDirectory("saved", create_if_not_found, abortable(function(dir) {
  64016. var save = function() {
  64017. dir.getFile(name, create_if_not_found, abortable(function(file) {
  64018. file.createWriter(abortable(function(writer) {
  64019. writer.onwriteend = function(event) {
  64020. target_view.location.href = file.toURL();
  64021. filesaver.readyState = filesaver.DONE;
  64022. dispatch(filesaver, "writeend", event);
  64023. revoke(file);
  64024. };
  64025. writer.onerror = function() {
  64026. var error = writer.error;
  64027. if (error.code !== error.ABORT_ERR) {
  64028. fs_error();
  64029. }
  64030. };
  64031. "writestart progress write abort".split(" ").forEach(function(event) {
  64032. writer["on" + event] = filesaver["on" + event];
  64033. });
  64034. writer.write(blob);
  64035. filesaver.abort = function() {
  64036. writer.abort();
  64037. filesaver.readyState = filesaver.DONE;
  64038. };
  64039. filesaver.readyState = filesaver.WRITING;
  64040. }), fs_error);
  64041. }), fs_error);
  64042. };
  64043. dir.getFile(name, {create: false}, abortable(function(file) {
  64044. // delete file if it already exists
  64045. file.remove();
  64046. save();
  64047. }), abortable(function(ex) {
  64048. if (ex.code === ex.NOT_FOUND_ERR) {
  64049. save();
  64050. } else {
  64051. fs_error();
  64052. }
  64053. }));
  64054. }), fs_error);
  64055. }), fs_error);
  64056. }
  64057. , FS_proto = FileSaver.prototype
  64058. , saveAs = function(blob, name, no_auto_bom) {
  64059. return new FileSaver(blob, name, no_auto_bom);
  64060. }
  64061. ;
  64062. // IE 10+ (native saveAs)
  64063. if (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) {
  64064. return function(blob, name, no_auto_bom) {
  64065. if (!no_auto_bom) {
  64066. blob = auto_bom(blob);
  64067. }
  64068. return navigator.msSaveOrOpenBlob(blob, name || "download");
  64069. };
  64070. }
  64071. FS_proto.abort = function() {
  64072. var filesaver = this;
  64073. filesaver.readyState = filesaver.DONE;
  64074. dispatch(filesaver, "abort");
  64075. };
  64076. FS_proto.readyState = FS_proto.INIT = 0;
  64077. FS_proto.WRITING = 1;
  64078. FS_proto.DONE = 2;
  64079. FS_proto.error =
  64080. FS_proto.onwritestart =
  64081. FS_proto.onprogress =
  64082. FS_proto.onwrite =
  64083. FS_proto.onabort =
  64084. FS_proto.onerror =
  64085. FS_proto.onwriteend =
  64086. null;
  64087. return saveAs;
  64088. }(
  64089. typeof self !== "undefined" && self
  64090. || typeof window !== "undefined" && window
  64091. || this.content
  64092. ));
  64093. // `self` is undefined in Firefox for Android content script context
  64094. // while `this` is nsIContentFrameMessageManager
  64095. // with an attribute `content` that corresponds to the window
  64096. if (typeof module !== "undefined" && module.exports) {
  64097. module.exports.saveAs = saveAs;
  64098. } else if (("function" !== "undefined" && __webpack_require__(106) !== null) && (__webpack_require__(107) != null)) {
  64099. !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() {
  64100. return saveAs;
  64101. }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
  64102. }
  64103. /***/ },
  64104. /* 106 */
  64105. /***/ function(module, exports) {
  64106. module.exports = function() { throw new Error("define cannot be used indirect"); };
  64107. /***/ },
  64108. /* 107 */
  64109. /***/ function(module, exports) {
  64110. /* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {module.exports = __webpack_amd_options__;
  64111. /* WEBPACK VAR INJECTION */}.call(exports, {}))
  64112. /***/ }
  64113. /******/ ]);