Something went wrong. Try again.
Graphics calculator made with elm tedius.tngl.sh/zero
elm math graphics
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350(function(scope){'use strict';
function F(arity, fun, wrapper) { wrapper.a = arity; wrapper.f = fun; return wrapper;}
function F2(fun) { return F(2, fun, function(a) { return function(b) { return fun(a,b); }; })}function F3(fun) { return F(3, fun, function(a) { return function(b) { return function(c) { return fun(a, b, c); }; }; });}function F4(fun) { return F(4, fun, function(a) { return function(b) { return function(c) { return function(d) { return fun(a, b, c, d); }; }; }; });}function F5(fun) { return F(5, fun, function(a) { return function(b) { return function(c) { return function(d) { return function(e) { return fun(a, b, c, d, e); }; }; }; }; });}function F6(fun) { return F(6, fun, function(a) { return function(b) { return function(c) { return function(d) { return function(e) { return function(f) { return fun(a, b, c, d, e, f); }; }; }; }; }; });}function F7(fun) { return F(7, fun, function(a) { return function(b) { return function(c) { return function(d) { return function(e) { return function(f) { return function(g) { return fun(a, b, c, d, e, f, g); }; }; }; }; }; }; });}function F8(fun) { return F(8, fun, function(a) { return function(b) { return function(c) { return function(d) { return function(e) { return function(f) { return function(g) { return function(h) { return fun(a, b, c, d, e, f, g, h); }; }; }; }; }; }; }; });}function F9(fun) { return F(9, fun, function(a) { return function(b) { return function(c) { return function(d) { return function(e) { return function(f) { return function(g) { return function(h) { return function(i) { return fun(a, b, c, d, e, f, g, h, i); }; }; }; }; }; }; }; }; });}
function A2(fun, a, b) { return fun.a === 2 ? fun.f(a, b) : fun(a)(b);}function A3(fun, a, b, c) { return fun.a === 3 ? fun.f(a, b, c) : fun(a)(b)(c);}function A4(fun, a, b, c, d) { return fun.a === 4 ? fun.f(a, b, c, d) : fun(a)(b)(c)(d);}function A5(fun, a, b, c, d, e) { return fun.a === 5 ? fun.f(a, b, c, d, e) : fun(a)(b)(c)(d)(e);}function A6(fun, a, b, c, d, e, f) { return fun.a === 6 ? fun.f(a, b, c, d, e, f) : fun(a)(b)(c)(d)(e)(f);}function A7(fun, a, b, c, d, e, f, g) { return fun.a === 7 ? fun.f(a, b, c, d, e, f, g) : fun(a)(b)(c)(d)(e)(f)(g);}function A8(fun, a, b, c, d, e, f, g, h) { return fun.a === 8 ? fun.f(a, b, c, d, e, f, g, h) : fun(a)(b)(c)(d)(e)(f)(g)(h);}function A9(fun, a, b, c, d, e, f, g, h, i) { return fun.a === 9 ? fun.f(a, b, c, d, e, f, g, h, i) : fun(a)(b)(c)(d)(e)(f)(g)(h)(i);}
// EQUALITY
function _Utils_eq(x, y){ for ( var pair, stack = [], isEqual = _Utils_eqHelp(x, y, 0, stack); isEqual && (pair = stack.pop()); isEqual = _Utils_eqHelp(pair.a, pair.b, 0, stack) ) {}
return isEqual;}
function _Utils_eqHelp(x, y, depth, stack){ if (x === y) { return true; }
if (typeof x !== 'object' || x === null || y === null) { typeof x === 'function' && _Debug_crash(5); return false; }
if (depth > 100) { stack.push(_Utils_Tuple2(x,y)); return true; }
/**_UNUSED/ if (x.$ === 'Set_elm_builtin') { x = $elm$core$Set$toList(x); y = $elm$core$Set$toList(y); } if (x.$ === 'RBNode_elm_builtin' || x.$ === 'RBEmpty_elm_builtin') { x = $elm$core$Dict$toList(x); y = $elm$core$Dict$toList(y); } //*/
/**/ if (x.$ < 0) { x = $elm$core$Dict$toList(x); y = $elm$core$Dict$toList(y); } //*/
for (var key in x) { if (!_Utils_eqHelp(x[key], y[key], depth + 1, stack)) { return false; } } return true;}
var _Utils_equal = F2(_Utils_eq);var _Utils_notEqual = F2(function(a, b) { return !_Utils_eq(a,b); });
// COMPARISONS
// Code in Generate/JavaScript.hs, Basics.js, and List.js depends on// the particular integer values assigned to LT, EQ, and GT.
function _Utils_cmp(x, y, ord){ if (typeof x !== 'object') { return x === y ? /*EQ*/ 0 : x < y ? /*LT*/ -1 : /*GT*/ 1; }
/**_UNUSED/ if (x instanceof String) { var a = x.valueOf(); var b = y.valueOf(); return a === b ? 0 : a < b ? -1 : 1; } //*/
/**/ if (typeof x.$ === 'undefined') //*/ /**_UNUSED/ if (x.$[0] === '#') //*/ { return (ord = _Utils_cmp(x.a, y.a)) ? ord : (ord = _Utils_cmp(x.b, y.b)) ? ord : _Utils_cmp(x.c, y.c); }
// traverse conses until end of a list or a mismatch for (; x.b && y.b && !(ord = _Utils_cmp(x.a, y.a)); x = x.b, y = y.b) {} // WHILE_CONSES return ord || (x.b ? /*GT*/ 1 : y.b ? /*LT*/ -1 : /*EQ*/ 0);}
var _Utils_lt = F2(function(a, b) { return _Utils_cmp(a, b) < 0; });var _Utils_le = F2(function(a, b) { return _Utils_cmp(a, b) < 1; });var _Utils_gt = F2(function(a, b) { return _Utils_cmp(a, b) > 0; });var _Utils_ge = F2(function(a, b) { return _Utils_cmp(a, b) >= 0; });
var _Utils_compare = F2(function(x, y){ var n = _Utils_cmp(x, y); return n < 0 ? $elm$core$Basics$LT : n ? $elm$core$Basics$GT : $elm$core$Basics$EQ;});
// COMMON VALUES
var _Utils_Tuple0 = 0;var _Utils_Tuple0_UNUSED = { $: '#0' };
function _Utils_Tuple2(a, b) { return { a: a, b: b }; }function _Utils_Tuple2_UNUSED(a, b) { return { $: '#2', a: a, b: b }; }
function _Utils_Tuple3(a, b, c) { return { a: a, b: b, c: c }; }function _Utils_Tuple3_UNUSED(a, b, c) { return { $: '#3', a: a, b: b, c: c }; }
function _Utils_chr(c) { return c; }function _Utils_chr_UNUSED(c) { return new String(c); }
// RECORDS
function _Utils_update(oldRecord, updatedFields){ var newRecord = {};
for (var key in oldRecord) { newRecord[key] = oldRecord[key]; }
for (var key in updatedFields) { newRecord[key] = updatedFields[key]; }
return newRecord;}
// APPEND
var _Utils_append = F2(_Utils_ap);
function _Utils_ap(xs, ys){ // append Strings if (typeof xs === 'string') { return xs + ys; }
// append Lists if (!xs.b) { return ys; } var root = _List_Cons(xs.a, ys); xs = xs.b for (var curr = root; xs.b; xs = xs.b) // WHILE_CONS { curr = curr.b = _List_Cons(xs.a, ys); } return root;}
var _List_Nil = { $: 0 };var _List_Nil_UNUSED = { $: '[]' };
function _List_Cons(hd, tl) { return { $: 1, a: hd, b: tl }; }function _List_Cons_UNUSED(hd, tl) { return { $: '::', a: hd, b: tl }; }
var _List_cons = F2(_List_Cons);
function _List_fromArray(arr){ var out = _List_Nil; for (var i = arr.length; i--; ) { out = _List_Cons(arr[i], out); } return out;}
function _List_toArray(xs){ for (var out = []; xs.b; xs = xs.b) // WHILE_CONS { out.push(xs.a); } return out;}
var _List_map2 = F3(function(f, xs, ys){ for (var arr = []; xs.b && ys.b; xs = xs.b, ys = ys.b) // WHILE_CONSES { arr.push(A2(f, xs.a, ys.a)); } return _List_fromArray(arr);});
var _List_map3 = F4(function(f, xs, ys, zs){ for (var arr = []; xs.b && ys.b && zs.b; xs = xs.b, ys = ys.b, zs = zs.b) // WHILE_CONSES { arr.push(A3(f, xs.a, ys.a, zs.a)); } return _List_fromArray(arr);});
var _List_map4 = F5(function(f, ws, xs, ys, zs){ for (var arr = []; ws.b && xs.b && ys.b && zs.b; ws = ws.b, xs = xs.b, ys = ys.b, zs = zs.b) // WHILE_CONSES { arr.push(A4(f, ws.a, xs.a, ys.a, zs.a)); } return _List_fromArray(arr);});
var _List_map5 = F6(function(f, vs, ws, xs, ys, zs){ for (var arr = []; vs.b && ws.b && xs.b && ys.b && zs.b; vs = vs.b, ws = ws.b, xs = xs.b, ys = ys.b, zs = zs.b) // WHILE_CONSES { arr.push(A5(f, vs.a, ws.a, xs.a, ys.a, zs.a)); } return _List_fromArray(arr);});
var _List_sortBy = F2(function(f, xs){ return _List_fromArray(_List_toArray(xs).sort(function(a, b) { return _Utils_cmp(f(a), f(b)); }));});
var _List_sortWith = F2(function(f, xs){ return _List_fromArray(_List_toArray(xs).sort(function(a, b) { var ord = A2(f, a, b); return ord === $elm$core$Basics$EQ ? 0 : ord === $elm$core$Basics$LT ? -1 : 1; }));});
var _JsArray_empty = [];
function _JsArray_singleton(value){ return [value];}
function _JsArray_length(array){ return array.length;}
var _JsArray_initialize = F3(function(size, offset, func){ var result = new Array(size);
for (var i = 0; i < size; i++) { result[i] = func(offset + i); }
return result;});
var _JsArray_initializeFromList = F2(function (max, ls){ var result = new Array(max);
for (var i = 0; i < max && ls.b; i++) { result[i] = ls.a; ls = ls.b; }
result.length = i; return _Utils_Tuple2(result, ls);});
var _JsArray_unsafeGet = F2(function(index, array){ return array[index];});
var _JsArray_unsafeSet = F3(function(index, value, array){ var length = array.length; var result = new Array(length);
for (var i = 0; i < length; i++) { result[i] = array[i]; }
result[index] = value; return result;});
var _JsArray_push = F2(function(value, array){ var length = array.length; var result = new Array(length + 1);
for (var i = 0; i < length; i++) { result[i] = array[i]; }
result[length] = value; return result;});
var _JsArray_foldl = F3(function(func, acc, array){ var length = array.length;
for (var i = 0; i < length; i++) { acc = A2(func, array[i], acc); }
return acc;});
var _JsArray_foldr = F3(function(func, acc, array){ for (var i = array.length - 1; i >= 0; i--) { acc = A2(func, array[i], acc); }
return acc;});
var _JsArray_map = F2(function(func, array){ var length = array.length; var result = new Array(length);
for (var i = 0; i < length; i++) { result[i] = func(array[i]); }
return result;});
var _JsArray_indexedMap = F3(function(func, offset, array){ var length = array.length; var result = new Array(length);
for (var i = 0; i < length; i++) { result[i] = A2(func, offset + i, array[i]); }
return result;});
var _JsArray_slice = F3(function(from, to, array){ return array.slice(from, to);});
var _JsArray_appendN = F3(function(n, dest, source){ var destLen = dest.length; var itemsToCopy = n - destLen;
if (itemsToCopy > source.length) { itemsToCopy = source.length; }
var size = destLen + itemsToCopy; var result = new Array(size);
for (var i = 0; i < destLen; i++) { result[i] = dest[i]; }
for (var i = 0; i < itemsToCopy; i++) { result[i + destLen] = source[i]; }
return result;});
// LOG
var _Debug_log = F2(function(tag, value){ return value;});
var _Debug_log_UNUSED = F2(function(tag, value){ console.log(tag + ': ' + _Debug_toString(value)); return value;});
// TODOS
function _Debug_todo(moduleName, region){ return function(message) { _Debug_crash(8, moduleName, region, message); };}
function _Debug_todoCase(moduleName, region, value){ return function(message) { _Debug_crash(9, moduleName, region, value, message); };}
// TO STRING
function _Debug_toString(value){ return '<internals>';}
function _Debug_toString_UNUSED(value){ return _Debug_toAnsiString(false, value);}
function _Debug_toAnsiString(ansi, value){ if (typeof value === 'function') { return _Debug_internalColor(ansi, '<function>'); }
if (typeof value === 'boolean') { return _Debug_ctorColor(ansi, value ? 'True' : 'False'); }
if (typeof value === 'number') { return _Debug_numberColor(ansi, value + ''); }
if (value instanceof String) { return _Debug_charColor(ansi, "'" + _Debug_addSlashes(value, true) + "'"); }
if (typeof value === 'string') { return _Debug_stringColor(ansi, '"' + _Debug_addSlashes(value, false) + '"'); }
if (typeof value === 'object' && '$' in value) { var tag = value.$;
if (typeof tag === 'number') { return _Debug_internalColor(ansi, '<internals>'); }
if (tag[0] === '#') { var output = []; for (var k in value) { if (k === '$') continue; output.push(_Debug_toAnsiString(ansi, value[k])); } return '(' + output.join(',') + ')'; }
if (tag === 'Set_elm_builtin') { return _Debug_ctorColor(ansi, 'Set') + _Debug_fadeColor(ansi, '.fromList') + ' ' + _Debug_toAnsiString(ansi, $elm$core$Set$toList(value)); }
if (tag === 'RBNode_elm_builtin' || tag === 'RBEmpty_elm_builtin') { return _Debug_ctorColor(ansi, 'Dict') + _Debug_fadeColor(ansi, '.fromList') + ' ' + _Debug_toAnsiString(ansi, $elm$core$Dict$toList(value)); }
if (tag === 'Array_elm_builtin') { return _Debug_ctorColor(ansi, 'Array') + _Debug_fadeColor(ansi, '.fromList') + ' ' + _Debug_toAnsiString(ansi, $elm$core$Array$toList(value)); }
if (tag === '::' || tag === '[]') { var output = '[';
value.b && (output += _Debug_toAnsiString(ansi, value.a), value = value.b)
for (; value.b; value = value.b) // WHILE_CONS { output += ',' + _Debug_toAnsiString(ansi, value.a); } return output + ']'; }
var output = ''; for (var i in value) { if (i === '$') continue; var str = _Debug_toAnsiString(ansi, value[i]); var c0 = str[0]; var parenless = c0 === '{' || c0 === '(' || c0 === '[' || c0 === '<' || c0 === '"' || str.indexOf(' ') < 0; output += ' ' + (parenless ? str : '(' + str + ')'); } return _Debug_ctorColor(ansi, tag) + output; }
if (typeof DataView === 'function' && value instanceof DataView) { return _Debug_stringColor(ansi, '<' + value.byteLength + ' bytes>'); }
if (typeof File !== 'undefined' && value instanceof File) { return _Debug_internalColor(ansi, '<' + value.name + '>'); }
if (typeof value === 'object') { var output = []; for (var key in value) { var field = key[0] === '_' ? key.slice(1) : key; output.push(_Debug_fadeColor(ansi, field) + ' = ' + _Debug_toAnsiString(ansi, value[key])); } if (output.length === 0) { return '{}'; } return '{ ' + output.join(', ') + ' }'; }
return _Debug_internalColor(ansi, '<internals>');}
function _Debug_addSlashes(str, isChar){ var s = str .replace(/\\/g, '\\\\') .replace(/\n/g, '\\n') .replace(/\t/g, '\\t') .replace(/\r/g, '\\r') .replace(/\v/g, '\\v') .replace(/\0/g, '\\0');
if (isChar) { return s.replace(/\'/g, '\\\''); } else { return s.replace(/\"/g, '\\"'); }}
function _Debug_ctorColor(ansi, string){ return ansi ? '\x1b[96m' + string + '\x1b[0m' : string;}
function _Debug_numberColor(ansi, string){ return ansi ? '\x1b[95m' + string + '\x1b[0m' : string;}
function _Debug_stringColor(ansi, string){ return ansi ? '\x1b[93m' + string + '\x1b[0m' : string;}
function _Debug_charColor(ansi, string){ return ansi ? '\x1b[92m' + string + '\x1b[0m' : string;}
function _Debug_fadeColor(ansi, string){ return ansi ? '\x1b[37m' + string + '\x1b[0m' : string;}
function _Debug_internalColor(ansi, string){ return ansi ? '\x1b[36m' + string + '\x1b[0m' : string;}
function _Debug_toHexDigit(n){ return String.fromCharCode(n < 10 ? 48 + n : 55 + n);}
// CRASH
function _Debug_crash(identifier){ throw new Error('https://github.com/elm/core/blob/1.0.0/hints/' + identifier + '.md');}
function _Debug_crash_UNUSED(identifier, fact1, fact2, fact3, fact4){ switch(identifier) { case 0: throw new Error('What node should I take over? In JavaScript I need something like:\n\n Elm.Main.init({\n node: document.getElementById("elm-node")\n })\n\nYou need to do this with any Browser.sandbox or Browser.element program.');
case 1: throw new Error('Browser.application programs cannot handle URLs like this:\n\n ' + document.location.href + '\n\nWhat is the root? The root of your file system? Try looking at this program with `elm reactor` or some other server.');
case 2: var jsonErrorString = fact1; throw new Error('Problem with the flags given to your Elm program on initialization.\n\n' + jsonErrorString);
case 3: var portName = fact1; throw new Error('There can only be one port named `' + portName + '`, but your program has multiple.');
case 4: var portName = fact1; var problem = fact2; throw new Error('Trying to send an unexpected type of value through port `' + portName + '`:\n' + problem);
case 5: throw new Error('Trying to use `(==)` on functions.\nThere is no way to know if functions are "the same" in the Elm sense.\nRead more about this at https://package.elm-lang.org/packages/elm/core/latest/Basics#== which describes why it is this way and what the better version will look like.');
case 6: var moduleName = fact1; throw new Error('Your page is loading multiple Elm scripts with a module named ' + moduleName + '. Maybe a duplicate script is getting loaded accidentally? If not, rename one of them so I know which is which!');
case 8: var moduleName = fact1; var region = fact2; var message = fact3; throw new Error('TODO in module `' + moduleName + '` ' + _Debug_regionToString(region) + '\n\n' + message);
case 9: var moduleName = fact1; var region = fact2; var value = fact3; var message = fact4; throw new Error( 'TODO in module `' + moduleName + '` from the `case` expression ' + _Debug_regionToString(region) + '\n\nIt received the following value:\n\n ' + _Debug_toString(value).replace('\n', '\n ') + '\n\nBut the branch that handles it says:\n\n ' + message.replace('\n', '\n ') );
case 10: throw new Error('Bug in https://github.com/elm/virtual-dom/issues');
case 11: throw new Error('Cannot perform mod 0. Division by zero error.'); }}
function _Debug_regionToString(region){ if (region.aE.N === region.ae.N) { return 'on line ' + region.aE.N; } return 'on lines ' + region.aE.N + ' through ' + region.ae.N;}
// MATH
var _Basics_add = F2(function(a, b) { return a + b; });var _Basics_sub = F2(function(a, b) { return a - b; });var _Basics_mul = F2(function(a, b) { return a * b; });var _Basics_fdiv = F2(function(a, b) { return a / b; });var _Basics_idiv = F2(function(a, b) { return (a / b) | 0; });var _Basics_pow = F2(Math.pow);
var _Basics_remainderBy = F2(function(b, a) { return a % b; });
// https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/divmodnote-letter.pdfvar _Basics_modBy = F2(function(modulus, x){ var answer = x % modulus; return modulus === 0 ? _Debug_crash(11) : ((answer > 0 && modulus < 0) || (answer < 0 && modulus > 0)) ? answer + modulus : answer;});
// TRIGONOMETRY
var _Basics_pi = Math.PI;var _Basics_e = Math.E;var _Basics_cos = Math.cos;var _Basics_sin = Math.sin;var _Basics_tan = Math.tan;var _Basics_acos = Math.acos;var _Basics_asin = Math.asin;var _Basics_atan = Math.atan;var _Basics_atan2 = F2(Math.atan2);
// MORE MATH
function _Basics_toFloat(x) { return x; }function _Basics_truncate(n) { return n | 0; }function _Basics_isInfinite(n) { return n === Infinity || n === -Infinity; }
var _Basics_ceiling = Math.ceil;var _Basics_floor = Math.floor;var _Basics_round = Math.round;var _Basics_sqrt = Math.sqrt;var _Basics_log = Math.log;var _Basics_isNaN = isNaN;
// BOOLEANS
function _Basics_not(bool) { return !bool; }var _Basics_and = F2(function(a, b) { return a && b; });var _Basics_or = F2(function(a, b) { return a || b; });var _Basics_xor = F2(function(a, b) { return a !== b; });
var _String_cons = F2(function(chr, str){ return chr + str;});
function _String_uncons(string){ var word = string.charCodeAt(0); return !isNaN(word) ? $elm$core$Maybe$Just( 0xD800 <= word && word <= 0xDBFF ? _Utils_Tuple2(_Utils_chr(string[0] + string[1]), string.slice(2)) : _Utils_Tuple2(_Utils_chr(string[0]), string.slice(1)) ) : $elm$core$Maybe$Nothing;}
var _String_append = F2(function(a, b){ return a + b;});
function _String_length(str){ return str.length;}
var _String_map = F2(function(func, string){ var len = string.length; var array = new Array(len); var i = 0; while (i < len) { var word = string.charCodeAt(i); if (0xD800 <= word && word <= 0xDBFF) { array[i] = func(_Utils_chr(string[i] + string[i+1])); i += 2; continue; } array[i] = func(_Utils_chr(string[i])); i++; } return array.join('');});
var _String_filter = F2(function(isGood, str){ var arr = []; var len = str.length; var i = 0; while (i < len) { var char = str[i]; var word = str.charCodeAt(i); i++; if (0xD800 <= word && word <= 0xDBFF) { char += str[i]; i++; }
if (isGood(_Utils_chr(char))) { arr.push(char); } } return arr.join('');});
function _String_reverse(str){ var len = str.length; var arr = new Array(len); var i = 0; while (i < len) { var word = str.charCodeAt(i); if (0xD800 <= word && word <= 0xDBFF) { arr[len - i] = str[i + 1]; i++; arr[len - i] = str[i - 1]; i++; } else { arr[len - i] = str[i]; i++; } } return arr.join('');}
var _String_foldl = F3(function(func, state, string){ var len = string.length; var i = 0; while (i < len) { var char = string[i]; var word = string.charCodeAt(i); i++; if (0xD800 <= word && word <= 0xDBFF) { char += string[i]; i++; } state = A2(func, _Utils_chr(char), state); } return state;});
var _String_foldr = F3(function(func, state, string){ var i = string.length; while (i--) { var char = string[i]; var word = string.charCodeAt(i); if (0xDC00 <= word && word <= 0xDFFF) { i--; char = string[i] + char; } state = A2(func, _Utils_chr(char), state); } return state;});
var _String_split = F2(function(sep, str){ return str.split(sep);});
var _String_join = F2(function(sep, strs){ return strs.join(sep);});
var _String_slice = F3(function(start, end, str) { return str.slice(start, end);});
function _String_trim(str){ return str.trim();}
function _String_trimLeft(str){ return str.replace(/^\s+/, '');}
function _String_trimRight(str){ return str.replace(/\s+$/, '');}
function _String_words(str){ return _List_fromArray(str.trim().split(/\s+/g));}
function _String_lines(str){ return _List_fromArray(str.split(/\r\n|\r|\n/g));}
function _String_toUpper(str){ return str.toUpperCase();}
function _String_toLower(str){ return str.toLowerCase();}
var _String_any = F2(function(isGood, string){ var i = string.length; while (i--) { var char = string[i]; var word = string.charCodeAt(i); if (0xDC00 <= word && word <= 0xDFFF) { i--; char = string[i] + char; } if (isGood(_Utils_chr(char))) { return true; } } return false;});
var _String_all = F2(function(isGood, string){ var i = string.length; while (i--) { var char = string[i]; var word = string.charCodeAt(i); if (0xDC00 <= word && word <= 0xDFFF) { i--; char = string[i] + char; } if (!isGood(_Utils_chr(char))) { return false; } } return true;});
var _String_contains = F2(function(sub, str){ return str.indexOf(sub) > -1;});
var _String_startsWith = F2(function(sub, str){ return str.indexOf(sub) === 0;});
var _String_endsWith = F2(function(sub, str){ return str.length >= sub.length && str.lastIndexOf(sub) === str.length - sub.length;});
var _String_indexes = F2(function(sub, str){ var subLen = sub.length;
if (subLen < 1) { return _List_Nil; }
var i = 0; var is = [];
while ((i = str.indexOf(sub, i)) > -1) { is.push(i); i = i + subLen; }
return _List_fromArray(is);});
// TO STRING
function _String_fromNumber(number){ return number + '';}
// INT CONVERSIONS
function _String_toInt(str){ var total = 0; var code0 = str.charCodeAt(0); var start = code0 == 0x2B /* + */ || code0 == 0x2D /* - */ ? 1 : 0;
for (var i = start; i < str.length; ++i) { var code = str.charCodeAt(i); if (code < 0x30 || 0x39 < code) { return $elm$core$Maybe$Nothing; } total = 10 * total + code - 0x30; }
return i == start ? $elm$core$Maybe$Nothing : $elm$core$Maybe$Just(code0 == 0x2D ? -total : total);}
// FLOAT CONVERSIONS
function _String_toFloat(s){ // check if it is a hex, octal, or binary number if (s.length === 0 || /[\sxbo]/.test(s)) { return $elm$core$Maybe$Nothing; } var n = +s; // faster isNaN check return n === n ? $elm$core$Maybe$Just(n) : $elm$core$Maybe$Nothing;}
function _String_fromList(chars){ return _List_toArray(chars).join('');}
function _Char_toCode(char){ var code = char.charCodeAt(0); if (0xD800 <= code && code <= 0xDBFF) { return (code - 0xD800) * 0x400 + char.charCodeAt(1) - 0xDC00 + 0x10000 } return code;}
function _Char_fromCode(code){ return _Utils_chr( (code < 0 || 0x10FFFF < code) ? '\uFFFD' : (code <= 0xFFFF) ? String.fromCharCode(code) : (code -= 0x10000, String.fromCharCode(Math.floor(code / 0x400) + 0xD800, code % 0x400 + 0xDC00) ) );}
function _Char_toUpper(char){ return _Utils_chr(char.toUpperCase());}
function _Char_toLower(char){ return _Utils_chr(char.toLowerCase());}
function _Char_toLocaleUpper(char){ return _Utils_chr(char.toLocaleUpperCase());}
function _Char_toLocaleLower(char){ return _Utils_chr(char.toLocaleLowerCase());}
/**_UNUSED/function _Json_errorToString(error){ return $elm$json$Json$Decode$errorToString(error);}//*/
// CORE DECODERS
function _Json_succeed(msg){ return { $: 0, a: msg };}
function _Json_fail(msg){ return { $: 1, a: msg };}
function _Json_decodePrim(decoder){ return { $: 2, b: decoder };}
var _Json_decodeInt = _Json_decodePrim(function(value) { return (typeof value !== 'number') ? _Json_expecting('an INT', value) : (-2147483647 < value && value < 2147483647 && (value | 0) === value) ? $elm$core$Result$Ok(value) : (isFinite(value) && !(value % 1)) ? $elm$core$Result$Ok(value) : _Json_expecting('an INT', value);});
var _Json_decodeBool = _Json_decodePrim(function(value) { return (typeof value === 'boolean') ? $elm$core$Result$Ok(value) : _Json_expecting('a BOOL', value);});
var _Json_decodeFloat = _Json_decodePrim(function(value) { return (typeof value === 'number') ? $elm$core$Result$Ok(value) : _Json_expecting('a FLOAT', value);});
var _Json_decodeValue = _Json_decodePrim(function(value) { return $elm$core$Result$Ok(_Json_wrap(value));});
var _Json_decodeString = _Json_decodePrim(function(value) { return (typeof value === 'string') ? $elm$core$Result$Ok(value) : (value instanceof String) ? $elm$core$Result$Ok(value + '') : _Json_expecting('a STRING', value);});
function _Json_decodeList(decoder) { return { $: 3, b: decoder }; }function _Json_decodeArray(decoder) { return { $: 4, b: decoder }; }
function _Json_decodeNull(value) { return { $: 5, c: value }; }
var _Json_decodeField = F2(function(field, decoder){ return { $: 6, d: field, b: decoder };});
var _Json_decodeIndex = F2(function(index, decoder){ return { $: 7, e: index, b: decoder };});
function _Json_decodeKeyValuePairs(decoder){ return { $: 8, b: decoder };}
function _Json_mapMany(f, decoders){ return { $: 9, f: f, g: decoders };}
var _Json_andThen = F2(function(callback, decoder){ return { $: 10, b: decoder, h: callback };});
function _Json_oneOf(decoders){ return { $: 11, g: decoders };}
// DECODING OBJECTS
var _Json_map1 = F2(function(f, d1){ return _Json_mapMany(f, [d1]);});
var _Json_map2 = F3(function(f, d1, d2){ return _Json_mapMany(f, [d1, d2]);});
var _Json_map3 = F4(function(f, d1, d2, d3){ return _Json_mapMany(f, [d1, d2, d3]);});
var _Json_map4 = F5(function(f, d1, d2, d3, d4){ return _Json_mapMany(f, [d1, d2, d3, d4]);});
var _Json_map5 = F6(function(f, d1, d2, d3, d4, d5){ return _Json_mapMany(f, [d1, d2, d3, d4, d5]);});
var _Json_map6 = F7(function(f, d1, d2, d3, d4, d5, d6){ return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6]);});
var _Json_map7 = F8(function(f, d1, d2, d3, d4, d5, d6, d7){ return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6, d7]);});
var _Json_map8 = F9(function(f, d1, d2, d3, d4, d5, d6, d7, d8){ return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6, d7, d8]);});
// DECODE
var _Json_runOnString = F2(function(decoder, string){ try { var value = JSON.parse(string); return _Json_runHelp(decoder, value); } catch (e) { return $elm$core$Result$Err(A2($elm$json$Json$Decode$Failure, 'This is not valid JSON! ' + e.message, _Json_wrap(string))); }});
var _Json_run = F2(function(decoder, value){ return _Json_runHelp(decoder, _Json_unwrap(value));});
function _Json_runHelp(decoder, value){ switch (decoder.$) { case 2: return decoder.b(value);
case 5: return (value === null) ? $elm$core$Result$Ok(decoder.c) : _Json_expecting('null', value);
case 3: if (!_Json_isArray(value)) { return _Json_expecting('a LIST', value); } return _Json_runArrayDecoder(decoder.b, value, _List_fromArray);
case 4: if (!_Json_isArray(value)) { return _Json_expecting('an ARRAY', value); } return _Json_runArrayDecoder(decoder.b, value, _Json_toElmArray);
case 6: var field = decoder.d; if (typeof value !== 'object' || value === null || !(field in value)) { return _Json_expecting('an OBJECT with a field named `' + field + '`', value); } var result = _Json_runHelp(decoder.b, value[field]); return ($elm$core$Result$isOk(result)) ? result : $elm$core$Result$Err(A2($elm$json$Json$Decode$Field, field, result.a));
case 7: var index = decoder.e; if (!_Json_isArray(value)) { return _Json_expecting('an ARRAY', value); } if (index >= value.length) { return _Json_expecting('a LONGER array. Need index ' + index + ' but only see ' + value.length + ' entries', value); } var result = _Json_runHelp(decoder.b, value[index]); return ($elm$core$Result$isOk(result)) ? result : $elm$core$Result$Err(A2($elm$json$Json$Decode$Index, index, result.a));
case 8: if (typeof value !== 'object' || value === null || _Json_isArray(value)) { return _Json_expecting('an OBJECT', value); }
var keyValuePairs = _List_Nil; // TODO test perf of Object.keys and switch when support is good enough for (var key in value) { if (value.hasOwnProperty(key)) { var result = _Json_runHelp(decoder.b, value[key]); if (!$elm$core$Result$isOk(result)) { return $elm$core$Result$Err(A2($elm$json$Json$Decode$Field, key, result.a)); } keyValuePairs = _List_Cons(_Utils_Tuple2(key, result.a), keyValuePairs); } } return $elm$core$Result$Ok($elm$core$List$reverse(keyValuePairs));
case 9: var answer = decoder.f; var decoders = decoder.g; for (var i = 0; i < decoders.length; i++) { var result = _Json_runHelp(decoders[i], value); if (!$elm$core$Result$isOk(result)) { return result; } answer = answer(result.a); } return $elm$core$Result$Ok(answer);
case 10: var result = _Json_runHelp(decoder.b, value); return (!$elm$core$Result$isOk(result)) ? result : _Json_runHelp(decoder.h(result.a), value);
case 11: var errors = _List_Nil; for (var temp = decoder.g; temp.b; temp = temp.b) // WHILE_CONS { var result = _Json_runHelp(temp.a, value); if ($elm$core$Result$isOk(result)) { return result; } errors = _List_Cons(result.a, errors); } return $elm$core$Result$Err($elm$json$Json$Decode$OneOf($elm$core$List$reverse(errors)));
case 1: return $elm$core$Result$Err(A2($elm$json$Json$Decode$Failure, decoder.a, _Json_wrap(value)));
case 0: return $elm$core$Result$Ok(decoder.a); }}
function _Json_runArrayDecoder(decoder, value, toElmValue){ var len = value.length; var array = new Array(len); for (var i = 0; i < len; i++) { var result = _Json_runHelp(decoder, value[i]); if (!$elm$core$Result$isOk(result)) { return $elm$core$Result$Err(A2($elm$json$Json$Decode$Index, i, result.a)); } array[i] = result.a; } return $elm$core$Result$Ok(toElmValue(array));}
function _Json_isArray(value){ return Array.isArray(value) || (typeof FileList !== 'undefined' && value instanceof FileList);}
function _Json_toElmArray(array){ return A2($elm$core$Array$initialize, array.length, function(i) { return array[i]; });}
function _Json_expecting(type, value){ return $elm$core$Result$Err(A2($elm$json$Json$Decode$Failure, 'Expecting ' + type, _Json_wrap(value)));}
// EQUALITY
function _Json_equality(x, y){ if (x === y) { return true; }
if (x.$ !== y.$) { return false; }
switch (x.$) { case 0: case 1: return x.a === y.a;
case 2: return x.b === y.b;
case 5: return x.c === y.c;
case 3: case 4: case 8: return _Json_equality(x.b, y.b);
case 6: return x.d === y.d && _Json_equality(x.b, y.b);
case 7: return x.e === y.e && _Json_equality(x.b, y.b);
case 9: return x.f === y.f && _Json_listEquality(x.g, y.g);
case 10: return x.h === y.h && _Json_equality(x.b, y.b);
case 11: return _Json_listEquality(x.g, y.g); }}
function _Json_listEquality(aDecoders, bDecoders){ var len = aDecoders.length; if (len !== bDecoders.length) { return false; } for (var i = 0; i < len; i++) { if (!_Json_equality(aDecoders[i], bDecoders[i])) { return false; } } return true;}
// ENCODE
var _Json_encode = F2(function(indentLevel, value){ return JSON.stringify(_Json_unwrap(value), null, indentLevel) + '';});
function _Json_wrap_UNUSED(value) { return { $: 0, a: value }; }function _Json_unwrap_UNUSED(value) { return value.a; }
function _Json_wrap(value) { return value; }function _Json_unwrap(value) { return value; }
function _Json_emptyArray() { return []; }function _Json_emptyObject() { return {}; }
var _Json_addField = F3(function(key, value, object){ object[key] = _Json_unwrap(value); return object;});
function _Json_addEntry(func){ return F2(function(entry, array) { array.push(_Json_unwrap(func(entry))); return array; });}
var _Json_encodeNull = _Json_wrap(null);
// TASKS
function _Scheduler_succeed(value){ return { $: 0, a: value };}
function _Scheduler_fail(error){ return { $: 1, a: error };}
function _Scheduler_binding(callback){ return { $: 2, b: callback, c: null };}
var _Scheduler_andThen = F2(function(callback, task){ return { $: 3, b: callback, d: task };});
var _Scheduler_onError = F2(function(callback, task){ return { $: 4, b: callback, d: task };});
function _Scheduler_receive(callback){ return { $: 5, b: callback };}
// PROCESSES
var _Scheduler_guid = 0;
function _Scheduler_rawSpawn(task){ var proc = { $: 0, e: _Scheduler_guid++, f: task, g: null, h: [] };
_Scheduler_enqueue(proc);
return proc;}
function _Scheduler_spawn(task){ return _Scheduler_binding(function(callback) { callback(_Scheduler_succeed(_Scheduler_rawSpawn(task))); });}
function _Scheduler_rawSend(proc, msg){ proc.h.push(msg); _Scheduler_enqueue(proc);}
var _Scheduler_send = F2(function(proc, msg){ return _Scheduler_binding(function(callback) { _Scheduler_rawSend(proc, msg); callback(_Scheduler_succeed(_Utils_Tuple0)); });});
function _Scheduler_kill(proc){ return _Scheduler_binding(function(callback) { var task = proc.f; if (task.$ === 2 && task.c) { task.c(); }
proc.f = null;
callback(_Scheduler_succeed(_Utils_Tuple0)); });}
/* STEP PROCESSES
type alias Process = { $ : tag , id : unique_id , root : Task , stack : null | { $: SUCCEED | FAIL, a: callback, b: stack } , mailbox : [msg] }
*/
var _Scheduler_working = false;var _Scheduler_queue = [];
function _Scheduler_enqueue(proc){ _Scheduler_queue.push(proc); if (_Scheduler_working) { return; } _Scheduler_working = true; while (proc = _Scheduler_queue.shift()) { _Scheduler_step(proc); } _Scheduler_working = false;}
function _Scheduler_step(proc){ while (proc.f) { var rootTag = proc.f.$; if (rootTag === 0 || rootTag === 1) { while (proc.g && proc.g.$ !== rootTag) { proc.g = proc.g.i; } if (!proc.g) { return; } proc.f = proc.g.b(proc.f.a); proc.g = proc.g.i; } else if (rootTag === 2) { proc.f.c = proc.f.b(function(newRoot) { proc.f = newRoot; _Scheduler_enqueue(proc); }); return; } else if (rootTag === 5) { if (proc.h.length === 0) { return; } proc.f = proc.f.b(proc.h.shift()); } else // if (rootTag === 3 || rootTag === 4) { proc.g = { $: rootTag === 3 ? 0 : 1, b: proc.f.b, i: proc.g }; proc.f = proc.f.d; } }}
function _Process_sleep(time){ return _Scheduler_binding(function(callback) { var id = setTimeout(function() { callback(_Scheduler_succeed(_Utils_Tuple0)); }, time);
return function() { clearTimeout(id); }; });}
// PROGRAMS
var _Platform_worker = F4(function(impl, flagDecoder, debugMetadata, args){ return _Platform_initialize( flagDecoder, args, impl.aT, impl.a1, impl.a$, function() { return function() {} } );});
// INITIALIZE A PROGRAM
function _Platform_initialize(flagDecoder, args, init, update, subscriptions, stepperBuilder){ var result = A2(_Json_run, flagDecoder, _Json_wrap(args ? args['flags'] : undefined)); $elm$core$Result$isOk(result) || _Debug_crash(2 /**_UNUSED/, _Json_errorToString(result.a) /**/); var managers = {}; var initPair = init(result.a); var model = initPair.a; var stepper = stepperBuilder(sendToApp, model); var ports = _Platform_setupEffects(managers, sendToApp);
function sendToApp(msg, viewMetadata) { var pair = A2(update, msg, model); stepper(model = pair.a, viewMetadata); _Platform_enqueueEffects(managers, pair.b, subscriptions(model)); }
_Platform_enqueueEffects(managers, initPair.b, subscriptions(model));
return ports ? { ports: ports } : {};}
// TRACK PRELOADS//// This is used by code in elm/browser and elm/http// to register any HTTP requests that are triggered by init.//
var _Platform_preload;
function _Platform_registerPreload(url){ _Platform_preload.add(url);}
// EFFECT MANAGERS
var _Platform_effectManagers = {};
function _Platform_setupEffects(managers, sendToApp){ var ports;
// setup all necessary effect managers for (var key in _Platform_effectManagers) { var manager = _Platform_effectManagers[key];
if (manager.a) { ports = ports || {}; ports[key] = manager.a(key, sendToApp); }
managers[key] = _Platform_instantiateManager(manager, sendToApp); }
return ports;}
function _Platform_createManager(init, onEffects, onSelfMsg, cmdMap, subMap){ return { b: init, c: onEffects, d: onSelfMsg, e: cmdMap, f: subMap };}
function _Platform_instantiateManager(info, sendToApp){ var router = { g: sendToApp, h: undefined };
var onEffects = info.c; var onSelfMsg = info.d; var cmdMap = info.e; var subMap = info.f;
function loop(state) { return A2(_Scheduler_andThen, loop, _Scheduler_receive(function(msg) { var value = msg.a;
if (msg.$ === 0) { return A3(onSelfMsg, router, value, state); }
return cmdMap && subMap ? A4(onEffects, router, value.i, value.j, state) : A3(onEffects, router, cmdMap ? value.i : value.j, state); })); }
return router.h = _Scheduler_rawSpawn(A2(_Scheduler_andThen, loop, info.b));}
// ROUTING
var _Platform_sendToApp = F2(function(router, msg){ return _Scheduler_binding(function(callback) { router.g(msg); callback(_Scheduler_succeed(_Utils_Tuple0)); });});
var _Platform_sendToSelf = F2(function(router, msg){ return A2(_Scheduler_send, router.h, { $: 0, a: msg });});
// BAGS
function _Platform_leaf(home){ return function(value) { return { $: 1, k: home, l: value }; };}
function _Platform_batch(list){ return { $: 2, m: list };}
var _Platform_map = F2(function(tagger, bag){ return { $: 3, n: tagger, o: bag }});
// PIPE BAGS INTO EFFECT MANAGERS//// Effects must be queued!//// Say your init contains a synchronous command, like Time.now or Time.here//// - This will produce a batch of effects (FX_1)// - The synchronous task triggers the subsequent `update` call// - This will produce a batch of effects (FX_2)//// If we just start dispatching FX_2, subscriptions from FX_2 can be processed// before subscriptions from FX_1. No good! Earlier versions of this code had// this problem, leading to these reports://// https://github.com/elm/core/issues/980// https://github.com/elm/core/pull/981// https://github.com/elm/compiler/issues/1776//// The queue is necessary to avoid ordering issues for synchronous commands.
// Why use true/false here? Why not just check the length of the queue?// The goal is to detect "are we currently dispatching effects?" If we// are, we need to bail and let the ongoing while loop handle things.//// Now say the queue has 1 element. When we dequeue the final element,// the queue will be empty, but we are still actively dispatching effects.// So you could get queue jumping in a really tricky category of cases.//var _Platform_effectsQueue = [];var _Platform_effectsActive = false;
function _Platform_enqueueEffects(managers, cmdBag, subBag){ _Platform_effectsQueue.push({ p: managers, q: cmdBag, r: subBag });
if (_Platform_effectsActive) return;
_Platform_effectsActive = true; for (var fx; fx = _Platform_effectsQueue.shift(); ) { _Platform_dispatchEffects(fx.p, fx.q, fx.r); } _Platform_effectsActive = false;}
function _Platform_dispatchEffects(managers, cmdBag, subBag){ var effectsDict = {}; _Platform_gatherEffects(true, cmdBag, effectsDict, null); _Platform_gatherEffects(false, subBag, effectsDict, null);
for (var home in managers) { _Scheduler_rawSend(managers[home], { $: 'fx', a: effectsDict[home] || { i: _List_Nil, j: _List_Nil } }); }}
function _Platform_gatherEffects(isCmd, bag, effectsDict, taggers){ switch (bag.$) { case 1: var home = bag.k; var effect = _Platform_toEffect(isCmd, home, taggers, bag.l); effectsDict[home] = _Platform_insert(isCmd, effect, effectsDict[home]); return;
case 2: for (var list = bag.m; list.b; list = list.b) // WHILE_CONS { _Platform_gatherEffects(isCmd, list.a, effectsDict, taggers); } return;
case 3: _Platform_gatherEffects(isCmd, bag.o, effectsDict, { s: bag.n, t: taggers }); return; }}
function _Platform_toEffect(isCmd, home, taggers, value){ function applyTaggers(x) { for (var temp = taggers; temp; temp = temp.t) { x = temp.s(x); } return x; }
var map = isCmd ? _Platform_effectManagers[home].e : _Platform_effectManagers[home].f;
return A2(map, applyTaggers, value)}
function _Platform_insert(isCmd, newEffect, effects){ effects = effects || { i: _List_Nil, j: _List_Nil };
isCmd ? (effects.i = _List_Cons(newEffect, effects.i)) : (effects.j = _List_Cons(newEffect, effects.j));
return effects;}
// PORTS
function _Platform_checkPortName(name){ if (_Platform_effectManagers[name]) { _Debug_crash(3, name) }}
// OUTGOING PORTS
function _Platform_outgoingPort(name, converter){ _Platform_checkPortName(name); _Platform_effectManagers[name] = { e: _Platform_outgoingPortMap, u: converter, a: _Platform_setupOutgoingPort }; return _Platform_leaf(name);}
var _Platform_outgoingPortMap = F2(function(tagger, value) { return value; });
function _Platform_setupOutgoingPort(name){ var subs = []; var converter = _Platform_effectManagers[name].u;
// CREATE MANAGER
var init = _Process_sleep(0);
_Platform_effectManagers[name].b = init; _Platform_effectManagers[name].c = F3(function(router, cmdList, state) { for ( ; cmdList.b; cmdList = cmdList.b) // WHILE_CONS { // grab a separate reference to subs in case unsubscribe is called var currentSubs = subs; var value = _Json_unwrap(converter(cmdList.a)); for (var i = 0; i < currentSubs.length; i++) { currentSubs[i](value); } } return init; });
// PUBLIC API
function subscribe(callback) { subs.push(callback); }
function unsubscribe(callback) { // copy subs into a new array in case unsubscribe is called within a // subscribed callback subs = subs.slice(); var index = subs.indexOf(callback); if (index >= 0) { subs.splice(index, 1); } }
return { subscribe: subscribe, unsubscribe: unsubscribe };}
// INCOMING PORTS
function _Platform_incomingPort(name, converter){ _Platform_checkPortName(name); _Platform_effectManagers[name] = { f: _Platform_incomingPortMap, u: converter, a: _Platform_setupIncomingPort }; return _Platform_leaf(name);}
var _Platform_incomingPortMap = F2(function(tagger, finalTagger){ return function(value) { return tagger(finalTagger(value)); };});
function _Platform_setupIncomingPort(name, sendToApp){ var subs = _List_Nil; var converter = _Platform_effectManagers[name].u;
// CREATE MANAGER
var init = _Scheduler_succeed(null);
_Platform_effectManagers[name].b = init; _Platform_effectManagers[name].c = F3(function(router, subList, state) { subs = subList; return init; });
// PUBLIC API
function send(incomingValue) { var result = A2(_Json_run, converter, _Json_wrap(incomingValue));
$elm$core$Result$isOk(result) || _Debug_crash(4, name, result.a);
var value = result.a; for (var temp = subs; temp.b; temp = temp.b) // WHILE_CONS { sendToApp(temp.a(value)); } }
return { send: send };}
// EXPORT ELM MODULES//// Have DEBUG and PROD versions so that we can (1) give nicer errors in// debug mode and (2) not pay for the bits needed for that in prod mode.//
function _Platform_export(exports){ scope['Elm'] ? _Platform_mergeExportsProd(scope['Elm'], exports) : scope['Elm'] = exports;}
function _Platform_mergeExportsProd(obj, exports){ for (var name in exports) { (name in obj) ? (name == 'init') ? _Debug_crash(6) : _Platform_mergeExportsProd(obj[name], exports[name]) : (obj[name] = exports[name]); }}
function _Platform_export_UNUSED(exports){ scope['Elm'] ? _Platform_mergeExportsDebug('Elm', scope['Elm'], exports) : scope['Elm'] = exports;}
function _Platform_mergeExportsDebug(moduleName, obj, exports){ for (var name in exports) { (name in obj) ? (name == 'init') ? _Debug_crash(6, moduleName) : _Platform_mergeExportsDebug(moduleName + '.' + name, obj[name], exports[name]) : (obj[name] = exports[name]); }}
// HELPERS
var _VirtualDom_divertHrefToApp;
var _VirtualDom_doc = typeof document !== 'undefined' ? document : {};
function _VirtualDom_appendChild(parent, child){ parent.appendChild(child);}
var _VirtualDom_init = F4(function(virtualNode, flagDecoder, debugMetadata, args){ // NOTE: this function needs _Platform_export available to work
/**/ var node = args['node']; //*/ /**_UNUSED/ var node = args && args['node'] ? args['node'] : _Debug_crash(0); //*/
node.parentNode.replaceChild( _VirtualDom_render(virtualNode, function() {}), node );
return {};});
// TEXT
function _VirtualDom_text(string){ return { $: 0, a: string };}
// NODE
var _VirtualDom_nodeNS = F2(function(namespace, tag){ return F2(function(factList, kidList) { for (var kids = [], descendantsCount = 0; kidList.b; kidList = kidList.b) // WHILE_CONS { var kid = kidList.a; descendantsCount += (kid.b || 0); kids.push(kid); } descendantsCount += kids.length;
return { $: 1, c: tag, d: _VirtualDom_organizeFacts(factList), e: kids, f: namespace, b: descendantsCount }; });});
var _VirtualDom_node = _VirtualDom_nodeNS(undefined);
// KEYED NODE
var _VirtualDom_keyedNodeNS = F2(function(namespace, tag){ return F2(function(factList, kidList) { for (var kids = [], descendantsCount = 0; kidList.b; kidList = kidList.b) // WHILE_CONS { var kid = kidList.a; descendantsCount += (kid.b.b || 0); kids.push(kid); } descendantsCount += kids.length;
return { $: 2, c: tag, d: _VirtualDom_organizeFacts(factList), e: kids, f: namespace, b: descendantsCount }; });});
var _VirtualDom_keyedNode = _VirtualDom_keyedNodeNS(undefined);
// CUSTOM
function _VirtualDom_custom(factList, model, render, diff){ return { $: 3, d: _VirtualDom_organizeFacts(factList), g: model, h: render, i: diff };}
// MAP
var _VirtualDom_map = F2(function(tagger, node){ return { $: 4, j: tagger, k: node, b: 1 + (node.b || 0) };});
// LAZY
function _VirtualDom_thunk(refs, thunk){ return { $: 5, l: refs, m: thunk, k: undefined };}
var _VirtualDom_lazy = F2(function(func, a){ return _VirtualDom_thunk([func, a], function() { return func(a); });});
var _VirtualDom_lazy2 = F3(function(func, a, b){ return _VirtualDom_thunk([func, a, b], function() { return A2(func, a, b); });});
var _VirtualDom_lazy3 = F4(function(func, a, b, c){ return _VirtualDom_thunk([func, a, b, c], function() { return A3(func, a, b, c); });});
var _VirtualDom_lazy4 = F5(function(func, a, b, c, d){ return _VirtualDom_thunk([func, a, b, c, d], function() { return A4(func, a, b, c, d); });});
var _VirtualDom_lazy5 = F6(function(func, a, b, c, d, e){ return _VirtualDom_thunk([func, a, b, c, d, e], function() { return A5(func, a, b, c, d, e); });});
var _VirtualDom_lazy6 = F7(function(func, a, b, c, d, e, f){ return _VirtualDom_thunk([func, a, b, c, d, e, f], function() { return A6(func, a, b, c, d, e, f); });});
var _VirtualDom_lazy7 = F8(function(func, a, b, c, d, e, f, g){ return _VirtualDom_thunk([func, a, b, c, d, e, f, g], function() { return A7(func, a, b, c, d, e, f, g); });});
var _VirtualDom_lazy8 = F9(function(func, a, b, c, d, e, f, g, h){ return _VirtualDom_thunk([func, a, b, c, d, e, f, g, h], function() { return A8(func, a, b, c, d, e, f, g, h); });});
// FACTS
var _VirtualDom_on = F2(function(key, handler){ return { $: 'a0', n: key, o: handler };});var _VirtualDom_style = F2(function(key, value){ return { $: 'a1', n: key, o: value };});var _VirtualDom_property = F2(function(key, value){ return { $: 'a2', n: key, o: value };});var _VirtualDom_attribute = F2(function(key, value){ return { $: 'a3', n: key, o: value };});var _VirtualDom_attributeNS = F3(function(namespace, key, value){ return { $: 'a4', n: key, o: { f: namespace, o: value } };});
// XSS ATTACK VECTOR CHECKS//// For some reason, tabs can appear in href protocols and it still works.// So '\tjava\tSCRIPT:alert("!!!")' and 'javascript:alert("!!!")' are the same// in practice. That is why _VirtualDom_RE_js and _VirtualDom_RE_js_html look// so freaky.//// Pulling the regular expressions out to the top level gives a slight speed// boost in small benchmarks (4-10%) but hoisting values to reduce allocation// can be unpredictable in large programs where JIT may have a harder time with// functions are not fully self-contained. The benefit is more that the js and// js_html ones are so weird that I prefer to see them near each other.
var _VirtualDom_RE_script = /^script$/i;var _VirtualDom_RE_on_formAction = /^(on|formAction$)/i;var _VirtualDom_RE_js = /^\s*j\s*a\s*v\s*a\s*s\s*c\s*r\s*i\s*p\s*t\s*:/i;var _VirtualDom_RE_js_html = /^\s*(j\s*a\s*v\s*a\s*s\s*c\s*r\s*i\s*p\s*t\s*:|d\s*a\s*t\s*a\s*:\s*t\s*e\s*x\s*t\s*\/\s*h\s*t\s*m\s*l\s*(,|;))/i;
function _VirtualDom_noScript(tag){ return _VirtualDom_RE_script.test(tag) ? 'p' : tag;}
function _VirtualDom_noOnOrFormAction(key){ return _VirtualDom_RE_on_formAction.test(key) ? 'data-' + key : key;}
function _VirtualDom_noInnerHtmlOrFormAction(key){ return key == 'innerHTML' || key == 'outerHTML' || key == 'formAction' ? 'data-' + key : key;}
function _VirtualDom_noJavaScriptUri(value){ return _VirtualDom_RE_js.test(value) ? /**/''//*//**_UNUSED/'javascript:alert("This is an XSS vector. Please use ports or web components instead.")'//*/ : value;}
function _VirtualDom_noJavaScriptOrHtmlUri(value){ return _VirtualDom_RE_js_html.test(value) ? /**/''//*//**_UNUSED/'javascript:alert("This is an XSS vector. Please use ports or web components instead.")'//*/ : value;}
function _VirtualDom_noJavaScriptOrHtmlJson(value){ return (typeof _Json_unwrap(value) === 'string' && _VirtualDom_RE_js_html.test(_Json_unwrap(value))) ? _Json_wrap( /**/''//*//**_UNUSED/'javascript:alert("This is an XSS vector. Please use ports or web components instead.")'//*/ ) : value;}
// MAP FACTS
var _VirtualDom_mapAttribute = F2(function(func, attr){ return (attr.$ === 'a0') ? A2(_VirtualDom_on, attr.n, _VirtualDom_mapHandler(func, attr.o)) : attr;});
function _VirtualDom_mapHandler(func, handler){ var tag = $elm$virtual_dom$VirtualDom$toHandlerInt(handler);
// 0 = Normal // 1 = MayStopPropagation // 2 = MayPreventDefault // 3 = Custom
return { $: handler.$, a: !tag ? A2($elm$json$Json$Decode$map, func, handler.a) : A3($elm$json$Json$Decode$map2, tag < 3 ? _VirtualDom_mapEventTuple : _VirtualDom_mapEventRecord, $elm$json$Json$Decode$succeed(func), handler.a ) };}
var _VirtualDom_mapEventTuple = F2(function(func, tuple){ return _Utils_Tuple2(func(tuple.a), tuple.b);});
var _VirtualDom_mapEventRecord = F2(function(func, record){ return { x: func(record.x), X: record.X, V: record.V }});
// ORGANIZE FACTS
function _VirtualDom_organizeFacts(factList){ for (var facts = {}; factList.b; factList = factList.b) // WHILE_CONS { var entry = factList.a;
var tag = entry.$; var key = entry.n; var value = entry.o;
if (tag === 'a2') { (key === 'className') ? _VirtualDom_addClass(facts, key, _Json_unwrap(value)) : facts[key] = _Json_unwrap(value);
continue; }
var subFacts = facts[tag] || (facts[tag] = {}); (tag === 'a3' && key === 'class') ? _VirtualDom_addClass(subFacts, key, value) : subFacts[key] = value; }
return facts;}
function _VirtualDom_addClass(object, key, newClass){ var classes = object[key]; object[key] = classes ? classes + ' ' + newClass : newClass;}
// RENDER
function _VirtualDom_render(vNode, eventNode){ var tag = vNode.$;
if (tag === 5) { return _VirtualDom_render(vNode.k || (vNode.k = vNode.m()), eventNode); }
if (tag === 0) { return _VirtualDom_doc.createTextNode(vNode.a); }
if (tag === 4) { var subNode = vNode.k; var tagger = vNode.j;
while (subNode.$ === 4) { typeof tagger !== 'object' ? tagger = [tagger, subNode.j] : tagger.push(subNode.j);
subNode = subNode.k; }
var subEventRoot = { j: tagger, p: eventNode }; var domNode = _VirtualDom_render(subNode, subEventRoot); domNode.elm_event_node_ref = subEventRoot; return domNode; }
if (tag === 3) { var domNode = vNode.h(vNode.g); _VirtualDom_applyFacts(domNode, eventNode, vNode.d); return domNode; }
// at this point `tag` must be 1 or 2
var domNode = vNode.f ? _VirtualDom_doc.createElementNS(vNode.f, vNode.c) : _VirtualDom_doc.createElement(vNode.c);
if (_VirtualDom_divertHrefToApp && vNode.c == 'a') { domNode.addEventListener('click', _VirtualDom_divertHrefToApp(domNode)); }
_VirtualDom_applyFacts(domNode, eventNode, vNode.d);
for (var kids = vNode.e, i = 0; i < kids.length; i++) { _VirtualDom_appendChild(domNode, _VirtualDom_render(tag === 1 ? kids[i] : kids[i].b, eventNode)); }
return domNode;}
// APPLY FACTS
function _VirtualDom_applyFacts(domNode, eventNode, facts){ for (var key in facts) { var value = facts[key];
key === 'a1' ? _VirtualDom_applyStyles(domNode, value) : key === 'a0' ? _VirtualDom_applyEvents(domNode, eventNode, value) : key === 'a3' ? _VirtualDom_applyAttrs(domNode, value) : key === 'a4' ? _VirtualDom_applyAttrsNS(domNode, value) : ((key !== 'value' && key !== 'checked') || domNode[key] !== value) && (domNode[key] = value); }}
// APPLY STYLES
function _VirtualDom_applyStyles(domNode, styles){ var domNodeStyle = domNode.style;
for (var key in styles) { domNodeStyle[key] = styles[key]; }}
// APPLY ATTRS
function _VirtualDom_applyAttrs(domNode, attrs){ for (var key in attrs) { var value = attrs[key]; typeof value !== 'undefined' ? domNode.setAttribute(key, value) : domNode.removeAttribute(key); }}
// APPLY NAMESPACED ATTRS
function _VirtualDom_applyAttrsNS(domNode, nsAttrs){ for (var key in nsAttrs) { var pair = nsAttrs[key]; var namespace = pair.f; var value = pair.o;
typeof value !== 'undefined' ? domNode.setAttributeNS(namespace, key, value) : domNode.removeAttributeNS(namespace, key); }}
// APPLY EVENTS
function _VirtualDom_applyEvents(domNode, eventNode, events){ var allCallbacks = domNode.elmFs || (domNode.elmFs = {});
for (var key in events) { var newHandler = events[key]; var oldCallback = allCallbacks[key];
if (!newHandler) { domNode.removeEventListener(key, oldCallback); allCallbacks[key] = undefined; continue; }
if (oldCallback) { var oldHandler = oldCallback.q; if (oldHandler.$ === newHandler.$) { oldCallback.q = newHandler; continue; } domNode.removeEventListener(key, oldCallback); }
oldCallback = _VirtualDom_makeCallback(eventNode, newHandler); domNode.addEventListener(key, oldCallback, _VirtualDom_passiveSupported && { passive: $elm$virtual_dom$VirtualDom$toHandlerInt(newHandler) < 2 } ); allCallbacks[key] = oldCallback; }}
// PASSIVE EVENTS
var _VirtualDom_passiveSupported;
try{ window.addEventListener('t', null, Object.defineProperty({}, 'passive', { get: function() { _VirtualDom_passiveSupported = true; } }));}catch(e) {}
// EVENT HANDLERS
function _VirtualDom_makeCallback(eventNode, initialHandler){ function callback(event) { var handler = callback.q; var result = _Json_runHelp(handler.a, event);
if (!$elm$core$Result$isOk(result)) { return; }
var tag = $elm$virtual_dom$VirtualDom$toHandlerInt(handler);
// 0 = Normal // 1 = MayStopPropagation // 2 = MayPreventDefault // 3 = Custom
var value = result.a; var message = !tag ? value : tag < 3 ? value.a : value.x; var stopPropagation = tag == 1 ? value.b : tag == 3 && value.X; var currentEventNode = ( stopPropagation && event.stopPropagation(), (tag == 2 ? value.b : tag == 3 && value.V) && event.preventDefault(), eventNode ); var tagger; var i; while (tagger = currentEventNode.j) { if (typeof tagger == 'function') { message = tagger(message); } else { for (var i = tagger.length; i--; ) { message = tagger[i](message); } } currentEventNode = currentEventNode.p; } currentEventNode(message, stopPropagation); // stopPropagation implies isSync }
callback.q = initialHandler;
return callback;}
function _VirtualDom_equalEvents(x, y){ return x.$ == y.$ && _Json_equality(x.a, y.a);}
// DIFF
// TODO: Should we do patches like in iOS?//// type Patch// = At Int Patch// | Batch (List Patch)// | Change ...//// How could it not be better?//function _VirtualDom_diff(x, y){ var patches = []; _VirtualDom_diffHelp(x, y, patches, 0); return patches;}
function _VirtualDom_pushPatch(patches, type, index, data){ var patch = { $: type, r: index, s: data, t: undefined, u: undefined }; patches.push(patch); return patch;}
function _VirtualDom_diffHelp(x, y, patches, index){ if (x === y) { return; }
var xType = x.$; var yType = y.$;
// Bail if you run into different types of nodes. Implies that the // structure has changed significantly and it's not worth a diff. if (xType !== yType) { if (xType === 1 && yType === 2) { y = _VirtualDom_dekey(y); yType = 1; } else { _VirtualDom_pushPatch(patches, 0, index, y); return; } }
// Now we know that both nodes are the same $. switch (yType) { case 5: var xRefs = x.l; var yRefs = y.l; var i = xRefs.length; var same = i === yRefs.length; while (same && i--) { same = xRefs[i] === yRefs[i]; } if (same) { y.k = x.k; return; } y.k = y.m(); var subPatches = []; _VirtualDom_diffHelp(x.k, y.k, subPatches, 0); subPatches.length > 0 && _VirtualDom_pushPatch(patches, 1, index, subPatches); return;
case 4: // gather nested taggers var xTaggers = x.j; var yTaggers = y.j; var nesting = false;
var xSubNode = x.k; while (xSubNode.$ === 4) { nesting = true;
typeof xTaggers !== 'object' ? xTaggers = [xTaggers, xSubNode.j] : xTaggers.push(xSubNode.j);
xSubNode = xSubNode.k; }
var ySubNode = y.k; while (ySubNode.$ === 4) { nesting = true;
typeof yTaggers !== 'object' ? yTaggers = [yTaggers, ySubNode.j] : yTaggers.push(ySubNode.j);
ySubNode = ySubNode.k; }
// Just bail if different numbers of taggers. This implies the // structure of the virtual DOM has changed. if (nesting && xTaggers.length !== yTaggers.length) { _VirtualDom_pushPatch(patches, 0, index, y); return; }
// check if taggers are "the same" if (nesting ? !_VirtualDom_pairwiseRefEqual(xTaggers, yTaggers) : xTaggers !== yTaggers) { _VirtualDom_pushPatch(patches, 2, index, yTaggers); }
// diff everything below the taggers _VirtualDom_diffHelp(xSubNode, ySubNode, patches, index + 1); return;
case 0: if (x.a !== y.a) { _VirtualDom_pushPatch(patches, 3, index, y.a); } return;
case 1: _VirtualDom_diffNodes(x, y, patches, index, _VirtualDom_diffKids); return;
case 2: _VirtualDom_diffNodes(x, y, patches, index, _VirtualDom_diffKeyedKids); return;
case 3: if (x.h !== y.h) { _VirtualDom_pushPatch(patches, 0, index, y); return; }
var factsDiff = _VirtualDom_diffFacts(x.d, y.d); factsDiff && _VirtualDom_pushPatch(patches, 4, index, factsDiff);
var patch = y.i(x.g, y.g); patch && _VirtualDom_pushPatch(patches, 5, index, patch);
return; }}
// assumes the incoming arrays are the same lengthfunction _VirtualDom_pairwiseRefEqual(as, bs){ for (var i = 0; i < as.length; i++) { if (as[i] !== bs[i]) { return false; } }
return true;}
function _VirtualDom_diffNodes(x, y, patches, index, diffKids){ // Bail if obvious indicators have changed. Implies more serious // structural changes such that it's not worth it to diff. if (x.c !== y.c || x.f !== y.f) { _VirtualDom_pushPatch(patches, 0, index, y); return; }
var factsDiff = _VirtualDom_diffFacts(x.d, y.d); factsDiff && _VirtualDom_pushPatch(patches, 4, index, factsDiff);
diffKids(x, y, patches, index);}
// DIFF FACTS
// TODO Instead of creating a new diff object, it's possible to just test if// there *is* a diff. During the actual patch, do the diff again and make the// modifications directly. This way, there's no new allocations. Worth it?function _VirtualDom_diffFacts(x, y, category){ var diff;
// look for changes and removals for (var xKey in x) { if (xKey === 'a1' || xKey === 'a0' || xKey === 'a3' || xKey === 'a4') { var subDiff = _VirtualDom_diffFacts(x[xKey], y[xKey] || {}, xKey); if (subDiff) { diff = diff || {}; diff[xKey] = subDiff; } continue; }
// remove if not in the new facts if (!(xKey in y)) { diff = diff || {}; diff[xKey] = !category ? (typeof x[xKey] === 'string' ? '' : null) : (category === 'a1') ? '' : (category === 'a0' || category === 'a3') ? undefined : { f: x[xKey].f, o: undefined };
continue; }
var xValue = x[xKey]; var yValue = y[xKey];
// reference equal, so don't worry about it if (xValue === yValue && xKey !== 'value' && xKey !== 'checked' || category === 'a0' && _VirtualDom_equalEvents(xValue, yValue)) { continue; }
diff = diff || {}; diff[xKey] = yValue; }
// add new stuff for (var yKey in y) { if (!(yKey in x)) { diff = diff || {}; diff[yKey] = y[yKey]; } }
return diff;}
// DIFF KIDS
function _VirtualDom_diffKids(xParent, yParent, patches, index){ var xKids = xParent.e; var yKids = yParent.e;
var xLen = xKids.length; var yLen = yKids.length;
// FIGURE OUT IF THERE ARE INSERTS OR REMOVALS
if (xLen > yLen) { _VirtualDom_pushPatch(patches, 6, index, { v: yLen, i: xLen - yLen }); } else if (xLen < yLen) { _VirtualDom_pushPatch(patches, 7, index, { v: xLen, e: yKids }); }
// PAIRWISE DIFF EVERYTHING ELSE
for (var minLen = xLen < yLen ? xLen : yLen, i = 0; i < minLen; i++) { var xKid = xKids[i]; _VirtualDom_diffHelp(xKid, yKids[i], patches, ++index); index += xKid.b || 0; }}
// KEYED DIFF
function _VirtualDom_diffKeyedKids(xParent, yParent, patches, rootIndex){ var localPatches = [];
var changes = {}; // Dict String Entry var inserts = []; // Array { index : Int, entry : Entry } // type Entry = { tag : String, vnode : VNode, index : Int, data : _ }
var xKids = xParent.e; var yKids = yParent.e; var xLen = xKids.length; var yLen = yKids.length; var xIndex = 0; var yIndex = 0;
var index = rootIndex;
while (xIndex < xLen && yIndex < yLen) { var x = xKids[xIndex]; var y = yKids[yIndex];
var xKey = x.a; var yKey = y.a; var xNode = x.b; var yNode = y.b;
var newMatch = undefined; var oldMatch = undefined;
// check if keys match
if (xKey === yKey) { index++; _VirtualDom_diffHelp(xNode, yNode, localPatches, index); index += xNode.b || 0;
xIndex++; yIndex++; continue; }
// look ahead 1 to detect insertions and removals.
var xNext = xKids[xIndex + 1]; var yNext = yKids[yIndex + 1];
if (xNext) { var xNextKey = xNext.a; var xNextNode = xNext.b; oldMatch = yKey === xNextKey; }
if (yNext) { var yNextKey = yNext.a; var yNextNode = yNext.b; newMatch = xKey === yNextKey; }
// swap x and y if (newMatch && oldMatch) { index++; _VirtualDom_diffHelp(xNode, yNextNode, localPatches, index); _VirtualDom_insertNode(changes, localPatches, xKey, yNode, yIndex, inserts); index += xNode.b || 0;
index++; _VirtualDom_removeNode(changes, localPatches, xKey, xNextNode, index); index += xNextNode.b || 0;
xIndex += 2; yIndex += 2; continue; }
// insert y if (newMatch) { index++; _VirtualDom_insertNode(changes, localPatches, yKey, yNode, yIndex, inserts); _VirtualDom_diffHelp(xNode, yNextNode, localPatches, index); index += xNode.b || 0;
xIndex += 1; yIndex += 2; continue; }
// remove x if (oldMatch) { index++; _VirtualDom_removeNode(changes, localPatches, xKey, xNode, index); index += xNode.b || 0;
index++; _VirtualDom_diffHelp(xNextNode, yNode, localPatches, index); index += xNextNode.b || 0;
xIndex += 2; yIndex += 1; continue; }
// remove x, insert y if (xNext && xNextKey === yNextKey) { index++; _VirtualDom_removeNode(changes, localPatches, xKey, xNode, index); _VirtualDom_insertNode(changes, localPatches, yKey, yNode, yIndex, inserts); index += xNode.b || 0;
index++; _VirtualDom_diffHelp(xNextNode, yNextNode, localPatches, index); index += xNextNode.b || 0;
xIndex += 2; yIndex += 2; continue; }
break; }
// eat up any remaining nodes with removeNode and insertNode
while (xIndex < xLen) { index++; var x = xKids[xIndex]; var xNode = x.b; _VirtualDom_removeNode(changes, localPatches, x.a, xNode, index); index += xNode.b || 0; xIndex++; }
while (yIndex < yLen) { var endInserts = endInserts || []; var y = yKids[yIndex]; _VirtualDom_insertNode(changes, localPatches, y.a, y.b, undefined, endInserts); yIndex++; }
if (localPatches.length > 0 || inserts.length > 0 || endInserts) { _VirtualDom_pushPatch(patches, 8, rootIndex, { w: localPatches, x: inserts, y: endInserts }); }}
// CHANGES FROM KEYED DIFF
var _VirtualDom_POSTFIX = '_elmW6BL';
function _VirtualDom_insertNode(changes, localPatches, key, vnode, yIndex, inserts){ var entry = changes[key];
// never seen this key before if (!entry) { entry = { c: 0, z: vnode, r: yIndex, s: undefined };
inserts.push({ r: yIndex, A: entry }); changes[key] = entry;
return; }
// this key was removed earlier, a match! if (entry.c === 1) { inserts.push({ r: yIndex, A: entry });
entry.c = 2; var subPatches = []; _VirtualDom_diffHelp(entry.z, vnode, subPatches, entry.r); entry.r = yIndex; entry.s.s = { w: subPatches, A: entry };
return; }
// this key has already been inserted or moved, a duplicate! _VirtualDom_insertNode(changes, localPatches, key + _VirtualDom_POSTFIX, vnode, yIndex, inserts);}
function _VirtualDom_removeNode(changes, localPatches, key, vnode, index){ var entry = changes[key];
// never seen this key before if (!entry) { var patch = _VirtualDom_pushPatch(localPatches, 9, index, undefined);
changes[key] = { c: 1, z: vnode, r: index, s: patch };
return; }
// this key was inserted earlier, a match! if (entry.c === 0) { entry.c = 2; var subPatches = []; _VirtualDom_diffHelp(vnode, entry.z, subPatches, index);
_VirtualDom_pushPatch(localPatches, 9, index, { w: subPatches, A: entry });
return; }
// this key has already been removed or moved, a duplicate! _VirtualDom_removeNode(changes, localPatches, key + _VirtualDom_POSTFIX, vnode, index);}
// ADD DOM NODES//// Each DOM node has an "index" assigned in order of traversal. It is important// to minimize our crawl over the actual DOM, so these indexes (along with the// descendantsCount of virtual nodes) let us skip touching entire subtrees of// the DOM if we know there are no patches there.
function _VirtualDom_addDomNodes(domNode, vNode, patches, eventNode){ _VirtualDom_addDomNodesHelp(domNode, vNode, patches, 0, 0, vNode.b, eventNode);}
// assumes `patches` is non-empty and indexes increase monotonically.function _VirtualDom_addDomNodesHelp(domNode, vNode, patches, i, low, high, eventNode){ var patch = patches[i]; var index = patch.r;
while (index === low) { var patchType = patch.$;
if (patchType === 1) { _VirtualDom_addDomNodes(domNode, vNode.k, patch.s, eventNode); } else if (patchType === 8) { patch.t = domNode; patch.u = eventNode;
var subPatches = patch.s.w; if (subPatches.length > 0) { _VirtualDom_addDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode); } } else if (patchType === 9) { patch.t = domNode; patch.u = eventNode;
var data = patch.s; if (data) { data.A.s = domNode; var subPatches = data.w; if (subPatches.length > 0) { _VirtualDom_addDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode); } } } else { patch.t = domNode; patch.u = eventNode; }
i++;
if (!(patch = patches[i]) || (index = patch.r) > high) { return i; } }
var tag = vNode.$;
if (tag === 4) { var subNode = vNode.k;
while (subNode.$ === 4) { subNode = subNode.k; }
return _VirtualDom_addDomNodesHelp(domNode, subNode, patches, i, low + 1, high, domNode.elm_event_node_ref); }
// tag must be 1 or 2 at this point
var vKids = vNode.e; var childNodes = domNode.childNodes; for (var j = 0; j < vKids.length; j++) { low++; var vKid = tag === 1 ? vKids[j] : vKids[j].b; var nextLow = low + (vKid.b || 0); if (low <= index && index <= nextLow) { i = _VirtualDom_addDomNodesHelp(childNodes[j], vKid, patches, i, low, nextLow, eventNode); if (!(patch = patches[i]) || (index = patch.r) > high) { return i; } } low = nextLow; } return i;}
// APPLY PATCHES
function _VirtualDom_applyPatches(rootDomNode, oldVirtualNode, patches, eventNode){ if (patches.length === 0) { return rootDomNode; }
_VirtualDom_addDomNodes(rootDomNode, oldVirtualNode, patches, eventNode); return _VirtualDom_applyPatchesHelp(rootDomNode, patches);}
function _VirtualDom_applyPatchesHelp(rootDomNode, patches){ for (var i = 0; i < patches.length; i++) { var patch = patches[i]; var localDomNode = patch.t var newNode = _VirtualDom_applyPatch(localDomNode, patch); if (localDomNode === rootDomNode) { rootDomNode = newNode; } } return rootDomNode;}
function _VirtualDom_applyPatch(domNode, patch){ switch (patch.$) { case 0: return _VirtualDom_applyPatchRedraw(domNode, patch.s, patch.u);
case 4: _VirtualDom_applyFacts(domNode, patch.u, patch.s); return domNode;
case 3: domNode.replaceData(0, domNode.length, patch.s); return domNode;
case 1: return _VirtualDom_applyPatchesHelp(domNode, patch.s);
case 2: if (domNode.elm_event_node_ref) { domNode.elm_event_node_ref.j = patch.s; } else { domNode.elm_event_node_ref = { j: patch.s, p: patch.u }; } return domNode;
case 6: var data = patch.s; for (var i = 0; i < data.i; i++) { domNode.removeChild(domNode.childNodes[data.v]); } return domNode;
case 7: var data = patch.s; var kids = data.e; var i = data.v; var theEnd = domNode.childNodes[i]; for (; i < kids.length; i++) { domNode.insertBefore(_VirtualDom_render(kids[i], patch.u), theEnd); } return domNode;
case 9: var data = patch.s; if (!data) { domNode.parentNode.removeChild(domNode); return domNode; } var entry = data.A; if (typeof entry.r !== 'undefined') { domNode.parentNode.removeChild(domNode); } entry.s = _VirtualDom_applyPatchesHelp(domNode, data.w); return domNode;
case 8: return _VirtualDom_applyPatchReorder(domNode, patch);
case 5: return patch.s(domNode);
default: _Debug_crash(10); // 'Ran into an unknown patch!' }}
function _VirtualDom_applyPatchRedraw(domNode, vNode, eventNode){ var parentNode = domNode.parentNode; var newNode = _VirtualDom_render(vNode, eventNode);
if (!newNode.elm_event_node_ref) { newNode.elm_event_node_ref = domNode.elm_event_node_ref; }
if (parentNode && newNode !== domNode) { parentNode.replaceChild(newNode, domNode); } return newNode;}
function _VirtualDom_applyPatchReorder(domNode, patch){ var data = patch.s;
// remove end inserts var frag = _VirtualDom_applyPatchReorderEndInsertsHelp(data.y, patch);
// removals domNode = _VirtualDom_applyPatchesHelp(domNode, data.w);
// inserts var inserts = data.x; for (var i = 0; i < inserts.length; i++) { var insert = inserts[i]; var entry = insert.A; var node = entry.c === 2 ? entry.s : _VirtualDom_render(entry.z, patch.u); domNode.insertBefore(node, domNode.childNodes[insert.r]); }
// add end inserts if (frag) { _VirtualDom_appendChild(domNode, frag); }
return domNode;}
function _VirtualDom_applyPatchReorderEndInsertsHelp(endInserts, patch){ if (!endInserts) { return; }
var frag = _VirtualDom_doc.createDocumentFragment(); for (var i = 0; i < endInserts.length; i++) { var insert = endInserts[i]; var entry = insert.A; _VirtualDom_appendChild(frag, entry.c === 2 ? entry.s : _VirtualDom_render(entry.z, patch.u) ); } return frag;}
function _VirtualDom_virtualize(node){ // TEXT NODES
if (node.nodeType === 3) { return _VirtualDom_text(node.textContent); }
// WEIRD NODES
if (node.nodeType !== 1) { return _VirtualDom_text(''); }
// ELEMENT NODES
var attrList = _List_Nil; var attrs = node.attributes; for (var i = attrs.length; i--; ) { var attr = attrs[i]; var name = attr.name; var value = attr.value; attrList = _List_Cons( A2(_VirtualDom_attribute, name, value), attrList ); }
var tag = node.tagName.toLowerCase(); var kidList = _List_Nil; var kids = node.childNodes;
for (var i = kids.length; i--; ) { kidList = _List_Cons(_VirtualDom_virtualize(kids[i]), kidList); } return A3(_VirtualDom_node, tag, attrList, kidList);}
function _VirtualDom_dekey(keyedNode){ var keyedKids = keyedNode.e; var len = keyedKids.length; var kids = new Array(len); for (var i = 0; i < len; i++) { kids[i] = keyedKids[i].b; }
return { $: 1, c: keyedNode.c, d: keyedNode.d, e: kids, f: keyedNode.f, b: keyedNode.b };}
// ELEMENT
var _Debugger_element;
var _Browser_element = _Debugger_element || F4(function(impl, flagDecoder, debugMetadata, args){ return _Platform_initialize( flagDecoder, args, impl.aT, impl.a1, impl.a$, function(sendToApp, initialModel) { var view = impl.a2; /**/ var domNode = args['node']; //*/ /**_UNUSED/ var domNode = args && args['node'] ? args['node'] : _Debug_crash(0); //*/ var currNode = _VirtualDom_virtualize(domNode);
return _Browser_makeAnimator(initialModel, function(model) { var nextNode = view(model); var patches = _VirtualDom_diff(currNode, nextNode); domNode = _VirtualDom_applyPatches(domNode, currNode, patches, sendToApp); currNode = nextNode; }); } );});
// DOCUMENT
var _Debugger_document;
var _Browser_document = _Debugger_document || F4(function(impl, flagDecoder, debugMetadata, args){ return _Platform_initialize( flagDecoder, args, impl.aT, impl.a1, impl.a$, function(sendToApp, initialModel) { var divertHrefToApp = impl.W && impl.W(sendToApp) var view = impl.a2; var title = _VirtualDom_doc.title; var bodyNode = _VirtualDom_doc.body; var currNode = _VirtualDom_virtualize(bodyNode); return _Browser_makeAnimator(initialModel, function(model) { _VirtualDom_divertHrefToApp = divertHrefToApp; var doc = view(model); var nextNode = _VirtualDom_node('body')(_List_Nil)(doc.aL); var patches = _VirtualDom_diff(currNode, nextNode); bodyNode = _VirtualDom_applyPatches(bodyNode, currNode, patches, sendToApp); currNode = nextNode; _VirtualDom_divertHrefToApp = 0; (title !== doc.a0) && (_VirtualDom_doc.title = title = doc.a0); }); } );});
// ANIMATION
var _Browser_cancelAnimationFrame = typeof cancelAnimationFrame !== 'undefined' ? cancelAnimationFrame : function(id) { clearTimeout(id); };
var _Browser_requestAnimationFrame = typeof requestAnimationFrame !== 'undefined' ? requestAnimationFrame : function(callback) { return setTimeout(callback, 1000 / 60); };
function _Browser_makeAnimator(model, draw){ draw(model);
var state = 0;
function updateIfNeeded() { state = state === 1 ? 0 : ( _Browser_requestAnimationFrame(updateIfNeeded), draw(model), 1 ); }
return function(nextModel, isSync) { model = nextModel;
isSync ? ( draw(model), state === 2 && (state = 1) ) : ( state === 0 && _Browser_requestAnimationFrame(updateIfNeeded), state = 2 ); };}
// APPLICATION
function _Browser_application(impl){ var onUrlChange = impl.aV; var onUrlRequest = impl.aW; var key = function() { key.a(onUrlChange(_Browser_getUrl())); };
return _Browser_document({ W: function(sendToApp) { key.a = sendToApp; _Browser_window.addEventListener('popstate', key); _Browser_window.navigator.userAgent.indexOf('Trident') < 0 || _Browser_window.addEventListener('hashchange', key);
return F2(function(domNode, event) { if (!event.ctrlKey && !event.metaKey && !event.shiftKey && event.button < 1 && !domNode.target && !domNode.hasAttribute('download')) { event.preventDefault(); var href = domNode.href; var curr = _Browser_getUrl(); var next = $elm$url$Url$fromString(href).a; sendToApp(onUrlRequest( (next && curr.aw === next.aw && curr.ak === next.ak && curr.at.a === next.at.a ) ? $elm$browser$Browser$Internal(next) : $elm$browser$Browser$External(href) )); } }); }, aT: function(flags) { return A3(impl.aT, flags, _Browser_getUrl(), key); }, a2: impl.a2, a1: impl.a1, a$: impl.a$ });}
function _Browser_getUrl(){ return $elm$url$Url$fromString(_VirtualDom_doc.location.href).a || _Debug_crash(1);}
var _Browser_go = F2(function(key, n){ return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function() { n && history.go(n); key(); }));});
var _Browser_pushUrl = F2(function(key, url){ return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function() { history.pushState({}, '', url); key(); }));});
var _Browser_replaceUrl = F2(function(key, url){ return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function() { history.replaceState({}, '', url); key(); }));});
// GLOBAL EVENTS
var _Browser_fakeNode = { addEventListener: function() {}, removeEventListener: function() {} };var _Browser_doc = typeof document !== 'undefined' ? document : _Browser_fakeNode;var _Browser_window = typeof window !== 'undefined' ? window : _Browser_fakeNode;
var _Browser_on = F3(function(node, eventName, sendToSelf){ return _Scheduler_spawn(_Scheduler_binding(function(callback) { function handler(event) { _Scheduler_rawSpawn(sendToSelf(event)); } node.addEventListener(eventName, handler, _VirtualDom_passiveSupported && { passive: true }); return function() { node.removeEventListener(eventName, handler); }; }));});
var _Browser_decodeEvent = F2(function(decoder, event){ var result = _Json_runHelp(decoder, event); return $elm$core$Result$isOk(result) ? $elm$core$Maybe$Just(result.a) : $elm$core$Maybe$Nothing;});
// PAGE VISIBILITY
function _Browser_visibilityInfo(){ return (typeof _VirtualDom_doc.hidden !== 'undefined') ? { aR: 'hidden', aM: 'visibilitychange' } : (typeof _VirtualDom_doc.mozHidden !== 'undefined') ? { aR: 'mozHidden', aM: 'mozvisibilitychange' } : (typeof _VirtualDom_doc.msHidden !== 'undefined') ? { aR: 'msHidden', aM: 'msvisibilitychange' } : (typeof _VirtualDom_doc.webkitHidden !== 'undefined') ? { aR: 'webkitHidden', aM: 'webkitvisibilitychange' } : { aR: 'hidden', aM: 'visibilitychange' };}
// ANIMATION FRAMES
function _Browser_rAF(){ return _Scheduler_binding(function(callback) { var id = _Browser_requestAnimationFrame(function() { callback(_Scheduler_succeed(Date.now())); });
return function() { _Browser_cancelAnimationFrame(id); }; });}
function _Browser_now(){ return _Scheduler_binding(function(callback) { callback(_Scheduler_succeed(Date.now())); });}
// DOM STUFF
function _Browser_withNode(id, doStuff){ return _Scheduler_binding(function(callback) { _Browser_requestAnimationFrame(function() { var node = document.getElementById(id); callback(node ? _Scheduler_succeed(doStuff(node)) : _Scheduler_fail($elm$browser$Browser$Dom$NotFound(id)) ); }); });}
function _Browser_withWindow(doStuff){ return _Scheduler_binding(function(callback) { _Browser_requestAnimationFrame(function() { callback(_Scheduler_succeed(doStuff())); }); });}
// FOCUS and BLUR
var _Browser_call = F2(function(functionName, id){ return _Browser_withNode(id, function(node) { node[functionName](); return _Utils_Tuple0; });});
// WINDOW VIEWPORT
function _Browser_getViewport(){ return { aB: _Browser_getScene(), aI: { Y: _Browser_window.pageXOffset, Z: _Browser_window.pageYOffset, A: _Browser_doc.documentElement.clientWidth, v: _Browser_doc.documentElement.clientHeight } };}
function _Browser_getScene(){ var body = _Browser_doc.body; var elem = _Browser_doc.documentElement; return { A: Math.max(body.scrollWidth, body.offsetWidth, elem.scrollWidth, elem.offsetWidth, elem.clientWidth), v: Math.max(body.scrollHeight, body.offsetHeight, elem.scrollHeight, elem.offsetHeight, elem.clientHeight) };}
var _Browser_setViewport = F2(function(x, y){ return _Browser_withWindow(function() { _Browser_window.scroll(x, y); return _Utils_Tuple0; });});
// ELEMENT VIEWPORT
function _Browser_getViewportOf(id){ return _Browser_withNode(id, function(node) { return { aB: { A: node.scrollWidth, v: node.scrollHeight }, aI: { Y: node.scrollLeft, Z: node.scrollTop, A: node.clientWidth, v: node.clientHeight } }; });}
var _Browser_setViewportOf = F3(function(id, x, y){ return _Browser_withNode(id, function(node) { node.scrollLeft = x; node.scrollTop = y; return _Utils_Tuple0; });});
// ELEMENT
function _Browser_getElement(id){ return _Browser_withNode(id, function(node) { var rect = node.getBoundingClientRect(); var x = _Browser_window.pageXOffset; var y = _Browser_window.pageYOffset; return { aB: _Browser_getScene(), aI: { Y: x, Z: y, A: _Browser_doc.documentElement.clientWidth, v: _Browser_doc.documentElement.clientHeight }, ad: { Y: x + rect.left, Z: y + rect.top, A: rect.width, v: rect.height } }; });}
// LOAD and RELOAD
function _Browser_reload(skipCache){ return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function(callback) { _VirtualDom_doc.location.reload(skipCache); }));}
function _Browser_load(url){ return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function(callback) { try { _Browser_window.location = url; } catch(err) { // Only Firefox can throw a NS_ERROR_MALFORMED_URI exception here. // Other browsers reload the page, so let's be consistent about that. _VirtualDom_doc.location.reload(false); } }));}
// STRINGS
var _Parser_isSubString = F5(function(smallString, offset, row, col, bigString){ var smallLength = smallString.length; var isGood = offset + smallLength <= bigString.length;
for (var i = 0; isGood && i < smallLength; ) { var code = bigString.charCodeAt(offset); isGood = smallString[i++] === bigString[offset++] && ( code === 0x000A /* \n */ ? ( row++, col=1 ) : ( col++, (code & 0xF800) === 0xD800 ? smallString[i++] === bigString[offset++] : 1 ) ) }
return _Utils_Tuple3(isGood ? offset : -1, row, col);});
// CHARS
var _Parser_isSubChar = F3(function(predicate, offset, string){ return ( string.length <= offset ? -1 : (string.charCodeAt(offset) & 0xF800) === 0xD800 ? (predicate(_Utils_chr(string.substr(offset, 2))) ? offset + 2 : -1) : (predicate(_Utils_chr(string[offset])) ? ((string[offset] === '\n') ? -2 : (offset + 1)) : -1 ) );});
var _Parser_isAsciiCode = F3(function(code, offset, string){ return string.charCodeAt(offset) === code;});
// NUMBERS
var _Parser_chompBase10 = F2(function(offset, string){ for (; offset < string.length; offset++) { var code = string.charCodeAt(offset); if (code < 0x30 || 0x39 < code) { return offset; } } return offset;});
var _Parser_consumeBase = F3(function(base, offset, string){ for (var total = 0; offset < string.length; offset++) { var digit = string.charCodeAt(offset) - 0x30; if (digit < 0 || base <= digit) break; total = base * total + digit; } return _Utils_Tuple2(offset, total);});
var _Parser_consumeBase16 = F2(function(offset, string){ for (var total = 0; offset < string.length; offset++) { var code = string.charCodeAt(offset); if (0x30 <= code && code <= 0x39) { total = 16 * total + code - 0x30; } else if (0x41 <= code && code <= 0x46) { total = 16 * total + code - 55; } else if (0x61 <= code && code <= 0x66) { total = 16 * total + code - 87; } else { break; } } return _Utils_Tuple2(offset, total);});
// FIND STRING
var _Parser_findSubString = F5(function(smallString, offset, row, col, bigString){ var newOffset = bigString.indexOf(smallString, offset); var target = newOffset < 0 ? bigString.length : newOffset + smallString.length;
while (offset < target) { var code = bigString.charCodeAt(offset++); code === 0x000A /* \n */ ? ( col=1, row++ ) : ( col++, (code & 0xF800) === 0xD800 && offset++ ) }
return _Utils_Tuple3(newOffset, row, col);});var $elm$core$Basics$EQ = 1;var $elm$core$Basics$GT = 2;var $elm$core$Basics$LT = 0;var $elm$core$List$cons = _List_cons;var $elm$core$Dict$foldr = F3( function (func, acc, t) { foldr: while (true) { if (t.$ === -2) { return acc; } else { var key = t.b; var value = t.c; var left = t.d; var right = t.e; var $temp$func = func, $temp$acc = A3( func, key, value, A3($elm$core$Dict$foldr, func, acc, right)), $temp$t = left; func = $temp$func; acc = $temp$acc; t = $temp$t; continue foldr; } } });var $elm$core$Dict$toList = function (dict) { return A3( $elm$core$Dict$foldr, F3( function (key, value, list) { return A2( $elm$core$List$cons, _Utils_Tuple2(key, value), list); }), _List_Nil, dict);};var $elm$core$Dict$keys = function (dict) { return A3( $elm$core$Dict$foldr, F3( function (key, value, keyList) { return A2($elm$core$List$cons, key, keyList); }), _List_Nil, dict);};var $elm$core$Set$toList = function (_v0) { var dict = _v0; return $elm$core$Dict$keys(dict);};var $elm$core$Elm$JsArray$foldr = _JsArray_foldr;var $elm$core$Array$foldr = F3( function (func, baseCase, _v0) { var tree = _v0.c; var tail = _v0.d; var helper = F2( function (node, acc) { if (!node.$) { var subTree = node.a; return A3($elm$core$Elm$JsArray$foldr, helper, acc, subTree); } else { var values = node.a; return A3($elm$core$Elm$JsArray$foldr, func, acc, values); } }); return A3( $elm$core$Elm$JsArray$foldr, helper, A3($elm$core$Elm$JsArray$foldr, func, baseCase, tail), tree); });var $elm$core$Array$toList = function (array) { return A3($elm$core$Array$foldr, $elm$core$List$cons, _List_Nil, array);};var $elm$core$Result$Err = function (a) { return {$: 1, a: a};};var $elm$json$Json$Decode$Failure = F2( function (a, b) { return {$: 3, a: a, b: b}; });var $elm$json$Json$Decode$Field = F2( function (a, b) { return {$: 0, a: a, b: b}; });var $elm$json$Json$Decode$Index = F2( function (a, b) { return {$: 1, a: a, b: b}; });var $elm$core$Result$Ok = function (a) { return {$: 0, a: a};};var $elm$json$Json$Decode$OneOf = function (a) { return {$: 2, a: a};};var $elm$core$Basics$False = 1;var $elm$core$Basics$add = _Basics_add;var $elm$core$Maybe$Just = function (a) { return {$: 0, a: a};};var $elm$core$Maybe$Nothing = {$: 1};var $elm$core$String$all = _String_all;var $elm$core$Basics$and = _Basics_and;var $elm$core$Basics$append = _Utils_append;var $elm$json$Json$Encode$encode = _Json_encode;var $elm$core$String$fromInt = _String_fromNumber;var $elm$core$String$join = F2( function (sep, chunks) { return A2( _String_join, sep, _List_toArray(chunks)); });var $elm$core$String$split = F2( function (sep, string) { return _List_fromArray( A2(_String_split, sep, string)); });var $elm$json$Json$Decode$indent = function (str) { return A2( $elm$core$String$join, '\n ', A2($elm$core$String$split, '\n', str));};var $elm$core$List$foldl = F3( function (func, acc, list) { foldl: while (true) { if (!list.b) { return acc; } else { var x = list.a; var xs = list.b; var $temp$func = func, $temp$acc = A2(func, x, acc), $temp$list = xs; func = $temp$func; acc = $temp$acc; list = $temp$list; continue foldl; } } });var $elm$core$List$length = function (xs) { return A3( $elm$core$List$foldl, F2( function (_v0, i) { return i + 1; }), 0, xs);};var $elm$core$List$map2 = _List_map2;var $elm$core$Basics$le = _Utils_le;var $elm$core$Basics$sub = _Basics_sub;var $elm$core$List$rangeHelp = F3( function (lo, hi, list) { rangeHelp: while (true) { if (_Utils_cmp(lo, hi) < 1) { var $temp$lo = lo, $temp$hi = hi - 1, $temp$list = A2($elm$core$List$cons, hi, list); lo = $temp$lo; hi = $temp$hi; list = $temp$list; continue rangeHelp; } else { return list; } } });var $elm$core$List$range = F2( function (lo, hi) { return A3($elm$core$List$rangeHelp, lo, hi, _List_Nil); });var $elm$core$List$indexedMap = F2( function (f, xs) { return A3( $elm$core$List$map2, f, A2( $elm$core$List$range, 0, $elm$core$List$length(xs) - 1), xs); });var $elm$core$Char$toCode = _Char_toCode;var $elm$core$Char$isLower = function (_char) { var code = $elm$core$Char$toCode(_char); return (97 <= code) && (code <= 122);};var $elm$core$Char$isUpper = function (_char) { var code = $elm$core$Char$toCode(_char); return (code <= 90) && (65 <= code);};var $elm$core$Basics$or = _Basics_or;var $elm$core$Char$isAlpha = function (_char) { return $elm$core$Char$isLower(_char) || $elm$core$Char$isUpper(_char);};var $elm$core$Char$isDigit = function (_char) { var code = $elm$core$Char$toCode(_char); return (code <= 57) && (48 <= code);};var $elm$core$Char$isAlphaNum = function (_char) { return $elm$core$Char$isLower(_char) || ($elm$core$Char$isUpper(_char) || $elm$core$Char$isDigit(_char));};var $elm$core$List$reverse = function (list) { return A3($elm$core$List$foldl, $elm$core$List$cons, _List_Nil, list);};var $elm$core$String$uncons = _String_uncons;var $elm$json$Json$Decode$errorOneOf = F2( function (i, error) { return '\n\n(' + ($elm$core$String$fromInt(i + 1) + (') ' + $elm$json$Json$Decode$indent( $elm$json$Json$Decode$errorToString(error)))); });var $elm$json$Json$Decode$errorToString = function (error) { return A2($elm$json$Json$Decode$errorToStringHelp, error, _List_Nil);};var $elm$json$Json$Decode$errorToStringHelp = F2( function (error, context) { errorToStringHelp: while (true) { switch (error.$) { case 0: var f = error.a; var err = error.b; var isSimple = function () { var _v1 = $elm$core$String$uncons(f); if (_v1.$ === 1) { return false; } else { var _v2 = _v1.a; var _char = _v2.a; var rest = _v2.b; return $elm$core$Char$isAlpha(_char) && A2($elm$core$String$all, $elm$core$Char$isAlphaNum, rest); } }(); var fieldName = isSimple ? ('.' + f) : ('[\'' + (f + '\']')); var $temp$error = err, $temp$context = A2($elm$core$List$cons, fieldName, context); error = $temp$error; context = $temp$context; continue errorToStringHelp; case 1: var i = error.a; var err = error.b; var indexName = '[' + ($elm$core$String$fromInt(i) + ']'); var $temp$error = err, $temp$context = A2($elm$core$List$cons, indexName, context); error = $temp$error; context = $temp$context; continue errorToStringHelp; case 2: var errors = error.a; if (!errors.b) { return 'Ran into a Json.Decode.oneOf with no possibilities' + function () { if (!context.b) { return '!'; } else { return ' at json' + A2( $elm$core$String$join, '', $elm$core$List$reverse(context)); } }(); } else { if (!errors.b.b) { var err = errors.a; var $temp$error = err, $temp$context = context; error = $temp$error; context = $temp$context; continue errorToStringHelp; } else { var starter = function () { if (!context.b) { return 'Json.Decode.oneOf'; } else { return 'The Json.Decode.oneOf at json' + A2( $elm$core$String$join, '', $elm$core$List$reverse(context)); } }(); var introduction = starter + (' failed in the following ' + ($elm$core$String$fromInt( $elm$core$List$length(errors)) + ' ways:')); return A2( $elm$core$String$join, '\n\n', A2( $elm$core$List$cons, introduction, A2($elm$core$List$indexedMap, $elm$json$Json$Decode$errorOneOf, errors))); } } default: var msg = error.a; var json = error.b; var introduction = function () { if (!context.b) { return 'Problem with the given value:\n\n'; } else { return 'Problem with the value at json' + (A2( $elm$core$String$join, '', $elm$core$List$reverse(context)) + ':\n\n '); } }(); return introduction + ($elm$json$Json$Decode$indent( A2($elm$json$Json$Encode$encode, 4, json)) + ('\n\n' + msg)); } } });var $elm$core$Array$branchFactor = 32;var $elm$core$Array$Array_elm_builtin = F4( function (a, b, c, d) { return {$: 0, a: a, b: b, c: c, d: d}; });var $elm$core$Elm$JsArray$empty = _JsArray_empty;var $elm$core$Basics$ceiling = _Basics_ceiling;var $elm$core$Basics$fdiv = _Basics_fdiv;var $elm$core$Basics$logBase = F2( function (base, number) { return _Basics_log(number) / _Basics_log(base); });var $elm$core$Basics$toFloat = _Basics_toFloat;var $elm$core$Array$shiftStep = $elm$core$Basics$ceiling( A2($elm$core$Basics$logBase, 2, $elm$core$Array$branchFactor));var $elm$core$Array$empty = A4($elm$core$Array$Array_elm_builtin, 0, $elm$core$Array$shiftStep, $elm$core$Elm$JsArray$empty, $elm$core$Elm$JsArray$empty);var $elm$core$Elm$JsArray$initialize = _JsArray_initialize;var $elm$core$Array$Leaf = function (a) { return {$: 1, a: a};};var $elm$core$Basics$apL = F2( function (f, x) { return f(x); });var $elm$core$Basics$apR = F2( function (x, f) { return f(x); });var $elm$core$Basics$eq = _Utils_equal;var $elm$core$Basics$floor = _Basics_floor;var $elm$core$Elm$JsArray$length = _JsArray_length;var $elm$core$Basics$gt = _Utils_gt;var $elm$core$Basics$max = F2( function (x, y) { return (_Utils_cmp(x, y) > 0) ? x : y; });var $elm$core$Basics$mul = _Basics_mul;var $elm$core$Array$SubTree = function (a) { return {$: 0, a: a};};var $elm$core$Elm$JsArray$initializeFromList = _JsArray_initializeFromList;var $elm$core$Array$compressNodes = F2( function (nodes, acc) { compressNodes: while (true) { var _v0 = A2($elm$core$Elm$JsArray$initializeFromList, $elm$core$Array$branchFactor, nodes); var node = _v0.a; var remainingNodes = _v0.b; var newAcc = A2( $elm$core$List$cons, $elm$core$Array$SubTree(node), acc); if (!remainingNodes.b) { return $elm$core$List$reverse(newAcc); } else { var $temp$nodes = remainingNodes, $temp$acc = newAcc; nodes = $temp$nodes; acc = $temp$acc; continue compressNodes; } } });var $elm$core$Tuple$first = function (_v0) { var x = _v0.a; return x;};var $elm$core$Array$treeFromBuilder = F2( function (nodeList, nodeListSize) { treeFromBuilder: while (true) { var newNodeSize = $elm$core$Basics$ceiling(nodeListSize / $elm$core$Array$branchFactor); if (newNodeSize === 1) { return A2($elm$core$Elm$JsArray$initializeFromList, $elm$core$Array$branchFactor, nodeList).a; } else { var $temp$nodeList = A2($elm$core$Array$compressNodes, nodeList, _List_Nil), $temp$nodeListSize = newNodeSize; nodeList = $temp$nodeList; nodeListSize = $temp$nodeListSize; continue treeFromBuilder; } } });var $elm$core$Array$builderToArray = F2( function (reverseNodeList, builder) { if (!builder.e) { return A4( $elm$core$Array$Array_elm_builtin, $elm$core$Elm$JsArray$length(builder.g), $elm$core$Array$shiftStep, $elm$core$Elm$JsArray$empty, builder.g); } else { var treeLen = builder.e * $elm$core$Array$branchFactor; var depth = $elm$core$Basics$floor( A2($elm$core$Basics$logBase, $elm$core$Array$branchFactor, treeLen - 1)); var correctNodeList = reverseNodeList ? $elm$core$List$reverse(builder.h) : builder.h; var tree = A2($elm$core$Array$treeFromBuilder, correctNodeList, builder.e); return A4( $elm$core$Array$Array_elm_builtin, $elm$core$Elm$JsArray$length(builder.g) + treeLen, A2($elm$core$Basics$max, 5, depth * $elm$core$Array$shiftStep), tree, builder.g); } });var $elm$core$Basics$idiv = _Basics_idiv;var $elm$core$Basics$lt = _Utils_lt;var $elm$core$Array$initializeHelp = F5( function (fn, fromIndex, len, nodeList, tail) { initializeHelp: while (true) { if (fromIndex < 0) { return A2( $elm$core$Array$builderToArray, false, {h: nodeList, e: (len / $elm$core$Array$branchFactor) | 0, g: tail}); } else { var leaf = $elm$core$Array$Leaf( A3($elm$core$Elm$JsArray$initialize, $elm$core$Array$branchFactor, fromIndex, fn)); var $temp$fn = fn, $temp$fromIndex = fromIndex - $elm$core$Array$branchFactor, $temp$len = len, $temp$nodeList = A2($elm$core$List$cons, leaf, nodeList), $temp$tail = tail; fn = $temp$fn; fromIndex = $temp$fromIndex; len = $temp$len; nodeList = $temp$nodeList; tail = $temp$tail; continue initializeHelp; } } });var $elm$core$Basics$remainderBy = _Basics_remainderBy;var $elm$core$Array$initialize = F2( function (len, fn) { if (len <= 0) { return $elm$core$Array$empty; } else { var tailLen = len % $elm$core$Array$branchFactor; var tail = A3($elm$core$Elm$JsArray$initialize, tailLen, len - tailLen, fn); var initialFromIndex = (len - tailLen) - $elm$core$Array$branchFactor; return A5($elm$core$Array$initializeHelp, fn, initialFromIndex, len, _List_Nil, tail); } });var $elm$core$Basics$True = 0;var $elm$core$Result$isOk = function (result) { if (!result.$) { return true; } else { return false; }};var $elm$json$Json$Decode$map = _Json_map1;var $elm$json$Json$Decode$map2 = _Json_map2;var $elm$json$Json$Decode$succeed = _Json_succeed;var $elm$virtual_dom$VirtualDom$toHandlerInt = function (handler) { switch (handler.$) { case 0: return 0; case 1: return 1; case 2: return 2; default: return 3; }};var $elm$browser$Browser$External = function (a) { return {$: 1, a: a};};var $elm$browser$Browser$Internal = function (a) { return {$: 0, a: a};};var $elm$core$Basics$identity = function (x) { return x;};var $elm$browser$Browser$Dom$NotFound = $elm$core$Basics$identity;var $elm$url$Url$Http = 0;var $elm$url$Url$Https = 1;var $elm$url$Url$Url = F6( function (protocol, host, port_, path, query, fragment) { return {ai: fragment, ak: host, ar: path, at: port_, aw: protocol, ax: query}; });var $elm$core$String$contains = _String_contains;var $elm$core$String$length = _String_length;var $elm$core$String$slice = _String_slice;var $elm$core$String$dropLeft = F2( function (n, string) { return (n < 1) ? string : A3( $elm$core$String$slice, n, $elm$core$String$length(string), string); });var $elm$core$String$indexes = _String_indexes;var $elm$core$String$isEmpty = function (string) { return string === '';};var $elm$core$String$left = F2( function (n, string) { return (n < 1) ? '' : A3($elm$core$String$slice, 0, n, string); });var $elm$core$String$toInt = _String_toInt;var $elm$url$Url$chompBeforePath = F5( function (protocol, path, params, frag, str) { if ($elm$core$String$isEmpty(str) || A2($elm$core$String$contains, '@', str)) { return $elm$core$Maybe$Nothing; } else { var _v0 = A2($elm$core$String$indexes, ':', str); if (!_v0.b) { return $elm$core$Maybe$Just( A6($elm$url$Url$Url, protocol, str, $elm$core$Maybe$Nothing, path, params, frag)); } else { if (!_v0.b.b) { var i = _v0.a; var _v1 = $elm$core$String$toInt( A2($elm$core$String$dropLeft, i + 1, str)); if (_v1.$ === 1) { return $elm$core$Maybe$Nothing; } else { var port_ = _v1; return $elm$core$Maybe$Just( A6( $elm$url$Url$Url, protocol, A2($elm$core$String$left, i, str), port_, path, params, frag)); } } else { return $elm$core$Maybe$Nothing; } } } });var $elm$url$Url$chompBeforeQuery = F4( function (protocol, params, frag, str) { if ($elm$core$String$isEmpty(str)) { return $elm$core$Maybe$Nothing; } else { var _v0 = A2($elm$core$String$indexes, '/', str); if (!_v0.b) { return A5($elm$url$Url$chompBeforePath, protocol, '/', params, frag, str); } else { var i = _v0.a; return A5( $elm$url$Url$chompBeforePath, protocol, A2($elm$core$String$dropLeft, i, str), params, frag, A2($elm$core$String$left, i, str)); } } });var $elm$url$Url$chompBeforeFragment = F3( function (protocol, frag, str) { if ($elm$core$String$isEmpty(str)) { return $elm$core$Maybe$Nothing; } else { var _v0 = A2($elm$core$String$indexes, '?', str); if (!_v0.b) { return A4($elm$url$Url$chompBeforeQuery, protocol, $elm$core$Maybe$Nothing, frag, str); } else { var i = _v0.a; return A4( $elm$url$Url$chompBeforeQuery, protocol, $elm$core$Maybe$Just( A2($elm$core$String$dropLeft, i + 1, str)), frag, A2($elm$core$String$left, i, str)); } } });var $elm$url$Url$chompAfterProtocol = F2( function (protocol, str) { if ($elm$core$String$isEmpty(str)) { return $elm$core$Maybe$Nothing; } else { var _v0 = A2($elm$core$String$indexes, '#', str); if (!_v0.b) { return A3($elm$url$Url$chompBeforeFragment, protocol, $elm$core$Maybe$Nothing, str); } else { var i = _v0.a; return A3( $elm$url$Url$chompBeforeFragment, protocol, $elm$core$Maybe$Just( A2($elm$core$String$dropLeft, i + 1, str)), A2($elm$core$String$left, i, str)); } } });var $elm$core$String$startsWith = _String_startsWith;var $elm$url$Url$fromString = function (str) { return A2($elm$core$String$startsWith, 'http://', str) ? A2( $elm$url$Url$chompAfterProtocol, 0, A2($elm$core$String$dropLeft, 7, str)) : (A2($elm$core$String$startsWith, 'https://', str) ? A2( $elm$url$Url$chompAfterProtocol, 1, A2($elm$core$String$dropLeft, 8, str)) : $elm$core$Maybe$Nothing);};var $elm$core$Basics$never = function (_v0) { never: while (true) { var nvr = _v0; var $temp$_v0 = nvr; _v0 = $temp$_v0; continue never; }};var $elm$core$Task$Perform = $elm$core$Basics$identity;var $elm$core$Task$succeed = _Scheduler_succeed;var $elm$core$Task$init = $elm$core$Task$succeed(0);var $elm$core$List$foldrHelper = F4( function (fn, acc, ctr, ls) { if (!ls.b) { return acc; } else { var a = ls.a; var r1 = ls.b; if (!r1.b) { return A2(fn, a, acc); } else { var b = r1.a; var r2 = r1.b; if (!r2.b) { return A2( fn, a, A2(fn, b, acc)); } else { var c = r2.a; var r3 = r2.b; if (!r3.b) { return A2( fn, a, A2( fn, b, A2(fn, c, acc))); } else { var d = r3.a; var r4 = r3.b; var res = (ctr > 500) ? A3( $elm$core$List$foldl, fn, acc, $elm$core$List$reverse(r4)) : A4($elm$core$List$foldrHelper, fn, acc, ctr + 1, r4); return A2( fn, a, A2( fn, b, A2( fn, c, A2(fn, d, res)))); } } } } });var $elm$core$List$foldr = F3( function (fn, acc, ls) { return A4($elm$core$List$foldrHelper, fn, acc, 0, ls); });var $elm$core$List$map = F2( function (f, xs) { return A3( $elm$core$List$foldr, F2( function (x, acc) { return A2( $elm$core$List$cons, f(x), acc); }), _List_Nil, xs); });var $elm$core$Task$andThen = _Scheduler_andThen;var $elm$core$Task$map = F2( function (func, taskA) { return A2( $elm$core$Task$andThen, function (a) { return $elm$core$Task$succeed( func(a)); }, taskA); });var $elm$core$Task$map2 = F3( function (func, taskA, taskB) { return A2( $elm$core$Task$andThen, function (a) { return A2( $elm$core$Task$andThen, function (b) { return $elm$core$Task$succeed( A2(func, a, b)); }, taskB); }, taskA); });var $elm$core$Task$sequence = function (tasks) { return A3( $elm$core$List$foldr, $elm$core$Task$map2($elm$core$List$cons), $elm$core$Task$succeed(_List_Nil), tasks);};var $elm$core$Platform$sendToApp = _Platform_sendToApp;var $elm$core$Task$spawnCmd = F2( function (router, _v0) { var task = _v0; return _Scheduler_spawn( A2( $elm$core$Task$andThen, $elm$core$Platform$sendToApp(router), task)); });var $elm$core$Task$onEffects = F3( function (router, commands, state) { return A2( $elm$core$Task$map, function (_v0) { return 0; }, $elm$core$Task$sequence( A2( $elm$core$List$map, $elm$core$Task$spawnCmd(router), commands))); });var $elm$core$Task$onSelfMsg = F3( function (_v0, _v1, _v2) { return $elm$core$Task$succeed(0); });var $elm$core$Task$cmdMap = F2( function (tagger, _v0) { var task = _v0; return A2($elm$core$Task$map, tagger, task); });_Platform_effectManagers['Task'] = _Platform_createManager($elm$core$Task$init, $elm$core$Task$onEffects, $elm$core$Task$onSelfMsg, $elm$core$Task$cmdMap);var $elm$core$Task$command = _Platform_leaf('Task');var $elm$core$Task$perform = F2( function (toMessage, task) { return $elm$core$Task$command( A2($elm$core$Task$map, toMessage, task)); });var $elm$browser$Browser$element = _Browser_element;var $author$project$Parse$Point = $elm$core$Basics$identity;var $author$project$Parse$Vector = $elm$core$Basics$identity;var $author$project$Main$GotSvgSize = function (a) { return {$: 5, a: a};};var $elm$core$Basics$composeL = F3( function (g, f, x) { return g( f(x)); });var $elm$core$Task$onError = _Scheduler_onError;var $elm$core$Task$attempt = F2( function (resultToMessage, task) { return $elm$core$Task$command( A2( $elm$core$Task$onError, A2( $elm$core$Basics$composeL, A2($elm$core$Basics$composeL, $elm$core$Task$succeed, resultToMessage), $elm$core$Result$Err), A2( $elm$core$Task$andThen, A2( $elm$core$Basics$composeL, A2($elm$core$Basics$composeL, $elm$core$Task$succeed, resultToMessage), $elm$core$Result$Ok), task))); });var $elm$browser$Browser$Dom$getElement = _Browser_getElement;var $author$project$Main$getSvgSizeCmd = A2( $elm$core$Task$attempt, $author$project$Main$GotSvgSize, $elm$browser$Browser$Dom$getElement('svg'));var $elm$core$Basics$negate = function (n) { return -n;};var $author$project$Main$init = function (_v0) { return _Utils_Tuple2( { w: '', I: '', r: _List_fromArray( [ {H: 'A', Y: 5, Z: 10} ]), E: { S: {Y: 0.0, Z: 0.0}, J: 20.0, i: {v: 600.0, A: 800.0} }, t: _List_fromArray( [ {H: 'u', Y: -3, Z: 5} ]) }, $author$project$Main$getSvgSizeCmd);};var $author$project$Main$GetSvgSize = {$: 4};var $elm$browser$Browser$Events$Window = 1;var $elm$json$Json$Decode$field = _Json_decodeField;var $elm$json$Json$Decode$int = _Json_decodeInt;var $elm$browser$Browser$Events$MySub = F3( function (a, b, c) { return {$: 0, a: a, b: b, c: c}; });var $elm$browser$Browser$Events$State = F2( function (subs, pids) { return {as: pids, aF: subs}; });var $elm$core$Dict$RBEmpty_elm_builtin = {$: -2};var $elm$core$Dict$empty = $elm$core$Dict$RBEmpty_elm_builtin;var $elm$browser$Browser$Events$init = $elm$core$Task$succeed( A2($elm$browser$Browser$Events$State, _List_Nil, $elm$core$Dict$empty));var $elm$browser$Browser$Events$nodeToKey = function (node) { if (!node) { return 'd_'; } else { return 'w_'; }};var $elm$browser$Browser$Events$addKey = function (sub) { var node = sub.a; var name = sub.b; return _Utils_Tuple2( _Utils_ap( $elm$browser$Browser$Events$nodeToKey(node), name), sub);};var $elm$core$Dict$Black = 1;var $elm$core$Dict$RBNode_elm_builtin = F5( function (a, b, c, d, e) { return {$: -1, a: a, b: b, c: c, d: d, e: e}; });var $elm$core$Dict$Red = 0;var $elm$core$Dict$balance = F5( function (color, key, value, left, right) { if ((right.$ === -1) && (!right.a)) { var _v1 = right.a; var rK = right.b; var rV = right.c; var rLeft = right.d; var rRight = right.e; if ((left.$ === -1) && (!left.a)) { var _v3 = left.a; var lK = left.b; var lV = left.c; var lLeft = left.d; var lRight = left.e; return A5( $elm$core$Dict$RBNode_elm_builtin, 0, key, value, A5($elm$core$Dict$RBNode_elm_builtin, 1, lK, lV, lLeft, lRight), A5($elm$core$Dict$RBNode_elm_builtin, 1, rK, rV, rLeft, rRight)); } else { return A5( $elm$core$Dict$RBNode_elm_builtin, color, rK, rV, A5($elm$core$Dict$RBNode_elm_builtin, 0, key, value, left, rLeft), rRight); } } else { if ((((left.$ === -1) && (!left.a)) && (left.d.$ === -1)) && (!left.d.a)) { var _v5 = left.a; var lK = left.b; var lV = left.c; var _v6 = left.d; var _v7 = _v6.a; var llK = _v6.b; var llV = _v6.c; var llLeft = _v6.d; var llRight = _v6.e; var lRight = left.e; return A5( $elm$core$Dict$RBNode_elm_builtin, 0, lK, lV, A5($elm$core$Dict$RBNode_elm_builtin, 1, llK, llV, llLeft, llRight), A5($elm$core$Dict$RBNode_elm_builtin, 1, key, value, lRight, right)); } else { return A5($elm$core$Dict$RBNode_elm_builtin, color, key, value, left, right); } } });var $elm$core$Basics$compare = _Utils_compare;var $elm$core$Dict$insertHelp = F3( function (key, value, dict) { if (dict.$ === -2) { return A5($elm$core$Dict$RBNode_elm_builtin, 0, key, value, $elm$core$Dict$RBEmpty_elm_builtin, $elm$core$Dict$RBEmpty_elm_builtin); } else { var nColor = dict.a; var nKey = dict.b; var nValue = dict.c; var nLeft = dict.d; var nRight = dict.e; var _v1 = A2($elm$core$Basics$compare, key, nKey); switch (_v1) { case 0: return A5( $elm$core$Dict$balance, nColor, nKey, nValue, A3($elm$core$Dict$insertHelp, key, value, nLeft), nRight); case 1: return A5($elm$core$Dict$RBNode_elm_builtin, nColor, nKey, value, nLeft, nRight); default: return A5( $elm$core$Dict$balance, nColor, nKey, nValue, nLeft, A3($elm$core$Dict$insertHelp, key, value, nRight)); } } });var $elm$core$Dict$insert = F3( function (key, value, dict) { var _v0 = A3($elm$core$Dict$insertHelp, key, value, dict); if ((_v0.$ === -1) && (!_v0.a)) { var _v1 = _v0.a; var k = _v0.b; var v = _v0.c; var l = _v0.d; var r = _v0.e; return A5($elm$core$Dict$RBNode_elm_builtin, 1, k, v, l, r); } else { var x = _v0; return x; } });var $elm$core$Dict$fromList = function (assocs) { return A3( $elm$core$List$foldl, F2( function (_v0, dict) { var key = _v0.a; var value = _v0.b; return A3($elm$core$Dict$insert, key, value, dict); }), $elm$core$Dict$empty, assocs);};var $elm$core$Process$kill = _Scheduler_kill;var $elm$core$Dict$foldl = F3( function (func, acc, dict) { foldl: while (true) { if (dict.$ === -2) { return acc; } else { var key = dict.b; var value = dict.c; var left = dict.d; var right = dict.e; var $temp$func = func, $temp$acc = A3( func, key, value, A3($elm$core$Dict$foldl, func, acc, left)), $temp$dict = right; func = $temp$func; acc = $temp$acc; dict = $temp$dict; continue foldl; } } });var $elm$core$Dict$merge = F6( function (leftStep, bothStep, rightStep, leftDict, rightDict, initialResult) { var stepState = F3( function (rKey, rValue, _v0) { stepState: while (true) { var list = _v0.a; var result = _v0.b; if (!list.b) { return _Utils_Tuple2( list, A3(rightStep, rKey, rValue, result)); } else { var _v2 = list.a; var lKey = _v2.a; var lValue = _v2.b; var rest = list.b; if (_Utils_cmp(lKey, rKey) < 0) { var $temp$rKey = rKey, $temp$rValue = rValue, $temp$_v0 = _Utils_Tuple2( rest, A3(leftStep, lKey, lValue, result)); rKey = $temp$rKey; rValue = $temp$rValue; _v0 = $temp$_v0; continue stepState; } else { if (_Utils_cmp(lKey, rKey) > 0) { return _Utils_Tuple2( list, A3(rightStep, rKey, rValue, result)); } else { return _Utils_Tuple2( rest, A4(bothStep, lKey, lValue, rValue, result)); } } } } }); var _v3 = A3( $elm$core$Dict$foldl, stepState, _Utils_Tuple2( $elm$core$Dict$toList(leftDict), initialResult), rightDict); var leftovers = _v3.a; var intermediateResult = _v3.b; return A3( $elm$core$List$foldl, F2( function (_v4, result) { var k = _v4.a; var v = _v4.b; return A3(leftStep, k, v, result); }), intermediateResult, leftovers); });var $elm$browser$Browser$Events$Event = F2( function (key, event) { return {af: event, ao: key}; });var $elm$core$Platform$sendToSelf = _Platform_sendToSelf;var $elm$browser$Browser$Events$spawn = F3( function (router, key, _v0) { var node = _v0.a; var name = _v0.b; var actualNode = function () { if (!node) { return _Browser_doc; } else { return _Browser_window; } }(); return A2( $elm$core$Task$map, function (value) { return _Utils_Tuple2(key, value); }, A3( _Browser_on, actualNode, name, function (event) { return A2( $elm$core$Platform$sendToSelf, router, A2($elm$browser$Browser$Events$Event, key, event)); })); });var $elm$core$Dict$union = F2( function (t1, t2) { return A3($elm$core$Dict$foldl, $elm$core$Dict$insert, t2, t1); });var $elm$browser$Browser$Events$onEffects = F3( function (router, subs, state) { var stepRight = F3( function (key, sub, _v6) { var deads = _v6.a; var lives = _v6.b; var news = _v6.c; return _Utils_Tuple3( deads, lives, A2( $elm$core$List$cons, A3($elm$browser$Browser$Events$spawn, router, key, sub), news)); }); var stepLeft = F3( function (_v4, pid, _v5) { var deads = _v5.a; var lives = _v5.b; var news = _v5.c; return _Utils_Tuple3( A2($elm$core$List$cons, pid, deads), lives, news); }); var stepBoth = F4( function (key, pid, _v2, _v3) { var deads = _v3.a; var lives = _v3.b; var news = _v3.c; return _Utils_Tuple3( deads, A3($elm$core$Dict$insert, key, pid, lives), news); }); var newSubs = A2($elm$core$List$map, $elm$browser$Browser$Events$addKey, subs); var _v0 = A6( $elm$core$Dict$merge, stepLeft, stepBoth, stepRight, state.as, $elm$core$Dict$fromList(newSubs), _Utils_Tuple3(_List_Nil, $elm$core$Dict$empty, _List_Nil)); var deadPids = _v0.a; var livePids = _v0.b; var makeNewPids = _v0.c; return A2( $elm$core$Task$andThen, function (pids) { return $elm$core$Task$succeed( A2( $elm$browser$Browser$Events$State, newSubs, A2( $elm$core$Dict$union, livePids, $elm$core$Dict$fromList(pids)))); }, A2( $elm$core$Task$andThen, function (_v1) { return $elm$core$Task$sequence(makeNewPids); }, $elm$core$Task$sequence( A2($elm$core$List$map, $elm$core$Process$kill, deadPids)))); });var $elm$core$List$maybeCons = F3( function (f, mx, xs) { var _v0 = f(mx); if (!_v0.$) { var x = _v0.a; return A2($elm$core$List$cons, x, xs); } else { return xs; } });var $elm$core$List$filterMap = F2( function (f, xs) { return A3( $elm$core$List$foldr, $elm$core$List$maybeCons(f), _List_Nil, xs); });var $elm$browser$Browser$Events$onSelfMsg = F3( function (router, _v0, state) { var event = _v0.af; var key = _v0.ao; var toMessage = function (_v2) { var subKey = _v2.a; var _v3 = _v2.b; var node = _v3.a; var name = _v3.b; var decoder = _v3.c; return _Utils_eq(subKey, key) ? A2(_Browser_decodeEvent, decoder, event) : $elm$core$Maybe$Nothing; }; var messages = A2($elm$core$List$filterMap, toMessage, state.aF); return A2( $elm$core$Task$andThen, function (_v1) { return $elm$core$Task$succeed(state); }, $elm$core$Task$sequence( A2( $elm$core$List$map, $elm$core$Platform$sendToApp(router), messages))); });var $elm$browser$Browser$Events$subMap = F2( function (func, _v0) { var node = _v0.a; var name = _v0.b; var decoder = _v0.c; return A3( $elm$browser$Browser$Events$MySub, node, name, A2($elm$json$Json$Decode$map, func, decoder)); });_Platform_effectManagers['Browser.Events'] = _Platform_createManager($elm$browser$Browser$Events$init, $elm$browser$Browser$Events$onEffects, $elm$browser$Browser$Events$onSelfMsg, 0, $elm$browser$Browser$Events$subMap);var $elm$browser$Browser$Events$subscription = _Platform_leaf('Browser.Events');var $elm$browser$Browser$Events$on = F3( function (node, name, decoder) { return $elm$browser$Browser$Events$subscription( A3($elm$browser$Browser$Events$MySub, node, name, decoder)); });var $elm$browser$Browser$Events$onResize = function (func) { return A3( $elm$browser$Browser$Events$on, 1, 'resize', A2( $elm$json$Json$Decode$field, 'target', A3( $elm$json$Json$Decode$map2, func, A2($elm$json$Json$Decode$field, 'innerWidth', $elm$json$Json$Decode$int), A2($elm$json$Json$Decode$field, 'innerHeight', $elm$json$Json$Decode$int))));};var $author$project$Main$subscriptions = function (model) { return $elm$browser$Browser$Events$onResize( F2( function (_v0, _v1) { return $author$project$Main$GetSvgSize; }));};var $elm$core$Basics$neq = _Utils_notEqual;var $author$project$Main$areDifferentPoint = F2( function (_v0, _v1) { var p1 = _v0; var p2 = _v1; return !_Utils_eq(p1.H, p2.H); });var $author$project$Main$areDifferentVector = F2( function (_v0, _v1) { var v1 = _v0; var v2 = _v1; return !_Utils_eq(v1.H, v2.H); });var $elm$core$Basics$clamp = F3( function (low, high, number) { return (_Utils_cmp(number, low) < 0) ? low : ((_Utils_cmp(number, high) > 0) ? high : number); });var $elm$core$String$concat = function (strings) { return A2($elm$core$String$join, '', strings);};var $author$project$Parse$problemToString = function (p) { switch (p.$) { case 0: var s = p.a; return 'expecting \'' + (s + '\''); case 1: return 'expecting int'; case 2: return 'expecting hex'; case 3: return 'expecting octal'; case 4: return 'expecting binary'; case 5: return 'expecting float'; case 6: return 'expecting number'; case 7: return 'expecting variable'; case 8: var s = p.a; return 'expecting symbol \'' + (s + '\''); case 9: var s = p.a; return 'expecting keyword \'' + (s + '\''); case 10: return 'expecting end'; case 11: return 'unexpected char'; case 12: var s = p.a; return 'problem ' + s; default: return 'bad repeat'; }};var $author$project$Parse$deadEndToString = function (deadend) { return $author$project$Parse$problemToString(deadend.aY) + (' at row ' + ($elm$core$String$fromInt(deadend.a_) + (', col ' + $elm$core$String$fromInt(deadend.aN))));};var $elm$core$List$intersperse = F2( function (sep, xs) { if (!xs.b) { return _List_Nil; } else { var hd = xs.a; var tl = xs.b; var step = F2( function (x, rest) { return A2( $elm$core$List$cons, sep, A2($elm$core$List$cons, x, rest)); }); var spersed = A3($elm$core$List$foldr, step, _List_Nil, tl); return A2($elm$core$List$cons, hd, spersed); } });var $author$project$Parse$deadEndsToString = function (deadEnds) { return $elm$core$String$concat( A2( $elm$core$List$intersperse, '; ', A2($elm$core$List$map, $author$project$Parse$deadEndToString, deadEnds)));};var $elm$core$List$filter = F2( function (isGood, list) { return A3( $elm$core$List$foldr, F2( function (x, xs) { return isGood(x) ? A2($elm$core$List$cons, x, xs) : xs; }), _List_Nil, list); });var $elm$core$Platform$Cmd$batch = _Platform_batch;var $elm$core$Platform$Cmd$none = $elm$core$Platform$Cmd$batch(_List_Nil);var $elm$parser$Parser$Advanced$Bad = F2( function (a, b) { return {$: 1, a: a, b: b}; });var $elm$parser$Parser$Advanced$Good = F3( function (a, b, c) { return {$: 0, a: a, b: b, c: c}; });var $elm$parser$Parser$Advanced$Parser = $elm$core$Basics$identity;var $elm$parser$Parser$Advanced$map = F2( function (func, _v0) { var parse = _v0; return function (s0) { var _v1 = parse(s0); if (!_v1.$) { var p = _v1.a; var a = _v1.b; var s1 = _v1.c; return A3( $elm$parser$Parser$Advanced$Good, p, func(a), s1); } else { var p = _v1.a; var x = _v1.b; return A2($elm$parser$Parser$Advanced$Bad, p, x); } }; });var $elm$parser$Parser$map = $elm$parser$Parser$Advanced$map;var $elm$core$List$any = F2( function (isOkay, list) { any: while (true) { if (!list.b) { return false; } else { var x = list.a; var xs = list.b; if (isOkay(x)) { return true; } else { var $temp$isOkay = isOkay, $temp$list = xs; isOkay = $temp$isOkay; list = $temp$list; continue any; } } } });var $elm$core$List$member = F2( function (x, xs) { return A2( $elm$core$List$any, function (a) { return _Utils_eq(a, x); }, xs); });var $elm$parser$Parser$Advanced$Empty = {$: 0};var $elm$parser$Parser$Advanced$Append = F2( function (a, b) { return {$: 2, a: a, b: b}; });var $elm$parser$Parser$Advanced$oneOfHelp = F3( function (s0, bag, parsers) { oneOfHelp: while (true) { if (!parsers.b) { return A2($elm$parser$Parser$Advanced$Bad, false, bag); } else { var parse = parsers.a; var remainingParsers = parsers.b; var _v1 = parse(s0); if (!_v1.$) { var step = _v1; return step; } else { var step = _v1; var p = step.a; var x = step.b; if (p) { return step; } else { var $temp$s0 = s0, $temp$bag = A2($elm$parser$Parser$Advanced$Append, bag, x), $temp$parsers = remainingParsers; s0 = $temp$s0; bag = $temp$bag; parsers = $temp$parsers; continue oneOfHelp; } } } } });var $elm$parser$Parser$Advanced$oneOf = function (parsers) { return function (s) { return A3($elm$parser$Parser$Advanced$oneOfHelp, s, $elm$parser$Parser$Advanced$Empty, parsers); };};var $elm$parser$Parser$oneOf = $elm$parser$Parser$Advanced$oneOf;var $elm$core$Basics$always = F2( function (a, _v0) { return a; });var $elm$parser$Parser$Advanced$map2 = F3( function (func, _v0, _v1) { var parseA = _v0; var parseB = _v1; return function (s0) { var _v2 = parseA(s0); if (_v2.$ === 1) { var p = _v2.a; var x = _v2.b; return A2($elm$parser$Parser$Advanced$Bad, p, x); } else { var p1 = _v2.a; var a = _v2.b; var s1 = _v2.c; var _v3 = parseB(s1); if (_v3.$ === 1) { var p2 = _v3.a; var x = _v3.b; return A2($elm$parser$Parser$Advanced$Bad, p1 || p2, x); } else { var p2 = _v3.a; var b = _v3.b; var s2 = _v3.c; return A3( $elm$parser$Parser$Advanced$Good, p1 || p2, A2(func, a, b), s2); } } }; });var $elm$parser$Parser$Advanced$ignorer = F2( function (keepParser, ignoreParser) { return A3($elm$parser$Parser$Advanced$map2, $elm$core$Basics$always, keepParser, ignoreParser); });var $elm$parser$Parser$ignorer = $elm$parser$Parser$Advanced$ignorer;var $elm$parser$Parser$Advanced$keeper = F2( function (parseFunc, parseArg) { return A3($elm$parser$Parser$Advanced$map2, $elm$core$Basics$apL, parseFunc, parseArg); });var $elm$parser$Parser$keeper = $elm$parser$Parser$Advanced$keeper;var $elm$core$Tuple$pair = F2( function (a, b) { return _Utils_Tuple2(a, b); });var $elm$parser$Parser$ExpectingFloat = {$: 5};var $elm$parser$Parser$Advanced$consumeBase = _Parser_consumeBase;var $elm$parser$Parser$Advanced$consumeBase16 = _Parser_consumeBase16;var $elm$parser$Parser$Advanced$bumpOffset = F2( function (newOffset, s) { return {aN: s.aN + (newOffset - s.b), c: s.c, d: s.d, b: newOffset, a_: s.a_, a: s.a}; });var $elm$parser$Parser$Advanced$chompBase10 = _Parser_chompBase10;var $elm$parser$Parser$Advanced$isAsciiCode = _Parser_isAsciiCode;var $elm$parser$Parser$Advanced$consumeExp = F2( function (offset, src) { if (A3($elm$parser$Parser$Advanced$isAsciiCode, 101, offset, src) || A3($elm$parser$Parser$Advanced$isAsciiCode, 69, offset, src)) { var eOffset = offset + 1; var expOffset = (A3($elm$parser$Parser$Advanced$isAsciiCode, 43, eOffset, src) || A3($elm$parser$Parser$Advanced$isAsciiCode, 45, eOffset, src)) ? (eOffset + 1) : eOffset; var newOffset = A2($elm$parser$Parser$Advanced$chompBase10, expOffset, src); return _Utils_eq(expOffset, newOffset) ? (-newOffset) : newOffset; } else { return offset; } });var $elm$parser$Parser$Advanced$consumeDotAndExp = F2( function (offset, src) { return A3($elm$parser$Parser$Advanced$isAsciiCode, 46, offset, src) ? A2( $elm$parser$Parser$Advanced$consumeExp, A2($elm$parser$Parser$Advanced$chompBase10, offset + 1, src), src) : A2($elm$parser$Parser$Advanced$consumeExp, offset, src); });var $elm$parser$Parser$Advanced$AddRight = F2( function (a, b) { return {$: 1, a: a, b: b}; });var $elm$parser$Parser$Advanced$DeadEnd = F4( function (row, col, problem, contextStack) { return {aN: col, aO: contextStack, aY: problem, a_: row}; });var $elm$parser$Parser$Advanced$fromState = F2( function (s, x) { return A2( $elm$parser$Parser$Advanced$AddRight, $elm$parser$Parser$Advanced$Empty, A4($elm$parser$Parser$Advanced$DeadEnd, s.a_, s.aN, x, s.c)); });var $elm$parser$Parser$Advanced$finalizeInt = F5( function (invalid, handler, startOffset, _v0, s) { var endOffset = _v0.a; var n = _v0.b; if (handler.$ === 1) { var x = handler.a; return A2( $elm$parser$Parser$Advanced$Bad, true, A2($elm$parser$Parser$Advanced$fromState, s, x)); } else { var toValue = handler.a; return _Utils_eq(startOffset, endOffset) ? A2( $elm$parser$Parser$Advanced$Bad, _Utils_cmp(s.b, startOffset) < 0, A2($elm$parser$Parser$Advanced$fromState, s, invalid)) : A3( $elm$parser$Parser$Advanced$Good, true, toValue(n), A2($elm$parser$Parser$Advanced$bumpOffset, endOffset, s)); } });var $elm$parser$Parser$Advanced$fromInfo = F4( function (row, col, x, context) { return A2( $elm$parser$Parser$Advanced$AddRight, $elm$parser$Parser$Advanced$Empty, A4($elm$parser$Parser$Advanced$DeadEnd, row, col, x, context)); });var $elm$core$String$toFloat = _String_toFloat;var $elm$parser$Parser$Advanced$finalizeFloat = F6( function (invalid, expecting, intSettings, floatSettings, intPair, s) { var intOffset = intPair.a; var floatOffset = A2($elm$parser$Parser$Advanced$consumeDotAndExp, intOffset, s.a); if (floatOffset < 0) { return A2( $elm$parser$Parser$Advanced$Bad, true, A4($elm$parser$Parser$Advanced$fromInfo, s.a_, s.aN - (floatOffset + s.b), invalid, s.c)); } else { if (_Utils_eq(s.b, floatOffset)) { return A2( $elm$parser$Parser$Advanced$Bad, false, A2($elm$parser$Parser$Advanced$fromState, s, expecting)); } else { if (_Utils_eq(intOffset, floatOffset)) { return A5($elm$parser$Parser$Advanced$finalizeInt, invalid, intSettings, s.b, intPair, s); } else { if (floatSettings.$ === 1) { var x = floatSettings.a; return A2( $elm$parser$Parser$Advanced$Bad, true, A2($elm$parser$Parser$Advanced$fromState, s, invalid)); } else { var toValue = floatSettings.a; var _v1 = $elm$core$String$toFloat( A3($elm$core$String$slice, s.b, floatOffset, s.a)); if (_v1.$ === 1) { return A2( $elm$parser$Parser$Advanced$Bad, true, A2($elm$parser$Parser$Advanced$fromState, s, invalid)); } else { var n = _v1.a; return A3( $elm$parser$Parser$Advanced$Good, true, toValue(n), A2($elm$parser$Parser$Advanced$bumpOffset, floatOffset, s)); } } } } } });var $elm$parser$Parser$Advanced$number = function (c) { return function (s) { if (A3($elm$parser$Parser$Advanced$isAsciiCode, 48, s.b, s.a)) { var zeroOffset = s.b + 1; var baseOffset = zeroOffset + 1; return A3($elm$parser$Parser$Advanced$isAsciiCode, 120, zeroOffset, s.a) ? A5( $elm$parser$Parser$Advanced$finalizeInt, c.aU, c.aj, baseOffset, A2($elm$parser$Parser$Advanced$consumeBase16, baseOffset, s.a), s) : (A3($elm$parser$Parser$Advanced$isAsciiCode, 111, zeroOffset, s.a) ? A5( $elm$parser$Parser$Advanced$finalizeInt, c.aU, c.aq, baseOffset, A3($elm$parser$Parser$Advanced$consumeBase, 8, baseOffset, s.a), s) : (A3($elm$parser$Parser$Advanced$isAsciiCode, 98, zeroOffset, s.a) ? A5( $elm$parser$Parser$Advanced$finalizeInt, c.aU, c.aa, baseOffset, A3($elm$parser$Parser$Advanced$consumeBase, 2, baseOffset, s.a), s) : A6( $elm$parser$Parser$Advanced$finalizeFloat, c.aU, c.ag, c.am, c.ah, _Utils_Tuple2(zeroOffset, 0), s))); } else { return A6( $elm$parser$Parser$Advanced$finalizeFloat, c.aU, c.ag, c.am, c.ah, A3($elm$parser$Parser$Advanced$consumeBase, 10, s.b, s.a), s); } };};var $elm$parser$Parser$Advanced$float = F2( function (expecting, invalid) { return $elm$parser$Parser$Advanced$number( { aa: $elm$core$Result$Err(invalid), ag: expecting, ah: $elm$core$Result$Ok($elm$core$Basics$identity), aj: $elm$core$Result$Err(invalid), am: $elm$core$Result$Ok($elm$core$Basics$toFloat), aU: invalid, aq: $elm$core$Result$Err(invalid) }); });var $elm$parser$Parser$float = A2($elm$parser$Parser$Advanced$float, $elm$parser$Parser$ExpectingFloat, $elm$parser$Parser$ExpectingFloat);var $elm$parser$Parser$Advanced$succeed = function (a) { return function (s) { return A3($elm$parser$Parser$Advanced$Good, false, a, s); };};var $elm$parser$Parser$succeed = $elm$parser$Parser$Advanced$succeed;var $elm$parser$Parser$ExpectingSymbol = function (a) { return {$: 8, a: a};};var $elm$parser$Parser$Advanced$Token = F2( function (a, b) { return {$: 0, a: a, b: b}; });var $elm$parser$Parser$Advanced$isSubString = _Parser_isSubString;var $elm$core$Basics$not = _Basics_not;var $elm$parser$Parser$Advanced$token = function (_v0) { var str = _v0.a; var expecting = _v0.b; var progress = !$elm$core$String$isEmpty(str); return function (s) { var _v1 = A5($elm$parser$Parser$Advanced$isSubString, str, s.b, s.a_, s.aN, s.a); var newOffset = _v1.a; var newRow = _v1.b; var newCol = _v1.c; return _Utils_eq(newOffset, -1) ? A2( $elm$parser$Parser$Advanced$Bad, false, A2($elm$parser$Parser$Advanced$fromState, s, expecting)) : A3( $elm$parser$Parser$Advanced$Good, progress, 0, {aN: newCol, c: s.c, d: s.d, b: newOffset, a_: newRow, a: s.a}); };};var $elm$parser$Parser$Advanced$symbol = $elm$parser$Parser$Advanced$token;var $elm$parser$Parser$symbol = function (str) { return $elm$parser$Parser$Advanced$symbol( A2( $elm$parser$Parser$Advanced$Token, str, $elm$parser$Parser$ExpectingSymbol(str)));};var $author$project$Parse$signFloat = $elm$parser$Parser$oneOf( _List_fromArray( [ A2( $elm$parser$Parser$keeper, A2( $elm$parser$Parser$ignorer, $elm$parser$Parser$succeed($elm$core$Basics$negate), $elm$parser$Parser$symbol('-')), $elm$parser$Parser$float), $elm$parser$Parser$float ]));var $elm$parser$Parser$Advanced$isSubChar = _Parser_isSubChar;var $elm$parser$Parser$Advanced$chompWhileHelp = F5( function (isGood, offset, row, col, s0) { chompWhileHelp: while (true) { var newOffset = A3($elm$parser$Parser$Advanced$isSubChar, isGood, offset, s0.a); if (_Utils_eq(newOffset, -1)) { return A3( $elm$parser$Parser$Advanced$Good, _Utils_cmp(s0.b, offset) < 0, 0, {aN: col, c: s0.c, d: s0.d, b: offset, a_: row, a: s0.a}); } else { if (_Utils_eq(newOffset, -2)) { var $temp$isGood = isGood, $temp$offset = offset + 1, $temp$row = row + 1, $temp$col = 1, $temp$s0 = s0; isGood = $temp$isGood; offset = $temp$offset; row = $temp$row; col = $temp$col; s0 = $temp$s0; continue chompWhileHelp; } else { var $temp$isGood = isGood, $temp$offset = newOffset, $temp$row = row, $temp$col = col + 1, $temp$s0 = s0; isGood = $temp$isGood; offset = $temp$offset; row = $temp$row; col = $temp$col; s0 = $temp$s0; continue chompWhileHelp; } } } });var $elm$parser$Parser$Advanced$chompWhile = function (isGood) { return function (s) { return A5($elm$parser$Parser$Advanced$chompWhileHelp, isGood, s.b, s.a_, s.aN, s); };};var $elm$parser$Parser$Advanced$spaces = $elm$parser$Parser$Advanced$chompWhile( function (c) { return (c === ' ') || ((c === '\n') || (c === '\r')); });var $elm$parser$Parser$spaces = $elm$parser$Parser$Advanced$spaces;var $author$project$Parse$parseCoords = A2( $elm$parser$Parser$keeper, A2( $elm$parser$Parser$keeper, $elm$parser$Parser$succeed($elm$core$Tuple$pair), A2( $elm$parser$Parser$ignorer, A2( $elm$parser$Parser$ignorer, A2($elm$parser$Parser$ignorer, $author$project$Parse$signFloat, $elm$parser$Parser$spaces), $elm$parser$Parser$symbol(',')), $elm$parser$Parser$spaces)), $author$project$Parse$signFloat);var $author$project$Parse$named2DParser = F4( function (nameParser, leftDelim, rightDelim, wrap) { return A2( $elm$parser$Parser$keeper, A2( $elm$parser$Parser$keeper, $elm$parser$Parser$succeed( F2( function (name, _v0) { var x = _v0.a; var y = _v0.b; return wrap( {H: name, Y: x, Z: y}); })), A2( $elm$parser$Parser$ignorer, A2( $elm$parser$Parser$ignorer, A2( $elm$parser$Parser$ignorer, A2( $elm$parser$Parser$ignorer, A2($elm$parser$Parser$ignorer, nameParser, $elm$parser$Parser$spaces), $elm$parser$Parser$symbol('=')), $elm$parser$Parser$spaces), $elm$parser$Parser$symbol(leftDelim)), $elm$parser$Parser$spaces)), A2( $elm$parser$Parser$ignorer, A2($elm$parser$Parser$ignorer, $author$project$Parse$parseCoords, $elm$parser$Parser$spaces), $elm$parser$Parser$symbol(rightDelim))); });var $elm$core$Set$Set_elm_builtin = $elm$core$Basics$identity;var $elm$core$Set$empty = $elm$core$Dict$empty;var $elm$parser$Parser$ExpectingVariable = {$: 7};var $elm$core$Dict$get = F2( function (targetKey, dict) { get: while (true) { if (dict.$ === -2) { return $elm$core$Maybe$Nothing; } else { var key = dict.b; var value = dict.c; var left = dict.d; var right = dict.e; var _v1 = A2($elm$core$Basics$compare, targetKey, key); switch (_v1) { case 0: var $temp$targetKey = targetKey, $temp$dict = left; targetKey = $temp$targetKey; dict = $temp$dict; continue get; case 1: return $elm$core$Maybe$Just(value); default: var $temp$targetKey = targetKey, $temp$dict = right; targetKey = $temp$targetKey; dict = $temp$dict; continue get; } } } });var $elm$core$Dict$member = F2( function (key, dict) { var _v0 = A2($elm$core$Dict$get, key, dict); if (!_v0.$) { return true; } else { return false; } });var $elm$core$Set$member = F2( function (key, _v0) { var dict = _v0; return A2($elm$core$Dict$member, key, dict); });var $elm$parser$Parser$Advanced$varHelp = F7( function (isGood, offset, row, col, src, indent, context) { varHelp: while (true) { var newOffset = A3($elm$parser$Parser$Advanced$isSubChar, isGood, offset, src); if (_Utils_eq(newOffset, -1)) { return {aN: col, c: context, d: indent, b: offset, a_: row, a: src}; } else { if (_Utils_eq(newOffset, -2)) { var $temp$isGood = isGood, $temp$offset = offset + 1, $temp$row = row + 1, $temp$col = 1, $temp$src = src, $temp$indent = indent, $temp$context = context; isGood = $temp$isGood; offset = $temp$offset; row = $temp$row; col = $temp$col; src = $temp$src; indent = $temp$indent; context = $temp$context; continue varHelp; } else { var $temp$isGood = isGood, $temp$offset = newOffset, $temp$row = row, $temp$col = col + 1, $temp$src = src, $temp$indent = indent, $temp$context = context; isGood = $temp$isGood; offset = $temp$offset; row = $temp$row; col = $temp$col; src = $temp$src; indent = $temp$indent; context = $temp$context; continue varHelp; } } } });var $elm$parser$Parser$Advanced$variable = function (i) { return function (s) { var firstOffset = A3($elm$parser$Parser$Advanced$isSubChar, i.aE, s.b, s.a); if (_Utils_eq(firstOffset, -1)) { return A2( $elm$parser$Parser$Advanced$Bad, false, A2($elm$parser$Parser$Advanced$fromState, s, i.ag)); } else { var s1 = _Utils_eq(firstOffset, -2) ? A7($elm$parser$Parser$Advanced$varHelp, i.al, s.b + 1, s.a_ + 1, 1, s.a, s.d, s.c) : A7($elm$parser$Parser$Advanced$varHelp, i.al, firstOffset, s.a_, s.aN + 1, s.a, s.d, s.c); var name = A3($elm$core$String$slice, s.b, s1.b, s.a); return A2($elm$core$Set$member, name, i.aA) ? A2( $elm$parser$Parser$Advanced$Bad, false, A2($elm$parser$Parser$Advanced$fromState, s, i.ag)) : A3($elm$parser$Parser$Advanced$Good, true, name, s1); } };};var $elm$parser$Parser$variable = function (i) { return $elm$parser$Parser$Advanced$variable( {ag: $elm$parser$Parser$ExpectingVariable, al: i.al, aA: i.aA, aE: i.aE});};var $author$project$Parse$pointName = $elm$parser$Parser$variable( {al: $elm$core$Char$isDigit, aA: $elm$core$Set$empty, aE: $elm$core$Char$isUpper});var $author$project$Parse$point = A4($author$project$Parse$named2DParser, $author$project$Parse$pointName, '(', ')', $elm$core$Basics$identity);var $author$project$Parse$vectorName = $elm$parser$Parser$variable( {al: $elm$core$Char$isDigit, aA: $elm$core$Set$empty, aE: $elm$core$Char$isLower});var $author$project$Parse$vector = A4($author$project$Parse$named2DParser, $author$project$Parse$vectorName, '<', '>', $elm$core$Basics$identity);var $author$project$Main$parserMaster = function (model) { return $elm$parser$Parser$oneOf( _List_fromArray( [ A2( $elm$parser$Parser$map, function (p) { return A2($elm$core$List$member, p, model.r) ? _Utils_update( model, {I: 'Duplicate Point'}) : _Utils_update( model, { w: '', r: A2($elm$core$List$cons, p, model.r) }); }, $author$project$Parse$point), A2( $elm$parser$Parser$map, function (v) { return A2($elm$core$List$member, v, model.t) ? _Utils_update( model, {I: 'Duplicate Vector'}) : _Utils_update( model, { w: '', t: A2($elm$core$List$cons, v, model.t) }); }, $author$project$Parse$vector) ]));};var $elm$parser$Parser$DeadEnd = F3( function (row, col, problem) { return {aN: col, aY: problem, a_: row}; });var $elm$parser$Parser$problemToDeadEnd = function (p) { return A3($elm$parser$Parser$DeadEnd, p.a_, p.aN, p.aY);};var $elm$parser$Parser$Advanced$bagToList = F2( function (bag, list) { bagToList: while (true) { switch (bag.$) { case 0: return list; case 1: var bag1 = bag.a; var x = bag.b; var $temp$bag = bag1, $temp$list = A2($elm$core$List$cons, x, list); bag = $temp$bag; list = $temp$list; continue bagToList; default: var bag1 = bag.a; var bag2 = bag.b; var $temp$bag = bag1, $temp$list = A2($elm$parser$Parser$Advanced$bagToList, bag2, list); bag = $temp$bag; list = $temp$list; continue bagToList; } } });var $elm$parser$Parser$Advanced$run = F2( function (_v0, src) { var parse = _v0; var _v1 = parse( {aN: 1, c: _List_Nil, d: 1, b: 0, a_: 1, a: src}); if (!_v1.$) { var value = _v1.b; return $elm$core$Result$Ok(value); } else { var bag = _v1.b; return $elm$core$Result$Err( A2($elm$parser$Parser$Advanced$bagToList, bag, _List_Nil)); } });var $elm$parser$Parser$run = F2( function (parser, source) { var _v0 = A2($elm$parser$Parser$Advanced$run, parser, source); if (!_v0.$) { var a = _v0.a; return $elm$core$Result$Ok(a); } else { var problems = _v0.a; return $elm$core$Result$Err( A2($elm$core$List$map, $elm$parser$Parser$problemToDeadEnd, problems)); } });var $author$project$Main$update = F2( function (msg, model) { switch (msg.$) { case 3: var text = msg.a; return _Utils_Tuple2( _Utils_update( model, {w: text}), $elm$core$Platform$Cmd$none); case 0: if (model.w !== '') { var _v1 = A2( $elm$parser$Parser$run, $author$project$Main$parserMaster(model), model.w); if (!_v1.$) { var newModel = _v1.a; return _Utils_Tuple2(newModel, $elm$core$Platform$Cmd$none); } else { var err = _v1.a; return _Utils_Tuple2( _Utils_update( model, { I: $author$project$Parse$deadEndsToString(err) }), $elm$core$Platform$Cmd$none); } } else { return _Utils_Tuple2(model, $elm$core$Platform$Cmd$none); } case 1: var pointToDelete = msg.a; return _Utils_Tuple2( _Utils_update( model, { r: A2( $elm$core$List$filter, $author$project$Main$areDifferentPoint(pointToDelete), model.r) }), $elm$core$Platform$Cmd$none); case 2: var vectorToDelete = msg.a; return _Utils_Tuple2( _Utils_update( model, { t: A2( $elm$core$List$filter, $author$project$Main$areDifferentVector(vectorToDelete), model.t) }), $elm$core$Platform$Cmd$none); case 4: return _Utils_Tuple2(model, $author$project$Main$getSvgSizeCmd); case 5: if (!msg.a.$) { var element = msg.a.a; var svg = model.E; var updatedSvg = _Utils_update( svg, { i: {v: element.ad.v, A: element.ad.A} }); return _Utils_Tuple2( _Utils_update( model, {E: updatedSvg}), $elm$core$Platform$Cmd$none); } else { return _Utils_Tuple2(model, $author$project$Main$getSvgSizeCmd); } default: var moved = msg.a; var svg = model.E; var newScale = svg.J * (1 - (moved / 1000)); var updatedSvg = _Utils_update( svg, { J: A3($elm$core$Basics$clamp, 1, 1000, newScale) }); return _Utils_Tuple2( _Utils_update( model, {E: updatedSvg}), $elm$core$Platform$Cmd$none); } });var $author$project$Main$WheelMoved = function (a) { return {$: 6, a: a};};var $elm$json$Json$Encode$string = _Json_wrap;var $elm$html$Html$Attributes$stringProperty = F2( function (key, string) { return A2( _VirtualDom_property, key, $elm$json$Json$Encode$string(string)); });var $elm$html$Html$Attributes$class = $elm$html$Html$Attributes$stringProperty('className');var $elm$html$Html$div = _VirtualDom_node('div');var $elm$virtual_dom$VirtualDom$text = _VirtualDom_text;var $elm$html$Html$text = $elm$virtual_dom$VirtualDom$text;var $author$project$Main$errorToDiv = function (error) { return A2( $elm$html$Html$div, _List_fromArray( [ $elm$html$Html$Attributes$class('error') ]), _List_fromArray( [ $elm$html$Html$text(error) ]));};var $elm$html$Html$Attributes$id = $elm$html$Html$Attributes$stringProperty('id');var $elm$svg$Svg$trustedNode = _VirtualDom_nodeNS('http://www.w3.org/2000/svg');var $elm$svg$Svg$defs = $elm$svg$Svg$trustedNode('defs');var $elm$svg$Svg$Attributes$fill = _VirtualDom_attribute('fill');var $elm$svg$Svg$Attributes$id = _VirtualDom_attribute('id');var $elm$svg$Svg$marker = $elm$svg$Svg$trustedNode('marker');var $elm$svg$Svg$Attributes$markerHeight = _VirtualDom_attribute('markerHeight');var $elm$svg$Svg$Attributes$markerWidth = _VirtualDom_attribute('markerWidth');var $elm$svg$Svg$Attributes$orient = _VirtualDom_attribute('orient');var $elm$svg$Svg$Attributes$points = _VirtualDom_attribute('points');var $elm$svg$Svg$polygon = $elm$svg$Svg$trustedNode('polygon');var $elm$svg$Svg$Attributes$refX = _VirtualDom_attribute('refX');var $elm$svg$Svg$Attributes$refY = _VirtualDom_attribute('refY');var $elm$svg$Svg$Attributes$stroke = _VirtualDom_attribute('stroke');var $elm$svg$Svg$Attributes$strokeWidth = _VirtualDom_attribute('stroke-width');var $author$project$Draw$arrowMarker = A2( $elm$svg$Svg$defs, _List_Nil, _List_fromArray( [ A2( $elm$svg$Svg$marker, _List_fromArray( [ $elm$svg$Svg$Attributes$id('arrowhead'), $elm$svg$Svg$Attributes$markerWidth('10'), $elm$svg$Svg$Attributes$markerHeight('7'), $elm$svg$Svg$Attributes$refX('9'), $elm$svg$Svg$Attributes$refY('3.5'), $elm$svg$Svg$Attributes$orient('auto') ]), _List_fromArray( [ A2( $elm$svg$Svg$polygon, _List_fromArray( [ $elm$svg$Svg$Attributes$points('0 0, 10 3.5, 0 7'), $elm$svg$Svg$Attributes$fill('blue'), $elm$svg$Svg$Attributes$stroke('blue'), $elm$svg$Svg$Attributes$strokeWidth('0') ]), _List_Nil) ])) ]));var $author$project$Draw$centerX = function (svg) { return (svg.i.A / 2) + svg.S.Y;};var $author$project$Draw$centerY = function (svg) { return (svg.i.v / 2) + svg.S.Z;};var $elm$svg$Svg$Attributes$class = _VirtualDom_attribute('class');var $elm$core$String$fromFloat = _String_fromNumber;var $elm$svg$Svg$g = $elm$svg$Svg$trustedNode('g');var $elm$svg$Svg$line = $elm$svg$Svg$trustedNode('line');var $elm$svg$Svg$Attributes$x1 = _VirtualDom_attribute('x1');var $elm$svg$Svg$Attributes$x2 = _VirtualDom_attribute('x2');var $elm$svg$Svg$Attributes$y1 = _VirtualDom_attribute('y1');var $elm$svg$Svg$Attributes$y2 = _VirtualDom_attribute('y2');var $author$project$Draw$axis = function (svg) { return A2( $elm$svg$Svg$g, _List_fromArray( [ $elm$svg$Svg$Attributes$class('axis') ]), _List_fromArray( [ A2( $elm$svg$Svg$line, _List_fromArray( [ $elm$svg$Svg$Attributes$x1('0'), $elm$svg$Svg$Attributes$y1( $elm$core$String$fromFloat( $author$project$Draw$centerY(svg))), $elm$svg$Svg$Attributes$x2( $elm$core$String$fromFloat(svg.i.A)), $elm$svg$Svg$Attributes$y2( $elm$core$String$fromFloat( $author$project$Draw$centerY(svg))), $elm$svg$Svg$Attributes$class('x-axis') ]), _List_Nil), A2( $elm$svg$Svg$line, _List_fromArray( [ $elm$svg$Svg$Attributes$x1( $elm$core$String$fromFloat( $author$project$Draw$centerX(svg))), $elm$svg$Svg$Attributes$y1('0'), $elm$svg$Svg$Attributes$x2( $elm$core$String$fromFloat( $author$project$Draw$centerX(svg))), $elm$svg$Svg$Attributes$y2( $elm$core$String$fromFloat(svg.i.v)), $elm$svg$Svg$Attributes$class('y-axis') ]), _List_Nil) ]));};var $elm$svg$Svg$Attributes$height = _VirtualDom_attribute('height');var $elm$core$List$repeatHelp = F3( function (result, n, value) { repeatHelp: while (true) { if (n <= 0) { return result; } else { var $temp$result = A2($elm$core$List$cons, value, result), $temp$n = n - 1, $temp$value = value; result = $temp$result; n = $temp$n; value = $temp$value; continue repeatHelp; } } });var $elm$core$List$repeat = F2( function (n, value) { return A3($elm$core$List$repeatHelp, _List_Nil, n, value); });var $elm$core$Basics$round = _Basics_round;var $author$project$Draw$transformX = F2( function (svg, x) { return $author$project$Draw$centerX(svg) + (x * svg.J); });var $author$project$Draw$transformY = F2( function (svg, y) { return $author$project$Draw$centerY(svg) - (y * svg.J); });var $author$project$Draw$grid = F2( function (svg, gridScale) { var toSvgY = function (y) { return $elm$core$String$fromFloat( A2($author$project$Draw$transformY, svg, y)); }; var toSvgX = function (x) { return $elm$core$String$fromFloat( A2($author$project$Draw$transformX, svg, x)); }; return _Utils_ap( A2( $elm$core$List$indexedMap, function (i) { return function (_v0) { return A2( $elm$svg$Svg$line, _List_fromArray( [ $elm$svg$Svg$Attributes$x1( $elm$core$String$fromFloat(0)), $elm$svg$Svg$Attributes$y1( toSvgY(i * gridScale)), $elm$svg$Svg$Attributes$x2( $elm$core$String$fromFloat(svg.i.A)), $elm$svg$Svg$Attributes$y2( toSvgY(i * gridScale)) ]), _List_Nil); }; }, A2( $elm$core$List$repeat, $elm$core$Basics$round(svg.i.v / 2), 0)), _Utils_ap( A2( $elm$core$List$indexedMap, function (i) { return function (_v1) { return A2( $elm$svg$Svg$line, _List_fromArray( [ $elm$svg$Svg$Attributes$x1( $elm$core$String$fromFloat(0)), $elm$svg$Svg$Attributes$y1( toSvgY(i * (-gridScale))), $elm$svg$Svg$Attributes$x2( $elm$core$String$fromFloat(svg.i.A)), $elm$svg$Svg$Attributes$y2( toSvgY(i * (-gridScale))) ]), _List_Nil); }; }, A2( $elm$core$List$repeat, $elm$core$Basics$round(svg.i.v / 2), 0)), _Utils_ap( A2( $elm$core$List$indexedMap, function (i) { return function (_v2) { return A2( $elm$svg$Svg$line, _List_fromArray( [ $elm$svg$Svg$Attributes$y1( $elm$core$String$fromFloat(0)), $elm$svg$Svg$Attributes$x1( toSvgX(i * gridScale)), $elm$svg$Svg$Attributes$y2( $elm$core$String$fromFloat(svg.i.v)), $elm$svg$Svg$Attributes$x2( toSvgX(i * gridScale)) ]), _List_Nil); }; }, A2( $elm$core$List$repeat, $elm$core$Basics$round(svg.i.A / 2), 0)), A2( $elm$core$List$indexedMap, function (i) { return function (_v3) { return A2( $elm$svg$Svg$line, _List_fromArray( [ $elm$svg$Svg$Attributes$y1( $elm$core$String$fromFloat(0)), $elm$svg$Svg$Attributes$x1( toSvgX(i * (-gridScale))), $elm$svg$Svg$Attributes$y2( $elm$core$String$fromFloat(svg.i.v)), $elm$svg$Svg$Attributes$x2( toSvgX(i * (-gridScale))) ]), _List_Nil); }; }, A2( $elm$core$List$repeat, $elm$core$Basics$round(svg.i.A / 2), 0))))); });var $elm$core$Basics$pow = _Basics_pow;var $author$project$Draw$gridSpacing = function (scale) { var targetPixelSpacing = 50; var worldSpacing = targetPixelSpacing / scale; var power = $elm$core$Basics$round( A2($elm$core$Basics$logBase, 10, worldSpacing)); return A2($elm$core$Basics$pow, 10, power);};var $author$project$Draw$mainGrid = function (svg) { var spacing = $author$project$Draw$gridSpacing(svg.J); return A2( $elm$svg$Svg$g, _List_fromArray( [ $elm$svg$Svg$Attributes$class('main-grid') ]), A2($author$project$Draw$grid, svg, spacing * 5));};var $elm$svg$Svg$circle = $elm$svg$Svg$trustedNode('circle');var $elm$svg$Svg$Attributes$cx = _VirtualDom_attribute('cx');var $elm$svg$Svg$Attributes$cy = _VirtualDom_attribute('cy');var $elm$svg$Svg$Attributes$r = _VirtualDom_attribute('r');var $author$project$Draw$transformCoordinates = F3( function (svg, x, y) { return _Utils_Tuple2( A2($author$project$Draw$transformX, svg, x), A2($author$project$Draw$transformY, svg, y)); });var $author$project$Draw$pointToSvg = F2( function (svg, _v0) { var point = _v0; var _v1 = A3($author$project$Draw$transformCoordinates, svg, point.Y, point.Z); var svgX = _v1.a; var svgY = _v1.b; return A2( $elm$svg$Svg$circle, _List_fromArray( [ $elm$svg$Svg$Attributes$r('4'), $elm$svg$Svg$Attributes$cx( $elm$core$String$fromFloat(svgX)), $elm$svg$Svg$Attributes$cy( $elm$core$String$fromFloat(svgY)), $elm$svg$Svg$Attributes$stroke('red'), $elm$svg$Svg$Attributes$strokeWidth('2'), $elm$svg$Svg$Attributes$fill('red') ]), _List_Nil); });var $author$project$Draw$secundGrid = function (svg) { var spacing = $author$project$Draw$gridSpacing(svg.J); return ((spacing * svg.J) > 10) ? A2( $elm$svg$Svg$g, _List_fromArray( [ $elm$svg$Svg$Attributes$class('secund-grid') ]), A2($author$project$Draw$grid, svg, spacing)) : A2($elm$svg$Svg$g, _List_Nil, _List_Nil);};var $elm$svg$Svg$svg = $elm$svg$Svg$trustedNode('svg');var $elm$svg$Svg$Attributes$markerEnd = _VirtualDom_attribute('marker-end');var $author$project$Draw$vectorToSvg = F2( function (svg, _v0) { var vector = _v0; var _v1 = A3($author$project$Draw$transformCoordinates, svg, vector.Y, vector.Z); var svgX = _v1.a; var svgY = _v1.b; return A2( $elm$svg$Svg$line, _List_fromArray( [ $elm$svg$Svg$Attributes$x1( $elm$core$String$fromFloat( $author$project$Draw$centerX(svg))), $elm$svg$Svg$Attributes$y1( $elm$core$String$fromFloat( $author$project$Draw$centerY(svg))), $elm$svg$Svg$Attributes$x2( $elm$core$String$fromFloat(svgX)), $elm$svg$Svg$Attributes$y2( $elm$core$String$fromFloat(svgY)), $elm$svg$Svg$Attributes$stroke('blue'), $elm$svg$Svg$Attributes$strokeWidth('2'), $elm$svg$Svg$Attributes$markerEnd('url(#arrowhead)') ]), _List_Nil); });var $elm$svg$Svg$Attributes$viewBox = _VirtualDom_attribute('viewBox');var $elm$svg$Svg$Attributes$width = _VirtualDom_attribute('width');var $author$project$Draw$mainSvg = F3( function (zeroSvg, points, vectors) { return A2( $elm$svg$Svg$svg, _List_fromArray( [ $elm$svg$Svg$Attributes$id('graph'), $elm$svg$Svg$Attributes$width( $elm$core$String$fromFloat(zeroSvg.i.A)), $elm$svg$Svg$Attributes$height( $elm$core$String$fromFloat(zeroSvg.i.v)), $elm$svg$Svg$Attributes$viewBox( '0 0 ' + ($elm$core$String$fromFloat(zeroSvg.i.A) + (' ' + $elm$core$String$fromFloat(zeroSvg.i.v)))) ]), _List_fromArray( [ $author$project$Draw$arrowMarker, $author$project$Draw$secundGrid(zeroSvg), $author$project$Draw$mainGrid(zeroSvg), $author$project$Draw$axis(zeroSvg), A2( $elm$svg$Svg$g, _List_fromArray( [ $elm$svg$Svg$Attributes$class('points') ]), A2( $elm$core$List$map, $author$project$Draw$pointToSvg(zeroSvg), points)), A2( $elm$svg$Svg$g, _List_fromArray( [ $elm$svg$Svg$Attributes$class('vectors') ]), A2( $elm$core$List$map, $author$project$Draw$vectorToSvg(zeroSvg), vectors)) ])); });var $elm$json$Json$Decode$at = F2( function (fields, decoder) { return A3($elm$core$List$foldr, $elm$json$Json$Decode$field, decoder, fields); });var $elm$json$Json$Decode$float = _Json_decodeFloat;var $elm$virtual_dom$VirtualDom$Normal = function (a) { return {$: 0, a: a};};var $elm$virtual_dom$VirtualDom$on = _VirtualDom_on;var $elm$html$Html$Events$on = F2( function (event, decoder) { return A2( $elm$virtual_dom$VirtualDom$on, event, $elm$virtual_dom$VirtualDom$Normal(decoder)); });var $author$project$Main$onWheel = function (tagger) { return A2( $elm$html$Html$Events$on, 'wheel', A2( $elm$json$Json$Decode$map, tagger, A2( $elm$json$Json$Decode$at, _List_fromArray( ['deltaY']), $elm$json$Json$Decode$float)));};var $author$project$Main$DeletePoint = function (a) { return {$: 1, a: a};};var $elm$html$Html$button = _VirtualDom_node('button');var $elm$html$Html$Events$onClick = function (msg) { return A2( $elm$html$Html$Events$on, 'click', $elm$json$Json$Decode$succeed(msg));};var $author$project$Parse$pointToString = function (_v0) { var p = _v0; return p.H + (': ' + ('(' + ($elm$core$String$fromFloat(p.Y) + (',' + ($elm$core$String$fromFloat(p.Z) + ')')))));};var $author$project$Main$pointToDiv = function (point) { return A2( $elm$html$Html$div, _List_fromArray( [ $elm$html$Html$Attributes$class('entry') ]), _List_fromArray( [ A2( $elm$html$Html$div, _List_fromArray( [ $elm$html$Html$Attributes$class('entry-text') ]), _List_fromArray( [ $elm$html$Html$text( $author$project$Parse$pointToString(point)) ])), A2( $elm$html$Html$button, _List_fromArray( [ $elm$html$Html$Attributes$class('minus-button'), $elm$html$Html$Events$onClick( $author$project$Main$DeletePoint(point)) ]), _List_fromArray( [ $elm$html$Html$text('-') ])) ]));};var $elm$html$Html$a = _VirtualDom_node('a');var $elm$html$Html$Attributes$href = function (url) { return A2( $elm$html$Html$Attributes$stringProperty, 'href', _VirtualDom_noJavaScriptUri(url));};var $elm$html$Html$img = _VirtualDom_node('img');var $elm$html$Html$Attributes$src = function (url) { return A2( $elm$html$Html$Attributes$stringProperty, 'src', _VirtualDom_noJavaScriptOrHtmlUri(url));};var $elm$virtual_dom$VirtualDom$style = _VirtualDom_style;var $elm$html$Html$Attributes$style = $elm$virtual_dom$VirtualDom$style;var $elm$html$Html$Attributes$target = $elm$html$Html$Attributes$stringProperty('target');var $author$project$Main$socialsDiv = A2( $elm$html$Html$a, _List_fromArray( [ $elm$html$Html$Attributes$class('socials'), $elm$html$Html$Attributes$target('_black'), $elm$html$Html$Attributes$href('https://github.com/tedius-git/zero') ]), _List_fromArray( [ A2( $elm$html$Html$img, _List_fromArray( [ $elm$html$Html$Attributes$src('./src/assets/github-mark.svg'), A2($elm$html$Html$Attributes$style, 'height', '30px') ]), _List_Nil) ]));var $author$project$Main$DeleteVector = function (a) { return {$: 2, a: a};};var $author$project$Parse$vectorToString = function (_v0) { var v = _v0; return v.H + (': ' + ('<' + ($elm$core$String$fromFloat(v.Y) + (',' + ($elm$core$String$fromFloat(v.Z) + '>')))));};var $author$project$Main$vectorToDiv = function (vector) { return A2( $elm$html$Html$div, _List_fromArray( [ $elm$html$Html$Attributes$class('entry') ]), _List_fromArray( [ A2( $elm$html$Html$div, _List_fromArray( [ $elm$html$Html$Attributes$class('entry-text') ]), _List_fromArray( [ $elm$html$Html$text( $author$project$Parse$vectorToString(vector)) ])), A2( $elm$html$Html$button, _List_fromArray( [ $elm$html$Html$Attributes$class('minus-button'), $elm$html$Html$Events$onClick( $author$project$Main$DeleteVector(vector)) ]), _List_fromArray( [ $elm$html$Html$text('-') ])) ]));};var $author$project$Main$Add = {$: 0};var $author$project$Main$UpdateInput = function (a) { return {$: 3, a: a};};var $elm$html$Html$form = _VirtualDom_node('form');var $elm$html$Html$input = _VirtualDom_node('input');var $elm$html$Html$Events$alwaysStop = function (x) { return _Utils_Tuple2(x, true);};var $elm$virtual_dom$VirtualDom$MayStopPropagation = function (a) { return {$: 1, a: a};};var $elm$html$Html$Events$stopPropagationOn = F2( function (event, decoder) { return A2( $elm$virtual_dom$VirtualDom$on, event, $elm$virtual_dom$VirtualDom$MayStopPropagation(decoder)); });var $elm$json$Json$Decode$string = _Json_decodeString;var $elm$html$Html$Events$targetValue = A2( $elm$json$Json$Decode$at, _List_fromArray( ['target', 'value']), $elm$json$Json$Decode$string);var $elm$html$Html$Events$onInput = function (tagger) { return A2( $elm$html$Html$Events$stopPropagationOn, 'input', A2( $elm$json$Json$Decode$map, $elm$html$Html$Events$alwaysStop, A2($elm$json$Json$Decode$map, tagger, $elm$html$Html$Events$targetValue)));};var $elm$html$Html$Events$alwaysPreventDefault = function (msg) { return _Utils_Tuple2(msg, true);};var $elm$virtual_dom$VirtualDom$MayPreventDefault = function (a) { return {$: 2, a: a};};var $elm$html$Html$Events$preventDefaultOn = F2( function (event, decoder) { return A2( $elm$virtual_dom$VirtualDom$on, event, $elm$virtual_dom$VirtualDom$MayPreventDefault(decoder)); });var $elm$html$Html$Events$onSubmit = function (msg) { return A2( $elm$html$Html$Events$preventDefaultOn, 'submit', A2( $elm$json$Json$Decode$map, $elm$html$Html$Events$alwaysPreventDefault, $elm$json$Json$Decode$succeed(msg)));};var $elm$html$Html$Attributes$value = $elm$html$Html$Attributes$stringProperty('value');var $author$project$Main$viewInput = function (inputText) { return A2( $elm$html$Html$form, _List_fromArray( [ $elm$html$Html$Attributes$class('add'), $elm$html$Html$Events$onSubmit($author$project$Main$Add) ]), _List_fromArray( [ A2( $elm$html$Html$input, _List_fromArray( [ $elm$html$Html$Attributes$class('add-input'), $elm$html$Html$Attributes$value(inputText), $elm$html$Html$Events$onInput($author$project$Main$UpdateInput) ]), _List_Nil), A2( $elm$html$Html$button, _List_fromArray( [ $elm$html$Html$Attributes$class('plus-button'), $elm$html$Html$Events$onClick($author$project$Main$Add) ]), _List_fromArray( [ $elm$html$Html$text('+') ])) ]));};var $author$project$Main$view = function (model) { return A2( $elm$html$Html$div, _List_fromArray( [ $elm$html$Html$Attributes$class('app') ]), _List_fromArray( [ A2( $elm$html$Html$div, _List_fromArray( [ $elm$html$Html$Attributes$class('input') ]), _List_fromArray( [ $author$project$Main$viewInput(model.w), A2( $elm$html$Html$div, _List_Nil, _List_fromArray( [ $author$project$Main$errorToDiv(model.I) ])), A2( $elm$html$Html$div, _List_Nil, $elm$core$List$reverse( A2($elm$core$List$map, $author$project$Main$pointToDiv, model.r))), A2( $elm$html$Html$div, _List_Nil, $elm$core$List$reverse( A2($elm$core$List$map, $author$project$Main$vectorToDiv, model.t))), A2( $elm$html$Html$div, _List_fromArray( [ $elm$html$Html$Attributes$class('spacer') ]), _List_Nil), $author$project$Main$socialsDiv ])), A2( $elm$html$Html$div, _List_fromArray( [ $elm$html$Html$Attributes$id('svg'), $author$project$Main$onWheel($author$project$Main$WheelMoved) ]), _List_fromArray( [ A3($author$project$Draw$mainSvg, model.E, model.r, model.t) ])) ]));};var $author$project$Main$main = $elm$browser$Browser$element( {aT: $author$project$Main$init, a$: $author$project$Main$subscriptions, a1: $author$project$Main$update, a2: $author$project$Main$view});_Platform_export({'Main':{'init':$author$project$Main$main( $elm$json$Json$Decode$succeed(0))(0)}});}(this));